[jboss-svn-commits] JBL Code SVN: r20886 - labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Jul 2 09:35:51 EDT 2008
Author: mark.proctor at jboss.com
Date: 2008-07-02 09:35:51 -0400 (Wed, 02 Jul 2008)
New Revision: 20886
Added:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsGlobalVariableMVELFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsLocalVariableMVELFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsProcessMVELFactory.java
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELGlobalVariable.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/LocalVariableResolver.java
Log:
-added MVEL factory for process actions
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsGlobalVariableMVELFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsGlobalVariableMVELFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsGlobalVariableMVELFactory.java 2008-07-02 13:35:51 UTC (rev 20886)
@@ -0,0 +1,5 @@
+package org.drools.base.mvel;
+
+public interface DroolsGlobalVariableMVELFactory {
+ public Object getValue(final String identifier);
+}
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsLocalVariableMVELFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsLocalVariableMVELFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsLocalVariableMVELFactory.java 2008-07-02 13:35:51 UTC (rev 20886)
@@ -0,0 +1,9 @@
+package org.drools.base.mvel;
+
+public interface DroolsLocalVariableMVELFactory {
+ public void setLocalValue(final String identifier,
+ final Object value);
+
+ public Object getLocalValue(final String identifier);
+
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELFactory.java 2008-07-02 13:22:39 UTC (rev 20885)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELFactory.java 2008-07-02 13:35:51 UTC (rev 20886)
@@ -25,6 +25,8 @@
public class DroolsMVELFactory extends BaseVariableResolverFactory
implements
+ DroolsGlobalVariableMVELFactory,
+ DroolsLocalVariableMVELFactory,
LocalVariableResolverFactory,
Externalizable,
Cloneable {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELGlobalVariable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELGlobalVariable.java 2008-07-02 13:22:39 UTC (rev 20885)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELGlobalVariable.java 2008-07-02 13:35:51 UTC (rev 20886)
@@ -17,14 +17,14 @@
private String name;
private Class knownType;
- private DroolsMVELFactory factory;
+ private DroolsGlobalVariableMVELFactory factory;
public DroolsMVELGlobalVariable() {
}
public DroolsMVELGlobalVariable(final String identifier,
final Class knownType,
- final DroolsMVELFactory factory) {
+ final DroolsGlobalVariableMVELFactory factory) {
this.name = identifier;
this.factory = factory;
this.knownType = knownType;
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsProcessMVELFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsProcessMVELFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsProcessMVELFactory.java 2008-07-02 13:35:51 UTC (rev 20886)
@@ -0,0 +1,221 @@
+package org.drools.base.mvel;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.lang.reflect.Method;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.WorkingMemory;
+import org.drools.reteoo.LeftTuple;
+import org.drools.rule.Declaration;
+import org.drools.spi.KnowledgeHelper;
+import org.drools.spi.Tuple;
+import org.mvel.DataConversion;
+import org.mvel.integration.VariableResolver;
+import org.mvel.integration.impl.BaseVariableResolverFactory;
+import org.mvel.integration.impl.LocalVariableResolverFactory;
+import org.mvel.integration.impl.StaticMethodImportResolverFactory;
+
+public class DroolsProcessMVELFactory extends BaseVariableResolverFactory
+ implements
+ LocalVariableResolverFactory,
+ DroolsGlobalVariableMVELFactory,
+ DroolsLocalVariableMVELFactory,
+ Externalizable,
+ Cloneable {
+
+ private static final long serialVersionUID = 400L;
+
+ /**
+ * Holds the instance of the variables.
+ */
+
+ private Map globals;
+
+ private WorkingMemory workingMemory;
+
+ private Map localVariables;
+
+ static {
+ //for handling dates as string literals
+ DataConversion.addConversionHandler( Date.class,
+ new MVELDateCoercion() );
+ DataConversion.addConversionHandler( Calendar.class,
+ new MVELCalendarCoercion() );
+ }
+
+ public DroolsProcessMVELFactory() {
+
+ }
+
+ public DroolsProcessMVELFactory(final Map globals) {
+ this( globals,
+ null );
+ }
+
+ public DroolsProcessMVELFactory(final Map globals,
+ final List[] externals) {
+ this.globals = globals;
+
+ if ( externals != null && MVELDebugHandler.isDebugMode() ) {
+ for ( int i = 0; i < externals.length; i++ ) {
+ for ( Iterator it = externals[i].iterator(); it.hasNext(); ) {
+ String identifier = (String) it.next();
+ isResolveable( identifier );
+ }
+ }
+ }
+ }
+
+ public void readExternal(ObjectInput in) throws IOException,
+ ClassNotFoundException {
+ globals = (Map) in.readObject();
+ workingMemory = (WorkingMemory) in.readObject();
+ localVariables = (Map) in.readObject();
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject( globals );
+ out.writeObject( workingMemory );
+ out.writeObject( localVariables );
+ }
+
+ public static void addStaticImport(StaticMethodImportResolverFactory factory,
+ String staticImportEntry,
+ ClassLoader classLoader) {
+ int index = staticImportEntry.lastIndexOf( '.' );
+ String className = staticImportEntry.substring( 0,
+ index );
+ String methodName = staticImportEntry.substring( index + 1 );
+
+ try {
+ Class cls = classLoader.loadClass( className );
+ Method[] methods = cls.getDeclaredMethods();
+ for ( int i = 0; i < methods.length; i++ ) {
+ if ( methods[i].getName().equals( methodName ) ) {
+ factory.createVariable( methodName,
+ methods[i] );
+ break;
+ }
+ }
+ } catch ( ClassNotFoundException e ) {
+ throw new RuntimeException( "Unable to dynamically load method '" + staticImportEntry + "'" );
+ }
+
+ }
+
+ public Map getVariableResolvers() {
+ return this.variableResolvers;
+ }
+
+ public WorkingMemory getWorkingMemory() {
+ return this.workingMemory;
+ }
+
+ public void setContext(final WorkingMemory workingMemory) {
+ this.workingMemory = workingMemory;
+ }
+
+ public Object getValue(final String identifier) {
+ return this.workingMemory.getGlobal( identifier );
+ }
+
+ public Object getLocalValue(final String identifier) {
+ return this.localVariables.get( identifier );
+ }
+
+ public void setLocalValue(final String identifier,
+ final Object value) {
+ if ( this.localVariables == null ) {
+ this.localVariables = new HashMap();
+ }
+ this.localVariables.put( identifier,
+ value );
+ }
+
+ public VariableResolver createVariable(String name,
+ Object value) {
+ VariableResolver vr = getVariableResolver( name );
+ if ( vr == null ) {
+ addResolver( name,
+ vr = new LocalVariableResolver( this,
+ name ) );
+ }
+
+ vr.setValue( value );
+ return vr;
+ }
+
+ public VariableResolver createVariable(String name,
+ Object value,
+ Class type) {
+ VariableResolver vr = getVariableResolver( name );
+ if ( vr == null ) {
+ addResolver( name,
+ vr = new LocalVariableResolver( this,
+ name,
+ type ) );
+ }
+
+ vr.setValue( value );
+ return vr;
+ }
+
+ public boolean isResolveable(String name) {
+ if ( this.variableResolvers != null && this.variableResolvers.containsKey( name ) ) {
+ return true;
+ } else if ( this.workingMemory.getGlobal( name ) != null ) {
+ addResolver( name,
+ new DroolsMVELGlobalVariable( name,
+ (Class) this.globals.get( name ),
+ this ) );
+ return true;
+ } else if ( nextFactory != null ) {
+ return nextFactory.isResolveable( name );
+ }
+
+ return false;
+ }
+
+ private void addResolver(String name,
+ VariableResolver vr) {
+ if ( this.variableResolvers == null ) {
+ this.variableResolvers = new HashMap();
+ }
+ this.variableResolvers.put( name,
+ vr );
+ }
+
+ public boolean isTarget(String name) {
+ if ( this.variableResolvers != null ) {
+ return this.variableResolvers.containsKey( name );
+ } else {
+ return false;
+ }
+ }
+
+ public Object clone() {
+ return new DroolsProcessMVELFactory( this.globals );
+ }
+
+ /**
+ * @return the globals
+ */
+ protected Map getGlobals() {
+ return globals;
+ }
+
+ /**
+ * @return the localVariables
+ */
+ protected Map getLocalVariables() {
+ return localVariables;
+ }
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/LocalVariableResolver.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/LocalVariableResolver.java 2008-07-02 13:22:39 UTC (rev 20885)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/LocalVariableResolver.java 2008-07-02 13:35:51 UTC (rev 20886)
@@ -27,28 +27,28 @@
public class LocalVariableResolver implements VariableResolver {
private String name;
private Class knownType;
- private DroolsMVELFactory factory;
+ private DroolsLocalVariableMVELFactory factory;
private boolean cache = false;
- public LocalVariableResolver(DroolsMVELFactory factory, String name) {
+ public LocalVariableResolver(DroolsLocalVariableMVELFactory factory, String name) {
this.factory = factory;
this.name = name;
}
- public LocalVariableResolver(DroolsMVELFactory factory, String name, Class knownType) {
+ public LocalVariableResolver(DroolsLocalVariableMVELFactory factory, String name, Class knownType) {
this.name = name;
this.knownType = knownType;
this.factory = factory;
}
- public LocalVariableResolver(DroolsMVELFactory factory, String name, boolean cache) {
+ public LocalVariableResolver(DroolsLocalVariableMVELFactory factory, String name, boolean cache) {
this.factory = factory;
this.name = name;
this.cache = cache;
}
- public LocalVariableResolver(DroolsMVELFactory factory, String name, Class knownType, boolean cache) {
+ public LocalVariableResolver(DroolsLocalVariableMVELFactory factory, String name, Class knownType, boolean cache) {
this.name = name;
this.knownType = knownType;
this.factory = factory;
More information about the jboss-svn-commits
mailing list