|
@@ -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;
|
|
|
+ }
|
|
|
|
|
|
}
|