Browse Source

node of node

Teh-Hai Julian Zheng 7 years ago
parent
commit
cf2de20160

+ 9 - 0
src/ui/controller/Control.java

@@ -39,6 +39,7 @@ public class Control {
 	private final AutoSaveController autoSaveController;
 	private SimulationManager simulationManager;
 	private final StatsController statsController;
+	private final NodeController nodeController;
 	private String autoPath = "";
 
 	/**
@@ -62,6 +63,7 @@ public class Control {
 		this.autoSaveController = new AutoSaveController(model);
 		this.consoleController = new ConsoleController(model);
 		this.statsController = new StatsController(model);
+		this.nodeController = new NodeController(model, canvasController, multiPurposeController);
 		autoPath = System.getProperty("user.home") + "/HolonGUI/Autosave/";
 		File dest = new File(autoPath);
 		// deleteDirectory(dest);
@@ -724,5 +726,12 @@ public class Control {
 	public void removeTrackingObj(HolonObject obj) {
 		statsController.removeTrackingObj(obj);
 	}
+	
+	/**
+	 * Controlling Nodes of Nodes
+	 */
 
+	public void addUpperNode(String nodeName) {
+		nodeController.addNode(nodeName);
+	}
 }

+ 45 - 14
src/ui/controller/NodeController.java

@@ -36,6 +36,15 @@ public class NodeController {
 		cvs.addNewObject(node);
 	}
 
+	/**
+	 * Delete a CpsUpperNode from the Canvas
+	 * 
+	 * @param node
+	 */
+	public void deleteNode(CpsUpperNode node) {
+
+	}
+
 	/**
 	 * 
 	 * @param node
@@ -46,12 +55,17 @@ public class NodeController {
 		ArrayList<CpsEdge> nodeEdges = node.getNodeEdges();
 		HashMap<Integer, Integer> nodeIdx = node.getNodesIdx();
 
+		ArrayList<CpsEdge> toDelete = new ArrayList<>();
+
 		for (Iterator<AbstractCpsObject> it = model.getSelectedCpsObjects().iterator(); it.hasNext();) {
 
 			AbstractCpsObject obj = it.next();
 			nodeIdx.put(obj.getID(), nodes.size());
 			nodes.add(obj);
-			cvs.deleteObjectOnCanvas(obj);
+		}
+
+		for (AbstractCpsObject abs : model.getSelectedCpsObjects()) {
+			cvs.deleteObjectOnCanvas(abs);
 		}
 
 		for (Iterator<CpsEdge> it = model.getEdgesOnCanvas().iterator(); it.hasNext();) {
@@ -59,10 +73,11 @@ public class NodeController {
 			CpsEdge edge = it.next();
 			if (nodes.contains(edge.getA()) && nodes.contains(edge.getB())) {
 				nodeEdges.add(edge);
-				model.removeEdgesOnCanvas(edge);
+				toDelete.add(edge);
 			}
 
 		}
+		model.getEdgesOnCanvas().removeAll(toDelete);
 
 	}
 
@@ -76,6 +91,8 @@ public class NodeController {
 		ArrayList<Float> maxCapacity = new ArrayList<>();
 		ArrayList<CpsEdge> oldEdges = node.getOldEdges();
 
+		ArrayList<CpsEdge> toDelete = new ArrayList<>();
+
 		// float maxCapacity = 0;
 
 		// für alle Edges auf dem Canvas
@@ -89,29 +106,39 @@ public class NodeController {
 			// wenn ausgewählte Objekte in edge und andere auserhalb
 			if (model.getSelectedCpsObjects().contains(edge.getA())
 					&& !model.getSelectedCpsObjects().contains(edge.getB())) {
-				// und wenn in der adj noch nicht vorhanden
-				if (!adj.contains(edge.getA()))
+				// und wenn in der adj noch nicht vorhanden und füg
+				if (!adj.contains(edge.getA())) {
 					adj.add(edge.getB());
+					maxCapacity.add(edge.getCapacity());
+				}
 				// wenn vorhanden teste maxCapacity
-				else if (maxCapacity.get(adj.indexOf(edge.getB())) < edge.getCapacity())
+				else if (maxCapacity.get(adj.indexOf(edge.getB())) < edge.getCapacity()) {
 					maxCapacity.set(adj.indexOf(edge.getB()), edge.getCapacity());
+					System.out.println("aaa");
+				}
 				// speichere alte edge
 				oldEdges.add(edge);
-				model.getEdgesOnCanvas().remove(edge);
+				toDelete.add(edge);
+
 			}
 
 			// Analog
 			else if (!model.getSelectedCpsObjects().contains(edge.getA())
 					&& model.getSelectedCpsObjects().contains(edge.getB())) {
-				if (!adj.contains(edge.getB()))
+				if (!adj.contains(edge.getB())) {
 					adj.add(edge.getA());
-				else if (maxCapacity.get(adj.indexOf(edge.getA())) < edge.getCapacity())
+					maxCapacity.add(edge.getCapacity());
+				} else if (maxCapacity.get(adj.indexOf(edge.getA())) < edge.getCapacity()) {
 					maxCapacity.set(adj.indexOf(edge.getA()), edge.getCapacity());
-
+					System.out.println("bbb");
+				}
 				oldEdges.add(edge);
-				model.getEdgesOnCanvas().remove(edge);
+				toDelete.add(edge);
 			}
 		}
+
+		model.getEdgesOnCanvas().removeAll(toDelete);
+
 		// für alle objekte in adjazenzliste mach
 		for (AbstractCpsObject cps : adj) {
 			CpsEdge newEdge = new CpsEdge(cps, node, maxCapacity.get(adj.indexOf(cps)));
@@ -121,17 +148,21 @@ public class NodeController {
 		}
 	}
 
+	/**
+	 * 
+	 * @return
+	 */
 	private Position calculatePos() {
-		
+
 		Position pos = new Position(0, 0);
-		
-		for (AbstractCpsObject abs  : model.getSelectedCpsObjects()) {
+
+		for (AbstractCpsObject abs : model.getSelectedCpsObjects()) {
 			pos.x += abs.getPosition().x;
 			pos.y += abs.getPosition().y;
 		}
 		pos.x /= model.getSelectedCpsObjects().size();
 		pos.y /= model.getSelectedCpsObjects().size();
-		
+
 		return pos;
 	}
 

+ 1 - 0
src/ui/view/Main.java

@@ -23,6 +23,7 @@ public class Main {
 	 */
 	public static void main(String[] args) {
 
+		
 		// *Design
 		try {
 			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

+ 1 - 1
src/ui/view/MyCanvas.java

@@ -124,7 +124,7 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 		itemCollapse.addActionListener(new ActionListener() {
 			@Override
 			public void actionPerformed(ActionEvent e) {
-
+				control.addUpperNode("NodeOfNode");
 				repaint();
 			}
 		});