[jboss-svn-commits] JBL Code SVN: r35806 - in labs/jbossrules/trunk/drools-process/drools-bpmn2/src: test/java/org/drools/bpmn2 and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Oct 29 18:41:20 EDT 2010


Author: atoulme
Date: 2010-10-29 18:41:19 -0400 (Fri, 29 Oct 2010)
New Revision: 35806

Added:
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/Association.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AssociationHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-Association.xml
Modified:
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AbstractNodeHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/DataStoreHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/DefinitionsHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java
Log:
support for parsing associations and placing them as part of process metadata under the Definitions object

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AbstractNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AbstractNodeHandler.java	2010-10-29 22:39:45 UTC (rev 35805)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AbstractNodeHandler.java	2010-10-29 22:41:19 UTC (rev 35806)
@@ -54,6 +54,7 @@
         this.validPeers.add(Variable.class);
         this.validPeers.add(Node.class);
         this.validPeers.add(SequenceFlow.class);
+        this.validPeers.add(Association.class);
     }
 
     public Object start(final String uri, final String localName, final Attributes attrs,

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/Association.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/Association.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/Association.java	2010-10-29 22:41:19 UTC (rev 35806)
@@ -0,0 +1,55 @@
+/**
+ * Copyright 2010 Intalio Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.drools.bpmn2.xml;
+
+import java.io.Serializable;
+
+/**
+ * @author <a href="mailto:atoulme at intalio.com">Antoine Toulme</a>
+ *
+ */
+public class Association implements Serializable {
+
+	private static final long serialVersionUID = -4892431105988908743L;
+	
+	private String id;
+	private String sourceRef;
+	private String targetRef;
+	
+	public String getId() {
+		return id;
+	}
+	
+	public void setId(String id) {
+		this.id = id;
+	}
+	
+	public String getSourceRef() {
+		return sourceRef;
+	}
+	
+	public void setSourceRef(String sourceRef) {
+		this.sourceRef = sourceRef;
+	}
+	
+	public String getTargetRef() {
+		return targetRef;
+	}
+	
+	public void setTargetRef(String targetRef) {
+		this.targetRef = targetRef;
+	}
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AssociationHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AssociationHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AssociationHandler.java	2010-10-29 22:41:19 UTC (rev 35806)
@@ -0,0 +1,90 @@
+/**
+ * Copyright 2010 Intalio Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.drools.bpmn2.xml;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+
+import org.drools.bpmn2.core.Definitions;
+import org.drools.bpmn2.core.Lane;
+import org.drools.bpmn2.core.SequenceFlow;
+import org.drools.definition.process.Process;
+import org.drools.process.core.context.variable.Variable;
+import org.drools.workflow.core.Node;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+/**
+ * @author <a href="mailto:atoulme at intalio.com">Antoine Toulme</a>
+ *
+ */
+public class AssociationHandler extends BaseAbstractHandler implements Handler {
+
+	public AssociationHandler() {
+		if ((this.validParents == null) && (this.validPeers == null)) {
+			this.validParents = new HashSet<Class<?>>();
+			this.validParents.add(Process.class);
+
+			this.validPeers = new HashSet<Class<?>>();
+	        this.validPeers.add(null);
+	        this.validPeers.add(Lane.class);
+	        this.validPeers.add(Variable.class);
+	        this.validPeers.add(Node.class);
+	        this.validPeers.add(SequenceFlow.class);
+
+			this.allowNesting = false;
+		}
+	}
+	
+	public Object start(final String uri, final String localName, 
+			final Attributes attrs, final ExtensibleXmlParser parser) 
+			throws SAXException {
+		parser.startElementBuilder(localName, attrs);
+		Association association = new Association();
+		association.setId(attrs.getValue("id"));
+		association.setSourceRef(attrs.getValue("sourceRef"));
+		association.setTargetRef(attrs.getValue("targetRef"));
+		
+		Process parent = (Process) parser.getParent();
+		Definitions definitions = (Definitions) 
+			parent.getMetaData().get("Definitions");
+		
+		// FIXME for now associations are stored under the definitions node
+		// we will move them under process and subprocesses when it becomes possible ?
+		List<Association> associations = definitions.getAssociations();
+		if (associations == null) {
+			associations = new ArrayList<Association>();
+			definitions.setAssociations(associations);
+		}
+		associations.add(association);
+		
+		return association;
+	}
+
+	public Object end(final String uri, final String localName,
+			final ExtensibleXmlParser parser) throws SAXException {
+		parser.endElementBuilder();
+		return parser.getCurrent();
+	}
+
+	public Class<?> generateNodeFor() {
+		return Association.class;
+	}
+}

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java	2010-10-29 22:39:45 UTC (rev 35805)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java	2010-10-29 22:41:19 UTC (rev 35806)
@@ -77,6 +77,7 @@
         addHandler("escalation", new EscalationHandler());
         addHandler("error", new ErrorHandler());
         addHandler("dataStore", new DataStoreHandler());
+        addHandler("association", new AssociationHandler());
         
         handlersByClass.put(Split.class, new SplitHandler());
         handlersByClass.put(Join.class, new JoinHandler());

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/DataStoreHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/DataStoreHandler.java	2010-10-29 22:39:45 UTC (rev 35805)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/DataStoreHandler.java	2010-10-29 22:41:19 UTC (rev 35806)
@@ -44,10 +44,10 @@
 	@SuppressWarnings("rawtypes")
 	public DataStoreHandler() {
 		if ((this.validParents == null) && (this.validPeers == null)) {
-			this.validParents = new HashSet();
+			this.validParents = new HashSet<Class<?>>();
 			this.validParents.add(Definitions.class);
 
-			this.validPeers = new HashSet();
+			this.validPeers = new HashSet<Class<?>>();
 			this.validPeers.add(null);
             this.validPeers.add(ItemDefinition.class);
             this.validPeers.add(Message.class);

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/DefinitionsHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/DefinitionsHandler.java	2010-10-29 22:39:45 UTC (rev 35805)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/DefinitionsHandler.java	2010-10-29 22:41:19 UTC (rev 35806)
@@ -63,9 +63,6 @@
 		process.setMetaData("TargetNamespace", namespace);
 		definitions.setTargetNamespace(namespace);
 		
-		// register the definitions object as metadata of process.
-		process.setMetaData("Definitions", definitions);
-		
 		return definitions;
 	}
 

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java	2010-10-29 22:39:45 UTC (rev 35805)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java	2010-10-29 22:41:19 UTC (rev 35806)
@@ -103,6 +103,10 @@
 		process.setPackageName(packageName);
 
 		((ProcessBuildData) parser.getData()).setProcess(process);
+		
+		// register the definitions object as metadata of process.
+		process.setMetaData("Definitions", parser.getParent());
+		
 		return process;
 	}
 

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java	2010-10-29 22:39:45 UTC (rev 35805)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java	2010-10-29 22:41:19 UTC (rev 35806)
@@ -157,6 +157,11 @@
         visitHeader(process, xmlDump, metaDataType);
         visitNodes(process, xmlDump, metaDataType);
         visitConnections(process.getNodes(), xmlDump, metaDataType);
+        if (def.getAssociations() != null) {
+        	for (Association association : def.getAssociations()) {
+        		visitAssociation(association, xmlDump);
+        	}
+        }
         xmlDump.append("  </process>" + EOL + EOL);
         if (metaDataType == META_DATA_USING_DI) {
         	xmlDump.append(
@@ -171,7 +176,14 @@
         xmlDump.append("</definitions>");
     }
     
-    private void visitDataStore(DataStore dataStore, StringBuilder xmlDump) {
+    private void visitAssociation(Association association, StringBuilder xmlDump) {
+    	xmlDump.append("  <association id=\"" + association.getId() + "\" ");
+    	xmlDump.append(" sourceRef=\"" + association.getSourceRef() + "\" ");
+    	xmlDump.append(" targetRef=\"" + association.getTargetRef() + "\" ");
+    	xmlDump.append("/>" + EOL);
+	}
+
+	private void visitDataStore(DataStore dataStore, StringBuilder xmlDump) {
     	String itemSubjectRef = dataStore.getItemSubjectRef();
     	String itemDefId = itemSubjectRef.substring(itemSubjectRef.indexOf(':') + 1);
     	xmlDump.append("  <itemDefinition id=\"" + itemDefId + "\" ");

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java	2010-10-29 22:39:45 UTC (rev 35805)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java	2010-10-29 22:41:19 UTC (rev 35806)
@@ -34,6 +34,7 @@
 import org.drools.bpmn2.handler.ReceiveTaskHandler;
 import org.drools.bpmn2.handler.SendTaskHandler;
 import org.drools.bpmn2.handler.ServiceTaskHandler;
+import org.drools.bpmn2.xml.Association;
 import org.drools.bpmn2.xml.BPMNDISemanticModule;
 import org.drools.bpmn2.xml.BPMNSemanticModule;
 import org.drools.bpmn2.xml.DataStore;
@@ -161,6 +162,19 @@
         assertEquals("employeeStore", dataStore.getName());
         assertEquals(String.class.getCanonicalName(), ((ObjectDataType) dataStore.getType()).getClassName());
     }
+    
+    public void testAssociation() throws Exception {
+    	KnowledgeBase kbase = createKnowledgeBase("BPMN2-Association.xml");
+		StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);
+        ProcessInstance processInstance = ksession.startProcess("Evaluation");
+        Definitions def = (Definitions) processInstance.getProcess().getMetaData().get("Definitions");
+        assertNotNull(def.getAssociations());
+        assertTrue(def.getAssociations().size() == 1);
+        Association assoc = def.getAssociations().get(0);
+        assertEquals("_1234", assoc.getId());
+        assertEquals("_1", assoc.getSourceRef());
+        assertEquals("_2", assoc.getTargetRef());
+    }
 
 	public void testEvaluationProcess() throws Exception {
 		KnowledgeBase kbase = createKnowledgeBase("BPMN2-EvaluationProcess.xml");

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-Association.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-Association.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-Association.xml	2010-10-29 22:41:19 UTC (rev 35806)
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+             targetNamespace="http://www.example.org/EvaluationExample"
+             typeLanguage="http://www.java.com/javaTypes"
+             expressionLanguage="http://www.mvel.org/2.0"
+             xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
+             xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+             xs:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
+             xmlns:tns="http://www.example.org/EvaluationExample">
+
+  <process id="Evaluation" name="Evaluation Process">
+    
+    
+  
+    <!-- nodes -->  
+    <startEvent id="_1" name="StartProcess"/>
+    <scriptTask id="_2" name="Log">
+      <script>System.out.println("Just outputting something");</script>
+    </scriptTask>
+    <endEvent id="_3" name="EndProcess">
+      <terminateEventDefinition/>
+    </endEvent>
+    
+    <!-- connections -->
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <sequenceFlow sourceRef="_2" targetRef="_3"/>
+    
+    <!-- associations -->
+    <association id="_1234" sourceRef="_1" targetRef="_2"/>
+  </process>
+</definitions>
\ No newline at end of file



More information about the jboss-svn-commits mailing list