Author: koen.aers(a)jboss.com
Date: 2009-01-18 20:21:34 -0500 (Sun, 18 Jan 2009)
New Revision: 13108
Added:
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/Event.java
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/ProcessNode.java
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/util/
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/util/Jpdl4Helper.java
Modified:
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/META-INF/MANIFEST.MF
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/plugin.xml
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/editor/JpdlEditor.java
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/EndEvent.java
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/Gateway.java
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/Process.java
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/StartEvent.java
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/Task.java
Log:
GPD-287: Support preservation of unknown nodes when nodes are deleted
Modified: trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/META-INF/MANIFEST.MF
===================================================================
--- trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/META-INF/MANIFEST.MF 2009-01-19 01:20:43
UTC (rev 13107)
+++ trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/META-INF/MANIFEST.MF 2009-01-19 01:21:34
UTC (rev 13108)
@@ -10,7 +10,8 @@
org.eclipse.gef;bundle-version="3.4.1",
org.eclipse.ui;bundle-version="3.4.1",
org.eclipse.core.runtime;bundle-version="3.4.0",
- org.eclipse.ui.ide;bundle-version="3.4.1"
+ org.eclipse.ui.ide;bundle-version="3.4.1",
+ org.eclipse.ui.views.properties.tabbed;bundle-version="3.4.1"
Bundle-ActivationPolicy: lazy
Bundle-Activator: org.jboss.tools.flow.jpdl4.Activator
Export-Package: org.jboss.tools.flow.jpdl4.model
Modified: trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/plugin.xml
===================================================================
--- trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/plugin.xml 2009-01-19 01:20:43 UTC (rev
13107)
+++ trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/plugin.xml 2009-01-19 01:21:34 UTC (rev
13108)
@@ -198,4 +198,30 @@
</wizard>
</extension>
+ <extension
point="org.eclipse.ui.views.properties.tabbed.propertyContributor">
+ <propertyContributor
contributorId="org.jboss.tools.flow.jpdl4.editor">
+ <propertyCategory category="advanced"/>
+ </propertyContributor>
+ </extension>
+
+ <extension
point="org.eclipse.ui.views.properties.tabbed.propertyTabs">
+ <propertyTabs contributorId="org.jboss.tools.flow.jpdl4.editor">
+ <propertyTab
+ category="advanced"
+ id="org.jboss.tools.jpdl4.advanced"
+ label="Advanced"/>
+ </propertyTabs>
+ </extension>
+
+ <extension
point="org.eclipse.ui.views.properties.tabbed.propertySections">
+ <propertySections
contributorId="org.jboss.tools.flow.jpdl4.editor">
+ <propertySection
+
class="org.eclipse.ui.views.properties.tabbed.AdvancedPropertySection"
+ id="org.jboss.tools.jpdl4.advanced"
+ tab="org.jboss.tools.jpdl4.advanced">
+ <input type="java.lang.Object"/>
+ </propertySection>
+ </propertySections>
+ </extension>
+
</plugin>
Modified:
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/editor/JpdlEditor.java
===================================================================
---
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/editor/JpdlEditor.java 2009-01-19
01:20:43 UTC (rev 13107)
+++
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/editor/JpdlEditor.java 2009-01-19
01:21:34 UTC (rev 13108)
@@ -6,12 +6,15 @@
import org.eclipse.gef.EditPartFactory;
import org.eclipse.gef.palette.PaletteRoot;
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
import org.jboss.tools.flow.common.editor.GenericModelEditor;
import org.jboss.tools.flow.common.editpart.DefaultEditPartFactory;
import org.jboss.tools.flow.common.registry.ElementRegistry;
import org.jboss.tools.flow.common.wrapper.Wrapper;
-public class JpdlEditor extends GenericModelEditor {
+public class JpdlEditor extends GenericModelEditor implements
ITabbedPropertySheetPageContributor {
public static String ID = "org.jboss.tools.flow.jpdl4.editor";
@@ -44,4 +47,15 @@
setModel(empty ? createModel() : new JpdlDeserializer().deserialize(is));
}
+ public String getContributorId() {
+ return getSite().getId();
+ }
+
+ @SuppressWarnings("unchecked")
+ public Object getAdapter(Class adapter) {
+ if (adapter == IPropertySheetPage.class)
+ return new TabbedPropertySheetPage(this);
+ return super.getAdapter(adapter);
+ }
+
}
Modified:
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/EndEvent.java
===================================================================
---
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/EndEvent.java 2009-01-19
01:20:43 UTC (rev 13107)
+++
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/EndEvent.java 2009-01-19
01:21:34 UTC (rev 13108)
@@ -1,7 +1,7 @@
package org.jboss.tools.flow.jpdl4.model;
-import org.jboss.tools.flow.common.model.DefaultNode;
-public class EndEvent extends DefaultNode {
+
+public class EndEvent extends Event {
}
Added:
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/Event.java
===================================================================
---
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/Event.java
(rev 0)
+++
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/Event.java 2009-01-19
01:21:34 UTC (rev 13108)
@@ -0,0 +1,6 @@
+package org.jboss.tools.flow.jpdl4.model;
+
+
+public class Event extends ProcessNode {
+
+}
Modified:
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/Gateway.java
===================================================================
---
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/Gateway.java 2009-01-19
01:20:43 UTC (rev 13107)
+++
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/Gateway.java 2009-01-19
01:21:34 UTC (rev 13108)
@@ -1,7 +1,7 @@
package org.jboss.tools.flow.jpdl4.model;
-import org.jboss.tools.flow.common.model.DefaultNode;
-public class Gateway extends DefaultNode {
+public class Gateway extends ProcessNode {
+
}
Modified:
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/Process.java
===================================================================
---
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/Process.java 2009-01-19
01:20:43 UTC (rev 13107)
+++
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/Process.java 2009-01-19
01:21:34 UTC (rev 13108)
@@ -4,6 +4,7 @@
import org.jboss.tools.flow.common.model.DefaultFlow;
import org.jboss.tools.flow.common.model.Node;
+import org.jboss.tools.flow.jpdl4.util.Jpdl4Helper;
public class Process extends DefaultFlow {
@@ -27,4 +28,9 @@
initial = node;
}
+ public void removeNode(Node node) {
+ Jpdl4Helper.mergeLeadingNodes(node);
+ super.removeNode(node);
+ }
+
}
Added:
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/ProcessNode.java
===================================================================
---
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/ProcessNode.java
(rev 0)
+++
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/ProcessNode.java 2009-01-19
01:21:34 UTC (rev 13108)
@@ -0,0 +1,14 @@
+package org.jboss.tools.flow.jpdl4.model;
+
+import org.jboss.tools.flow.common.model.Connection;
+import org.jboss.tools.flow.common.model.DefaultNode;
+import org.jboss.tools.flow.jpdl4.util.Jpdl4Helper;
+
+public class ProcessNode extends DefaultNode {
+
+ public void removeOutgoingConnection(String type, Connection connection) {
+ Jpdl4Helper.mergeLeadingNodes(connection);
+ super.removeOutgoingConnection(type, connection);
+ }
+
+}
Modified:
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/StartEvent.java
===================================================================
---
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/StartEvent.java 2009-01-19
01:20:43 UTC (rev 13107)
+++
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/StartEvent.java 2009-01-19
01:21:34 UTC (rev 13108)
@@ -1,7 +1,6 @@
package org.jboss.tools.flow.jpdl4.model;
-import org.jboss.tools.flow.common.model.DefaultNode;
-public class StartEvent extends DefaultNode {
+public class StartEvent extends Event {
}
Modified:
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/Task.java
===================================================================
---
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/Task.java 2009-01-19
01:20:43 UTC (rev 13107)
+++
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/Task.java 2009-01-19
01:21:34 UTC (rev 13108)
@@ -1,7 +1,14 @@
package org.jboss.tools.flow.jpdl4.model;
-import org.jboss.tools.flow.common.model.DefaultNode;
+import org.jboss.tools.flow.common.model.Connection;
+import org.jboss.tools.flow.jpdl4.util.Jpdl4Helper;
-public class Task extends DefaultNode {
+
+public class Task extends ProcessNode {
+ public void removeOutgoingConnection(String type, Connection connection) {
+ Jpdl4Helper.mergeLeadingNodes(connection);
+ super.removeOutgoingConnection(type, connection);
+ }
+
}
Added:
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/util/Jpdl4Helper.java
===================================================================
---
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/util/Jpdl4Helper.java
(rev 0)
+++
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/util/Jpdl4Helper.java 2009-01-19
01:21:34 UTC (rev 13108)
@@ -0,0 +1,93 @@
+package org.jboss.tools.flow.jpdl4.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.tools.flow.common.model.Connection;
+import org.jboss.tools.flow.common.model.Container;
+import org.jboss.tools.flow.common.model.Element;
+import org.jboss.tools.flow.common.model.Node;
+import org.jboss.tools.flow.jpdl4.model.SequenceFlow;
+
+public class Jpdl4Helper {
+
+ @SuppressWarnings("unchecked")
+ private static List<org.w3c.dom.Node> getTrailingNodes(Element element) {
+ List<org.w3c.dom.Node> result =
(List<org.w3c.dom.Node>)element.getMetaData("trailingNodes");
+ if (result == null) {
+ result = new ArrayList<org.w3c.dom.Node>();
+ }
+ return result;
+ }
+
+ @SuppressWarnings("unchecked")
+ private static List<org.w3c.dom.Node> getLeadingNodes(Element element) {
+ List<org.w3c.dom.Node> result =
(List<org.w3c.dom.Node>)element.getMetaData("leadingNodes");
+ if (result == null) {
+ result = new ArrayList<org.w3c.dom.Node>();
+ }
+ return result;
+ }
+
+ public static void mergeLeadingNodes(Element toBeRemoved) {
+ if (toBeRemoved == null) return;
+ List<org.w3c.dom.Node> successorNodes = getSuccessorNodes(toBeRemoved);
+ List<org.w3c.dom.Node> nodesToMerge = getLeadingNodes(toBeRemoved);
+ boolean started = false;
+ for (int i = nodesToMerge.size(); i > 0; i--) {
+ org.w3c.dom.Node node = nodesToMerge.get(i - 1);
+ if (node.getNodeType() != org.w3c.dom.Node.TEXT_NODE && !started) {
+ started = true;
+ }
+ if (started) {
+ successorNodes.add(0, node);
+ }
+ if (node .getNodeType() == org.w3c.dom.Node.TEXT_NODE && !started) {
+ started = true;
+ }
+ }
+ }
+
+ private static List<org.w3c.dom.Node> getSuccessorNodes(Element element) {
+ Element successor = getSuccessor(element);
+ if (successor != null) {
+ return getLeadingNodes(successor);
+ }
+ Element parent = getParent(element);
+ if (parent != null) {
+ return getTrailingNodes(parent);
+ }
+ return new ArrayList<org.w3c.dom.Node>();
+ }
+
+ private static Element getParent(Element element) {
+ if (element instanceof SequenceFlow) {
+ return ((SequenceFlow) element).getFrom();
+ } else if (element instanceof Node) {
+ return ((Node) element).getNodeContainer();
+ }
+ return null;
+ }
+
+ private static Element getSuccessor(Element element) {
+ if (element instanceof SequenceFlow) {
+ Node node = ((SequenceFlow)element).getFrom();
+ List<Connection> connections = node.getOutgoingConnections(null);
+ for (int i = 0; i < connections.size() - 1; i++) {
+ if (connections.get(i) == element) {
+ return connections.get(i);
+ }
+ }
+ } else if (element instanceof Node) {
+ Container container = ((Node)element).getNodeContainer();
+ List<Node> nodes = container.getNodes();
+ for (int i = 0; i < nodes.size() - 1; i++) {
+ if (nodes.get(i) == element) {
+ return nodes.get(i);
+ }
+ }
+ }
+ return null;
+ }
+
+}
Show replies by date