Author: Grid.Qian
Date: 2008-09-08 09:09:03 -0400 (Mon, 08 Sep 2008)
New Revision: 10139
Modified:
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/b2j/messages/B2J.properties
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/b2j/messages/B2JMessages.java
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/b2j/translate/BPMN2JPDL.java
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/b2j/translate/GraphicalFileGenerator.java
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/b2j/translate/TranslateHelper.java
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/bpmnto/action/BpmnToAction.java
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/bpmnto/util/DomXmlWriter.java
Log:
add support for bpmn transaction
Modified:
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/b2j/messages/B2J.properties
===================================================================
---
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/b2j/messages/B2J.properties 2008-09-08
07:49:28 UTC (rev 10138)
+++
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/b2j/messages/B2J.properties 2008-09-08
13:09:03 UTC (rev 10139)
@@ -28,7 +28,13 @@
Bpmn_GeneratedFile_Location_Dialog_Title=Select the generated files location
Bpmn_Translate_Message_Dialog_Title=Warnings and Errors
Bpmn_Translate_Message_Dialog_Message=The messages are errors and warnings during the
translation:
+Bpmn_EAnnotations_Element_Name=eAnnotations
+Bpmn_Details_Element_Name=details
+Bpmn_Value_Attribute_Name=value
Jpdl_Suffix=jpdl
+Jpdl_Element_Decision_Suffix=Decision
+Jpdl_Element_Complete_Suffix=Complete
+Jpdl_Element_Cancel_Suffix=Cancel
Jpdl_Process_Definition_Name=processdefinition.xml
Jpdl_32_Namespace_Url=urn:jbpm.org:jpdl-3.2
Jpdl_Process_Definition_Element_Name=process-definition
Modified:
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/b2j/messages/B2JMessages.java
===================================================================
---
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/b2j/messages/B2JMessages.java 2008-09-08
07:49:28 UTC (rev 10138)
+++
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/b2j/messages/B2JMessages.java 2008-09-08
13:09:03 UTC (rev 10139)
@@ -52,6 +52,13 @@
public static String Bpmn_GeneratedFile_Location_Dialog_Title;
public static String Bpmn_Translate_Message_Dialog_Title;
public static String Bpmn_Translate_Message_Dialog_Message;
+ public static String Bpmn_EAnnotations_Element_Name;
+ public static String Bpmn_Details_Element_Name;
+ public static String Bpmn_Value_Attribute_Name;
+ public static String Jpdl_Element_Decision_Suffix;
+ public static String Jpdl_Element_Complete_Suffix;
+ public static String Jpdl_Element_Cancel_Suffix;
+ public static String Jpdl_Element_Successful_Name;
public static String Jpdl_Suffix;
public static String Jpdl_Process_Definition_Name;
public static String Jpdl_ProcessState_Element_Name;
Modified:
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/b2j/translate/BPMN2JPDL.java
===================================================================
---
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/b2j/translate/BPMN2JPDL.java 2008-09-08
07:49:28 UTC (rev 10138)
+++
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/b2j/translate/BPMN2JPDL.java 2008-09-08
13:09:03 UTC (rev 10139)
@@ -12,8 +12,8 @@
package org.jboss.tools.b2j.translate;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.HashMap;
-import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -29,10 +29,10 @@
*
* this is a translator for bpmn ->jpdl
*/
-public class BPMN2JPDL extends BPMNTranslator{
+public class BPMN2JPDL extends BPMNTranslator {
Document bpmnDocument;
- List<Document> processDefs = new LinkedList<Document>();
+ List<Document> processDefs = new ArrayList<Document>();
Map<String, Element> map = new HashMap<String, Element>();
public Map<String, Element> getMap() {
@@ -53,7 +53,7 @@
public BPMN2JPDL(String bpmnFileName, String bpmnFilePath,
List<String> poolIDList, Document bpmnDocument) {
- super(bpmnFileName, bpmnFilePath, poolIDList);
+ super(bpmnFileName, bpmnFilePath, poolIDList);
this.bpmnDocument = bpmnDocument;
}
@@ -290,9 +290,89 @@
B2JMessages.Jpdl_SubProcess_Element_Name);
DomXmlWriter.mapAttribute(ele, B2JMessages.Dom_Element_Name,
processRoot);
+
+ // translate the transaction of subprocess
+ Element eAnnot = subProcess
+ .element(B2JMessages.Bpmn_EAnnotations_Element_Name);
+ if (eAnnot != null) {
+ Element details = eAnnot
+ .element(B2JMessages.Bpmn_Details_Element_Name);
+ if (details != null
+ && "true"
+ .equals(details
+ .attributeValue(B2JMessages.Bpmn_Value_Attribute_Name))) {
+ translateTransaction(processRoot);
+ }
+ }
}
/*
+ * translate a transaction of sub process
+ */
+ private void translateTransaction(Element processRoot) {
+ List<Element> lastEleList = TranslateHelper.locateLastElements(processRoot);
+
+ if (lastEleList.size() == 0) {
+ return;
+ }
+ // create a decision
+ Element decision = DomXmlWriter.addElement(processRoot,
+ B2JMessages.Jpdl_Decision_Element_Name);
+
+ DomXmlWriter.addAttribute(decision, B2JMessages.Dom_Element_Name,
+ B2JMessages.Jpdl_Element_Successful_Name);
+ // get bpmn id from map
+ String bpmnId = null;
+ for (String key : map.keySet()) {
+ if (map.get(key) == lastEleList.get(0)) {
+ bpmnId = key;
+ break;
+ }
+ }
+ map.put(bpmnId + B2JMessages.Jpdl_Element_Decision_Suffix, decision);
+
+ // create a transition from element to decision
+ for (Element ele : lastEleList) {
+ Element transition = DomXmlWriter.addElement(ele,
+ B2JMessages.Jpdl_Transition_Element);
+ transition.addAttribute(B2JMessages.Dom_Element_Name, ele
+ .attributeValue(B2JMessages.Dom_Element_Name)
+ + B2JMessages.To + B2JMessages.Jpdl_Decision_Element_Name);
+ transition.addAttribute(B2JMessages.To, decision
+ .attributeValue(B2JMessages.Dom_Element_Name));
+ }
+
+ // create a complete element
+ Element complete = DomXmlWriter.addElement(processRoot,
+ B2JMessages.Jpdl_Node_Element_Name);
+ DomXmlWriter.addAttribute(complete, B2JMessages.Dom_Element_Name,
+ B2JMessages.Jpdl_Element_Complete_Suffix);
+ map.put(bpmnId + B2JMessages.Jpdl_Element_Complete_Suffix, complete);
+
+ // create a cancel element
+ Element cancel = DomXmlWriter.addElement(processRoot,
+ B2JMessages.Jpdl_Node_Element_Name);
+ DomXmlWriter.addAttribute(cancel, B2JMessages.Dom_Element_Name,
+ B2JMessages.Jpdl_Element_Cancel_Suffix);
+ map.put(bpmnId + B2JMessages.Jpdl_Element_Cancel_Suffix, cancel);
+
+ // create transition from decision to complete element
+ Element toComplete = DomXmlWriter.addElement(decision,
+ B2JMessages.Jpdl_Transition_Element);
+ toComplete.addAttribute(B2JMessages.Dom_Element_Name, "true");
+ toComplete.addAttribute(B2JMessages.To, complete
+ .attributeValue(B2JMessages.Dom_Element_Name));
+
+ // create transition from decision to cancel element
+ Element toCancel = DomXmlWriter.addElement(decision,
+ B2JMessages.Jpdl_Transition_Element);
+ toCancel.addAttribute(B2JMessages.Dom_Element_Name, "false");
+ toCancel.addAttribute(B2JMessages.To, cancel
+ .attributeValue(B2JMessages.Dom_Element_Name));
+ }
+
+
+ /*
* Translate bpmn sequenceflows to jpdl transitions
*/
private void translateSequenceFlows(Element graph, Element processRoot) {
@@ -358,7 +438,7 @@
Element first = DomXmlWriter.addElement(element,
B2JMessages.Jpdl_Transition_Element);
first.addAttribute(B2JMessages.Dom_Element_Name, B2JMessages.To
- + B2JMessages.Space + name);
+ + B2JMessages.Underline + name);
first.addAttribute(B2JMessages.To, decision
.attributeValue(B2JMessages.Dom_Element_Name));
@@ -366,7 +446,7 @@
Element second = DomXmlWriter.addElement(decision,
B2JMessages.Jpdl_Transition_Element);
second.addAttribute(B2JMessages.Dom_Element_Name, B2JMessages.To
- + B2JMessages.Space
+ + B2JMessages.Underline
+ element.attributeValue(B2JMessages.Dom_Element_Name));
second.addAttribute(B2JMessages.To, element
.attributeValue(B2JMessages.Dom_Element_Name));
Modified:
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/b2j/translate/GraphicalFileGenerator.java
===================================================================
---
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/b2j/translate/GraphicalFileGenerator.java 2008-09-08
07:49:28 UTC (rev 10138)
+++
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/b2j/translate/GraphicalFileGenerator.java 2008-09-08
13:09:03 UTC (rev 10139)
@@ -13,7 +13,7 @@
import java.io.IOException;
import java.util.HashMap;
-import java.util.LinkedList;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -25,19 +25,19 @@
import org.jboss.tools.b2j.messages.B2JMessages;
/**
- * @author Grid Qian
+ * @author Grid Qian
*
- * this is a translator for bpmn_diagram to gpd of jpdl
+ * this is a translator for bpmn_diagram to gpd of jpdl
*/
-public class GraphicalFileGenerator extends BPMNTranslator{
-
+public class GraphicalFileGenerator extends BPMNTranslator {
+
Document document;
// gpd.xml documents list
- List<Document> gpdDefs = new LinkedList<Document>();
-
+ List<Document> gpdDefs = new ArrayList<Document>();
+
// the pool of gpd.xml name
- List<String> gpdPoolNames = new LinkedList<String>();
+ List<String> gpdPoolNames = new ArrayList<String>();
Map<String, Element> map = new HashMap<String, Element>();
public GraphicalFileGenerator(Document bpmnDiagramDocument,
@@ -114,22 +114,57 @@
for (String bpmnID : map.keySet()) {
if (bpmnID != null) {
// when translate bpmn loop activity, we create a mock
- // structure.
- // For this reason, we need to give a (x,y) increment to avoid
+ // structure and when translate bpmn transaction, we create a
+ // mock
+ // structure too. For these reason, we need to give a (x,y)
+ // increment to avoid
// two element overlap
int xIncre = 0;
int yIncre = 0;
Element bpmnGpdEle = TranslateHelper.getDiagramLayoutElement(
bpmnID, eleList);
- if (bpmnGpdEle == null
- && bpmnID
- .endsWith(B2JMessages.Bpmn_Vertice_Element_Name)) {
- bpmnGpdEle = TranslateHelper.getDiagramLayoutElement(
- TranslateHelper.getPureBpmnID(bpmnID,
- B2JMessages.Bpmn_Vertice_Element_Name),
- eleList);
- xIncre = 50;
- yIncre = 50;
+ if (bpmnGpdEle == null) {
+ if (bpmnID.endsWith(B2JMessages.Bpmn_Vertice_Element_Name)) {
+ bpmnGpdEle = TranslateHelper.getDiagramLayoutElement(
+ TranslateHelper.getPureBpmnID(bpmnID,
+ B2JMessages.Bpmn_Vertice_Element_Name),
+ eleList);
+ xIncre = 150;
+ yIncre = 50;
+ } else if (bpmnID
+ .endsWith(B2JMessages.Jpdl_Element_Decision_Suffix)) {
+ bpmnGpdEle = TranslateHelper
+ .getDiagramLayoutElement(
+ TranslateHelper
+ .getPureBpmnID(
+ bpmnID,
+ B2JMessages.Jpdl_Element_Decision_Suffix),
+ eleList);
+ xIncre = 150;
+ yIncre = 100;
+ } else if (bpmnID
+ .endsWith(B2JMessages.Jpdl_Element_Complete_Suffix)) {
+ bpmnGpdEle = TranslateHelper
+ .getDiagramLayoutElement(
+ TranslateHelper
+ .getPureBpmnID(
+ bpmnID,
+ B2JMessages.Jpdl_Element_Complete_Suffix),
+ eleList);
+ xIncre = 300;
+ yIncre = 0;
+ } else if (bpmnID
+ .endsWith(B2JMessages.Jpdl_Element_Cancel_Suffix)) {
+ bpmnGpdEle = TranslateHelper
+ .getDiagramLayoutElement(
+ TranslateHelper
+ .getPureBpmnID(
+ bpmnID,
+ B2JMessages.Jpdl_Element_Cancel_Suffix),
+ eleList);
+ xIncre = 300;
+ yIncre = 200;
+ }
}
if (bpmnGpdEle == null) {
continue;
Modified:
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/b2j/translate/TranslateHelper.java
===================================================================
---
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/b2j/translate/TranslateHelper.java 2008-09-08
07:49:28 UTC (rev 10138)
+++
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/b2j/translate/TranslateHelper.java 2008-09-08
13:09:03 UTC (rev 10139)
@@ -13,6 +13,7 @@
import java.io.File;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -125,7 +126,35 @@
return isOk;
}
+
+ /*
+ * select the elements from process. These elements have no transitions sub
+ * element or have transtions to end-state.
+ */
+ public static List<Element> locateLastElements(Element processRoot) {
+ List<Element> list = new ArrayList<Element>();
+ if (processRoot.element(B2JMessages.Jpdl_End_Element_Name) != null) {
+ Element endState = processRoot.element(B2JMessages.Jpdl_End_Element_Name);
+ for (Object ele : processRoot.elements()) {
+ Element subEle = ((Element) ele).element(B2JMessages.Jpdl_Transition_Element);
+ if (subEle != null
+ && endState.attributeValue(B2JMessages.Dom_Element_Name).equals(
+ subEle.attributeValue(B2JMessages.To))) {
+ list.add((Element) ele);
+ }
+ }
+ } else {
+ for (Object ele : processRoot.elements()) {
+ if (((Element) ele).element(B2JMessages.Jpdl_Transition_Element) == null) {
+ list.add((Element) ele);
+ }
+ }
+ }
+
+ return list;
+ }
+
/*
* get the layout element from bpmn_diagram file by id
*/
Modified:
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/bpmnto/action/BpmnToAction.java
===================================================================
---
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/bpmnto/action/BpmnToAction.java 2008-09-08
07:49:28 UTC (rev 10138)
+++
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/bpmnto/action/BpmnToAction.java 2008-09-08
13:09:03 UTC (rev 10139)
@@ -1,7 +1,6 @@
package org.jboss.tools.bpmnto.action;
import java.util.ArrayList;
-import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -116,7 +115,7 @@
if (dialog.open() == Window.OK) {
selected = dialog.getResult();
}
- List<String> list = new LinkedList<String>();
+ List<String> list = new ArrayList<String>();
if (selected == null) {
return list;
}
Modified:
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/bpmnto/util/DomXmlWriter.java
===================================================================
---
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/bpmnto/util/DomXmlWriter.java 2008-09-08
07:49:28 UTC (rev 10138)
+++
workspace/grid/org.jboss.tools.bpmnTo/src/org/jboss/tools/bpmnto/util/DomXmlWriter.java 2008-09-08
13:09:03 UTC (rev 10139)
@@ -12,7 +12,7 @@
package org.jboss.tools.bpmnto.util;
import java.io.*;
-import java.util.LinkedList;
+import java.util.ArrayList;
import java.util.List;
import org.dom4j.*;
@@ -95,7 +95,7 @@
* get a named element from a element (any depth)
*/
public static List<Element> getElementsByName(Element element, String name) {
- List<Element> list = new LinkedList<Element>();
+ List<Element> list = new ArrayList<Element>();
for (Object ele : element.elements()) {
if (name.equals(((Element) ele).getName())) {
list.add((Element) ele);