[jboss-svn-commits] JBL Code SVN: r26296 - in labs/jbossrules/trunk: drools-core/src/main/java/org/drools/command/impl and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Apr 28 22:37:52 EDT 2009
Author: mark.proctor at jboss.com
Date: 2009-04-28 22:37:51 -0400 (Tue, 28 Apr 2009)
New Revision: 26296
Modified:
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactory.java
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactoryProvider.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandFactoryProviderImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CompleteWorkItemCommand.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchExecutionHelperProviderImpl.java
labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java
Log:
-added complete work items to CommandFactory and xml marshalling
Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactory.java 2009-04-29 01:28:47 UTC (rev 26295)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactory.java 2009-04-29 02:37:51 UTC (rev 26296)
@@ -57,30 +57,34 @@
public static Command newInsertElements(Iterable objects) {
return getCommandFactoryProvider().newInsertElements( objects );
}
-
+
public static Command newRetract(FactHandle factHandle) {
return getCommandFactoryProvider().newRetract( factHandle );
}
-
- public static Setter newSetter(String accessor, String value) {
- return getCommandFactoryProvider().newSetter(accessor, value);
+
+ public static Setter newSetter(String accessor,
+ String value) {
+ return getCommandFactoryProvider().newSetter( accessor,
+ value );
}
-
- public static Command newModify(FactHandle factHandle, List<Setter> setters) {
- return getCommandFactoryProvider().newModify(factHandle, setters);
+
+ public static Command newModify(FactHandle factHandle,
+ List<Setter> setters) {
+ return getCommandFactoryProvider().newModify( factHandle,
+ setters );
}
-
+
public static Command newGetObject(FactHandle factHandle) {
return getCommandFactoryProvider().newGetObject( factHandle );
}
-
+
public static Command newGetObjects() {
- return getCommandFactoryProvider().newGetObjects( );
- }
-
+ return getCommandFactoryProvider().newGetObjects();
+ }
+
public static Command newGetObjects(ObjectFilter filter) {
- return getCommandFactoryProvider().newGetObjects( filter );
- }
+ return getCommandFactoryProvider().newGetObjects( filter );
+ }
/**
* Sets the global.
@@ -159,14 +163,14 @@
return getCommandFactoryProvider().newGetGlobal( identifier,
outIdentifier );
}
-
+
public static Command newFireAllRules() {
return getCommandFactoryProvider().newFireAllRules();
}
-
+
public static Command newFireAllRules(int max) {
- return getCommandFactoryProvider().newFireAllRules(max);
- }
+ return getCommandFactoryProvider().newFireAllRules( max );
+ }
/**
* Start a process
@@ -189,21 +193,27 @@
Map<String, Object> parameters) {
return getCommandFactoryProvider().newStartProcess( processId );
}
-
- public static Command signalEvent(String type,
- Object event) {
- return getCommandFactoryProvider().signalEvent( type,
- event );
+
+ public static Command newSignalEvent(String type,
+ Object event) {
+ return getCommandFactoryProvider().newSignalEvent( type,
+ event );
}
-
- public static Command signalEvent(long processInstanceId,
- String type,
- Object event) {
- return getCommandFactoryProvider().signalEvent( processInstanceId,
- type,
- event );
- }
-
+
+ public static Command newSignalEvent(long processInstanceId,
+ String type,
+ Object event) {
+ return getCommandFactoryProvider().newSignalEvent( processInstanceId,
+ type,
+ event );
+ }
+
+ public static Command newCompleteWorkItem(long workItemId,
+ Map<String, Object> results) {
+ return getCommandFactoryProvider().newCompleteWorkItem( workItemId,
+ results );
+ }
+
/**
* Executes a query. The query results will be added to the ExecutionResults using the
* given identifier.
@@ -215,11 +225,12 @@
* @return
*/
public static Command newQuery(String identifier,
- String name) {
- return getCommandFactoryProvider().newQuery( identifier, name );
-
+ String name) {
+ return getCommandFactoryProvider().newQuery( identifier,
+ name );
+
}
-
+
/**
* Executes a query using the given parameters. The query results will be added to the
* ExecutionResults using the given identifier.
@@ -233,17 +244,19 @@
* @return
*/
public static Command newQuery(String identifier,
- String name,
- Object[] arguments) {
- return getCommandFactoryProvider().newQuery( identifier, name, arguments );
- }
-
+ String name,
+ Object[] arguments) {
+ return getCommandFactoryProvider().newQuery( identifier,
+ name,
+ arguments );
+ }
+
/**
* This is a special composite command and will execute all the supplied commands in turn.
* @param commands
* @return
*/
- public static Command newBatchExecution(List<? extends Command> commands) {
+ public static Command newBatchExecution(List< ? extends Command> commands) {
return getCommandFactoryProvider().newBatchExecution( commands );
}
Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactoryProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactoryProvider.java 2009-04-29 01:28:47 UTC (rev 26295)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactoryProvider.java 2009-04-29 02:37:51 UTC (rev 26296)
@@ -53,13 +53,16 @@
Command newStartProcess(String processId,
Map<String, Object> parameters);
- Command signalEvent(String type,
- Object event);
+ Command newSignalEvent(String type,
+ Object event);
- Command signalEvent(long processInstanceId,
- String type,
- Object event);
+ Command newSignalEvent(long processInstanceId,
+ String type,
+ Object event);
+ Command newCompleteWorkItem(long workItemId,
+ Map<String, Object> results);
+
Command newQuery(String identifier,
String name);
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandFactoryProviderImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandFactoryProviderImpl.java 2009-04-29 01:28:47 UTC (rev 26295)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandFactoryProviderImpl.java 2009-04-29 02:37:51 UTC (rev 26296)
@@ -6,6 +6,7 @@
import org.drools.command.Command;
import org.drools.command.CommandFactoryProvider;
import org.drools.command.Setter;
+import org.drools.process.command.CompleteWorkItemCommand;
import org.drools.process.command.FireAllRulesCommand;
import org.drools.process.command.GetGlobalCommand;
import org.drools.process.command.GetObjectCommand;
@@ -114,20 +115,24 @@
return startProcess;
}
- public Command signalEvent(String type,
+ public Command newSignalEvent(String type,
Object event) {
return new SignalEventCommand( type, event );
}
- public Command signalEvent(long processInstanceId,
+ public Command newSignalEvent(long processInstanceId,
String type,
Object event) {
return new SignalEventCommand( processInstanceId, type, event );
}
+
+ public Command newCompleteWorkItem(long workItemId,
+ Map<String, Object> results) {
+ return new CompleteWorkItemCommand(workItemId, results);
+ }
public Command newQuery(String identifier, String name) {
return new QueryCommand(identifier, name, null);
-
}
public Command newQuery(String identifier, String name, Object[] arguments) {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CompleteWorkItemCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CompleteWorkItemCommand.java 2009-04-29 01:28:47 UTC (rev 26295)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CompleteWorkItemCommand.java 2009-04-29 02:37:51 UTC (rev 26296)
@@ -10,7 +10,18 @@
private long workItemId;
private Map<String, Object> results = new HashMap<String, Object>();
- public long getWorkItemId() {
+
+ public CompleteWorkItemCommand() {
+
+ }
+
+ public CompleteWorkItemCommand(long workItemId,
+ Map<String, Object> results) {
+ this.workItemId = workItemId;
+ this.results = results;
+ }
+
+ public long getWorkItemId() {
return workItemId;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchExecutionHelperProviderImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchExecutionHelperProviderImpl.java 2009-04-29 01:28:47 UTC (rev 26295)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchExecutionHelperProviderImpl.java 2009-04-29 02:37:51 UTC (rev 26296)
@@ -14,6 +14,7 @@
import org.drools.command.Setter;
import org.drools.common.DisconnectedFactHandle;
import org.drools.common.InternalFactHandle;
+import org.drools.process.command.CompleteWorkItemCommand;
import org.drools.process.command.FireAllRulesCommand;
import org.drools.process.command.GetGlobalCommand;
import org.drools.process.command.GetObjectCommand;
@@ -76,7 +77,9 @@
xstream.alias( "start-process",
StartProcessCommand.class );
xstream.alias( "signal-event",
- SignalEventCommand.class );
+ SignalEventCommand.class );
+ xstream.alias( "complete-work-item",
+ CompleteWorkItemCommand.class );
xstream.alias( "set-global",
SetGlobalCommand.class );
xstream.alias( "get-global",
@@ -104,6 +107,7 @@
xstream.registerConverter( new FireAllRulesConverter( xstream.getMapper() ) );
xstream.registerConverter( new StartProcessConvert( xstream.getMapper() ) );
xstream.registerConverter( new SignalEventConverter( xstream.getMapper() ) );
+ xstream.registerConverter( new CompleteWorkItemConverter( xstream.getMapper() ) );
xstream.registerConverter( new QueryConverter( xstream.getMapper() ) );
xstream.registerConverter( new SetGlobalConverter( xstream.getMapper() ) );
xstream.registerConverter( new GetGlobalConverter( xstream.getMapper() ) );
@@ -177,9 +181,10 @@
if ( cmd.getOutIdentifier() != null ) {
writer.addAttribute( "out-identifier",
cmd.getOutIdentifier() );
-
- writer.addAttribute( "return-object", Boolean.toString( cmd.isReturnObject() ) );
-
+
+ writer.addAttribute( "return-object",
+ Boolean.toString( cmd.isReturnObject() ) );
+
}
writeItem( cmd.getObject(),
context,
@@ -198,7 +203,7 @@
reader.moveUp();
InsertObjectCommand cmd = new InsertObjectCommand( object );
if ( identifierOut != null ) {
- cmd.setOutIdentifier( identifierOut );
+ cmd.setOutIdentifier( identifierOut );
if ( returnObject != null ) {
cmd.setReturnObject( Boolean.parseBoolean( returnObject ) );
}
@@ -305,15 +310,16 @@
HierarchicalStreamWriter writer,
MarshallingContext context) {
InsertElementsCommand cmd = (InsertElementsCommand) object;
-
+
if ( cmd.getOutIdentifier() != null ) {
writer.addAttribute( "out-identifier",
cmd.getOutIdentifier() );
-
- writer.addAttribute( "return-object", Boolean.toString( cmd.isReturnObject() ) );
-
+
+ writer.addAttribute( "return-object",
+ Boolean.toString( cmd.isReturnObject() ) );
+
}
-
+
for ( Object element : cmd.getObjects() ) {
writeItem( element,
context,
@@ -325,7 +331,7 @@
UnmarshallingContext context) {
String identifierOut = reader.getAttribute( "out-identifier" );
String returnObject = reader.getAttribute( "return-object" );
-
+
List objects = new ArrayList();
while ( reader.hasMoreChildren() ) {
reader.moveDown();
@@ -335,10 +341,10 @@
reader.moveUp();
objects.add( object );
}
-
+
InsertElementsCommand cmd = new InsertElementsCommand( objects );
if ( identifierOut != null ) {
- cmd.setOutIdentifier( identifierOut );
+ cmd.setOutIdentifier( identifierOut );
if ( returnObject != null ) {
cmd.setReturnObject( Boolean.parseBoolean( returnObject ) );
}
@@ -665,60 +671,120 @@
return clazz.equals( StartProcessCommand.class );
}
}
-
+
public static class SignalEventConverter extends AbstractCollectionConverter
- implements
- Converter {
+ implements
+ Converter {
- public SignalEventConverter(Mapper mapper) {
- super( mapper );
- }
+ public SignalEventConverter(Mapper mapper) {
+ super( mapper );
+ }
- public void marshal(Object object,
- HierarchicalStreamWriter writer,
- MarshallingContext context) {
- SignalEventCommand cmd = (SignalEventCommand) object;
- long processInstanceId = cmd.getProcessInstanceId();
- String eventType = cmd.getEventType();
- Object event = cmd.getEvent();
-
- if ( processInstanceId != -1 ) {
- writer.addAttribute( "process-instance-id", Long.toString( processInstanceId ) );
+ public void marshal(Object object,
+ HierarchicalStreamWriter writer,
+ MarshallingContext context) {
+ SignalEventCommand cmd = (SignalEventCommand) object;
+ long processInstanceId = cmd.getProcessInstanceId();
+ String eventType = cmd.getEventType();
+ Object event = cmd.getEvent();
+
+ if ( processInstanceId != -1 ) {
+ writer.addAttribute( "process-instance-id",
+ Long.toString( processInstanceId ) );
+ }
+
+ writer.addAttribute( "event-type",
+ eventType );
+
+ writeItem( event,
+ context,
+ writer );
}
-
- writer.addAttribute( "event-type", eventType );
-
- writeItem( event, context, writer );
- }
- public Object unmarshal(HierarchicalStreamReader reader,
- UnmarshallingContext context) {
- String processInstanceId = reader.getAttribute( "process-instance-id" );
- String eventType = reader.getAttribute( "event-type" );
+ public Object unmarshal(HierarchicalStreamReader reader,
+ UnmarshallingContext context) {
+ String processInstanceId = reader.getAttribute( "process-instance-id" );
+ String eventType = reader.getAttribute( "event-type" );
- reader.moveDown();
- Object event = readItem( reader,
- context,
- null );
- reader.moveUp();
-
-
- Command cmd;
- if ( processInstanceId != null ) {
- cmd = new SignalEventCommand(Long.parseLong( processInstanceId ), eventType, event );
- } else {
- cmd = new SignalEventCommand( eventType, event );
+ reader.moveDown();
+ Object event = readItem( reader,
+ context,
+ null );
+ reader.moveUp();
+
+ Command cmd;
+ if ( processInstanceId != null ) {
+ cmd = CommandFactory.newSignalEvent( Long.parseLong( processInstanceId ),
+ eventType,
+ event );
+ } else {
+ cmd = CommandFactory.newSignalEvent( eventType,
+ event );
+ }
+
+ return cmd;
}
- return cmd;
+ public boolean canConvert(Class clazz) {
+ return clazz.equals( SignalEventCommand.class );
+ }
+
}
- public boolean canConvert(Class clazz) {
- return clazz.equals( SignalEventCommand.class );
+ public static class CompleteWorkItemConverter extends AbstractCollectionConverter
+ implements
+ Converter {
+
+ public CompleteWorkItemConverter(Mapper mapper) {
+ super( mapper );
+ }
+
+ public void marshal(Object object,
+ HierarchicalStreamWriter writer,
+ MarshallingContext context) {
+ CompleteWorkItemCommand cmd = (CompleteWorkItemCommand) object;
+ writer.addAttribute( "id",
+ Long.toString( cmd.getWorkItemId() ) );
+
+ for ( Entry<String, Object> entry : cmd.getResults().entrySet() ) {
+ writer.startNode( "result" );
+ writer.addAttribute( "identifier",
+ entry.getKey() );
+ writeItem( entry.getValue(),
+ context,
+ writer );
+ writer.endNode();
+ }
+ }
+
+ public Object unmarshal(HierarchicalStreamReader reader,
+ UnmarshallingContext context) {
+ String id = reader.getAttribute( "id" );
+
+ Map<String, Object> results = new HashMap<String, Object>();
+ while ( reader.hasMoreChildren() ) {
+ reader.moveDown();
+ String identifier = reader.getAttribute( "identifier" );
+ reader.moveDown();
+ Object value = readItem( reader,
+ context,
+ null );
+ reader.moveUp();
+ results.put( identifier,
+ value );
+ reader.moveUp();
+ }
+
+ Command cmd = CommandFactory.newCompleteWorkItem(Long.parseLong( id ), results);
+
+ return cmd;
+ }
+
+ public boolean canConvert(Class clazz) {
+ return clazz.equals( CompleteWorkItemCommand.class );
+ }
}
-}
-
public static class BatchExecutionResultConverter extends AbstractCollectionConverter
implements
Converter {
Modified: labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java 2009-04-29 01:28:47 UTC (rev 26295)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java 2009-04-29 02:37:51 UTC (rev 26296)
@@ -5,8 +5,10 @@
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import junit.framework.TestCase;
@@ -19,6 +21,7 @@
import org.drools.Cheese;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
+import org.drools.Person;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.StatefulSession;
@@ -49,6 +52,10 @@
import org.drools.runtime.pipeline.ResultHandler;
import org.drools.runtime.pipeline.Transformer;
import org.drools.runtime.process.ProcessInstance;
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+import org.drools.runtime.process.WorkflowProcessInstance;
import org.drools.runtime.rule.FactHandle;
import org.xml.sax.SAXException;
@@ -1022,24 +1029,26 @@
str += "\n";
str += "</process>";
- kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRF );
-
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRF );
+
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
- StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
-
+
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
ProcessInstance processInstance = ksession.startProcess( "org.drools.event" );
assertEquals( ProcessInstance.STATE_ACTIVE,
processInstance.getState() );
-
+
String inXml = "";
inXml += "<signal-event process-instance-id= '" + processInstance.getId() + "' event-type='MyEvent'>";
inXml += " <string>MyValue</string>";
inXml += "</signal-event>";
-
- getPipelineStateful( ksession ).insert( inXml, new ResultHandlerImpl() );
+ getPipelineStateful( ksession ).insert( inXml,
+ new ResultHandlerImpl() );
+
assertEquals( ProcessInstance.STATE_COMPLETED,
processInstance.getState() );
assertEquals( "MyValue",
@@ -1084,30 +1093,201 @@
str += "\n";
str += "</process>";
- kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRF );
-
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRF );
+
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
- StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
-
+
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
ProcessInstance processInstance = ksession.startProcess( "org.drools.event" );
assertEquals( ProcessInstance.STATE_ACTIVE,
processInstance.getState() );
-
+
String inXml = "";
inXml += "<signal-event event-type='MyEvent'>";
inXml += " <string>MyValue</string>";
inXml += "</signal-event>";
-
- getPipelineStateful( ksession ).insert( inXml, new ResultHandlerImpl() );
+ getPipelineStateful( ksession ).insert( inXml,
+ new ResultHandlerImpl() );
+
assertEquals( ProcessInstance.STATE_COMPLETED,
processInstance.getState() );
assertEquals( "MyValue",
((VariableScopeInstance) ((org.drools.process.instance.ProcessInstance) processInstance).getContextInstance( VariableScope.VARIABLE_SCOPE )).getVariable( "MyVar" ) );
- }
-
+ }
+
+ public void testCompleteWorkItem() {
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+
+ String str = "";
+ str += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+ str += "<process xmlns=\"http://drools.org/drools-5.0/process\"\n";
+ str += " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
+ str += " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n";
+ str += " type=\"RuleFlow\" name=\"flow\" id=\"org.drools.actions\" package-name=\"org.drools\" version=\"1\" >\n";
+ str += "\n";
+ str += " <header>\n";
+ str += " <variables>\n";
+ str += " <variable name=\"UserName\" >\n";
+ str += " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+ str += " <value>John Doe</value>\n";
+ str += " </variable>\n";
+ str += " <variable name=\"Person\" >\n";
+ str += " <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"org.drools.Person\" />\n";
+ str += " </variable>\n";
+ str += " <variable name=\"MyObject\" >\n";
+ str += " <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"java.lang.Object\" />\n";
+ str += " </variable>\n";
+ str += " <variable name=\"Number\" >\n";
+ str += " <type name=\"org.drools.process.core.datatype.impl.type.IntegerDataType\" />\n";
+ str += " </variable>\n";
+ str += " </variables>\n";
+ str += " </header>\n";
+ str += "\n";
+ str += " <nodes>\n";
+ str += " <start id=\"1\" name=\"Start\" />\n";
+ str += " <workItem id=\"2\" name=\"HumanTask\" >\n";
+ str += " <work name=\"Human Task\" >\n";
+ str += " <parameter name=\"ActorId\" >\n";
+ str += " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+ str += " <value>#{UserName}</value>\n";
+ str += " </parameter>\n";
+ str += " <parameter name=\"Content\" >\n";
+ str += " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+ str += " <value>#{Person.name}</value>\n";
+ str += " </parameter>\n";
+ str += " <parameter name=\"TaskName\" >\n";
+ str += " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+ str += " <value>Do something</value>\n";
+ str += " </parameter>\n";
+ str += " <parameter name=\"Priority\" >\n";
+ str += " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+ str += " </parameter>\n";
+ str += " <parameter name=\"Comment\" >\n";
+ str += " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+ str += " </parameter>\n";
+ str += " <parameter name=\"Attachment\" >\n";
+ str += " <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"java.lang.Object\" />\n";
+ str += " </parameter>\n";
+ str += " </work>\n";
+ str += " <mapping type=\"in\" from=\"MyObject\" to=\"Attachment\" />";
+ str += " <mapping type=\"in\" from=\"Person.name\" to=\"Comment\" />";
+ str += " <mapping type=\"out\" from=\"Result\" to=\"MyObject\" />";
+ str += " <mapping type=\"out\" from=\"Result.length()\" to=\"Number\" />";
+ str += " </workItem>\n";
+ str += " <end id=\"3\" name=\"End\" />\n";
+ str += " </nodes>\n";
+ str += "\n";
+ str += " <connections>\n";
+ str += " <connection from=\"1\" to=\"2\" />\n";
+ str += " <connection from=\"2\" to=\"3\" />\n";
+ str += " </connections>\n";
+ str += "\n";
+ str += "</process>";
+
+ Reader source = new StringReader( str );
+ kbuilder.add( ResourceFactory.newReaderResource( source ),
+ ResourceType.DRF );
+
+ Collection<KnowledgePackage> kpkgs = kbuilder.getKnowledgePackages();
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kpkgs );
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
+ TestWorkItemHandler handler = new TestWorkItemHandler();
+ ksession.getWorkItemManager().registerWorkItemHandler( "Human Task",
+ handler );
+ Map<String, Object> parameters = new HashMap<String, Object>();
+ parameters.put( "UserName",
+ "John Doe" );
+ Person person = new Person();
+ person.setName( "John Doe" );
+ parameters.put( "Person",
+ person );
+ WorkflowProcessInstance processInstance = (WorkflowProcessInstance) ksession.startProcess( "org.drools.actions",
+ parameters );
+ assertEquals( ProcessInstance.STATE_ACTIVE,
+ processInstance.getState() );
+ WorkItem workItem = handler.getWorkItem();
+ assertNotNull( workItem );
+ assertEquals( "John Doe",
+ workItem.getParameter( "ActorId" ) );
+ assertEquals( "John Doe",
+ workItem.getParameter( "Content" ) );
+ assertEquals( "John Doe",
+ workItem.getParameter( "Comment" ) );
+
+ String inXml = "";
+ inXml = "<complete-work-item id='" + workItem.getId() + "' />";
+ getPipelineStateful( ksession ).insert( inXml,
+ new ResultHandlerImpl() );
+
+ assertEquals( ProcessInstance.STATE_COMPLETED,
+ processInstance.getState() );
+
+ parameters = new HashMap<String, Object>();
+ parameters.put( "UserName",
+ "Jane Doe" );
+ parameters.put( "MyObject",
+ "SomeString" );
+ person = new Person();
+ person.setName( "Jane Doe" );
+ parameters.put( "Person",
+ person );
+ processInstance = (WorkflowProcessInstance) ksession.startProcess( "org.drools.actions",
+ parameters );
+ assertEquals( ProcessInstance.STATE_ACTIVE,
+ processInstance.getState() );
+ workItem = handler.getWorkItem();
+ assertNotNull( workItem );
+ assertEquals( "Jane Doe",
+ workItem.getParameter( "ActorId" ) );
+ assertEquals( "SomeString",
+ workItem.getParameter( "Attachment" ) );
+ assertEquals( "Jane Doe",
+ workItem.getParameter( "Content" ) );
+ assertEquals( "Jane Doe",
+ workItem.getParameter( "Comment" ) );
+
+ inXml = "";
+ inXml += "<complete-work-item id='" + workItem.getId() + "' >";
+ inXml += " <result identifier='Result'>";
+ inXml += " <string>SomeOtherString</string>";
+ inXml += " </result>";
+ inXml += "</complete-work-item>";
+ getPipelineStateful( ksession ).insert( inXml,
+ new ResultHandlerImpl() );
+
+ assertEquals( ProcessInstance.STATE_COMPLETED,
+ processInstance.getState() );
+ assertEquals( "SomeOtherString",
+ processInstance.getVariable( "MyObject" ) );
+ assertEquals( 15,
+ processInstance.getVariable( "Number" ) );
+ }
+
+ public static class TestWorkItemHandler
+ implements
+ WorkItemHandler {
+ private WorkItem workItem;
+
+ public void executeWorkItem(WorkItem workItem,
+ WorkItemManager manager) {
+ this.workItem = workItem;
+ }
+
+ public void abortWorkItem(WorkItem workItem,
+ WorkItemManager manager) {
+ }
+
+ public WorkItem getWorkItem() {
+ return workItem;
+ }
+ }
+
public void testInsertObjectWithDeclaredFact() throws Exception {
String str = "";
str += "package org.foo \n";
More information about the jboss-svn-commits
mailing list