[jboss-svn-commits] JBL Code SVN: r20152 - in labs/jbossrules/trunk/drools-core/src/main/java/org/drools: audit and 9 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sat May 24 09:50:56 EDT 2008
Author: KrisVerlaenen
Date: 2008-05-24 09:50:56 -0400 (Sat, 24 May 2008)
New Revision: 20152
Added:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/ProcessEvent.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/variable/Mappable.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/ProcessInstanceFactoryRegistry.java
Removed:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowEvent.java
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/common/AbstractWorkingMemory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowCompletedEvent.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowNodeTriggeredEvent.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowStartedEvent.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/exception/ExceptionScope.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/NodeContainerImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/SubProcessNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/WorkItemNode.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/JoinInstance.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SubProcessNodeInstance.java
Log:
JBRULES-1622: SubProcess node should support variable mapping and independence
- adding in both core and 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-05-24 05:07:32 UTC (rev 20151)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java 2008-05-24 13:50:56 UTC (rev 20152)
@@ -20,7 +20,6 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -34,10 +33,13 @@
import org.drools.common.PriorityQueueAgendaGroupFactory;
import org.drools.process.core.Context;
import org.drools.process.core.ParameterDefinition;
+import org.drools.process.core.Process;
import org.drools.process.core.WorkDefinition;
import org.drools.process.core.datatype.DataType;
import org.drools.process.core.impl.ParameterDefinitionImpl;
import org.drools.process.core.impl.WorkDefinitionExtensionImpl;
+import org.drools.process.instance.ProcessInstanceFactory;
+import org.drools.process.instance.ProcessInstanceFactoryRegistry;
import org.drools.process.instance.impl.ContextInstanceFactory;
import org.drools.process.instance.impl.ContextInstanceFactoryRegistry;
import org.drools.spi.ConflictResolver;
@@ -128,6 +130,7 @@
private ContextInstanceFactoryRegistry processContextInstanceFactoryRegistry;
private Map<String, WorkDefinition> workDefinitions;
+ private ProcessInstanceFactoryRegistry processInstanceFactoryRegistry;
private NodeInstanceFactoryRegistry processNodeInstanceFactoryRegistry;
private transient ClassLoader classLoader;
@@ -584,6 +587,55 @@
}
}
+ public ProcessInstanceFactoryRegistry getProcessInstanceFactoryRegistry() {
+ if ( this.processInstanceFactoryRegistry == null ) {
+ initProcessInstanceFactoryRegistry();
+ }
+ return this.processInstanceFactoryRegistry;
+
+ }
+
+ private void initProcessInstanceFactoryRegistry() {
+ this.processInstanceFactoryRegistry = new ProcessInstanceFactoryRegistry();
+
+ // split on each space
+ String locations[] = this.chainedProperties.getProperty( "processInstanceFactoryRegistry",
+ "" ).split( "\\s" );
+
+ int i = 0;
+ // load each SemanticModule
+ for ( String factoryLocation : locations ) {
+ // trim leading/trailing spaces and quotes
+ factoryLocation = factoryLocation.trim();
+ if ( factoryLocation.startsWith( "\"" ) ) {
+ factoryLocation = factoryLocation.substring( 1 );
+ }
+ if ( factoryLocation.endsWith( "\"" ) ) {
+ factoryLocation = factoryLocation.substring( 0,
+ factoryLocation.length() - 1 );
+ }
+ if ( !factoryLocation.equals( "" ) ) {
+ loadProcessInstanceFactoryRegistry( factoryLocation );
+ }
+ }
+ }
+
+ private void loadProcessInstanceFactoryRegistry(String factoryLocation) {
+ String content = ConfFileUtils.URLContentsToString( ConfFileUtils.getURL( factoryLocation,
+ null,
+ RuleBaseConfiguration.class ) );
+
+ Map<Class< ? extends Process>, ProcessInstanceFactory> map = (Map<Class< ? extends Process>, ProcessInstanceFactory>) MVEL.eval( content,
+ new HashMap() );
+
+ if ( map != null ) {
+ for ( Entry<Class<? extends Process>, ProcessInstanceFactory> entry : map.entrySet() ) {
+ this.processInstanceFactoryRegistry.register( entry.getKey(),
+ entry.getValue() );
+ }
+ }
+ }
+
public Map<String, WorkDefinition> getProcessWorkDefinitions() {
if ( this.workDefinitions == null ) {
initWorkDefinitions();
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-05-24 05:07:32 UTC (rev 20151)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryLogger.java 2008-05-24 13:50:56 UTC (rev 20152)
@@ -336,29 +336,29 @@
public void beforeRuleFlowStarted(RuleFlowStartedEvent event,
WorkingMemory workingMemory) {
filterLogEvent( new RuleFlowLogEvent( LogEvent.BEFORE_RULEFLOW_CREATED,
- event.getRuleFlowProcessInstance().getProcess().getId(),
- event.getRuleFlowProcessInstance().getProcess().getName() ) );
+ event.getProcessInstance().getProcess().getId(),
+ event.getProcessInstance().getProcess().getName() ) );
}
public void afterRuleFlowStarted(RuleFlowStartedEvent event,
WorkingMemory workingMemory) {
filterLogEvent(new RuleFlowLogEvent(LogEvent.AFTER_RULEFLOW_CREATED,
- event.getRuleFlowProcessInstance().getProcess().getId(),
- event.getRuleFlowProcessInstance().getProcess().getName()));
+ event.getProcessInstance().getProcess().getId(),
+ event.getProcessInstance().getProcess().getName()));
}
public void beforeRuleFlowCompleted(RuleFlowCompletedEvent event,
WorkingMemory workingMemory) {
filterLogEvent( new RuleFlowLogEvent( LogEvent.BEFORE_RULEFLOW_COMPLETED,
- event.getRuleFlowProcessInstance().getProcess().getId(),
- event.getRuleFlowProcessInstance().getProcess().getName() ) );
+ event.getProcessInstance().getProcess().getId(),
+ event.getProcessInstance().getProcess().getName() ) );
}
public void afterRuleFlowCompleted(RuleFlowCompletedEvent event,
WorkingMemory workingMemory) {
filterLogEvent(new RuleFlowLogEvent(LogEvent.AFTER_RULEFLOW_COMPLETED,
- event.getRuleFlowProcessInstance().getProcess().getId(),
- event.getRuleFlowProcessInstance().getProcess().getName()));
+ event.getProcessInstance().getProcess().getId(),
+ event.getProcessInstance().getProcess().getName()));
}
public void beforeRuleFlowGroupActivated(
@@ -402,8 +402,8 @@
filterLogEvent(new RuleFlowNodeLogEvent(LogEvent.BEFORE_RULEFLOW_NODE_TRIGGERED,
event.getRuleFlowNodeInstance().getId() + "",
event.getRuleFlowNodeInstance().getNode().getName(),
- event.getRuleFlowProcessInstance().getProcess().getId(), event
- .getRuleFlowProcessInstance().getProcess().getName()));
+ event.getProcessInstance().getProcess().getId(), event
+ .getProcessInstance().getProcess().getName()));
}
public void afterRuleFlowNodeTriggered(RuleFlowNodeTriggeredEvent event,
@@ -411,8 +411,8 @@
filterLogEvent(new RuleFlowNodeLogEvent(LogEvent.AFTER_RULEFLOW_NODE_TRIGGERED,
event.getRuleFlowNodeInstance().getId() + "",
event.getRuleFlowNodeInstance().getNode().getName(),
- event.getRuleFlowProcessInstance().getProcess().getId(), event
- .getRuleFlowProcessInstance().getProcess().getName()));
+ event.getProcessInstance().getProcess().getId(), event
+ .getProcessInstance().getProcess().getName()));
}
public void afterPackageAdded(AfterPackageAddedEvent event) {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2008-05-24 05:07:32 UTC (rev 20151)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2008-05-24 13:50:56 UTC (rev 20152)
@@ -18,10 +18,6 @@
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
@@ -62,17 +58,12 @@
import org.drools.event.RuleFlowEventSupport;
import org.drools.event.WorkingMemoryEventListener;
import org.drools.event.WorkingMemoryEventSupport;
-import org.drools.marshalling.InputMarshaller;
-import org.drools.marshalling.OutputMarshaller;
-import org.drools.marshalling.PersisterEnums;
-import org.drools.marshalling.PersisterHelper;
-import org.drools.marshalling.MarshallerReaderContext;
-import org.drools.marshalling.MarshallerWriteContext;
import org.drools.process.core.Process;
import org.drools.process.core.context.variable.Variable;
import org.drools.process.core.context.variable.VariableScope;
import org.drools.process.instance.ProcessInstance;
import org.drools.process.instance.ProcessInstanceFactory;
+import org.drools.process.instance.ProcessInstanceFactoryRegistry;
import org.drools.process.instance.WorkItemManager;
import org.drools.process.instance.context.variable.VariableScopeInstance;
import org.drools.process.instance.timer.TimerManager;
@@ -82,13 +73,10 @@
import org.drools.reteoo.LIANodePropagation;
import org.drools.reteoo.LeftTuple;
import org.drools.reteoo.ObjectTypeConf;
-import org.drools.reteoo.ReteooFactHandleFactory;
import org.drools.rule.Declaration;
import org.drools.rule.EntryPoint;
import org.drools.rule.Rule;
import org.drools.rule.TimeMachine;
-import org.drools.ruleflow.core.RuleFlowProcess;
-import org.drools.ruleflow.instance.RuleFlowProcessInstanceFactory;
import org.drools.spi.Activation;
import org.drools.spi.AgendaFilter;
import org.drools.spi.AgendaGroup;
@@ -184,8 +172,6 @@
private TimerManager timerManager;
- private Map<String, ProcessInstanceFactory> processInstanceFactories;
-
private TimeMachine timeMachine;
protected transient ObjectTypeConfigurationRegistry typeConfReg;
@@ -251,7 +237,6 @@
this.lock = new ReentrantLock();
this.liaPropagations = Collections.EMPTY_LIST;
this.processInstances = new HashMap();
- this.processInstanceFactories = new HashMap();
this.timeMachine = new TimeMachine();
this.nodeMemories = new ConcurrentNodeMemories( this.ruleBase );
@@ -276,8 +261,6 @@
this.discardOnLogicalOverride = false;
}
- this.processInstanceFactories.put( RuleFlowProcess.RULEFLOW_TYPE,
- new RuleFlowProcessInstanceFactory() );
this.entryPoints = new ConcurrentHashMap();
this.entryPoints.put( "DEFAULT",
this );
@@ -1457,11 +1440,7 @@
if ( process == null ) {
throw new IllegalArgumentException( "Unknown process ID: " + processId );
}
- ProcessInstanceFactory factory = processInstanceFactories.get( process.getType() );
- if ( factory == null ) {
- throw new IllegalArgumentException( "Could not create process instance for type: " + process.getType() );
- }
- ProcessInstance processInstance = factory.createProcessInstance();
+ ProcessInstance processInstance = getProcessInstance(process);
processInstance.setWorkingMemory( this );
processInstance.setProcess( process );
processInstance.setId( ++processCounter );
@@ -1497,6 +1476,21 @@
return processInstance;
}
+
+ public ProcessInstance getProcessInstance(final Process process) {
+ ProcessInstanceFactoryRegistry processRegistry =
+ ((InternalRuleBase) getRuleBase()).getConfiguration()
+ .getProcessInstanceFactoryRegistry();
+ ProcessInstanceFactory conf = processRegistry.getProcessInstanceFactory(process);
+ if (conf == null) {
+ throw new IllegalArgumentException("Illegal process type: " + process.getClass());
+ }
+ ProcessInstance processInstance = conf.createProcessInstance();
+ if (processInstance == null) {
+ throw new IllegalArgumentException("Illegal process type: " + process.getClass());
+ }
+ return processInstance;
+ }
public Collection getProcessInstances() {
return Collections.unmodifiableCollection( processInstances.values() );
@@ -1515,12 +1509,6 @@
processInstances.remove( processInstance.getId() );
}
- public void registerProcessInstanceFactory(String type,
- ProcessInstanceFactory processInstanceFactory) {
- processInstanceFactories.put( type,
- processInstanceFactory );
- }
-
public WorkItemManager getWorkItemManager() {
if ( workItemManager == null ) {
workItemManager = new WorkItemManager( this );
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java 2008-05-24 05:07:32 UTC (rev 20151)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java 2008-05-24 13:50:56 UTC (rev 20152)
@@ -35,8 +35,6 @@
public void setRuleFlowEventSupport(RuleFlowEventSupport ruleFlowEventSupport);
- public void registerProcessInstanceFactory(String type, ProcessInstanceFactory nodeInstanceFactory);
-
public Object getNodeMemory(NodeMemory node);
public void clearNodeMemory(NodeMemory node);
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/ProcessEvent.java (from rev 20114, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowEvent.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/ProcessEvent.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/ProcessEvent.java 2008-05-24 13:50:56 UTC (rev 20152)
@@ -0,0 +1,38 @@
+package org.drools.event;
+
+/*
+ * 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.util.EventObject;
+
+import org.drools.process.instance.ProcessInstance;
+
+/**
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class ProcessEvent extends EventObject {
+
+ private static final long serialVersionUID = 400L;
+
+ public ProcessEvent(final ProcessInstance instance) {
+ super( instance );
+ }
+
+ public ProcessInstance getProcessInstance() {
+ return (ProcessInstance) getSource();
+ }
+
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowCompletedEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowCompletedEvent.java 2008-05-24 05:07:32 UTC (rev 20151)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowCompletedEvent.java 2008-05-24 13:50:56 UTC (rev 20152)
@@ -21,7 +21,7 @@
/**
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class RuleFlowCompletedEvent extends RuleFlowEvent {
+public class RuleFlowCompletedEvent extends ProcessEvent {
private static final long serialVersionUID = 400L;
@@ -30,6 +30,6 @@
}
public String toString() {
- return "==>[ProcessCompleted(name=" + getRuleFlowProcessInstance().getProcess().getName() + "; id=" + getRuleFlowProcessInstance().getProcess().getId() + ")]";
+ return "==>[ProcessCompleted(name=" + getProcessInstance().getProcess().getName() + "; id=" + getProcessInstance().getProcess().getId() + ")]";
}
}
\ No newline at end of file
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowEvent.java 2008-05-24 05:07:32 UTC (rev 20151)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowEvent.java 2008-05-24 13:50:56 UTC (rev 20152)
@@ -1,38 +0,0 @@
-package org.drools.event;
-
-/*
- * 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.util.EventObject;
-
-import org.drools.process.instance.ProcessInstance;
-
-/**
- * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
- */
-public class RuleFlowEvent extends EventObject {
-
- private static final long serialVersionUID = 400L;
-
- public RuleFlowEvent(final ProcessInstance instance) {
- super( instance );
- }
-
- public ProcessInstance getRuleFlowProcessInstance() {
- return (ProcessInstance) getSource();
- }
-
-}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowNodeTriggeredEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowNodeTriggeredEvent.java 2008-05-24 05:07:32 UTC (rev 20151)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowNodeTriggeredEvent.java 2008-05-24 13:50:56 UTC (rev 20152)
@@ -21,7 +21,7 @@
/**
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class RuleFlowNodeTriggeredEvent extends RuleFlowEvent {
+public class RuleFlowNodeTriggeredEvent extends ProcessEvent {
private static final long serialVersionUID = 400L;
@@ -38,6 +38,6 @@
public String toString() {
return "==>[WorkflowNodeTriggered(nodeId=" + nodeInstance.getNodeId() + "; id=" + nodeInstance.getId()
- + "; processName=" + getRuleFlowProcessInstance().getProcess().getName() + "; processId=" + getRuleFlowProcessInstance().getProcess().getId() + ")]";
+ + "; processName=" + getProcessInstance().getProcess().getName() + "; processId=" + getProcessInstance().getProcess().getId() + ")]";
}
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowStartedEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowStartedEvent.java 2008-05-24 05:07:32 UTC (rev 20151)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowStartedEvent.java 2008-05-24 13:50:56 UTC (rev 20152)
@@ -21,7 +21,7 @@
/**
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class RuleFlowStartedEvent extends RuleFlowEvent {
+public class RuleFlowStartedEvent extends ProcessEvent {
private static final long serialVersionUID = 400L;
@@ -30,6 +30,6 @@
}
public String toString() {
- return "==>[ProcessStarted(name=" + getRuleFlowProcessInstance().getProcess().getName() + "; id=" + getRuleFlowProcessInstance().getProcess().getId() + ")]";
+ return "==>[ProcessStarted(name=" + getProcessInstance().getProcess().getName() + "; id=" + getProcessInstance().getProcess().getId() + ")]";
}
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/exception/ExceptionScope.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/exception/ExceptionScope.java 2008-05-24 05:07:32 UTC (rev 20151)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/exception/ExceptionScope.java 2008-05-24 13:50:56 UTC (rev 20152)
@@ -29,6 +29,10 @@
public void removeExceptionHandler(String exception) {
this.exceptionHandlers.remove(exception);
}
+
+ public Map<String, ExceptionHandler> getExceptionHandlers() {
+ return exceptionHandlers;
+ }
public Context resolveContext(Object param) {
if (param instanceof String) {
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/variable/Mappable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/variable/Mappable.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/variable/Mappable.java 2008-05-24 13:50:56 UTC (rev 20152)
@@ -0,0 +1,17 @@
+package org.drools.process.core.context.variable;
+
+import java.util.Map;
+
+public interface Mappable {
+
+ void addInMapping(String parameterName, String variableName);
+ void setInMappings(Map<String, String> inMapping);
+ String getInMapping(String parameterName);
+ Map<String, String> getInMappings();
+
+ void addOutMapping(String parameterName, String variableName);
+ void setOutMappings(Map<String, String> outMapping);
+ String getOutMapping(String parameterName);
+ Map<String, String> getOutMappings();
+
+}
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/ProcessInstanceFactoryRegistry.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/ProcessInstanceFactoryRegistry.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/ProcessInstanceFactoryRegistry.java 2008-05-24 13:50:56 UTC (rev 20152)
@@ -0,0 +1,34 @@
+package org.drools.process.instance;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.process.core.Process;
+import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.ruleflow.instance.RuleFlowProcessInstanceFactory;
+
+public class ProcessInstanceFactoryRegistry {
+
+ public static final ProcessInstanceFactoryRegistry instance =
+ new ProcessInstanceFactoryRegistry();
+
+ private Map<Class< ? extends Process>, ProcessInstanceFactory> registry;
+
+ public ProcessInstanceFactoryRegistry() {
+ this.registry = new HashMap<Class< ? extends Process>, ProcessInstanceFactory>();
+
+ // hard wired nodes:
+ register( RuleFlowProcess.class,
+ new RuleFlowProcessInstanceFactory() );
+ }
+
+ public void register(Class< ? extends Process> cls,
+ ProcessInstanceFactory factory) {
+ this.registry.put( cls,
+ factory );
+ }
+
+ public ProcessInstanceFactory getProcessInstanceFactory(Process process) {
+ return this.registry.get( process.getClass() );
+ }
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/NodeContainerImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/NodeContainerImpl.java 2008-05-24 05:07:32 UTC (rev 20151)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/NodeContainerImpl.java 2008-05-24 13:50:56 UTC (rev 20152)
@@ -41,11 +41,11 @@
}
public Node getNode(final long id) {
- final Long idLong = new Long(id);
- if (!this.nodes.containsKey(idLong)) {
+ Node node = this.nodes.get(id);
+ if (node == null) {
throw new IllegalArgumentException("Unknown node id: " + id);
}
- return (Node) this.nodes.get(idLong);
+ return node;
}
public void removeNode(final Node node) {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/SubProcessNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/SubProcessNode.java 2008-05-24 05:07:32 UTC (rev 20151)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/SubProcessNode.java 2008-05-24 13:50:56 UTC (rev 20152)
@@ -1,5 +1,11 @@
package org.drools.workflow.core.node;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.process.core.context.variable.Mappable;
+
/*
* Copyright 2005 JBoss Inc
*
@@ -22,14 +28,15 @@
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class SubProcessNode extends EventNode {
+public class SubProcessNode extends EventNode implements Mappable {
private static final long serialVersionUID = 400L;
- private String processId;
- private boolean waitForCompletion = true;
- // TODO boolean independent (cancel process if node gets cancelled?)
- // TODO parameter passing
+ private String processId;
+ private boolean waitForCompletion = true;
+ private Map<String, String> inMapping = new HashMap<String, String>();
+ private Map<String, String> outMapping = new HashMap<String, String>();
+ private boolean independent = true;
public void setProcessId(final String processId) {
this.processId = processId;
@@ -47,4 +54,44 @@
this.waitForCompletion = waitForCompletion;
}
+ public void addInMapping(String subVariableName, String variableName) {
+ inMapping.put(subVariableName, variableName);
+ }
+
+ public void setInMappings(Map<String, String> inMapping) {
+ this.inMapping = inMapping;
+ }
+
+ public String getInMapping(String parameterName) {
+ return inMapping.get(parameterName);
+ }
+
+ public Map<String, String> getInMappings() {
+ return Collections.unmodifiableMap(inMapping);
+ }
+
+ public void addOutMapping(String subVariableName, String variableName) {
+ outMapping.put(subVariableName, variableName);
+ }
+
+ public void setOutMappings(Map<String, String> outMapping) {
+ this.outMapping = outMapping;
+ }
+
+ public String getOutMapping(String parameterName) {
+ return outMapping.get(parameterName);
+ }
+
+ public Map<String, String> getOutMappings() {
+ return Collections.unmodifiableMap(outMapping);
+ }
+
+ public boolean isIndependent() {
+ return independent;
+ }
+
+ public void setIndependent(boolean independent) {
+ this.independent = independent;
+ }
+
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/WorkItemNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/WorkItemNode.java 2008-05-24 05:07:32 UTC (rev 20151)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/WorkItemNode.java 2008-05-24 13:50:56 UTC (rev 20152)
@@ -21,13 +21,14 @@
import java.util.Map;
import org.drools.process.core.Work;
+import org.drools.process.core.context.variable.Mappable;
/**
* Default implementation of a task node.
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class WorkItemNode extends EventNode {
+public class WorkItemNode extends EventNode implements Mappable {
private static final long serialVersionUID = 400L;
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-05-24 05:07:32 UTC (rev 20151)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/WorkflowProcessInstanceImpl.java 2008-05-24 13:50:56 UTC (rev 20152)
@@ -28,6 +28,7 @@
import org.drools.common.InternalRuleBase;
import org.drools.common.InternalWorkingMemory;
import org.drools.process.core.timer.Timer;
+import org.drools.process.instance.ProcessInstance;
import org.drools.process.instance.WorkItem;
import org.drools.process.instance.WorkItemListener;
import org.drools.process.instance.impl.ProcessInstanceImpl;
@@ -133,7 +134,8 @@
public void setState(final int state) {
super.setState( state );
// TODO move most of this to ProcessInstanceImpl
- if ( state == ProcessInstanceImpl.STATE_COMPLETED ) {
+ if ( state == ProcessInstance.STATE_COMPLETED
+ || state == ProcessInstance.STATE_ABORTED ) {
InternalWorkingMemory workingMemory = (InternalWorkingMemory) getWorkingMemory();
((EventSupport) getWorkingMemory()).getRuleFlowEventSupport()
.fireBeforeRuleFlowProcessCompleted( this, workingMemory );
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/JoinInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/JoinInstance.java 2008-05-24 05:07:32 UTC (rev 20151)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/JoinInstance.java 2008-05-24 13:50:56 UTC (rev 20152)
@@ -17,7 +17,6 @@
*/
import java.util.HashMap;
-import java.util.Iterator;
import java.util.Map;
import org.drools.workflow.core.Connection;
@@ -52,13 +51,12 @@
triggerCompleted();
break;
case Join.TYPE_AND :
- Node node = getNodeInstanceContainer().getNodeContainer().getNode( from.getNodeId() );
- Integer count = (Integer) this.triggers.get( node.getId() );
+ Integer count = (Integer) this.triggers.get( from.getNodeId() );
if ( count == null ) {
- this.triggers.put( node.getId(),
+ this.triggers.put( from.getNodeId(),
1 );
} else {
- this.triggers.put( node.getId(),
+ this.triggers.put( from.getNodeId(),
count.intValue() + 1 );
}
if (checkAllActivated()) {
@@ -68,8 +66,7 @@
break;
case Join.TYPE_DISCRIMINATOR :
boolean triggerCompleted = triggers.isEmpty();
- node = getNodeInstanceContainer().getNodeContainer().getNode( from.getNodeId() );
- triggers.put( node.getId(), new Integer( 1 ) );
+ triggers.put( from.getNodeId(), new Integer( 1 ) );
if (checkAllActivated()) {
resetAllTriggers();
}
@@ -84,8 +81,7 @@
private boolean checkAllActivated() {
// check whether all parent nodes have been triggered
- for ( final Iterator<Connection> it = getJoin().getDefaultIncomingConnections().iterator(); it.hasNext(); ) {
- final Connection connection = it.next();
+ for (final Connection connection: getJoin().getDefaultIncomingConnections()) {
if ( this.triggers.get( connection.getFrom().getId() ) == null ) {
return false;
}
@@ -95,8 +91,7 @@
private void decreaseAllTriggers() {
// decrease trigger count for all incoming connections
- for ( final Iterator<Connection> it = getJoin().getDefaultIncomingConnections().iterator(); it.hasNext(); ) {
- final Connection connection = it.next();
+ for (final Connection connection: getJoin().getDefaultIncomingConnections()) {
final Integer count = (Integer) this.triggers.get( connection.getFrom().getId() );
if ( count.intValue() == 1 ) {
this.triggers.remove( connection.getFrom().getId() );
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SubProcessNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SubProcessNodeInstance.java 2008-05-24 05:07:32 UTC (rev 20151)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SubProcessNodeInstance.java 2008-05-24 13:50:56 UTC (rev 20152)
@@ -16,6 +16,9 @@
* limitations under the License.
*/
+import java.util.HashMap;
+import java.util.Map;
+
import org.drools.WorkingMemory;
import org.drools.event.RuleFlowCompletedEvent;
import org.drools.event.RuleFlowEventListener;
@@ -23,7 +26,9 @@
import org.drools.event.RuleFlowGroupDeactivatedEvent;
import org.drools.event.RuleFlowNodeTriggeredEvent;
import org.drools.event.RuleFlowStartedEvent;
+import org.drools.process.core.context.variable.VariableScope;
import org.drools.process.instance.ProcessInstance;
+import org.drools.process.instance.context.variable.VariableScopeInstance;
import org.drools.workflow.core.Node;
import org.drools.workflow.core.node.SubProcessNode;
import org.drools.workflow.instance.NodeInstance;
@@ -39,7 +44,7 @@
private long processInstanceId;
- protected SubProcessNode getSubFlowNode() {
+ protected SubProcessNode getSubProcessNode() {
return (SubProcessNode) getNode();
}
@@ -48,9 +53,21 @@
throw new IllegalArgumentException(
"A SubProcess node only accepts default incoming connections!");
}
+ Map<String, Object> parameters = new HashMap<String, Object>();
+ for (Map.Entry<String, String> mapping: getSubProcessNode().getInMappings().entrySet()) {
+ VariableScopeInstance variableScopeInstance = (VariableScopeInstance)
+ resolveContextInstance(VariableScope.VARIABLE_SCOPE, mapping.getValue());
+ if (variableScopeInstance != null) {
+ parameters.put(mapping.getKey(), variableScopeInstance.getVariable(mapping.getValue()));
+ } else {
+ System.err.println("Could not find variable scope for variable " + mapping.getValue());
+ System.err.println("when trying to execute SubProcess node " + getSubProcessNode().getName());
+ System.err.println("Continuing without setting parameter.");
+ }
+ }
ProcessInstance processInstance =
- getProcessInstance().getWorkingMemory().startProcess(getSubFlowNode().getProcessId());
- if (!getSubFlowNode().isWaitForCompletion()
+ getProcessInstance().getWorkingMemory().startProcess(getSubProcessNode().getProcessId(), parameters);
+ if (!getSubProcessNode().isWaitForCompletion()
|| processInstance.getState() == ProcessInstance.STATE_COMPLETED) {
triggerCompleted();
} else {
@@ -59,6 +76,16 @@
}
}
+ public void cancel() {
+ super.cancel();
+ if (!getSubProcessNode().isIndependent()) {
+ ProcessInstance processInstance =
+ getProcessInstance().getWorkingMemory()
+ .getProcessInstance(processInstanceId);
+ processInstance.setState(ProcessInstance.STATE_ABORTED);
+ }
+ }
+
public long getProcessInstanceId() {
return processInstanceId;
}
@@ -79,8 +106,22 @@
public void afterRuleFlowCompleted(RuleFlowCompletedEvent event,
WorkingMemory workingMemory) {
- if ( event.getRuleFlowProcessInstance().getId() == processInstanceId ) {
+ ProcessInstance processInstance = event.getProcessInstance();
+ if ( processInstance.getId() == processInstanceId ) {
removeEventListeners();
+ VariableScopeInstance subProcessVariableScopeInstance = (VariableScopeInstance)
+ processInstance.getContextInstance(VariableScope.VARIABLE_SCOPE);
+ for (Map.Entry<String, String> mapping: getSubProcessNode().getOutMappings().entrySet()) {
+ VariableScopeInstance variableScopeInstance = (VariableScopeInstance)
+ resolveContextInstance(VariableScope.VARIABLE_SCOPE, mapping.getValue());
+ if (variableScopeInstance != null) {
+ variableScopeInstance.setVariable(mapping.getValue(), subProcessVariableScopeInstance.getVariable(mapping.getKey()));
+ } else {
+ System.err.println("Could not find variable scope for variable " + mapping.getValue());
+ System.err.println("when trying to complete SubProcess node " + getSubProcessNode().getName());
+ System.err.println("Continuing without setting variable.");
+ }
+ }
triggerCompleted();
}
}
More information about the jboss-svn-commits
mailing list