[jboss-svn-commits] JBL Code SVN: r28871 - in labs/jbossrules/trunk: drools-eclipse/org.drools.eclipse/META-INF and 12 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Aug 7 09:21:24 EDT 2009
Author: KrisVerlaenen
Date: 2009-08-07 09:21:23 -0400 (Fri, 07 Aug 2009)
New Revision: 28871
Added:
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/bpmn2/
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/bpmn2/NewBPMNProcessFilePage.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/bpmn2/NewBPMNProcessFileWizard.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/bpmn2/editor/
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/bpmn2/editor/BPMNModelEditor.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/flow/bpmn2/
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/flow/bpmn2/Sample.bpmn.template
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/JoinHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SplitHandler.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/resources/BPMN2-BuyerProcess.png
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-BuyerProcess.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess2.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess3.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplit.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MinimalProcessWithGraphical.xml
Modified:
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/.classpath
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/META-INF/MANIFEST.MF
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/build.properties
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/plugin.xml
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/pom.xml
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/builder/DroolsBuilder.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/AuditView.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/WorkingMemoryViewContentProvider.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/SequenceFlow.java
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/EndEventHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ExclusiveGatewayHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ParallelGatewayHandler.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/PropertyHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ScriptTaskHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StartEventHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/UserTaskHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess.xml
Log:
- bpmn2 commit
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/.classpath 2009-08-07 13:19:42 UTC (rev 28870)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/.classpath 2009-08-07 13:21:23 UTC (rev 28871)
@@ -17,5 +17,6 @@
<classpathentry exported="true" kind="lib" path="lib/antlr-runtime.jar"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="lib" path="lib/drools-bpmn2.jar"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/META-INF/MANIFEST.MF
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/META-INF/MANIFEST.MF 2009-08-07 13:19:42 UTC (rev 28870)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/META-INF/MANIFEST.MF 2009-08-07 13:21:23 UTC (rev 28871)
@@ -43,6 +43,7 @@
lib/antlr-runtime.jar,
lib/drools-templates.jar,
lib/mvel2.jar,
- lib/joda-time.jar
+ lib/joda-time.jar,
+ lib/drools-bpmn2.jar
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Export-Package: org.drools.eclipse.util
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/build.properties
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/build.properties 2009-08-07 13:19:42 UTC (rev 28870)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/build.properties 2009-08-07 13:21:23 UTC (rev 28871)
@@ -3,11 +3,7 @@
icons/,\
plugin.xml,\
help/,\
- lib/,\
- lib/drools-templates.jar,\
- lib/drools-api.jar,\
- lib/mvel2.jar,\
- lib/joda-time.jar
+ lib/
bin.excludes = lib/drools-documentation.jar
src.includes = META-INF/,\
icons/,\
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/plugin.xml
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/plugin.xml 2009-08-07 13:19:42 UTC (rev 28870)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/plugin.xml 2009-08-07 13:21:23 UTC (rev 28871)
@@ -462,6 +462,18 @@
</extension>
<extension
+ point="org.eclipse.ui.editors">
+ <editor
+ name="BPMN2 Editor"
+ extensions="bpmn, bpmn2"
+ icon="icons/process.gif"
+ contributorClass="org.drools.eclipse.flow.common.editor.GenericActionBarContributor"
+ class="org.drools.eclipse.flow.bpmn2.editor.BPMNModelEditor"
+ id="org.drools.eclipse.flow.bpmn2.editor.BPMNModelEditor">
+ </editor>
+ </extension>
+
+ <extension
point = "org.eclipse.ui.editorActions">
<editorContribution
id="org.drools.eclipse.flow.ruleflow.editor.action.CheckRuleFlowAction"
@@ -511,6 +523,42 @@
class="org.drools.eclipse.flow.common.editor.action.ExportImageAction"
/>
</editorContribution>
+ <editorContribution
+ id="org.drools.eclipse.flow.common.editor.action.VerticalAutoLayoutAction"
+ targetID="org.drools.eclipse.flow.bpmn2.editor.BPMNModelEditor">
+ <action
+ id="org.drools.eclipse.flow.common.editor.action.VerticalAutoLayoutAction"
+ label="Auto Layout (Vertical)"
+ toolbarPath="Drools"
+ icon="icons/processV.gif"
+ tooltip="Auto layout the workflow (vertical)"
+ class="org.drools.eclipse.flow.common.editor.action.VerticalAutoLayoutAction"
+ />
+ </editorContribution>
+ <editorContribution
+ id="org.drools.eclipse.flow.common.editor.action.HorizontalAutoLayoutAction"
+ targetID="org.drools.eclipse.flow.bpmn2.editor.BPMNModelEditor">
+ <action
+ id="org.drools.eclipse.flow.common.editor.action.HorizontalAutoLayoutAction"
+ label="Auto Layout (Horizontal)"
+ toolbarPath="Drools"
+ icon="icons/process.gif"
+ tooltip="Auto layout the workflow (horizontal)"
+ class="org.drools.eclipse.flow.common.editor.action.HorizontalAutoLayoutAction"
+ />
+ </editorContribution>
+ <editorContribution
+ id="org.drools.eclipse.flow.common.editor.action.ExportImageAction"
+ targetID="org.drools.eclipse.flow.bpmn2.editor.BPMNModelEditor">
+ <action
+ id="org.drools.eclipse.flow.common.editor.action.ExportImageAction"
+ label="Export Image"
+ toolbarPath="Drools"
+ icon="icons/export.gif"
+ tooltip="Export image (PNG)"
+ class="org.drools.eclipse.flow.common.editor.action.ExportImageAction"
+ />
+ </editorContribution>
</extension>
<extension
@@ -530,6 +578,19 @@
</wizard>
</extension>
+ <extension
+ point = "org.eclipse.ui.newWizards">
+ <wizard
+ id = "org.drools.eclipse.flow.bpmn2.NewBPMNProcessFileWizard"
+ name = "BPMN2 Process"
+ class="org.drools.eclipse.flow.bpmn2.NewBPMNProcessFileWizard"
+ category="org.drools.eclipse.new"
+ icon="icons/process.gif">
+ <description>A wizard that creates a new ruleflow file</description>
+ <selection class="org.eclipse.core.resources.IResource"/>
+ </wizard>
+ </extension>
+
<extension-point id="processExtension" name="Process Extension" schema="schema/processExtension.exsd"/>
<extension-point id="runtimeRecognizer" name="Drools Runtime Recognizer" schema="schema/runtimeRecognizer.exsd"/>
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/pom.xml 2009-08-07 13:19:42 UTC (rev 28870)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/pom.xml 2009-08-07 13:21:23 UTC (rev 28871)
@@ -134,6 +134,22 @@
</exclusions>
</dependency>
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-bpmn2</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>org.eclipse.jdt</groupId>
+ <artifactId>core</artifactId>
+ </exclusion>
+
+ <exclusion>
+ <groupId>janino</groupId>
+ <artifactId>janino</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
<!--dependency>
<groupId>org.drools</groupId>
<artifactId>drools-docs-expert</artifactId>
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java 2009-08-07 13:19:42 UTC (rev 28870)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java 2009-08-07 13:21:23 UTC (rev 28871)
@@ -26,6 +26,7 @@
import java.util.MissingResourceException;
import java.util.ResourceBundle;
+import org.drools.bpmn2.xml.BPMNSemanticModule;
import org.drools.compiler.DrlParser;
import org.drools.compiler.DroolsError;
import org.drools.compiler.DroolsParserException;
@@ -47,6 +48,7 @@
import org.drools.rule.Package;
import org.drools.rule.builder.dialect.java.JavaDialectConfiguration;
import org.drools.util.StringUtils;
+import org.drools.xml.SemanticModules;
import org.drools.xml.XmlProcessReader;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
@@ -513,7 +515,10 @@
}
configuration.setClassLoader( newLoader );
- XmlProcessReader xmlReader = new XmlProcessReader( configuration.getSemanticModules() );
+ SemanticModules modules = configuration.getSemanticModules();
+ modules.addSemanticModule( new BPMNSemanticModule() );
+
+ XmlProcessReader xmlReader = new XmlProcessReader( modules );
Process process = (Process) xmlReader.read( new StringReader( input ) );
if ( process != null ) {
return parseProcess( process,
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/builder/DroolsBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/builder/DroolsBuilder.java 2009-08-07 13:19:42 UTC (rev 28870)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/builder/DroolsBuilder.java 2009-08-07 13:21:23 UTC (rev 28871)
@@ -27,9 +27,15 @@
import org.drools.eclipse.DroolsEclipsePlugin;
import org.drools.eclipse.ProcessInfo;
import org.drools.eclipse.preferences.IDroolsConstants;
+import org.drools.eclipse.util.DroolsRuntime;
+import org.drools.eclipse.util.DroolsRuntimeManager;
+import org.drools.eclipse.wizard.project.NewDroolsProjectWizard;
import org.drools.guvnor.client.modeldriven.brl.RuleModel;
+import org.drools.guvnor.client.modeldriven.dt.GuidedDecisionTable;
import org.drools.guvnor.server.util.BRDRLPersistence;
import org.drools.guvnor.server.util.BRXMLPersistence;
+import org.drools.guvnor.server.util.GuidedDTDRLPersistence;
+import org.drools.guvnor.server.util.GuidedDTXMLPersistence;
import org.drools.lang.ExpanderException;
import org.drools.template.parser.DecisionTableParseException;
import org.eclipse.core.resources.IFile;
@@ -90,6 +96,25 @@
protected void fullBuild(IProgressMonitor monitor)
throws CoreException {
+ removeProblemsFor(getProject());
+ IJavaProject project = JavaCore.create(getProject());
+ IClasspathEntry[] classpathEntries = project.getRawClasspath();
+ for (int i = 0; i < classpathEntries.length; i++) {
+ if (NewDroolsProjectWizard.DROOLS_CLASSPATH_CONTAINER_PATH.equals(classpathEntries[i].getPath().toString())) {
+ String[] jars = DroolsRuntimeManager.getDroolsRuntimeJars(getProject());
+ if (jars == null || jars.length == 0) {
+ String runtime = DroolsRuntimeManager.getDroolsRuntime(getProject());
+ IMarker marker = getProject().createMarker(IDroolsModelMarker.DROOLS_MODEL_PROBLEM_MARKER);
+ if (runtime == null) {
+ marker.setAttribute(IMarker.MESSAGE, "Could not find default Drools runtime");
+ } else {
+ marker.setAttribute(IMarker.MESSAGE, "Could not find Drools runtime " + runtime);
+ }
+ marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR);
+ return;
+ }
+ }
+ }
getProject().accept(new DroolsBuildVisitor());
}
@@ -118,11 +143,11 @@
protected boolean parseResource(IResource res, boolean clean) {
try {
- IJavaProject project = JavaCore.create(res.getProject());
// exclude .guvnorinfo files
if (".guvnorinfo".equals(res.getName())) {
return false;
}
+ IJavaProject project = JavaCore.create(res.getProject());
// exclude files that are located in the output directory,
// unless the ouput directory is the same as the project location
if (!project.getOutputLocation().equals(project.getPath())
@@ -207,6 +232,20 @@
createMarker(res, t.getMessage(), -1);
}
return false;
+ } else if (res instanceof IFile && "bpmn".equals(res.getFileExtension())) {
+ removeProblemsFor(res);
+ try {
+ if (clean) {
+ DroolsEclipsePlugin.getDefault().invalidateResource(res);
+ }
+ DroolsBuildMarker[] markers = parseRuleFlowFile((IFile) res);
+ for (int i = 0; i < markers.length; i++) {
+ createMarker(res, markers[i].getText(), markers[i].getLine());
+ }
+ } catch (Throwable t) {
+ createMarker(res, t.getMessage(), -1);
+ }
+ return false;
}
return true;
@@ -326,6 +365,37 @@
return (DroolsBuildMarker[]) markers.toArray(new DroolsBuildMarker[markers.size()]);
}
+ private DroolsBuildMarker[] parseGDSTFile(IFile file) {
+ List markers = new ArrayList();
+ try {
+ String gdst = convertToString(file.getContents());
+ GuidedDecisionTable dt = GuidedDTXMLPersistence.getInstance().unmarshal(gdst);
+ String drl = GuidedDTDRLPersistence.getInstance().marshal(dt);
+
+ // TODO pass this through DSL converter in case brl is based on dsl
+
+ DRLInfo drlInfo =
+ DroolsEclipsePlugin.getDefault().parseGDSTResource(drl, file);
+ // parser errors
+ markParseErrors(markers, drlInfo.getParserErrors());
+ markOtherErrors(markers, drlInfo.getBuilderErrors());
+ } catch (DroolsParserException e) {
+ // we have an error thrown from DrlParser
+ Throwable cause = e.getCause();
+ if (cause instanceof RecognitionException ) {
+ RecognitionException recogErr = (RecognitionException) cause;
+ markers.add(new DroolsBuildMarker(recogErr.getMessage(), recogErr.line)); //flick back the line number
+ }
+ } catch (Exception t) {
+ String message = t.getMessage();
+ if (message == null || message.trim().equals( "" )) {
+ message = "Error: " + t.getClass().getName();
+ }
+ markers.add(new DroolsBuildMarker(message));
+ }
+ return (DroolsBuildMarker[]) markers.toArray(new DroolsBuildMarker[markers.size()]);
+ }
+
protected DroolsBuildMarker[] parseRuleFlowFile(IFile file) {
if (!file.exists()) {
return new DroolsBuildMarker[0];
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/AuditView.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/AuditView.java 2009-08-07 13:19:42 UTC (rev 28870)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/AuditView.java 2009-08-07 13:21:23 UTC (rev 28871)
@@ -203,7 +203,7 @@
break;
case LogEvent.BEFORE_RULEFLOW_CREATED:
RuleFlowLogEvent inRuleFlowEvent = (RuleFlowLogEvent) inEvent;
- event.setString("RuleFlow started: " + inRuleFlowEvent.getProcessName() + "[" + inRuleFlowEvent.getProcessId() + "]");
+ event.setString("Process started: " + inRuleFlowEvent.getProcessName() + "[" + inRuleFlowEvent.getProcessId() + "]");
if (!beforeEvents.isEmpty()) {
((Event) beforeEvents.peek()).addSubEvent(event);
} else {
@@ -216,7 +216,7 @@
break;
case LogEvent.BEFORE_RULEFLOW_COMPLETED:
inRuleFlowEvent = (RuleFlowLogEvent) inEvent;
- event.setString("RuleFlow completed: " + inRuleFlowEvent.getProcessName() + "[" + inRuleFlowEvent.getProcessId() + "]");
+ event.setString("Process completed: " + inRuleFlowEvent.getProcessName() + "[" + inRuleFlowEvent.getProcessId() + "]");
if (!beforeEvents.isEmpty()) {
((Event) beforeEvents.peek()).addSubEvent(event);
} else {
@@ -229,7 +229,7 @@
break;
case LogEvent.BEFORE_RULEFLOW_NODE_TRIGGERED:
RuleFlowNodeLogEvent inRuleFlowNodeEvent = (RuleFlowNodeLogEvent) inEvent;
- event.setString("RuleFlow node triggered: " + inRuleFlowNodeEvent.getNodeName() + " in process " + inRuleFlowNodeEvent.getProcessName() + "[" + inRuleFlowNodeEvent.getProcessId() + "]");
+ event.setString("Process node triggered: " + inRuleFlowNodeEvent.getNodeName() + " in process " + inRuleFlowNodeEvent.getProcessName() + "[" + inRuleFlowNodeEvent.getProcessId() + "]");
if (!beforeEvents.isEmpty()) {
((Event) beforeEvents.peek()).addSubEvent(event);
} else {
@@ -242,7 +242,7 @@
break;
case LogEvent.BEFORE_RULEFLOW_GROUP_ACTIVATED:
RuleFlowGroupLogEvent inRuleFlowGroupEvent = (RuleFlowGroupLogEvent) inEvent;
- event.setString("RuleFlowGroup activated: " + inRuleFlowGroupEvent.getGroupName() + "[size=" + inRuleFlowGroupEvent.getSize() + "]");
+ event.setString("RuleFlow Group activated: " + inRuleFlowGroupEvent.getGroupName() + "[size=" + inRuleFlowGroupEvent.getSize() + "]");
if (!beforeEvents.isEmpty()) {
((Event) beforeEvents.peek()).addSubEvent(event);
} else {
@@ -255,7 +255,7 @@
break;
case LogEvent.BEFORE_RULEFLOW_GROUP_DEACTIVATED:
inRuleFlowGroupEvent = (RuleFlowGroupLogEvent) inEvent;
- event.setString("RuleFlowGroup deactivated: " + inRuleFlowGroupEvent.getGroupName() + "[size=" + inRuleFlowGroupEvent.getSize() + "]");
+ event.setString("RuleFlow Group deactivated: " + inRuleFlowGroupEvent.getGroupName() + "[size=" + inRuleFlowGroupEvent.getSize() + "]");
if (!beforeEvents.isEmpty()) {
((Event) beforeEvents.peek()).addSubEvent(event);
} else {
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/WorkingMemoryViewContentProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/WorkingMemoryViewContentProvider.java 2009-08-07 13:19:42 UTC (rev 28870)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/WorkingMemoryViewContentProvider.java 2009-08-07 13:21:23 UTC (rev 28871)
@@ -73,9 +73,23 @@
result.add(new MyJavaVariable("[" + i + "]", vals[i]));
}
+// objects = DebugUtil.getValueByExpression("return iterateNonDefaultEntryPointObjectsToList().toArray();", stackObj);
+//
+// if (objects instanceof IJavaArray) {
+// IJavaArray array = (IJavaArray) objects;
+// vals = array.getValues();
+// for ( int i = 0; i < vals.length; i++ ) {
+// vals = array.getValues();
+// name = name.replace(' ', '_');
+// result.add(new MyVariableWrapper(name,
+// new ObjectWrapper((IJavaObject) agendaGroup,
+// (IJavaVariable[]) activationsResult.toArray(new IJavaVariable[activationsResult.size()]))));
+// }
+// }
return (IVariable[]) result.toArray(new IVariable[0]);
}
+
return null;
}
Added: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/bpmn2/NewBPMNProcessFilePage.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/bpmn2/NewBPMNProcessFilePage.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/bpmn2/NewBPMNProcessFilePage.java 2009-08-07 13:21:23 UTC (rev 28871)
@@ -0,0 +1,73 @@
+package org.drools.eclipse.flow.bpmn2;
+/*
+ * Copyright 2005 JBoss 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.
+ */
+
+import java.io.InputStream;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
+import org.eclipse.ui.ide.IDE;
+
+/**
+ * Page for creating a new RuleFlow file.
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class NewBPMNProcessFilePage extends WizardNewFileCreationPage {
+
+ private IWorkbench workbench;
+
+ public NewBPMNProcessFilePage(IWorkbench workbench, IStructuredSelection selection) {
+ super("createBPMNProcessPage", selection);
+ setTitle("Create BPMN Process");
+ setDescription("Create a new BPMN process");
+ this.workbench = workbench;
+ }
+
+ public void createControl(Composite parent) {
+ super.createControl(parent);
+ setPageComplete(true);
+ }
+
+ public boolean finish() {
+ String fileName = getFileName();
+ if (!fileName.endsWith(".bpmn")) {
+ setFileName(fileName + ".bpmn");
+ }
+ org.eclipse.core.resources.IFile newFile = createNewFile();
+ if (newFile == null)
+ return false;
+ try {
+ IWorkbenchWindow dwindow = workbench.getActiveWorkbenchWindow();
+ org.eclipse.ui.IWorkbenchPage page = dwindow.getActivePage();
+ if (page != null)
+ IDE.openEditor(page, newFile, true);
+ } catch (PartInitException e) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+
+ protected InputStream getInitialContents() {
+ String s = "org/drools/eclipse/flow/bpmn2/Sample.bpmn.template";
+ return getClass().getClassLoader().getResourceAsStream(s);
+ }
+}
Added: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/bpmn2/NewBPMNProcessFileWizard.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/bpmn2/NewBPMNProcessFileWizard.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/bpmn2/NewBPMNProcessFileWizard.java 2009-08-07 13:21:23 UTC (rev 28871)
@@ -0,0 +1,49 @@
+package org.drools.eclipse.flow.bpmn2;
+/*
+ * Copyright 2005 JBoss 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.
+ */
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+
+/**
+ * Wizard for creating a new RuleFlow file.
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class NewBPMNProcessFileWizard extends Wizard implements INewWizard {
+
+ private IWorkbench workbench;
+ private IStructuredSelection selection;
+ private NewBPMNProcessFilePage mainPage;
+
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ this.workbench = workbench;
+ this.selection = selection;
+ setWindowTitle("New BPMN Process");
+ }
+
+ public void addPages() {
+ mainPage = new NewBPMNProcessFilePage(workbench, selection);
+ addPage(mainPage);
+ }
+
+ public boolean performFinish() {
+ return mainPage.finish();
+ }
+
+}
Added: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/bpmn2/editor/BPMNModelEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/bpmn2/editor/BPMNModelEditor.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/bpmn2/editor/BPMNModelEditor.java 2009-08-07 13:21:23 UTC (rev 28871)
@@ -0,0 +1,213 @@
+package org.drools.eclipse.flow.bpmn2.editor;
+/*
+ * Copyright 2005 JBoss 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.
+ */
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.StringReader;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.bpmn2.xml.BPMNSemanticModule;
+import org.drools.bpmn2.xml.XmlBPMNProcessDumper;
+import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.eclipse.DroolsEclipsePlugin;
+import org.drools.eclipse.WorkItemDefinitions;
+import org.drools.eclipse.flow.common.editor.GenericModelEditor;
+import org.drools.eclipse.flow.ruleflow.core.RuleFlowProcessWrapper;
+import org.drools.eclipse.flow.ruleflow.core.RuleFlowWrapperBuilder;
+import org.drools.eclipse.flow.ruleflow.core.StartNodeWrapper;
+import org.drools.eclipse.flow.ruleflow.core.WorkItemWrapper;
+import org.drools.eclipse.flow.ruleflow.editor.RuleFlowPaletteFactory;
+import org.drools.eclipse.flow.ruleflow.editor.editpart.RuleFlowEditPartFactory;
+import org.drools.eclipse.util.ProjectClassLoader;
+import org.drools.process.core.WorkDefinition;
+import org.drools.process.core.WorkDefinitionExtension;
+import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.xml.SemanticModules;
+import org.drools.xml.XmlProcessReader;
+import org.drools.xml.XmlRuleFlowProcessDumper;
+import org.drools.xml.processes.RuleFlowMigrator;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.gef.EditPartFactory;
+import org.eclipse.gef.palette.CombinedTemplateCreationEntry;
+import org.eclipse.gef.palette.PaletteDrawer;
+import org.eclipse.gef.palette.PaletteRoot;
+import org.eclipse.gef.requests.SimpleFactory;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IFileEditorInput;
+
+/**
+ * Graphical editor for a RuleFlow.
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class BPMNModelEditor extends GenericModelEditor {
+
+ protected EditPartFactory createEditPartFactory() {
+ RuleFlowEditPartFactory factory = new RuleFlowEditPartFactory();
+ factory.setProject(getJavaProject());
+ return factory;
+ }
+
+ protected PaletteRoot createPalette() {
+ return RuleFlowPaletteFactory.createPalette();
+ }
+
+ protected Object createModel() {
+ RuleFlowProcessWrapper result = new RuleFlowProcessWrapper();
+ StartNodeWrapper start = new StartNodeWrapper();
+ start.setConstraint(new Rectangle(100, 100, -1, -1));
+ result.addElement(start);
+ start.setParent(result);
+ IFile file = ((IFileEditorInput)getEditorInput()).getFile();
+ String name = file.getName();
+ result.setName(name.substring(0, name.length() - 3));
+ return result;
+ }
+
+ public RuleFlowProcessWrapper getRuleFlowModel() {
+ return (RuleFlowProcessWrapper) getModel();
+ }
+
+ protected void setInput(IEditorInput input) {
+ super.setInput(input);
+ if (input instanceof IFileEditorInput) {
+ refreshPalette(((IFileEditorInput) input).getFile());
+ }
+ }
+
+ private void refreshPalette(IFile file) {
+ IJavaProject javaProject = getJavaProject();
+ if (javaProject != null) {
+ try {
+ ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
+ ClassLoader newLoader = ProjectClassLoader.getProjectClassLoader(javaProject);
+ try {
+ Thread.currentThread().setContextClassLoader(newLoader);
+ PaletteDrawer drawer = (PaletteDrawer) getPaletteRoot().getChildren().get(2);
+ List entries = new ArrayList();
+ try {
+ for (final WorkDefinition workDefinition: WorkItemDefinitions.getWorkDefinitions(file).values()) {
+ final String label;
+ String description = workDefinition.getName();
+ String icon = null;
+ if (workDefinition instanceof WorkDefinitionExtension) {
+ WorkDefinitionExtension extension = (WorkDefinitionExtension) workDefinition;
+ label = extension.getDisplayName();
+ description = extension.getExplanationText();
+ icon = extension.getIcon();
+ } else {
+ label = workDefinition.getName();
+ }
+
+ URL iconUrl = null;
+ if (icon != null) {
+ iconUrl = newLoader.getResource(icon);
+ }
+ if (iconUrl == null) {
+ iconUrl = DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/action.gif");
+ }
+ CombinedTemplateCreationEntry combined = new CombinedTemplateCreationEntry(
+ label,
+ description,
+ WorkItemWrapper.class,
+ new SimpleFactory(WorkItemWrapper.class) {
+ public Object getNewObject() {
+ WorkItemWrapper workItemWrapper = (WorkItemWrapper) super.getNewObject();
+ workItemWrapper.setName(label);
+ workItemWrapper.setWorkDefinition(workDefinition);
+ return workItemWrapper;
+ }
+ },
+ ImageDescriptor.createFromURL(iconUrl),
+ ImageDescriptor.createFromURL(iconUrl)
+ );
+ entries.add(combined);
+ }
+ } catch (Throwable t) {
+ MessageDialog.openError(
+ getSite().getShell(), "Parsing work item definitions", t.getMessage());
+ }
+ drawer.setChildren(entries);
+ } finally {
+ Thread.currentThread().setContextClassLoader(oldLoader);
+ }
+ } catch (Exception e) {
+ DroolsEclipsePlugin.log(e);
+ }
+ }
+ }
+
+ protected void writeModel(OutputStream os) throws IOException {
+ writeModel(os, true);
+ }
+
+ protected void writeModel(OutputStream os, boolean includeGraphics) throws IOException {
+ OutputStreamWriter writer = new OutputStreamWriter(os);
+ try {
+ XmlBPMNProcessDumper dumper = XmlBPMNProcessDumper.INSTANCE;
+ String out = dumper.dump(getRuleFlowModel().getRuleFlowProcess(), includeGraphics);
+ writer.write(out);
+ } catch (Throwable t) {
+ DroolsEclipsePlugin.log(t);
+ }
+ writer.close();
+ }
+
+
+ protected void createModel(InputStream is) {
+ try
+ {
+ InputStreamReader isr = new InputStreamReader(is);
+ SemanticModules semanticModules = new SemanticModules();
+ semanticModules.addSemanticModule(new BPMNSemanticModule());
+ XmlProcessReader xmlReader = new XmlProcessReader(semanticModules);
+
+ try
+ {
+ RuleFlowProcess process = (RuleFlowProcess) xmlReader.read(isr);
+ if (process == null) {
+ setModel(createModel());
+ } else {
+ setModel(new RuleFlowWrapperBuilder().getProcessWrapper(process, getJavaProject()));
+ }
+ } catch (Throwable t) {
+ DroolsEclipsePlugin.log(t);
+ MessageDialog.openError( getSite().getShell(),
+ "Could not read RuleFlow file",
+ "An exception occurred while reading in the RuleFlow XML: "
+ + t.getMessage() + " See the error log for more details.");
+ setModel(createModel());
+ }
+
+ if (isr != null){
+ isr.close();
+ }
+ } catch (Throwable t) {
+ DroolsEclipsePlugin.log(t);
+ }
+ }
+}
Added: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/flow/bpmn2/Sample.bpmn.template
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/flow/bpmn2/Sample.bpmn.template (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/flow/bpmn2/Sample.bpmn.template 2009-08-07 13:21:23 UTC (rev 28871)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.jboss.org/drools"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:g="http://www.jboss.org/drools/flow/gpd"
+ xmlns:tns="http://www.jboss.org/drools">
+
+ <resource id="Actor" name="Human Actor" />
+
+ <process id="Sample" name="Sample Process" >
+
+ <!-- process variables -->
+
+ <!-- nodes -->
+ <startEvent id="StartProcess" g:x="16" g:y="16" g:width="48" g:height="48" />
+
+ <!-- connections -->
+
+ </process>
+
+</definitions>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/SequenceFlow.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/SequenceFlow.java 2009-08-07 13:19:42 UTC (rev 28870)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/SequenceFlow.java 2009-08-07 13:21:23 UTC (rev 28871)
@@ -4,6 +4,8 @@
private String sourceRef;
private String targetRef;
+ private String bendpoints;
+ private String expression;
public SequenceFlow(String sourceRef, String targetRef) {
this.sourceRef = sourceRef;
@@ -17,5 +19,21 @@
public String getTargetRef() {
return targetRef;
}
+
+ public String getBendpoints() {
+ return bendpoints;
+ }
+
+ public void setBendpoints(String bendpoints) {
+ this.bendpoints = bendpoints;
+ }
+
+ public String getExpression() {
+ return expression;
+ }
+
+ public void setExpression(String expression) {
+ this.expression = expression;
+ }
}
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 2009-08-07 13:19:42 UTC (rev 28870)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AbstractNodeHandler.java 2009-08-07 13:21:23 UTC (rev 28871)
@@ -12,6 +12,7 @@
import org.w3c.dom.Element;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
public abstract class AbstractNodeHandler extends BaseAbstractHandler implements Handler {
@@ -61,17 +62,67 @@
protected void handleNode(final Node node, final Element element, final String uri,
final String localName, final ExtensibleXmlParser parser)
throws SAXException {
+ final String x = element.getAttribute("x");
+ if (x != null && x.length() != 0) {
+ try {
+ node.setMetaData("x", new Integer(x));
+ } catch (NumberFormatException exc) {
+ throw new SAXParseException("<" + localName + "> requires an Integer 'x' attribute", parser.getLocator());
+ }
+ }
+ final String y = element.getAttribute("y");
+ if (y != null && y.length() != 0) {
+ try {
+ node.setMetaData("y", new Integer(y));
+ } catch (NumberFormatException exc) {
+ throw new SAXParseException("<" + localName + "> requires an Integer 'y' attribute", parser.getLocator());
+ }
+ }
+ final String width = element.getAttribute("width");
+ if (width != null && width.length() != 0) {
+ try {
+ node.setMetaData("width", new Integer(width));
+ } catch (NumberFormatException exc) {
+ throw new SAXParseException("<" + localName + "> requires an Integer 'width' attribute", parser.getLocator());
+ }
+ }
+ final String height = element.getAttribute("height");
+ if (height != null && height.length() != 0) {
+ try {
+ node.setMetaData("height", new Integer(height));
+ } catch (NumberFormatException exc) {
+ throw new SAXParseException("<" + localName + "> requires an Integer 'height' attribute", parser.getLocator());
+ }
+ }
}
public abstract void writeNode(final Node node, final StringBuilder xmlDump,
final boolean includeMeta);
protected void writeNode(final String name, final Node node,
- final StringBuilder xmlDump) {
+ final StringBuilder xmlDump, boolean includeMeta) {
xmlDump.append(" <" + name + " ");
if (node.getName() != null) {
- xmlDump.append("name=\"" + node.getName() + "\" ");
+ xmlDump.append("id=\"" + node.getName() + "\" ");
}
+ if (includeMeta) {
+ Integer x = (Integer) node.getMetaData("x");
+ Integer y = (Integer) node.getMetaData("y");
+ Integer width = (Integer) node.getMetaData("width");
+ Integer height = (Integer) node.getMetaData("height");
+ if (x != null && x != 0) {
+ xmlDump.append("g:x=\"" + x + "\" ");
+ }
+ if (y != null && y != 0) {
+ xmlDump.append("g:y=\"" + y + "\" ");
+ }
+ if (width != null && width != -1) {
+ xmlDump.append("g:width=\"" + width + "\" ");
+ }
+ if (height != null && height != -1) {
+ xmlDump.append("g:height=\"" + height + "\" ");
+ }
+ }
}
protected void endNode(final StringBuilder xmlDump) {
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java 2009-08-07 13:21:23 UTC (rev 28871)
@@ -0,0 +1,30 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.node.Join;
+import org.drools.workflow.core.node.Split;
+import org.drools.xml.DefaultSemanticModule;
+
+public class BPMNSemanticModule extends DefaultSemanticModule {
+
+ public BPMNSemanticModule() {
+ super("http://schema.omg.org/spec/BPMN/2.0");
+
+ addHandler("process", new ProcessHandler());
+
+ addHandler("property", new PropertyHandler());
+
+ addHandler("startEvent", new StartEventHandler());
+ addHandler("endEvent", new EndEventHandler());
+ addHandler("exclusiveGateway", new ExclusiveGatewayHandler());
+ addHandler("parallelGateway", new ParallelGatewayHandler());
+ addHandler("scriptTask", new ScriptTaskHandler());
+ addHandler("task", new TaskHandler());
+ addHandler("userTask", new UserTaskHandler());
+
+ addHandler("sequenceFlow", new SequenceFlowHandler());
+
+ 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/EndEventHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java 2009-08-07 13:19:42 UTC (rev 28870)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java 2009-08-07 13:21:23 UTC (rev 28871)
@@ -17,7 +17,7 @@
public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
EndNode endNode = (EndNode) node;
- writeNode("endEvent", endNode, xmlDump);
+ writeNode("endEvent", endNode, xmlDump, includeMeta);
endNode(xmlDump);
}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ExclusiveGatewayHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ExclusiveGatewayHandler.java 2009-08-07 13:19:42 UTC (rev 28870)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ExclusiveGatewayHandler.java 2009-08-07 13:21:23 UTC (rev 28871)
@@ -29,13 +29,7 @@
}
public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
- writeNode("exclusiveGateway", node, xmlDump);
- if (node instanceof Split) {
- xmlDump.append("gatewayDirection=\"diverging\" ");
- } else if (node instanceof Join) {
- xmlDump.append("gatewayDirection=\"converging\" ");
- }
- endNode(xmlDump);
+ throw new IllegalArgumentException("Writing out should be handled by split / join handler");
}
}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/JoinHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/JoinHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/JoinHandler.java 2009-08-07 13:21:23 UTC (rev 28871)
@@ -0,0 +1,34 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.Join;
+import org.xml.sax.Attributes;
+
+public class JoinHandler extends AbstractNodeHandler {
+
+ protected Node createNode(Attributes attrs) {
+ throw new IllegalArgumentException("Reading in should be handled by gateway handler");
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class generateNodeFor() {
+ return Join.class;
+ }
+
+ public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+ Join join = (Join) node;
+ switch (join.getType()) {
+ case Join.TYPE_AND:
+ writeNode("parallelGateway", node, xmlDump, includeMeta);
+ break;
+ case Join.TYPE_XOR:
+ writeNode("exclusiveGateway", node, xmlDump, includeMeta);
+ break;
+ default:
+ throw new IllegalArgumentException("Unsupported join type: " + join.getType());
+ }
+ xmlDump.append("gatewayDirection=\"converging\" ");
+ endNode(xmlDump);
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ParallelGatewayHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ParallelGatewayHandler.java 2009-08-07 13:19:42 UTC (rev 28870)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ParallelGatewayHandler.java 2009-08-07 13:21:23 UTC (rev 28871)
@@ -29,7 +29,7 @@
}
public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
- writeNode("exclusiveGateway", node, xmlDump);
+ writeNode("exclusiveGateway", node, xmlDump, includeMeta);
if (node instanceof Split) {
xmlDump.append("gatewayDirection=\"diverging\" ");
} else if (node instanceof Join) {
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 2009-08-07 13:19:42 UTC (rev 28870)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java 2009-08-07 13:21:23 UTC (rev 28871)
@@ -6,8 +6,13 @@
import org.drools.bpmn2.core.SequenceFlow;
import org.drools.definition.process.Node;
import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.workflow.core.Connection;
+import org.drools.workflow.core.Constraint;
import org.drools.workflow.core.impl.ConnectionImpl;
+import org.drools.workflow.core.impl.ConnectionRef;
+import org.drools.workflow.core.impl.ConstraintImpl;
import org.drools.workflow.core.impl.NodeImpl;
+import org.drools.workflow.core.node.Split;
import org.drools.xml.BaseAbstractHandler;
import org.drools.xml.ExtensibleXmlParser;
import org.drools.xml.Handler;
@@ -91,9 +96,20 @@
throw new IllegalArgumentException(
"Could not find target " + targetRef);
}
- new ConnectionImpl(
+ Connection result = new ConnectionImpl(
source, NodeImpl.CONNECTION_DEFAULT_TYPE,
target, NodeImpl.CONNECTION_DEFAULT_TYPE);
+ result.setMetaData("bendpoints", connection.getBendpoints());
+ if (connection.getExpression() != null) {
+ Split split = (Split) source;
+ Constraint constraint = new ConstraintImpl();
+ constraint.setType("code");
+ constraint.setName("");
+ constraint.setConstraint(connection.getExpression());
+ split.addConstraint(
+ new ConnectionRef(target.getId(), NodeImpl.CONNECTION_DEFAULT_TYPE),
+ constraint);
+ }
}
}
}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/PropertyHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/PropertyHandler.java 2009-08-07 13:19:42 UTC (rev 28870)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/PropertyHandler.java 2009-08-07 13:21:23 UTC (rev 28871)
@@ -4,11 +4,12 @@
import java.util.List;
import org.drools.bpmn2.core.SequenceFlow;
+import org.drools.definition.process.WorkflowProcess;
import org.drools.process.core.context.variable.Variable;
import org.drools.process.core.datatype.impl.type.ObjectDataType;
import org.drools.ruleflow.core.RuleFlowProcess;
import org.drools.workflow.core.Node;
-import org.drools.workflow.core.NodeContainer;
+import org.drools.workflow.core.node.WorkItemNode;
import org.drools.xml.BaseAbstractHandler;
import org.drools.xml.ExtensibleXmlParser;
import org.drools.xml.Handler;
@@ -25,7 +26,8 @@
protected void initValidParents() {
this.validParents = new HashSet<Class<?>>();
- this.validParents.add(NodeContainer.class);
+ this.validParents.add(RuleFlowProcess.class);
+ this.validParents.add(WorkItemNode.class);
}
protected void initValidPeers() {
@@ -45,16 +47,19 @@
final String id = attrs.getValue("id");
final String itemSubjectRef = attrs.getValue("itemSubjectRef");
- RuleFlowProcess process = (RuleFlowProcess) parser.getParent();
-
- List variables = process.getVariableScope().getVariables();
- Variable variable = new Variable();
- variable.setName(id);
- // TODO add object type
- variable.setType(new ObjectDataType());
- variables.add(variable);
+ Object parent = parser.getParent();
+ if (parent instanceof RuleFlowProcess) {
+ RuleFlowProcess process = (RuleFlowProcess) parent;
+ List variables = process.getVariableScope().getVariables();
+ Variable variable = new Variable();
+ variable.setName(id);
+ // TODO add object type
+ variable.setType(new ObjectDataType());
+ variables.add(variable);
+ return variable;
+ }
- return variable;
+ return new Variable();
}
public Object end(final String uri, final String localName,
@@ -64,7 +69,7 @@
}
public Class<?> generateNodeFor() {
- return SequenceFlow.class;
+ return Variable.class;
}
}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ScriptTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ScriptTaskHandler.java 2009-08-07 13:19:42 UTC (rev 28870)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ScriptTaskHandler.java 2009-08-07 13:21:23 UTC (rev 28871)
@@ -27,6 +27,10 @@
super.handleNode(node, element, uri, localName, parser);
ActionNode actionNode = (ActionNode) node;
DroolsConsequenceAction action = (DroolsConsequenceAction) actionNode.getAction();
+ if (action == null) {
+ action = new DroolsConsequenceAction();
+ actionNode.setAction(action);
+ }
String language = element.getAttribute("scriptLanguage");
if (language != null) {
action.setDialect(language);
@@ -39,7 +43,7 @@
public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
ActionNode actionNode = (ActionNode) node;
- writeNode("scriptTask", actionNode, xmlDump);
+ writeNode("scriptTask", actionNode, xmlDump, includeMeta);
DroolsConsequenceAction action = (DroolsConsequenceAction) actionNode.getAction();
xmlDump.append("scriptLanguage=\"" + action.getDialect() + "\" >\n");
xmlDump.append(" <script>" + XmlDumper.replaceIllegalChars(action.getConsequence()) + "</script>\n");
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java 2009-08-07 13:19:42 UTC (rev 28870)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java 2009-08-07 13:21:23 UTC (rev 28871)
@@ -12,6 +12,7 @@
import org.drools.xml.BaseAbstractHandler;
import org.drools.xml.ExtensibleXmlParser;
import org.drools.xml.Handler;
+import org.w3c.dom.Element;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
@@ -44,6 +45,7 @@
final String sourceRef = attrs.getValue("sourceRef");
final String targetRef = attrs.getValue("targetRef");
+ final String bendpoints = attrs.getValue("g:bendpoints");
RuleFlowProcess process = (RuleFlowProcess) parser.getParent();
@@ -54,6 +56,8 @@
process.setMetaData(ProcessHandler.CONNECTIONS, connections);
}
SequenceFlow connection = new SequenceFlow(sourceRef, targetRef);
+ connection.setBendpoints(bendpoints);
+
connections.add(connection);
return connection;
@@ -61,8 +65,19 @@
public Object end(final String uri, final String localName,
final ExtensibleXmlParser parser) throws SAXException {
- parser.endElementBuilder();
- return parser.getCurrent();
+ final Element element = parser.endElementBuilder();
+ SequenceFlow sequenceFlow = (SequenceFlow) parser.getCurrent();
+
+ org.w3c.dom.Node xmlNode = element.getFirstChild();
+ while (xmlNode != null) {
+ String nodeName = xmlNode.getNodeName();
+ if ("conditionExpression".equals(nodeName)) {
+ String expression = xmlNode.getTextContent();
+ sequenceFlow.setExpression(expression);
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
+ return parser.getCurrent();
}
public Class<?> generateNodeFor() {
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SplitHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SplitHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SplitHandler.java 2009-08-07 13:21:23 UTC (rev 28871)
@@ -0,0 +1,34 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.Split;
+import org.xml.sax.Attributes;
+
+public class SplitHandler extends AbstractNodeHandler {
+
+ protected Node createNode(Attributes attrs) {
+ throw new IllegalArgumentException("Reading in should be handled by gateway handler");
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class generateNodeFor() {
+ return Split.class;
+ }
+
+ public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+ Split split = (Split) node;
+ switch (split.getType()) {
+ case Split.TYPE_AND:
+ writeNode("parallelGateway", node, xmlDump, includeMeta);
+ break;
+ case Split.TYPE_XOR:
+ writeNode("exclusiveGateway", node, xmlDump, includeMeta);
+ break;
+ default:
+ throw new IllegalArgumentException("Unsupported split type: " + split.getType());
+ }
+ xmlDump.append("gatewayDirection=\"diverging\" ");
+ endNode(xmlDump);
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StartEventHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StartEventHandler.java 2009-08-07 13:19:42 UTC (rev 28870)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StartEventHandler.java 2009-08-07 13:21:23 UTC (rev 28871)
@@ -17,7 +17,7 @@
public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
StartNode startNode = (StartNode) node;
- writeNode("startEvent", startNode, xmlDump);
+ writeNode("startEvent", startNode, xmlDump, includeMeta);
endNode(xmlDump);
}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java 2009-08-07 13:19:42 UTC (rev 28870)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java 2009-08-07 13:21:23 UTC (rev 28871)
@@ -27,43 +27,149 @@
final String localName, final ExtensibleXmlParser parser) throws SAXException {
super.handleNode(node, element, uri, localName, parser);
WorkItemNode workItemNode = (WorkItemNode) node;
- String name = element.getAttribute("name");
+ String name = element.getAttribute("taskName");
Work work = new WorkImpl();
work.setName(name);
workItemNode.setWork(work);
-
Map<String, String> dataInputs = new HashMap<String, String>();
+ Map<String, String> dataOutputs = new HashMap<String, String>();
org.w3c.dom.Node xmlNode = element.getFirstChild();
while (xmlNode != null) {
String nodeName = xmlNode.getNodeName();
if ("ioSpecification".equals(nodeName)) {
- org.w3c.dom.Node subNode = xmlNode.getFirstChild();
- while (subNode instanceof Element) {
- String subNodeName = subNode.getNodeName();
- if ("dataInput".equals(subNodeName)) {
- String id = ((Element) subNode).getAttribute("id");
- String inputName = ((Element) subNode).getAttribute("name");
- dataInputs.put(id, inputName);
- }
- subNode = subNode.getNextSibling();
- }
+ readIoSpecification(xmlNode, dataInputs, dataOutputs);
} else if ("dataInputAssociation".equals(nodeName)) {
- // sourceRef
- org.w3c.dom.Node subNode = xmlNode.getFirstChild();
- String from = subNode.getTextContent();
- // targetRef
- subNode = subNode.getNextSibling();
- String to = subNode.getTextContent();
- workItemNode.addInMapping(dataInputs.get(to), from);
+ readDataInputAssociation(xmlNode, workItemNode, dataInputs);
+ } else if ("dataOutputAssociation".equals(nodeName)) {
+ readDataOutputAssociation(xmlNode, workItemNode, dataOutputs);
}
xmlNode = xmlNode.getNextSibling();
}
}
+
+ protected void readIoSpecification(org.w3c.dom.Node xmlNode, Map<String, String> dataInputs, Map<String, String> dataOutputs) {
+ org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+ while (subNode instanceof Element) {
+ String subNodeName = subNode.getNodeName();
+ if ("dataInput".equals(subNodeName)) {
+ String id = ((Element) subNode).getAttribute("id");
+ String inputName = ((Element) subNode).getAttribute("name");
+ dataInputs.put(id, inputName);
+ }
+ if ("dataOutput".equals(subNodeName)) {
+ String id = ((Element) subNode).getAttribute("id");
+ String outputName = ((Element) subNode).getAttribute("name");
+ dataOutputs.put(id, outputName);
+ }
+ subNode = subNode.getNextSibling();
+ }
+ }
+
+ protected void readDataInputAssociation(org.w3c.dom.Node xmlNode, WorkItemNode workItemNode, Map<String, String> dataInputs) {
+ // sourceRef
+ org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+ if ("assignment".equals(subNode.getNodeName())) {
+ org.w3c.dom.Node subSubNode = subNode.getFirstChild();
+ String from = subSubNode.getTextContent();
+ subNode = subNode.getNextSibling();
+ String to = subNode.getTextContent();
+ workItemNode.getWork().setParameter(to.substring(workItemNode.getName().length() + 1), from);
+ } else {
+ String from = subNode.getTextContent();
+ // targetRef
+ subNode = subNode.getNextSibling();
+ String to = subNode.getTextContent();
+ workItemNode.addInMapping(
+ dataInputs.get(to).substring(workItemNode.getName().length() + 1),
+ from.substring(workItemNode.getName().length() + 1));
+ }
+ }
+
+ protected void readDataOutputAssociation(org.w3c.dom.Node xmlNode, WorkItemNode workItemNode, Map<String, String> dataOutputs) {
+ // sourceRef
+ org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+ String from = subNode.getTextContent();
+ // targetRef
+ subNode = subNode.getNextSibling();
+ String to = subNode.getTextContent();
+ workItemNode.addOutMapping(
+ from.substring(workItemNode.getName().length() + 1),
+ dataOutputs.get(to).substring(workItemNode.getName().length() + 1));
+ }
public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
WorkItemNode workItemNode = (WorkItemNode) node;
- writeNode("task", workItemNode, xmlDump);
- endNode(xmlDump);
+ writeNode("task", workItemNode, xmlDump, includeMeta);
+ xmlDump.append("tns:taskName=\"" + workItemNode.getWork().getName() + "\" >" + EOL);
+ writeIO(workItemNode, xmlDump);
+ endNode("task", xmlDump);
}
+
+ protected void writeIO(WorkItemNode workItemNode, StringBuilder xmlDump) {
+ xmlDump.append(" <ioSpecification>" + EOL);
+ for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
+ xmlDump.append(" <dataInput id=\"" + workItemNode.getName() + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
+ }
+ for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
+ if (entry.getValue() != null) {
+ xmlDump.append(" <dataInput id=\"" + workItemNode.getName() + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
+ }
+ }
+ for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
+ xmlDump.append(" <dataOutput id=\"" + workItemNode.getName() + "_" + entry.getKey() + "Output\" name=\"" + entry.getKey() + "\" />" + EOL);
+ }
+ xmlDump.append(" <inputSet>" + EOL);
+ for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
+ xmlDump.append(" <dataInputRefs>" + workItemNode.getName() + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
+ }
+ for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
+ if (entry.getValue() != null) {
+ xmlDump.append(" <dataInputRefs>" + workItemNode.getName() + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
+ }
+ }
+ xmlDump.append(
+ " </inputSet>" + EOL);
+ xmlDump.append(" <outputSet>" + EOL);
+ for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
+ xmlDump.append(" <dataOutputRefs>" + workItemNode.getName() + "_" + entry.getKey() + "Output</dataOutputRefs>" + EOL);
+ }
+ xmlDump.append(
+ " </outputSet>" + EOL);
+ xmlDump.append(
+ " </ioSpecification>" + EOL);
+ for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
+ if (entry.getValue() != null) {
+ xmlDump.append(
+ " <property id=\"" + workItemNode.getName() + "_" + entry.getKey() + "\" />" + EOL);
+ }
+ }
+ for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
+ xmlDump.append(" <dataInputAssociation>" + EOL);
+ xmlDump.append(
+ " <sourceRef>" + workItemNode.getName() + "_" + entry.getValue() + "</sourceRef>" + EOL +
+ " <targetRef>" + workItemNode.getName() + "_" + entry.getKey() + "</targetRef>" + EOL);
+ xmlDump.append(" </dataInputAssociation>" + EOL);
+ }
+ for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
+ if (entry.getValue() != null) {
+ xmlDump.append(" <dataInputAssociation>" + EOL);
+ xmlDump.append(
+ " <assignment>" + EOL +
+ " <from xs:type=\"tFormalExpression\">" + entry.getValue().toString() + "</from>" + EOL +
+ " <to xs:type=\"tFormalExpression\">" + workItemNode.getName() + "_" + entry.getKey() + "Input</to>" + EOL +
+ " </assignment>" + EOL +
+ " <sourceRef>" + workItemNode.getName() + "_" + entry.getKey() + "</sourceRef>" + EOL +
+ " <targetRef>" + workItemNode.getName() + "_" + entry.getKey() + "Input</targetRef>" + EOL);
+ xmlDump.append(" </dataInputAssociation>" + EOL);
+ }
+ }
+ for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
+ xmlDump.append(" <dataOutputAssociation>" + EOL);
+ xmlDump.append(
+ " <sourceRef>" + workItemNode.getName() + "_" + entry.getKey() + "</sourceRef>" + EOL +
+ " <targetRef>" + workItemNode.getName() + "_" + entry.getValue() + "</targetRef>" + EOL);
+ xmlDump.append(" </dataOutputAssociation>" + EOL);
+ }
+ }
}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/UserTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/UserTaskHandler.java 2009-08-07 13:19:42 UTC (rev 28870)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/UserTaskHandler.java 2009-08-07 13:21:23 UTC (rev 28871)
@@ -1,10 +1,21 @@
package org.drools.bpmn2.xml;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.process.core.Work;
+import org.drools.process.core.impl.WorkImpl;
import org.drools.workflow.core.Node;
import org.drools.workflow.core.node.HumanTaskNode;
+import org.drools.workflow.core.node.WorkItemNode;
+import org.drools.xml.ExtensibleXmlParser;
+import org.w3c.dom.Element;
import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
-public class UserTaskHandler extends AbstractNodeHandler {
+public class UserTaskHandler extends TaskHandler {
protected Node createNode(Attributes attrs) {
return new HumanTaskNode();
@@ -15,10 +26,128 @@
return HumanTaskNode.class;
}
+ protected void handleNode(final Node node, final Element element, final String uri,
+ final String localName, final ExtensibleXmlParser parser) throws SAXException {
+ super.handleNode(node, element, uri, localName, parser);
+ HumanTaskNode humanTaskNode = (HumanTaskNode) node;
+ Work work = new WorkImpl();
+ work.setName("Human Task");
+ humanTaskNode.setWork(work);
+ Map<String, String> dataInputs = new HashMap<String, String>();
+ Map<String, String> dataOutputs = new HashMap<String, String>();
+ List<String> owners = new ArrayList<String>();
+ org.w3c.dom.Node xmlNode = element.getFirstChild();
+ while (xmlNode != null) {
+ String nodeName = xmlNode.getNodeName();
+ if ("ioSpecification".equals(nodeName)) {
+ readIoSpecification(xmlNode, dataInputs, dataOutputs);
+ } else if ("dataInputAssociation".equals(nodeName)) {
+ readDataInputAssociation(xmlNode, humanTaskNode, dataInputs);
+ } else if ("dataOutputAssociation".equals(nodeName)) {
+ readDataOutputAssociation(xmlNode, humanTaskNode, dataOutputs);
+ } else if ("potentialOwner".equals(nodeName)) {
+ owners.add(readPotentialOwner(xmlNode, humanTaskNode));
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
+ if (owners.size() > 0) {
+ String owner = owners.get(0);
+ for (int i = 1; i < owners.size(); i++) {
+ owner += "," + owners.get(i);
+ }
+ humanTaskNode.getWork().setParameter("ActorId", owner);
+ }
+ }
+
+ protected String readPotentialOwner(org.w3c.dom.Node xmlNode, HumanTaskNode humanTaskNode) {
+ return xmlNode.getFirstChild().getFirstChild().getFirstChild().getTextContent();
+ }
+
public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
HumanTaskNode humanTaskNode = (HumanTaskNode) node;
- writeNode("userTask", humanTaskNode, xmlDump);
- endNode(xmlDump);
+ writeNode("userTask", humanTaskNode, xmlDump, includeMeta);
+ xmlDump.append(">" + EOL);
+ writeIO(humanTaskNode, xmlDump);
+ String ownerString = (String) humanTaskNode.getWork().getParameter("ActorId");
+ if (ownerString != null) {
+ String[] owners = ownerString.split(",");
+ for (String owner: owners) {
+ xmlDump.append(
+ " <potentialOwner resourceRef=\"tns:Actor\" >" + EOL +
+ " <resourceAssignmentExpression>" + EOL +
+ " <formalExpression>" + owner + "</formalExpression>" + EOL +
+ " </resourceAssignmentExpression>" + EOL +
+ " </potentialOwner>" + EOL);
+ }
+ }
+ endNode("userTask", xmlDump);
}
+ protected void writeIO(WorkItemNode workItemNode, StringBuilder xmlDump) {
+ xmlDump.append(" <ioSpecification>" + EOL);
+ for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
+ xmlDump.append(" <dataInput id=\"" + workItemNode.getName() + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
+ }
+ for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
+ if (!"ActorId".equals(entry.getKey()) && entry.getValue() != null) {
+ xmlDump.append(" <dataInput id=\"" + workItemNode.getName() + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
+ }
+ }
+ for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
+ xmlDump.append(" <dataOutput id=\"" + workItemNode.getName() + "_" + entry.getKey() + "Output\" name=\"" + entry.getKey() + "\" />" + EOL);
+ }
+ xmlDump.append(" <inputSet>" + EOL);
+ for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
+ xmlDump.append(" <dataInputRefs>" + workItemNode.getName() + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
+ }
+ for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
+ if (!"ActorId".equals(entry.getKey()) && entry.getValue() != null) {
+ xmlDump.append(" <dataInputRefs>" + workItemNode.getName() + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
+ }
+ }
+ xmlDump.append(
+ " </inputSet>" + EOL);
+ xmlDump.append(" <outputSet>" + EOL);
+ for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
+ xmlDump.append(" <dataOutputRefs>" + workItemNode.getName() + "_" + entry.getKey() + "Output</dataOutputRefs>" + EOL);
+ }
+ xmlDump.append(
+ " </outputSet>" + EOL);
+ xmlDump.append(
+ " </ioSpecification>" + EOL);
+ for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
+ if (!"ActorId".equals(entry.getKey()) && entry.getValue() != null) {
+ xmlDump.append(
+ " <property id=\"" + workItemNode.getName() + "_" + entry.getKey() + "\" />" + EOL);
+ }
+ }
+ for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
+ xmlDump.append(" <dataInputAssociation>" + EOL);
+ xmlDump.append(
+ " <sourceRef>" + workItemNode.getName() + "_" + entry.getValue() + "</sourceRef>" + EOL +
+ " <targetRef>" + workItemNode.getName() + "_" + entry.getKey() + "</targetRef>" + EOL);
+ xmlDump.append(" </dataInputAssociation>" + EOL);
+ }
+ for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
+ if (!"ActorId".equals(entry.getKey()) && entry.getValue() != null) {
+ xmlDump.append(" <dataInputAssociation>" + EOL);
+ xmlDump.append(
+ " <assignment>" + EOL +
+ " <from xs:type=\"tFormalExpression\">" + entry.getValue().toString() + "</from>" + EOL +
+ " <to xs:type=\"tFormalExpression\">" + workItemNode.getName() + "_" + entry.getKey() + "Input</to>" + EOL +
+ " </assignment>" + EOL +
+ " <sourceRef>" + workItemNode.getName() + "_" + entry.getKey() + "</sourceRef>" + EOL +
+ " <targetRef>" + workItemNode.getName() + "_" + entry.getKey() + "Input</targetRef>" + EOL);
+ xmlDump.append(" </dataInputAssociation>" + EOL);
+ }
+ }
+ for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
+ xmlDump.append(" <dataOutputAssociation>" + EOL);
+ xmlDump.append(
+ " <sourceRef>" + workItemNode.getName() + "_" + entry.getKey() + "</sourceRef>" + EOL +
+ " <targetRef>" + workItemNode.getName() + "_" + entry.getValue() + "</targetRef>" + EOL);
+ xmlDump.append(" </dataOutputAssociation>" + EOL);
+ }
+ }
+
}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java 2009-08-07 13:21:23 UTC (rev 28871)
@@ -0,0 +1,168 @@
+package org.drools.bpmn2.xml;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.definition.process.Connection;
+import org.drools.definition.process.Node;
+import org.drools.definition.process.WorkflowProcess;
+import org.drools.process.core.context.variable.Variable;
+import org.drools.process.core.context.variable.VariableScope;
+import org.drools.workflow.core.node.Split;
+import org.drools.xml.Handler;
+import org.drools.xml.SemanticModule;
+import org.drools.xml.XmlDumper;
+
+public class XmlBPMNProcessDumper {
+
+ public static XmlBPMNProcessDumper INSTANCE = new XmlBPMNProcessDumper();
+
+ private final static String EOL = System.getProperty( "line.separator" );
+
+ private SemanticModule semanticModule;
+
+ private XmlBPMNProcessDumper() {
+ semanticModule = new BPMNSemanticModule();
+ }
+
+ public String dump(WorkflowProcess process) {
+ return dump(process, true);
+ }
+
+ public String dump(WorkflowProcess process, boolean includeMeta) {
+ StringBuilder xmlDump = new StringBuilder();
+ visitProcess(process, xmlDump, includeMeta);
+ return xmlDump.toString();
+ }
+
+ protected void visitProcess(WorkflowProcess process, StringBuilder xmlDump, boolean includeMeta) {
+ xmlDump.append(
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?> " + EOL +
+ "<definitions id=\"Definition\"" + EOL +
+ " targetNamespace=\"http://www.jboss.org/drools\"" + EOL +
+ " typeLanguage=\"http://www.java.com/javaTypes\"" + EOL +
+ " expressionLanguage=\"http://www.mvel.org/2.0\"" + EOL +
+ " xmlns=\"http://schema.omg.org/spec/BPMN/2.0\"" + EOL +
+ " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"" + EOL +
+ " xs:schemaLocation=\"http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd\"" + EOL +
+ " xmlns:g=\"http://www.jboss.org/drools/flow/gpd\"" + EOL +
+ " xmlns:tns=\"http://www.jboss.org/drools\">" + EOL + EOL);
+
+ // item definitions
+ VariableScope variableScope = (VariableScope)
+ ((org.drools.process.core.Process) process).getDefaultContext(VariableScope.VARIABLE_SCOPE);
+ if (variableScope != null && !variableScope.getVariables().isEmpty()) {
+ for (Variable variable: variableScope.getVariables()) {
+ xmlDump.append(
+ " <itemDefinition id=\"" + variable.getName() + "Item\" ");
+ if (variable.getType() != null) {
+ xmlDump.append("structureRef=\"" + variable.getType().getStringType() + "\" ");
+ }
+ xmlDump.append("/>" + EOL);
+ }
+ xmlDump.append(EOL);
+ }
+
+ xmlDump.append(
+ " <resource id=\"Actor\" name=\"Human Actor\" />" + EOL + EOL);
+
+ // the process itself
+ xmlDump.append(" <process ");
+ if (process.getId() != null) {
+ xmlDump.append("id=\"" + process.getId() + "\" ");
+ }
+ if (process.getName() != null) {
+ xmlDump.append("name=\"" + process.getName() + "\" ");
+ }
+ // TODO: package, version
+ xmlDump.append(">" + EOL + EOL);
+ visitHeader(process, xmlDump, includeMeta);
+ visitNodes(process, xmlDump, includeMeta);
+ visitConnections(process.getNodes(), xmlDump, includeMeta);
+ xmlDump.append(" </process>" + EOL + EOL);
+ xmlDump.append("</definitions>");
+ }
+
+ protected void visitHeader(WorkflowProcess process, StringBuilder xmlDump, boolean includeMeta) {
+ // TODO: imports, function imports
+ // TODO: globals
+ // TODO: swimlanes
+ // TODO: exception handlers
+ VariableScope variableScope = (VariableScope)
+ ((org.drools.process.core.Process) process).getDefaultContext(VariableScope.VARIABLE_SCOPE);
+ if (variableScope != null) {
+ visitVariables(variableScope.getVariables(), xmlDump);
+ }
+ }
+
+ public static void visitVariables(List<Variable> variables, StringBuilder xmlDump) {
+ xmlDump.append(" <!-- process variables -->" + EOL);
+ for (Variable variable: variables) {
+ xmlDump.append(" <property id=\"" + variable.getName() + "\" ");
+ if (variable.getType() != null) {
+ xmlDump.append("itemSubjectRef=\"tns:" + variable.getName() + "Item\"" );
+ }
+ // TODO: value
+ xmlDump.append("/>" + EOL);
+ }
+ xmlDump.append(EOL);
+ }
+
+ private void visitNodes(WorkflowProcess process, StringBuilder xmlDump, boolean includeMeta) {
+ xmlDump.append(" <!-- nodes -->" + EOL);
+ for (Node node: process.getNodes()) {
+ visitNode(node, xmlDump, includeMeta);
+ }
+ xmlDump.append(EOL);
+ }
+
+ public void visitNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+ Handler handler = semanticModule.getHandlerByClass(node.getClass());
+ if (handler != null) {
+ ((AbstractNodeHandler) handler).writeNode((org.drools.workflow.core.Node) node, xmlDump, includeMeta);
+ } else {
+ throw new IllegalArgumentException(
+ "Unknown node type: " + node);
+ }
+ }
+
+ private void visitConnections(Node[] nodes, StringBuilder xmlDump, boolean includeMeta) {
+ xmlDump.append(" <!-- connections -->" + EOL);
+ List<Connection> connections = new ArrayList<Connection>();
+ for (Node node: nodes) {
+ for (List<Connection> connectionList: node.getIncomingConnections().values()) {
+ connections.addAll(connectionList);
+ }
+ }
+ for (Connection connection: connections) {
+ visitConnection(connection, xmlDump, includeMeta);
+ }
+ xmlDump.append(EOL);
+ }
+
+ public void visitConnection(Connection connection, StringBuilder xmlDump, boolean includeMeta) {
+ xmlDump.append(" <sequenceFlow sourceRef=\"" + connection.getFrom().getName() + "\" ");
+ // TODO fromType, toType
+ xmlDump.append("targetRef=\"" + connection.getTo().getName() + "\" ");
+ if (includeMeta) {
+ String bendpoints = (String) connection.getMetaData("bendpoints");
+ if (bendpoints != null) {
+ xmlDump.append("g:bendpoints=\"" + bendpoints + "\" ");
+ }
+ }
+ if (connection.getFrom() instanceof Split) {
+ Split split = (Split) connection.getFrom();
+ if (split.getType() == Split.TYPE_XOR || split.getType() == Split.TYPE_OR) {
+ String constraint = split.getConstraint(connection).getConstraint();
+ xmlDump.append(">" + EOL +
+ " <conditionExpression>" + XmlDumper.replaceIllegalChars(constraint) + "</conditionExpression>" + EOL +
+ " </sequenceFlow>" + EOL);
+ } else {
+ xmlDump.append("/>" + EOL);
+ }
+ } else {
+ xmlDump.append("/>" + EOL);
+ }
+ }
+
+}
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 2009-08-07 13:19:42 UTC (rev 28870)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java 2009-08-07 13:21:23 UTC (rev 28871)
@@ -25,6 +25,12 @@
ksession.startProcess("Minimal");
}
+ public void testMinimalProcessWithGraphical() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-MinimalProcessWithGraphical.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ksession.startProcess("Minimal");
+ }
+
public void testEvaluationProcess() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-EvaluationProcess.xml");
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -35,6 +41,35 @@
ksession.startProcess("Evaluation", params);
}
+ public void testEvaluationProcess2() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-EvaluationProcess2.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.put("employee", "UserId-12345");
+ ksession.startProcess("com.sample.evaluation", params);
+ }
+
+ public void testEvaluationProcess3() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-EvaluationProcess3.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());
+ ksession.getWorkItemManager().registerWorkItemHandler("RegisterRequest", new SystemOutWorkItemHandler());
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.put("employee", "john");
+ ksession.startProcess("Evaluation", params);
+ }
+
+ public void testExclusiveSplit() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-ExclusiveSplit.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ksession.getWorkItemManager().registerWorkItemHandler("Email", new SystemOutWorkItemHandler());
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.put("x", "First");
+ params.put("y", "Second");
+ ksession.startProcess("com.sample.test", params);
+ }
+
private KnowledgeBase createKnowledgeBase(String process) throws Exception {
KnowledgeBuilderConfiguration conf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
((PackageBuilderConfiguration) conf).initSemanticModules();
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-BuyerProcess.png
===================================================================
(Binary files differ)
Property changes on: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-BuyerProcess.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-BuyerProcess.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-BuyerProcess.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-BuyerProcess.xml 2009-08-07 13:21:23 UTC (rev 28871)
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/UserTaskExample"
+ typeLanguage="http://www.w3.org/2001/XMLSchema"
+ expressionLanguage="http://www.w3.org/1999/XPath"
+ xmlns="http://www.omg.org/bpmn20"
+ xmlns:tns="http://www.example.org/UserTaskExample">
+
+ <resource id="regionalManager" name="Regional Manager">
+ <resourceParameter id="buyerName" isRequired="true" name="Buyer Name" type="xsd:string"/>
+ <resourceParameter id="region" isRequired="false" name="Region" type="xsd:string"/>
+ </resource>
+
+ <resource id="departmentalReviewer" name="Departmental Reviewer">
+ <resourceParameter id="buyerName" isRequired="true" name="Buyer Name" type="xsd:string"/>
+ </resource>
+
+ <!-- Process definition -->
+ <process id="Buyer" name="Buyer Process">
+ <startEvent id="StartProcess"/>
+ <sequenceFlow sourceRef="StartProcess" targetRef="QuotationHandling"/>
+ <task id="QuotationHandling" name="Quotation Handling"/>
+ <sequenceFlow sourceRef="QuotationHandling" targetRef="ApproveOrder"/>
+ <userTask id="ApproveOrder" name="ApproveOrder">
+ <potentialOwner resourceRef="tns:regionalManager">
+ <resourceParameterBinding parameterRef="tns:buyerName">
+ <formalExpression>getDataInput('order')/address/name</formalExpression>
+ </resourceParameterBinding>
+ <resourceParameterBinding parameterRef="tns:region">
+ <formalExpression>getDataInput('order')/address/country</formalExpression>
+ </resourceParameterBinding>
+ </potentialOwner>
+ </userTask>
+ <sequenceFlow sourceRef="ApproveOrder" targetRef="OrderApprovedDecision"/>
+ <exclusiveGateway id="OrderApprovedDecision" gatewayDirection="diverging"/>
+ <sequenceFlow sourceRef="OrderApprovedDecision" targetRef="OrderAndShipment">
+ <conditionExpression>Was the Order Approved?</conditionExpression>
+ </sequenceFlow>
+ <sequenceFlow sourceRef="OrderApprovedDecision" targetRef="TerminateProcess">
+ <conditionExpression>Was the Order NOT Approved?</conditionExpression>
+ </sequenceFlow>
+ <endEvent id="TerminateProcess">
+ <terminateEventDefinition id="TerminateEvent"/>
+ </endEvent>
+ <parallelGateway id="OrderAndShipment" gatewayDirection="diverging"/>
+ <sequenceFlow sourceRef="OrderAndShipment" targetRef="OrderHandling"/>
+ <sequenceFlow sourceRef="OrderAndShipment" targetRef="ShipmentHandling"/>
+ <task id="OrderHandling" name="Order Handling"/>
+ <task id="ShipmentHandling" name="Shipment Handling"/>
+ <sequenceFlow sourceRef="OrderHandling" targetRef="OrderAndShipmentMerge"/>
+ <sequenceFlow sourceRef="ShipmentHandling" targetRef="OrderAndShipmentMerge"/>
+ <parallelGateway id="OrderAndShipmentMerge" gatewayDirection="converging"/>
+ <userTask id="ReviewOrder" name="Review Order">
+ <potentialOwner resourceRef="tns:departmentalReviewer">
+ <resourceParameterBinding parameterRef="tns:buyerName">
+ <formalExpression>getDataInput('order')/address/name</formalExpression>
+ </resourceParameterBinding>
+ </potentialOwner>
+ </userTask>
+ <sequenceFlow sourceRef="ReviewOrder" targetRef="EndProcess"/>
+ <endEvent id="EndProcess"/>
+ </process>
+</definitions>
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess.xml 2009-08-07 13:19:42 UTC (rev 28870)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess.xml 2009-08-07 13:21:23 UTC (rev 28871)
@@ -28,7 +28,8 @@
<parallelGateway id="Diverge" gatewayDirection="diverging"/>
<task id="RegisterRequest" name="RegisterRequest">
<ioSpecification>
- <dataInput id="employeeInputSet" name="employeeId" itemSubjectRef="tns:employeeId" />
+ <dataInput id="employeeIdInput" name="employeeId" />
+ <dataInput id="descriptionInput" name="description" />
<inputSet>
<dataInputRefs>employeeInputSet</dataInputRefs>
</inputSet>
@@ -36,8 +37,12 @@
</ioSpecification>
<dataInputAssociation>
<sourceRef>employee</sourceRef>
- <targetRef>employeeInputSet</targetRef>
+ <targetRef>employeeIdInput</targetRef>
</dataInputAssociation>
+ <dataInputAssociation>
+ <sourceRef>description</sourceRef>
+ <targetRef>descriptionInput</targetRef>
+ </dataInputAssociation>
</task>
<userTask id="Two">
</userTask>
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess2.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess2.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess2.xml 2009-08-07 13:21:23 UTC (rev 28871)
@@ -0,0 +1,231 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.jboss.org/drools"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:g="http://www.jboss.org/drools/flow/gpd"
+ xmlns:tns="http://www.jboss.org/drools">
+
+ <itemDefinition id="employeeItem" structureRef="java.lang.Object" />
+
+ <resource id="Actor" name="Human Actor" />
+
+ <process id="com.sample.evaluation" name="Evaluation Process" >
+
+ <!-- process variables -->
+ <property id="employee" itemSubjectRef="tns:employeeItem"/>
+
+ <!-- nodes -->
+ <endEvent id="EndProcess" g:x="683" g:y="56" g:width="48" g:height="48" />
+ <userTask id="Project_Manager_Evaluation" g:x="352" g:y="16" g:width="225" g:height="48" >
+ <ioSpecification>
+ <dataInput id="Project_Manager_Evaluation_CommentInput" name="Comment" />
+ <dataInput id="Project_Manager_Evaluation_TaskNameInput" name="TaskName" />
+ <dataInput id="Project_Manager_Evaluation_PriorityInput" name="Priority" />
+ <dataInput id="Project_Manager_Evaluation_ContentInput" name="Content" />
+ <dataInput id="Project_Manager_Evaluation_SkippableInput" name="Skippable" />
+ <inputSet>
+ <dataInputRefs>Project_Manager_Evaluation_CommentInput</dataInputRefs>
+ <dataInputRefs>Project_Manager_Evaluation_TaskNameInput</dataInputRefs>
+ <dataInputRefs>Project_Manager_Evaluation_PriorityInput</dataInputRefs>
+ <dataInputRefs>Project_Manager_Evaluation_ContentInput</dataInputRefs>
+ <dataInputRefs>Project_Manager_Evaluation_SkippableInput</dataInputRefs>
+ </inputSet>
+ <outputSet>
+ </outputSet>
+ </ioSpecification>
+ <property id="Project_Manager_Evaluation_Comment" />
+ <property id="Project_Manager_Evaluation_TaskName" />
+ <property id="Project_Manager_Evaluation_Priority" />
+ <property id="Project_Manager_Evaluation_Content" />
+ <property id="Project_Manager_Evaluation_Skippable" />
+ <dataInputAssociation>
+ <assignment>
+ <from xs:type="tFormalExpression">You need to perform an evaluation for #{employee}</from>
+ <to xs:type="tFormalExpression">Project_Manager_Evaluation_CommentInput</to>
+ </assignment>
+ <sourceRef>Project_Manager_Evaluation_Comment</sourceRef>
+ <targetRef>Project_Manager_Evaluation_CommentInput</targetRef>
+ </dataInputAssociation>
+ <dataInputAssociation>
+ <assignment>
+ <from xs:type="tFormalExpression">Performance Evaluation</from>
+ <to xs:type="tFormalExpression">Project_Manager_Evaluation_TaskNameInput</to>
+ </assignment>
+ <sourceRef>Project_Manager_Evaluation_TaskName</sourceRef>
+ <targetRef>Project_Manager_Evaluation_TaskNameInput</targetRef>
+ </dataInputAssociation>
+ <dataInputAssociation>
+ <assignment>
+ <from xs:type="tFormalExpression">1</from>
+ <to xs:type="tFormalExpression">Project_Manager_Evaluation_PriorityInput</to>
+ </assignment>
+ <sourceRef>Project_Manager_Evaluation_Priority</sourceRef>
+ <targetRef>Project_Manager_Evaluation_PriorityInput</targetRef>
+ </dataInputAssociation>
+ <dataInputAssociation>
+ <assignment>
+ <from xs:type="tFormalExpression"></from>
+ <to xs:type="tFormalExpression">Project_Manager_Evaluation_ContentInput</to>
+ </assignment>
+ <sourceRef>Project_Manager_Evaluation_Content</sourceRef>
+ <targetRef>Project_Manager_Evaluation_ContentInput</targetRef>
+ </dataInputAssociation>
+ <dataInputAssociation>
+ <assignment>
+ <from xs:type="tFormalExpression">false</from>
+ <to xs:type="tFormalExpression">Project_Manager_Evaluation_SkippableInput</to>
+ </assignment>
+ <sourceRef>Project_Manager_Evaluation_Skippable</sourceRef>
+ <targetRef>Project_Manager_Evaluation_SkippableInput</targetRef>
+ </dataInputAssociation>
+ <potentialOwner resourceRef="tns:Actor" >
+ <resourceAssignmentExpression>
+ <formalExpression>john</formalExpression>
+ </resourceAssignmentExpression>
+ </potentialOwner>
+ </userTask>
+ <startEvent id="StartProcess" g:x="16" g:y="56" g:width="48" g:height="48" />
+ <userTask id="HR_Manager_Evaluation" g:x="352" g:y="96" g:width="225" g:height="48" >
+ <ioSpecification>
+ <dataInput id="HR_Manager_Evaluation_CommentInput" name="Comment" />
+ <dataInput id="HR_Manager_Evaluation_TaskNameInput" name="TaskName" />
+ <dataInput id="HR_Manager_Evaluation_PriorityInput" name="Priority" />
+ <dataInput id="HR_Manager_Evaluation_ContentInput" name="Content" />
+ <dataInput id="HR_Manager_Evaluation_SkippableInput" name="Skippable" />
+ <inputSet>
+ <dataInputRefs>HR_Manager_Evaluation_CommentInput</dataInputRefs>
+ <dataInputRefs>HR_Manager_Evaluation_TaskNameInput</dataInputRefs>
+ <dataInputRefs>HR_Manager_Evaluation_PriorityInput</dataInputRefs>
+ <dataInputRefs>HR_Manager_Evaluation_ContentInput</dataInputRefs>
+ <dataInputRefs>HR_Manager_Evaluation_SkippableInput</dataInputRefs>
+ </inputSet>
+ <outputSet>
+ </outputSet>
+ </ioSpecification>
+ <property id="HR_Manager_Evaluation_Comment" />
+ <property id="HR_Manager_Evaluation_TaskName" />
+ <property id="HR_Manager_Evaluation_Priority" />
+ <property id="HR_Manager_Evaluation_Content" />
+ <property id="HR_Manager_Evaluation_Skippable" />
+ <dataInputAssociation>
+ <assignment>
+ <from xs:type="tFormalExpression">You need to perform an evaluation for #{employee}</from>
+ <to xs:type="tFormalExpression">HR_Manager_Evaluation_CommentInput</to>
+ </assignment>
+ <sourceRef>HR_Manager_Evaluation_Comment</sourceRef>
+ <targetRef>HR_Manager_Evaluation_CommentInput</targetRef>
+ </dataInputAssociation>
+ <dataInputAssociation>
+ <assignment>
+ <from xs:type="tFormalExpression">Performance Evaluation</from>
+ <to xs:type="tFormalExpression">HR_Manager_Evaluation_TaskNameInput</to>
+ </assignment>
+ <sourceRef>HR_Manager_Evaluation_TaskName</sourceRef>
+ <targetRef>HR_Manager_Evaluation_TaskNameInput</targetRef>
+ </dataInputAssociation>
+ <dataInputAssociation>
+ <assignment>
+ <from xs:type="tFormalExpression">1</from>
+ <to xs:type="tFormalExpression">HR_Manager_Evaluation_PriorityInput</to>
+ </assignment>
+ <sourceRef>HR_Manager_Evaluation_Priority</sourceRef>
+ <targetRef>HR_Manager_Evaluation_PriorityInput</targetRef>
+ </dataInputAssociation>
+ <dataInputAssociation>
+ <assignment>
+ <from xs:type="tFormalExpression"></from>
+ <to xs:type="tFormalExpression">HR_Manager_Evaluation_ContentInput</to>
+ </assignment>
+ <sourceRef>HR_Manager_Evaluation_Content</sourceRef>
+ <targetRef>HR_Manager_Evaluation_ContentInput</targetRef>
+ </dataInputAssociation>
+ <dataInputAssociation>
+ <assignment>
+ <from xs:type="tFormalExpression">false</from>
+ <to xs:type="tFormalExpression">HR_Manager_Evaluation_SkippableInput</to>
+ </assignment>
+ <sourceRef>HR_Manager_Evaluation_Skippable</sourceRef>
+ <targetRef>HR_Manager_Evaluation_SkippableInput</targetRef>
+ </dataInputAssociation>
+ <potentialOwner resourceRef="tns:Actor" >
+ <resourceAssignmentExpression>
+ <formalExpression>mary</formalExpression>
+ </resourceAssignmentExpression>
+ </potentialOwner>
+ </userTask>
+ <userTask id="Self_Evaluation" g:x="96" g:y="56" g:width="143" g:height="48" >
+ <ioSpecification>
+ <dataInput id="Self_Evaluation_SkippableInput" name="Skippable" />
+ <dataInput id="Self_Evaluation_PriorityInput" name="Priority" />
+ <dataInput id="Self_Evaluation_TaskNameInput" name="TaskName" />
+ <dataInput id="Self_Evaluation_CommentInput" name="Comment" />
+ <inputSet>
+ <dataInputRefs>Self_Evaluation_SkippableInput</dataInputRefs>
+ <dataInputRefs>Self_Evaluation_PriorityInput</dataInputRefs>
+ <dataInputRefs>Self_Evaluation_TaskNameInput</dataInputRefs>
+ <dataInputRefs>Self_Evaluation_CommentInput</dataInputRefs>
+ </inputSet>
+ <outputSet>
+ </outputSet>
+ </ioSpecification>
+ <property id="Self_Evaluation_Skippable" />
+ <property id="Self_Evaluation_Priority" />
+ <property id="Self_Evaluation_TaskName" />
+ <property id="Self_Evaluation_Comment" />
+ <dataInputAssociation>
+ <assignment>
+ <from xs:type="tFormalExpression">false</from>
+ <to xs:type="tFormalExpression">Self_Evaluation_SkippableInput</to>
+ </assignment>
+ <sourceRef>Self_Evaluation_Skippable</sourceRef>
+ <targetRef>Self_Evaluation_SkippableInput</targetRef>
+ </dataInputAssociation>
+ <dataInputAssociation>
+ <assignment>
+ <from xs:type="tFormalExpression">1</from>
+ <to xs:type="tFormalExpression">Self_Evaluation_PriorityInput</to>
+ </assignment>
+ <sourceRef>Self_Evaluation_Priority</sourceRef>
+ <targetRef>Self_Evaluation_PriorityInput</targetRef>
+ </dataInputAssociation>
+ <dataInputAssociation>
+ <assignment>
+ <from xs:type="tFormalExpression">Performance Evaluation</from>
+ <to xs:type="tFormalExpression">Self_Evaluation_TaskNameInput</to>
+ </assignment>
+ <sourceRef>Self_Evaluation_TaskName</sourceRef>
+ <targetRef>Self_Evaluation_TaskNameInput</targetRef>
+ </dataInputAssociation>
+ <dataInputAssociation>
+ <assignment>
+ <from xs:type="tFormalExpression"></from>
+ <to xs:type="tFormalExpression">Self_Evaluation_CommentInput</to>
+ </assignment>
+ <sourceRef>Self_Evaluation_Comment</sourceRef>
+ <targetRef>Self_Evaluation_CommentInput</targetRef>
+ </dataInputAssociation>
+ <potentialOwner resourceRef="tns:Actor" >
+ <resourceAssignmentExpression>
+ <formalExpression>#{employee}</formalExpression>
+ </resourceAssignmentExpression>
+ </potentialOwner>
+ </userTask>
+ <parallelGateway id="Converge" g:x="603" g:y="56" g:width="49" g:height="49" gatewayDirection="converging" />
+ <parallelGateway id="Diverge" g:x="271" g:y="56" g:width="49" g:height="49" gatewayDirection="diverging" />
+
+ <!-- connections -->
+ <sequenceFlow sourceRef="Converge" targetRef="EndProcess" />
+ <sequenceFlow sourceRef="Diverge" targetRef="Project_Manager_Evaluation" g:bendpoints="[295,39]" />
+ <sequenceFlow sourceRef="Diverge" targetRef="HR_Manager_Evaluation" g:bendpoints="[295,120]" />
+ <sequenceFlow sourceRef="StartProcess" targetRef="Self_Evaluation" />
+ <sequenceFlow sourceRef="Project_Manager_Evaluation" targetRef="Converge" g:bendpoints="[627,40]" />
+ <sequenceFlow sourceRef="HR_Manager_Evaluation" targetRef="Converge" g:bendpoints="[627,121]" />
+ <sequenceFlow sourceRef="Self_Evaluation" targetRef="Diverge" />
+
+ </process>
+
+</definitions>
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess3.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess3.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess3.xml 2009-08-07 13:21:23 UTC (rev 28871)
@@ -0,0 +1,72 @@
+<?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://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:tns="http://www.example.org/EvaluationExample">
+
+ <!-- resources -->
+ <resource id="projectManager" name="Project Manager"/>
+ <resource id="humanResourceManager" name="HR Manager"/>
+
+ <!-- item definitions -->
+ <itemDefinition id="employeeId" structureRef="java.lang.String" />
+
+ <process id="Evaluation" name="Evaluation Process">
+
+ <!-- process variables -->
+ <property id="employee" itemSubjectRef="tns:employeeId" />
+
+ <!-- nodes -->
+ <startEvent id="StartProcess"/>
+ <scriptTask id="Log" scriptLanguage="java">
+ <script>System.out.println("Processing evaluation for employee " + employee);</script>
+ </scriptTask>
+ <exclusiveGateway id="Diverge" gatewayDirection="diverging"/>
+ <sequenceFlow sourceRef="Diverge" targetRef="RegisterRequest">
+ <conditionExpression>return employee == "john";</conditionExpression>
+ </sequenceFlow>
+ <sequenceFlow sourceRef="Diverge" targetRef="Two">
+ <conditionExpression>return true;</conditionExpression>
+ </sequenceFlow>
+ <task id="RegisterRequest" name="RegisterRequest">
+ <ioSpecification>
+ <dataInput id="employeeIdInput" name="employeeId" itemSubjectRef="tns:employeeId" />
+ <dataInput id="actorIdInput" name="actorId" itemSubjectRef="tns:employeeId" />
+ <inputSet>
+ <dataInputRefs>employeeIdInput</dataInputRefs>
+ <dataInputRefs>actorIdInput</dataInputRefs>
+ </inputSet>
+ <outputSet/>
+ </ioSpecification>
+ <property id="actorId" itemSubjectRef="java.lang.String" />
+ <dataInputAssociation>
+ <sourceRef>employee</sourceRef>
+ <targetRef>employeeIdInput</targetRef>
+ </dataInputAssociation>
+ <dataInputAssociation>
+ <assignment>
+ <from xs:type="tFormalExpression">John</from>
+ <to xs:type="tFormalExpression">actorId</to>
+ </assignment>
+ <sourceRef>actorId</sourceRef>
+ <targetRef>actorIdInput</targetRef>
+ </dataInputAssociation>
+ </task>
+ <userTask id="Two">
+ </userTask>
+ <exclusiveGateway id="Converge" gatewayDirection="converging"/>
+ <endEvent id="EndProcess"/>
+
+ <!-- connections -->
+ <sequenceFlow sourceRef="StartProcess" targetRef="Log"/>
+ <sequenceFlow sourceRef="Log" targetRef="Diverge"/>
+ <sequenceFlow sourceRef="RegisterRequest" targetRef="Converge"/>
+ <sequenceFlow sourceRef="Two" targetRef="Converge"/>
+ <sequenceFlow sourceRef="Converge" targetRef="EndProcess"/>
+
+ </process>
+</definitions>
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplit.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplit.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplit.xml 2009-08-07 13:21:23 UTC (rev 28871)
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.jboss.org/drools"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:g="http://www.jboss.org/drools/flow/gpd"
+ xmlns:tns="http://www.jboss.org/drools">
+
+ <itemDefinition id="xItem" structureRef="java.lang.Object" />
+ <itemDefinition id="yItem" structureRef="java.lang.Object" />
+
+ <process id="com.sample.test" name="Test" >
+
+ <!-- process variables -->
+ <property id="x" itemSubjectRef="tns:xItem"/>
+ <property id="y" itemSubjectRef="tns:yItem"/>
+
+ <!-- nodes -->
+ <scriptTask id="Script2" g:x="177" g:y="96" g:width="80" g:height="48" scriptLanguage="mvel" >
+ <script>System.out.println("y=" + y);</script>
+ </scriptTask>
+ <endEvent id="End" g:x="370" g:y="56" g:width="48" g:height="48" />
+ <task id="Email" g:x="163" g:y="180" g:width="100" g:height="48" tns:taskName="Email">
+ <ioSpecification>
+ <dataInput id="FromInput" name="From" />
+ <dataInput id="ToInput" name="To" />
+ <dataInput id="SubjectInput" name="Subject" />
+ <dataInput id="BodyInput" name="Body" />
+ <inputSet>
+ <dataInputRefs>FromInput</dataInputRefs>
+ <dataInputRefs>ToInput</dataInputRefs>
+ <dataInputRefs>SubjectInput</dataInputRefs>
+ <dataInputRefs>BodyInput</dataInputRefs>
+ </inputSet>
+ <outputSet>
+ </outputSet>
+ </ioSpecification>
+ <property id="From" />
+ <property id="Subject" />
+ <property id="To" />
+ <property id="Body" />
+ <dataInputAssociation>
+ <assignment>
+ <from xs:type="tFormalExpression">me at mail.com</from>
+ <to xs:type="tFormalExpression">From</to>
+ </assignment>
+ <sourceRef>From</sourceRef>
+ <targetRef>FromInput</targetRef>
+ </dataInputAssociation>
+ <dataInputAssociation>
+ <assignment>
+ <from xs:type="tFormalExpression">Urgent email !</from>
+ <to xs:type="tFormalExpression">Subject</to>
+ </assignment>
+ <sourceRef>Subject</sourceRef>
+ <targetRef>SubjectInput</targetRef>
+ </dataInputAssociation>
+ <dataInputAssociation>
+ <assignment>
+ <from xs:type="tFormalExpression">you at mail.com</from>
+ <to xs:type="tFormalExpression">To</to>
+ </assignment>
+ <sourceRef>To</sourceRef>
+ <targetRef>ToInput</targetRef>
+ </dataInputAssociation>
+ <dataInputAssociation>
+ <assignment>
+ <from xs:type="tFormalExpression">This is an urgent email #{x}</from>
+ <to xs:type="tFormalExpression">Body</to>
+ </assignment>
+ <sourceRef>Body</sourceRef>
+ <targetRef>BodyInput</targetRef>
+ </dataInputAssociation>
+ </task>
+ <exclusiveGateway id="Split" g:x="96" g:y="56" g:width="49" g:height="49" gatewayDirection="diverging" />
+ <startEvent id="Start" g:x="16" g:y="56" g:width="48" g:height="48" />
+ <scriptTask id="Script1" g:x="177" g:y="16" g:width="80" g:height="48" scriptLanguage="mvel" >
+ <script>System.out.println("x=" + x);</script>
+ </scriptTask>
+ <exclusiveGateway id="Join" g:x="289" g:y="56" g:width="49" g:height="49" gatewayDirection="converging" />
+
+ <!-- connections -->
+ <sequenceFlow sourceRef="Split" targetRef="Script2" g:bendpoints="[120,120]" >
+ <conditionExpression>return x == "Second";</conditionExpression>
+ </sequenceFlow>
+ <sequenceFlow sourceRef="Start" targetRef="Split" />
+ <sequenceFlow sourceRef="Split" targetRef="Script1" g:bendpoints="[120,40]" >
+ <conditionExpression>return x == "First";</conditionExpression>
+ </sequenceFlow>
+ <sequenceFlow sourceRef="Script2" targetRef="Join" g:bendpoints="[314,119]" />
+ <sequenceFlow sourceRef="Script1" targetRef="Join" g:bendpoints="[313,40]" />
+ <sequenceFlow sourceRef="Join" targetRef="Email" />
+ <sequenceFlow sourceRef="Email" targetRef="End" />
+
+ </process>
+
+</definitions>
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MinimalProcessWithGraphical.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MinimalProcessWithGraphical.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MinimalProcessWithGraphical.xml 2009-08-07 13:21:23 UTC (rev 28871)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/MinimalExample"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:di="http://www.omg.com/di/1.0.0"
+ xmlns:g="http://www.jboss.org/drools/flow/gpd"
+ xmlns:tns="http://www.example.org/MinimalExample">
+
+ <process id="Minimal" name="Minimal Process">
+ <startEvent id="StartProcess" g:x="1" g:y="1" />
+ <sequenceFlow sourceRef="StartProcess" targetRef="Hello"/>
+ <scriptTask id="Hello" scriptLanguage="java">
+ <script>System.out.println("Hello World");</script>
+ </scriptTask>
+ <sequenceFlow sourceRef="Hello" targetRef="EndProcess" g:bendpoints="[10,10]" />
+ <endEvent id="EndProcess"/>
+ </process>
+
+</definitions>
More information about the jboss-svn-commits
mailing list