|
@@ -11,6 +11,10 @@ import classes.Position;
|
|
|
import ui.model.Model;
|
|
|
|
|
|
public class NodeController {
|
|
|
+
|
|
|
+ public enum MODE {
|
|
|
+ CANVAS, UPPERNODECANVAS
|
|
|
+ }
|
|
|
|
|
|
private Model model;
|
|
|
private CanvasController cvs;
|
|
@@ -28,13 +32,17 @@ public class NodeController {
|
|
|
*
|
|
|
* @param nodeName
|
|
|
*/
|
|
|
- public void addNode(String nodeName) {
|
|
|
+ public void addNode(String nodeName, MODE mode) {
|
|
|
CpsUpperNode node = new CpsUpperNode(nodeName);
|
|
|
node.setPosition(calculatePos());
|
|
|
- connectAdjacent(node);
|
|
|
- makeNodeOfNodes(node);
|
|
|
+ connectAdjacent(node, mode);
|
|
|
+ makeNodeOfNodes(node, mode);
|
|
|
cvs.addNewObject(node);
|
|
|
}
|
|
|
+
|
|
|
+ public void addObjectInUpperNode(AbstractCpsObject object) {
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* Delete a CpsUpperNode from the Canvas
|
|
@@ -46,17 +54,16 @@ public class NodeController {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- *
|
|
|
+ * Put selected Nodes inside the Upper Node
|
|
|
* @param node
|
|
|
*/
|
|
|
- private void makeNodeOfNodes(CpsUpperNode node) {
|
|
|
+ private void makeNodeOfNodes(CpsUpperNode node, MODE mode) {
|
|
|
|
|
|
ArrayList<AbstractCpsObject> nodes = node.getNodes();
|
|
|
ArrayList<CpsEdge> nodeEdges = node.getNodeEdges();
|
|
|
HashMap<Integer, Integer> nodeIdx = node.getNodesIdx();
|
|
|
-
|
|
|
- ArrayList<CpsEdge> toDelete = new ArrayList<>();
|
|
|
-
|
|
|
+
|
|
|
+ //Put all selected Nodes into the Upper Node
|
|
|
for (Iterator<AbstractCpsObject> it = model.getSelectedCpsObjects().iterator(); it.hasNext();) {
|
|
|
|
|
|
AbstractCpsObject obj = it.next();
|
|
@@ -64,20 +71,21 @@ public class NodeController {
|
|
|
nodes.add(obj);
|
|
|
}
|
|
|
|
|
|
- for (AbstractCpsObject abs : model.getSelectedCpsObjects()) {
|
|
|
- cvs.deleteObjectOnCanvas(abs);
|
|
|
- }
|
|
|
+ //remove selected nodes
|
|
|
|
|
|
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);
|
|
|
- toDelete.add(edge);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
- model.getEdgesOnCanvas().removeAll(toDelete);
|
|
|
+
|
|
|
+ for (AbstractCpsObject abs : model.getSelectedCpsObjects()) {
|
|
|
+ cvs.deleteObjectOnCanvas(abs);
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|
|
@@ -85,7 +93,7 @@ public class NodeController {
|
|
|
*
|
|
|
* @return
|
|
|
*/
|
|
|
- private void connectAdjacent(CpsUpperNode node) {
|
|
|
+ private void connectAdjacent(CpsUpperNode node, MODE mode) {
|
|
|
|
|
|
ArrayList<AbstractCpsObject> adj = new ArrayList<>();
|
|
|
ArrayList<Float> maxCapacity = new ArrayList<>();
|
|
@@ -107,14 +115,13 @@ public class NodeController {
|
|
|
if (model.getSelectedCpsObjects().contains(edge.getA())
|
|
|
&& !model.getSelectedCpsObjects().contains(edge.getB())) {
|
|
|
// und wenn in der adj noch nicht vorhanden und füg
|
|
|
- if (!adj.contains(edge.getA())) {
|
|
|
+ if (!adj.contains(edge.getB())) {
|
|
|
adj.add(edge.getB());
|
|
|
maxCapacity.add(edge.getCapacity());
|
|
|
}
|
|
|
// wenn vorhanden teste maxCapacity
|
|
|
else if (maxCapacity.get(adj.indexOf(edge.getB())) < edge.getCapacity()) {
|
|
|
maxCapacity.set(adj.indexOf(edge.getB()), edge.getCapacity());
|
|
|
- System.out.println("aaa");
|
|
|
}
|
|
|
// speichere alte edge
|
|
|
oldEdges.add(edge);
|
|
@@ -125,12 +132,12 @@ public class NodeController {
|
|
|
// Analog
|
|
|
else if (!model.getSelectedCpsObjects().contains(edge.getA())
|
|
|
&& model.getSelectedCpsObjects().contains(edge.getB())) {
|
|
|
- if (!adj.contains(edge.getB())) {
|
|
|
+ if (!adj.contains(edge.getA())) {
|
|
|
adj.add(edge.getA());
|
|
|
maxCapacity.add(edge.getCapacity());
|
|
|
} else if (maxCapacity.get(adj.indexOf(edge.getA())) < edge.getCapacity()) {
|
|
|
maxCapacity.set(adj.indexOf(edge.getA()), edge.getCapacity());
|
|
|
- System.out.println("bbb");
|
|
|
+
|
|
|
}
|
|
|
oldEdges.add(edge);
|
|
|
toDelete.add(edge);
|
|
@@ -149,13 +156,14 @@ public class NodeController {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- *
|
|
|
+ * Calculate new Position of the Upper Node
|
|
|
* @return
|
|
|
*/
|
|
|
private Position calculatePos() {
|
|
|
|
|
|
Position pos = new Position(0, 0);
|
|
|
|
|
|
+ // sum(x0 .. xn) / numOfPos, y analog
|
|
|
for (AbstractCpsObject abs : model.getSelectedCpsObjects()) {
|
|
|
pos.x += abs.getPosition().x;
|
|
|
pos.y += abs.getPosition().y;
|