[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