[jboss-svn-commits] JBL Code SVN: r17049 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools/rule and 5 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Dec 5 18:59:01 EST 2007
Author: mark.proctor at jboss.com
Date: 2007-12-05 18:59:00 -0500 (Wed, 05 Dec 2007)
New Revision: 17049
Added:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELReturnValueEvaluator.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/impl/ReturnValueConstraintEvaluator.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ReturnValueEvaluator.java
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PackageCompilationData.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/impl/ConstraintImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/RuleFlowSplitInstanceImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/nodes/split/ConstraintEvaluator.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/ReteooMannersTest.java
Log:
JBRULES-1352 Allow Constraints to also use dialectable expression evaluations
-constraints now working end to end with dialects and rules and code; includes integration test.
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELReturnValueEvaluator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELReturnValueEvaluator.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELReturnValueEvaluator.java 2007-12-05 23:59:00 UTC (rev 17049)
@@ -0,0 +1,69 @@
+package org.drools.base.mvel;
+
+import java.io.Serializable;
+
+import org.drools.WorkingMemory;
+import org.drools.spi.Action;
+import org.drools.spi.Consequence;
+import org.drools.spi.KnowledgeHelper;
+import org.drools.spi.ReturnValueEvaluator;
+import org.mvel.CompiledExpression;
+import org.mvel.MVEL;
+import org.mvel.debug.DebugTools;
+
+public class MVELReturnValueEvaluator
+ implements
+ ReturnValueEvaluator,
+ Serializable {
+ private static final long serialVersionUID = 400L;
+
+ private final Serializable expr;
+ private final DroolsMVELFactory factory;
+
+ public MVELReturnValueEvaluator(final Serializable expr,
+ final DroolsMVELFactory factory) {
+ this.expr = expr;
+ this.factory = factory;
+ }
+
+ public String getDialect() {
+ return "mvel";
+ }
+
+ public Object evaluate(final WorkingMemory workingMemory) throws Exception {
+ this.factory.setContext( null,
+ null,
+ null,
+ workingMemory,
+ null );
+ CompiledExpression compexpr = (CompiledExpression) this.expr;
+
+ //Receive breakpoints from debugger
+ MVELDebugHandler.prepare();
+
+ Object value;
+ if ( MVELDebugHandler.isDebugMode() ) {
+ if ( MVELDebugHandler.verbose ) {
+ System.out.println( DebugTools.decompile( compexpr ) );
+ }
+ value = MVEL.executeDebugger( compexpr,
+ null,
+ this.factory );
+ } else {
+ value = MVEL.executeExpression( compexpr,
+ null,
+ this.factory );
+ }
+
+ if ( !(value instanceof Boolean) ) {
+ throw new RuntimeException("Constraints must return boolean values" );
+ }
+ return ((Boolean)value).booleanValue();
+
+ }
+
+ public Serializable getCompExpr() {
+ return expr;
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PackageCompilationData.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PackageCompilationData.java 2007-12-05 19:08:13 UTC (rev 17048)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PackageCompilationData.java 2007-12-05 23:59:00 UTC (rev 17049)
@@ -39,10 +39,12 @@
import org.drools.base.accumulators.JavaAccumulatorFunctionExecutor;
import org.drools.common.DroolsObjectInputStream;
import org.drools.ruleflow.core.impl.ActionNodeImpl;
+import org.drools.ruleflow.core.impl.ReturnValueConstraintEvaluator;
import org.drools.spi.Accumulator;
import org.drools.spi.Consequence;
import org.drools.spi.EvalExpression;
import org.drools.spi.PredicateExpression;
+import org.drools.spi.ReturnValueEvaluator;
import org.drools.spi.ReturnValueExpression;
public class PackageCompilationData
@@ -268,6 +270,8 @@
((JavaAccumulatorFunctionExecutor) invoker).setExpression( (ReturnValueExpression) clazz.newInstance() );
} else if ( invoker instanceof ActionNodeImpl ) {
((ActionNodeImpl) invoker).setAction( clazz.newInstance() );
+ } else if ( invoker instanceof ReturnValueConstraintEvaluator ) {
+ ((ReturnValueConstraintEvaluator) invoker).setEvaluator( (ReturnValueEvaluator) clazz.newInstance() );
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/impl/ConstraintImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/impl/ConstraintImpl.java 2007-12-05 19:08:13 UTC (rev 17048)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/impl/ConstraintImpl.java 2007-12-05 23:59:00 UTC (rev 17049)
@@ -19,7 +19,7 @@
import java.io.Serializable;
import org.drools.ruleflow.core.Constraint;
-import org.drools.ruleflow.nodes.split.ConstraintEvaluator;
+
/**
* Default implementation of a constraint.
*
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/impl/ReturnValueConstraintEvaluator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/impl/ReturnValueConstraintEvaluator.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/impl/ReturnValueConstraintEvaluator.java 2007-12-05 23:59:00 UTC (rev 17049)
@@ -0,0 +1,117 @@
+package org.drools.ruleflow.core.impl;
+
+/*
+ * 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.io.Serializable;
+import java.util.Iterator;
+
+import org.drools.common.RuleFlowGroupNode;
+import org.drools.ruleflow.core.Connection;
+import org.drools.ruleflow.core.Constraint;
+import org.drools.ruleflow.instance.RuleFlowProcessInstance;
+import org.drools.ruleflow.instance.impl.RuleFlowSplitInstanceImpl;
+import org.drools.ruleflow.nodes.split.ConstraintEvaluator;
+import org.drools.spi.Activation;
+import org.drools.spi.ReturnValueEvaluator;
+import org.drools.spi.RuleFlowGroup;
+
+/**
+ * Default implementation of a constraint.
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class ReturnValueConstraintEvaluator
+ implements
+ Constraint, ConstraintEvaluator,
+ Serializable {
+
+ private static final long serialVersionUID = 400L;
+
+ private String name;
+ private String constraint;
+ private int priority;
+ private String dialect;
+ private String type;
+
+ private ReturnValueEvaluator evaluator;
+
+ public String getConstraint() {
+ return this.constraint;
+ }
+
+ public void setConstraint(final String constraint) {
+ this.constraint = constraint;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ public void setName(final String name) {
+ this.name = name;
+ }
+
+ public String toString() {
+ return this.name;
+ }
+
+ public int getPriority() {
+ return this.priority;
+ }
+
+ public void setPriority(final int priority) {
+ this.priority = priority;
+ }
+
+ public String getDialect() {
+ return dialect;
+ }
+
+ public void setDialect(String dialect) {
+ this.dialect = dialect;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+
+
+ public void setEvaluator(ReturnValueEvaluator evaluator) {
+ this.evaluator = evaluator;
+ }
+
+ public boolean evaluate(RuleFlowSplitInstanceImpl instance,
+ Connection connection,
+ Constraint constraint) {
+ Object value;
+ try {
+ value = this.evaluator.evaluate( instance.getProcessInstance().getWorkingMemory() );
+ } catch ( Exception e ) {
+ throw new RuntimeException("unable to execute ReturnValueEvaluator", e);
+ }
+ if ( !(value instanceof Boolean) ) {
+ throw new RuntimeException("Constraints must return boolean values" );
+ }
+ return ((Boolean)value).booleanValue();
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/RuleFlowSplitInstanceImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/RuleFlowSplitInstanceImpl.java 2007-12-05 19:08:13 UTC (rev 17048)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/RuleFlowSplitInstanceImpl.java 2007-12-05 23:59:00 UTC (rev 17049)
@@ -81,10 +81,10 @@
getProcessInstance().getNodeInstance( connection.getTo() ).trigger( this );
found = true;
}
- if ( !found ) {
- throw new IllegalArgumentException( "OR split could not find at least one valid outgoing connection for split " + getSplitNode().getName() );
- }
}
+ if ( !found ) {
+ throw new IllegalArgumentException( "OR split could not find at least one valid outgoing connection for split " + getSplitNode().getName() );
+ }
break;
default :
throw new IllegalArgumentException( "Illegal split type " + split.getType() );
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/nodes/split/ConstraintEvaluator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/nodes/split/ConstraintEvaluator.java 2007-12-05 19:08:13 UTC (rev 17048)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/nodes/split/ConstraintEvaluator.java 2007-12-05 23:59:00 UTC (rev 17049)
@@ -5,8 +5,10 @@
import org.drools.ruleflow.core.Split;
import org.drools.ruleflow.instance.impl.RuleFlowSplitInstanceImpl;
-public interface ConstraintEvaluator extends Constraint {
+public interface ConstraintEvaluator
+ extends
+ Constraint {
public boolean evaluate(RuleFlowSplitInstanceImpl instance,
- Connection connection,
- Constraint constraint);
+ Connection connection,
+ Constraint constraint);
}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ReturnValueEvaluator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ReturnValueEvaluator.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ReturnValueEvaluator.java 2007-12-05 23:59:00 UTC (rev 17049)
@@ -0,0 +1,7 @@
+package org.drools.spi;
+
+import org.drools.WorkingMemory;
+
+public interface ReturnValueEvaluator {
+ Object evaluate(WorkingMemory workingMemory) throws Exception;
+}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/ReteooMannersTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/ReteooMannersTest.java 2007-12-05 19:08:13 UTC (rev 17048)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/ReteooMannersTest.java 2007-12-05 23:59:00 UTC (rev 17049)
@@ -65,7 +65,7 @@
};
//workingMemory.addEventListener(listener );
- final InputStream is = getClass().getResourceAsStream( "/manners64.dat" );
+ final InputStream is = getClass().getResourceAsStream( "/manners128.dat" );
final List list = getInputObjects( is );
for ( final Iterator it = list.iterator(); it.hasNext(); ) {
final Object object = it.next();
More information about the jboss-svn-commits
mailing list