[jboss-svn-commits] JBL Code SVN: r9785 - in labs/jbossrules/trunk/drools-compiler/src: main/java/org/drools/rule/builder and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Feb 26 19:24:45 EST 2007
Author: mark.proctor at jboss.com
Date: 2007-02-26 19:24:45 -0500 (Mon, 26 Feb 2007)
New Revision: 9785
Added:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java
Removed:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/RuleBuilder.java
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/BuildUtils.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/AccumulateTemplateTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/RuleBuilderTest.java
Log:
JBRULES-708 MVEL Integration
-More interface/implementation seperation for dialects
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-02-27 00:23:25 UTC (rev 9784)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java 2007-02-27 00:24:45 UTC (rev 9785)
@@ -55,9 +55,9 @@
import org.drools.rule.LineMappings;
import org.drools.rule.Package;
import org.drools.rule.Rule;
+import org.drools.rule.builder.RuleBuilder;
import org.drools.rule.builder.dialect.java.FunctionBuilder;
import org.drools.rule.builder.dialect.java.PackageStore;
-import org.drools.rule.builder.dialect.java.RuleBuilder;
import org.drools.spi.FunctionResolver;
import org.drools.xml.XmlPackageReader;
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/BuildUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/BuildUtils.java 2007-02-27 00:23:25 UTC (rev 9784)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/BuildUtils.java 2007-02-27 00:24:45 UTC (rev 9785)
@@ -33,7 +33,6 @@
import org.drools.rule.builder.dialect.java.DeclarationTypeFixer;
import org.drools.rule.builder.dialect.java.JavaExprAnalyzer;
import org.drools.rule.builder.dialect.java.KnowledgeHelperFixer;
-import org.drools.rule.builder.dialect.java.RuleBuilder;
/**
* A holder class for utility functions
Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java (from rev 9784, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/RuleBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java 2007-02-27 00:24:45 UTC (rev 9785)
@@ -0,0 +1,248 @@
+package org.drools.rule.builder;
+
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.codehaus.jfdi.interpreter.TypeResolver;
+import org.drools.RuntimeDroolsException;
+import org.drools.base.ClassFieldExtractorCache;
+import org.drools.base.evaluators.DateFactory;
+import org.drools.lang.descr.AccumulateDescr;
+import org.drools.lang.descr.AndDescr;
+import org.drools.lang.descr.AttributeDescr;
+import org.drools.lang.descr.CollectDescr;
+import org.drools.lang.descr.EvalDescr;
+import org.drools.lang.descr.ExistsDescr;
+import org.drools.lang.descr.ForallDescr;
+import org.drools.lang.descr.FromDescr;
+import org.drools.lang.descr.NotDescr;
+import org.drools.lang.descr.OrDescr;
+import org.drools.lang.descr.QueryDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.rule.GroupElement;
+import org.drools.rule.Package;
+import org.drools.rule.Rule;
+import org.drools.rule.builder.dialect.java.DeclarationTypeFixer;
+import org.drools.rule.builder.dialect.java.JavaAccumulateBuilder;
+import org.drools.rule.builder.dialect.java.JavaConsequenceBuilder;
+import org.drools.rule.builder.dialect.java.JavaEvalBuilder;
+import org.drools.rule.builder.dialect.java.JavaExprAnalyzer;
+import org.drools.rule.builder.dialect.java.KnowledgeHelperFixer;
+import org.drools.rule.builder.dialect.java.RuleClassBuilder;
+import org.drools.rule.builder.dialect.mvel.MVELFromBuilder;
+
+/**
+ * This builds the rule structure from an AST.
+ * Generates semantic code where necessary if semantics are used.
+ * This is an internal API.
+ */
+public class RuleBuilder {
+
+ // the current build context
+ private BuildContext context;
+
+ // the current build utils
+ private BuildUtils utils;
+
+ // a map of registered builders
+ private Map builders;
+
+ // 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 ClassFieldExtractorCache cache) {
+
+ // statically adding all builders to the map
+ // but in the future we can move that to a configuration
+ // if we want to
+ this.builders = new HashMap();
+ builders.put( EvalDescr.class,
+ new JavaEvalBuilder() );
+ builders.put( FromDescr.class,
+ new MVELFromBuilder() );
+ builders.put( CollectDescr.class,
+ new CollectBuilder() );
+ builders.put( AccumulateDescr.class,
+ new JavaAccumulateBuilder() );
+ builders.put( ForallDescr.class,
+ new ForallBuilder() );
+ 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( new KnowledgeHelperFixer(),
+ new DeclarationTypeFixer(),
+ new JavaExprAnalyzer(),
+ typeResolver,
+ cache,
+ builders );
+
+ this.columnBuilder = new ColumnBuilder();
+
+ this.consequenceBuilder = new JavaConsequenceBuilder();
+
+ this.classBuilder = new RuleClassBuilder();
+ }
+
+ public Map getInvokers() {
+ return (this.context == null) ? null : this.context.getInvokers();
+ }
+
+ public Map getDescrLookups() {
+ return (this.context == null) ? null : this.context.getDescrLookups();
+ }
+
+ public String getRuleClass() {
+ return (this.context == null) ? null : this.context.getRuleClass();
+ }
+
+ public Map getInvokerLookups() {
+ return (this.context == null) ? null : this.context.getInvokerLookups();
+ }
+
+ public List getErrors() {
+ return (this.context == null) ? null : this.context.getErrors();
+ }
+
+ public Rule getRule() {
+ if ( this.context == null ) {
+ return null;
+ }
+ if ( !this.context.getErrors().isEmpty() ) {
+ this.context.getRule().setSemanticallyValid( false );
+ }
+ return this.context.getRule();
+ }
+
+ public Package getPackage() {
+ 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,
+ ruleDescr );
+
+ // Assign attributes
+ setAttributes( this.context.getRule(),
+ ruleDescr.getAttributes() );
+
+ 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
+ // generate the main rule from the previously generated s.
+ if ( !(ruleDescr instanceof QueryDescr) ) {
+ // do not build the consequence if we have a query
+ this.consequenceBuilder.buildConsequence( this.context,
+ this.utils,
+ ruleDescr );
+ }
+ this.classBuilder.buildRule( this.context, this.utils, ruleDescr );
+
+ return this.context.getRule();
+ }
+
+
+ /**
+ * Sets rule Attributes
+ *
+ * @param rule
+ * @param attributes
+ */
+ void setAttributes(final Rule rule,
+ final List attributes) {
+
+ for ( final Iterator it = attributes.iterator(); it.hasNext(); ) {
+ final AttributeDescr attributeDescr = (AttributeDescr) it.next();
+ final String name = attributeDescr.getName();
+ if ( name.equals( "salience" ) ) {
+ rule.setSalience( Integer.parseInt( attributeDescr.getValue() ) );
+ } else if ( name.equals( "no-loop" ) ) {
+ if ( attributeDescr.getValue() == null ) {
+ rule.setNoLoop( true );
+ } else {
+ rule.setNoLoop( Boolean.valueOf( attributeDescr.getValue() ).booleanValue() );
+ }
+ } else if ( name.equals( "auto-focus" ) ) {
+ if ( attributeDescr.getValue() == null ) {
+ rule.setAutoFocus( true );
+ } else {
+ rule.setAutoFocus( Boolean.valueOf( attributeDescr.getValue() ).booleanValue() );
+ }
+ } else if ( name.equals( "agenda-group" ) ) {
+ rule.setAgendaGroup( attributeDescr.getValue() );
+ } else if ( name.equals( "activation-group" ) ) {
+ rule.setActivationGroup( attributeDescr.getValue() );
+ } else if ( name.equals( "ruleflow-group" ) ) {
+ rule.setRuleFlowGroup( attributeDescr.getValue() );
+ } else if ( name.equals( "duration" ) ) {
+ rule.setDuration( Long.parseLong( attributeDescr.getValue() ) );
+ rule.setAgendaGroup( "" );
+ } else if (name.equals( "enabled" )){
+ if (attributeDescr.getValue() == null) {
+ rule.setEnabled( true );
+ } else {
+ rule.setEnabled( Boolean.valueOf( attributeDescr.getValue() ).booleanValue());
+ }
+ } else if (name.equals( "date-effective" )) {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime( DateFactory.parseDate( attributeDescr.getValue() ) );
+ rule.setDateEffective( cal );
+ } else if (name.equals( "date-expires" )) {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime( DateFactory.parseDate( attributeDescr.getValue() ) );
+ rule.setDateExpires( cal );
+
+ } else if ( name.equals( "language" ) ) {
+ //@todo: we don't currently support multiple languages
+ }
+ }
+ }
+
+}
\ No newline at end of file
Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/RuleBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/RuleBuilder.java 2007-02-27 00:23:25 UTC (rev 9784)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/RuleBuilder.java 2007-02-27 00:24:45 UTC (rev 9785)
@@ -1,249 +0,0 @@
-package org.drools.rule.builder.dialect.java;
-
-/*
- * Copyright 2005 JBoss Inc
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.util.Calendar;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.codehaus.jfdi.interpreter.TypeResolver;
-import org.drools.RuntimeDroolsException;
-import org.drools.base.ClassFieldExtractorCache;
-import org.drools.base.evaluators.DateFactory;
-import org.drools.lang.descr.AccumulateDescr;
-import org.drools.lang.descr.AndDescr;
-import org.drools.lang.descr.AttributeDescr;
-import org.drools.lang.descr.CollectDescr;
-import org.drools.lang.descr.EvalDescr;
-import org.drools.lang.descr.ExistsDescr;
-import org.drools.lang.descr.ForallDescr;
-import org.drools.lang.descr.FromDescr;
-import org.drools.lang.descr.NotDescr;
-import org.drools.lang.descr.OrDescr;
-import org.drools.lang.descr.QueryDescr;
-import org.drools.lang.descr.RuleDescr;
-import org.drools.rule.GroupElement;
-import org.drools.rule.Package;
-import org.drools.rule.Rule;
-import org.drools.rule.builder.BuildContext;
-import org.drools.rule.builder.BuildUtils;
-import org.drools.rule.builder.CollectBuilder;
-import org.drools.rule.builder.ColumnBuilder;
-import org.drools.rule.builder.ConditionalElementBuilder;
-import org.drools.rule.builder.ConsequenceBuilder;
-import org.drools.rule.builder.ForallBuilder;
-import org.drools.rule.builder.GroupElementBuilder;
-import org.drools.rule.builder.dialect.mvel.MVELFromBuilder;
-
-/**
- * This builds the rule structure from an AST.
- * Generates semantic code where necessary if semantics are used.
- * This is an internal API.
- */
-public class RuleBuilder {
-
- // the current build context
- private BuildContext context;
-
- // the current build utils
- private BuildUtils utils;
-
- // a map of registered builders
- private Map builders;
-
- // 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 ClassFieldExtractorCache cache) {
-
- // statically adding all builders to the map
- // but in the future we can move that to a configuration
- // if we want to
- this.builders = new HashMap();
- builders.put( EvalDescr.class,
- new JavaEvalBuilder() );
- builders.put( FromDescr.class,
- new MVELFromBuilder() );
- builders.put( CollectDescr.class,
- new CollectBuilder() );
- builders.put( AccumulateDescr.class,
- new JavaAccumulateBuilder() );
- builders.put( ForallDescr.class,
- new ForallBuilder() );
- 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( new KnowledgeHelperFixer(),
- new DeclarationTypeFixer(),
- new JavaExprAnalyzer(),
- typeResolver,
- cache,
- builders );
-
- this.columnBuilder = new ColumnBuilder();
-
- this.consequenceBuilder = new JavaConsequenceBuilder();
-
- this.classBuilder = new RuleClassBuilder();
- }
-
- public Map getInvokers() {
- return (this.context == null) ? null : this.context.getInvokers();
- }
-
- public Map getDescrLookups() {
- return (this.context == null) ? null : this.context.getDescrLookups();
- }
-
- public String getRuleClass() {
- return (this.context == null) ? null : this.context.getRuleClass();
- }
-
- public Map getInvokerLookups() {
- return (this.context == null) ? null : this.context.getInvokerLookups();
- }
-
- public List getErrors() {
- return (this.context == null) ? null : this.context.getErrors();
- }
-
- public Rule getRule() {
- if ( this.context == null ) {
- return null;
- }
- if ( !this.context.getErrors().isEmpty() ) {
- this.context.getRule().setSemanticallyValid( false );
- }
- return this.context.getRule();
- }
-
- public Package getPackage() {
- 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,
- ruleDescr );
-
- // Assign attributes
- setAttributes( this.context.getRule(),
- ruleDescr.getAttributes() );
-
- 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
- // generate the main rule from the previously generated s.
- if ( !(ruleDescr instanceof QueryDescr) ) {
- // do not build the consequence if we have a query
- this.consequenceBuilder.buildConsequence( this.context,
- this.utils,
- ruleDescr );
- }
- this.classBuilder.buildRule( this.context, this.utils, ruleDescr );
-
- return this.context.getRule();
- }
-
-
- /**
- * Sets rule Attributes
- *
- * @param rule
- * @param attributes
- */
- void setAttributes(final Rule rule,
- final List attributes) {
-
- for ( final Iterator it = attributes.iterator(); it.hasNext(); ) {
- final AttributeDescr attributeDescr = (AttributeDescr) it.next();
- final String name = attributeDescr.getName();
- if ( name.equals( "salience" ) ) {
- rule.setSalience( Integer.parseInt( attributeDescr.getValue() ) );
- } else if ( name.equals( "no-loop" ) ) {
- if ( attributeDescr.getValue() == null ) {
- rule.setNoLoop( true );
- } else {
- rule.setNoLoop( Boolean.valueOf( attributeDescr.getValue() ).booleanValue() );
- }
- } else if ( name.equals( "auto-focus" ) ) {
- if ( attributeDescr.getValue() == null ) {
- rule.setAutoFocus( true );
- } else {
- rule.setAutoFocus( Boolean.valueOf( attributeDescr.getValue() ).booleanValue() );
- }
- } else if ( name.equals( "agenda-group" ) ) {
- rule.setAgendaGroup( attributeDescr.getValue() );
- } else if ( name.equals( "activation-group" ) ) {
- rule.setActivationGroup( attributeDescr.getValue() );
- } else if ( name.equals( "ruleflow-group" ) ) {
- rule.setRuleFlowGroup( attributeDescr.getValue() );
- } else if ( name.equals( "duration" ) ) {
- rule.setDuration( Long.parseLong( attributeDescr.getValue() ) );
- rule.setAgendaGroup( "" );
- } else if (name.equals( "enabled" )){
- if (attributeDescr.getValue() == null) {
- rule.setEnabled( true );
- } else {
- rule.setEnabled( Boolean.valueOf( attributeDescr.getValue() ).booleanValue());
- }
- } else if (name.equals( "date-effective" )) {
- Calendar cal = Calendar.getInstance();
- cal.setTime( DateFactory.parseDate( attributeDescr.getValue() ) );
- rule.setDateEffective( cal );
- } else if (name.equals( "date-expires" )) {
- Calendar cal = Calendar.getInstance();
- cal.setTime( DateFactory.parseDate( attributeDescr.getValue() ) );
- rule.setDateExpires( cal );
-
- } else if ( name.equals( "language" ) ) {
- //@todo: we don't currently support multiple languages
- }
- }
- }
-
-}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/AccumulateTemplateTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/AccumulateTemplateTest.java 2007-02-27 00:23:25 UTC (rev 9784)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/AccumulateTemplateTest.java 2007-02-27 00:24:45 UTC (rev 9785)
@@ -14,7 +14,7 @@
import org.drools.base.ClassFieldExtractor;
import org.drools.base.ClassObjectType;
import org.drools.rule.Declaration;
-import org.drools.rule.builder.dialect.java.RuleBuilder;
+import org.drools.rule.builder.RuleBuilder;
import org.drools.spi.ColumnExtractor;
public class AccumulateTemplateTest extends TestCase {
Modified: 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-02-27 00:23:25 UTC (rev 9784)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/RuleBuilderTest.java 2007-02-27 00:24:45 UTC (rev 9785)
@@ -35,7 +35,7 @@
import org.drools.rule.GroupElement;
import org.drools.rule.Package;
import org.drools.rule.Rule;
-import org.drools.rule.builder.dialect.java.RuleBuilder;
+import org.drools.rule.builder.RuleBuilder;
import org.drools.spi.FunctionResolver;
/**
@@ -59,7 +59,7 @@
}
/**
- * Test method for {@link org.drools.rule.builder.dialect.java.RuleBuilder#build(org.drools.rule.Package, org.drools.lang.descr.RuleDescr)}.
+ * Test method for {@link org.drools.rule.builder.RuleBuilder#build(org.drools.rule.Package, org.drools.lang.descr.RuleDescr)}.
*/
public void testBuild() {
try {
More information about the jboss-svn-commits
mailing list