[jboss-svn-commits] JBL Code SVN: r20795 - in labs/jbossrules/trunk/drools-core/src/main: java/org/drools/audit and 7 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jun 26 05:26:25 EDT 2008


Author: KrisVerlaenen
Date: 2008-06-26 05:26:25 -0400 (Thu, 26 Jun 2008)
New Revision: 20795

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryLogger.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/event/RuleFlowLogEvent.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/event/RuleFlowNodeLogEvent.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/swimlane/Swimlane.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/swimlane/SwimlaneContext.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/WorkItemManager.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/HumanTaskNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/NodeInstanceImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/WorkflowProcessInstanceImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/WorkItemNodeInstance.java
   labs/jbossrules/trunk/drools-core/src/main/resources/META-INF/WorkDefinitions.conf
Log:
JBRULES-1551: Workflow human tasks
 - added human tasks and swimlanes (in core, compiler and eclipse IDE)

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java	2008-06-26 09:26:14 UTC (rev 20794)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java	2008-06-26 09:26:25 UTC (rev 20795)
@@ -120,6 +120,7 @@
     private static final String            STAR             = "*";
     private ContextInstanceFactoryRegistry processContextInstanceFactoryRegistry;
     private Map<String, WorkDefinition>    workDefinitions;
+    private boolean                        advancedProcessRuleIntegration;
 
     private ProcessInstanceFactoryRegistry processInstanceFactoryRegistry;
     private NodeInstanceFactoryRegistry    processNodeInstanceFactoryRegistry;
@@ -147,6 +148,7 @@
         out.writeObject( ruleBaseUpdateHandler );
         out.writeObject( conflictResolver );
         out.writeObject( processNodeInstanceFactoryRegistry );
+        out.writeBoolean( advancedProcessRuleIntegration );
     }
 
     public void readExternal(ObjectInput in) throws IOException,
@@ -170,6 +172,7 @@
         ruleBaseUpdateHandler = (String) in.readObject();
         conflictResolver = (ConflictResolver) in.readObject();
         processNodeInstanceFactoryRegistry = (NodeInstanceFactoryRegistry) in.readObject();
+        advancedProcessRuleIntegration = in.readBoolean();
     }
 
     /**
@@ -289,6 +292,9 @@
 
         setConflictResolver( RuleBaseConfiguration.determineConflictResolver( this.chainedProperties.getProperty( "drools.conflictResolver",
                                                                                                                   "org.drools.conflict.DepthConflictResolver" ) ) );
+        
+        setAdvancedProcessRuleIntegration( Boolean.valueOf( this.chainedProperties.getProperty( "drools.advancedProcessRuleIntegration",
+                                                                                      "false" ) ).booleanValue() );
     }
 
     /**
@@ -708,6 +714,14 @@
             throw new IllegalArgumentException( "Process instance manager '" + className + "' not found" );
         }
     }
+    
+    public boolean isAdvancedProcessRuleIntegration() {
+        return advancedProcessRuleIntegration;
+    }
+    
+    public void setAdvancedProcessRuleIntegration(boolean advancedProcessRuleIntegration) {
+        this.advancedProcessRuleIntegration = advancedProcessRuleIntegration;
+    }
 
     private boolean determineShadowProxy(String userValue) {
         if ( this.isSequential() ) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryLogger.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryLogger.java	2008-06-26 09:26:14 UTC (rev 20794)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryLogger.java	2008-06-26 09:26:25 UTC (rev 20795)
@@ -16,17 +16,17 @@
  * limitations under the License.
  */
 
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.io.ObjectOutput;
-import java.io.IOException;
-import java.io.ObjectInput;
 
-import org.drools.WorkingMemoryEventManager;
 import org.drools.FactHandle;
 import org.drools.WorkingMemory;
+import org.drools.WorkingMemoryEventManager;
 import org.drools.audit.event.ActivationLogEvent;
 import org.drools.audit.event.ILogEventFilter;
 import org.drools.audit.event.LogEvent;
@@ -59,8 +59,8 @@
 import org.drools.event.BeforeRuleBaseUnlockedEvent;
 import org.drools.event.BeforeRuleRemovedEvent;
 import org.drools.event.ObjectInsertedEvent;
+import org.drools.event.ObjectRetractedEvent;
 import org.drools.event.ObjectUpdatedEvent;
-import org.drools.event.ObjectRetractedEvent;
 import org.drools.event.RuleBaseEventListener;
 import org.drools.event.RuleFlowCompletedEvent;
 import org.drools.event.RuleFlowEventListener;
@@ -337,28 +337,32 @@
             					      WorkingMemory workingMemory) {
         filterLogEvent( new RuleFlowLogEvent( LogEvent.BEFORE_RULEFLOW_CREATED,
         		event.getProcessInstance().getProcess().getId(),
-                event.getProcessInstance().getProcess().getName() ) );
+                event.getProcessInstance().getProcess().getName(),
+                event.getProcessInstance().getId()) );
     }
 
     public void afterRuleFlowStarted(RuleFlowStartedEvent event,
                                      WorkingMemory workingMemory) {
         filterLogEvent(new RuleFlowLogEvent(LogEvent.AFTER_RULEFLOW_CREATED,
                 event.getProcessInstance().getProcess().getId(),
-                event.getProcessInstance().getProcess().getName()));
+                event.getProcessInstance().getProcess().getName(),
+                event.getProcessInstance().getId()) );
     }
 
     public void beforeRuleFlowCompleted(RuleFlowCompletedEvent event,
               					  WorkingMemory workingMemory) {
         filterLogEvent( new RuleFlowLogEvent( LogEvent.BEFORE_RULEFLOW_COMPLETED,
         		event.getProcessInstance().getProcess().getId(),
-                event.getProcessInstance().getProcess().getName() ) );
+                event.getProcessInstance().getProcess().getName(),
+                event.getProcessInstance().getId()) );
     }
     
     public void afterRuleFlowCompleted(RuleFlowCompletedEvent event,
                                        WorkingMemory workingMemory) {
         filterLogEvent(new RuleFlowLogEvent(LogEvent.AFTER_RULEFLOW_COMPLETED,
                 event.getProcessInstance().getProcess().getId(),
-                event.getProcessInstance().getProcess().getName()));
+                event.getProcessInstance().getProcess().getName(),
+                event.getProcessInstance().getId()) );
     }
 
     public void beforeRuleFlowGroupActivated(
@@ -402,8 +406,9 @@
         filterLogEvent(new RuleFlowNodeLogEvent(LogEvent.BEFORE_RULEFLOW_NODE_TRIGGERED,
                 event.getRuleFlowNodeInstance().getId() + "",
                 event.getRuleFlowNodeInstance().getNode().getName(),
-                event.getProcessInstance().getProcess().getId(), event
-                        .getProcessInstance().getProcess().getName()));
+                event.getProcessInstance().getProcess().getId(),
+                event.getProcessInstance().getProcess().getName(),
+                event.getProcessInstance().getId()) );
     }
 
     public void afterRuleFlowNodeTriggered(RuleFlowNodeTriggeredEvent event,
@@ -411,8 +416,9 @@
         filterLogEvent(new RuleFlowNodeLogEvent(LogEvent.AFTER_RULEFLOW_NODE_TRIGGERED,
                 event.getRuleFlowNodeInstance().getId() + "",
                 event.getRuleFlowNodeInstance().getNode().getName(),
-                event.getProcessInstance().getProcess().getId(), event
-                        .getProcessInstance().getProcess().getName()));
+                event.getProcessInstance().getProcess().getId(), 
+                event.getProcessInstance().getProcess().getName(),
+                event.getProcessInstance().getId()) );
     }
 
     public void afterPackageAdded(AfterPackageAddedEvent event) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/event/RuleFlowLogEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/event/RuleFlowLogEvent.java	2008-06-26 09:26:14 UTC (rev 20794)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/event/RuleFlowLogEvent.java	2008-06-26 09:26:25 UTC (rev 20795)
@@ -31,6 +31,7 @@
 
     private String processId;
     private String processName;
+    private long processInstanceId;
 
     /**
      * Create a new ruleflow log event.
@@ -42,22 +43,26 @@
      */
     public RuleFlowLogEvent(final int type,
                             final String processId,
-                            final String processName) {
+                            final String processName,
+                            final long processInstanceId) {
         super( type );
         this.processId = processId;
         this.processName = processName;
+        this.processInstanceId = processInstanceId;
     }
 
     public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
         super.readExternal(in);
         processId    = (String)in.readObject();
         processName    = (String)in.readObject();
+        processInstanceId = in.readLong();
     }
 
     public void writeExternal(ObjectOutput out) throws IOException {
         super.writeExternal(out);
         out.writeObject(processId);
         out.writeObject(processName);
+        out.writeLong(processInstanceId);
     }
 
     public String getProcessId() {
@@ -67,6 +72,10 @@
     public String getProcessName() {
         return this.processName;
     }
+    
+    public long getProcessInstanceId() {
+        return this.processInstanceId;
+    }
 
     public String toString() {
         String msg = null;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/event/RuleFlowNodeLogEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/event/RuleFlowNodeLogEvent.java	2008-06-26 09:26:14 UTC (rev 20794)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/event/RuleFlowNodeLogEvent.java	2008-06-26 09:26:25 UTC (rev 20795)
@@ -20,8 +20,9 @@
                                 final String nodeId,
                                 final String nodeName,
                                 final String processId,
-                                final String processName) {
-        super( type, processId, processName );
+                                final String processName,
+                                final long processInstanceId) {
+        super( type, processId, processName, processInstanceId );
         this.nodeId = nodeId;
         this.nodeName = nodeName;
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/swimlane/Swimlane.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/swimlane/Swimlane.java	2008-06-26 09:26:14 UTC (rev 20794)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/swimlane/Swimlane.java	2008-06-26 09:26:25 UTC (rev 20795)
@@ -9,14 +9,14 @@
 	private String name;
 	private String actorId;
 	
-	public Swimlane(String name) {
-		this.name = name;
-	}
-	
 	public String getName() {
 		return this.name;
 	}
 	
+	public void setName(String name) {
+	    this.name = name;
+	}
+	
 	public void setActorId(String actorId) {
 		this.actorId = actorId;
 	}
@@ -24,5 +24,9 @@
 	public String getActorId() {
 		return this.actorId;
 	}
+	
+	public String toString() {
+	    return name;
+	}
 
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/swimlane/SwimlaneContext.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/swimlane/SwimlaneContext.java	2008-06-26 09:26:14 UTC (rev 20794)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/swimlane/SwimlaneContext.java	2008-06-26 09:26:25 UTC (rev 20795)
@@ -1,5 +1,6 @@
 package org.drools.process.core.context.swimlane;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
@@ -32,8 +33,15 @@
     }
     
     public Collection<Swimlane> getSwimlanes() {
-        return swimlanes.values();
+        return new ArrayList<Swimlane>(swimlanes.values());
     }
+    
+    public void setSwimlanes(Collection<Swimlane> swimlanes) {
+        this.swimlanes.clear();
+        for (Swimlane swimlane: swimlanes) {
+            addSwimlane(swimlane);
+        }
+    }
 
 	public Context resolveContext(Object param) {
 		if (param instanceof String) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/WorkItemManager.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/WorkItemManager.java	2008-06-26 09:26:14 UTC (rev 20794)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/WorkItemManager.java	2008-06-26 09:26:25 UTC (rev 20795)
@@ -94,6 +94,7 @@
                 processInstance.workItemCompleted(workItem);
             }
             workItems.remove(new Long(id));
+            workingMemory.fireAllRules();
         }
     }
 
@@ -108,6 +109,7 @@
                 processInstance.workItemAborted(workItem);
             }
             workItems.remove(new Long(id));
+            workingMemory.fireAllRules();
         }
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/HumanTaskNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/HumanTaskNode.java	2008-06-26 09:26:14 UTC (rev 20794)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/HumanTaskNode.java	2008-06-26 09:26:25 UTC (rev 20795)
@@ -1,6 +1,12 @@
 package org.drools.workflow.core.node;
 
+import java.util.HashSet;
+import java.util.Set;
+
+import org.drools.process.core.ParameterDefinition;
 import org.drools.process.core.Work;
+import org.drools.process.core.datatype.impl.type.StringDataType;
+import org.drools.process.core.impl.ParameterDefinitionImpl;
 import org.drools.process.core.impl.WorkImpl;
 
 public class HumanTaskNode extends WorkItemNode {
@@ -12,6 +18,12 @@
     public HumanTaskNode() {
         Work work = new WorkImpl();
         work.setName("Human Task");
+        Set<ParameterDefinition> parameterDefinitions = new HashSet<ParameterDefinition>();
+        parameterDefinitions.add(new ParameterDefinitionImpl("TaskName", new StringDataType()));
+        parameterDefinitions.add(new ParameterDefinitionImpl("ActorId", new StringDataType()));
+        parameterDefinitions.add(new ParameterDefinitionImpl("Priority", new StringDataType()));
+        parameterDefinitions.add(new ParameterDefinitionImpl("Comment", new StringDataType()));
+        work.setParameterDefinitions(parameterDefinitions);
         setWork(work);
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/NodeInstanceImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/NodeInstanceImpl.java	2008-06-26 09:26:14 UTC (rev 20794)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/NodeInstanceImpl.java	2008-06-26 09:26:25 UTC (rev 20795)
@@ -81,6 +81,10 @@
         return this.nodeInstanceContainer.getNodeContainer().getNode( this.nodeId );
     }
     
+    public boolean isInversionOfControl() {
+        return false;
+    }
+    
     public void cancel() {
         nodeInstanceContainer.removeNodeInstance(this);
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/WorkflowProcessInstanceImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/WorkflowProcessInstanceImpl.java	2008-06-26 09:26:14 UTC (rev 20794)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/WorkflowProcessInstanceImpl.java	2008-06-26 09:26:25 UTC (rev 20795)
@@ -66,6 +66,9 @@
     }
 
     public void removeNodeInstance(final NodeInstance nodeInstance) {
+        if (((NodeInstanceImpl) nodeInstance).isInversionOfControl()) {
+            getWorkingMemory().retract(getWorkingMemory().getFactHandle(nodeInstance));
+        }
         this.nodeInstances.remove(nodeInstance);
     }
 
@@ -109,6 +112,9 @@
         if (nodeInstance == null) {
             throw new IllegalArgumentException("Illegal node type: " + node.getClass());
         }
+        if (((NodeInstanceImpl) nodeInstance).isInversionOfControl()) {
+            getWorkingMemory().insert(nodeInstance);
+        }
         return nodeInstance;
     }
     

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/WorkItemNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/WorkItemNodeInstance.java	2008-06-26 09:26:14 UTC (rev 20794)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/WorkItemNodeInstance.java	2008-06-26 09:26:25 UTC (rev 20795)
@@ -20,6 +20,8 @@
 import java.util.Iterator;
 import java.util.Map;
 
+import org.drools.WorkingMemory;
+import org.drools.common.InternalRuleBase;
 import org.drools.process.core.Work;
 import org.drools.process.core.context.variable.VariableScope;
 import org.drools.process.instance.WorkItem;
@@ -53,9 +55,17 @@
         return workItem;
     }
     
+    public long getWorkItemId() {
+        return workItemId;
+    }
+    
     public void internalSetWorkItemId(long workItemId) {
     	this.workItemId = workItemId;
     }
+    
+    public boolean isInversionOfControl() {
+        return ((InternalRuleBase) getProcessInstance().getWorkingMemory().getRuleBase()).getConfiguration().isAdvancedProcessRuleIntegration();
+    }
 
     public void internalTrigger(final NodeInstance from, String type) {
         // TODO this should be included for ruleflow only, not for BPEL
@@ -68,7 +78,11 @@
 		if (workItemNode.isWaitForCompletion()) {
 		    addEventListeners();
         }
-        getProcessInstance().getWorkingMemory().getWorkItemManager().internalExecuteWorkItem(workItem);
+		if (isInversionOfControl()) {
+		    getProcessInstance().getWorkingMemory().update(getProcessInstance().getWorkingMemory().getFactHandle(this), this);
+		} else {
+		    getProcessInstance().getWorkingMemory().getWorkItemManager().internalExecuteWorkItem(workItem);
+		}
         if (!workItemNode.isWaitForCompletion()) {
             triggerCompleted();
         } else {
@@ -110,7 +124,12 @@
                 System.err.println("Continuing without setting variable.");
             }
         }
-        triggerCompleted();
+        if (isInversionOfControl()) {
+            WorkingMemory workingMemory = getProcessInstance().getWorkingMemory();
+            workingMemory.update(workingMemory.getFactHandle(this), this);
+        } else {
+            triggerCompleted();
+        }
     }
     
     public void cancel() {

Modified: labs/jbossrules/trunk/drools-core/src/main/resources/META-INF/WorkDefinitions.conf
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/resources/META-INF/WorkDefinitions.conf	2008-06-26 09:26:14 UTC (rev 20794)
+++ labs/jbossrules/trunk/drools-core/src/main/resources/META-INF/WorkDefinitions.conf	2008-06-26 09:26:25 UTC (rev 20795)
@@ -29,20 +29,5 @@
     "icon" : "icons/open.gif"
     "customEditor" : "org.drools.eclipse.flow.common.editor.editpart.work.SampleCustomEditor"
   ]
-  
-  [
-    "name" : "Human Task",
-    "parameters" : [
-      "ActorId" : new StringDataType(),
-      "TaskName" : new StringDataType(),
-      "Priority" : new StringDataType(),
-      "Comment" : new StringDataType()
-    ],
-    "results" : [
-      "ActorId" : new StringDataType()
-    ],
-    "displayName" : "Human Task",
-    "icon" : "icons/human_task.gif"
-  ]
-  
+    
 ]
\ No newline at end of file




More information about the jboss-svn-commits mailing list