Преглед на файлове

Erased the method that allowed direct access to the arrays in
HolonElement and fixed a bug.

The world is better off without that function.

Ludwig Tietze преди 6 години
родител
ревизия
1d6ff04271

+ 3 - 3
src/classes/HolonElement.java

@@ -114,7 +114,7 @@ public class HolonElement implements IGraphedElement{
         setSign(element.getEnergyPerElement());
         setAvailableEnergyPerElementAt(element.getEnergyPerElement());
         for (int i = 0; i < availableEnergyPerElementAt.length; i++) {
-            availableEnergyPerElementAt[i] = element.getAvailableEnergyPerElementAt()[i];
+            availableEnergyPerElementAt[i] = element.getAvailableEnergyAt(i);
         }
         setGraphPoints(new LinkedList<>());
         for (Point p : element.getGraphPoints()) {
@@ -143,7 +143,7 @@ public class HolonElement implements IGraphedElement{
      *
      * @return availableEnergyPerElementAt Array of Floats
      */
-    public float[] getAvailableEnergyPerElementAt() {
+    /*public float[] getAvailableEnergyPerElementAt() {
         return availableEnergyPerElementAt;
     }
 
@@ -163,7 +163,7 @@ public class HolonElement implements IGraphedElement{
      * Get the energyPerElement currently available
      */
     public float getAvailableEnergyAt(int timestep) {
-        return this.availableEnergyPerElementAt[timestep%localPeriod];//TODO:use an attribute here
+        return this.availableEnergyPerElementAt[UnitGraph.getEffectiveIndex(this, timestep)];
     }
 
     /**

+ 1 - 1
src/classes/HolonSwitch.java

@@ -214,7 +214,7 @@ public class HolonSwitch extends AbstractCpsObject implements IGraphedElement {
 	 * @return boolean[] the States of each Iteration
 	 */
 	public boolean/*[]*/ getActiveAt(int i) {
-		return activeAt[i];
+		return activeAt[UnitGraph.getEffectiveIndex(this, i)];
 	}
 	
 	public boolean[] getValueArray() {

+ 3 - 3
src/tests/PraktikumHolonsTestClasses.java

@@ -185,10 +185,10 @@ public class PraktikumHolonsTestClasses {
 		HolonElement ele2 = new HolonElement("Fridge", 1, -50);
 		HolonElement ele3 = new HolonElement(ele2);
 
-        assertTrue("Array not empty", ele1.getAvailableEnergyPerElementAt()[0] == -20);
-        assertTrue("Array not empty", ele1.getAvailableEnergyPerElementAt()[2] == -20);
+        assertTrue("Array not empty", ele1.getAvailableEnergyAt(0) == -20);
+        assertTrue("Array not empty", ele1.getAvailableEnergyAt(2) == -20);
         ele1.setAvailableEnergyPerElementAt(2, -10);
-        assertTrue("Array not empty", ele1.getAvailableEnergyPerElementAt()[2] == -10);
+        assertTrue("Array not empty", ele1.getAvailableEnergyAt(2) == -10);
         assertTrue("Name not correct", ele1.getEleName().equals("TV"));
         ele1.setEleName(ele2.getEleName());
 		assertTrue("Name not correct", ele1.getEleName().equals("Fridge"));

+ 6 - 6
src/ui/controller/HolonCanvasController.java

@@ -100,8 +100,8 @@ public class HolonCanvasController {
 		for (AbstractCpsObject obj : objects) {
 			if (obj instanceof HolonObject) {
 				for (HolonElement ele : ((HolonObject) obj).getElements()) {
-                    if (ele.getAvailableEnergyPerElementAt()[tStep] > 0 && ele.isActive()) {
-                        val += ele.getAvailableEnergyPerElementAt()[tStep] * ele.getAmount();
+                    if (ele.getAvailableEnergyAt(tStep) > 0 && ele.isActive()) {
+                        val += ele.getAvailableEnergyAt(tStep) * ele.getAmount();
                     }
                 }
 				if (val > 0)
@@ -131,8 +131,8 @@ public class HolonCanvasController {
 		for (AbstractCpsObject obj : objects) {
 			if (obj instanceof HolonObject) {
 				for (HolonElement ele : ((HolonObject) obj).getElements()) {
-                    if (ele.getAvailableEnergyPerElementAt()[tStep] < 0 && ele.isActive()) {
-                        val += ele.getAvailableEnergyPerElementAt()[tStep] * ele.getAmount();
+                    if (ele.getAvailableEnergyAt(tStep) < 0 && ele.isActive()) {
+                        val += ele.getAvailableEnergyAt(tStep) * ele.getAmount();
                     }
                 }
 			} else if (obj instanceof CpsUpperNode) {
@@ -148,8 +148,8 @@ public class HolonCanvasController {
 		for (AbstractCpsObject obj : objects) {
 			if (obj instanceof HolonObject) {
 				for (HolonElement ele : ((HolonObject) obj).getElements()) {
-                    if (ele.getAvailableEnergyPerElementAt()[tStep] > 0 && ele.isActive()) {
-                        val += ele.getAvailableEnergyPerElementAt()[tStep] * ele.getAmount();
+                    if (ele.getAvailableEnergyAt(tStep) > 0 && ele.isActive()) {
+                        val += ele.getAvailableEnergyAt(tStep) * ele.getAmount();
                     }
                 }
 			} else if (obj instanceof CpsUpperNode) {

+ 2 - 2
src/ui/view/StatisticGraph.java

@@ -165,7 +165,7 @@ public class StatisticGraph extends JPanel {
         float temp = 0;
         for (HolonElement e : obj.getElements()) {
             if (e.isActive()) {
-                temp = temp + e.getAvailableEnergyPerElementAt()[model.getCurIteration()];
+                temp = temp + e.getAvailableEnergyAt(model.getCurIteration());
             }
         }
         return temp;
@@ -693,7 +693,7 @@ public class StatisticGraph extends JPanel {
         for (AbstractCpsObject obj : objects) {
             if (obj instanceof HolonObject) {
                 for (HolonElement ele : ((HolonObject) obj).getElements()) {
-                    if (ele.isActive() && ele.getAvailableEnergyPerElementAt()[tStep] < 0 ) {
+                    if (ele.isActive() && ele.getAvailableEnergyAt(tStep) < 0 ) {
                         val += ele.getOverallEnergyAtTimeStep(tStep);
                     }
                 }

+ 29 - 17
src/ui/view/UnitGraph.java

@@ -24,6 +24,7 @@ import java.util.LinkedList;
 public class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, ComponentListener {
 
     private static final long serialVersionUID = 1L;
+	public static final int STANDARD_GRAPH_ACCURACY = 100;
     private GeneralPath graphCurve = new GeneralPath();
     private float maximum = 0;
     // Information shown when a Point is Dragged
@@ -38,7 +39,7 @@ public class UnitGraph extends JPanel implements MouseListener, MouseMotionListe
     // Scale for the Graph
     private double scaleX;
     private double scaleY;
-    private float[] arrayOfFloats = null;
+    //private float[] arrayOfFloats = null;
     private boolean[] arrayOfBooleans = null;
     private double width = -1;
     private double height = -1;
@@ -105,13 +106,15 @@ public class UnitGraph extends JPanel implements MouseListener, MouseMotionListe
         }
         g2.drawLine(border, this.getHeight() - border, this.getWidth() - border, this.getHeight() - border);
 
-        int effectiveX=getEffectiveIndex(current, model.getCurIteration());
+        int effectiveX;
+        if(current!=null)effectiveX=getEffectiveIndex(model, current, model.getCurIteration());
+        else effectiveX=0;
         
         if (isElement) {
             // fill array with values from the pointList in a HolonElement
             fillArrayofValue();
 
-            if (arrayOfFloats != null) {
+            if (current != null) {
                 // Draw the Lines
                 g2.setStroke(new BasicStroke(2));
                 g2.setColor(Color.BLACK);
@@ -134,17 +137,17 @@ public class UnitGraph extends JPanel implements MouseListener, MouseMotionListe
 
                 // Iteration Value
                 //TODO: added function getGraphIterations see if it works
-                textWidth = g.getFontMetrics().stringWidth("" + arrayOfFloats[effectiveX]) + 2;
+                textWidth = g.getFontMetrics().stringWidth("" + ((HolonElement)current).getAvailableEnergyAt(model.getCurIteration())/*arrayOfFloats[effectiveX]*/) + 2;
                 if (textWidth
-                        + (effectiveX) * (this.getWidth() - (border * 2)) / (model.getIterations() - 1) + 2
+                        + (effectiveX) * (this.getWidth() - (border * 2)) / (/*model.getIterations()*/100 - 1) + 2
                         + border <= this.getWidth()) {
-                    g2.drawString("" + arrayOfFloats[effectiveX],
-                            (effectiveX) * (this.getWidth() - (border * 2)) / (model.getIterations() - 1)
+                    g2.drawString("" + ((HolonElement)current).getAvailableEnergyAt(model.getCurIteration()),
+                            (effectiveX) * (this.getWidth() - (border * 2)) / (/*model.getIterations()*/100 - 1)
                                     + 2 + border,
                             this.getHeight() - 10);
                 } else {
-                    g2.drawString("" + arrayOfFloats[effectiveX],
-                            (effectiveX) * (this.getWidth() - (border * 2)) / (model.getIterations() - 1)
+                    g2.drawString("" + ((HolonElement)current).getAvailableEnergyAt(model.getCurIteration()),
+                            (effectiveX) * (this.getWidth() - (border * 2)) / (/*model.getIterations()*/100 - 1)
                                     + border - textWidth,
                             this.getHeight() - 10);
                 }
@@ -556,7 +559,7 @@ public class UnitGraph extends JPanel implements MouseListener, MouseMotionListe
     public void empty() {
         pointList = null;
         tempElements = null;
-        arrayOfFloats = null;
+        current = null;
         arrayOfBooleans = null;
         isSwitch = false;
         isElement = false;
@@ -604,7 +607,7 @@ public class UnitGraph extends JPanel implements MouseListener, MouseMotionListe
      * @param selectedElement which should be visualized
      */
     public void repaintWithNewElement(ArrayList<HolonElement> selectedElement) {
-        arrayOfFloats = selectedElement.get(selectedElement.size() - 1).getAvailableEnergyPerElementAt();
+        //arrayOfFloats = selectedElement.get(selectedElement.size() - 1).getAvailableEnergyPerElementAt();
         current = selectedElement.get(selectedElement.size()-1);
         tempElements=selectedElement;
         pointList = selectedElement.get(selectedElement.size() - 1).getGraphPoints();
@@ -691,10 +694,11 @@ public class UnitGraph extends JPanel implements MouseListener, MouseMotionListe
         for (HolonElement he : tempElements) {
             maximum = getMaximum(he);
             he.setGraphPoints((LinkedList<Point>) pointList.clone());
-            for (int i = 0; i < arrayOfFloats.length; i++) {
-                he.getAvailableEnergyPerElementAt()[i] = convertToValueY(getYValueAt2((int) (i * width / (model.getIterations() - 1))));
+            for (int i = 0; i < STANDARD_GRAPH_ACCURACY; i++) {//!!!!!
+            	he.setAvailableEnergyPerElementAt(i, convertToValueY(getYValueAt2((int) (i * width / (100 - 1)))));
+                //he.getAvailableEnergyPerElementAt()[i] = convertToValueY(getYValueAt2((int) (i * width / (100 - 1))));
             }
-            arrayOfFloats = he.getAvailableEnergyPerElementAt();
+            //arrayOfFloats = he.getAvailableEnergyPerElementAt();
         }
     }
 
@@ -861,10 +865,18 @@ public class UnitGraph extends JPanel implements MouseListener, MouseMotionListe
     	else return model.getGraphIterations();//TODO: maybe rename
     }
     
+    
+    static int lv=0;
+    
+    public static int getEffectiveIndex(Model m, IGraphedElement e, int timeStep){
+    	int o;
+    	if(e.isStretching())o= timeStep*100/m.getIterations();
+    	else o= timeStep%e.getLocalPeriod()*100/e.getLocalPeriod();
+    	return o;//TODO
+    }
+    
     public static int getEffectiveIndex(IGraphedElement e, int timeStep){
-    	Model m=SingletonControl.getInstance().getControl().getModel();
-    	if(e.isStretching())return timeStep*100/m.getIterations();
-    	else return timeStep%e.getLocalPeriod()*100/e.getLocalPeriod();
+    	return getEffectiveIndex(SingletonControl.getInstance().getControl().getModel(),e,timeStep);
     }
     
     public static int getEffectiveIndex(IGraphedElement e){