소스 검색

finalllllllllllllyyyyyyyyyy group now works finely looooooool

Teh-Hai Julian Zheng 7 년 전
부모
커밋
7b276418c4
1개의 변경된 파일35개의 추가작업 그리고 11개의 파일을 삭제
  1. 35 11
      src/ui/controller/NodeController.java

+ 35 - 11
src/ui/controller/NodeController.java

@@ -158,8 +158,7 @@ public class NodeController {
 			CpsEdge edge = it.next();
 
 			// wenn ausgewählte Objekte in edge und andere auserhalb
-			if (toGroup.contains(edge.getA())
-					&& !toGroup.contains(edge.getB())) {
+			if (toGroup.contains(edge.getA()) && !toGroup.contains(edge.getB())) {
 				// und wenn in der adj noch nicht vorhanden und füg
 				if (!adj.contains(edge.getB())) {
 					adj.add(edge.getB());
@@ -176,8 +175,7 @@ public class NodeController {
 			}
 
 			// Analog
-			else if (!toGroup.contains(edge.getA())
-					&& toGroup.contains(edge.getB())) {
+			else if (!toGroup.contains(edge.getA()) && toGroup.contains(edge.getB())) {
 				if (!adj.contains(edge.getA())) {
 					adj.add(edge.getA());
 					maxCapacity.add(edge.getCapacity());
@@ -258,21 +256,47 @@ public class NodeController {
 				toSearch = edge.getA();
 				lost = edge.getB();
 			}
+			if (toSearch instanceof CpsUpperNode) {
+				for (CpsEdge e : lost.getConnections()) {
+					if ((found.contains(e.getA()) || found.contains(e.getB())) && !node.getOldEdges().contains(e))
+						node.getOldEdges().add(e);
+				}
+			} else
+				outerLoop: for (AbstractCpsObject cps : found) {
+					if (!cps.equals(node) && !lostChildren.contains(cps))
+						if (backtrackLostChild(cps, toSearch, lost)) {
 
-			for (AbstractCpsObject cps : found) {
-				if (!cps.equals(node) && !lostChildren.contains(cps))
-					if (backtrackLostChild(cps, toSearch, lost)) {
-						CpsEdge temp = new CpsEdge(cps, lost, edge.getCapacity());
+							for (CpsEdge f : node.getOldEdges())
+								if ((f.getA().equals(cps) && f.getB().equals(toSearch))
+										|| (f.getB().equals(cps) && f.getA().equals(toSearch)))
+									continue outerLoop;
 
-						node.getOldEdges().add(temp);
-					}
-			}
+							if (!lookforDuplicates(cps, lost, node.getOldEdges())) {
+								
+								CpsEdge temp = new CpsEdge(cps, lost, edge.getCapacity());
+								node.getOldEdges().add(temp);
+
+								//break;
+							}
+
+						}
+				}
 
 		}
 
 		// 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());
+
+	}
+
+	private boolean lookforDuplicates(AbstractCpsObject a, AbstractCpsObject b, ArrayList<CpsEdge> list) {
+		for (CpsEdge cpsEdge : list) {
+			if ((a.equals(cpsEdge.getA()) && b.equals(cpsEdge.getB()))
+					|| (b.equals(cpsEdge.getA()) && a.equals(cpsEdge.getB())))
+				return true;
+		}
+		return false;
 	}
 
 	/**