Author: koen.aers(a)jboss.com
Date: 2008-11-12 07:43:09 -0500 (Wed, 12 Nov 2008)
New Revision: 11700
Modified:
trunk/flow/plugins/org.jboss.tools.flow.common/src/org/jboss/tools/flow/common/command/DeleteElementCommand.java
Log:
allow delete of nodes embedded in node containers (problem with dangling edges)
Modified:
trunk/flow/plugins/org.jboss.tools.flow.common/src/org/jboss/tools/flow/common/command/DeleteElementCommand.java
===================================================================
---
trunk/flow/plugins/org.jboss.tools.flow.common/src/org/jboss/tools/flow/common/command/DeleteElementCommand.java 2008-11-12
10:35:31 UTC (rev 11699)
+++
trunk/flow/plugins/org.jboss.tools.flow.common/src/org/jboss/tools/flow/common/command/DeleteElementCommand.java 2008-11-12
12:43:09 UTC (rev 11700)
@@ -34,6 +34,8 @@
private NodeWrapper child;
private ContainerWrapper parent;
+ private List<DeleteElementCommand> embeddedCommands;
+
private List<NodeWrapper> incomingElementWrappers = new
ArrayList<NodeWrapper>();
private List<NodeWrapper> outgoingElementWrappers = new
ArrayList<NodeWrapper>();
private List<ConnectionWrapper> incomingConnections = new
ArrayList<ConnectionWrapper>();
@@ -56,8 +58,32 @@
connection.disconnect();
}
}
+
+ private void initializeEmbeddedCommands() {
+ embeddedCommands = new ArrayList<DeleteElementCommand>();
+ ContainerWrapper container = (ContainerWrapper)child;
+ List<NodeWrapper> children = container.getElements();
+ for (NodeWrapper w : children) {
+ DeleteElementCommand c = new DeleteElementCommand();
+ c.setParent(container);
+ c.setChild(w);
+ embeddedCommands.add(c);
+ }
+ }
+
+ private void executeEmbeddedCommands() {
+ if (embeddedCommands == null) {
+ initializeEmbeddedCommands();
+ }
+ for (DeleteElementCommand c : embeddedCommands) {
+ c.execute();
+ }
+ }
public void execute() {
+ if (child instanceof ContainerWrapper) {
+ executeEmbeddedCommands();
+ }
deleteConnections(child);
parent.removeElement(child);
}
@@ -86,10 +112,19 @@
public void setParent(ContainerWrapper parent) {
this.parent = parent;
}
+
+ private void undoEmbeddedCommands() {
+ for (DeleteElementCommand c : embeddedCommands) {
+ c.undo();
+ }
+ }
public void undo() {
parent.addElement(child);
restoreConnections();
+ if (child instanceof ContainerWrapper) {
+ undoEmbeddedCommands();
+ }
}
}
Show replies by date