Author: koen.aers(a)jboss.com
Date: 2009-08-25 18:41:09 -0400 (Tue, 25 Aug 2009)
New Revision: 17255
Modified:
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/io/SequenceFlowDeserializer.java
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/io/SequenceFlowSerializer.java
Log:
GPD-370 : Designer creates duplicate timer nodes under transition nodes
Modified:
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/io/SequenceFlowDeserializer.java
===================================================================
---
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/io/SequenceFlowDeserializer.java 2009-08-25
17:29:17 UTC (rev 17254)
+++
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/io/SequenceFlowDeserializer.java 2009-08-25
22:41:09 UTC (rev 17255)
@@ -3,6 +3,8 @@
*/
package org.jboss.tools.flow.jpdl4.io;
+import java.util.ArrayList;
+import java.util.List;
import java.util.StringTokenizer;
import org.eclipse.draw2d.geometry.Point;
@@ -74,27 +76,30 @@
}
}
+ public void deserializeChildNodes(Wrapper wrapper,
+ Element element) {
+ if (wrapper == null) return;
+ NodeList nodeList = element.getChildNodes();
+ ArrayList<Node> unknownNodeList = new ArrayList<Node>();
+ for (int i = 0; i < nodeList.getLength(); i++) {
+ Node node = nodeList.item(i);
+ if ("timer".equals(node.getNodeName())) {
+ deserializeTimer(wrapper, node, unknownNodeList);
+ } else if ("outcome-value".equals(node.getNodeName())) {
+ deserializeOutcomeValue(wrapper, node, unknownNodeList);
+ } else {
+ deserializeChildNode(wrapper, node, unknownNodeList);
+ }
+ }
+ wrapper.getElement().setMetaData("trailingNodes", unknownNodeList);
+ }
+
public Wrapper deserializeChildNode(Wrapper parent, Node node) {
Wrapper result = null;
if (!(parent instanceof ConnectionWrapper)) return result;
ConnectionWrapper connectionWrapper = (ConnectionWrapper)parent;
if (node instanceof Element) {
- if ("timer".equals(node.getNodeName())) {
- String duedate = ((Element)node).getAttribute("duedate");
- if (duedate != null && !("".equals(duedate))) {
- parent.setPropertyValue(SequenceFlow.TIMER, duedate);
- }
- } else if ("outcome-value".equals(node.getNodeName())) {
- NodeList nodeList = ((Element)node).getElementsByTagName("string");
- if (nodeList.getLength() == 1) {
- String value = ((Element)nodeList.item(0)).getAttribute("value");
- if (value != null && !("".equals("value"))) {
- parent.setPropertyValue(SequenceFlow.OUTCOME_VALUE, value);
- }
- }
- } else {
- result = Registry.createWrapper((Element)node);
- }
+ result = Registry.createWrapper((Element)node);
if (result == null) return null;
if (result instanceof Wrapper) {
if (result.getElement() instanceof EventListener) {
@@ -104,6 +109,21 @@
}
return result;
}
+
+ private void deserializeTimer(Wrapper parent, Node node, List<Node>
unknownNodeList) {
+ if (!(node instanceof Element)) return;
+ parent.setMetaData("beforeTimerNodes", new
ArrayList<Node>(unknownNodeList));
+ unknownNodeList.clear();
+ parent.setPropertyValue(SequenceFlow.TIMER,
((Element)node).getAttribute("duedate"));
+ }
+ private void deserializeOutcomeValue(Wrapper parent, Node node, List<Node>
unknownNodeList) {
+ parent.setMetaData("beforeOutcomeValueNodes", new
ArrayList<Node>(unknownNodeList));
+ unknownNodeList.clear();
+ // outome-value has only one child node
+ Node content = node.getChildNodes().item(0);
+ parent.setPropertyValue(SequenceFlow.OUTCOME_VALUE, content.getNodeValue());
+ }
+
}
\ No newline at end of file
Modified:
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/io/SequenceFlowSerializer.java
===================================================================
---
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/io/SequenceFlowSerializer.java 2009-08-25
17:29:17 UTC (rev 17254)
+++
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/io/SequenceFlowSerializer.java 2009-08-25
22:41:09 UTC (rev 17255)
@@ -14,6 +14,7 @@
import org.jboss.tools.flow.jpdl4.model.SequenceFlow;
class SequenceFlowSerializer extends AbstractElementSerializer {
+
protected List<String> getAttributesToSave() {
ArrayList<String> result = new ArrayList<String>();
result.add("name");
@@ -21,6 +22,7 @@
result.add("g");
return result;
}
+
protected void appendAttributeToSave(String attributeName, StringBuffer buffer, Wrapper
wrapper) {
if (!(wrapper instanceof ConnectionWrapper)) return;
Element element = wrapper.getElement();
@@ -33,18 +35,21 @@
appendGraphics(buffer, (ConnectionWrapper)wrapper);
}
}
+
protected void appendName(StringBuffer buffer, SequenceFlow sequenceFlow) {
if (sequenceFlow.getName() == null) return;
String value = sequenceFlow.getName();
if (value == null || "".equals(sequenceFlow.getName())) return;
buffer.append(" name=\"" + value + "\"");
}
+
protected void appendTo(StringBuffer buffer, SequenceFlow sequenceFlow) {
if (sequenceFlow.getTo() == null) return;
String value = sequenceFlow.getTo().getName();
if (value == null || "".equals(value)) return;
buffer.append(" to=\"" + value + "\"");
}
+
protected void appendGraphics(StringBuffer buffer, ConnectionWrapper wrapper) {
StringBuffer bendPointBuffer = new StringBuffer();
List<Point> bendPoints = wrapper.getBendpoints();
@@ -73,21 +78,19 @@
buffer.append(labelBuffer);
buffer.append("\"");
}
+
private boolean isEmpty(String str) {
return str == null || "".equals(str);
}
+
public void appendBody(StringBuffer buffer, Wrapper wrapper, int level) {
String timer = (String)wrapper.getPropertyValue(SequenceFlow.TIMER);
if (timer != null && !("".equals(timer))) {
- buffer.append("\n");
- appendPadding(buffer, level + 1);
- buffer.append("<timer duedate=\"" + timer +
"\"/>");
+ appendTimer(buffer, wrapper, timer, level);
}
String outcome = (String)wrapper.getPropertyValue(SequenceFlow.OUTCOME_VALUE);
if (outcome != null && !("".equals(outcome))) {
- buffer.append("\n");
- appendPadding(buffer, level + 1);
- buffer.append("<outcome-value><string value=\"" + outcome +
"\"/></outcome-value>");
+ appendOutcomeValue(buffer, wrapper, outcome, level);
}
List<Element> eventListeners = wrapper.getChildren("listener");
if (eventListeners != null) {
@@ -98,4 +101,16 @@
}
}
}
+
+ private void appendTimer(StringBuffer buffer, Wrapper wrapper, String timer, int level)
{
+ appendUnknownNodes("beforeTimerNodes", buffer, wrapper, level);
+ buffer.append("<timer
duedate=\"").append(timer).append("\"/>");
+ }
+
+ private void appendOutcomeValue(StringBuffer buffer, Wrapper wrapper, String outcome,
int level) {
+ appendUnknownNodes("beforeOutcomeValueNodes", buffer, wrapper, level);
+ buffer.append("<outcome-value>").append(outcome).append("</outcome-value>");
+ }
+
+
}
\ No newline at end of file