Teh-Hai Julian Zheng 8 years ago
parent
commit
29a6c31f04
3 changed files with 32 additions and 22 deletions
  1. 3 2
      src/ui/controller/Control.java
  2. 27 19
      src/ui/controller/NodeController.java
  3. 2 1
      src/ui/view/MyCanvas.java

+ 3 - 2
src/ui/controller/Control.java

@@ -15,6 +15,7 @@ import classes.AbstractCpsObject;
 import classes.HolonElement;
 import classes.HolonObject;
 import interfaces.CategoryListener;
+import ui.controller.NodeController.MODE;
 import ui.model.Model;
 import ui.view.MyCanvas;
 
@@ -731,7 +732,7 @@ public class Control {
 	 * Controlling Nodes of Nodes
 	 */
 
-	public void addUpperNode(String nodeName) {
-		nodeController.addNode(nodeName);
+	public void addUpperNode(String nodeName, MODE mode) {
+		nodeController.addNode(nodeName, mode);
 	}
 }

+ 27 - 19
src/ui/controller/NodeController.java

@@ -11,6 +11,10 @@ import classes.Position;
 import ui.model.Model;
 
 public class NodeController {
+	
+	public enum MODE {
+		CANVAS, UPPERNODECANVAS
+	}
 
 	private Model model;
 	private CanvasController cvs;
@@ -28,13 +32,17 @@ public class NodeController {
 	 * 
 	 * @param nodeName
 	 */
-	public void addNode(String nodeName) {
+	public void addNode(String nodeName, MODE mode) {
 		CpsUpperNode node = new CpsUpperNode(nodeName);
 		node.setPosition(calculatePos());
-		connectAdjacent(node);
-		makeNodeOfNodes(node);
+		connectAdjacent(node, mode);
+		makeNodeOfNodes(node, mode);
 		cvs.addNewObject(node);
 	}
+	
+	public void addObjectInUpperNode(AbstractCpsObject object) {
+		
+	}
 
 	/**
 	 * Delete a CpsUpperNode from the Canvas
@@ -46,17 +54,16 @@ public class NodeController {
 	}
 
 	/**
-	 * 
+	 * Put selected Nodes inside the Upper Node
 	 * @param node
 	 */
-	private void makeNodeOfNodes(CpsUpperNode node) {
+	private void makeNodeOfNodes(CpsUpperNode node, MODE mode) {
 
 		ArrayList<AbstractCpsObject> nodes = node.getNodes();
 		ArrayList<CpsEdge> nodeEdges = node.getNodeEdges();
 		HashMap<Integer, Integer> nodeIdx = node.getNodesIdx();
-
-		ArrayList<CpsEdge> toDelete = new ArrayList<>();
-
+		
+		//Put all selected Nodes into the Upper Node
 		for (Iterator<AbstractCpsObject> it = model.getSelectedCpsObjects().iterator(); it.hasNext();) {
 
 			AbstractCpsObject obj = it.next();
@@ -64,20 +71,21 @@ public class NodeController {
 			nodes.add(obj);
 		}
 
-		for (AbstractCpsObject abs : model.getSelectedCpsObjects()) {
-			cvs.deleteObjectOnCanvas(abs);
-		}
+		//remove selected nodes 
 
 		for (Iterator<CpsEdge> it = model.getEdgesOnCanvas().iterator(); it.hasNext();) {
 
 			CpsEdge edge = it.next();
 			if (nodes.contains(edge.getA()) && nodes.contains(edge.getB())) {
+
 				nodeEdges.add(edge);
-				toDelete.add(edge);
 			}
 
 		}
-		model.getEdgesOnCanvas().removeAll(toDelete);
+		
+		for (AbstractCpsObject abs : model.getSelectedCpsObjects()) {
+			cvs.deleteObjectOnCanvas(abs);
+		}
 
 	}
 
@@ -85,7 +93,7 @@ public class NodeController {
 	 * 
 	 * @return
 	 */
-	private void connectAdjacent(CpsUpperNode node) {
+	private void connectAdjacent(CpsUpperNode node, MODE mode) {
 
 		ArrayList<AbstractCpsObject> adj = new ArrayList<>();
 		ArrayList<Float> maxCapacity = new ArrayList<>();
@@ -107,14 +115,13 @@ public class NodeController {
 			if (model.getSelectedCpsObjects().contains(edge.getA())
 					&& !model.getSelectedCpsObjects().contains(edge.getB())) {
 				// und wenn in der adj noch nicht vorhanden und füg
-				if (!adj.contains(edge.getA())) {
+				if (!adj.contains(edge.getB())) {
 					adj.add(edge.getB());
 					maxCapacity.add(edge.getCapacity());
 				}
 				// wenn vorhanden teste maxCapacity
 				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);
@@ -125,12 +132,12 @@ public class NodeController {
 			// Analog
 			else if (!model.getSelectedCpsObjects().contains(edge.getA())
 					&& model.getSelectedCpsObjects().contains(edge.getB())) {
-				if (!adj.contains(edge.getB())) {
+				if (!adj.contains(edge.getA())) {
 					adj.add(edge.getA());
 					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);
 				toDelete.add(edge);
@@ -149,13 +156,14 @@ public class NodeController {
 	}
 
 	/**
-	 * 
+	 * Calculate new Position of the Upper Node
 	 * @return
 	 */
 	private Position calculatePos() {
 
 		Position pos = new Position(0, 0);
 
+		// sum(x0 .. xn) / numOfPos, y analog
 		for (AbstractCpsObject abs : model.getSelectedCpsObjects()) {
 			pos.x += abs.getPosition().x;
 			pos.y += abs.getPosition().y;

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

@@ -35,6 +35,7 @@ import classes.HolonObject;
 import classes.HolonSwitch;
 import classes.SubNet;
 import ui.controller.Control;
+import ui.controller.NodeController.MODE;
 import ui.model.Model;
 
 /**
@@ -124,7 +125,7 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 		itemCollapse.addActionListener(new ActionListener() {
 			@Override
 			public void actionPerformed(ActionEvent e) {
-				control.addUpperNode("NodeOfNode");
+				control.addUpperNode("NodeOfNode", MODE.CANVAS);
 				repaint();
 			}
 		});