[jboss-svn-commits] JBL Code SVN: r17492 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools/ruleflow/instance/impl and 8 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Jan 2 07:49:48 EST 2008
Author: mark.proctor at jboss.com
Date: 2008-01-02 07:49:48 -0500 (Wed, 02 Jan 2008)
New Revision: 17492
Added:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/ProcessNodeInstanceFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/ProcessNodeInstanceFactoryRegistry.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/CreateNewNodeFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/ReuseNodeFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/RuleSetNodeFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ConfFileUtils.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/EndNodeInstanceImplTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/MockNode.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/MockNodeInstance.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/MockNodeInstanceFactory.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/ProcessNodeInstanceFactoryTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/StartNodeInstanceImplTest.java
labs/jbossrules/trunk/drools-core/src/test/resources/META-INF/
labs/jbossrules/trunk/drools-core/src/test/resources/META-INF/mockProcessNodeInstanceFactory.conf
Removed:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/PvmNodeConf.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/PvmNodeRegistry.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/configuration/
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/ActionNodeConf.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/EndNodeConf.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/JoinNodeConf.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/MilestoneNodeConf.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/RuleSetNodeConf.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/SplitNodeConf.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/StartNodeConf.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/SubFlowNodeConf.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/TaskNodeConf.java
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/RuleFlowProcessInstanceImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ClassUtils.java
Log:
JBRULES-1394 RuleFlow Nodes should be pluggable
-PackageBuilder node builders are now pluggable, although not yet discoverable
-RuleBase node instance factories and pluggeable and discoverable
-added unit tests for start and end nodes
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-01-02 12:49:25 UTC (rev 17491)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -22,15 +22,22 @@
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.Map.Entry;
import org.drools.common.AgendaGroupFactory;
import org.drools.common.ArrayAgendaGroupFactory;
import org.drools.common.PriorityQueueAgendaGroupFactory;
+import org.drools.ruleflow.core.Node;
+import org.drools.ruleflow.instance.impl.ProcessNodeInstanceFactory;
+import org.drools.ruleflow.instance.impl.ProcessNodeInstanceFactoryRegistry;
+import org.drools.ruleflow.instance.impl.ProcessNodeInstanceFactoryTest;
import org.drools.spi.ConflictResolver;
import org.drools.spi.ConsequenceExceptionHandler;
import org.drools.temporal.SessionClock;
import org.drools.temporal.SessionPseudoClock;
import org.drools.util.ChainedProperties;
+import org.drools.util.ConfFileUtils;
+import org.mvel.MVEL;
/**
* RuleBaseConfiguration
@@ -73,39 +80,41 @@
public class RuleBaseConfiguration
implements
Serializable {
- private static final long serialVersionUID = 400L;
+ private static final long serialVersionUID = 400L;
- private ChainedProperties chainedProperties;
+ private ChainedProperties chainedProperties;
- private boolean immutable;
+ private boolean immutable;
- private boolean sequential;
- private SequentialAgenda sequentialAgenda;
+ private boolean sequential;
+ private SequentialAgenda sequentialAgenda;
- private boolean maintainTms;
- private boolean removeIdentities;
- private boolean shareAlphaNodes;
- private boolean shareBetaNodes;
- private boolean alphaMemory;
- private int alphaNodeHashingThreshold;
- private int compositeKeyDepth;
- private boolean indexLeftBetaMemory;
- private boolean indexRightBetaMemory;
- private AssertBehaviour assertBehaviour;
- private LogicalOverride logicalOverride;
- private String executorService;
- private ConsequenceExceptionHandler consequenceExceptionHandler;
- private String ruleBaseUpdateHandler;
- private Class< ? extends SessionClock> sessionClockClass;
+ private boolean maintainTms;
+ private boolean removeIdentities;
+ private boolean shareAlphaNodes;
+ private boolean shareBetaNodes;
+ private boolean alphaMemory;
+ private int alphaNodeHashingThreshold;
+ private int compositeKeyDepth;
+ private boolean indexLeftBetaMemory;
+ private boolean indexRightBetaMemory;
+ private AssertBehaviour assertBehaviour;
+ private LogicalOverride logicalOverride;
+ private String executorService;
+ private ConsequenceExceptionHandler consequenceExceptionHandler;
+ private String ruleBaseUpdateHandler;
+ private Class< ? extends SessionClock> sessionClockClass;
- private ConflictResolver conflictResolver;
+ private ConflictResolver conflictResolver;
- private boolean shadowProxy;
- private Map shadowProxyExcludes;
- private static final String STAR = "*";
+ private boolean shadowProxy;
+ private Map shadowProxyExcludes;
+ private static final String STAR = "*";
- private transient ClassLoader classLoader;
+ private ProcessNodeInstanceFactoryRegistry processNodeInstanceFactoryRegistry;
+ private transient ClassLoader classLoader;
+
/**
* Creates a new rulebase configuration using the provided properties
* as configuration options. Also, if a Thread.currentThread().getContextClassLoader()
@@ -468,6 +477,56 @@
this.sequentialAgenda = sequentialAgenda;
}
+ public ProcessNodeInstanceFactoryRegistry getProcessNodeInstanceFactoryRegistry() {
+ if ( this.processNodeInstanceFactoryRegistry == null ) {
+ initProcessNodeInstanceFactoryRegistry();
+ }
+ return this.processNodeInstanceFactoryRegistry;
+
+ }
+
+ private void initProcessNodeInstanceFactoryRegistry() {
+ this.processNodeInstanceFactoryRegistry = new ProcessNodeInstanceFactoryRegistry();
+
+ // split on each space
+ String locations[] = this.chainedProperties.getProperty( "processNodeInstanceFactoryRegistry",
+ "" ).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( "" ) ) {
+ loadProcessNodeInstanceFactoryRegistry( factoryLocation );
+ }
+ }
+ }
+
+ private void loadProcessNodeInstanceFactoryRegistry(String factoryLocation) {
+ String content = ConfFileUtils.URLContentsToString( ConfFileUtils.getURL( factoryLocation,
+ null,
+ RuleBaseConfiguration.class ) );
+
+ Map<Class< ? extends Node>, ProcessNodeInstanceFactory> map = (Map<Class< ? extends Node>, ProcessNodeInstanceFactory>) MVEL.eval( content,
+ new HashMap() );
+
+ if ( map != null ) {
+ for ( Entry<Class< ? extends Node>, ProcessNodeInstanceFactory> entry : map.entrySet() ) {
+ this.processNodeInstanceFactoryRegistry.register( entry.getKey(),
+ entry.getValue() );
+ }
+ }
+
+ }
+
private boolean determineShadowProxy(String userValue) {
if ( this.isSequential() ) {
// sequential never needs shadowing, so always override
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/ProcessNodeInstanceFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/ProcessNodeInstanceFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/ProcessNodeInstanceFactory.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -0,0 +1,8 @@
+package org.drools.ruleflow.instance.impl;
+
+import org.drools.ruleflow.core.Node;
+import org.drools.ruleflow.instance.RuleFlowNodeInstance;
+
+public interface ProcessNodeInstanceFactory {
+ RuleFlowNodeInstance getNodeInstance(Node node, RuleFlowProcessInstanceImpl processInstance);
+}
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/ProcessNodeInstanceFactoryRegistry.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/ProcessNodeInstanceFactoryRegistry.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/ProcessNodeInstanceFactoryRegistry.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -0,0 +1,61 @@
+package org.drools.ruleflow.instance.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.drools.ruleflow.core.Node;
+import org.drools.ruleflow.core.WorkItemNode;
+import org.drools.ruleflow.core.impl.ActionNodeImpl;
+import org.drools.ruleflow.core.impl.EndNodeImpl;
+import org.drools.ruleflow.core.impl.JoinImpl;
+import org.drools.ruleflow.core.impl.MilestoneNodeImpl;
+import org.drools.ruleflow.core.impl.RuleSetNodeImpl;
+import org.drools.ruleflow.core.impl.SplitImpl;
+import org.drools.ruleflow.core.impl.StartNodeImpl;
+import org.drools.ruleflow.core.impl.SubFlowNodeImpl;
+import org.drools.ruleflow.instance.impl.factories.CreateNewNodeFactory;
+import org.drools.ruleflow.instance.impl.factories.ReuseNodeFactory;
+import org.drools.ruleflow.instance.impl.factories.RuleSetNodeFactory;
+import org.drools.util.ConfFileUtils;
+import org.mvel.MVEL;
+
+public class ProcessNodeInstanceFactoryRegistry {
+ public static final ProcessNodeInstanceFactoryRegistry instance = new ProcessNodeInstanceFactoryRegistry();
+
+ private Map<Class< ? extends Node>, ProcessNodeInstanceFactory> registry;
+
+ public ProcessNodeInstanceFactoryRegistry() {
+ this.registry = new HashMap<Class< ? extends Node>, ProcessNodeInstanceFactory>();
+
+ // hard wired nodes:
+ register( RuleSetNodeImpl.class,
+ new RuleSetNodeFactory() );
+ register( SplitImpl.class,
+ new ReuseNodeFactory( RuleFlowSplitInstanceImpl.class ) );
+ register( JoinImpl.class,
+ new ReuseNodeFactory( RuleFlowJoinInstanceImpl.class ) );
+ register( StartNodeImpl.class,
+ new ReuseNodeFactory( StartNodeInstanceImpl.class ) );
+ register( EndNodeImpl.class,
+ new CreateNewNodeFactory( EndNodeInstanceImpl.class ) );
+ register( MilestoneNodeImpl.class,
+ new CreateNewNodeFactory( MilestoneNodeInstanceImpl.class ) );
+ register( SubFlowNodeImpl.class,
+ new CreateNewNodeFactory( SubFlowNodeInstanceImpl.class ) );
+ register( ActionNodeImpl.class,
+ new CreateNewNodeFactory( ActionNodeInstanceImpl.class ) );
+ register( WorkItemNode.class,
+ new CreateNewNodeFactory( TaskNodeInstanceImpl.class ) );
+ }
+
+ public void register(Class< ? extends Node> cls,
+ ProcessNodeInstanceFactory factory) {
+ this.registry.put( cls,
+ factory );
+ }
+
+ public ProcessNodeInstanceFactory getRuleFlowNodeFactory(Node node) {
+ return this.registry.get( node.getClass() );
+ }
+}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/PvmNodeConf.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/PvmNodeConf.java 2008-01-02 12:49:25 UTC (rev 17491)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/PvmNodeConf.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -1,8 +0,0 @@
-package org.drools.ruleflow.instance.impl;
-
-import org.drools.ruleflow.core.Node;
-import org.drools.ruleflow.instance.RuleFlowNodeInstance;
-
-public interface PvmNodeConf {
- RuleFlowNodeInstance getNodeInstance(Node node, RuleFlowProcessInstanceImpl processInstance);
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/PvmNodeRegistry.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/PvmNodeRegistry.java 2008-01-02 12:49:25 UTC (rev 17491)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/PvmNodeRegistry.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -1,22 +0,0 @@
-package org.drools.ruleflow.instance.impl;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.drools.ruleflow.core.Node;
-
-public class PvmNodeRegistry {
- private Map<Class<? extends Node>, PvmNodeConf> registry;
-
- public PvmNodeRegistry() {
- this.registry = new HashMap<Class<? extends Node>, PvmNodeConf>();
- }
-
- public void register(Class<? extends Node> cls, PvmNodeConf conf) {
- this.registry.put(cls, conf);
- }
-
- public PvmNodeConf getRuleFlowNodeConf(Node node) {
- return this.registry.get( node.getClass() );
- }
-}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/RuleFlowProcessInstanceImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/RuleFlowProcessInstanceImpl.java 2008-01-02 12:49:25 UTC (rev 17491)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/RuleFlowProcessInstanceImpl.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -19,8 +19,11 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
import org.drools.Agenda;
import org.drools.WorkingMemory;
@@ -54,9 +57,11 @@
import org.drools.ruleflow.core.impl.SubFlowNodeImpl;
import org.drools.ruleflow.instance.RuleFlowNodeInstance;
import org.drools.ruleflow.instance.RuleFlowProcessInstance;
-import org.drools.ruleflow.instance.impl.configuration.CreateNewNodeConf;
-import org.drools.ruleflow.instance.impl.configuration.ReuseNodeConf;
-import org.drools.ruleflow.instance.impl.configuration.RuleSetNodeConf;
+import org.drools.ruleflow.instance.impl.factories.CreateNewNodeFactory;
+import org.drools.ruleflow.instance.impl.factories.ReuseNodeFactory;
+import org.drools.ruleflow.instance.impl.factories.RuleSetNodeFactory;
+import org.drools.util.ConfFileUtils;
+import org.mvel.MVEL;
/**
* Default implementation of a RuleFlow process instance.
@@ -69,10 +74,11 @@
AgendaEventListener,
RuleFlowEventListener {
- private static final long serialVersionUID = 400L;
+ private static final long serialVersionUID = 400L;
- private InternalWorkingMemory workingMemory;
- private final List nodeInstances = new ArrayList();
+ private InternalWorkingMemory workingMemory;
+ private final List nodeInstances = new ArrayList();
+ private ProcessNodeInstanceFactoryRegistry nodeRegistry;
public RuleFlowProcess getRuleFlowProcess() {
return (RuleFlowProcess) getProcess();
@@ -120,42 +126,21 @@
public WorkingMemory getWorkingMemory() {
return this.workingMemory;
}
-
- private static PvmNodeRegistry nodeRegistry = new PvmNodeRegistry();
- static {
- // nodeRegistry.register(RuleSetNodeImpl.class, new RuleSetNodeConf() );
- // nodeRegistry.register(SplitImpl.class, new SplitNodeConf() );
- // nodeRegistry.register(JoinImpl.class, new JoinNodeConf() );
- // nodeRegistry.register(StartNodeImpl.class, new StartNodeConf() );
- // nodeRegistry.register(EndNodeImpl.class, new EndNodeConf() );
- // nodeRegistry.register(MilestoneNodeImpl.class, new MilestoneNodeConf() );
- // nodeRegistry.register(SubFlowNodeImpl.class, new SubFlowNodeConf() );
- // nodeRegistry.register(ActionNodeImpl.class, new ActionNodeConf() );
- // nodeRegistry.register(WorkItemNode.class, new TaskNodeConf() );
-
- nodeRegistry.register( RuleSetNodeImpl.class,
- new RuleSetNodeConf() );
- nodeRegistry.register( SplitImpl.class,
- new ReuseNodeConf( RuleFlowSplitInstanceImpl.class ) );
- nodeRegistry.register( JoinImpl.class,
- new ReuseNodeConf( RuleFlowJoinInstanceImpl.class ) );
- nodeRegistry.register( StartNodeImpl.class,
- new CreateNewNodeConf( StartNodeInstanceImpl.class ) );
- nodeRegistry.register( EndNodeImpl.class,
- new CreateNewNodeConf( EndNodeInstanceImpl.class ) );
- nodeRegistry.register( MilestoneNodeImpl.class,
- new CreateNewNodeConf( MilestoneNodeInstanceImpl.class ) );
- nodeRegistry.register( SubFlowNodeImpl.class,
- new CreateNewNodeConf( SubFlowNodeInstanceImpl.class ) );
- nodeRegistry.register( ActionNodeImpl.class,
- new CreateNewNodeConf( ActionNodeInstanceImpl.class ) );
- nodeRegistry.register( WorkItemNode.class,
- new CreateNewNodeConf( TaskNodeInstanceImpl.class ) );
-
+
+ public void registerNodeInstanceFactory(Class<? extends Node> cls, ProcessNodeInstanceFactory factory) {
+ if ( this.nodeRegistry == null ) {
+ this.nodeRegistry = new ProcessNodeInstanceFactoryRegistry();
+ }
+
+ this.nodeRegistry.register( cls, factory );
}
public RuleFlowNodeInstance getNodeInstance(final Node node) {
- PvmNodeConf conf = this.nodeRegistry.getRuleFlowNodeConf( node );
+ if ( this.nodeRegistry == null ) {
+ this.nodeRegistry = new ProcessNodeInstanceFactoryRegistry();
+ }
+
+ ProcessNodeInstanceFactory conf = this.nodeRegistry.getRuleFlowNodeFactory( node );
if ( conf == null ) {
throw new IllegalArgumentException( "Illegal node type: " + node.getClass() );
}
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories (from rev 17419, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/configuration)
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/ActionNodeConf.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/configuration/ActionNodeConf.java 2007-12-27 21:13:54 UTC (rev 17419)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/ActionNodeConf.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -1,24 +0,0 @@
-package org.drools.ruleflow.instance.impl.configuration;
-
-import org.drools.ruleflow.core.Node;
-import org.drools.ruleflow.core.RuleSetNode;
-import org.drools.ruleflow.instance.RuleFlowNodeInstance;
-import org.drools.ruleflow.instance.impl.ActionNodeInstanceImpl;
-import org.drools.ruleflow.instance.impl.MilestoneNodeInstanceImpl;
-import org.drools.ruleflow.instance.impl.PvmNodeConf;
-import org.drools.ruleflow.instance.impl.RuleFlowJoinInstanceImpl;
-import org.drools.ruleflow.instance.impl.RuleFlowProcessInstanceImpl;
-import org.drools.ruleflow.instance.impl.RuleFlowSplitInstanceImpl;
-import org.drools.ruleflow.instance.impl.StartNodeInstanceImpl;
-import org.drools.ruleflow.instance.impl.SubFlowNodeInstanceImpl;
-
-public class ActionNodeConf implements PvmNodeConf {
-
- public RuleFlowNodeInstance getNodeInstance(Node node, RuleFlowProcessInstanceImpl processInstance ) {
- final RuleFlowNodeInstance result = new ActionNodeInstanceImpl();
- result.setNodeId( node.getId() );
- processInstance.addNodeInstance( result );
- return result;
- }
-
-}
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/CreateNewNodeFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/CreateNewNodeFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/CreateNewNodeFactory.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -0,0 +1,34 @@
+package org.drools.ruleflow.instance.impl.factories;
+
+import org.drools.ruleflow.core.Node;
+import org.drools.ruleflow.core.RuleSetNode;
+import org.drools.ruleflow.instance.RuleFlowNodeInstance;
+import org.drools.ruleflow.instance.impl.ActionNodeInstanceImpl;
+import org.drools.ruleflow.instance.impl.MilestoneNodeInstanceImpl;
+import org.drools.ruleflow.instance.impl.ProcessNodeInstanceFactory;
+import org.drools.ruleflow.instance.impl.RuleFlowJoinInstanceImpl;
+import org.drools.ruleflow.instance.impl.RuleFlowProcessInstanceImpl;
+import org.drools.ruleflow.instance.impl.RuleFlowSplitInstanceImpl;
+import org.drools.ruleflow.instance.impl.StartNodeInstanceImpl;
+import org.drools.ruleflow.instance.impl.SubFlowNodeInstanceImpl;
+
+public class CreateNewNodeFactory implements ProcessNodeInstanceFactory {
+ public final Class<? extends RuleFlowNodeInstance> cls;
+
+ public CreateNewNodeFactory(Class<? extends RuleFlowNodeInstance> cls){
+ this.cls = cls;
+ }
+
+ public RuleFlowNodeInstance getNodeInstance(Node node, RuleFlowProcessInstanceImpl processInstance ) {
+ RuleFlowNodeInstance result;
+ try {
+ result = this.cls.newInstance();
+ } catch ( Exception e ) {
+ throw new RuntimeException("Unable to instance RuleFlow Node: '" + this.cls.getName() );
+ }
+ result.setNodeId( node.getId() );
+ processInstance.addNodeInstance( result );
+ return result;
+ }
+
+}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/EndNodeConf.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/configuration/EndNodeConf.java 2007-12-27 21:13:54 UTC (rev 17419)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/EndNodeConf.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -1,22 +0,0 @@
-package org.drools.ruleflow.instance.impl.configuration;
-
-import org.drools.ruleflow.core.Node;
-import org.drools.ruleflow.core.RuleSetNode;
-import org.drools.ruleflow.instance.RuleFlowNodeInstance;
-import org.drools.ruleflow.instance.impl.EndNodeInstanceImpl;
-import org.drools.ruleflow.instance.impl.PvmNodeConf;
-import org.drools.ruleflow.instance.impl.RuleFlowJoinInstanceImpl;
-import org.drools.ruleflow.instance.impl.RuleFlowProcessInstanceImpl;
-import org.drools.ruleflow.instance.impl.RuleFlowSplitInstanceImpl;
-import org.drools.ruleflow.instance.impl.StartNodeInstanceImpl;
-
-public class EndNodeConf implements PvmNodeConf {
-
- public RuleFlowNodeInstance getNodeInstance(Node node, RuleFlowProcessInstanceImpl processInstance ) {
- final RuleFlowNodeInstance result = new EndNodeInstanceImpl();
- result.setNodeId( node.getId() );
- processInstance.addNodeInstance( result );
- return result;
- }
-
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/JoinNodeConf.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/configuration/JoinNodeConf.java 2007-12-27 21:13:54 UTC (rev 17419)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/JoinNodeConf.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -1,23 +0,0 @@
-package org.drools.ruleflow.instance.impl.configuration;
-
-import org.drools.ruleflow.core.Node;
-import org.drools.ruleflow.core.RuleSetNode;
-import org.drools.ruleflow.instance.RuleFlowNodeInstance;
-import org.drools.ruleflow.instance.impl.PvmNodeConf;
-import org.drools.ruleflow.instance.impl.RuleFlowJoinInstanceImpl;
-import org.drools.ruleflow.instance.impl.RuleFlowProcessInstanceImpl;
-import org.drools.ruleflow.instance.impl.RuleFlowSplitInstanceImpl;
-
-public class JoinNodeConf implements PvmNodeConf {
-
- public RuleFlowNodeInstance getNodeInstance(Node node, RuleFlowProcessInstanceImpl processInstance ) {
- RuleFlowNodeInstance result = processInstance.getFirstNodeInstance( node.getId() );
- if ( result == null ) {
- result = new RuleFlowJoinInstanceImpl();
- result.setNodeId( node.getId() );
- processInstance.addNodeInstance( result );
- }
- return result;
- }
-
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/MilestoneNodeConf.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/configuration/MilestoneNodeConf.java 2007-12-27 21:13:54 UTC (rev 17419)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/MilestoneNodeConf.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -1,22 +0,0 @@
-package org.drools.ruleflow.instance.impl.configuration;
-
-import org.drools.ruleflow.core.Node;
-import org.drools.ruleflow.core.RuleSetNode;
-import org.drools.ruleflow.instance.RuleFlowNodeInstance;
-import org.drools.ruleflow.instance.impl.MilestoneNodeInstanceImpl;
-import org.drools.ruleflow.instance.impl.PvmNodeConf;
-import org.drools.ruleflow.instance.impl.RuleFlowJoinInstanceImpl;
-import org.drools.ruleflow.instance.impl.RuleFlowProcessInstanceImpl;
-import org.drools.ruleflow.instance.impl.RuleFlowSplitInstanceImpl;
-import org.drools.ruleflow.instance.impl.StartNodeInstanceImpl;
-
-public class MilestoneNodeConf implements PvmNodeConf {
-
- public RuleFlowNodeInstance getNodeInstance(Node node, RuleFlowProcessInstanceImpl processInstance ) {
- final RuleFlowNodeInstance result = new MilestoneNodeInstanceImpl();
- result.setNodeId( node.getId() );
- processInstance.addNodeInstance( result );
- return result;
- }
-
-}
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/ReuseNodeFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/ReuseNodeFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/ReuseNodeFactory.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -0,0 +1,32 @@
+package org.drools.ruleflow.instance.impl.factories;
+
+import org.drools.ruleflow.core.Node;
+import org.drools.ruleflow.instance.RuleFlowNodeInstance;
+import org.drools.ruleflow.instance.impl.ProcessNodeInstanceFactory;
+import org.drools.ruleflow.instance.impl.RuleFlowProcessInstanceImpl;
+
+public class ReuseNodeFactory implements ProcessNodeInstanceFactory {
+ public final Class<? extends RuleFlowNodeInstance> cls;
+
+ public ReuseNodeFactory(Class<? extends RuleFlowNodeInstance> cls){
+ this.cls = cls;
+// if ( RuleFlowNodeInstance.class.isAssignableFrom( this.cls ) ) {
+// throw new IllegalArgumentException("Node must be of the type RuleFlowNodeInstance." );
+// }
+ }
+
+ public RuleFlowNodeInstance getNodeInstance(Node node, RuleFlowProcessInstanceImpl processInstance ) {
+ RuleFlowNodeInstance result = processInstance.getFirstNodeInstance( node.getId() );
+ if ( result == null ) {
+ try {
+ result = ( RuleFlowNodeInstance ) cls.newInstance();
+ } catch ( Exception e ) {
+ throw new RuntimeException("Unable to instance RuleFlow Node: '" + this.cls.getName() );
+ }
+ result.setNodeId( node.getId() );
+ processInstance.addNodeInstance( result );
+ }
+ return result;
+ }
+
+}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/RuleSetNodeConf.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/configuration/RuleSetNodeConf.java 2007-12-27 21:13:54 UTC (rev 17419)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/RuleSetNodeConf.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -1,18 +0,0 @@
-package org.drools.ruleflow.instance.impl.configuration;
-
-import org.drools.ruleflow.core.Node;
-import org.drools.ruleflow.core.RuleSetNode;
-import org.drools.ruleflow.instance.RuleFlowNodeInstance;
-import org.drools.ruleflow.instance.impl.PvmNodeConf;
-import org.drools.ruleflow.instance.impl.RuleFlowProcessInstanceImpl;
-
-public class RuleSetNodeConf implements PvmNodeConf {
-
- public RuleFlowNodeInstance getNodeInstance(Node node, RuleFlowProcessInstanceImpl processInstance ) {
- final RuleFlowNodeInstance result = (RuleFlowNodeInstance) processInstance.getAgenda().getRuleFlowGroup( ((RuleSetNode) node).getRuleFlowGroup() );
- result.setNodeId( node.getId() );
- processInstance.addNodeInstance( result );
- return result;
- }
-
-}
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/RuleSetNodeFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/RuleSetNodeFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/RuleSetNodeFactory.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -0,0 +1,18 @@
+package org.drools.ruleflow.instance.impl.factories;
+
+import org.drools.ruleflow.core.Node;
+import org.drools.ruleflow.core.RuleSetNode;
+import org.drools.ruleflow.instance.RuleFlowNodeInstance;
+import org.drools.ruleflow.instance.impl.ProcessNodeInstanceFactory;
+import org.drools.ruleflow.instance.impl.RuleFlowProcessInstanceImpl;
+
+public class RuleSetNodeFactory implements ProcessNodeInstanceFactory {
+
+ public RuleFlowNodeInstance getNodeInstance(Node node, RuleFlowProcessInstanceImpl processInstance ) {
+ final RuleFlowNodeInstance result = (RuleFlowNodeInstance) processInstance.getAgenda().getRuleFlowGroup( ((RuleSetNode) node).getRuleFlowGroup() );
+ result.setNodeId( node.getId() );
+ processInstance.addNodeInstance( result );
+ return result;
+ }
+
+}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/SplitNodeConf.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/configuration/SplitNodeConf.java 2007-12-27 21:13:54 UTC (rev 17419)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/SplitNodeConf.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -1,22 +0,0 @@
-package org.drools.ruleflow.instance.impl.configuration;
-
-import org.drools.ruleflow.core.Node;
-import org.drools.ruleflow.core.RuleSetNode;
-import org.drools.ruleflow.instance.RuleFlowNodeInstance;
-import org.drools.ruleflow.instance.impl.PvmNodeConf;
-import org.drools.ruleflow.instance.impl.RuleFlowProcessInstanceImpl;
-import org.drools.ruleflow.instance.impl.RuleFlowSplitInstanceImpl;
-
-public class SplitNodeConf implements PvmNodeConf {
-
- public RuleFlowNodeInstance getNodeInstance(Node node, RuleFlowProcessInstanceImpl processInstance ) {
- RuleFlowNodeInstance result = processInstance.getFirstNodeInstance( node.getId() );
- if ( result == null ) {
- result = new RuleFlowSplitInstanceImpl();
- result.setNodeId( node.getId() );
- processInstance.addNodeInstance( result );
- }
- return result;
- }
-
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/StartNodeConf.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/configuration/StartNodeConf.java 2007-12-27 21:13:54 UTC (rev 17419)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/StartNodeConf.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -1,21 +0,0 @@
-package org.drools.ruleflow.instance.impl.configuration;
-
-import org.drools.ruleflow.core.Node;
-import org.drools.ruleflow.core.RuleSetNode;
-import org.drools.ruleflow.instance.RuleFlowNodeInstance;
-import org.drools.ruleflow.instance.impl.PvmNodeConf;
-import org.drools.ruleflow.instance.impl.RuleFlowJoinInstanceImpl;
-import org.drools.ruleflow.instance.impl.RuleFlowProcessInstanceImpl;
-import org.drools.ruleflow.instance.impl.RuleFlowSplitInstanceImpl;
-import org.drools.ruleflow.instance.impl.StartNodeInstanceImpl;
-
-public class StartNodeConf implements PvmNodeConf {
-
- public RuleFlowNodeInstance getNodeInstance(Node node, RuleFlowProcessInstanceImpl processInstance ) {
- final RuleFlowNodeInstance result = new StartNodeInstanceImpl();
- result.setNodeId( node.getId() );
- processInstance.addNodeInstance( result );
- return result;
- }
-
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/SubFlowNodeConf.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/configuration/SubFlowNodeConf.java 2007-12-27 21:13:54 UTC (rev 17419)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/SubFlowNodeConf.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -1,23 +0,0 @@
-package org.drools.ruleflow.instance.impl.configuration;
-
-import org.drools.ruleflow.core.Node;
-import org.drools.ruleflow.core.RuleSetNode;
-import org.drools.ruleflow.instance.RuleFlowNodeInstance;
-import org.drools.ruleflow.instance.impl.MilestoneNodeInstanceImpl;
-import org.drools.ruleflow.instance.impl.PvmNodeConf;
-import org.drools.ruleflow.instance.impl.RuleFlowJoinInstanceImpl;
-import org.drools.ruleflow.instance.impl.RuleFlowProcessInstanceImpl;
-import org.drools.ruleflow.instance.impl.RuleFlowSplitInstanceImpl;
-import org.drools.ruleflow.instance.impl.StartNodeInstanceImpl;
-import org.drools.ruleflow.instance.impl.SubFlowNodeInstanceImpl;
-
-public class SubFlowNodeConf implements PvmNodeConf {
-
- public RuleFlowNodeInstance getNodeInstance(Node node, RuleFlowProcessInstanceImpl processInstance ) {
- final RuleFlowNodeInstance result = new SubFlowNodeInstanceImpl();
- result.setNodeId( node.getId() );
- processInstance.addNodeInstance( result );
- return result;
- }
-
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/TaskNodeConf.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/configuration/TaskNodeConf.java 2007-12-27 21:13:54 UTC (rev 17419)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/factories/TaskNodeConf.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -1,24 +0,0 @@
-package org.drools.ruleflow.instance.impl.configuration;
-
-import org.drools.ruleflow.core.Node;
-import org.drools.ruleflow.core.RuleSetNode;
-import org.drools.ruleflow.instance.RuleFlowNodeInstance;
-import org.drools.ruleflow.instance.impl.MilestoneNodeInstanceImpl;
-import org.drools.ruleflow.instance.impl.PvmNodeConf;
-import org.drools.ruleflow.instance.impl.RuleFlowJoinInstanceImpl;
-import org.drools.ruleflow.instance.impl.RuleFlowProcessInstanceImpl;
-import org.drools.ruleflow.instance.impl.RuleFlowSplitInstanceImpl;
-import org.drools.ruleflow.instance.impl.StartNodeInstanceImpl;
-import org.drools.ruleflow.instance.impl.SubFlowNodeInstanceImpl;
-import org.drools.ruleflow.instance.impl.TaskNodeInstanceImpl;
-
-public class TaskNodeConf implements PvmNodeConf {
-
- public RuleFlowNodeInstance getNodeInstance(Node node, RuleFlowProcessInstanceImpl processInstance ) {
- final RuleFlowNodeInstance result = new TaskNodeInstanceImpl();
- result.setNodeId( node.getId() );
- processInstance.addNodeInstance( result );
- return result;
- }
-
-}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ClassUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ClassUtils.java 2008-01-02 12:49:25 UTC (rev 17491)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ClassUtils.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -7,7 +7,7 @@
public final class ClassUtils {
private static Map classes = Collections.synchronizedMap( new HashMap() );
-
+
/**
* Please do not use - internal
* org/my/Class.xxx -> org.my.Class
@@ -62,49 +62,94 @@
final String relFileName = absFileName.substring( rootLength + 1 );
return relFileName;
}
-
- public static String canonicalName( Class clazz ) {
+
+ public static String canonicalName(Class clazz) {
StringBuffer name = new StringBuffer();
-
- if( clazz.isArray() ) {
+
+ if ( clazz.isArray() ) {
name.append( canonicalName( clazz.getComponentType() ) );
name.append( "[]" );
- } else if( clazz.getDeclaringClass() == null ) {
+ } else if ( clazz.getDeclaringClass() == null ) {
name.append( clazz.getName() );
} else {
name.append( canonicalName( clazz.getDeclaringClass() ) );
name.append( "." );
name.append( clazz.getName().substring( clazz.getDeclaringClass().getName().length() + 1 ) );
}
-
+
return name.toString();
}
-
-
+
+ public static Object instantiateObject(String className) {
+ return instantiateObject( className,
+ null );
+ }
+
/**
* This method will attempt to create an instance of the specified Class. It uses
* a syncrhonized HashMap to cache the reflection Class lookup.
* @param className
* @return
*/
- public static Object instantiateObject(String className) {
+ public static Object instantiateObject(String className,
+ ClassLoader classLoader) {
Class cls = (Class) ClassUtils.classes.get( className );
if ( cls == null ) {
try {
cls = Class.forName( className );
- ClassUtils.classes.put( className, cls );
- } catch ( Throwable e ) {
- throw new RuntimeException("Unable to load class '" + className + "'", e );
- }
+ } catch ( Exception e ) {
+ //swallow
+ }
+
+ //ConfFileFinder
+ if ( cls == null && classLoader != null ) {
+ try {
+ cls = classLoader.loadClass( className );
+ } catch ( Exception e ) {
+ //swallow
+ }
+ }
+
+ if ( cls == null ) {
+ try {
+ cls = ClassUtils.class.getClassLoader().loadClass( className );
+ } catch ( Exception e ) {
+ //swallow
+ }
+ }
+
+ if ( cls == null ) {
+ try {
+ cls = Thread.currentThread().getContextClassLoader().loadClass( className );
+ } catch ( Exception e ) {
+ //swallow
+ }
+ }
+
+ if ( cls == null ) {
+ try {
+ cls = ClassLoader.getSystemClassLoader().loadClass( className );
+ } catch ( Exception e ) {
+ //swallow
+ }
+ }
+
+ if ( cls != null ) {
+ ClassUtils.classes.put( className,
+ cls );
+ } else {
+ throw new RuntimeException( "Unable to load class '" + className + "'" );
+ }
}
-
+
Object object = null;
try {
- object = cls.newInstance();
+ object = cls.newInstance();
} catch ( Throwable e ) {
- throw new RuntimeException("Unable to instantiate object for class '" + className + "'", e );
- }
+ throw new RuntimeException( "Unable to instantiate object for class '" + className + "'",
+ e );
+ }
return object;
- }
+ }
}
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ConfFileUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ConfFileUtils.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ConfFileUtils.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -0,0 +1,149 @@
+/**
+ *
+ */
+package org.drools.util;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Properties;
+
+import org.drools.ruleflow.instance.impl.ProcessNodeInstanceFactoryTest;
+
+public class ConfFileUtils {
+
+ /**
+ * Return the URL for a given conf file
+ * @param confName
+ * @param classLoader
+ * @return
+ */
+ public static URL getURL(String confName, ClassLoader classLoader, Class cls) {
+ URL url = null;
+
+ // User home
+ String userHome = System.getProperty( "user.home" );
+ if ( userHome.endsWith( "\\" ) || userHome.endsWith( "/" ) ) {
+ url = getURLForFile( userHome + confName );
+ } else {
+ url = getURLForFile( userHome + "/" + confName );
+ }
+
+ // Working directory
+ if ( url == null ) {
+ url = getURLForFile( confName );
+ }
+
+ // check Class folder
+ if ( cls != null ) {
+ url = cls.getResource( confName );
+ }
+
+ // check META-INF directories for all known ClassLoaders
+ if ( url == null && classLoader != null ) {
+ ClassLoader confClassLoader = classLoader;
+ if ( confClassLoader != null ) {
+ url = confClassLoader.getResource( "META-INF/" + confName );
+ }
+ }
+
+ if ( url == null ) {
+ ClassLoader confClassLoader = ConfFileUtils.class.getClassLoader();
+ if ( confClassLoader != null && confClassLoader != classLoader ) {
+ url = confClassLoader.getResource( "META-INF/" + confName );
+ }
+ }
+
+ if ( url == null && cls != null ) {
+ ClassLoader confClassLoader = cls.getClassLoader();
+ if ( confClassLoader != null && confClassLoader != classLoader ) {
+ url = confClassLoader.getResource( "META-INF/" + confName );
+ }
+ }
+
+ if ( url == null ) {
+ ClassLoader confClassLoader = Thread.currentThread().getContextClassLoader();
+ if ( confClassLoader != null && confClassLoader != classLoader ) {
+ url = confClassLoader.getResource( "META-INF/" + confName );
+ }
+ }
+
+ if ( url == null ) {
+ ClassLoader confClassLoader = ClassLoader.getSystemClassLoader();
+ if ( confClassLoader != null && confClassLoader != classLoader ) {
+ url = confClassLoader.getResource( "META-INF/" + confName );
+ }
+ }
+
+ return url;
+ }
+
+ /**
+ * Return URL for given filename
+ *
+ * @param fileName
+ * @return
+ * URL
+ */
+ public static URL getURLForFile(String fileName) {
+ URL url = null;
+ if ( fileName != null ) {
+ File file = new File( fileName );
+ if ( file != null && file.exists() ) {
+ try {
+ url = file.toURL();
+ } catch ( MalformedURLException e ) {
+ throw new IllegalArgumentException( "file.toURL() failed for '" + file + "'" );
+ }
+ }
+ }
+ return url;
+ }
+
+ public static String URLContentsToString(URL url) {
+ StringBuilder builder = new StringBuilder();
+ if ( url == null ) {
+ return null;
+ }
+
+ try {
+ BufferedReader reader = new BufferedReader(new InputStreamReader( url.openStream() ));
+ String line = null;
+
+ while ( ( line = reader.readLine() ) != null ) { // while loop begins here
+ builder.append( line );
+ builder.append( "\n" );
+ }
+ } catch ( IOException e ) {
+ throw new RuntimeException( "Unable to read " + url.toExternalForm() );
+ }
+ return builder.toString();
+ }
+
+ /**
+ * Load a Properties file from a URL, return null if it fails
+ *
+ * @param url
+ * @return
+ * URL
+ */
+ public static Properties getProperties(URL url) {
+ if ( url == null ) {
+ return null;
+ }
+
+ Properties properties = new Properties();
+ try {
+ properties.load( url.openStream() );
+ } catch ( IOException e ) {
+ //swallow, as we'll return null
+ return null;
+ }
+
+ return properties;
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/EndNodeInstanceImplTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/EndNodeInstanceImplTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/EndNodeInstanceImplTest.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -0,0 +1,53 @@
+package org.drools.ruleflow.instance.impl;
+
+
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.ruleflow.common.core.impl.ProcessImpl;
+import org.drools.ruleflow.common.instance.ProcessInstance;
+import org.drools.ruleflow.core.Connection;
+import org.drools.ruleflow.core.Node;
+import org.drools.ruleflow.core.impl.ConnectionImpl;
+import org.drools.ruleflow.core.impl.EndNodeImpl;
+import org.drools.ruleflow.core.impl.NodeImpl;
+import org.drools.ruleflow.core.impl.RuleFlowProcessImpl;
+import org.drools.ruleflow.core.impl.StartNodeImpl;
+
+import junit.framework.TestCase;
+
+public class EndNodeInstanceImplTest extends TestCase {
+ public void testStartNode() {
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ StatefulSession session = ruleBase.newStatefulSession();
+
+ NodeImpl mockNode = new NodeImpl() { };
+
+ RuleFlowProcessImpl process = new RuleFlowProcessImpl();
+
+ Node endNode = new EndNodeImpl();
+ endNode.setId( 1 );
+ endNode.setName( "end node" );
+
+ mockNode.setId( 2 );
+ new ConnectionImpl(mockNode, endNode, Connection.TYPE_NORMAL);
+
+ process.addNode( mockNode );
+ process.addNode( endNode );
+
+ RuleFlowProcessInstanceImpl processInstance = new RuleFlowProcessInstanceImpl();
+ processInstance.setState( ProcessInstance.STATE_ACTIVE );
+ processInstance.setProcess( process );
+ processInstance.setWorkingMemory( (InternalWorkingMemory) session );
+
+
+ MockNodeInstanceFactory factory = new MockNodeInstanceFactory( new MockNodeInstance( mockNode ) );
+ processInstance.registerNodeInstanceFactory( mockNode.getClass(), factory );
+
+ MockNodeInstance mockNodeInstance = ( MockNodeInstance ) processInstance.getNodeInstance( mockNode );
+
+ mockNodeInstance.trigger( null );
+ assertEquals( ProcessInstance.STATE_COMPLETED, processInstance.getState() );
+ }
+}
Added: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/MockNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/MockNode.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/MockNode.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -0,0 +1,9 @@
+package org.drools.ruleflow.instance.impl;
+
+import org.drools.ruleflow.core.impl.NodeImpl;
+
+public class MockNode extends NodeImpl {
+ public MockNode() {
+
+ }
+}
Added: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/MockNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/MockNodeInstance.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/MockNodeInstance.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -0,0 +1,53 @@
+/**
+ *
+ */
+package org.drools.ruleflow.instance.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.ruleflow.core.impl.ConnectionImpl;
+import org.drools.ruleflow.core.impl.NodeImpl;
+import org.drools.ruleflow.instance.RuleFlowNodeInstance;
+
+public class MockNodeInstance extends RuleFlowNodeInstanceImpl {
+ private List list = new ArrayList();
+
+ private NodeImpl node;
+
+ public MockNodeInstance(NodeImpl node) {
+ this.node = node;
+ }
+
+ public NodeImpl getNode() {
+ return this.node;
+ }
+
+ public void internalTrigger(RuleFlowNodeInstance from) {
+ this.list.add( from );
+ triggerCompleted();
+ }
+
+ public List getList() {
+ return this.list;
+ }
+
+ public int hashCode() {
+ return (int) this.node.getId();
+ }
+
+ public boolean equals(Object object) {
+ if ( object == null || (!( object instanceof MockNodeInstance ) )) {
+ return false;
+ }
+
+ MockNodeInstance other = ( MockNodeInstance ) object;
+ return getNode().getId() == other.getNode().getId();
+ }
+
+ public void triggerCompleted() {
+
+ getProcessInstance().getNodeInstance( ((ConnectionImpl) this.node.getOutgoingConnections().get( 0 )).getTo() ).trigger( this );
+ getProcessInstance().removeNodeInstance(this);
+ }
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/MockNodeInstanceFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/MockNodeInstanceFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/MockNodeInstanceFactory.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -0,0 +1,26 @@
+/**
+ *
+ */
+package org.drools.ruleflow.instance.impl;
+
+import org.drools.ruleflow.core.Node;
+import org.drools.ruleflow.instance.RuleFlowNodeInstance;
+
+public class MockNodeInstanceFactory implements ProcessNodeInstanceFactory {
+ private MockNodeInstance instance;
+
+ public MockNodeInstanceFactory(MockNodeInstance instance) {
+ this.instance = instance;
+ }
+
+ public MockNodeInstance getMockNodeInstance() {
+ return this.instance;
+ }
+
+ public RuleFlowNodeInstance getNodeInstance(Node node,
+ RuleFlowProcessInstanceImpl processInstance) {
+ this.instance.setNodeId( node.getId() );
+ processInstance.addNodeInstance( this.instance );
+ return instance;
+ }
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/ProcessNodeInstanceFactoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/ProcessNodeInstanceFactoryTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/ProcessNodeInstanceFactoryTest.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -0,0 +1,32 @@
+package org.drools.ruleflow.instance.impl;
+
+import java.util.Properties;
+
+import junit.framework.TestCase;
+
+import org.drools.RuleBaseConfiguration;
+import org.drools.ruleflow.core.Node;
+import org.drools.ruleflow.core.impl.ActionNodeImpl;
+import org.drools.ruleflow.instance.impl.factories.CreateNewNodeFactory;
+
+public class ProcessNodeInstanceFactoryTest extends TestCase {
+
+ public void testDefaultEntries() throws Exception {
+ RuleBaseConfiguration conf = new RuleBaseConfiguration();
+
+ ProcessNodeInstanceFactoryRegistry registry = conf.getProcessNodeInstanceFactoryRegistry();
+ Node node = new ActionNodeImpl();
+ assertEquals( CreateNewNodeFactory.class, registry.getRuleFlowNodeFactory( node ).getClass() );
+ }
+
+ public void testDiscoveredEntry() {
+ Properties properties = new Properties();
+ properties.put( "processNodeInstanceFactoryRegistry", "mockProcessNodeInstanceFactory.conf" );
+
+ RuleBaseConfiguration conf = new RuleBaseConfiguration( properties );
+
+ ProcessNodeInstanceFactoryRegistry registry = conf.getProcessNodeInstanceFactoryRegistry();
+
+ assertEquals( MockNodeInstanceFactory.class, registry.getRuleFlowNodeFactory( new MockNode() ).getClass() );
+ }
+}
Added: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/StartNodeInstanceImplTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/StartNodeInstanceImplTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/ruleflow/instance/impl/StartNodeInstanceImplTest.java 2008-01-02 12:49:48 UTC (rev 17492)
@@ -0,0 +1,52 @@
+package org.drools.ruleflow.instance.impl;
+
+
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.ruleflow.common.instance.ProcessInstance;
+import org.drools.ruleflow.core.Connection;
+import org.drools.ruleflow.core.Node;
+import org.drools.ruleflow.core.impl.ConnectionImpl;
+import org.drools.ruleflow.core.impl.NodeImpl;
+import org.drools.ruleflow.core.impl.RuleFlowProcessImpl;
+import org.drools.ruleflow.core.impl.StartNodeImpl;
+
+import junit.framework.TestCase;
+
+public class StartNodeInstanceImplTest extends TestCase {
+ public void testStartNode() {
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ StatefulSession session = ruleBase.newStatefulSession();
+
+ NodeImpl mockNode = new NodeImpl() { };
+
+ RuleFlowProcessImpl process = new RuleFlowProcessImpl();
+
+ Node startNode = new StartNodeImpl();
+ startNode.setId( 1 );
+ startNode.setName( "start node" );
+
+ mockNode.setId( 2 );
+ new ConnectionImpl(startNode, mockNode, Connection.TYPE_NORMAL);
+
+ process.addNode( startNode );
+ process.addNode( mockNode );
+
+ RuleFlowProcessInstanceImpl processInstance = new RuleFlowProcessInstanceImpl();
+ processInstance.setProcess( process );
+ processInstance.setWorkingMemory( (InternalWorkingMemory) session );
+
+
+ MockNodeInstanceFactory factory = new MockNodeInstanceFactory( new MockNodeInstance( mockNode ) );
+ processInstance.registerNodeInstanceFactory( mockNode.getClass(), factory );
+
+ assertEquals( ProcessInstance.STATE_PENDING, processInstance.getState() );
+ processInstance.start();
+ assertEquals( ProcessInstance.STATE_ACTIVE, processInstance.getState() );
+
+ MockNodeInstance nodeInstance = factory.getMockNodeInstance();
+ assertSame( startNode, ((RuleFlowNodeInstanceImpl) nodeInstance.getList().get( 0 )).getNode() );
+ }
+}
Added: labs/jbossrules/trunk/drools-core/src/test/resources/META-INF/mockProcessNodeInstanceFactory.conf
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/resources/META-INF/mockProcessNodeInstanceFactory.conf (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/test/resources/META-INF/mockProcessNodeInstanceFactory.conf 2008-01-02 12:49:48 UTC (rev 17492)
@@ -0,0 +1,8 @@
+// we use MVEL to configure our nodes, simply populate a map, which will be added to the main registry
+import org.drools.ruleflow.instance.impl.MockNode;
+import org.drools.ruleflow.instance.impl.MockNodeInstance;
+import org.drools.ruleflow.instance.impl.MockNodeInstanceFactory;
+
+[
+ MockNode : new MockNodeInstanceFactory( new MockNodeInstance( new MockNode() ) )
+]
More information about the jboss-svn-commits
mailing list