Просмотр исходного кода

delete Edge handling if one is CpsUpperNode

Teh-Hai Julian Zheng 8 лет назад
Родитель
Сommit
c073b46070

+ 51 - 2
src/ui/controller/CanvasController.java

@@ -10,9 +10,9 @@ import classes.AbstractCpsObject;
 import classes.HolonObject;
 import classes.HolonSwitch;
 import classes.Position;
-import interfaces.CategoryListener;
 import interfaces.ObjectListener;
 import ui.model.Model;
+import ui.view.UpperNodeCanvas;
 
 /**
  * Controller for the Canvas.
@@ -57,7 +57,7 @@ public class CanvasController {
 	 */
 	public void addNewObject(AbstractCpsObject object) {
 		object.setSav("CVS");
-		//object.setConnections(new ArrayList<CpsEdge>());
+		// object.setConnections(new ArrayList<CpsEdge>());
 		addObject(object);
 	}
 
@@ -125,6 +125,8 @@ public class CanvasController {
 		edge.getA().getConnections().remove(edge);
 		edge.getB().getConnections().remove(edge);
 		model.getEdgesOnCanvas().remove(edge);
+		if (edge.getA() instanceof CpsUpperNode || edge.getB() instanceof CpsUpperNode)
+			handleUpperNodes(edge);
 	}
 
 	/**
@@ -221,4 +223,51 @@ public class CanvasController {
 
 		model.getSelectedCpsObjects().clear();
 	}
+
+	/**
+	 * In Case if a One or Both Side of the to Removing Edge is a CpsUpperNode
+	 * @param edge
+	 * @param upperNode
+	 */
+	public void handleUpperNodes(CpsEdge edge) {
+		CpsUpperNode upper = null;
+		ArrayList<CpsEdge> toDelete = new ArrayList<>();
+
+		// wenn A ist upperNOde
+		if (edge.getA() instanceof CpsUpperNode) {
+
+			upper = (CpsUpperNode) edge.getA();
+
+			//wenn in OldEdges eine B enhält
+			for (CpsEdge cpsEdge : upper.getOldEdges()) {
+				if (cpsEdge.getA().equals(edge.getB()) || cpsEdge.getB().equals(edge.getB()))
+					toDelete.add(cpsEdge);
+			}
+			//lösche alle Edges mit B
+			upper.getOldEdges().removeAll(toDelete);
+			//lösche hier alle Connections
+			for (CpsEdge cpsEdge : toDelete) {
+				cpsEdge.getA().getConnections().remove(cpsEdge);
+				cpsEdge.getB().getConnections().remove(cpsEdge);
+			}
+			toDelete.clear();
+		}
+		//Hier analog
+		if (edge.getB() instanceof CpsUpperNode) {
+
+			upper = (CpsUpperNode) edge.getB();
+
+			for (CpsEdge cpsEdge : upper.getOldEdges()) {
+				if (cpsEdge.getA().equals(edge.getA()) || cpsEdge.getB().equals(edge.getA()))
+					toDelete.add(cpsEdge);
+			}
+			upper.getOldEdges().removeAll(toDelete);
+			for (CpsEdge cpsEdge : toDelete) {
+				cpsEdge.getA().getConnections().remove(cpsEdge);
+				cpsEdge.getB().getConnections().remove(cpsEdge);
+			}
+			toDelete.clear();
+		}
+
+	}
 }

+ 10 - 10
src/ui/controller/Control.java

@@ -686,7 +686,7 @@ public class Control {
 	public void setCanvasY(int canvasY) {
 		globalController.setCanvasY(canvasY);
 	}
-	
+
 	public void setMaxCapacity(float cap) {
 		globalController.setMaxCapacity(cap);
 	}
@@ -731,7 +731,7 @@ public class Control {
 	public void removeTrackingObj(HolonObject obj) {
 		statsController.removeTrackingObj(obj);
 	}
-	
+
 	/**
 	 * Controlling Nodes of Nodes
 	 */
@@ -739,31 +739,31 @@ public class Control {
 	public void addUpperNode(String nodeName, CpsUpperNode upperNode) {
 		nodeController.doUpperNode(nodeName, upperNode);
 	}
-	
+
 	public void delUpperNode(CpsUpperNode node, CpsUpperNode upperNode) {
 		nodeController.undoUpperNode(node, upperNode);
 	}
-	
+
 	public void addObjUpperNode(AbstractCpsObject object, CpsUpperNode upperNode) {
 		nodeController.addObjectInUpperNode(object, upperNode);
 	}
-	
+
 	public void delObjUpperNode(AbstractCpsObject object, CpsUpperNode upperNode) {
 		nodeController.deleteObjectInUpperNode(object, upperNode);
 	}
-	
+
 	public void addEdgeUpperNode(CpsEdge edge, CpsUpperNode upperNode) {
 		nodeController.addEdge(edge, upperNode);
 	}
-	
+
 	public void delEdgeUpperNode(CpsEdge edge, CpsUpperNode upperNode) {
 		nodeController.deleteEdge(edge, upperNode);
 	}
-	
+
 	public void connectNodes(CpsEdge edge, CpsUpperNode upperNode) {
-		nodeController.connectNodes(edge,upperNode);
+		nodeController.connectNodes(edge, upperNode);
 	}
-	
+
 	public void disconnectNodes(CpsEdge edge, CpsUpperNode upperNode) {
 		nodeController.disconnectNodes(edge, upperNode);
 	}

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

@@ -183,7 +183,6 @@ 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)));
-			disconnectNodes(newEdge, upperNode);
 			// !! Eventuell noch bei getConnections() hinzufügem
 			// node.getConnections().add(newEdge);
 			if (upperNode == null)
@@ -374,8 +373,6 @@ public class NodeController {
 	 * @param upperNode
 	 */
 	public void addEdge(CpsEdge edge, CpsUpperNode upperNode) {
-		edge.getA().getConnections().add(edge);
-		edge.getB().getConnections().add(edge);
 		upperNode.getNodeEdges().add(edge);
 	}
 
@@ -389,6 +386,8 @@ public class NodeController {
 		edge.getA().getConnections().remove(edge);
 		edge.getB().getConnections().remove(edge);
 		upperNode.getNodeEdges().remove(edge);
+		if (edge.getA() instanceof CpsUpperNode || edge.getB() instanceof CpsUpperNode)
+			cvs.handleUpperNodes(edge);
 	}
 
 	/**