Pārlūkot izejas kodu

deleteObjectinuppernode ich will pullen!!

Teh-Hai Julian Zheng 8 gadi atpakaļ
vecāks
revīzija
12a5d30862
1 mainītis faili ar 31 papildinājumiem un 10 dzēšanām
  1. 31 10
      src/ui/controller/NodeController.java

+ 31 - 10
src/ui/controller/NodeController.java

@@ -61,6 +61,30 @@ public class NodeController {
 
 	}
 
+	/**
+	 * Delete a AbstactCpsObject from CPSUpperNode
+	 * 
+	 * @param object
+	 * @param upperNode
+	 */
+	public void deleteObjectInUpperNode(AbstractCpsObject object, CpsUpperNode upperNode) {
+		CpsEdge e = null;
+		for (AbstractCpsObject cps : upperNode.getNodes()) {
+			for (CpsEdge p : cps.getConnections()) {
+				if (p.getA() == object || p.getB() == object) {
+					e = p;
+				}
+			}
+			if (!model.getClipboradObjects().contains(cps)) {
+				cps.getConnectedTo().remove(e);
+			}
+			model.getEdgesOnCanvas().remove(e);
+		}
+		mpC.decIdx(object.getID(), upperNode.getNodesIdx());
+		upperNode.getNodesIdx().remove(object.getID());
+		upperNode.getNodes().remove(object);
+	}
+
 	/**
 	 * Put selected Nodes inside the Upper Node
 	 * 
@@ -70,35 +94,31 @@ public class NodeController {
 
 		ArrayList<AbstractCpsObject> nodes = node.getNodes();
 		ArrayList<CpsEdge> nodeEdges = node.getNodeEdges();
-		HashMap<Integer, Integer> nodeIdx = node.getNodesIdx();
 
 		// Put all selected Nodes into the Upper Node
 		for (Iterator<AbstractCpsObject> it = model.getSelectedCpsObjects().iterator(); it.hasNext();) {
 
+			// füge Neue Objecte in Neuen Node hinzu
 			AbstractCpsObject obj = it.next();
-			nodeIdx.put(obj.getID(), nodes.size());
-			nodes.add(obj);
+			addObjectInUpperNode(obj, node);
 		}
 
-		// remove selected nodes
-
+		// Füge die Edges die Alle Objekte vorher verbunden hat in neuen Node
 		for (Iterator<CpsEdge> it = (upperNode == null ? model.getEdgesOnCanvas() : upperNode.getNodeEdges())
 				.iterator(); it.hasNext();) {
 
 			CpsEdge edge = it.next();
 			if (nodes.contains(edge.getA()) && nodes.contains(edge.getB())) {
-
 				nodeEdges.add(edge);
 			}
 
 		}
-
+		// Lösche dann die Edges aus der nächst höheren schicht
 		for (AbstractCpsObject abs : model.getSelectedCpsObjects()) {
 			if (upperNode == null)
 				cvs.deleteObjectOnCanvas(abs);
 			else
-				// MUSS GEÄNDERT WERDEN!!!!!!!!!!!!!!!!!
-				upperNode.getNodes().remove(abs);
+				deleteObjectInUpperNode(abs, upperNode);
 		}
 
 	}
@@ -164,11 +184,12 @@ public class NodeController {
 		for (AbstractCpsObject cps : adj) {
 			CpsEdge newEdge = new CpsEdge(cps, node, maxCapacity.get(adj.indexOf(cps)));
 			// !! Eventuell noch bei getConnections() hinzufügem
+			node.getConnections().add(newEdge);
 			if (upperNode == null)
 				cvs.addEdgeOnCanvas(newEdge);
 			else
 				upperNode.getNodeEdges().add(newEdge);
-			node.getConnections().add(newEdge);
+
 		}
 	}