Browse Source

total consumption und total production

Kevin Trometer 8 years ago
parent
commit
da57003cd8
2 changed files with 99 additions and 6 deletions
  1. 1 1
      src/classes/HolonElement.java
  2. 98 5
      src/ui/view/StatisticGraph.java

+ 1 - 1
src/classes/HolonElement.java

@@ -65,7 +65,7 @@ public class HolonElement {
 	 * @param element
 	 *            element to copy
 	 */
-	public HolonElement(HolonElement element) {
+	public HolonElement(HolonElement element)	 {
 		setEleName(element.getEleName());
 		setAmount(element.getAmount());
 		setEnergy(element.getEnergy());

+ 98 - 5
src/ui/view/StatisticGraph.java

@@ -15,6 +15,8 @@ import javax.swing.ImageIcon;
 import javax.swing.JPanel;
 import javax.swing.Timer;
 
+import classes.AbstractCpsObject;
+import classes.CpsUpperNode;
 import classes.HolonElement;
 import classes.HolonObject;
 import classes.HolonSwitch;
@@ -181,7 +183,7 @@ public class StatisticGraph extends JPanel {
 	public void calcMaximum() {
 		maximum = 0;
 		for (TrackedDataSet set : objects) {
-			int val = 0;
+			float val = 0;
 			switch (set.getProperty()) {
 			case TrackedDataSet.CONSUMPTION:
 				for (HolonElement h : ((HolonObject) set.getCpsObject()).getElements()) {
@@ -208,10 +210,11 @@ public class StatisticGraph extends JPanel {
 				val = 1;
 				break;
 			case TrackedDataSet.TOTAL_PRODUCTION:
-				//TODO
+				val = getMaxTotalProduction(model.getObjectsOnCanvas());
 				break;
 			case TrackedDataSet.TOTAL_CONSUMPTION:
-				//TODO
+				val = getMaxTotalConsumption(model.getObjectsOnCanvas());
+				val *= -1;
 				break;
 			case TrackedDataSet.PERCENT_SUPPLIED:
 			case TrackedDataSet.PERCENT_NOT_SUPPLIED:
@@ -276,10 +279,10 @@ public class StatisticGraph extends JPanel {
 				}
 				break;
 			case TrackedDataSet.TOTAL_PRODUCTION:
-
+				set.setValAt(getTotalProductionAt(model.getObjectsOnCanvas(), model.getCurIteration()), model.getCurIteration());
 				break;
 			case TrackedDataSet.TOTAL_CONSUMPTION:
-
+				set.setValAt(-getTotalConsumptionAt(model.getObjectsOnCanvas(), model.getCurIteration()), model.getCurIteration());
 				break;
 			case TrackedDataSet.PERCENT_SUPPLIED:
 
@@ -344,5 +347,95 @@ public class StatisticGraph extends JPanel {
 			}
 		}
 	}
+	
+	/**
+	 * get the max total production of the given Objects
+	 *
+	 *  @param objects List of Objects
+	 */
+	private float getMaxTotalProduction(ArrayList<AbstractCpsObject> objects) {
+		float val = 0;
+		
+		for (AbstractCpsObject obj: objects) {
+			if (obj instanceof HolonObject) {
+				for (HolonElement ele: ((HolonObject) obj).getElements()) {
+					if (ele.getEnergy() > 0) {
+						val += ele.getEnergy() * ele.getAmount();
+					}
+				}
+			} else if (obj instanceof CpsUpperNode) {
+				val += getMaxTotalProduction(((CpsUpperNode) obj).getNodes());
+			}
+		}
+		return val;
+	}
+	
+	/**
+	 * get the max total consumption of the given Objects
+	 *
+	 *  @param objects List of Objects
+	 */
+	private float getMaxTotalConsumption(ArrayList<AbstractCpsObject> objects) {
+		float val = 0;
+		
+		for (AbstractCpsObject obj: objects) {
+			if (obj instanceof HolonObject) {
+				for (HolonElement ele: ((HolonObject) obj).getElements()) {
+					if (ele.getEnergy() < 0) {
+						val += ele.getEnergy() * ele.getAmount();
+					}
+				}
+			} else if (obj instanceof CpsUpperNode) {
+				val += getMaxTotalConsumption(((CpsUpperNode) obj).getNodes());
+			}
+		}
+		return val;
+	}
+	
+	/**
+	 * get the max total production of the given Objects
+	 *
+	 *  @param objects List of Objects
+	 *  @param tStep
+	 */
+	private float getTotalProductionAt(ArrayList<AbstractCpsObject> objects, int tStep) {
+		float val = 0;
+		
+		for (AbstractCpsObject obj: objects) {
+			if (obj instanceof HolonObject) {
+				for (HolonElement ele: ((HolonObject) obj).getElements()) {
+					if (ele.getEnergyAt()[tStep] > 0 && ele.getActive()) {
+						val += ele.getEnergyAt()[tStep] * ele.getAmount();
+					}
+				}
+			} else if (obj instanceof CpsUpperNode) {
+				val += getTotalProductionAt(((CpsUpperNode) obj).getNodes(), tStep);
+			}
+		}
+		return val;
+	}
+	
+	/**
+	 * get the total consumption of the given Objects at the given timestep
+	 *
+	 *  @param objects List of Objects
+	 *  @param tStep
+	 */
+	private float getTotalConsumptionAt(ArrayList<AbstractCpsObject> objects, int tStep) {
+		float val = 0;
+		
+		for (AbstractCpsObject obj: objects) {
+			if (obj instanceof HolonObject) {
+				for (HolonElement ele: ((HolonObject) obj).getElements()) {
+					if (ele.getEnergyAt()[tStep] < 0 && ele.getActive()) {
+						val += ele.getEnergyAt()[tStep] * ele.getAmount();
+					}
+				}
+			} else if (obj instanceof CpsUpperNode) {
+				val += getTotalConsumptionAt(((CpsUpperNode) obj).getNodes(), tStep);
+			}
+		}
+		return val;
+	}
 
 }