[jboss-svn-commits] JBL Code SVN: r26297 - 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 23:02:51 EDT 2009


Author: mark.proctor at jboss.com
Date: 2009-04-28 23:02:51 -0400 (Tue, 28 Apr 2009)
New Revision: 26297

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/AbortWorkItemCommand.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 abort 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 02:37:51 UTC (rev 26296)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactory.java	2009-04-29 03:02:51 UTC (rev 26297)
@@ -213,6 +213,10 @@
         return getCommandFactoryProvider().newCompleteWorkItem( workItemId,
                                                                 results );
     }
+    
+    public static Command newAbortWorkItem(long workItemId) {
+        return getCommandFactoryProvider().newAbortWorkItem( workItemId );
+    }    
 
     /**
      * Executes a query. The query results will be added to the ExecutionResults using the 

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 02:37:51 UTC (rev 26296)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactoryProvider.java	2009-04-29 03:02:51 UTC (rev 26297)
@@ -72,4 +72,6 @@
 
     Command newBatchExecution(List< ? extends Command> commands);
 
+    Command newAbortWorkItem(long workItemId);
+
 }

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 02:37:51 UTC (rev 26296)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandFactoryProviderImpl.java	2009-04-29 03:02:51 UTC (rev 26297)
@@ -6,6 +6,7 @@
 import org.drools.command.Command;
 import org.drools.command.CommandFactoryProvider;
 import org.drools.command.Setter;
+import org.drools.process.command.AbortWorkItemCommand;
 import org.drools.process.command.CompleteWorkItemCommand;
 import org.drools.process.command.FireAllRulesCommand;
 import org.drools.process.command.GetGlobalCommand;
@@ -130,6 +131,10 @@
                                        Map<String, Object> results) {
         return new CompleteWorkItemCommand(workItemId, results);
     }    
+    
+    public Command newAbortWorkItem(long workItemId) {
+        return new AbortWorkItemCommand( workItemId);
+    }    
 	
 	public Command newQuery(String identifier, String name) {
 		return new QueryCommand(identifier, name, null);
@@ -143,5 +148,4 @@
 		return new BatchExecutionImpl(
 				(List<org.drools.process.command.Command>) commands);
 	}
-
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/AbortWorkItemCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/AbortWorkItemCommand.java	2009-04-29 02:37:51 UTC (rev 26296)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/AbortWorkItemCommand.java	2009-04-29 03:02:51 UTC (rev 26297)
@@ -7,7 +7,15 @@
     Command<Object> {
 
     private long workItemId;
+    
+    public AbortWorkItemCommand() {
+        
+    }
 
+    public AbortWorkItemCommand(long workItemId) {
+        this.workItemId = workItemId;
+    }
+
     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 02:37:51 UTC (rev 26296)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchExecutionHelperProviderImpl.java	2009-04-29 03:02:51 UTC (rev 26297)
@@ -14,6 +14,7 @@
 import org.drools.command.Setter;
 import org.drools.common.DisconnectedFactHandle;
 import org.drools.common.InternalFactHandle;
+import org.drools.process.command.AbortWorkItemCommand;
 import org.drools.process.command.CompleteWorkItemCommand;
 import org.drools.process.command.FireAllRulesCommand;
 import org.drools.process.command.GetGlobalCommand;
@@ -80,6 +81,8 @@
                        SignalEventCommand.class );
         xstream.alias( "complete-work-item",
                        CompleteWorkItemCommand.class );
+        xstream.alias( "abort-work-item",
+                       AbortWorkItemCommand.class );        
         xstream.alias( "set-global",
                        SetGlobalCommand.class );
         xstream.alias( "get-global",
@@ -108,6 +111,7 @@
         xstream.registerConverter( new StartProcessConvert( xstream.getMapper() ) );
         xstream.registerConverter( new SignalEventConverter( xstream.getMapper() ) );
         xstream.registerConverter( new CompleteWorkItemConverter( xstream.getMapper() ) );
+        xstream.registerConverter( new AbortWorkItemConverter( xstream.getMapper() ) );
         xstream.registerConverter( new QueryConverter( xstream.getMapper() ) );
         xstream.registerConverter( new SetGlobalConverter( xstream.getMapper() ) );
         xstream.registerConverter( new GetGlobalConverter( xstream.getMapper() ) );
@@ -784,7 +788,36 @@
             return clazz.equals( CompleteWorkItemCommand.class );
         }
     }
+    
+    public static class AbortWorkItemConverter extends AbstractCollectionConverter
+    implements
+    Converter {
 
+    public AbortWorkItemConverter(Mapper mapper) {
+        super( mapper );
+    }
+
+    public void marshal(Object object,
+                        HierarchicalStreamWriter writer,
+                        MarshallingContext context) {
+        AbortWorkItemCommand cmd = (AbortWorkItemCommand) object;
+        writer.addAttribute( "id",
+                             Long.toString( cmd.getWorkItemId() ) );
+    }
+
+    public Object unmarshal(HierarchicalStreamReader reader,
+                            UnmarshallingContext context) {
+        String id = reader.getAttribute( "id" );
+        Command cmd = CommandFactory.newAbortWorkItem(Long.parseLong( id ) );
+
+        return cmd;
+    }
+
+    public boolean canConvert(Class clazz) {
+        return clazz.equals( AbortWorkItemCommand.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 02:37:51 UTC (rev 26296)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java	2009-04-29 03:02:51 UTC (rev 26297)
@@ -1220,10 +1220,14 @@
         assertEquals( "John Doe",
                       workItem.getParameter( "Comment" ) );
 
+        assertEquals( WorkItem.PENDING, workItem.getState() );
+        
         String inXml = "";
         inXml = "<complete-work-item id='" + workItem.getId() + "' />";
         getPipelineStateful( ksession ).insert( inXml,
                                                 new ResultHandlerImpl() );
+        
+        assertEquals( WorkItem.COMPLETED, workItem.getState() );
 
         assertEquals( ProcessInstance.STATE_COMPLETED,
                       processInstance.getState() );
@@ -1251,6 +1255,8 @@
                       workItem.getParameter( "Content" ) );
         assertEquals( "Jane Doe",
                       workItem.getParameter( "Comment" ) );
+        
+        assertEquals( WorkItem.PENDING, workItem.getState() );
 
         inXml = "";
         inXml += "<complete-work-item id='" + workItem.getId() + "' >";
@@ -1260,6 +1266,8 @@
         inXml += "</complete-work-item>";
         getPipelineStateful( ksession ).insert( inXml,
                                                 new ResultHandlerImpl() );
+        
+        assertEquals( WorkItem.COMPLETED, workItem.getState() );
 
         assertEquals( ProcessInstance.STATE_COMPLETED,
                       processInstance.getState() );
@@ -1268,7 +1276,111 @@
         assertEquals( 15,
                       processInstance.getVariable( "Number" ) );
     }
+    
+    public void testAbortWorkItem() {
+        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( WorkItem.PENDING, workItem.getState() );
+        
+        String inXml = "<abort-work-item id='" + workItem.getId() + "' />";
+        getPipelineStateful( ksession ).insert( inXml,
+                                                new ResultHandlerImpl() );
+        
+        assertEquals( WorkItem.ABORTED, workItem.getState() );        
+    }    
+
     public static class TestWorkItemHandler
         implements
         WorkItemHandler {




More information about the jboss-svn-commits mailing list