[jboss-svn-commits] JBL Code SVN: r24578 - in labs/jbossrules/branches/mfossati/drools-osworkflow/src: main/java/org/drools/osworkflow/persistence/marshaller and 4 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jan 7 11:46:09 EST 2009


Author: mfossati
Date: 2009-01-07 11:46:08 -0500 (Wed, 07 Jan 2009)
New Revision: 24578

Added:
   labs/jbossrules/branches/mfossati/drools-osworkflow/src/main/java/org/drools/osworkflow/xml/InitialActionsHandler.java
Modified:
   labs/jbossrules/branches/mfossati/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/OSWorkflowProcessInstance.java
   labs/jbossrules/branches/mfossati/drools-osworkflow/src/main/java/org/drools/osworkflow/persistence/marshaller/OSWorkflowMarshaller.java
   labs/jbossrules/branches/mfossati/drools-osworkflow/src/main/java/org/drools/osworkflow/xml/OSWorkflowSemanticModule.java
   labs/jbossrules/branches/mfossati/drools-osworkflow/src/main/resources/META-INF/OSWorkflowSemanticModule.conf
   labs/jbossrules/branches/mfossati/drools-osworkflow/src/test/java/org/drools/osworkflow/test/persistence/OSWorkFlowPersistenceTestCase.java
   labs/jbossrules/branches/mfossati/drools-osworkflow/src/test/resources/simplerf.rf
Log:
Testcase + fix. Process is working with persistence

Modified: labs/jbossrules/branches/mfossati/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/OSWorkflowProcessInstance.java
===================================================================
--- labs/jbossrules/branches/mfossati/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/OSWorkflowProcessInstance.java	2009-01-07 14:03:54 UTC (rev 24577)
+++ labs/jbossrules/branches/mfossati/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/OSWorkflowProcessInstance.java	2009-01-07 16:46:08 UTC (rev 24578)
@@ -49,9 +49,9 @@
     protected void internalStart() {
         Map<String, Object> transientVars = new HashMap<String, Object>();
         for (ActionDescriptor action: getOSWorkflowProcess().getInitialActions()) {
-            if (action.getAutoExecute()) {
+          //  if (action.getAutoExecute()) {
                 executeAction(action, 0, transientVars);
-            }
+          //  }
         }
     }
 

Modified: labs/jbossrules/branches/mfossati/drools-osworkflow/src/main/java/org/drools/osworkflow/persistence/marshaller/OSWorkflowMarshaller.java
===================================================================
--- labs/jbossrules/branches/mfossati/drools-osworkflow/src/main/java/org/drools/osworkflow/persistence/marshaller/OSWorkflowMarshaller.java	2009-01-07 14:03:54 UTC (rev 24577)
+++ labs/jbossrules/branches/mfossati/drools-osworkflow/src/main/java/org/drools/osworkflow/persistence/marshaller/OSWorkflowMarshaller.java	2009-01-07 16:46:08 UTC (rev 24578)
@@ -26,10 +26,10 @@
 		
 	}
 
-	public void writeNodeInstance(MarshallerWriteContext context,
-			NodeInstance nodeInstance) throws IOException {
+//	public void writeNodeInstance(MarshallerWriteContext context,
+//			NodeInstance nodeInstance) throws IOException {
 		
-	}
+//	}
 
 	@Override
 	protected void outputSpecificNodes(MarshallerWriteContext context,
@@ -38,8 +38,11 @@
 		ObjectOutputStream stream = context.stream;
 		if (nodeInstance instanceof StepNodeInstance) {
 			stream.writeShort(PersisterEnums.STEP_NODE_INSTANCE);
-			stream.writeLong(((StepNodeInstance) nodeInstance).getEntryId());
-			stream.writeChars(((StepNodeInstance) nodeInstance).getOwner());
+			//stream.writeLong(((StepNodeInstance) nodeInstance).getEntryId()); //why this?
+			//stream.writeChars(((StepNodeInstance) nodeInstance).getOwner()); //why this? what happen if the owner is empty (like "")
+			stream.writeLong(((StepNodeInstance) nodeInstance).getNodeId());
+			stream.writeUTF(((StepNodeInstance) nodeInstance).getStatus());
+			stream.writeUTF(((StepNodeInstance) nodeInstance).getOwner());
 		}
 		
 	}
@@ -101,15 +104,20 @@
     }
 	
 	
-	public boolean inputSpecificNode(NodeInstanceImpl nodeInstance, int nodeType , ObjectInputStream stream) throws IOException {
+	public NodeInstanceImpl inputSpecificNode(NodeInstanceImpl nodeInstance, int nodeType , ObjectInputStream stream) throws IOException {
 		if (nodeType == PersisterEnums.STEP_NODE_INSTANCE) {
 			nodeInstance = new StepNodeInstance();
-			StepNodeInstance stepNodeInstance = (StepNodeInstance)nodeInstance;
-			stepNodeInstance.setNodeId(stream.readLong());
-			stepNodeInstance.setOwner(stream.readUTF());
-			return true;
+			((StepNodeInstance)nodeInstance).setNodeId(stream.readLong());
+			((StepNodeInstance)nodeInstance).setStatus(stream.readUTF());
+			((StepNodeInstance)nodeInstance).setOwner(stream.readUTF());
+			
+			// if you make this indirection we lost the reference to nodeInstance that is used for the method that call this
+			//StepNodeInstance stepNodeInstance = (StepNodeInstance)nodeInstance; 
+			
+			//stepNodeInstance.setOwner(stream.readUTF());
+			return nodeInstance;
 		}
-		return false;
+		return null;
 	}
 
 }

Added: labs/jbossrules/branches/mfossati/drools-osworkflow/src/main/java/org/drools/osworkflow/xml/InitialActionsHandler.java
===================================================================
--- labs/jbossrules/branches/mfossati/drools-osworkflow/src/main/java/org/drools/osworkflow/xml/InitialActionsHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/mfossati/drools-osworkflow/src/main/java/org/drools/osworkflow/xml/InitialActionsHandler.java	2009-01-07 16:46:08 UTC (rev 24578)
@@ -0,0 +1,101 @@
+package org.drools.osworkflow.xml;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+
+import org.drools.definition.process.Process;
+import org.drools.osworkflow.core.OSWorkflowProcess;
+import org.drools.osworkflow.core.node.StepNode;
+import org.drools.osworkflow.instance.OSWorkflowProcessInstance;
+import org.drools.process.core.ContextContainer;
+import org.drools.process.core.context.variable.Variable;
+import org.drools.process.core.context.variable.VariableScope;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.impl.WorkflowProcessImpl;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.drools.xml.processes.AbstractNodeHandler;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+import com.opensymphony.workflow.loader.ActionDescriptor;
+import com.opensymphony.workflow.loader.DescriptorFactory;
+
+public class InitialActionsHandler extends BaseAbstractHandler implements
+			Handler {
+	OSWorkflowProcess  process = null;
+	
+	public InitialActionsHandler() {
+		if ( (this.validParents == null) && (this.validPeers == null) ) {
+            this.validParents = new HashSet();
+            this.validParents.add( ContextContainer.class );
+
+            this.validPeers = new HashSet();         
+            this.validPeers.add( null );            
+
+            this.allowNesting = false;
+        }
+    }
+    
+
+    
+    public Object start(final String uri,
+                        final String localName,
+                        final Attributes attrs,
+                        final ExtensibleXmlParser parser) throws SAXException {
+        parser.startElementBuilder( localName,
+                                    attrs );
+       
+        
+        
+        process = ( OSWorkflowProcess ) parser.getParent();        
+        
+        
+        
+        
+        
+        return null;
+    }    
+    
+    public Object end(final String uri,
+                      final String localName,
+                      final ExtensibleXmlParser parser) throws SAXException {
+        
+    	Element element = parser.endElementBuilder();
+    	
+    	
+        
+        
+        List<ActionDescriptor> actionList = new ArrayList<ActionDescriptor>();
+        NodeList nodeList = element.getChildNodes();
+        for (int i = 0; i < nodeList.getLength(); i++) {
+            org.w3c.dom.Node subNode = nodeList.item(i);
+            if (subNode.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {
+                Element subElement = (Element) subNode;
+                ActionDescriptor actionDescriptor = 
+                    DescriptorFactory.getFactory().createActionDescriptor(subElement);
+                actionList.add(actionDescriptor);
+            }
+        }
+        
+        process.setInitialActions(actionList);
+    	
+    	
+    	
+    	
+    	
+        return null;
+    }
+
+    public Class<?> generateNodeFor() {
+        return Variable.class;
+    }    
+
+}

Modified: labs/jbossrules/branches/mfossati/drools-osworkflow/src/main/java/org/drools/osworkflow/xml/OSWorkflowSemanticModule.java
===================================================================
--- labs/jbossrules/branches/mfossati/drools-osworkflow/src/main/java/org/drools/osworkflow/xml/OSWorkflowSemanticModule.java	2009-01-07 14:03:54 UTC (rev 24577)
+++ labs/jbossrules/branches/mfossati/drools-osworkflow/src/main/java/org/drools/osworkflow/xml/OSWorkflowSemanticModule.java	2009-01-07 16:46:08 UTC (rev 24578)
@@ -36,6 +36,8 @@
                            new StartNodeHandler() );
         addHandler( "end",
                            new EndNodeHandler() );
+    //    addHandler( "initial-actions",
+     //   				new InitialActionsHandler() );
 //        addHandler( "action",
 //                           new ActionNodeHandler() );
         addHandler( "ruleSet",
@@ -54,8 +56,8 @@
                            new TimerNodeHandler() );
         addHandler( "composite",
                            new CompositeNodeHandler() );
-        addHandler( "step",
-                           new StepNodeHandler() );
+       // addHandler( "step",
+       //                    new StepNodeHandler() );
         addHandler( "connection",
                            new ConnectionHandler() );
         addHandler( "import",

Modified: labs/jbossrules/branches/mfossati/drools-osworkflow/src/main/resources/META-INF/OSWorkflowSemanticModule.conf
===================================================================
--- labs/jbossrules/branches/mfossati/drools-osworkflow/src/main/resources/META-INF/OSWorkflowSemanticModule.conf	2009-01-07 14:03:54 UTC (rev 24577)
+++ labs/jbossrules/branches/mfossati/drools-osworkflow/src/main/resources/META-INF/OSWorkflowSemanticModule.conf	2009-01-07 16:46:08 UTC (rev 24578)
@@ -11,6 +11,7 @@
 timer=org.drools.xml.processes.TimerNodeHandler
 composite=org.drools.xml.processes.CompositeNodeHandler
 step=org.drools.osworkflow.xml.StepNodeHandler
+initial-actions=org.drools.osworkflow.xml.InitialActionsHandler
 connection=org.drools.xml.processes.ConnectionHandler
 import=org.drools.xml.processes.ImportHandler
 global=org.drools.xml.processes.GlobalHandler

Modified: labs/jbossrules/branches/mfossati/drools-osworkflow/src/test/java/org/drools/osworkflow/test/persistence/OSWorkFlowPersistenceTestCase.java
===================================================================
--- labs/jbossrules/branches/mfossati/drools-osworkflow/src/test/java/org/drools/osworkflow/test/persistence/OSWorkFlowPersistenceTestCase.java	2009-01-07 14:03:54 UTC (rev 24577)
+++ labs/jbossrules/branches/mfossati/drools-osworkflow/src/test/java/org/drools/osworkflow/test/persistence/OSWorkFlowPersistenceTestCase.java	2009-01-07 16:46:08 UTC (rev 24578)
@@ -5,6 +5,8 @@
 import org.drools.RuleBase;
 import org.drools.RuleBaseConfiguration;
 import org.drools.osworkflow.core.command.DoActionCommand;
+import org.drools.osworkflow.instance.OSWorkflowProcessInstance;
+import org.drools.osworkflow.instance.node.StepNodeInstance;
 import org.drools.persistence.session.SingleSessionCommandService;
 import org.drools.process.command.GetProcessInstanceCommand;
 import org.drools.process.command.StartProcessCommand;
@@ -31,13 +33,45 @@
         processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
         assertNotNull(processInstance);
 		System.out.println("Now working with processInstance " + processInstance.getId());
-
+		assertEquals("Queued", 
+    			((StepNodeInstance)
+    					((OSWorkflowProcessInstance)processInstance)
+    							.getNodeInstances().iterator().next()).getStatus());
         
         service = new SingleSessionCommandService(ruleBase);
         DoActionCommand doActionCmd = new DoActionCommand();
         doActionCmd.setProcessInstanceId(processInstance.getId());
+        doActionCmd.setActionId(2); //Action to be executed at current step
+        service.execute(doActionCmd);
+        
+        
+        service = new SingleSessionCommandService(ruleBase);
+        getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
+        processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
+        assertNotNull(processInstance);
+        
+        assertEquals("Underway", 
+        			((StepNodeInstance)
+        					((OSWorkflowProcessInstance)processInstance)
+        							.getNodeInstances().iterator().next()).getStatus());
+        System.out.println("Now working with processInstance " + processInstance.getId());
+        
+        
+        service = new SingleSessionCommandService(ruleBase);
+        doActionCmd = new DoActionCommand();
+        doActionCmd.setProcessInstanceId(processInstance.getId());
         doActionCmd.setActionId(3); //Action to be executed at current step
         service.execute(doActionCmd);
+        
+        
+        service = new SingleSessionCommandService(ruleBase);
+        getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
+        processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
+        //Because it is finished the instance will not longer be available 
+        assertNull(processInstance);
+		
 
 	}
 

Modified: labs/jbossrules/branches/mfossati/drools-osworkflow/src/test/resources/simplerf.rf
===================================================================
--- labs/jbossrules/branches/mfossati/drools-osworkflow/src/test/resources/simplerf.rf	2009-01-07 14:03:54 UTC (rev 24577)
+++ labs/jbossrules/branches/mfossati/drools-osworkflow/src/test/resources/simplerf.rf	2009-01-07 16:46:08 UTC (rev 24578)
@@ -5,9 +5,20 @@
          type="OSWorkflow" name="simple" id="simple" package-name="org.drools.osworkflow" >
 
   <header>
+  	<initial-actions>
+		<action id="1" name="Start Workflow">
+			<results>
+				<unconditional-result old-status="Finished"
+					status="Queued" step="1" />
+			</results>
+		</action>
+	</initial-actions>
   </header>
-
+	
+	
+	
   <nodes>
+  	
     <step id="2" name="finished" >
     </step>
     <step id="1" name="First Draft" >




More information about the jboss-svn-commits mailing list