Browse Source

CpsUpperNode duplicated Edge fixed

Teh-Hai Julian Zheng 7 năm trước cách đây
mục cha
commit
c18e880992
1 tập tin đã thay đổi với 10 bổ sung7 xóa
  1. 10 7
      src/ui/controller/NodeController.java

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

@@ -212,12 +212,13 @@ public class NodeController {
 		// TODO Auto-generated method stub
 		ArrayList<CpsEdge> toDelete = new ArrayList<>();
 		ArrayList<CpsEdge> lostEdges = new ArrayList<>();
-		ArrayList<AbstractCpsObject> found = (upperNode == null ? model.getObjectsOnCanvas() : upperNode.getNodes());
+		ArrayList<CpsEdge> foundEdges = (upperNode == null ? model.getEdgesOnCanvas() : upperNode.getNodeEdges());
 		ArrayList<AbstractCpsObject> lostChildren = new ArrayList<>();
+		ArrayList<AbstractCpsObject> foundChildren = (upperNode == null ? model.getObjectsOnCanvas()
+				: upperNode.getNodes());
 
 		// 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();) {
+		for (Iterator<CpsEdge> it = foundEdges.iterator(); it.hasNext();) {
 
 			CpsEdge edge = it.next();
 			if (edge.getA().equals(node) || edge.getB().equals(node))
@@ -226,13 +227,14 @@ public class NodeController {
 		}
 		// mark all object that arent in the restored oldEdges
 		for (CpsEdge edge : node.getOldEdges()) {
-			if (node.getNodes().contains(edge.getA()) && !found.contains(edge.getB()) && !lostEdges.contains(edge)) {
+			if (node.getNodes().contains(edge.getA()) && !foundChildren.contains(edge.getB())
+					&& !lostEdges.contains(edge)) {
 				lostChildren.add(edge.getA());
 				lostEdges.add(edge);
 				// edge.getB().getConnections().remove(edge);
 			}
 
-			else if (node.getNodes().contains(edge.getB()) && !found.contains(edge.getA())
+			else if (node.getNodes().contains(edge.getB()) && !foundChildren.contains(edge.getA())
 					&& !lostEdges.contains(edge)) {
 				lostChildren.add(edge.getB());
 				lostEdges.add(edge);
@@ -261,7 +263,8 @@ public class NodeController {
 				// guck einfach in den Connections des Verlorenen nach Edges die
 				// auf der Canvas sind.
 				for (CpsEdge e : lost.getConnections()) {
-					if (found.contains(e.getA()) && found.contains(e.getB()) && !node.getOldEdges().contains(e)) {
+					if (foundChildren.contains(e.getA()) && foundChildren.contains(e.getB())
+							&& !node.getOldEdges().contains(e) && !foundEdges.contains(e)) {
 						node.getOldEdges().add(e);
 						foundCps = true;
 					}
@@ -272,7 +275,7 @@ public class NodeController {
 			// wenn das verlorene Object nicht gefunden
 			if (!foundCps)
 				// für alle auf der Ebene liegende Objekte
-				outerLoop: for (AbstractCpsObject cps : found) {
+				outerLoop: for (AbstractCpsObject cps : foundChildren) {
 				if (!cps.equals(node) && !lostChildren.contains(cps))
 					// such per Backtracking Algorithmus ob der enthalten ist
 					if (backtrackLostChild(cps, toSearch, lost)) {