[jboss-svn-commits] JBL Code SVN: r13271 - in labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src: main/java/org/drools/rule/builder/dialect/java and 5 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Jul 9 15:20:21 EDT 2007
Author: pombredanne
Date: 2007-07-09 15:20:21 -0400 (Mon, 09 Jul 2007)
New Revision: 13271
Added:
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/xml/test_ParseComplex.xml
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/xml/test_complex.drl
Modified:
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAccumulateBuilder.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELExprAnalyzer.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/integrationtests/AccumulateTest.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/xml/DumperTest.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/xml/DumperTestHelper.java
labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/xml/test_ParseRule.xml
Log:
Ported r13267 from trunk to branch mvel-tooling-2007-06-30
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java 2007-07-09 19:14:49 UTC (rev 13270)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java 2007-07-09 19:20:21 UTC (rev 13271)
@@ -233,12 +233,11 @@
public void visitNotDescr(final NotDescr descr) {
this.template = new String();
- if ( descr.getDescrs().isEmpty() ) {
- this.template = "\t not " + processDescrList( descr.getDescrs() );
+ if ( !descr.getDescrs().isEmpty() ) {
+ this.template = "\t not ( " + processDescrList( descr.getDescrs() ) +")";
} else {
this.template = "";
}
-
}
public void visitOrDescr(final OrDescr descr) {
@@ -283,13 +282,22 @@
public void visitQueryDescr(final QueryDescr descr) {
this.template = new String();
- this.template = "<query name=\"" + descr.getName() + "\">" + "<lhs>" + processDescrList( descr.getLhs().getDescrs() ) + "</lhs>" + "</query>";
+ this.template = "query \"" + descr.getName() + "\"" + processDescrList( descr.getLhs().getDescrs() ) + "end";
}
+
private String processRules(final List rules) {
String ruleList = "";
+ Object ruleobj;
for ( final Iterator iterator = rules.iterator(); iterator.hasNext(); ) {
- final RuleDescr ruleDescr = (RuleDescr) iterator.next();
+ ruleobj = iterator.next();
+ if ( ruleobj instanceof QueryDescr ) {
+ visitQueryDescr((QueryDescr) ruleobj);
+ ruleList += this.template;
+ break;
+ }
+
+ final RuleDescr ruleDescr = (RuleDescr) ruleobj;
String rule = "rule \"" + ruleDescr.getName() + "\" " + DrlDumper.eol;
final String attribute = processAttribute( ruleDescr.getAttributes() );
String lhs = "";
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java 2007-07-09 19:14:49 UTC (rev 13270)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java 2007-07-09 19:20:21 UTC (rev 13271)
@@ -48,15 +48,15 @@
AccumulateBuilder {
public RuleConditionElement build(final RuleBuildContext context,
- final BaseDescr descr) {
+ final BaseDescr descr) {
return build( context,
descr,
null );
}
public RuleConditionElement build(final RuleBuildContext context,
- final BaseDescr descr,
- final Pattern prefixPattern) {
+ final BaseDescr descr,
+ final Pattern prefixPattern) {
final AccumulateDescr accumDescr = (AccumulateDescr) descr;
@@ -119,24 +119,32 @@
final String className = "Accumulate" + context.getNextId();
accumDescr.setClassName( className );
- final JavaAnalysisResult analysis1 = (JavaAnalysisResult) context.getDialect().analyzeBlock( context,
+ final JavaAnalysisResult initCodeAnalysis = (JavaAnalysisResult) context.getDialect().analyzeBlock( context,
accumDescr,
accumDescr.getInitCode() );
- final Dialect.AnalysisResult analysis2 = context.getDialect().analyzeBlock( context,
+ final Dialect.AnalysisResult actionCodeAnalysis = context.getDialect().analyzeBlock( context,
accumDescr,
accumDescr.getActionCode() );
- final Dialect.AnalysisResult analysis3 = context.getDialect().analyzeExpression( context,
+ final Dialect.AnalysisResult resultCodeAnalysis = context.getDialect().analyzeExpression( context,
accumDescr,
accumDescr.getResultCode() );
- final List requiredDeclarations = new ArrayList( analysis1.getBoundIdentifiers()[0] );
- requiredDeclarations.addAll( analysis2.getBoundIdentifiers()[0] );
- requiredDeclarations.addAll( analysis3.getBoundIdentifiers()[0] );
+ final List requiredDeclarations = new ArrayList( initCodeAnalysis.getBoundIdentifiers()[0] );
+ requiredDeclarations.addAll( actionCodeAnalysis.getBoundIdentifiers()[0] );
+ requiredDeclarations.addAll( resultCodeAnalysis.getBoundIdentifiers()[0] );
- final List requiredGlobals = new ArrayList( analysis1.getBoundIdentifiers()[1] );
- requiredGlobals.addAll( analysis2.getBoundIdentifiers()[1] );
- requiredGlobals.addAll( analysis3.getBoundIdentifiers()[1] );
+ final List requiredGlobals = new ArrayList( initCodeAnalysis.getBoundIdentifiers()[1] );
+ requiredGlobals.addAll( actionCodeAnalysis.getBoundIdentifiers()[1] );
+ requiredGlobals.addAll( resultCodeAnalysis.getBoundIdentifiers()[1] );
+ if ( accumDescr.getReverseCode() != null ) {
+ final Dialect.AnalysisResult reverseCodeAnalysis = context.getDialect().analyzeBlock( context,
+ accumDescr,
+ accumDescr.getActionCode() );
+ requiredDeclarations.addAll( reverseCodeAnalysis.getBoundIdentifiers()[0] );
+ requiredGlobals.addAll( reverseCodeAnalysis.getBoundIdentifiers()[1] );
+ }
+
final Declaration[] declarations = new Declaration[requiredDeclarations.size()];
for ( int i = 0, size = requiredDeclarations.size(); i < size; i++ ) {
declarations[i] = context.getDeclarationResolver().getDeclaration( (String) requiredDeclarations.get( i ) );
@@ -157,15 +165,15 @@
map.put( "innerDeclarations",
sourceDeclArr );
- final String initCode = this.fixInitCode( analysis1,
+ final String initCode = this.fixInitCode( initCodeAnalysis,
accumDescr.getInitCode() );
final String actionCode = accumDescr.getActionCode();
final String resultCode = accumDescr.getResultCode();
- String[] attributesTypes = new String[analysis1.getLocalVariablesMap().size()];
- String[] attributes = new String[analysis1.getLocalVariablesMap().size()];
+ String[] attributesTypes = new String[initCodeAnalysis.getLocalVariablesMap().size()];
+ String[] attributes = new String[initCodeAnalysis.getLocalVariablesMap().size()];
int index = 0;
- for ( Iterator it = analysis1.getLocalVariablesMap().entrySet().iterator(); it.hasNext(); ) {
+ for ( Iterator it = initCodeAnalysis.getLocalVariablesMap().entrySet().iterator(); it.hasNext(); ) {
Map.Entry entry = (Map.Entry) it.next();
attributes[index] = (String) entry.getKey();
attributesTypes[index] = ((JavaLocalDeclarationDescr) entry.getValue()).getType();
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAccumulateBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAccumulateBuilder.java 2007-07-09 19:14:49 UTC (rev 13270)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAccumulateBuilder.java 2007-07-09 19:20:21 UTC (rev 13271)
@@ -69,13 +69,15 @@
if ( sourcePattern == null ) {
return null;
}
+
+ MVELDialect dialect = (MVELDialect) context.getDialect();
final Declaration[] sourceDeclArr = (Declaration[]) sourcePattern.getOuterDeclarations().values().toArray( new Declaration[0] );
final DroolsMVELFactory factory = new DroolsMVELFactory( context.getDeclarationResolver().getDeclarations(),
sourcePattern.getOuterDeclarations(),
context.getPkg().getGlobals() );
- factory.setNextFactory( ((MVELDialect) context.getDialect()).getClassImportResolverFactory() );
+ factory.setNextFactory( dialect.getClassImportResolverFactory() );
Accumulator accumulator = null;
Declaration[] declarations = null;
@@ -102,37 +104,53 @@
function );
} else {
// it is a custom accumulate
- final Dialect.AnalysisResult analysis1 = context.getDialect().analyzeBlock( context,
+ final Dialect.AnalysisResult initCodeAnalysis = context.getDialect().analyzeBlock( context,
accumDescr,
accumDescr.getInitCode() );
- final Dialect.AnalysisResult analysis2 = context.getDialect().analyzeBlock( context,
+ final Dialect.AnalysisResult actionCodeAnalysis = context.getDialect().analyzeBlock( context,
accumDescr,
accumDescr.getActionCode() );
- final Dialect.AnalysisResult analysis3 = context.getDialect().analyzeExpression( context,
+ final Dialect.AnalysisResult resultCodeAnalysis = context.getDialect().analyzeExpression( context,
accumDescr,
accumDescr.getResultCode() );
- final List requiredDeclarations = new ArrayList( analysis1.getBoundIdentifiers()[0] );
- requiredDeclarations.addAll( analysis2.getBoundIdentifiers()[0] );
- requiredDeclarations.addAll( analysis3.getBoundIdentifiers()[0] );
+ final List requiredDeclarations = new ArrayList( initCodeAnalysis.getBoundIdentifiers()[0] );
+ requiredDeclarations.addAll( actionCodeAnalysis.getBoundIdentifiers()[0] );
+ requiredDeclarations.addAll( resultCodeAnalysis.getBoundIdentifiers()[0] );
+ if ( accumDescr.getReverseCode() != null ) {
+ final Dialect.AnalysisResult reverseCodeAnalysis = context.getDialect().analyzeBlock( context,
+ accumDescr,
+ accumDescr.getActionCode() );
+ requiredDeclarations.addAll( reverseCodeAnalysis.getBoundIdentifiers()[0] );
+ }
+
declarations = new Declaration[requiredDeclarations.size()];
for ( int i = 0, size = requiredDeclarations.size(); i < size; i++ ) {
declarations[i] = context.getDeclarationResolver().getDeclaration( (String) requiredDeclarations.get( i ) );
}
+
+ final Serializable init = dialect.compile( (String) accumDescr.getInitCode(), initCodeAnalysis, null, context );
+ final Serializable action = dialect.compile((String) accumDescr.getActionCode(), actionCodeAnalysis, null, context );
- final Serializable init = MVEL.compileExpression( (String) accumDescr.getInitCode(),
- ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses() );
- final Serializable action = MVEL.compileExpression( (String) accumDescr.getActionCode(),
- ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses() );
+
+
+
+// final Serializable init = MVEL.compileExpression( (String) accumDescr.getInitCode(),
+// ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses() );
+// final Serializable action = MVEL.compileExpression( (String) accumDescr.getActionCode(),
+// ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses() );
Serializable reverse = null;
if ( accumDescr.getReverseCode() != null ) {
- reverse = MVEL.compileExpression( (String) accumDescr.getReverseCode(),
- ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses() );
+// reverse = MVEL.compileExpression( (String) accumDescr.getReverseCode(),
+// ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses() );
+ reverse = dialect.compile( (String) accumDescr.getReverseCode(), resultCodeAnalysis, null, context );
}
- final Serializable result = MVEL.compileExpression( (String) accumDescr.getResultCode(),
- ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses() );
+// final Serializable result = MVEL.compileExpression( (String) accumDescr.getResultCode(),
+// ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses() );
+ final Serializable result = dialect.compile((String) accumDescr.getResultCode(), resultCodeAnalysis, null, context );
+
accumulator = new MVELAccumulator( factory,
init,
action,
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java 2007-07-09 19:14:49 UTC (rev 13270)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java 2007-07-09 19:20:21 UTC (rev 13271)
@@ -9,6 +9,7 @@
import org.drools.base.mvel.MVELConsequence;
import org.drools.compiler.RuleError;
import org.drools.rule.builder.ConsequenceBuilder;
+import org.drools.rule.builder.Dialect;
import org.drools.rule.builder.RuleBuildContext;
import org.drools.spi.KnowledgeHelper;
import org.mvel.ASTNode;
@@ -27,15 +28,12 @@
//private final Interceptor assertInterceptor;
//private final Interceptor modifyInterceptor;
- private final Map interceptors;
+
private final Map macros;
public MVELConsequenceBuilder() {
- this.interceptors = new HashMap(1);
- this.interceptors.put( "Modify", new ModifyInterceptor() );
+ macros = new HashMap( 4 );
- macros = new HashMap(4);
-
macros.put( "insert",
new Macro() {
public String doMacro() {
@@ -70,38 +68,48 @@
context.getBuildStack().push( context.getRule().getLhs() );
try {
+ MVELDialect dialect = (MVELDialect) context.getDialect();
final DroolsMVELFactory factory = new DroolsMVELFactory( context.getDeclarationResolver().getDeclarations(),
null,
context.getPkg().getGlobals() );
- MVELDialect dialect = (MVELDialect) context.getDialect();
- factory.setNextFactory( dialect.getClassImportResolverFactory() );
+ factory.setNextFactory( dialect.getClassImportResolverFactory() );
+
MacroProcessor macroProcessor = new MacroProcessor();
macroProcessor.setMacros( macros );
-//MVEL: Compiler change
-// final Serializable expr = MVEL.compileExpression( macroProcessor.parse( delimitExpressions( (String) context.getRuleDescr().getConsequence() )),
-// ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses(), this.interceptors );
+ //MVEL: Compiler change (commented after incomming changes from r13267 port
+// String pkg = "";
+// if (context.getPkg()!= null && context.getPkg().getName()!= null
+// && context.getPkg().getName().length()>0) {
+// pkg = context.getPkg().getName()+".";
+// }
+// String sourceFile = pkg + context.getRuleDescr().getClassName();
+//
+// ParserContext parserContext = new ParserContext();
+// parserContext.setImports(dialect.getClassImportResolverFactory().getImportedClasses());
+//
+// parserContext.setInterceptors(this.interceptors);
+// parserContext.setSourceFile(sourceFile);
+// parserContext.setDebugSymbols( true );
+//
+// ExpressionCompiler parser = new ExpressionCompiler(macroProcessor.parse( delimitExpressions( (String) context.getRuleDescr().getConsequence() )));
+// CompiledExpression cExpr = parser.compile();
+//
+// final Serializable expr = cExpr;
- String pkg = "";
- if (context.getPkg()!= null && context.getPkg().getName()!= null
- && context.getPkg().getName().length()>0) {
- pkg = context.getPkg().getName()+".";
- }
- String sourceFile = pkg + context.getRuleDescr().getClassName();
+ String text = macroProcessor.parse( delimitExpressions( (String) context.getRuleDescr().getConsequence() ) );
- ParserContext parserContext = new ParserContext();
- parserContext.setImports(dialect.getClassImportResolverFactory().getImportedClasses());
+ Dialect.AnalysisResult analysis = dialect.analyzeBlock( context,
+ context.getRuleDescr(),
+ dialect.getInterceptors(),
+ text );
- parserContext.setInterceptors(this.interceptors);
- parserContext.setSourceFile(sourceFile);
- parserContext.setDebugSymbols( true );
+ final Serializable expr = dialect.compile( text,
+ analysis,
+ dialect.getInterceptors(),
+ context );
- ExpressionCompiler parser = new ExpressionCompiler(macroProcessor.parse( delimitExpressions( (String) context.getRuleDescr().getConsequence() )));
- CompiledExpression cExpr = parser.compile();
-
- final Serializable expr = cExpr;
-
context.getRule().setConsequence( new MVELConsequence( expr,
factory ) );
} catch ( final Exception e ) {
@@ -165,44 +173,5 @@
return result.toString();
}
- public static class AssertInterceptor
- implements
- Interceptor {
- public int doBefore(ASTNode node,
- VariableResolverFactory factory) {
- return 0;
}
- public int doAfter(Object value,
- ASTNode node,
- VariableResolverFactory factory) {
- ((DroolsMVELFactory) factory).getWorkingMemory().insert( value );
- return 0;
- }
- }
-
- public static class ModifyInterceptor
- implements
- Interceptor {
- public int doBefore(ASTNode node,
- VariableResolverFactory factory) {
- Object object = ((WithNode) node). getNestedStatement().getValue( null,
- factory );
-
- DroolsMVELKnowledgeHelper resolver = ( DroolsMVELKnowledgeHelper ) factory.getVariableResolver( "drools" );
- KnowledgeHelper helper = ( KnowledgeHelper ) resolver.getValue();
- helper.modifyRetract( object );
- return 0;
- }
-
- public int doAfter(Object value,
- ASTNode node,
- VariableResolverFactory factory) {
- DroolsMVELKnowledgeHelper resolver = ( DroolsMVELKnowledgeHelper ) factory.getVariableResolver( "drools" );
- KnowledgeHelper helper = ( KnowledgeHelper ) resolver.getValue();
- helper.modifyInsert( value );
- return 0;
- }
- }
-
-}
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java 2007-07-09 19:14:49 UTC (rev 13270)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java 2007-07-09 19:20:21 UTC (rev 13271)
@@ -11,6 +11,8 @@
import org.drools.base.ClassFieldExtractorCache;
import org.drools.base.TypeResolver;
+import org.drools.base.mvel.DroolsMVELFactory;
+import org.drools.base.mvel.DroolsMVELKnowledgeHelper;
import org.drools.commons.jci.readers.MemoryResourceReader;
import org.drools.compiler.ImportError;
import org.drools.compiler.PackageBuilder;
@@ -45,10 +47,15 @@
import org.drools.rule.builder.SalienceBuilder;
import org.drools.rule.builder.dialect.java.JavaDialect;
import org.drools.spi.DeclarationScopeResolver;
+import org.drools.spi.KnowledgeHelper;
import org.drools.util.StringUtils;
+import org.mvel.ASTNode;
import org.mvel.AbstractParser;
import org.mvel.ExpressionCompiler;
import org.mvel.ParserContext;
+import org.mvel.ast.WithNode;
+import org.mvel.integration.Interceptor;
+import org.mvel.integration.VariableResolverFactory;
import org.mvel.integration.impl.ClassImportResolverFactory;
import org.mvel.integration.impl.StaticMethodImportResolverFactory;
@@ -73,6 +80,8 @@
//private final JavaRuleClassBuilder rule = new JavaRuleClassBuilder();
private final MVELFromBuilder from = new MVELFromBuilder();
+ private final Map interceptors;
+
private Map lineMappings;
private List results;
@@ -99,7 +108,7 @@
private Map builders;
public MVELDialect(final PackageBuilder builder) {
- AbstractParser.setLanguageLevel(4);
+ AbstractParser.setLanguageLevel( 4 );
this.pkg = builder.getPackage();
this.configuration = builder.getPackageBuilderConfiguration();
@@ -116,6 +125,10 @@
initBuilder();
+ this.interceptors = new HashMap( 1 );
+ this.interceptors.put( "Modify",
+ new ModifyInterceptor() );
+
this.importFactory = new ClassImportResolverFactory();
this.staticImportFactory = new StaticMethodImportResolverFactory();
this.importFactory.setNextFactory( this.staticImportFactory );
@@ -155,6 +168,8 @@
this.builders.put( EvalDescr.class,
getEvalBuilder() );
+
+
}
public void init(Package pkg) {
@@ -265,6 +280,16 @@
public Dialect.AnalysisResult analyzeBlock(RuleBuildContext context,
BaseDescr descr,
String text) {
+ return analyzeBlock( context,
+ descr,
+ null,
+ text );
+ }
+
+ public Dialect.AnalysisResult analyzeBlock(RuleBuildContext context,
+ BaseDescr descr,
+ Map interceptors,
+ String text) {
Dialect.AnalysisResult result = null;
try {
result = this.analyzer.analyzeExpression( context,
@@ -279,24 +304,36 @@
return result;
}
- public Serializable compile(final String text, final Dialect.AnalysisResult analysis, final RuleBuildContext context) {
- final ParserContext parserContext = new ParserContext( getClassImportResolverFactory().getImportedClasses(), null, null);
+ public Serializable compile(final String text,
+ final Dialect.AnalysisResult analysis,
+ final Map interceptors,
+ final RuleBuildContext context) {
+ final ParserContext parserContext = new ParserContext( getClassImportResolverFactory().getImportedClasses(),
+ null,
+ null );
parserContext.setStrictTypeEnforcement( true );
+ if ( interceptors != null ) {
+ parserContext.setInterceptors( interceptors );
+ }
List list[] = analysis.getBoundIdentifiers();
DeclarationScopeResolver resolver = context.getDeclarationResolver();
for ( Iterator it = list[0].iterator(); it.hasNext(); ) {
String identifier = (String) it.next();
Class cls = resolver.getDeclaration( identifier ).getExtractor().getExtractToClass();
- parserContext.addInput( identifier, cls );
+ parserContext.addInput( identifier,
+ cls );
}
Map globalTypes = context.getPkg().getGlobals();
for ( Iterator it = list[1].iterator(); it.hasNext(); ) {
String identifier = (String) it.next();
- parserContext.addInput( identifier, ( Class ) globalTypes.get( identifier ) );
+ parserContext.addInput( identifier,
+ (Class) globalTypes.get( identifier ) );
}
+ parserContext.addInput( "drools", KnowledgeHelper.class );
+
ExpressionCompiler compiler = new ExpressionCompiler( text );
return compiler.compile( parserContext );
}
@@ -366,9 +403,52 @@
return this.typeResolver;
}
+ public Map getInterceptors() {
+ return this.interceptors;
+ }
+
public String getId() {
//MVEL: Compiler change
return ID;
}
+ public static class AssertInterceptor
+ implements
+ Interceptor {
+ public int doBefore(ASTNode node,
+ VariableResolverFactory factory) {
+ return 0;
+ }
+
+ public int doAfter(Object value,
+ ASTNode node,
+ VariableResolverFactory factory) {
+ ((DroolsMVELFactory) factory).getWorkingMemory().insert( value );
+ return 0;
+ }
}
+
+public static class ModifyInterceptor
+ implements
+ Interceptor {
+ public int doBefore(ASTNode node,
+ VariableResolverFactory factory) {
+ Object object = ((WithNode) node).getNestedStatement().getValue( null,
+ factory );
+
+ DroolsMVELKnowledgeHelper resolver = (DroolsMVELKnowledgeHelper) factory.getVariableResolver( "drools" );
+ KnowledgeHelper helper = (KnowledgeHelper) resolver.getValue();
+ helper.modifyRetract( object );
+ return 0;
+ }
+
+ public int doAfter(Object value,
+ ASTNode node,
+ VariableResolverFactory factory) {
+ DroolsMVELKnowledgeHelper resolver = (DroolsMVELKnowledgeHelper) factory.getVariableResolver( "drools" );
+ KnowledgeHelper helper = (KnowledgeHelper) resolver.getValue();
+ helper.modifyInsert( value );
+ return 0;
+ }
+}
+}
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java 2007-07-09 19:14:49 UTC (rev 13270)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java 2007-07-09 19:20:21 UTC (rev 13271)
@@ -88,7 +88,7 @@
final EvalCondition eval = new EvalCondition( declarations );
- Serializable expr = ((MVELDialect) context.getDialect()).compile( (String) evalDescr.getContent(), analysis, context );
+ Serializable expr = ((MVELDialect) context.getDialect()).compile( (String) evalDescr.getContent(), analysis, null, context );
eval.setEvalExpression( new MVELEvalExpression( expr,
factory ) );
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELExprAnalyzer.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELExprAnalyzer.java 2007-07-09 19:14:49 UTC (rev 13270)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELExprAnalyzer.java 2007-07-09 19:20:21 UTC (rev 13271)
@@ -56,13 +56,15 @@
public MVELAnalysisResult analyzeExpression(final RuleBuildContext context,
final String expr,
final Set[] availableIdentifiers) throws RecognitionException {
- ExpressionCompiler compiler = new ExpressionCompiler( expr);
+ ExpressionCompiler compiler = new ExpressionCompiler( expr );
+
ParserContext parserContext = new ParserContext();
parserContext.setStrictTypeEnforcement( false );
MVELDialect dialect = (MVELDialect) context.getDialect( "mvel" );
parserContext.setImports( dialect.getClassImportResolverFactory().getImportedClasses() );
+ parserContext.setInterceptors( dialect.getInterceptors() );
- compiler.compile(parserContext);
+ compiler.compile( parserContext );
return analyze( compiler.getParserContextState().getInputs().keySet(),
availableIdentifiers );
@@ -82,7 +84,7 @@
* If an error occurs in the parser.
*/
private MVELAnalysisResult analyze(final Set identifiers,
- final Set[] availableIdentifiers) throws RecognitionException {
+ final Set[] availableIdentifiers) throws RecognitionException {
MVELAnalysisResult result = new MVELAnalysisResult();
result.setIdentifiers( new ArrayList( identifiers ) );
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java 2007-07-09 19:14:49 UTC (rev 13270)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java 2007-07-09 19:20:21 UTC (rev 13271)
@@ -77,6 +77,7 @@
final Serializable expr = dialect.compile( text,
analysis,
+ null,
context );
dataProvider = new MVELDataProvider( expr,
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java 2007-07-09 19:14:49 UTC (rev 13270)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java 2007-07-09 19:20:21 UTC (rev 13271)
@@ -73,7 +73,7 @@
predicateDescr,
predicateDescr.getContent() );
- final Serializable expr = ((MVELDialect) context.getDialect()).compile( (String) predicateDescr.getContent(), analysis, context );
+ final Serializable expr = ((MVELDialect) context.getDialect()).compile( (String) predicateDescr.getContent(), analysis, null, context );
predicate.setPredicateExpression( new MVELPredicateExpression( expr,
factory ) );
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java 2007-07-09 19:14:49 UTC (rev 13270)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java 2007-07-09 19:20:21 UTC (rev 13271)
@@ -73,7 +73,7 @@
returnValueRestrictionDescr,
returnValueRestrictionDescr.getContent() );
- final Serializable expr = ((MVELDialect) context.getDialect()).compile( (String) returnValueRestrictionDescr.getContent(), analysis, context );
+ final Serializable expr = ((MVELDialect) context.getDialect()).compile( (String) returnValueRestrictionDescr.getContent(), analysis, null, context );
returnValueRestriction.setReturnValueExpression( new MVELReturnValueExpression( expr,
factory ) );
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java 2007-07-09 19:14:49 UTC (rev 13270)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java 2007-07-09 19:20:21 UTC (rev 13271)
@@ -36,6 +36,7 @@
final Serializable expr = dialect.compile( (String) context.getRuleDescr().getSalience(),
analysis,
+ null,
context );
MVELSalienceExpression salience = new MVELSalienceExpression( expr,
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/integrationtests/AccumulateTest.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/integrationtests/AccumulateTest.java 2007-07-09 19:14:49 UTC (rev 13270)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/integrationtests/AccumulateTest.java 2007-07-09 19:20:21 UTC (rev 13271)
@@ -473,7 +473,7 @@
results.size() );
}
-
+
public void testAccumulateMax() throws Exception {
// read in the source
final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_AccumulateMax.drl" ) );
@@ -487,11 +487,11 @@
final Cheese[] cheese = new Cheese[]{new Cheese( "stilton",
4 ), new Cheese( "stilton",
- 2 ), new Cheese( "stilton",
- 3 ), new Cheese( "brie",
- 15 ), new Cheese( "brie",
- 17 ), new Cheese( "provolone",
- 8 )};
+ 2 ), new Cheese( "stilton",
+ 3 ), new Cheese( "brie",
+ 15 ), new Cheese( "brie",
+ 17 ), new Cheese( "provolone",
+ 8 )};
final Person bob = new Person( "Bob",
"stilton" );
@@ -542,7 +542,7 @@
results.size() );
}
-
+
public void testAccumulateMin() throws Exception {
// read in the source
final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_AccumulateMin.drl" ) );
@@ -556,11 +556,11 @@
final Cheese[] cheese = new Cheese[]{new Cheese( "stilton",
8 ), new Cheese( "stilton",
- 10 ), new Cheese( "stilton",
+ 10 ), new Cheese( "stilton",
9 ), new Cheese( "brie",
- 4 ), new Cheese( "brie",
- 1 ), new Cheese( "provolone",
- 8 )};
+ 4 ), new Cheese( "brie",
+ 1 ), new Cheese( "provolone",
+ 8 )};
final Person bob = new Person( "Bob",
"stilton" );
@@ -611,7 +611,7 @@
results.size() );
}
-
+
public void testAccumulateCount() throws Exception {
// read in the source
final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_AccumulateCount.drl" ) );
@@ -625,11 +625,11 @@
final Cheese[] cheese = new Cheese[]{new Cheese( "stilton",
8 ), new Cheese( "stilton",
- 10 ), new Cheese( "stilton",
+ 10 ), new Cheese( "stilton",
9 ), new Cheese( "brie",
- 4 ), new Cheese( "brie",
- 1 ), new Cheese( "provolone",
- 8 )};
+ 4 ), new Cheese( "brie",
+ 1 ), new Cheese( "provolone",
+ 8 )};
final Person bob = new Person( "Bob",
"stilton" );
@@ -681,7 +681,7 @@
results.size() );
}
-
+
public void testAccumulateWithFromChaining() throws Exception {
// read in the source
final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_AccumulateWithFromChaining.drl" ) );
@@ -695,20 +695,20 @@
final Cheese[] cheese = new Cheese[]{new Cheese( "stilton",
8 ), new Cheese( "stilton",
- 10 ), new Cheese( "stilton",
+ 10 ), new Cheese( "stilton",
9 ), new Cheese( "brie",
- 4 ), new Cheese( "brie",
- 1 ), new Cheese( "provolone",
- 8 )};
+ 4 ), new Cheese( "brie",
+ 1 ), new Cheese( "provolone",
+ 8 )};
Cheesery cheesery = new Cheesery();
-
- for( int i = 0; i < cheese.length; i++ ) {
+
+ for ( int i = 0; i < cheese.length; i++ ) {
cheesery.addCheese( cheese[i] );
}
-
+
FactHandle cheeseryHandle = wm.insert( cheesery );
-
+
final Person bob = new Person( "Bob",
"stilton" );
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java 2007-07-09 19:14:49 UTC (rev 13270)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java 2007-07-09 19:20:21 UTC (rev 13271)
@@ -36,7 +36,7 @@
MVELDialect mvelDialect = new MVELDialect( new PackageBuilder( pkg ) );
DialectRegistry registry = new DialectRegistry();
- registry.addDialect( "default",
+ registry.addDialect( "mvel",
mvelDialect );
final PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/xml/DumperTest.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/xml/DumperTest.java 2007-07-09 19:14:49 UTC (rev 13270)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/xml/DumperTest.java 2007-07-09 19:20:21 UTC (rev 13271)
@@ -11,7 +11,6 @@
public class DumperTest extends TestCase {
-
// Xml Dumper test
public void testRoundTripAccumulateXml() throws Exception {
@@ -21,7 +20,7 @@
public void testRoundTripCollectXml() throws Exception {
DumperTestHelper.XmlFile( "test_ParseCollect.xml" );
}
-
+
public void testRoundTripExistsXml() throws Exception {
DumperTestHelper.XmlFile( "test_ParseExists.xml" );
}
@@ -67,4 +66,15 @@
public void testRoundTripSimpleRuleDrl() throws Exception {
DumperTestHelper.DrlFile( "test_simplerule.drl" );
}
+
+ public void testRoundTripPComplexDrl() throws Exception {
+ DumperTestHelper.DrlFile( "test_complex.drl" );
+ }
+
+ public void testRoundTripPComplexXml() throws Exception {
+ DumperTestHelper.XmlFile( "test_ParseComplex.xml" );
+ }
+
+
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/xml/DumperTestHelper.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/xml/DumperTestHelper.java 2007-07-09 19:14:49 UTC (rev 13270)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/xml/DumperTestHelper.java 2007-07-09 19:20:21 UTC (rev 13271)
@@ -27,8 +27,9 @@
final XmlDumper dumper = new XmlDumper();
final String result = dumper.dump( pkgOriginal );
-
+
String buffer = readFile( filename );
+
assertEqualsIgnoreWhitespace( buffer,
result );
assertNotNull( result );
Copied: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/xml/test_ParseComplex.xml (from rev 13267, labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseComplex.xml)
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/xml/test_ParseComplex.xml (rev 0)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/xml/test_ParseComplex.xml 2007-07-09 19:20:21 UTC (rev 13271)
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package name="pt.inescporto.cec.rules"
+ xmlns="http://drools.org/drools-4.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:schemaLocation="http://drools.org/drools-4.0 drools-4.0.xsd">
+ <import name="pt.inescporto.cec.entities.SetupInUse"/>
+ <import name="pt.inescporto.cec.entities.SetupUse"/>
+ <import name="pt.inescporto.cec.entities.ArtigoProducao"/>
+ <import name="pt.inescporto.cec.entities.Parameter"/>
+ <import name="pt.inescporto.cec.entities.BestParms"/>
+ <import name="pt.inescporto.cec.entities.AccaoInspeccaoOperacao"/>
+ <import name="pt.inescporto.cec.entities.MelhorEmNaoConformidades"/>
+ <import name="pt.inescporto.cec.entities.OtherInspectionMethod"/>
+ <import name="pt.inescporto.cec.entities.AccaoInspeccao"/>
+ <rule name="ruleBestProductionOrderCreator">
+ <lhs>
+ <pattern object-type="AccaoInspeccao">
+ <field-binding field-name="recursoID" identifier="resource"/>
+ <field-constraint field-name="artigoID">
+ <literal-restriction evaluator="==" value="3"/>
+ </field-constraint>
+ <field-binding field-name="operacaoID" identifier="operation"/>
+ <field-binding field-name="ordemProducaoID" identifier="ProductionOrder"/>
+ <field-binding field-name="recursoID" identifier="resourceID"/>
+ <field-binding field-name="accaoInspeccaoID" identifier="InspectionAction"/>
+ </pattern>
+ <pattern object-type="AccaoInspeccaoOperacao">
+ <field-binding field-name="inspAccaoOperacaoID" identifier="inspectionActionOperation"/>
+ <field-constraint field-name="inspectionActionID">
+ <variable-restriction evaluator="==" identifier="InspectionAction"/>
+ </field-constraint>
+ </pattern>
+ <pattern object-type="OtherInspectionMethod">
+ <field-binding field-name="numeroNaoConformidades" identifier="NCNumber"/>
+ <field-constraint field-name="inspAccaoOperacaoID">
+ <variable-restriction evaluator="==" identifier="inspectionActionOperation"/>
+ </field-constraint>
+ </pattern>
+ <not>
+ <pattern object-type="MelhorEmNaoConformidades">
+ <field-constraint field-name="operacaoID">
+ <variable-restriction evaluator="==" identifier="operation"/>
+ </field-constraint>
+ <field-constraint field-name="recursoID">
+ <variable-restriction evaluator="==" identifier="resource"/>
+ </field-constraint>
+ </pattern>
+ </not>
+ </lhs>
+ <rhs>insert(new MelhorEmNaoConformidades(ProductionOrder,NCNumber,operation,resource));</rhs>
+ </rule>
+ <rule name="Best Checker">
+ <lhs>
+ <pattern object-type="AccaoInspeccao">
+ <field-constraint field-name="artigoID">
+ <literal-restriction evaluator="==" value="3"/>
+ </field-constraint>
+ <field-binding field-name="recursoID" identifier="resource"/>
+ <field-binding field-name="operacaoID" identifier="operation"/>
+ <field-binding field-name="ordemProducaoID" identifier="ProductionOrder"/>
+ <field-binding field-name="recursoID" identifier="resourceID"/>
+ <field-binding field-name="accaoInspeccaoID" identifier="InspectionAction"/>
+ </pattern>
+ <pattern object-type="AccaoInspeccaoOperacao">
+ <field-binding field-name="inspAccaoOperacaoID" identifier="inspectionActionOperation"/>
+ <field-constraint field-name="inspectionActionID">
+ <variable-restriction evaluator="==" identifier="InspectionAction"/>
+ </field-constraint>
+ </pattern>
+ <pattern object-type="OtherInspectionMethod">
+ <field-binding field-name="numeroNaoConformidades" identifier="NCNumber"/>
+ <field-constraint field-name="inspAccaoOperacaoID">
+ <variable-restriction evaluator="==" identifier="inspectionActionOperation"/>
+ </field-constraint>
+ </pattern>
+ <pattern identifier="TheBest" object-type="MelhorEmNaoConformidades">
+ <field-constraint field-name="operacaoID">
+ <variable-restriction evaluator="==" identifier="operation"/>
+ </field-constraint>
+ <field-constraint field-name="recursoID">
+ <variable-restriction evaluator="==" identifier="resource"/>
+ </field-constraint>
+ <field-constraint field-name="numeroDefeitos">
+ <variable-restriction evaluator=">" identifier="NCNumber"/>
+ </field-constraint>
+ </pattern>
+ </lhs>
+ <rhs>TheBest.setNumeroDefeitos(NCNumber);
+TheBest.setOrdemProducaoID(ProductionOrder);
+update(TheBest);
+</rhs>
+ </rule>
+ <rule name="ruleBestParametersCreator">
+ <rule-attribute name="salience" value="-100"/>
+ <lhs>
+ <pattern object-type="MelhorEmNaoConformidades">
+ <field-binding field-name="ordemProducaoID" identifier="$poID"/>
+ <field-binding field-name="numeroDefeitos" identifier="$NC"/>
+ </pattern>
+ <pattern object-type="SetupInUse">
+ <field-binding field-name="setupUseID" identifier="$setup"/>
+ <field-constraint field-name="productionOrderID">
+ <variable-restriction evaluator="==" identifier="$poID"/>
+ </field-constraint>
+ </pattern>
+ <pattern identifier="$p" object-type="Parameter">
+ <field-binding field-name="parameterID" identifier="$parID"/>
+ <field-constraint field-name="setupUseID">
+ <variable-restriction evaluator="==" identifier="$setup"/>
+ </field-constraint>
+ </pattern>
+ <not>
+ <pattern object-type="BestParms">
+ <field-constraint field-name="parameterID">
+ <variable-restriction evaluator="==" identifier="$parID"/>
+ </field-constraint>
+ </pattern>
+ </not>
+ </lhs>
+ <rhs>BestParms newBest=new BestParms();
+newBest.setParameterID($parID);
+newBest.setNominalValue(new Float($p.getNominalValue()));
+newBest.setMaxLimit(new Float($p.getMaxLimit()));
+newBest.setMinLimit(new Float($p.getMinLimit()));
+newBest.setMaxLimitAlarm(new Float($p.getMaxLimitAlarm()));
+newBest.setMinLimitAlarm(new Float($p.getMinLimitAlarm()));
+newBest.setNonConformities(new Float($NC));
+insert(newBest);
+</rhs>
+ </rule>
+ <rule name="ruleBestParametersChecker">
+ <rule-attribute name="salience" value="-100"/>
+ <lhs>
+ <pattern object-type="MelhorEmNaoConformidades">
+ <field-binding field-name="ordemProducaoID" identifier="$poID"/>
+ <field-binding field-name="numeroDefeitos" identifier="$NC"/>
+ </pattern>
+ <pattern object-type="SetupInUse">
+ <field-binding field-name="setupUseID" identifier="$setup"/>
+ <field-constraint field-name="productionOrderID">
+ <variable-restriction evaluator="==" identifier="$poID"/>
+ </field-constraint>
+ </pattern>
+ <pattern identifier="$p" object-type="Parameter">
+ <field-binding field-name="parameterID" identifier="$parID"/>
+ <field-constraint field-name="setupUseID">
+ <variable-restriction evaluator="==" identifier="$setup"/>
+ </field-constraint>
+ </pattern>
+ <pattern identifier="$newBest" object-type="Parameter">
+ <field-constraint field-name="parameterID">
+ <variable-restriction evaluator="==" identifier="$parID"/>
+ </field-constraint>
+ <field-constraint field-name="nonConformities">
+ <variable-restriction evaluator=">" identifier="$NC"/>
+ </field-constraint>
+ </pattern>
+ </lhs>
+ <rhs>$newBest.setNominalValue(new Float(p.getNominalValue()));
+$newBest.setMaxLimit(new Float(p.getMaxLimit()));
+$newBest.setMinLimit(new Float(p.getMinLimit()));
+$newBest.setMaxLimitAlarm(new Float(p.getMaxLimitAlarm()));
+$newBest.setMinLimitAlarm(new Float(p.getMinLimitAlarm()));
+$newBest.setNonConformities(new Float($NC));
+update($newBest);
+</rhs>
+ </rule>
+ <rule name="print">
+ <rule-attribute name="salience" value="-110"/>
+ <lhs>
+ <pattern identifier="bp" object-type="BestParms"> </pattern>
+ </lhs>
+ <rhs>System.out.println("Parameter: "+bp.getParameterID()+" Value: "+bp.getNominalValue()+" NC: "+bp.getNonConformities());
+</rhs>
+ </rule>
+</package>
Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/xml/test_ParseRule.xml
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/xml/test_ParseRule.xml 2007-07-09 19:14:49 UTC (rev 13270)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/xml/test_ParseRule.xml 2007-07-09 19:20:21 UTC (rev 13271)
@@ -10,7 +10,7 @@
<global identifier="x" type="com.sample.X" />
<global identifier="yada" type="com.sample.Yada" />
-
+
<function return-type="void" name="myFunc">
<parameter identifier="foo" type="Bar" />
<parameter identifier="bada" type="Bing" />
@@ -85,7 +85,7 @@
<field-constraint field-name="likes">
<variable-restriction evaluator="==" identifier="type"/>
</field-constraint>
- </pattern>
+ </pattern>
</exists>
</not>
@@ -123,7 +123,7 @@
org.drools.Bar.BAR_ENUM_VALUE
</qualified-identifier-restriction>
</or-restriction-connective>
- </field-constraint>
+ </field-constraint>
</pattern>
<pattern identifier="foo6" object-type="Bar" >
Copied: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/xml/test_complex.drl (from rev 13267, labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_complex.drl)
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/xml/test_complex.drl (rev 0)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/xml/test_complex.drl 2007-07-09 19:20:21 UTC (rev 13271)
@@ -0,0 +1,83 @@
+package rules;
+
+
+import pt.inescporto.cec.entities.SetupUse;
+import pt.inescporto.cec.entities.SetupInUse;
+import pt.inescporto.cec.entities.Parameter;
+import pt.inescporto.cec.entities.OrdemFabrico;
+import pt.inescporto.cec.entities.AccaoInspeccao;
+import pt.inescporto.cec.entities.AccaoInspeccaoOperacao;
+import pt.inescporto.cec.entities.MelhorEmNaoConformidades;
+import pt.inescporto.cec.entities.OtherInspectionMethod;
+import pt.inescporto.cec.entities.BestParms;
+
+
+rule "ruleBestProductionOrderCreator"
+when
+ AccaoInspeccao( artigoID == 3 , $operID: operacaoID , $resourceID: recursoID, $ProdOrderID: ordemProducaoID, $IAID: accaoInspeccaoID )
+ AccaoInspeccaoOperacao( inspectionActionID == $IAID, $tmp: inspAccaoOperacaoID )
+ OtherInspectionMethod(inspActionOperacaoID == $tmp, $NCNumber: numeroNaoConformidades )
+ not (MelhorEmNaoConformidades( operacaoID == $operID, recursoID == $resourceID ) )
+ then
+ insert(new MelhorEmNaoConformidades($ProdOrderID,$NCNumber,$operID,$resourceID));
+end
+
+rule "ruleBestProductionOrderChecker"
+when
+ AccaoInspeccao( artigoID ==3 , $operID: operacaoID, $resourceID: recursoID, $ProdOrderID: ordemProducaoID, $IAID: accaoInspeccaoID )
+ AccaoInspeccaoOperacao( inspectionActionID == $IAID, $tmp: inspAccaoOperacaoID )
+ OtherInspectionMethod( inspActionOperacaoID == $tmp, $NCNumber: numeroNaoConformidades )
+ $t: MelhorEmNaoConformidades( operacaoID == $operID, recursoID == $resourceID, numeroDefeitos > $NCNumber )
+ then
+ $t.setNumeroDefeitos($NCNumber);
+ $t.setOrdemProducaoID($ProdOrderID);
+ update($t);
+end
+
+rule "ruleBestParametersCreator"
+salience -100
+when
+ MelhorEmNaoConformidades($poID: ordemProducaoID, $nonConformities: numeroDefeitos )
+ SetupInUse( $setup: setupUseID , productionOrderID == $poID )
+ p: Parameter( $parID: parameterID, setupUseID == $setup )
+ not (BestParms( parameterID == $parID ))
+then
+ BestParms newBest=new BestParms();
+ newBest.setParameterID($parID);
+ newBest.setNominalValue(new Float(p.getNominalValue()));
+ newBest.setMaxLimit(new Float(p.getMaxLimit()));
+ newBest.setMinLimit(new Float(p.getMinLimit()));
+ newBest.setMaxLimitAlarm(new Float(p.getMaxLimitAlarm()));
+ newBest.setMinLimitAlarm(new Float(p.getMinLimitAlarm()));
+ newBest.setNonConformities($nonConformities);
+ insert(newBest);
+end
+
+rule "ruleBestParametersChecker"
+salience -10
+when
+ MelhorEmNaoConformidades($poID: ordemProducaoID, $NC: numeroDefeitos )
+ SetupInUse( $setup: setupUseID , productionOrderID == $poID )
+ p: Parameter( $parID: parameterID, setupUseID == $setup )
+ newBest: BestParms( parameterID == $parID, nonConformities > $NC )
+then
+ newBest.setNominalValue(new Float(p.getNominalValue()));
+ newBest.setMaxLimit(new Float(p.getMaxLimit()));
+ newBest.setMinLimit(new Float(p.getMinLimit()));
+ newBest.setMaxLimitAlarm(new Float(p.getMaxLimitAlarm()));
+ newBest.setMinLimitAlarm(new Float(p.getMinLimitAlarm()));
+ newBest.setNonConformities($NC);
+ update(newBest);
+end
+
+rule "print"
+salience -20
+when
+ bp: BestParms( )
+then
+ System.out.println("Parameter: "+bp.getParameterID()+" Value: "+bp.getNominalValue()+" NC: "+bp.getNonConformities());
+end
+
+query "get results"
+ mnc: BestParms( )
+end
\ No newline at end of file
More information about the jboss-svn-commits
mailing list