浏览代码

Statsgraph saving works

Teh-Hai Julian Zheng 7 年之前
父节点
当前提交
199cf9e469

+ 17 - 0
src/classes/CpsUpperNode.java

@@ -11,6 +11,9 @@ public class CpsUpperNode extends AbstractCpsObject {
 	private ArrayList<CpsEdge> nodeEdges;
 	private ArrayList<CpsEdge> oldEdges;
 	private HashMap<Integer, Integer> nodesIdx;
+	
+	@Expose
+	private int leftBorder = 0;
 	// Background Image
 	@Expose
 	private String imgPath = "";
@@ -189,4 +192,18 @@ public class CpsUpperNode extends AbstractCpsObject {
 	public int getImageHeight() {
 		return backgroundHeight;
 	}
+
+	/**
+	 * @return the leftBorder
+	 */
+	public int getLeftBorder() {
+		return leftBorder;
+	}
+
+	/**
+	 * @param leftBorder the leftBorder to set
+	 */
+	public void setLeftBorder(int leftBorder) {
+		this.leftBorder = leftBorder;
+	}
 }

+ 10 - 9
src/ui/controller/ClipboardController.java

@@ -57,8 +57,7 @@ public class ClipboardController {
 	private HashMap<Integer, Integer> eleIDMap;
 	private String sav;
 	private Point point;
-	
-	
+
 	public ClipboardController(Model model, SaveController store, LoadController load, CanvasController cvs,
 			ObjectController obj, NodeController uppC, MultiPurposeController mp) {
 		this.model = model;
@@ -231,7 +230,7 @@ public class ClipboardController {
 		AbstractCpsObject temp = gson.fromJson(jsonElement.getAsJsonObject(), AbstractCpsObject.class);
 		load.initObjects(temp);
 		objIDMapper(temp);
-		updatePosition(temp);
+		updatePosition(temp, upperNode);
 
 		// if its stored before on the canvas just put it there
 		if (temp.getSav().equals(sav)) {
@@ -462,19 +461,21 @@ public class ClipboardController {
 		eleIDMap.put(id, temp.getId());
 
 	}
-
-	private void updatePosition(AbstractCpsObject temp) {
+	
+	private void updatePosition(AbstractCpsObject temp, CpsUpperNode upperNode) {
 		// TODO Auto-generated method stub
 		int x = temp.getPosition().x - point.x;
 		int y = temp.getPosition().y - point.y;
+
+		if (y < 0)
+			y = 0;
+		if (upperNode != null)
+			if (x < upperNode.getLeftBorder())
+				x = upperNode.getLeftBorder();
 		if (x > model.getCanvasX())
 			x = model.getCanvasX();
 		if (y > model.getCanvasX())
 			y = model.getCanvasY();
-		if (y < 0)
-			y = 0;
-		if (x < 0)
-			x = 0;
 
 		temp.setPosition(new Position(x, y));
 

+ 8 - 6
src/ui/controller/NodeController.java

@@ -131,7 +131,7 @@ public class NodeController {
 		}
 
 		for (AbstractCpsObject obj : node.getNodes()) {
-			updatePosition(obj);
+			updatePosition(obj, upperNode);
 			if (upperNode == null)
 				obj.setSav("CVS");
 			else
@@ -562,18 +562,20 @@ public class NodeController {
 			upperNode.getOldEdges().remove(edge);
 	}
 
-	private void updatePosition(AbstractCpsObject temp) {
+	private void updatePosition(AbstractCpsObject temp, CpsUpperNode upperNode) {
 		// TODO Auto-generated method stub
 		int x = temp.getPosition().x - point.x;
 		int y = temp.getPosition().y - point.y;
+
+		if (y < 0)
+			y = 0;
+		if (upperNode != null)
+			if (x < upperNode.getLeftBorder())
+				x = upperNode.getLeftBorder();
 		if (x > model.getCanvasX())
 			x = model.getCanvasX();
 		if (y > model.getCanvasX())
 			y = model.getCanvasY();
-		if (y < 0)
-			y = 0;
-		if (x < 0)
-			x = 0;
 
 		temp.setPosition(new Position(x, y));
 

+ 25 - 0
src/ui/controller/SaveController.java

@@ -12,7 +12,11 @@ import java.io.OutputStream;
 import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 import org.apache.commons.compress.archivers.ArchiveException;
 import org.apache.commons.compress.archivers.ArchiveOutputStream;
@@ -38,7 +42,10 @@ import classes.HolonSwitch;
 import classes.IdCounter;
 import classes.IdCounterElem;
 import classes.Position;
+import classes.TrackedDataSet;
 import ui.model.Model;
+import ui.view.StatisticGraph;
+import ui.view.StatisticGraphPanel;
 
 /**
  * Controller for Storage.
@@ -417,6 +424,24 @@ public class SaveController {
 		// TODO Auto-generated method stub
 		JsonObject temp = new JsonObject();
 		String key = null;
+		List<String> keys = model.getGraphTable().keySet().parallelStream()
+				.collect(Collectors.toCollection(ArrayList::new));
+
+		for (String k : keys) {
+			temp.add("KEY", new JsonPrimitive(k));
+			JsonObject dataSet = new JsonObject();
+			for (int i = 0; i < model.getGraphTable().get(k).getStatGraph().getDataSets().size(); i++) {
+				TrackedDataSet set = model.getGraphTable().get(k).getStatGraph().getDataSets().get(i);
+				dataSet.add("ID", new JsonPrimitive(set.getCpsObject().getId()));
+				dataSet.add("COLOR", gson.toJsonTree(set.getColor(), Color.class));
+				dataSet.add("PROPERTY", new JsonPrimitive(set.getProperty()));
+				temp.add("" + i, gson.toJsonTree(dataSet));
+				dataSet = new JsonObject();
+			}
+
+			file.add("STATSGRAPH" + getNumerator(NUMTYPE.STATSGRAPH), gson.toJsonTree(temp));
+			temp = new JsonObject();
+		}
 
 	}
 

+ 5 - 5
src/ui/view/GUI.java

@@ -920,14 +920,14 @@ public class GUI<E> implements CategoryListener {
 		graphLabel.add(maxGraph, BorderLayout.NORTH);
 		graphLabel.add(medGraph, BorderLayout.CENTER);
 		graphLabel.add(minGraph, BorderLayout.SOUTH);
-		
+
 		toolBarGraph.add(lblSelectedElement);
 		toolBarGraph.add(elementGraph);
-		horizontalStrut = Box.createHorizontalStrut(toolBarGraph.getWidth()-resetGraphBtn.getWidth());
-		
+		horizontalStrut = Box.createHorizontalStrut(toolBarGraph.getWidth() - resetGraphBtn.getWidth());
+
 		toolBarGraph.add(horizontalStrut);
 		resetGraphBtn.setHorizontalAlignment(SwingConstants.RIGHT);
-		
+
 		toolBarGraph.add(resetGraphBtn);
 		toolBarGraph.setFloatable(false);
 		scrollGraph.setRowHeaderView(graphLabel);
@@ -1360,7 +1360,7 @@ public class GUI<E> implements CategoryListener {
 							int x = (int) unc.getMousePosition().getX() + 16;
 							int y = (int) unc.getMousePosition().getY() + 16;
 
-							if (x > unc.borderPos) {
+							if (x > unc.upperNode.getLeftBorder()) {
 
 								AbstractCpsObject h = null;
 								if (tempCps instanceof HolonObject) {

+ 40 - 39
src/ui/view/UpperNodeCanvas.java

@@ -63,7 +63,6 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 	private int cx, cy;
 	private int sx, sy; // Mark Coords
 	private float scalediv20;
-	public int borderPos = 0; // Border Position
 
 	// Path
 	public String path;
@@ -118,7 +117,6 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 	private int animSteps = animDuration / animDelay; // animation Steps;
 	private Position unPos;
 	private ArrayList<Position> savePos;
-	private UnitGraph unitGraph;
 
 	/**
 	 * Constructor.
@@ -134,8 +132,6 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 
 		this.controller = control;
 		this.model = mod;
-		this.unitGraph = unitGraph;
-
 		this.upperNode = UpperNode;
 		this.path = parentPath + upperNode.getName();
 		this.breadCrumb = new JLabel(path);
@@ -143,10 +139,11 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 		scalediv20 = model.getScale() / 20;
 
 		// Cps objecte aus dem border links schieben
-		borderPos = (int) (50 + scalediv20 + scalediv20 + 10);
+		upperNode.setLeftBorder((int) (50 + scalediv20 + scalediv20 + 10));
 		for (AbstractCpsObject cps : upperNode.getNodes()) {
-			if (cps.getPosition().x < model.getScaleDiv2() + borderPos + 5) {
-				cps.setPosition(new Position(borderPos + 5 + model.getScaleDiv2(), cps.getPosition().y));
+			if (cps.getPosition().x < model.getScaleDiv2() + upperNode.getLeftBorder() + 5) {
+				cps.setPosition(
+						new Position(upperNode.getLeftBorder() + 5 + model.getScaleDiv2(), cps.getPosition().y));
 			}
 		}
 
@@ -460,13 +457,14 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 			img = new ImageIcon(upperNode.getImagePath()).getImage();
 			switch (upperNode.getBackgroundMode()) {
 			case BackgroundPopUp.IMAGE_PIXELS:
-				g2.drawImage(img, borderPos, 0, img.getWidth(null), img.getHeight(null), null);
+				g2.drawImage(img, upperNode.getLeftBorder(), 0, img.getWidth(null), img.getHeight(null), null);
 				break;
 			case BackgroundPopUp.STRETCHED:
-				g2.drawImage(img, borderPos, 0, model.getCanvasX(), model.getCanvasY(), null);
+				g2.drawImage(img, upperNode.getLeftBorder(), 0, model.getCanvasX(), model.getCanvasY(), null);
 				break;
 			case BackgroundPopUp.CUSTOM:
-				g2.drawImage(img, borderPos, 0, upperNode.getImageWidht(), upperNode.getImageHeight(), null);
+				g2.drawImage(img, upperNode.getLeftBorder(), 0, upperNode.getImageWidht(), upperNode.getImageHeight(),
+						null);
 				break;
 			default:
 				break;
@@ -475,7 +473,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 
 		// Draw Left Border
 		g2.setColor(new Color(230, 230, 230));
-		g2.fillRect(0, 0, borderPos, this.getHeight());
+		g2.fillRect(0, 0, upperNode.getLeftBorder(), this.getHeight());
 		g2.setColor(Color.BLACK);
 		g2.drawLine(0, 0, this.getWidth(), 0);
 
@@ -504,10 +502,10 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 				int count = 0;
 				for (CpsEdge e : upperNode.getConnections()) {
 					if (e.getA().equals(tempCps)) {
-						g2.drawLine(borderPos >> 1, (int) (model.getScaleDiv2() + scalediv20 + 5
+						g2.drawLine(upperNode.getLeftBorder() >> 1, (int) (model.getScaleDiv2() + scalediv20 + 5
 								+ (model.getScale() + scalediv20 + 10) * count), x, y);
 					} else if (e.getB().equals(tempCps)) {
-						g2.drawLine(borderPos >> 1, (int) (model.getScaleDiv2() + scalediv20 + 5
+						g2.drawLine(upperNode.getLeftBorder() >> 1, (int) (model.getScaleDiv2() + scalediv20 + 5
 								+ (model.getScale() + scalediv20 + 10) * count), x, y);
 					}
 					count++;
@@ -724,15 +722,17 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 							g2.setColor(Color.DARK_GRAY);
 							g2.setStroke(new BasicStroke(2));
 						}
-						g2.drawLine(obj.getPosition().x, obj.getPosition().y, (borderPos >> 1),
+						g2.drawLine(obj.getPosition().x, obj.getPosition().y, (upperNode.getLeftBorder() >> 1),
 								(int) (scalediv20 + 5 + (50 + scalediv20 + 10) * count) + 25);
 						if (showedInformation[0]) {
 							if (ed.getConnected() == 0 || ed.getConnected() == 1) {
 								g2.drawString(ed.getFlow() + "/" + ed.getCapacity(),
-										(obj.getPosition().x + (borderPos >> 1)) / 2, (obj.getPosition().y
-												+ (int) (scalediv20 + 5 + (50 + scalediv20 + 10) * count) + 25) / 2);
+										(obj.getPosition().x + (upperNode.getLeftBorder() >> 1)) / 2,
+										(obj.getPosition().y + (int) (scalediv20 + 5 + (50 + scalediv20 + 10) * count)
+												+ 25) / 2);
 							} else {
-								g2.drawString("not connected", (obj.getPosition().x + (borderPos >> 1)) / 2,
+								g2.drawString("not connected",
+										(obj.getPosition().x + (upperNode.getLeftBorder() >> 1)) / 2,
 										(obj.getPosition().y + (int) (scalediv20 + 5 + (50 + scalediv20 + 10) * count)
 												+ 25) / 2);
 							}
@@ -745,7 +745,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 			if (showedInformation[3]) {
 				g2.setColor(cps.getBorderColor());
 				if (g2.getColor() != Color.WHITE) {
-					g2.fillRect((int) ((borderPos >> 1) - 25 - scalediv20) - 3,
+					g2.fillRect((int) ((upperNode.getLeftBorder() >> 1) - 25 - scalediv20) - 3,
 							(int) (scalediv20 + 5 + (25 + scalediv20 + 10) * count - scalediv20) - 3,
 							(int) (50 + ((scalediv20 + 3) * 2)), (int) (50 + ((scalediv20 + 3) * 2)));
 				}
@@ -767,13 +767,13 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 				if ((cps == tempCps && model.getSelectedCpsObjects().size() == 0 && tempSelected.size() == 0)
 						|| model.getSelectedCpsObjects().contains(cps) || tempSelected.contains(cps)) {
 					g2.setColor(Color.BLUE);
-					g2.fillRect((int) ((borderPos >> 1) - 25 - scalediv20),
+					g2.fillRect((int) ((upperNode.getLeftBorder() >> 1) - 25 - scalediv20),
 							(int) (scalediv20 + 5 + (50 + scalediv20 + 10) * count - scalediv20),
 							(int) (50 + (scalediv20 * 2)), (int) (50 + (scalediv20 * 2)));
 				} else if (cps instanceof HolonObject) {
 					g2.setColor(((HolonObject) cps).getColor());
 
-					g2.fillRect((int) ((borderPos >> 1) - 25 - scalediv20),
+					g2.fillRect((int) ((upperNode.getLeftBorder() >> 1) - 25 - scalediv20),
 							(int) (scalediv20 + 5 + (50 + scalediv20 + 10) * count - scalediv20),
 							(int) (50 + (scalediv20 * 2)), (int) (50 + (scalediv20 * 2)));
 				}
@@ -785,8 +785,8 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 					img = new ImageIcon(this.getClass().getResource(cps.getImage())).getImage();
 				}
 			}
-			g2.drawImage(img, (borderPos >> 1) - 25, (int) (scalediv20 + 5 + (50 + scalediv20 + 10) * count), 50, 50,
-					null);
+			g2.drawImage(img, (upperNode.getLeftBorder() >> 1) - 25,
+					(int) (scalediv20 + 5 + (50 + scalediv20 + 10) * count), 50, 50, null);
 			count++;
 		}
 
@@ -807,7 +807,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 
 		// Border Line
 		g2.setColor(Color.BLACK);
-		g2.drawLine(borderPos, 0, borderPos, this.getHeight());
+		g2.drawLine(upperNode.getLeftBorder(), 0, upperNode.getLeftBorder(), this.getHeight());
 
 		// Tooltip
 		if (toolTip) {
@@ -868,7 +868,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 			}
 		}
 
-		if (e.getX() > borderPos) {
+		if (e.getX() > upperNode.getLeftBorder()) {
 			for (AbstractCpsObject cps : upperNode.getNodes()) {
 				cx = cps.getPosition().x - model.getScaleDiv2();
 				cy = cps.getPosition().y - model.getScaleDiv2();
@@ -909,9 +909,9 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 				} else {
 					cps = ed.getA();
 				}
-				if (x - controller.getScale() <= ((borderPos >> 1) - model.getScaleDiv2())
+				if (x - controller.getScale() <= ((upperNode.getLeftBorder() >> 1) - model.getScaleDiv2())
 						&& y - controller.getScale() <= (scalediv20 + 5 + (model.getScale() + scalediv20 + 10) * count)
-						&& x >= (borderPos >> 1) - model.getScaleDiv2()
+						&& x >= (upperNode.getLeftBorder() >> 1) - model.getScaleDiv2()
 						&& y >= (scalediv20 + 5 + (model.getScale() + scalediv20 + 10) * count)) {
 					tempCps = cps;
 					controller.addTextToConsole("Selected: ", Color.BLACK, 12, false, false, false);
@@ -1071,8 +1071,8 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 					y = e.getY();
 
 					// Make sure its in bounds
-					if (e.getX() < controller.getScaleDiv2() + borderPos + 5)
-						x = controller.getScaleDiv2() + borderPos + 5;
+					if (e.getX() < controller.getScaleDiv2() + upperNode.getLeftBorder() + 5)
+						x = controller.getScaleDiv2() + upperNode.getLeftBorder() + 5;
 					else if (e.getX() > this.getWidth() - controller.getScaleDiv2())
 						x = this.getWidth() - controller.getScaleDiv2();
 					if (e.getY() < controller.getScaleDiv2())
@@ -1099,8 +1099,8 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 							y = (int) (cps.getPosition().y + yDist);
 
 							// Make sure its in bounds
-							if (x < borderPos + 5 + controller.getScaleDiv2())
-								x = controller.getScaleDiv2() + borderPos + 5;
+							if (x < upperNode.getLeftBorder() + 5 + controller.getScaleDiv2())
+								x = controller.getScaleDiv2() + upperNode.getLeftBorder() + 5;
 							else if (x > this.getWidth() - controller.getScaleDiv2())
 								x = this.getWidth() - controller.getScaleDiv2();
 							if (y <= controller.getScaleDiv2())
@@ -1158,9 +1158,10 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 					y2 = sy;
 				}
 
-				if (x1 <= borderPos >> 1
+				if (x1 <= upperNode.getLeftBorder() >> 1
 						&& y1 <= (int) (5 + (model.getScale() + scalediv20 + 10) * count) + model.getScaleDiv2()
-						&& x2 >= borderPos >> 1 && y2 >= (int) (5 + (model.getScale() + scalediv20 + 10) * count)) {
+						&& x2 >= upperNode.getLeftBorder() >> 1
+						&& y2 >= (int) (5 + (model.getScale() + scalediv20 + 10) * count)) {
 					tempSelected.add(cps);
 
 				}
@@ -1200,7 +1201,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 				cps = ed.getA();
 			}
 
-			cx = borderPos >> 1;
+			cx = upperNode.getLeftBorder() >> 1;
 			cy = (int) (scalediv20 + 5 + (50 + scalediv20 + 10) * count);
 			if (x - 50 <= cx && y - 50 <= cy && x >= cx && y >= cy) {
 
@@ -1287,7 +1288,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 					cps = ed.getA();
 				}
 
-				cx = borderPos >> 1;
+				cx = upperNode.getLeftBorder() >> 1;
 				cy = (int) (scalediv20 + 5 + (model.getScale() + scalediv20 + 10) * count);
 
 				if (x - controller.getScale() <= cx && y - controller.getScale() <= cy && x >= cx && y >= cy
@@ -1366,7 +1367,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 		}
 
 		// ins leere Gedragged
-		if (node && x > borderPos) {
+		if (node && x > upperNode.getLeftBorder()) {
 			CpsNode n = new CpsNode("Node");
 
 			n.setPosition(x, y);
@@ -1450,14 +1451,14 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 				// g2.drawImage(img, (borderPos >> 1) - 25, (int) (scalediv20 +
 				// 5 + (50 + scalediv20 + 10) * count), 50, 50, null);
 				if (doTest) {
-					Line2D l = new Line2D.Float((borderPos >> 1) - 25,
+					Line2D l = new Line2D.Float((upperNode.getLeftBorder() >> 1) - 25,
 							(int) (scalediv20 + 5 + 25 + (50 + scalediv20 + 10) * count), obj.getPosition().x,
 							obj.getPosition().y);
-					if ((borderPos >> 1) > obj.getPosition().x) {
-						hx = (borderPos >> 1) - 25 + model.getScaleDiv2() + 7;
+					if ((upperNode.getLeftBorder() >> 1) > obj.getPosition().x) {
+						hx = (upperNode.getLeftBorder() >> 1) - 25 + model.getScaleDiv2() + 7;
 						lx = obj.getPosition().x + model.getScaleDiv2() - 7;
 					} else {
-						lx = (borderPos >> 1) - 25 + model.getScaleDiv2() - 7;
+						lx = (upperNode.getLeftBorder() >> 1) - 25 + model.getScaleDiv2() - 7;
 						hx = obj.getPosition().x + model.getScaleDiv2() + 7;
 					}
 					if ((int) (scalediv20 + 5 + (50 + scalediv20 + 10) * count) > obj.getPosition().y) {