[jboss-svn-commits] JBL Code SVN: r8732 - in labs/jbossrules/trunk: drools-compiler/src/main/java/org/drools/compiler drools-compiler/src/main/java/org/drools/lang drools-compiler/src/main/java/org/drools/semantics/java drools-compiler/src/main/java/org/drools/semantics/java/builder drools-compiler/src/main/java/org/drools/xml drools-compiler/src/test/java/org/drools/compiler drools-compiler/src/test/java/org/drools/semantics/java drools-compiler/src/test/resources/org/drools drools-compiler/src/test/resources/org/drools/semantics drools-compiler/src/test/resources/org/drools/semantics/java drools-core/src/main/java/org/drools/rule
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sat Jan 6 13:33:16 EST 2007
Author: tirelli
Date: 2007-01-06 13:32:48 -0500 (Sat, 06 Jan 2007)
New Revision: 8732
Added:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/GroupElementBuilder.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/RuleBuilderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/semantics/
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/semantics/java/
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/semantics/java/nestedConditionalElements.drl
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/RuleError.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/FunctionBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/FunctionFixer.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/StaticMethodFunctionResolver.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/AccumulateBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/BuildContext.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/BuildUtils.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/CollectBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ColumnBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ConsequenceBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/EvalBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/FromBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/FunctionFixerTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/StaticMethodFunctionResolverTest.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java
Log:
JBRULES-218: adding GroupElement builder and simplifying RuleBuilder
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java 2007-01-06 01:39:55 UTC (rev 8731)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java 2007-01-06 18:32:48 UTC (rev 8732)
@@ -368,6 +368,7 @@
this.src );
ruleDescr.setClassName( ucFirst( ruleClassName ) );
+ // TODO: cache the builder!!!
final RuleBuilder builder = new RuleBuilder( getTypeResolver(),
getFunctionFixer(),
this.classFieldExtractorCache );
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/RuleError.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/RuleError.java 2007-01-06 01:39:55 UTC (rev 8731)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/RuleError.java 2007-01-06 18:32:48 UTC (rev 8732)
@@ -22,7 +22,7 @@
public class RuleError extends DroolsError {
private Rule rule;
- private BaseDescr descr;
+ private BaseDescr descr;
private Object object;
private String message;
@@ -72,5 +72,24 @@
}
return summary;
}
+
+ public String toString() {
+ StringBuffer buf = new StringBuffer();
+ buf.append( this.message );
+ buf.append( " : " );
+ buf.append( this.rule );
+ buf.append( "\n" );
+ if( this.object instanceof CompilationProblem[] ) {
+ final CompilationProblem[] problem = (CompilationProblem[]) this.object;
+ for ( int i = 0; i < problem.length; i++ ) {
+ buf.append( "\t" );
+ buf.append( problem[i] );
+ buf.append( "\n" );
+ }
+ } else {
+ buf.append( this.object );
+ }
+ return buf.toString();
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java 2007-01-06 01:39:55 UTC (rev 8731)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java 2007-01-06 18:32:48 UTC (rev 8732)
@@ -236,7 +236,7 @@
if ( rhs == null ) {
rhs = "\t then" + DrlDumper.eol + "\t";
} else {
- rhs = "\t then" + ruleDescr.getConsequence();
+ rhs = "\t then" + DrlDumper.eol + ruleDescr.getConsequence();
}
rule += attribute;
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/FunctionBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/FunctionBuilder.java 2007-01-06 01:39:55 UTC (rev 8731)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/FunctionBuilder.java 2007-01-06 18:32:48 UTC (rev 8732)
@@ -32,7 +32,7 @@
import org.drools.lang.descr.FunctionDescr;
import org.drools.rule.LineMappings;
import org.drools.rule.Package;
-import org.drools.spi.AvailableVariables;
+import org.drools.spi.DeclarationScopeResolver;
public class FunctionBuilder {
private static final StringTemplateGroup functionGroup = new StringTemplateGroup( new InputStreamReader( FunctionBuilder.class.getResourceAsStream( "javaFunction.stg" ) ),
@@ -82,7 +82,7 @@
}
st.setAttribute( "text",
- fixer.fix( functionDescr.getText(), new AvailableVariables( new Map[] { params } ) ) );
+ fixer.fix( functionDescr.getText(), new DeclarationScopeResolver( new Map[] { params } ) ) );
String text = st.toString();
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/FunctionFixer.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/FunctionFixer.java 2007-01-06 01:39:55 UTC (rev 8731)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/FunctionFixer.java 2007-01-06 18:32:48 UTC (rev 8732)
@@ -22,7 +22,7 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.drools.spi.AvailableVariables;
+import org.drools.spi.DeclarationScopeResolver;
import org.drools.spi.FunctionResolver;
import org.drools.rule.Package;
@@ -61,7 +61,7 @@
null );
}
- public String fix(final String raw, final AvailableVariables variables) {
+ public String fix(final String raw, final DeclarationScopeResolver variables) {
//return raw;
return fix( raw,
FunctionFixer.FUNCTION,
@@ -70,7 +70,7 @@
public String fix(final String raw,
final Pattern pattern,
- final AvailableVariables variables ) {
+ final DeclarationScopeResolver variables ) {
if ( raw == null ) {
return null;
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java 2007-01-06 01:39:55 UTC (rev 8731)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java 2007-01-06 18:32:48 UTC (rev 8732)
@@ -22,14 +22,12 @@
import java.util.Map;
import org.codehaus.jfdi.interpreter.TypeResolver;
+import org.drools.RuntimeDroolsException;
import org.drools.base.ClassFieldExtractorCache;
import org.drools.lang.descr.AccumulateDescr;
import org.drools.lang.descr.AndDescr;
import org.drools.lang.descr.AttributeDescr;
-import org.drools.lang.descr.BaseDescr;
import org.drools.lang.descr.CollectDescr;
-import org.drools.lang.descr.ColumnDescr;
-import org.drools.lang.descr.ConditionalElementDescr;
import org.drools.lang.descr.EvalDescr;
import org.drools.lang.descr.ExistsDescr;
import org.drools.lang.descr.FromDescr;
@@ -37,10 +35,8 @@
import org.drools.lang.descr.OrDescr;
import org.drools.lang.descr.QueryDescr;
import org.drools.lang.descr.RuleDescr;
-import org.drools.rule.Column;
import org.drools.rule.ConditionalElement;
import org.drools.rule.GroupElement;
-import org.drools.rule.GroupElementFactory;
import org.drools.rule.Package;
import org.drools.rule.Rule;
import org.drools.semantics.java.builder.AccumulateBuilder;
@@ -52,6 +48,7 @@
import org.drools.semantics.java.builder.ConsequenceBuilder;
import org.drools.semantics.java.builder.EvalBuilder;
import org.drools.semantics.java.builder.FromBuilder;
+import org.drools.semantics.java.builder.GroupElementBuilder;
import org.drools.semantics.java.builder.RuleClassBuilder;
/**
@@ -73,25 +70,17 @@
// the builder for columns
private ColumnBuilder columnBuilder;
+ // the builder for the consequence
private ConsequenceBuilder consequenceBuilder;
+ // the builder for the rule class
private RuleClassBuilder classBuilder;
+ // Constructor
public RuleBuilder(final TypeResolver typeResolver,
final FunctionFixer functionFixer,
final ClassFieldExtractorCache cache) {
- this.utils = new BuildUtils( functionFixer,
- new KnowledgeHelperFixer(),
- new JavaExprAnalyzer(),
- typeResolver,
- cache );
- this.columnBuilder = new ColumnBuilder();
-
- this.consequenceBuilder = new ConsequenceBuilder();
-
- this.classBuilder = new RuleClassBuilder();
-
// statically adding all builders to the map
// but in the future we can move that to a configuration
// if we want to
@@ -104,7 +93,29 @@
new CollectBuilder() );
builders.put( AccumulateDescr.class,
new AccumulateBuilder() );
+ GroupElementBuilder gebuilder = new GroupElementBuilder();
+ builders.put( AndDescr.class,
+ gebuilder);
+ builders.put( OrDescr.class,
+ gebuilder);
+ builders.put( NotDescr.class,
+ gebuilder);
+ builders.put( ExistsDescr.class,
+ gebuilder);
+
+
+ this.utils = new BuildUtils( functionFixer,
+ new KnowledgeHelperFixer(),
+ new JavaExprAnalyzer(),
+ typeResolver,
+ cache,
+ builders );
+ this.columnBuilder = new ColumnBuilder();
+
+ this.consequenceBuilder = new ConsequenceBuilder();
+
+ this.classBuilder = new RuleClassBuilder();
}
public Map getInvokers() {
@@ -141,6 +152,12 @@
return this.context.getPkg();
}
+ /**
+ * Build the give rule into the
+ * @param pkg
+ * @param ruleDescr
+ * @return
+ */
public synchronized Rule build(final Package pkg,
final RuleDescr ruleDescr) {
this.context = new BuildContext( pkg,
@@ -150,86 +167,12 @@
setAttributes( this.context.getRule(),
ruleDescr.getAttributes() );
- // Build the left hand side
- // generate invokers
- build( ruleDescr );
-
- return this.context.getRule();
- }
-
- private void build(final RuleDescr ruleDescr) {
-
- for ( final Iterator it = ruleDescr.getLhs().getDescrs().iterator(); it.hasNext(); ) {
- final Object object = it.next();
- if ( object instanceof ConditionalElementDescr ) {
- if ( object.getClass() == AndDescr.class ) {
- final GroupElement and = GroupElementFactory.newAndInstance();
- build( this.context.getRule(),
- (ConditionalElementDescr) object,
- and,
- false, // do not decrement offset
- false ); // do not decrement first offset
- this.context.getRule().addPattern( and );
- } else if ( object.getClass() == OrDescr.class ) {
- final GroupElement or = GroupElementFactory.newOrInstance();
- build( this.context.getRule(),
- (ConditionalElementDescr) object,
- or,
- true, // when OR is used, offset MUST be decremented
- false ); // do not decrement first offset
- this.context.getRule().addPattern( or );
- } else if ( object.getClass() == NotDescr.class ) {
- // We cannot have declarations created inside a not visible outside it, so track no declarations so they can be removed
- context.setInnerDeclarations( new HashMap() );
- final GroupElement not = GroupElementFactory.newNotInstance();
- build( this.context.getRule(),
- (ConditionalElementDescr) object,
- not,
- true, // when NOT is used, offset MUST be decremented
- true ); // when NOT is used, offset MUST be decremented for first column
- this.context.getRule().addPattern( not );
-
- // remove declarations bound inside not node
- for ( final Iterator notIt = context.getInnerDeclarations().keySet().iterator(); notIt.hasNext(); ) {
- context.getDeclarations().remove( notIt.next() );
- }
-
- context.setInnerDeclarations( null );
- } else if ( object.getClass() == ExistsDescr.class ) {
- // We cannot have declarations created inside exists visible outside it,
- // so track declarations in a way they can be removed
- context.setInnerDeclarations( new HashMap() );
- final GroupElement exists = GroupElementFactory.newExistsInstance();
- build( this.context.getRule(),
- (ConditionalElementDescr) object,
- exists,
- true, // when EXIST is used, offset MUST be decremented
- true ); // when EXIST is used, offset MUST be decremented for first column
- // remove declarations bound inside not node
- for ( final Iterator notIt = context.getInnerDeclarations().keySet().iterator(); notIt.hasNext(); ) {
- context.getDeclarations().remove( notIt.next() );
- }
-
- context.setInnerDeclarations( null );
- this.context.getRule().addPattern( exists );
- } else {
- ConditionalElementBuilder builder = (ConditionalElementBuilder) this.builders.get( object.getClass() );
- ConditionalElement ce = builder.build( this.context,
- this.utils,
- this.columnBuilder,
- (BaseDescr) object );
- if ( ce != null ) {
- this.context.getRule().addPattern( ce );
- }
- }
- } else if ( object.getClass() == ColumnDescr.class ) {
- final Column column = this.columnBuilder.build( this.context,
- this.utils,
- (ColumnDescr) object );
- if ( column != null ) {
- this.context.getRule().addPattern( column );
- }
- }
+ ConditionalElementBuilder builder = utils.getBuilder( ruleDescr.getLhs().getClass() );
+ if( builder != null ) {
+ GroupElement ce = (GroupElement) builder.build( this.context, this.utils, this.columnBuilder, ruleDescr.getLhs() );
+ this.context.getRule().setLhs( ce );
+ } else {
+ throw new RuntimeDroolsException("BUG: builder not found for descriptor class "+ruleDescr.getLhs().getClass() );
}
// Build the consequence and generate it's invoker/s
@@ -241,72 +184,17 @@
ruleDescr );
}
this.classBuilder.buildRule( this.context, this.utils, ruleDescr );
- }
- private void build(final Rule rule,
- final ConditionalElementDescr descr,
- final GroupElement group,
- final boolean decrementOffset,
- boolean decrementFirst) {
- for ( final Iterator it = descr.getDescrs().iterator(); it.hasNext(); ) {
- final Object object = it.next();
- if ( object instanceof ConditionalElementDescr ) {
- if ( object.getClass() == AndDescr.class ) {
- final GroupElement and = GroupElementFactory.newAndInstance();
- build( rule,
- (ConditionalElementDescr) object,
- and,
- false, // do not decrement offset
- false ); // do not decrement first offset
- group.addChild( and );
- } else if ( object.getClass() == OrDescr.class ) {
- final GroupElement or = GroupElementFactory.newOrInstance();
- build( rule,
- (ConditionalElementDescr) object,
- or,
- true, // when OR is used, offset MUST be decremented
- false ); // do not decrement first offset
- group.addChild( or );
- } else if ( object.getClass() == NotDescr.class ) {
- final GroupElement not = GroupElementFactory.newNotInstance();
- build( rule,
- (ConditionalElementDescr) object,
- not,
- true, // when NOT is used, offset MUST be decremented
- true ); // when NOT is used, offset MUST be decremented for first column
- group.addChild( not );
- } else if ( object.getClass() == ExistsDescr.class ) {
- final GroupElement exists = GroupElementFactory.newExistsInstance();
- build( rule,
- (ConditionalElementDescr) object,
- exists,
- true, // when EXIST is used, offset MUST be decremented
- true ); // when EXIST is used, offset MUST be decremented for first column
- group.addChild( exists );
- } else {
- ConditionalElementBuilder builder = (ConditionalElementBuilder) this.builders.get( object.getClass() );
- ConditionalElement ce = builder.build( this.context,
- this.utils,
- this.columnBuilder,
- (BaseDescr) object );
- if ( ce != null ) {
- this.context.getRule().addPattern( ce );
- }
- }
- } else if ( object.getClass() == ColumnDescr.class ) {
- if ( decrementOffset && decrementFirst ) {
- this.context.setColumnOffset( this.context.getColumnOffset() - 1 );
- } else {
- decrementFirst = true;
- }
- final Column column = this.columnBuilder.build( this.context, this.utils, (ColumnDescr) object );
- if ( column != null ) {
- group.addChild( column );
- }
- }
- }
+ return this.context.getRule();
}
+
+ /**
+ * Sets rule Attributes
+ *
+ * @param rule
+ * @param attributes
+ */
private void setAttributes(final Rule rule,
final List attributes) {
for ( final Iterator it = attributes.iterator(); it.hasNext(); ) {
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/StaticMethodFunctionResolver.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/StaticMethodFunctionResolver.java 2007-01-06 01:39:55 UTC (rev 8731)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/StaticMethodFunctionResolver.java 2007-01-06 18:32:48 UTC (rev 8732)
@@ -6,7 +6,7 @@
import org.codehaus.jfdi.interpreter.TypeResolver;
import org.drools.RuntimeDroolsException;
-import org.drools.spi.AvailableVariables;
+import org.drools.spi.DeclarationScopeResolver;
import org.drools.spi.FunctionResolver;
public class StaticMethodFunctionResolver
@@ -42,7 +42,7 @@
public String resolveFunction(String functionName,
String params,
- AvailableVariables variables) {
+ DeclarationScopeResolver variables) {
for ( Iterator it = this.functionImports.iterator(); it.hasNext(); ) {
String functionImport = (String) it.next();
@@ -84,7 +84,7 @@
* @param paramString
* @return
*/
- private Class[] determineParameterTypes(String paramString, AvailableVariables variables) {
+ private Class[] determineParameterTypes(String paramString, DeclarationScopeResolver variables) {
if ( paramString.trim().equals( "" ) ) {
return new Class[0];
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/AccumulateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/AccumulateBuilder.java 2007-01-06 01:39:55 UTC (rev 8731)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/AccumulateBuilder.java 2007-01-06 18:32:48 UTC (rev 8732)
@@ -17,9 +17,7 @@
package org.drools.semantics.java.builder;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import org.antlr.stringtemplate.StringTemplate;
import org.drools.base.ClassObjectType;
@@ -48,8 +46,6 @@
AccumulateDescr accumDescr = (AccumulateDescr) descr;
- context.setInnerDeclarations( new HashMap() );
-
Column sourceColumn = columnBuilder.build( context,
utils,
accumDescr.getSourceColumn() );
@@ -57,13 +53,7 @@
if ( sourceColumn == null ) {
return null;
}
- // remove declarations bound inside source column
- context.getDeclarations().keySet().removeAll( context.getInnerDeclarations().keySet() );
- Map sourceDeclarations = context.getInnerDeclarations();
- context.setInnerDeclarations( null );
- // decrementing offset as accumulate fills only one column
- context.setColumnOffset( context.getColumnOffset() - 1 );
Column resultColumn = columnBuilder.build( context,
utils,
accumDescr.getResultColumn() );
@@ -91,9 +81,9 @@
final Declaration[] declarations = new Declaration[requiredDeclarations.size()];
for ( int i = 0, size = requiredDeclarations.size(); i < size; i++ ) {
- declarations[i] = (Declaration) context.getDeclarations().get( (String) requiredDeclarations.get( i ) );
+ declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) requiredDeclarations.get( i ) );
}
- final Declaration[] sourceDeclArr = (Declaration[]) sourceDeclarations.values().toArray( new Declaration[sourceDeclarations.size()] );
+ final Declaration[] sourceDeclArr = (Declaration[]) sourceColumn.getOuterDeclarations().values().toArray( new Declaration[0] );
final String[] globals = (String[]) requiredGlobals.toArray( new String[requiredGlobals.size()] );
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/BuildContext.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/BuildContext.java 2007-01-06 01:39:55 UTC (rev 8731)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/BuildContext.java 2007-01-06 18:32:48 UTC (rev 8732)
@@ -20,13 +20,14 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Stack;
import org.drools.lang.descr.QueryDescr;
import org.drools.lang.descr.RuleDescr;
import org.drools.rule.Package;
import org.drools.rule.Query;
import org.drools.rule.Rule;
-import org.drools.spi.AvailableVariables;
+import org.drools.spi.DeclarationScopeResolver;
/**
* A context for the current build
@@ -40,6 +41,10 @@
// current rule
private Rule rule;
+
+ // a stack for the rule building used
+ // for declarations resolution
+ private Stack buildStack;
// current Rule descriptor
private RuleDescr ruleDescr;
@@ -47,15 +52,9 @@
// the class name for the rule
private String ruleClass;
- // declarations made in the current context
- private Map declarations;
+ // available declarationResolver
+ private DeclarationScopeResolver declarationResolver;
- // helper map for inner declarations
- private Map innerDeclarations;
-
- // available variables
- private AvailableVariables variables;
-
// errors found when building the current context
private List errors;
@@ -75,11 +74,8 @@
private int counter;
// a simple counter for columns
- private int columnCounter;
+ private int columnId = -1;
- // an offset counter for columns
- private int columnOffset;
-
/**
* Default constructor
*/
@@ -90,11 +86,10 @@
this.methods = new ArrayList();
this.invokers = new HashMap();
this.invokerLookups = new HashMap();
- this.declarations = new HashMap();
this.descrLookups = new HashMap();
- this.declarations = new HashMap();
this.errors = new ArrayList();
- this.variables = new AvailableVariables( new Map[]{this.declarations, this.pkg.getGlobals()} );
+ this.buildStack = new Stack();
+ this.declarationResolver = new DeclarationScopeResolver( new Map[]{this.pkg.getGlobals()}, this.buildStack );
this.ruleDescr = ruleDescr;
if ( ruleDescr instanceof QueryDescr ) {
@@ -106,14 +101,6 @@
}
/**
- * Returns the map of declarations for the current context
- * @return
- */
- public Map getDeclarations() {
- return declarations;
- }
-
- /**
* Returns the list of errors found while building the current context
* @return
*/
@@ -146,19 +133,19 @@
}
/**
- * Returns the available variables instance
+ * Returns the available declarationResolver instance
* @return
*/
- public AvailableVariables getVariables() {
- return variables;
+ public DeclarationScopeResolver getDeclarationResolver() {
+ return declarationResolver;
}
/**
- * Sets the available variables instance
- * @param variables
+ * Sets the available declarationResolver instance
+ * @param declarationResolver
*/
- public void setVariables(AvailableVariables variables) {
- this.variables = variables;
+ public void setDeclarationResolver(DeclarationScopeResolver variables) {
+ this.declarationResolver = variables;
}
/**
@@ -221,30 +208,18 @@
return counter++;
}
- public int getCurrentColumnId() {
- return columnCounter;
+ public int getColumnId() {
+ return columnId;
}
public int getNextColumnId() {
- return columnCounter++;
+ return ++columnId;
}
- public int getColumnOffset() {
- return columnOffset;
+ public void setColumnId(int columnId) {
+ this.columnId = columnId;
}
- public void setColumnOffset( int offset ) {
- this.columnOffset = offset;
- }
-
- public Map getInnerDeclarations() {
- return innerDeclarations;
- }
-
- public void setInnerDeclarations(Map innerDeclarations) {
- this.innerDeclarations = innerDeclarations;
- }
-
public String getRuleClass() {
return ruleClass;
}
@@ -253,4 +228,8 @@
this.ruleClass = ruleClass;
}
+ public Stack getBuildStack() {
+ return buildStack;
+ }
+
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/BuildUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/BuildUtils.java 2007-01-06 01:39:55 UTC (rev 8731)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/BuildUtils.java 2007-01-06 18:32:48 UTC (rev 8732)
@@ -19,6 +19,7 @@
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import org.antlr.stringtemplate.StringTemplate;
@@ -57,17 +58,21 @@
private final TypeResolver typeResolver;
private final ClassFieldExtractorCache classFieldExtractorCache;
+
+ private final Map builders;
public BuildUtils(final FunctionFixer functionFixer,
final KnowledgeHelperFixer knowledgeHelperFixer,
final JavaExprAnalyzer analyzer,
final TypeResolver typeResolver,
- final ClassFieldExtractorCache classFieldExtractorCache) {
+ final ClassFieldExtractorCache classFieldExtractorCache,
+ final Map builders ) {
this.functionFixer = functionFixer;
this.knowledgeHelperFixer = knowledgeHelperFixer;
this.analyzer = analyzer;
this.typeResolver = typeResolver;
this.classFieldExtractorCache = classFieldExtractorCache;
+ this.builders = builders;
}
public List[] getUsedIdentifiers(final BuildContext context,
@@ -76,7 +81,7 @@
List[] usedIdentifiers = null;
try {
usedIdentifiers = this.analyzer.analyzeExpression( text,
- new Set[]{context.getDeclarations().keySet(), context.getPkg().getGlobals().keySet()} );
+ new Set[]{context.getDeclarationResolver().getDeclarations().keySet(), context.getPkg().getGlobals().keySet()} );
} catch ( final Exception e ) {
context.getErrors().add( new RuleError( context.getRule(),
descr,
@@ -92,7 +97,7 @@
List[] usedIdentifiers = null;
try {
usedIdentifiers = this.analyzer.analyzeBlock( text,
- new Set[]{context.getDeclarations().keySet(), context.getPkg().getGlobals().keySet()} );
+ new Set[]{context.getDeclarationResolver().getDeclarations().keySet(), context.getPkg().getGlobals().keySet()} );
} catch ( final Exception e ) {
context.getErrors().add( new RuleError( context.getRule(),
descr,
@@ -198,4 +203,21 @@
return classFieldExtractorCache;
}
+ /**
+ * Returns a map<Class, ConditionalElementBuilder> of builders
+ * @return
+ */
+ public Map getBuilders() {
+ return builders;
+ }
+
+ /**
+ * Returns the builder for the given descriptor class
+ * @param descr
+ * @return
+ */
+ public ConditionalElementBuilder getBuilder(Class descr) {
+ return (ConditionalElementBuilder) builders.get( descr );
+ }
+
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/CollectBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/CollectBuilder.java 2007-01-06 01:39:55 UTC (rev 8731)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/CollectBuilder.java 2007-01-06 18:32:48 UTC (rev 8732)
@@ -16,8 +16,6 @@
package org.drools.semantics.java.builder;
-import java.util.HashMap;
-
import org.drools.lang.descr.BaseDescr;
import org.drools.lang.descr.CollectDescr;
import org.drools.rule.Collect;
@@ -42,19 +40,12 @@
CollectDescr collectDescr = (CollectDescr) descr;
- context.setInnerDeclarations( new HashMap() );
Column sourceColumn = columnBuilder.build( context, utils, collectDescr.getSourceColumn() );
if ( sourceColumn == null ) {
return null;
}
- // remove declarations bound inside source column
- context.getDeclarations().keySet().removeAll( context.getInnerDeclarations().keySet() );
- context.setInnerDeclarations( null );
-
- // decrementing offset as collect fills only one column
- context.setColumnOffset( context.getColumnOffset() - 1 );
Column resultColumn = columnBuilder.build( context, utils, collectDescr.getResultColumn() );
final String className = "collect" + context.getNextId();
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ColumnBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ColumnBuilder.java 2007-01-06 01:39:55 UTC (rev 8731)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ColumnBuilder.java 2007-01-06 18:32:48 UTC (rev 8732)
@@ -125,22 +125,18 @@
Column column;
if ( columnDescr.getIdentifier() != null && !columnDescr.getIdentifier().equals( "" ) ) {
column = new Column( context.getNextColumnId(),
- context.getColumnOffset(),
+ 0, // offset is 0 by default
objectType,
columnDescr.getIdentifier() );
- context.getDeclarations().put( column.getDeclaration().getIdentifier(),
- column.getDeclaration() );
-
- if ( context.getInnerDeclarations() != null ) {
- context.getInnerDeclarations().put( column.getDeclaration().getIdentifier(),
- column.getDeclaration() );
- }
} else {
column = new Column( context.getNextColumnId(),
- context.getColumnOffset(),
+ 0, // offset is 0 by default
objectType,
null );
}
+ // adding the newly created column to the build stack
+ // this is necessary in case of local declaration usage
+ context.getBuildStack().push( column );
for ( final Iterator it = columnDescr.getDescrs().iterator(); it.hasNext(); ) {
final Object object = it.next();
@@ -161,6 +157,8 @@
(PredicateDescr) object );
}
}
+ // poping the column
+ context.getBuildStack().pop();
return column;
}
@@ -321,7 +319,7 @@
final Column column,
final FieldBindingDescr fieldBindingDescr) {
- Declaration declaration = (Declaration) context.getDeclarations().get( fieldBindingDescr.getIdentifier() );
+ Declaration declaration = (Declaration) context.getDeclarationResolver().getDeclaration( fieldBindingDescr.getIdentifier() );
if ( declaration != null ) {
// This declaration already exists, so throw an Exception
context.getErrors().add( new RuleError( context.getRule(),
@@ -342,14 +340,6 @@
declaration = column.addDeclaration( fieldBindingDescr.getIdentifier(),
extractor );
-
- context.getDeclarations().put( declaration.getIdentifier(),
- declaration );
-
- if ( context.getInnerDeclarations() != null ) {
- context.getInnerDeclarations().put( declaration.getIdentifier(),
- declaration );
- }
}
private void build(final BuildContext context,
@@ -373,14 +363,6 @@
final Declaration declaration = column.addDeclaration( predicateDescr.getDeclaration(),
extractor );
- context.getDeclarations().put( declaration.getIdentifier(),
- declaration );
-
- if ( context.getInnerDeclarations() != null ) {
- context.getInnerDeclarations().put( declaration.getIdentifier(),
- declaration );
- }
-
final List[] usedIdentifiers = utils.getUsedIdentifiers( context,
predicateDescr,
predicateDescr.getText() );
@@ -390,7 +372,7 @@
final List tupleDeclarations = new ArrayList();
final List factDeclarations = new ArrayList();
for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
- Declaration decl = (Declaration) context.getDeclarations().get( (String) usedIdentifiers[0].get( i ) );
+ Declaration decl = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
if ( decl.getColumn() == column ) {
factDeclarations.add( decl );
} else {
@@ -434,7 +416,7 @@
className );
final String predicateText = utils.getFunctionFixer().fix( predicateDescr.getText(),
- context.getVariables() );
+ context.getDeclarationResolver() );
st.setAttribute( "text",
predicateText );
@@ -522,7 +504,7 @@
return null;
}
- final Declaration declaration = (Declaration) context.getDeclarations().get( variableRestrictionDescr.getIdentifier() );
+ final Declaration declaration = (Declaration) context.getDeclarationResolver().getDeclaration( variableRestrictionDescr.getIdentifier() );
if ( declaration == null ) {
context.getErrors().add( new RuleError( context.getRule(),
@@ -613,7 +595,7 @@
final List tupleDeclarations = new ArrayList();
final List factDeclarations = new ArrayList();
for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
- Declaration declaration = (Declaration) context.getDeclarations().get( (String) usedIdentifiers[0].get( i ) );
+ Declaration declaration = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
if ( declaration.getColumn() == column ) {
factDeclarations.add( declaration );
} else {
@@ -658,7 +640,7 @@
className );
final String returnValueText = utils.getFunctionFixer().fix( returnValueRestrictionDescr.getText(),
- context.getVariables() );
+ context.getDeclarationResolver() );
st.setAttribute( "text",
returnValueText );
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ConsequenceBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ConsequenceBuilder.java 2007-01-06 01:39:55 UTC (rev 8731)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ConsequenceBuilder.java 2007-01-06 18:32:48 UTC (rev 8732)
@@ -33,6 +33,10 @@
public void buildConsequence(final BuildContext context,
final BuildUtils utils,
final RuleDescr ruleDescr) {
+
+ // pushing consequence LHS into the stack for variable resolution
+ context.getBuildStack().push( context.getRule().getLhs() );
+
// generate
// generate Invoker
final String className = "consequence";
@@ -48,7 +52,7 @@
final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
- declarations[i] = (Declaration) context.getDeclarations().get( (String) usedIdentifiers[0].get( i ) );
+ declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
}
utils.setStringTemplateAttributes( context,
@@ -57,7 +61,7 @@
(String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
st.setAttribute( "text",
utils.getFunctionFixer().fix( utils.getKnowledgeHelperFixer().fix( ruleDescr.getConsequence() ),
- context.getVariables() ) );
+ context.getDeclarationResolver() ) );
context.getMethods().add( st.toString() );
@@ -102,6 +106,9 @@
context.getRule() );
context.getDescrLookups().put( invokerClassName,
ruleDescr );
+
+ // popping Rule.getLHS() from the build stack
+ context.getBuildStack().pop();
}
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/EvalBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/EvalBuilder.java 2007-01-06 01:39:55 UTC (rev 8731)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/EvalBuilder.java 2007-01-06 18:32:48 UTC (rev 8732)
@@ -60,7 +60,7 @@
final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
- declarations[i] = (Declaration) context.getDeclarations().get( (String) usedIdentifiers[0].get( i ) );
+ declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
}
final EvalCondition eval = new EvalCondition( declarations );
@@ -76,7 +76,7 @@
className );
final String evalText = utils.getFunctionFixer().fix( evalDescr.getText(),
- context.getVariables() );
+ context.getDeclarationResolver() );
st.setAttribute( "text",
evalText );
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/FromBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/FromBuilder.java 2007-01-06 01:39:55 UTC (rev 8731)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/FromBuilder.java 2007-01-06 18:32:48 UTC (rev 8732)
@@ -66,7 +66,7 @@
JFDIParser parser = createParser( utils,
accessor.toString() );
DroolsJFDIFactory factory = new DroolsJFDIFactory( utils.getTypeResolver() );
- factory.setDeclarationMap( context.getDeclarations() );
+ factory.setDeclarationMap( context.getDeclarationResolver().getDeclarations() );
factory.setGlobalsMap( context.getPkg().getGlobals() );
parser.setValueHandlerFactory( factory );
Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/GroupElementBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/GroupElementBuilder.java 2007-01-06 01:39:55 UTC (rev 8731)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/GroupElementBuilder.java 2007-01-06 18:32:48 UTC (rev 8732)
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2006 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.
+ */
+
+package org.drools.semantics.java.builder;
+
+import java.util.Iterator;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.lang.descr.AndDescr;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.ColumnDescr;
+import org.drools.lang.descr.ConditionalElementDescr;
+import org.drools.lang.descr.ExistsDescr;
+import org.drools.lang.descr.NotDescr;
+import org.drools.lang.descr.OrDescr;
+import org.drools.rule.Column;
+import org.drools.rule.ConditionalElement;
+import org.drools.rule.GroupElement;
+import org.drools.rule.GroupElementFactory;
+
+/**
+ * @author etirelli
+ *
+ */
+public class GroupElementBuilder
+ implements
+ ConditionalElementBuilder {
+
+ /* (non-Javadoc)
+ * @see org.drools.semantics.java.builder.ConditionalElementBuilder#build(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.semantics.java.builder.ColumnBuilder, org.drools.lang.descr.BaseDescr)
+ */
+ public ConditionalElement build(BuildContext context,
+ BuildUtils utils,
+ ColumnBuilder columnBuilder,
+ BaseDescr descr) {
+ ConditionalElementDescr cedescr = (ConditionalElementDescr) descr;
+
+ final GroupElement ge = this.newGroupElementFor( cedescr.getClass() );
+ context.getBuildStack().push( ge );
+
+ // iterate over child descriptors
+ for ( Iterator it = cedescr.getDescrs().iterator(); it.hasNext(); ) {
+ // gets child to build
+ BaseDescr child = (BaseDescr) it.next();
+
+ // gets corresponding builder
+ ConditionalElementBuilder cebuilder = utils.getBuilder( child.getClass() );
+
+ if ( cebuilder != null ) {
+ ConditionalElement ce = cebuilder.build( context,
+ utils,
+ columnBuilder,
+ (BaseDescr) child );
+ ge.addChild( ce );
+ } else if ( child instanceof ColumnDescr ) {
+ final Column column = columnBuilder.build( context,
+ utils,
+ (ColumnDescr) child );
+ ge.addChild( column );
+
+ } else {
+ throw new RuntimeDroolsException("BUG: no builder found for descriptor class "+child.getClass() );
+ }
+
+ }
+
+ context.getBuildStack().pop();
+
+ return ge;
+ }
+
+ private GroupElement newGroupElementFor(Class descr) {
+ if ( AndDescr.class.isAssignableFrom( descr ) ) {
+ return GroupElementFactory.newAndInstance();
+ } else if ( OrDescr.class.isAssignableFrom( descr ) ) {
+ return GroupElementFactory.newOrInstance();
+ } else if ( NotDescr.class.isAssignableFrom( descr ) ) {
+ return GroupElementFactory.newNotInstance();
+ } else if ( ExistsDescr.class.isAssignableFrom( descr ) ) {
+ return GroupElementFactory.newExistsInstance();
+ } else {
+ throw new RuntimeDroolsException( "BUG: Not able to create a group element for descriptor: " + descr.getName() );
+ }
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/GroupElementBuilder.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java 2007-01-06 01:39:55 UTC (rev 8731)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java 2007-01-06 18:32:48 UTC (rev 8732)
@@ -197,7 +197,7 @@
lhs = "<lhs> </lhs>";
}
- final String rhs = "<rhs>\n" + replaceIllegalChars( ruleDescr.getConsequence() ) + "</rhs>" + XmlDumper.eol;
+ final String rhs = "<rhs>" + replaceIllegalChars( ruleDescr.getConsequence() ) + "</rhs>" + XmlDumper.eol;
rule += attribute;
rule += lhs;
rule += rhs;
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java 2007-01-06 01:39:55 UTC (rev 8731)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java 2007-01-06 18:32:48 UTC (rev 8732)
@@ -25,6 +25,7 @@
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.lang.reflect.Field;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -105,8 +106,9 @@
"java.util.Map" );
FieldConstraintDescr returnValue = new FieldConstraintDescr( "price" );
- returnValue.addRestriction( new ReturnValueRestrictionDescr("==", "x") );
-
+ returnValue.addRestriction( new ReturnValueRestrictionDescr( "==",
+ "x" ) );
+
column.addDescr( returnValue );
// There is no m this should produce errors.
@@ -147,7 +149,7 @@
assertLength( 0,
builder.getErrors() );
- final ReteooRuleBase ruleBase = ( ReteooRuleBase )RuleBaseFactory.newRuleBase();
+ final ReteooRuleBase ruleBase = (ReteooRuleBase) RuleBaseFactory.newRuleBase();
ruleBase.getGlobals().put( "map",
Map.class );
final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
@@ -223,7 +225,7 @@
final Rule newRule = newPkg.getRule( "rule-1" );
- final ReteooRuleBase ruleBase = ( ReteooRuleBase )RuleBaseFactory.newRuleBase();
+ final ReteooRuleBase ruleBase = (ReteooRuleBase) RuleBaseFactory.newRuleBase();
ruleBase.getGlobals().put( "map",
Map.class );
final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
@@ -280,8 +282,8 @@
assertNotNull( e.getMessage() );
}
}
-
- public void testFactTemplate() {
+
+ public void testFactTemplate() {
final PackageBuilder builder = new PackageBuilder();
final PackageDescr packageDescr = new PackageDescr( "p1" );
@@ -292,17 +294,20 @@
ruleDescr.setLhs( lhs );
FactTemplateDescr cheese = new FactTemplateDescr( "Cheese" );
- cheese.addFieldTemplate( new FieldTemplateDescr( "name", "String" ) );
- cheese.addFieldTemplate(new FieldTemplateDescr( "price", "Integer" ) );
+ cheese.addFieldTemplate( new FieldTemplateDescr( "name",
+ "String" ) );
+ cheese.addFieldTemplate( new FieldTemplateDescr( "price",
+ "Integer" ) );
packageDescr.addFactTemplate( cheese );
-
+
final ColumnDescr column = new ColumnDescr( "Cheese",
"stilton" );
lhs.addDescr( column );
-
+
FieldConstraintDescr literalDescr = new FieldConstraintDescr( "name" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "stilton") );
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "stilton" ) );
column.addDescr( literalDescr );
@@ -310,9 +315,9 @@
builder.addPackage( packageDescr );
- assertLength( 0,
- builder.getErrors() );
-
+ assertFalse( Arrays.toString( builder.getErrors() ),
+ builder.hasErrors() );
+
RuleBase ruleBase = RuleBaseFactory.newRuleBase();
Package pkg = builder.getPackage();
try {
@@ -322,11 +327,13 @@
}
WorkingMemory workingMemory = ruleBase.newWorkingMemory();
Fact stilton = pkg.getFactTemplate( "Cheese" ).createFact( 1 );
- stilton.setFieldValue( "name", "stilton" );
- stilton.setFieldValue( "price", new Integer( 200 ) );
- workingMemory.assertObject( stilton );
+ stilton.setFieldValue( "name",
+ "stilton" );
+ stilton.setFieldValue( "price",
+ new Integer( 200 ) );
+ workingMemory.assertObject( stilton );
workingMemory.fireAllRules();
-
+
}
public void testLiteral() throws Exception {
@@ -342,9 +349,10 @@
final ColumnDescr column = new ColumnDescr( Cheese.class.getName(),
"stilton" );
lhs.addDescr( column );
-
+
FieldConstraintDescr literalDescr = new FieldConstraintDescr( "type" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "stilton") );
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "stilton" ) );
column.addDescr( literalDescr );
@@ -379,18 +387,19 @@
packageDescr.addGlobal( "map",
"java.util.Map" );
-
+
FieldConstraintDescr returnValue = new FieldConstraintDescr( "price" );
- returnValue.addRestriction( new ReturnValueRestrictionDescr("==", "(( (Integer) map.get( new Integer( x )) ).intValue() * y)") );
-
+ returnValue.addRestriction( new ReturnValueRestrictionDescr( "==",
+ "(( (Integer) map.get( new Integer( x )) ).intValue() * y)" ) );
+
column.addDescr( returnValue );
ruleDescr.setConsequence( "modify(stilton);" );
builder.addPackage( packageDescr );
- assertLength( 0,
- builder.getErrors() );
+ assertFalse( Arrays.toString( builder.getErrors() ),
+ builder.hasErrors() );
}
public void testReturnValueMethodCompare() {
@@ -659,96 +668,117 @@
public void testNumbers() throws Exception {
// test boolean
FieldConstraintDescr literalDescr = new FieldConstraintDescr( "booleanPrimitive" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "true") );
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "true" ) );
createLiteralRule( literalDescr );
// test boolean
literalDescr = new FieldConstraintDescr( "booleanPrimitive" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "false") );
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "false" ) );
createLiteralRule( literalDescr );
// test char
literalDescr = new FieldConstraintDescr( "charPrimitive" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "a") );
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "a" ) );
createLiteralRule( literalDescr );
// test byte
literalDescr = new FieldConstraintDescr( "bytePrimitive" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "1") );
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "1" ) );
createLiteralRule( literalDescr );
literalDescr = new FieldConstraintDescr( "bytePrimitive" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "0") );
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "0" ) );
createLiteralRule( literalDescr );
literalDescr = new FieldConstraintDescr( "bytePrimitive" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "-1") );
- createLiteralRule( literalDescr);
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "-1" ) );
+ createLiteralRule( literalDescr );
// test short
literalDescr = new FieldConstraintDescr( "shortPrimitive" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "1") );
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "1" ) );
createLiteralRule( literalDescr );
literalDescr = new FieldConstraintDescr( "shortPrimitive" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "0") );
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "0" ) );
createLiteralRule( literalDescr );
literalDescr = new FieldConstraintDescr( "shortPrimitive" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "-1") );
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "-1" ) );
createLiteralRule( literalDescr );
// test int
literalDescr = new FieldConstraintDescr( "intPrimitive" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "1") );
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "1" ) );
createLiteralRule( literalDescr );
literalDescr = new FieldConstraintDescr( "intPrimitive" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "0") );
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "0" ) );
createLiteralRule( literalDescr );
literalDescr = new FieldConstraintDescr( "intPrimitive" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "-1") );
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "-1" ) );
createLiteralRule( literalDescr );
// test long
literalDescr = new FieldConstraintDescr( "longPrimitive" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "1") );
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "1" ) );
createLiteralRule( literalDescr );
literalDescr = new FieldConstraintDescr( "longPrimitive" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "0") );
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "0" ) );
createLiteralRule( literalDescr );
literalDescr = new FieldConstraintDescr( "longPrimitive" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "0") );
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "0" ) );
createLiteralRule( literalDescr );
// test float
literalDescr = new FieldConstraintDescr( "floatPrimitive" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "1.1") );
- createLiteralRule( literalDescr);
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "1.1" ) );
+ createLiteralRule( literalDescr );
literalDescr = new FieldConstraintDescr( "floatPrimitive" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "0") );
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "0" ) );
createLiteralRule( literalDescr );
literalDescr = new FieldConstraintDescr( "floatPrimitive" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "-1.1") );
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "-1.1" ) );
createLiteralRule( literalDescr );
// test double
literalDescr = new FieldConstraintDescr( "doublePrimitive" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "1.1") );
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "1.1" ) );
createLiteralRule( literalDescr );
literalDescr = new FieldConstraintDescr( "doublePrimitive" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "0") );
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "0" ) );
createLiteralRule( literalDescr );
literalDescr = new FieldConstraintDescr( "floatPrimitive" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "-1.1") );
- createLiteralRule( literalDescr);
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "-1.1" ) );
+ createLiteralRule( literalDescr );
}
public void testNull() {
@@ -765,8 +795,9 @@
"stilton" );
FieldConstraintDescr literalDescr = new FieldConstraintDescr( "type" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", null) );
-
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ null ) );
+
columnDescr.addDescr( literalDescr );
ruleDescr.setConsequence( "" );
@@ -793,7 +824,8 @@
ColumnDescr columnDescr = new ColumnDescr( Cheese.class.getName(),
"stilton" );
FieldConstraintDescr literalDescr = new FieldConstraintDescr( "type" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", null) );
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ null ) );
columnDescr.addDescr( literalDescr );
ruleDescr.setConsequence( "" );
@@ -806,7 +838,8 @@
columnDescr = new ColumnDescr( Cheese.class.getName(),
"stilton" );
literalDescr = new FieldConstraintDescr( "type" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("!=", null) );
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "!=",
+ null ) );
columnDescr.addDescr( literalDescr );
ruleDescr.setConsequence( "" );
@@ -818,10 +851,11 @@
ruleDescr.setLhs( lhs );
columnDescr = new ColumnDescr( Cheese.class.getName(),
"stilton" );
-
+
literalDescr = new FieldConstraintDescr( "type" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("!=", null ) );
-
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "!=",
+ null ) );
+
columnDescr.addDescr( literalDescr );
ruleDescr.setConsequence( "" );
@@ -851,69 +885,78 @@
lhs.addDescr( column1 );
final FieldBindingDescr fieldBindingDescr = new FieldBindingDescr( "type",
- "$type" );
-
+ "$type" );
+
FieldConstraintDescr literalDescr = new FieldConstraintDescr( "type" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "stilton") );
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "stilton" ) );
column1.addDescr( fieldBindingDescr );
column1.addDescr( literalDescr );
-
+
final ColumnDescr column2 = new ColumnDescr( Cheese.class.getName() );
lhs.addDescr( column2 );
column2.addDescr( fieldBindingDescr );
ruleDescr.setConsequence( "modify(stilton);" );
- builder.addPackage( packageDescr );
+ builder.addPackage( packageDescr );
assertLength( 2,
builder.getErrors() );
}
- public void testCompilerConfiguration() throws Exception {
+ public void testCompilerConfiguration() throws Exception {
// test default is eclipse jdt core
- PackageBuilder builder = new PackageBuilder( );;
+ PackageBuilder builder = new PackageBuilder();;
Field compilerField = builder.getClass().getDeclaredField( "compiler" );
- compilerField.setAccessible(true);
- JavaCompiler compiler = ( JavaCompiler ) compilerField.get( builder );
- assertSame( EclipseJavaCompiler.class, compiler.getClass() );
-
+ compilerField.setAccessible( true );
+ JavaCompiler compiler = (JavaCompiler) compilerField.get( builder );
+ assertSame( EclipseJavaCompiler.class,
+ compiler.getClass() );
+
// test JANINO with property settings
- PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
+ PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
conf.setCompiler( PackageBuilderConfiguration.JANINO );
- builder = new PackageBuilder( conf );;
- compiler = ( JavaCompiler ) compilerField.get( builder );
- assertSame( JaninoJavaCompiler.class, compiler.getClass() );
-
+ builder = new PackageBuilder( conf );;
+ compiler = (JavaCompiler) compilerField.get( builder );
+ assertSame( JaninoJavaCompiler.class,
+ compiler.getClass() );
+
// test eclipse jdt core with property settings and default source level
- conf = new PackageBuilderConfiguration();
+ conf = new PackageBuilderConfiguration();
conf.setCompiler( PackageBuilderConfiguration.ECLIPSE );
- builder = new PackageBuilder( conf );;
- compiler = ( JavaCompiler ) compilerField.get( builder );
- assertSame( EclipseJavaCompiler.class, compiler.getClass() );
-
- EclipseJavaCompiler eclipseCompiler = ( EclipseJavaCompiler ) compiler;
- Field settingsField = eclipseCompiler.getClass().getDeclaredField( "settings" );
+ builder = new PackageBuilder( conf );;
+ compiler = (JavaCompiler) compilerField.get( builder );
+ assertSame( EclipseJavaCompiler.class,
+ compiler.getClass() );
+
+ EclipseJavaCompiler eclipseCompiler = (EclipseJavaCompiler) compiler;
+ Field settingsField = eclipseCompiler.getClass().getDeclaredField( "settings" );
settingsField.setAccessible( true );
- EclipseJavaCompilerSettings settings = ( EclipseJavaCompilerSettings ) settingsField.get( eclipseCompiler );
- assertEquals( "1.4", settings.getMap().get( "org.eclipse.jdt.core.compiler.codegen.targetPlatform" ) );
- assertEquals( "1.4", settings.getMap().get( "org.eclipse.jdt.core.compiler.source" ) );
-
+ EclipseJavaCompilerSettings settings = (EclipseJavaCompilerSettings) settingsField.get( eclipseCompiler );
+ assertEquals( "1.4",
+ settings.getMap().get( "org.eclipse.jdt.core.compiler.codegen.targetPlatform" ) );
+ assertEquals( "1.4",
+ settings.getMap().get( "org.eclipse.jdt.core.compiler.source" ) );
+
// test eclipse jdt core with property settings and jdk1.5 source level
- conf = new PackageBuilderConfiguration();
+ conf = new PackageBuilderConfiguration();
conf.setCompiler( PackageBuilderConfiguration.ECLIPSE );
conf.setJavaLanguageLevel( "1.5" );
- builder = new PackageBuilder( conf );;
- compiler = ( JavaCompiler ) compilerField.get( builder );
- assertSame( EclipseJavaCompiler.class, compiler.getClass() );
-
- eclipseCompiler = ( EclipseJavaCompiler ) compiler;
- settings = ( EclipseJavaCompilerSettings ) settingsField.get( eclipseCompiler );
- assertEquals( "1.5", settings.getMap().get( "org.eclipse.jdt.core.compiler.codegen.targetPlatform" ) );
- assertEquals( "1.5", settings.getMap().get( "org.eclipse.jdt.core.compiler.source" ) );
- }
-
+ builder = new PackageBuilder( conf );;
+ compiler = (JavaCompiler) compilerField.get( builder );
+ assertSame( EclipseJavaCompiler.class,
+ compiler.getClass() );
+
+ eclipseCompiler = (EclipseJavaCompiler) compiler;
+ settings = (EclipseJavaCompilerSettings) settingsField.get( eclipseCompiler );
+ assertEquals( "1.5",
+ settings.getMap().get( "org.eclipse.jdt.core.compiler.codegen.targetPlatform" ) );
+ assertEquals( "1.5",
+ settings.getMap().get( "org.eclipse.jdt.core.compiler.source" ) );
+ }
+
private void createReturnValueRule(final PackageDescr packageDescr,
final String expression) {
final RuleDescr ruleDescr = new RuleDescr( "rule-1" );
@@ -935,10 +978,11 @@
packageDescr.addGlobal( "map",
"java.util.Map" );
-
+
FieldConstraintDescr returnValue = new FieldConstraintDescr( "price" );
- returnValue.addRestriction( new ReturnValueRestrictionDescr("==", expression) );
-
+ returnValue.addRestriction( new ReturnValueRestrictionDescr( "==",
+ expression ) );
+
column.addDescr( returnValue );
ruleDescr.setConsequence( "modify(stilton);" );
@@ -1027,8 +1071,9 @@
"stilton" );
FieldConstraintDescr literalDescr = new FieldConstraintDescr( "type" );
- literalDescr.addRestriction( new LiteralRestrictionDescr("==", "stilton") );
-
+ literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
+ "stilton" ) );
+
columnDescr.addDescr( literalDescr );
ceDescr.addDescr( columnDescr );
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/FunctionFixerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/FunctionFixerTest.java 2007-01-06 01:39:55 UTC (rev 8731)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/FunctionFixerTest.java 2007-01-06 18:32:48 UTC (rev 8732)
@@ -23,7 +23,7 @@
import org.codehaus.jfdi.interpreter.TypeResolver;
import org.codehaus.jfdi.interpreter.ClassTypeResolver;
-import org.drools.spi.AvailableVariables;
+import org.drools.spi.DeclarationScopeResolver;
import org.drools.rule.Package;
import junit.framework.TestCase;
@@ -56,7 +56,7 @@
variables.put( "yyy", String.class );
variables.put( "iii", String.class );
assertEquals( "org.drools.Func.func(yyy, iii)",
- fixer.fix( "func(yyy, iii)", new AvailableVariables( new Map[] { variables } ) ) );
+ fixer.fix( "func(yyy, iii)", new DeclarationScopeResolver( new Map[] { variables } ) ) );
}
public void testMoreComplex() {
@@ -64,7 +64,7 @@
variables.put( "yyy", String.class );
variables.put( "iii", String.class );
assertEquals( "xxx org.drools.Func.func(yyy, iii) yyy",
- fixer.fix( "xxx func(yyy, iii) yyy", new AvailableVariables( new Map[] { variables } ) ) );
+ fixer.fix( "xxx func(yyy, iii) yyy", new DeclarationScopeResolver( new Map[] { variables } ) ) );
}
public void testLeaveAloneNew() {
Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/RuleBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/RuleBuilderTest.java 2007-01-06 01:39:55 UTC (rev 8731)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/RuleBuilderTest.java 2007-01-06 18:32:48 UTC (rev 8732)
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2006 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.
+ */
+
+package org.drools.semantics.java;
+
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.codehaus.jfdi.interpreter.ClassTypeResolver;
+import org.codehaus.jfdi.interpreter.TypeResolver;
+import org.drools.base.ClassFieldExtractorCache;
+import org.drools.compiler.DrlParser;
+import org.drools.lang.descr.PackageDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.rule.Declaration;
+import org.drools.rule.GroupElement;
+import org.drools.rule.Package;
+import org.drools.rule.Rule;
+import org.drools.spi.FunctionResolver;
+
+/**
+ * @author etirelli
+ *
+ */
+public class RuleBuilderTest extends TestCase {
+
+ /* (non-Javadoc)
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ /* (non-Javadoc)
+ * @see junit.framework.TestCase#tearDown()
+ */
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Test method for {@link org.drools.semantics.java.RuleBuilder#build(org.drools.rule.Package, org.drools.lang.descr.RuleDescr)}.
+ */
+ public void testBuild() {
+ try {
+ final DrlParser parser = new DrlParser();
+ final PackageDescr pkgDescr = parser.parse( new InputStreamReader( getClass().getResourceAsStream( "nestedConditionalElements.drl" ) ) );
+
+ // just checking there is no parsing errors
+ Assert.assertFalse( parser.getErrors().toString(),
+ parser.hasErrors() );
+
+ Package pkg = new Package( "org.drools" );
+
+ RuleDescr ruleDescr = (RuleDescr) pkgDescr.getRules().get( 0 );
+ final String ruleClassName = "RuleClassName.java";
+ ruleDescr.setClassName( ruleClassName );
+
+ TypeResolver typeResolver = new ClassTypeResolver( new ArrayList(),
+ this.getClass().getClassLoader() );
+ // make an automatic import for the current package
+ typeResolver.addImport( pkgDescr.getName() + ".*" );
+ typeResolver.addImport( "java.lang.*" );
+
+ FunctionResolver functionResolver = new StaticMethodFunctionResolver( pkg.getFunctionImports(),
+ typeResolver );
+
+ FunctionFixer functionFixer = new FunctionFixer( pkg,
+ functionResolver );
+
+ final RuleBuilder builder = new RuleBuilder( typeResolver,
+ functionFixer,
+ new ClassFieldExtractorCache() );
+
+ builder.build( pkg,
+ ruleDescr );
+
+ Assert.assertTrue( builder.getErrors().toString(),
+ builder.getErrors().isEmpty() );
+
+ final Rule rule = builder.getRule();
+
+ assertEquals( "There should be 2 rule level declarations", 2, rule.getDeclarations().length );
+
+ // second GE should be a not
+ GroupElement not = (GroupElement) rule.getLhs().getChildren().get( 1 );
+ assertTrue( not.isNot() );
+ // not has no outer declarations
+ assertTrue( not.getOuterDeclarations().isEmpty() );
+ assertEquals( 1, not.getInnerDeclarations().size() );
+ assertTrue( not.getInnerDeclarations().keySet().contains( "$state" ) );
+
+ // second not
+ GroupElement not2 = (GroupElement) ((GroupElement) not.getChildren().get( 0 )).getChildren().get( 1 );
+ assertTrue( not2.isNot() );
+ // not has no outer declarations
+ assertTrue( not2.getOuterDeclarations().isEmpty() );
+ assertEquals( 1, not2.getInnerDeclarations().size() );
+ assertTrue( not2.getInnerDeclarations().keySet().contains( "$likes" ) );
+
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ fail( "This test is not supposed to throw any exception: " + e.getMessage() );
+ }
+
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/RuleBuilderTest.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/StaticMethodFunctionResolverTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/StaticMethodFunctionResolverTest.java 2007-01-06 01:39:55 UTC (rev 8731)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/StaticMethodFunctionResolverTest.java 2007-01-06 18:32:48 UTC (rev 8732)
@@ -9,7 +9,7 @@
import org.codehaus.jfdi.interpreter.TypeResolver;
import org.codehaus.jfdi.interpreter.ClassTypeResolver;
-import org.drools.spi.AvailableVariables;
+import org.drools.spi.DeclarationScopeResolver;
import org.drools.spi.FunctionResolver;
public class StaticMethodFunctionResolverTest extends TestCase {
@@ -34,7 +34,7 @@
assertEquals( "org.drools.StaticMethods",
functionResolver.resolveFunction( "getString1",
"a",
- new AvailableVariables( new Map[]{map} ) ) );
+ new DeclarationScopeResolver( new Map[]{map} ) ) );
}
}
Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/semantics/java/nestedConditionalElements.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/semantics/java/nestedConditionalElements.drl 2007-01-06 01:39:55 UTC (rev 8731)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/semantics/java/nestedConditionalElements.drl 2007-01-06 18:32:48 UTC (rev 8732)
@@ -0,0 +1,13 @@
+package org.drools;
+
+global java.util.List results
+
+rule "test nested CEs"
+ when
+ $st : State( $spstate : state == "SP" )
+ not ( State( $state : state ) and
+ not( Person( status == $state, $likes : likes ) and
+ Cheese( type == $likes ) ) )
+ then
+ results.add("OK");
+end
\ No newline at end of file
Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/semantics/java/nestedConditionalElements.drl
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:eol-style
+ native
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java 2007-01-06 01:39:55 UTC (rev 8731)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java 2007-01-06 18:32:48 UTC (rev 8732)
@@ -44,48 +44,48 @@
/**
*
*/
- private static final long serialVersionUID = 320;
+ private static final long serialVersionUID = 320;
/** */
// ------------------------------------------------------------
// Instance members
// ------------------------------------------------------------
/** The parent pkg */
- private String pkg;
+ private String pkg;
/** Name of the rule. */
- private final String name;
+ private final String name;
/** Salience value. */
- private int salience;
+ private int salience;
- private boolean dirty = false;
- private Map declarations;
- private Declaration[] declarationArray;
+ private boolean dirty = false;
+ private Map declarations;
+ private Declaration[] declarationArray;
- private final GroupElement lhsRoot = new GroupElement( GroupElement.AND );
+ private GroupElement lhsRoot;
- private String agendaGroup;
+ private String agendaGroup;
/** Consequence. */
- private Consequence consequence;
+ private Consequence consequence;
/** Truthness duration. */
- private Duration duration;
+ private Duration duration;
/** Load order in Package */
- private long loadOrder;
+ private long loadOrder;
/** Is recursion of this rule allowed */
- private boolean noLoop;
+ private boolean noLoop;
/** makes the rule's much the current focus */
- private boolean autoFocus;
+ private boolean autoFocus;
- private String ActivationGroup;
+ private String ActivationGroup;
/** indicates that the rule is semantically correct. */
- private boolean semanticallyValid = true;
+ private boolean semanticallyValid = true;
// ------------------------------------------------------------
// Constructors
@@ -104,6 +104,7 @@
this.name = name;
this.pkg = pkg;
this.agendaGroup = agendaGroup;
+ this.lhsRoot = GroupElementFactory.newAndInstance();
}
/**
@@ -115,15 +116,11 @@
*/
public Rule(final String name,
final String agendaGroup) {
- this.name = name;
- this.pkg = null;
- this.agendaGroup = agendaGroup;
+ this( name, null, agendaGroup );
}
public Rule(final String name) {
- this.name = name;
- this.pkg = null;
- this.agendaGroup = AgendaGroup.MAIN;
+ this( name, null, AgendaGroup.MAIN );
}
/**
@@ -314,6 +311,10 @@
return this.lhsRoot;
}
+ public void setLhs( GroupElement lhsRoot ) {
+ this.lhsRoot = lhsRoot;
+ }
+
/**
* Uses the LogicTransformer to process the Rule patters - if no ORs are
* used this will return an array of a single AND element. If there are Ors
More information about the jboss-svn-commits
mailing list