|
@@ -3,6 +3,8 @@ package ui.controller;
|
|
|
import java.awt.Point;
|
|
|
import java.util.ArrayDeque;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.ListIterator;
|
|
|
|
|
|
import classes.Edge;
|
|
|
import classes.Node;
|
|
@@ -132,18 +134,10 @@ public class CanvasController {
|
|
|
* AbstractCpsObject
|
|
|
*/
|
|
|
public void deleteObjectOnCanvas(AbstractCanvasObject obj) {
|
|
|
- Edge e = null;
|
|
|
- for (AbstractCanvasObject cps : model.getObjectsOnCanvas()) {
|
|
|
- for (Edge p : cps.getConnections()) {
|
|
|
- if (p.getA() == obj || p.getB() == obj) {
|
|
|
- e = p;
|
|
|
- }
|
|
|
- }
|
|
|
- if (!model.getClipboradObjects().contains(cps)) {
|
|
|
- cps.getConnectedTo().remove(e);
|
|
|
- }
|
|
|
- model.getEdgesOnCanvas().remove(e);
|
|
|
- }
|
|
|
+ if (obj instanceof GroupNode) {
|
|
|
+ this.bfsNodeCleaner((GroupNode) obj);
|
|
|
+ }
|
|
|
+ removeAllConnectionsFromObject(obj);
|
|
|
mpC.decIdx(obj.getId(), model.getCvsObjIdx());
|
|
|
model.getCvsObjIdx().remove(obj.getId());
|
|
|
model.getObjectsOnCanvas().remove(obj);
|
|
@@ -156,19 +150,17 @@ public class CanvasController {
|
|
|
* @param by the object that will replace it
|
|
|
*/
|
|
|
public void replaceObjectOnCanvas(AbstractCanvasObject toBeReplaced, AbstractCanvasObject by) {
|
|
|
- /** let all edges of 'toBeReplaced' connect to 'by' */
|
|
|
- for(Edge e: toBeReplaced.getConnections()){
|
|
|
- if(e.getA() == toBeReplaced){
|
|
|
- e.setA(by);
|
|
|
- }else if(e.getB() == toBeReplaced){
|
|
|
- e.setB(by);
|
|
|
+
|
|
|
+ //Replace edges
|
|
|
+ ListIterator<Edge> iter = model.getEdgesOnCanvas().listIterator();
|
|
|
+ while(iter.hasNext() ) {
|
|
|
+ Edge edge = iter.next();
|
|
|
+ if(edge.getA() == toBeReplaced && edge.getB() != by) {
|
|
|
+ edge.setA(by);
|
|
|
+ }
|
|
|
+ else if( edge.getB() == toBeReplaced && edge.getA() != by) {
|
|
|
+ edge.setB(by);
|
|
|
}
|
|
|
-
|
|
|
- /** if edge from an object to itself -> remove it */
|
|
|
- if(e.getA() == e.getB())
|
|
|
- removeEdgesOnCanvas(e);
|
|
|
- else/** else add edge to 'by' */
|
|
|
- by.addConnection(e);
|
|
|
}
|
|
|
/** delete 'toBeReplaced' new empty connections, to prevent Nullpointer*/
|
|
|
toBeReplaced.setConnections(new ArrayList<Edge>(1));
|
|
@@ -298,23 +290,27 @@ public class CanvasController {
|
|
|
* @param node
|
|
|
*/
|
|
|
public void bfsNodeCleaner(GroupNode node) {
|
|
|
-
|
|
|
- ArrayDeque<AbstractCanvasObject> queue = new ArrayDeque<>();
|
|
|
- AbstractCanvasObject u = node;
|
|
|
-
|
|
|
- queue.add(u);
|
|
|
- while (!queue.isEmpty()) {
|
|
|
- u = queue.pop();
|
|
|
-
|
|
|
- deleteConnections(u);
|
|
|
- if (u instanceof GroupNode)
|
|
|
- for (AbstractCanvasObject adjacent : ((GroupNode) u).getNodes()) {
|
|
|
- queue.add(adjacent);
|
|
|
- }
|
|
|
+ List<AbstractCanvasObject> objectsInGroupNode = node.getNodesAndGroupnodeNodes();
|
|
|
+ ListIterator<Edge> iter = model.getEdgesOnCanvas().listIterator();
|
|
|
+ while(iter.hasNext() ) {
|
|
|
+ Edge edge = iter.next();
|
|
|
+ if(objectsInGroupNode.contains(edge.getA()) || objectsInGroupNode.contains(edge.getB())) {
|
|
|
+ iter.remove();
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
+ public void removeAllConnectionsFromObject(AbstractCanvasObject obj) {
|
|
|
+ ListIterator<Edge> iter = model.getEdgesOnCanvas().listIterator();
|
|
|
+ while(iter.hasNext() ) {
|
|
|
+ Edge edge = iter.next();
|
|
|
+ if(edge.getA() == obj || edge.getB() == obj) {
|
|
|
+ iter.remove();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* Deletes all Connections to Objects inside the to deleting UpperNode
|
|
|
*
|