Teh-Hai Julian Zheng 7 years ago
parent
commit
7cce5f0a4b
3 changed files with 30 additions and 21 deletions
  1. 6 2
      src/ui/controller/Control.java
  2. 23 18
      src/ui/controller/NodeController.java
  3. 1 1
      src/ui/view/MyCanvas.java

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

@@ -760,7 +760,11 @@ public class Control {
 		nodeController.deleteEdge(edge, upperNode);
 	}
 	
-	public void connectNodes(AbstractCpsObject a, AbstractCpsObject b, CpsUpperNode node) {
-		nodeController.connectNodes(a, b, node);
+	public void connectNodes(CpsEdge edge, CpsUpperNode upperNode) {
+		nodeController.connectNodes(edge,upperNode);
+	}
+	
+	public void disconnectNodes(CpsEdge edge, CpsUpperNode upperNode) {
+		nodeController.disconnectNodes(edge, upperNode);
 	}
 }

+ 23 - 18
src/ui/controller/NodeController.java

@@ -69,7 +69,7 @@ public class NodeController {
 	private void makeNodeOfNodes(CpsUpperNode node, CpsUpperNode upperNode) {
 
 		ArrayList<AbstractCpsObject> nodes = node.getNodes();
-		// ArrayList<CpsEdge> nodeEdges = node.getNodeEdges();
+		ArrayList<CpsEdge> toDelete = new ArrayList<>();
 
 		// Put all selected Nodes into the Upper Node
 		for (Iterator<AbstractCpsObject> it = model.getSelectedCpsObjects().iterator(); it.hasNext();) {
@@ -90,10 +90,13 @@ public class NodeController {
 
 			// kopiere edge in UpperNode
 			if (nodes.contains(edge.getA()) && nodes.contains(edge.getB())) {
+				toDelete.add(edge);
 				addEdge(edge, node);
 			}
 
 		}
+
+		(upperNode == null ? model.getEdgesOnCanvas() : upperNode.getNodeEdges()).removeAll(toDelete);
 		// Lösche dann die Edges aus der nächst höheren schicht
 		for (AbstractCpsObject abs : model.getSelectedCpsObjects()) {
 			if (upperNode == null)
@@ -122,7 +125,8 @@ public class NodeController {
 	}
 
 	/**
-	 * Look for adjacent Nodes connected with the new CpsUpperNode and make Connections
+	 * Look for adjacent Nodes connected with the new CpsUpperNode and make
+	 * Connections
 	 * 
 	 * @param node
 	 * @param upperNode
@@ -131,7 +135,7 @@ public class NodeController {
 
 		ArrayList<AbstractCpsObject> adj = new ArrayList<>();
 		ArrayList<Float> maxCapacity = new ArrayList<>();
-		
+
 		ArrayList<CpsEdge> oldEdges = node.getOldEdges();
 		ArrayList<CpsEdge> toDelete = new ArrayList<>();
 
@@ -179,7 +183,7 @@ public class NodeController {
 		// für alle objekte in adjazenzliste mach
 		for (AbstractCpsObject cps : adj) {
 			CpsEdge newEdge = new CpsEdge(cps, node, maxCapacity.get(adj.indexOf(cps)));
-			removeEdges(cps, node, newEdge);
+			disconnectNodes(newEdge, upperNode);
 			// !! Eventuell noch bei getConnections() hinzufügem
 			// node.getConnections().add(newEdge);
 			if (upperNode == null)
@@ -200,7 +204,7 @@ public class NodeController {
 		// TODO Auto-generated method stub
 		ArrayList<CpsEdge> toDelete = new ArrayList<>();
 
-		//für jede Edge aus upperNode die Node enthält tu sie in toDelete
+		// für jede Edge aus upperNode die Node enthält tu sie in toDelete
 		for (Iterator<CpsEdge> it = (upperNode == null ? model.getEdgesOnCanvas() : upperNode.getNodeEdges())
 				.iterator(); it.hasNext();) {
 
@@ -209,7 +213,7 @@ public class NodeController {
 				toDelete.add(edge);
 
 		}
-		//lösch alle Edges die in toDelete sind und wiederherstell alte Edges
+		// lösch alle Edges die in toDelete sind und wiederherstell alte Edges
 		(upperNode == null ? model.getEdgesOnCanvas() : upperNode.getNodeEdges()).removeAll(toDelete);
 		(upperNode == null ? model.getEdgesOnCanvas() : upperNode.getNodeEdges()).addAll(node.getOldEdges());
 	}
@@ -319,12 +323,12 @@ public class NodeController {
 
 		return pos;
 	}
-	
+
 	private void removeForNodeOfNode(AbstractCpsObject obj, CpsUpperNode upperNode) {
-		
-		mpC.decIdx(obj.getID(), (upperNode == null? model.getCvsObjIdx() : upperNode.getNodesIdx()));
-		(upperNode == null? model.getCvsObjIdx() : upperNode.getNodesIdx()).remove(obj.getID());
-		(upperNode == null? model.getObjectsOnCanvas() : upperNode.getNodes()).remove(obj);
+
+		mpC.decIdx(obj.getID(), (upperNode == null ? model.getCvsObjIdx() : upperNode.getNodesIdx()));
+		(upperNode == null ? model.getCvsObjIdx() : upperNode.getNodesIdx()).remove(obj.getID());
+		(upperNode == null ? model.getObjectsOnCanvas() : upperNode.getNodes()).remove(obj);
 	}
 
 	/**
@@ -393,16 +397,17 @@ public class NodeController {
 	 * @param a
 	 * @param b
 	 */
-	public void connectNodes(AbstractCpsObject a, AbstractCpsObject b, CpsUpperNode node) {
+	public void connectNodes(CpsEdge edge, CpsUpperNode upperNode) {
 		// mache hier Connections in A und B rein
 		// mache diese Edge auch in OldEdges rein des aktuellen CpsUpperNodes
-		 CpsEdge edge = new CpsEdge(a, b, model.getMaxCapacity());
-		 node.getOldEdges().add(edge);
+		upperNode.getOldEdges().add(edge);
 	}
-	
-	private void removeEdges(AbstractCpsObject a, AbstractCpsObject b, CpsEdge edge) {
-		a.getConnections().remove(edge);
-		b.getConnections().remove(edge);
+
+	public void disconnectNodes(CpsEdge edge, CpsUpperNode upperNode) {
+		edge.getA().getConnections().remove(edge);
+		edge.getB().getConnections().remove(edge);
+		if (upperNode != null)
+			upperNode.getOldEdges().remove(edge);
 	}
 
 }

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

@@ -472,7 +472,7 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 		dataSelected = null;
 		edgeHighlight = null;
 		controller.setSelecteEdge(null);
-
+		System.out.println(model.getEdgesOnCanvas().size());
 		// Object Selection
 		for (AbstractCpsObject cps : model.getObjectsOnCanvas()) {
 			cx = cps.getPosition().x;