[jboss-svn-commits] JBL Code SVN: r5939 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools main/java/org/drools/common main/java/org/drools/spi test/java/org/drools/reteoo
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Aug 18 08:36:14 EDT 2006
Author: mark.proctor at jboss.com
Date: 2006-08-18 08:36:10 -0400 (Fri, 18 Aug 2006)
New Revision: 5939
Added:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/GlobalResolver.java
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/WorkingMemory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ReteooWorkingMemoryTest.java
Log:
JBRULES-438 Global Resolver
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/WorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/WorkingMemory.java 2006-08-18 11:39:03 UTC (rev 5938)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/WorkingMemory.java 2006-08-18 12:36:10 UTC (rev 5939)
@@ -25,6 +25,7 @@
import org.drools.spi.AgendaFilter;
import org.drools.spi.AgendaGroup;
import org.drools.spi.AsyncExceptionHandler;
+import org.drools.spi.GlobalResolver;
/**
* A knowledge session for a <code>RuleBase</code>.
@@ -94,12 +95,12 @@
Map getGlobals();
/**
- * Set a specific piece of global in this working memory.
+ * Set a specific piece of global in this working memory. Null values will return doing nothign
*
* @param name
* the name under which to populate the data
* @param value
- * the application data
+ * the global value, cannot be null
*/
void setGlobal(String name,
Object value);
@@ -110,6 +111,12 @@
* @return application data or null if nothing is set under this name
*/
Object getGlobal(String name);
+
+ /**
+ * Delegate used to resolve any global names not found in the global map.
+ * @param globalResolver
+ */
+ void setGlobalResolver(GlobalResolver globalResolver);
/**
* Retrieve the <code>RuleBase</code> of this working memory.
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 2006-08-18 11:39:03 UTC (rev 5938)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2006-08-18 12:36:10 UTC (rev 5939)
@@ -18,6 +18,7 @@
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
+import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
@@ -46,6 +47,7 @@
import org.drools.spi.AgendaGroup;
import org.drools.spi.AsyncExceptionHandler;
import org.drools.spi.FactHandleFactory;
+import org.drools.spi.GlobalResolver;
import org.drools.spi.PropagationContext;
import org.drools.util.FastMap;
import org.drools.util.PrimitiveLongMap;
@@ -89,6 +91,11 @@
protected Map queryResults = Collections.EMPTY_MAP;
+ protected GlobalResolver globalResolver;
+
+ protected static final Object NULL = new Serializable() {
+ };
+
/** The eventSupport */
protected final WorkingMemoryEventSupport workingMemoryEventSupport = new WorkingMemoryEventSupport( this );
@@ -231,7 +238,12 @@
* @see WorkingMemory
*/
public void setGlobal(final String name,
- final Object value) {
+ Object value) {
+ // Cannot set null values
+ if ( value == null ) {
+ return;
+ }
+
try {
lock.lock();
// Make sure the global has been declared in the RuleBase
@@ -250,6 +262,10 @@
lock.unlock();
}
}
+
+ public void setGlobalResolver(GlobalResolver globalResolver) {
+ this.globalResolver = globalResolver;
+ }
public long getId() {
return this.id;
@@ -261,7 +277,10 @@
public Object getGlobal(final String name) {
try {
lock.lock();
- final Object object = this.globals.get( name );
+ Object object = this.globals.get( name );
+ if ( object == null && this.globalResolver != null ) {
+ object = this.globalResolver.resolve( name );
+ }
return object;
} finally {
lock.unlock();
@@ -311,7 +330,7 @@
// the firing for any other assertObject(..) that get
// nested inside, avoiding concurrent-modification
// exceptions, depending on code paths of the actions.
-
+
if ( !this.factQueue.isEmpty() ) {
propagateQueuedActions();
}
@@ -797,8 +816,8 @@
}
}
-
- public void queueWorkingMemoryAction( WorkingMemoryAction action ) {
+
+ public void queueWorkingMemoryAction(WorkingMemoryAction action) {
this.factQueue.add( action );
}
@@ -811,7 +830,7 @@
false,
true,
ruleOrigin,
- activationOrigin ) );
+ activationOrigin ) );
}
/**
@@ -927,5 +946,5 @@
this.activationOrigin );
}
}
-
+
}
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/GlobalResolver.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/GlobalResolver.java 2006-08-18 11:39:03 UTC (rev 5938)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/GlobalResolver.java 2006-08-18 12:36:10 UTC (rev 5939)
@@ -0,0 +1,5 @@
+package org.drools.spi;
+
+public interface GlobalResolver {
+ public Object resolve(String name);
+}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ReteooWorkingMemoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ReteooWorkingMemoryTest.java 2006-08-18 11:39:03 UTC (rev 5938)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ReteooWorkingMemoryTest.java 2006-08-18 12:36:10 UTC (rev 5939)
@@ -1,5 +1,8 @@
package org.drools.reteoo;
+import java.util.HashMap;
+import java.util.Map;
+
import junit.framework.TestCase;
import org.drools.FactHandle;
@@ -7,6 +10,8 @@
import org.drools.common.EqualityKey;
import org.drools.common.InternalWorkingMemory;
import org.drools.common.TruthMaintenanceSystem;
+import org.drools.rule.Package;
+import org.drools.spi.GlobalResolver;
public class ReteooWorkingMemoryTest extends TestCase {
/*
@@ -60,4 +65,22 @@
assertEquals( 1,
workingMemory.getId() );
}
+
+ public void testGlobalResolver() {
+ final Map map = new HashMap();
+ map.put( "global1", "value1" );
+ map.put( "global2", "value2" );
+ GlobalResolver resolver = new GlobalResolver() {
+
+ public Object resolve(String name) {
+ return map.get( name );
+ }
+
+ };
+ ReteooRuleBase ruleBase = (ReteooRuleBase) RuleBaseFactory.newRuleBase();
+ InternalWorkingMemory workingMemory = (InternalWorkingMemory) ruleBase.newWorkingMemory();
+ workingMemory.setGlobalResolver( resolver );
+ assertEquals( "value1", workingMemory.getGlobal( "global1" ) );
+ assertEquals( "value2", workingMemory.getGlobal( "global2" ) );
+ }
}
More information about the jboss-svn-commits
mailing list