|
@@ -1,6 +1,7 @@
|
|
|
package ui.controller;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.Iterator;
|
|
|
|
|
|
import classes.AbstractCpsObject;
|
|
|
import classes.CpsEdge;
|
|
@@ -11,25 +12,106 @@ public class NodeController {
|
|
|
|
|
|
private Model model;
|
|
|
private MultiPurposeController mpC;
|
|
|
-
|
|
|
+
|
|
|
public NodeController(Model model, MultiPurposeController mpC) {
|
|
|
// TODO Auto-generated constructor stub
|
|
|
this.model = model;
|
|
|
this.mpC = mpC;
|
|
|
}
|
|
|
-
|
|
|
- public void addNode(CpsUpperNode node) {
|
|
|
- model.getCvsObjIdx().put(node.getID(), model.getObjectsOnCanvas().size());
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Add a CpsUpperNode into Canvas
|
|
|
+ *
|
|
|
+ * @param nodeName
|
|
|
+ */
|
|
|
+ public void addNode(CpsUpperNode nodeName) {
|
|
|
+ CpsUpperNode node = nodeName;
|
|
|
+ connectAdjacent(node);
|
|
|
+ makeNodeOfNodes(node);
|
|
|
model.getObjectsOnCanvas().add(node);
|
|
|
}
|
|
|
-
|
|
|
- public void addNewObject() {
|
|
|
-
|
|
|
- CpsUpperNode node = new CpsUpperNode("UpperNode");
|
|
|
- node.setSav("CVS");
|
|
|
- node.setConnections(new ArrayList<CpsEdge>());
|
|
|
- addNode(node);
|
|
|
+
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * @param node
|
|
|
+ */
|
|
|
+ public void makeNodeOfNodes(CpsUpperNode node) {
|
|
|
+
|
|
|
+ ArrayList<AbstractCpsObject> nodes = node.getNodes();
|
|
|
+ ArrayList<CpsEdge> nodeEdges = node.getNodeEdges();
|
|
|
+
|
|
|
+ for (Iterator<AbstractCpsObject> it = model.getSelectedCpsObjects().iterator(); it.hasNext();) {
|
|
|
+
|
|
|
+ AbstractCpsObject obj = it.next();
|
|
|
+ nodes.add(obj);
|
|
|
+ model.getObjectsOnCanvas().remove(obj);
|
|
|
+ }
|
|
|
+
|
|
|
+ for (Iterator<CpsEdge> it = model.getEdgesOnCanvas().iterator(); it.hasNext();) {
|
|
|
+
|
|
|
+ CpsEdge edge = it.next();
|
|
|
+ if (nodes.contains(edge.getA()) && nodes.contains(edge.getB())) {
|
|
|
+ nodeEdges.add(edge);
|
|
|
+ model.removeEdgesOnCanvas(edge);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
-
|
|
|
- private void getAdja
|
|
|
+
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private void connectAdjacent(CpsUpperNode node) {
|
|
|
+
|
|
|
+ ArrayList<AbstractCpsObject> adj = new ArrayList<>();
|
|
|
+ ArrayList<Float> maxCapacity = new ArrayList<>();
|
|
|
+ ArrayList<CpsEdge> oldEdges = node.getOldEdges();
|
|
|
+
|
|
|
+ // float maxCapacity = 0;
|
|
|
+
|
|
|
+ // für alle Edges auf dem Canvas
|
|
|
+ for (Iterator<CpsEdge> it = model.getEdgesOnCanvas().iterator(); it.hasNext();) {
|
|
|
+
|
|
|
+ CpsEdge edge = it.next();
|
|
|
+
|
|
|
+ // if (edge.getCapacity() > maxCapacity)
|
|
|
+ // maxCapacity = edge.getCapacity();
|
|
|
+
|
|
|
+ // wenn ausgewählte Objekte in edge und andere auserhalb
|
|
|
+ if (model.getSelectedCpsObjects().contains(edge.getA())
|
|
|
+ && !model.getSelectedCpsObjects().contains(edge.getB())) {
|
|
|
+ // und wenn in der adj noch nicht vorhanden
|
|
|
+ if (!adj.contains(edge.getA()))
|
|
|
+ adj.add(edge.getB());
|
|
|
+ // wenn vorhanden teste maxCapacity
|
|
|
+ else if (maxCapacity.get(adj.indexOf(edge.getB())) < edge.getCapacity())
|
|
|
+ maxCapacity.set(adj.indexOf(edge.getB()), edge.getCapacity());
|
|
|
+ // speichere alte edge
|
|
|
+ oldEdges.add(edge);
|
|
|
+ model.getEdgesOnCanvas().remove(edge);
|
|
|
+ }
|
|
|
+
|
|
|
+ // Analog
|
|
|
+ else if (!model.getSelectedCpsObjects().contains(edge.getA())
|
|
|
+ && model.getSelectedCpsObjects().contains(edge.getB())) {
|
|
|
+ if (!adj.contains(edge.getB()))
|
|
|
+ adj.add(edge.getA());
|
|
|
+ else if (maxCapacity.get(adj.indexOf(edge.getA())) < edge.getCapacity())
|
|
|
+ maxCapacity.set(adj.indexOf(edge.getA()), edge.getCapacity());
|
|
|
+
|
|
|
+ oldEdges.add(edge);
|
|
|
+ model.getEdgesOnCanvas().remove(edge);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // für alle objekte in adjazenzliste mach
|
|
|
+ for (AbstractCpsObject cps : adj) {
|
|
|
+ CpsEdge newEdge = new CpsEdge(cps, node, maxCapacity.get(adj.indexOf(cps)));
|
|
|
+ // !! Eventuell noch bei getConnections() hinzufügem
|
|
|
+ model.addEdgeOnCanvas(newEdge);
|
|
|
+ node.getConnections().add(newEdge);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|