[jboss-svn-commits] JBL Code SVN: r25412 - in labs/jbossrules/trunk: drools-compiler/src/main/java/org/drools/process/builder and 10 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Feb 24 19:45:47 EST 2009
Author: KrisVerlaenen
Date: 2009-02-24 19:45:47 -0500 (Tue, 24 Feb 2009)
New Revision: 25412
Added:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/ContextResolver.java
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ActionNodeBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/EventBasedNodeBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ExtendedNodeBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ActionBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaActionBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELActionBuilder.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/process/builder/StoreNodeBuilder.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaActionBuilderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELActionBuilderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELDecisionBuilderTest.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/ObjectDataType.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/impl/ProcessImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/NodeImpl.java
Log:
JBRULES-1979: Validate variable types in actions in MVEL
- validating types of process variables in MVEL actions
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java 2009-02-25 00:21:46 UTC (rev 25411)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java 2009-02-25 00:45:47 UTC (rev 25412)
@@ -16,25 +16,14 @@
* limitations under the License.
*/
-import java.io.BufferedInputStream;
import java.io.IOException;
-import java.io.InputStream;
import java.io.Reader;
import java.io.StringReader;
-import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-
import org.drools.definition.process.Connection;
import org.drools.definition.process.Node;
import org.drools.definition.process.NodeContainer;
@@ -51,6 +40,7 @@
import org.drools.process.core.context.exception.ActionExceptionHandler;
import org.drools.process.core.context.exception.ExceptionHandler;
import org.drools.process.core.context.exception.ExceptionScope;
+import org.drools.process.core.impl.ProcessImpl;
import org.drools.process.core.validation.ProcessValidationError;
import org.drools.process.core.validation.ProcessValidator;
import org.drools.rule.builder.ProcessBuildContext;
@@ -167,7 +157,7 @@
ActionDescr actionDescr = new ActionDescr();
actionDescr.setText( action.getConsequence() );
Dialect dialect = buildContext.getDialectRegistry().getDialect( action.getDialect() );
- dialect.getActionBuilder().build( buildContext, action, actionDescr );
+ dialect.getActionBuilder().build( buildContext, action, actionDescr, (ProcessImpl) buildContext.getProcess() );
}
}
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ActionNodeBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ActionNodeBuilder.java 2009-02-25 00:21:46 UTC (rev 25411)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ActionNodeBuilder.java 2009-02-25 00:45:47 UTC (rev 25412)
@@ -7,6 +7,7 @@
import org.drools.lang.descr.ProcessDescr;
import org.drools.rule.builder.ProcessBuildContext;
import org.drools.workflow.core.impl.DroolsConsequenceAction;
+import org.drools.workflow.core.impl.NodeImpl;
import org.drools.workflow.core.node.ActionNode;
public class ActionNodeBuilder extends ExtendedNodeBuilder {
@@ -21,7 +22,7 @@
ActionDescr actionDescr = new ActionDescr();
actionDescr.setText( action.getConsequence() );
Dialect dialect = context.getDialectRegistry().getDialect( action.getDialect() );
- dialect.getActionBuilder().build( context, action, actionDescr );
+ dialect.getActionBuilder().build( context, action, actionDescr, (NodeImpl) node );
}
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/EventBasedNodeBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/EventBasedNodeBuilder.java 2009-02-25 00:21:46 UTC (rev 25411)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/EventBasedNodeBuilder.java 2009-02-25 00:45:47 UTC (rev 25412)
@@ -8,6 +8,7 @@
import org.drools.process.core.timer.Timer;
import org.drools.rule.builder.ProcessBuildContext;
import org.drools.workflow.core.DroolsAction;
+import org.drools.workflow.core.impl.NodeImpl;
import org.drools.workflow.core.node.EventBasedNode;
public class EventBasedNodeBuilder extends ExtendedNodeBuilder {
@@ -20,7 +21,7 @@
Map<Timer, DroolsAction> timers = ((EventBasedNode) node).getTimers();
if (timers != null) {
for (DroolsAction action: timers.values()) {
- buildAction(action, context);
+ buildAction(action, context, (NodeImpl) node );
}
}
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ExtendedNodeBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ExtendedNodeBuilder.java 2009-02-25 00:21:46 UTC (rev 25411)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ExtendedNodeBuilder.java 2009-02-25 00:45:47 UTC (rev 25412)
@@ -11,6 +11,7 @@
import org.drools.workflow.core.DroolsAction;
import org.drools.workflow.core.impl.DroolsConsequenceAction;
import org.drools.workflow.core.impl.ExtendedNodeImpl;
+import org.drools.workflow.core.impl.NodeImpl;
public class ExtendedNodeBuilder
implements
@@ -25,18 +26,18 @@
List<DroolsAction> actions = extendedNode.getActions(type);
if (actions != null) {
for (DroolsAction droolsAction: actions) {
- buildAction(droolsAction, context);
+ buildAction(droolsAction, context, (NodeImpl) node);
}
}
}
}
- protected void buildAction(DroolsAction droolsAction, ProcessBuildContext context) {
+ protected void buildAction(DroolsAction droolsAction, ProcessBuildContext context, NodeImpl node) {
DroolsConsequenceAction action = (DroolsConsequenceAction) droolsAction;
ActionDescr actionDescr = new ActionDescr();
actionDescr.setText( action.getConsequence() );
Dialect dialect = context.getDialectRegistry().getDialect( action.getDialect() );
- dialect.getActionBuilder().build( context, action, actionDescr );
+ dialect.getActionBuilder().build( context, action, actionDescr, node);
}
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ActionBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ActionBuilder.java 2009-02-25 00:21:46 UTC (rev 25411)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ActionBuilder.java 2009-02-25 00:45:47 UTC (rev 25412)
@@ -1,12 +1,14 @@
package org.drools.rule.builder;
import org.drools.lang.descr.ActionDescr;
+import org.drools.process.core.ContextResolver;
import org.drools.workflow.core.DroolsAction;
public interface ActionBuilder {
public void build(final PackageBuildContext context,
final DroolsAction action,
- final ActionDescr actionDescr);
+ final ActionDescr actionDescr,
+ final ContextResolver contextResolver);
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaActionBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaActionBuilder.java 2009-02-25 00:21:46 UTC (rev 25411)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaActionBuilder.java 2009-02-25 00:45:47 UTC (rev 25412)
@@ -23,7 +23,7 @@
import org.drools.compiler.Dialect;
import org.drools.lang.descr.ActionDescr;
-import org.drools.process.core.context.variable.VariableScope;
+import org.drools.process.core.ContextResolver;
import org.drools.rule.builder.ActionBuilder;
import org.drools.rule.builder.PackageBuildContext;
import org.drools.rule.builder.ProcessBuildContext;
@@ -51,7 +51,7 @@
public void build(final PackageBuildContext context,
final DroolsAction action,
final ActionDescr actionDescr,
- final VariableScope variableScope) {
+ final ContextResolver contextResolver) {
final String className = "action" + context.getNextId();
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELActionBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELActionBuilder.java 2009-02-25 00:21:46 UTC (rev 25411)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELActionBuilder.java 2009-02-25 00:45:47 UTC (rev 25412)
@@ -2,6 +2,7 @@
import java.util.HashMap;
import java.util.HashSet;
+import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -10,9 +11,12 @@
import org.drools.compiler.DescrBuildError;
import org.drools.compiler.Dialect;
import org.drools.lang.descr.ActionDescr;
+import org.drools.process.core.ContextResolver;
+import org.drools.process.core.context.variable.VariableScope;
import org.drools.rule.MVELDialectRuntimeData;
import org.drools.rule.builder.ActionBuilder;
import org.drools.rule.builder.PackageBuildContext;
+import org.drools.spi.KnowledgeHelper;
import org.drools.spi.ProcessContext;
import org.drools.workflow.core.DroolsAction;
import org.mvel2.Macro;
@@ -66,7 +70,8 @@
public void build(final PackageBuildContext context,
final DroolsAction action,
- final ActionDescr actionDescr) {
+ final ActionDescr actionDescr,
+ final ContextResolver contextResolver) {
String text = processMacros( actionDescr.getText() );
@@ -76,24 +81,48 @@
Set<String> variables = new HashSet<String>();
variables.add("context");
variables.add("kcontext");
+ variables.add("drools");
Dialect.AnalysisResult analysis = dialect.analyzeBlock( context,
actionDescr,
dialect.getInterceptors(),
text,
new Set[]{variables, context.getPkg().getGlobals().keySet()},
null );
-
+
+
Map<String, Class> variableClasses = new HashMap<String, Class>();
variableClasses.put("context", ProcessContext.class);
variableClasses.put("kcontext", org.drools.runtime.process.ProcessContext.class);
+ variableClasses.put("drools", KnowledgeHelper.class);
+
+ List<String> variableNames = analysis.getNotBoundedIdentifiers();
+ if (contextResolver != null) {
+ for (String variableName: variableNames) {
+ VariableScope variableScope = (VariableScope) contextResolver.resolveContext(VariableScope.VARIABLE_SCOPE, variableName);
+ if (variableScope == null) {
+ context.getErrors().add(
+ new DescrBuildError(
+ context.getParentDescr(),
+ actionDescr,
+ null,
+ "Could not find variable '" + variableName + "' for action '" + actionDescr.getText() + "'" ) );
+ } else {
+ variableClasses.put(variableName, Class.forName(
+ variableScope.findVariable(variableName).getType().getStringType()));
+ }
+ }
+ }
+
MVELCompilationUnit unit = dialect.getMVELCompilationUnit( text,
analysis,
null,
null,
variableClasses,
context );
- MVELAction expr = new MVELAction( unit, context.getDialect().getId() );
- expr.setVariableNames(analysis.getNotBoundedIdentifiers());
+ MVELAction expr = new MVELAction( unit, context.getDialect().getId() );
+ expr.setVariableNames(variableNames);
+
+
action.setMetaData("Action", expr );
MVELDialectRuntimeData data = (MVELDialectRuntimeData) context.getPkg().getDialectRuntimeRegistry().getDialectData( dialect.getId() );
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/process/builder/StoreNodeBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/process/builder/StoreNodeBuilder.java 2009-02-25 00:21:46 UTC (rev 25411)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/process/builder/StoreNodeBuilder.java 2009-02-25 00:45:47 UTC (rev 25412)
@@ -7,6 +7,7 @@
import org.drools.lang.descr.ProcessDescr;
import org.drools.rule.builder.ProcessBuildContext;
import org.drools.workflow.core.impl.DroolsConsequenceAction;
+import org.drools.workflow.core.impl.NodeImpl;
import org.drools.workflow.core.node.ActionNode;
public class StoreNodeBuilder
@@ -24,7 +25,7 @@
Dialect dialect = context.getDialectRegistry().getDialect( action.getDialect() );
- dialect.getActionBuilder().build( context, action, actionDescr );
+ dialect.getActionBuilder().build( context, action, actionDescr, (NodeImpl) node );
}
}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaActionBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaActionBuilderTest.java 2009-02-25 00:21:46 UTC (rev 25411)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaActionBuilderTest.java 2009-02-25 00:45:47 UTC (rev 25412)
@@ -58,7 +58,7 @@
DroolsAction action = new DroolsConsequenceAction("java", null);
actionNode.setAction(action);
- javaDialect.getActionBuilder().build( context, action, actionDescr );
+ javaDialect.getActionBuilder().build( context, action, actionDescr, actionNode );
javaDialect.addProcess( context );
javaDialect.compileAll();
assertEquals( 0, javaDialect.getResults().size() );
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELActionBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELActionBuilderTest.java 2009-02-25 00:21:46 UTC (rev 25411)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELActionBuilderTest.java 2009-02-25 00:45:47 UTC (rev 25412)
@@ -51,7 +51,8 @@
final MVELActionBuilder builder = new MVELActionBuilder();
builder.build( context,
action,
- actionDescr );
+ actionDescr,
+ actionNode );
final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage( pkgBuilder.getPackage() );
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELDecisionBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELDecisionBuilderTest.java 2009-02-25 00:21:46 UTC (rev 25411)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELDecisionBuilderTest.java 2009-02-25 00:45:47 UTC (rev 25412)
@@ -52,7 +52,8 @@
final MVELActionBuilder builder = new MVELActionBuilder();
builder.build( context,
action,
- actionDescr );
+ actionDescr,
+ actionNode );
final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage( pkgBuilder.getPackage() );
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/ContextResolver.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/ContextResolver.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/ContextResolver.java 2009-02-25 00:45:47 UTC (rev 25412)
@@ -0,0 +1,7 @@
+package org.drools.process.core;
+
+public interface ContextResolver {
+
+ Context resolveContext(String contextId, Object param);
+
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/ObjectDataType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/ObjectDataType.java 2009-02-25 00:21:46 UTC (rev 25411)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/ObjectDataType.java 2009-02-25 00:45:47 UTC (rev 25412)
@@ -85,6 +85,6 @@
}
public String getStringType() {
- return className == null ? "Object" : className;
+ return className == null ? "java.lang.Object" : className;
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/impl/ProcessImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/impl/ProcessImpl.java 2009-02-25 00:21:46 UTC (rev 25411)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/impl/ProcessImpl.java 2009-02-25 00:45:47 UTC (rev 25412)
@@ -26,6 +26,7 @@
import org.drools.io.Resource;
import org.drools.process.core.Context;
import org.drools.process.core.ContextContainer;
+import org.drools.process.core.ContextResolver;
import org.drools.process.core.Process;
import org.drools.process.core.context.AbstractContext;
@@ -34,7 +35,7 @@
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class ProcessImpl implements Process, Serializable {
+public class ProcessImpl implements Process, Serializable, ContextResolver {
private static final long serialVersionUID = 400L;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/NodeImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/NodeImpl.java 2009-02-25 00:21:46 UTC (rev 25411)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/NodeImpl.java 2009-02-25 00:45:47 UTC (rev 25412)
@@ -26,6 +26,7 @@
import org.drools.definition.process.Connection;
import org.drools.definition.process.NodeContainer;
import org.drools.process.core.Context;
+import org.drools.process.core.ContextResolver;
import org.drools.workflow.core.Node;
/**
@@ -33,7 +34,7 @@
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public abstract class NodeImpl implements Node, Serializable {
+public abstract class NodeImpl implements Node, Serializable, ContextResolver {
private static final long serialVersionUID = 4L;
More information about the jboss-svn-commits
mailing list