|
@@ -157,8 +157,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());
|
|
@@ -175,8 +174,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());
|
|
@@ -257,21 +255,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;
|
|
|
}
|
|
|
|
|
|
/**
|