[jboss-svn-commits] JBL Code SVN: r9782 - in labs/jbossrules/trunk/drools-compiler/src: main/java/org/drools/dialect and 6 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Feb 26 19:15:50 EST 2007


Author: mark.proctor at jboss.com
Date: 2007-02-26 19:15:50 -0500 (Mon, 26 Feb 2007)
New Revision: 9782

Added:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DeclarationTypeFixer.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/FunctionBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaExprAnalyzer.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaPredicateBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/KnowledgeHelperFixer.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/PackageStore.java
   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/mvel/
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java
Removed:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/mvel/
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaPredicateBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.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/main/java/org/drools/rule/builder/ColumnBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/dialect/mvel/MVELEvalBuilderTest.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/KnowledgeHelperFixerTest.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:11:32 UTC (rev 9781)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -39,9 +39,6 @@
 import org.codehaus.jfdi.interpreter.TypeResolver;
 import org.drools.RuntimeDroolsException;
 import org.drools.base.ClassFieldExtractorCache;
-import org.drools.dialect.java.FunctionBuilder;
-import org.drools.dialect.java.PackageStore;
-import org.drools.dialect.java.RuleBuilder;
 import org.drools.facttemplates.FactTemplate;
 import org.drools.facttemplates.FactTemplateImpl;
 import org.drools.facttemplates.FieldTemplate;
@@ -58,6 +55,9 @@
 import org.drools.rule.LineMappings;
 import org.drools.rule.Package;
 import org.drools.rule.Rule;
+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:11:32 UTC (rev 9781)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/BuildUtils.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -28,12 +28,12 @@
 import org.codehaus.jfdi.interpreter.TypeResolver;
 import org.drools.base.ClassFieldExtractorCache;
 import org.drools.compiler.RuleError;
-import org.drools.dialect.java.DeclarationTypeFixer;
-import org.drools.dialect.java.JavaExprAnalyzer;
-import org.drools.dialect.java.KnowledgeHelperFixer;
-import org.drools.dialect.java.RuleBuilder;
 import org.drools.lang.descr.BaseDescr;
 import org.drools.rule.Declaration;
+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

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ColumnBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ColumnBuilder.java	2007-02-27 00:11:32 UTC (rev 9781)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ColumnBuilder.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -28,8 +28,6 @@
 import org.drools.base.ValueType;
 import org.drools.base.evaluators.Operator;
 import org.drools.compiler.RuleError;
-import org.drools.dialect.java.JavaPredicateBuilder;
-import org.drools.dialect.java.JavaReturnValueBuilder;
 import org.drools.facttemplates.FactTemplate;
 import org.drools.facttemplates.FactTemplateFieldExtractor;
 import org.drools.facttemplates.FactTemplateObjectType;
@@ -55,6 +53,8 @@
 import org.drools.rule.ReturnValueRestriction;
 import org.drools.rule.VariableConstraint;
 import org.drools.rule.VariableRestriction;
+import org.drools.rule.builder.dialect.java.JavaPredicateBuilder;
+import org.drools.rule.builder.dialect.java.JavaReturnValueBuilder;
 import org.drools.spi.Evaluator;
 import org.drools.spi.FieldExtractor;
 import org.drools.spi.FieldValue;

Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java (from rev 9780, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java)

Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DeclarationTypeFixer.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/DeclarationTypeFixer.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DeclarationTypeFixer.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DeclarationTypeFixer.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,24 @@
+/**
+ * 
+ */
+package org.drools.rule.builder.dialect.java;
+
+import org.drools.rule.Declaration;
+
+/**
+ * @author fburlet
+ * @author gdupriez
+ *
+ */
+public class DeclarationTypeFixer {
+    
+    public String fix(Declaration declaration) {
+        Class classType = declaration.getExtractor().getExtractToClass();
+        if (classType.isArray()) {
+            return classType.getComponentType().getName().concat("[]");
+        } else {
+            // Does this replacement usefull in the declaration type ??
+            return classType.getName().replace('$', '.');
+        }
+    }
+}

Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/FunctionBuilder.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/FunctionBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/FunctionBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/FunctionBuilder.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,118 @@
+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.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.StringReader;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.antlr.stringtemplate.StringTemplate;
+import org.antlr.stringtemplate.StringTemplateGroup;
+import org.antlr.stringtemplate.language.AngleBracketTemplateLexer;
+import org.codehaus.jfdi.interpreter.TypeResolver;
+import org.drools.RuntimeDroolsException;
+import org.drools.lang.descr.FunctionDescr;
+import org.drools.rule.LineMappings;
+import org.drools.rule.Package;
+import org.drools.spi.DeclarationScopeResolver;
+
+public class FunctionBuilder {
+    private static final StringTemplateGroup functionGroup = new StringTemplateGroup( new InputStreamReader( FunctionBuilder.class.getResourceAsStream( "javaFunction.stg" ) ),
+                                                                                      AngleBracketTemplateLexer.class );
+
+    public FunctionBuilder() {
+
+    }
+
+    public String build(final Package pkg,
+                        final FunctionDescr functionDescr,
+                        final TypeResolver typeResolver,
+                        final Map lineMappings) {
+        final StringTemplate st = FunctionBuilder.functionGroup.getInstanceOf( "function" );
+
+        st.setAttribute( "package",
+                         pkg.getName() );
+
+        st.setAttribute( "imports",
+                         pkg.getImports() );
+
+        st.setAttribute( "className",
+                         ucFirst( functionDescr.getName() ) );
+        st.setAttribute( "methodName",
+                         functionDescr.getName() );
+
+        st.setAttribute( "returnType",
+                         functionDescr.getReturnType() );
+
+        st.setAttribute( "parameterTypes",
+                         functionDescr.getParameterTypes() );
+
+        st.setAttribute( "parameterNames",
+                         functionDescr.getParameterNames() );
+
+        Map params = new HashMap();
+        List names = functionDescr.getParameterNames();
+        List types = functionDescr.getParameterTypes();
+        try {
+            for ( int i = 0, size = names.size(); i < size; i++ ) {
+                params.put( names.get( i ), typeResolver.resolveType( (String) types.get( i ) ) );
+            }
+        } catch ( ClassNotFoundException e ) {
+            // todo : must be a better way so we don't have to try/catch each resolveType call
+            throw new RuntimeDroolsException( e );                
+        }                   
+        
+        st.setAttribute( "text",
+                         functionDescr.getText() );
+        
+        String text = st.toString();
+        
+        BufferedReader reader = new BufferedReader( new StringReader ( text ) );
+        String line = null;
+        String lineStartsWith = "    public static " + functionDescr.getReturnType( ) + " " + functionDescr.getName();
+        int offset = 0;
+        try {
+            while ( ( line = reader.readLine() ) != null ) {
+                offset++;
+                if ( line.startsWith( lineStartsWith ) ) {
+                    break;
+                }
+            }
+            functionDescr.setOffset( offset );
+        } catch ( IOException e ) {
+            // won't ever happen, it's just reading over a string.
+            throw new RuntimeDroolsException( "Error determining start offset with function" );
+        }
+        
+        String name = pkg.getName() + "." + ucFirst( functionDescr.getName() );
+        LineMappings mapping = new LineMappings( name );
+        mapping.setStartLine( functionDescr.getLine() );
+        mapping.setOffset( functionDescr.getOffset() );      
+        lineMappings.put( name, lineMappings );
+
+        return text;
+
+    }
+
+    private String ucFirst(final String name) {
+        return name.toUpperCase().charAt( 0 ) + name.substring( 1 );
+    }
+}
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaAccumulateBuilder.java	2007-02-27 00:06:47 UTC (rev 9780)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -1,166 +0,0 @@
-/*
- * 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.dialect.java;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.antlr.stringtemplate.StringTemplate;
-import org.drools.base.ClassObjectType;
-import org.drools.lang.descr.AccumulateDescr;
-import org.drools.lang.descr.BaseDescr;
-import org.drools.rule.Accumulate;
-import org.drools.rule.Column;
-import org.drools.rule.ConditionalElement;
-import org.drools.rule.Declaration;
-import org.drools.semantics.java.builder.AccumulateBuilder;
-import org.drools.semantics.java.builder.BuildContext;
-import org.drools.semantics.java.builder.BuildUtils;
-import org.drools.semantics.java.builder.ColumnBuilder;
-import org.drools.semantics.java.builder.ConditionalElementBuilder;
-
-/**
- * @author etirelli
- *
- */
-public class JavaAccumulateBuilder
-    implements
-    ConditionalElementBuilder, AccumulateBuilder {
-
-    /* (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)
-     */
-    /* (non-Javadoc)
-     * @see org.drools.semantics.java.builder.AccumulateBuilder#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) {
-
-        AccumulateDescr accumDescr = (AccumulateDescr) descr;
-
-        Column sourceColumn = columnBuilder.build( context,
-                                                   utils,
-                                                   accumDescr.getSourceColumn() );
-
-        if ( sourceColumn == null ) {
-            return null;
-        }
-
-        Column resultColumn = columnBuilder.build( context,
-                                                   utils,
-                                                   accumDescr.getResultColumn() );
-
-        final String className = "accumulate" + context.getNextId();
-        accumDescr.setClassMethodName( className );
-
-        final List[] usedIdentifiers1 = utils.getUsedIdentifiers( context,
-                                                                  accumDescr,
-                                                                  accumDescr.getInitCode() );
-        final List[] usedIdentifiers2 = utils.getUsedIdentifiers( context,
-                                                                  accumDescr,
-                                                                  accumDescr.getActionCode() );
-        final List[] usedIdentifiers3 = utils.getUsedIdentifiers( context,
-                                                                  accumDescr,
-                                                                  accumDescr.getResultCode() );
-
-        final List requiredDeclarations = new ArrayList( usedIdentifiers1[0] );
-        requiredDeclarations.addAll( usedIdentifiers2[0] );
-        requiredDeclarations.addAll( usedIdentifiers3[0] );
-
-        final List requiredGlobals = new ArrayList( usedIdentifiers1[1] );
-        requiredGlobals.addAll( usedIdentifiers2[1] );
-        requiredGlobals.addAll( usedIdentifiers3[1] );
-
-        final Declaration[] declarations = new Declaration[requiredDeclarations.size()];
-        for ( int i = 0, size = requiredDeclarations.size(); i < size; i++ ) {
-            declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) requiredDeclarations.get( i ) );
-        }
-        final Declaration[] sourceDeclArr = (Declaration[]) sourceColumn.getOuterDeclarations().values().toArray( new Declaration[0] );
-
-        final String[] globals = (String[]) requiredGlobals.toArray( new String[requiredGlobals.size()] );
-
-        StringTemplate st = utils.getRuleGroup().getInstanceOf( "accumulateMethod" );
-
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           declarations,
-                                           globals );
-
-        st.setAttribute( "innerDeclarations",
-                         sourceDeclArr );
-        st.setAttribute( "methodName",
-                         className );
-
-        final String initCode = accumDescr.getInitCode();
-        final String actionCode = accumDescr.getActionCode();
-        final String resultCode = accumDescr.getResultCode();
-        st.setAttribute( "initCode",
-                         initCode );
-        st.setAttribute( "actionCode",
-                         actionCode );
-        st.setAttribute( "resultCode",
-                         resultCode );
-
-        String resultType = null;
-        // TODO: Need to change this... 
-        if ( resultColumn.getObjectType() instanceof ClassObjectType ) {
-            resultType = ((ClassObjectType) resultColumn.getObjectType()).getClassType().getName();
-        } else {
-            resultType = resultColumn.getObjectType().getValueType().getClassType().getName();
-        }
-
-        st.setAttribute( "resultType",
-                         resultType );
-
-        context.getMethods().add( st.toString() );
-
-        st = utils.getInvokerGroup().getInstanceOf( "accumulateInvoker" );
-
-        st.setAttribute( "package",
-                         context.getPkg().getName() );
-        st.setAttribute( "ruleClassName",
-                         utils.ucFirst( context.getRuleDescr().getClassName() ) );
-        st.setAttribute( "invokerClassName",
-                         context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
-        st.setAttribute( "methodName",
-                         className );
-
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           declarations,
-                                           (String[]) requiredGlobals.toArray( new String[requiredGlobals.size()] ) );
-
-        st.setAttribute( "hashCode",
-                         actionCode.hashCode() );
-
-        Accumulate accumulate = new Accumulate( sourceColumn,
-                                                resultColumn,
-                                                declarations,
-                                                sourceDeclArr );
-        final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
-        context.getInvokers().put( invokerClassName,
-                                   st.toString() );
-        context.getInvokerLookups().put( invokerClassName,
-                                         accumulate );
-        context.getDescrLookups().put( invokerClassName,
-                                       accumDescr );
-        return accumulate;
-    }
-
-}

Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaAccumulateBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,166 @@
+/*
+ * 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.rule.builder.dialect.java;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.antlr.stringtemplate.StringTemplate;
+import org.drools.base.ClassObjectType;
+import org.drools.lang.descr.AccumulateDescr;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.rule.Accumulate;
+import org.drools.rule.Column;
+import org.drools.rule.ConditionalElement;
+import org.drools.rule.Declaration;
+import org.drools.rule.builder.AccumulateBuilder;
+import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.BuildUtils;
+import org.drools.rule.builder.ColumnBuilder;
+import org.drools.rule.builder.ConditionalElementBuilder;
+
+/**
+ * @author etirelli
+ *
+ */
+public class JavaAccumulateBuilder
+    implements
+    ConditionalElementBuilder, AccumulateBuilder {
+
+    /* (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)
+     */
+    /* (non-Javadoc)
+     * @see org.drools.semantics.java.builder.AccumulateBuilder#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) {
+
+        AccumulateDescr accumDescr = (AccumulateDescr) descr;
+
+        Column sourceColumn = columnBuilder.build( context,
+                                                   utils,
+                                                   accumDescr.getSourceColumn() );
+
+        if ( sourceColumn == null ) {
+            return null;
+        }
+
+        Column resultColumn = columnBuilder.build( context,
+                                                   utils,
+                                                   accumDescr.getResultColumn() );
+
+        final String className = "accumulate" + context.getNextId();
+        accumDescr.setClassMethodName( className );
+
+        final List[] usedIdentifiers1 = utils.getUsedIdentifiers( context,
+                                                                  accumDescr,
+                                                                  accumDescr.getInitCode() );
+        final List[] usedIdentifiers2 = utils.getUsedIdentifiers( context,
+                                                                  accumDescr,
+                                                                  accumDescr.getActionCode() );
+        final List[] usedIdentifiers3 = utils.getUsedIdentifiers( context,
+                                                                  accumDescr,
+                                                                  accumDescr.getResultCode() );
+
+        final List requiredDeclarations = new ArrayList( usedIdentifiers1[0] );
+        requiredDeclarations.addAll( usedIdentifiers2[0] );
+        requiredDeclarations.addAll( usedIdentifiers3[0] );
+
+        final List requiredGlobals = new ArrayList( usedIdentifiers1[1] );
+        requiredGlobals.addAll( usedIdentifiers2[1] );
+        requiredGlobals.addAll( usedIdentifiers3[1] );
+
+        final Declaration[] declarations = new Declaration[requiredDeclarations.size()];
+        for ( int i = 0, size = requiredDeclarations.size(); i < size; i++ ) {
+            declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) requiredDeclarations.get( i ) );
+        }
+        final Declaration[] sourceDeclArr = (Declaration[]) sourceColumn.getOuterDeclarations().values().toArray( new Declaration[0] );
+
+        final String[] globals = (String[]) requiredGlobals.toArray( new String[requiredGlobals.size()] );
+
+        StringTemplate st = utils.getRuleGroup().getInstanceOf( "accumulateMethod" );
+
+        utils.setStringTemplateAttributes( context,
+                                           st,
+                                           declarations,
+                                           globals );
+
+        st.setAttribute( "innerDeclarations",
+                         sourceDeclArr );
+        st.setAttribute( "methodName",
+                         className );
+
+        final String initCode = accumDescr.getInitCode();
+        final String actionCode = accumDescr.getActionCode();
+        final String resultCode = accumDescr.getResultCode();
+        st.setAttribute( "initCode",
+                         initCode );
+        st.setAttribute( "actionCode",
+                         actionCode );
+        st.setAttribute( "resultCode",
+                         resultCode );
+
+        String resultType = null;
+        // TODO: Need to change this... 
+        if ( resultColumn.getObjectType() instanceof ClassObjectType ) {
+            resultType = ((ClassObjectType) resultColumn.getObjectType()).getClassType().getName();
+        } else {
+            resultType = resultColumn.getObjectType().getValueType().getClassType().getName();
+        }
+
+        st.setAttribute( "resultType",
+                         resultType );
+
+        context.getMethods().add( st.toString() );
+
+        st = utils.getInvokerGroup().getInstanceOf( "accumulateInvoker" );
+
+        st.setAttribute( "package",
+                         context.getPkg().getName() );
+        st.setAttribute( "ruleClassName",
+                         utils.ucFirst( context.getRuleDescr().getClassName() ) );
+        st.setAttribute( "invokerClassName",
+                         context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
+        st.setAttribute( "methodName",
+                         className );
+
+        utils.setStringTemplateAttributes( context,
+                                           st,
+                                           declarations,
+                                           (String[]) requiredGlobals.toArray( new String[requiredGlobals.size()] ) );
+
+        st.setAttribute( "hashCode",
+                         actionCode.hashCode() );
+
+        Accumulate accumulate = new Accumulate( sourceColumn,
+                                                resultColumn,
+                                                declarations,
+                                                sourceDeclArr );
+        final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
+        context.getInvokers().put( invokerClassName,
+                                   st.toString() );
+        context.getInvokerLookups().put( invokerClassName,
+                                         accumulate );
+        context.getDescrLookups().put( invokerClassName,
+                                       accumDescr );
+        return accumulate;
+    }
+
+}

Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaConsequenceBuilder.java	2007-02-27 00:06:47 UTC (rev 9780)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -1,119 +0,0 @@
-/*
- * 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.dialect.java;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.antlr.stringtemplate.StringTemplate;
-import org.drools.RuntimeDroolsException;
-import org.drools.lang.descr.RuleDescr;
-import org.drools.rule.Declaration;
-import org.drools.semantics.java.builder.BuildContext;
-import org.drools.semantics.java.builder.BuildUtils;
-import org.drools.semantics.java.builder.ConsequenceBuilder;
-
-/**
- * @author etirelli
- *
- */
-public class JavaConsequenceBuilder implements ConsequenceBuilder {
-
-    /* (non-Javadoc)
-     * @see org.drools.semantics.java.builder.ConsequenceBuilder#buildConsequence(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.lang.descr.RuleDescr)
-     */
-    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";
-
-        StringTemplate st = utils.getRuleGroup().getInstanceOf( "consequenceMethod" );
-
-        st.setAttribute( "methodName",
-                         className );
-
-        final List[] usedIdentifiers = utils.getUsedCIdentifiers( context,
-                                                                  ruleDescr,
-                                                                  ruleDescr.getConsequence() );
-
-        final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
-        for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
-            declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
-        }
-
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           declarations,
-                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
-        st.setAttribute( "text",
-                         utils.getKnowledgeHelperFixer().fix( ruleDescr.getConsequence() ) );
-
-        context.getMethods().add( st.toString() );
-
-        st = utils.getInvokerGroup().getInstanceOf( "consequenceInvoker" );
-
-        st.setAttribute( "package",
-                         context.getPkg().getName() );
-        st.setAttribute( "ruleClassName",
-                         utils.ucFirst( context.getRuleDescr().getClassName() ) );
-        st.setAttribute( "invokerClassName",
-                         ruleDescr.getClassName() + utils.ucFirst( className ) + "Invoker" );
-        st.setAttribute( "methodName",
-                         className );
-
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           declarations,
-                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
-
-        // Must use the rule declarations, so we use the same order as used in the generated invoker
-        final List list = Arrays.asList( context.getRule().getDeclarations() );
-
-        final int[] indexes = new int[declarations.length];
-        for ( int i = 0, length = declarations.length; i < length; i++ ) {
-            indexes[i] = list.indexOf( declarations[i] );
-            if ( indexes[i] == -1 ) {
-                // some defensive code, this should never happen
-                throw new RuntimeDroolsException( "Unable to find declaration in list while generating the consequence invoker" );
-            }
-        }
-
-        st.setAttribute( "indexes",
-                         indexes );
-
-        st.setAttribute( "text",
-                         ruleDescr.getConsequence() );
-
-        final String invokerClassName = context.getPkg().getName() + "." + ruleDescr.getClassName() + utils.ucFirst( className ) + "Invoker";
-        context.getInvokers().put( invokerClassName,
-                                   st.toString() );
-        context.getInvokerLookups().put( invokerClassName,
-                                         context.getRule() );
-        context.getDescrLookups().put( invokerClassName,
-                                       ruleDescr );
-        
-        // popping Rule.getLHS() from the build stack
-        context.getBuildStack().pop();
-    }
-
-}

Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaConsequenceBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,119 @@
+/*
+ * 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.rule.builder.dialect.java;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.antlr.stringtemplate.StringTemplate;
+import org.drools.RuntimeDroolsException;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.rule.Declaration;
+import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.BuildUtils;
+import org.drools.rule.builder.ConsequenceBuilder;
+
+/**
+ * @author etirelli
+ *
+ */
+public class JavaConsequenceBuilder implements ConsequenceBuilder {
+
+    /* (non-Javadoc)
+     * @see org.drools.semantics.java.builder.ConsequenceBuilder#buildConsequence(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.lang.descr.RuleDescr)
+     */
+    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";
+
+        StringTemplate st = utils.getRuleGroup().getInstanceOf( "consequenceMethod" );
+
+        st.setAttribute( "methodName",
+                         className );
+
+        final List[] usedIdentifiers = utils.getUsedCIdentifiers( context,
+                                                                  ruleDescr,
+                                                                  ruleDescr.getConsequence() );
+
+        final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
+        for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
+            declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
+        }
+
+        utils.setStringTemplateAttributes( context,
+                                           st,
+                                           declarations,
+                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+        st.setAttribute( "text",
+                         utils.getKnowledgeHelperFixer().fix( ruleDescr.getConsequence() ) );
+
+        context.getMethods().add( st.toString() );
+
+        st = utils.getInvokerGroup().getInstanceOf( "consequenceInvoker" );
+
+        st.setAttribute( "package",
+                         context.getPkg().getName() );
+        st.setAttribute( "ruleClassName",
+                         utils.ucFirst( context.getRuleDescr().getClassName() ) );
+        st.setAttribute( "invokerClassName",
+                         ruleDescr.getClassName() + utils.ucFirst( className ) + "Invoker" );
+        st.setAttribute( "methodName",
+                         className );
+
+        utils.setStringTemplateAttributes( context,
+                                           st,
+                                           declarations,
+                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
+        // Must use the rule declarations, so we use the same order as used in the generated invoker
+        final List list = Arrays.asList( context.getRule().getDeclarations() );
+
+        final int[] indexes = new int[declarations.length];
+        for ( int i = 0, length = declarations.length; i < length; i++ ) {
+            indexes[i] = list.indexOf( declarations[i] );
+            if ( indexes[i] == -1 ) {
+                // some defensive code, this should never happen
+                throw new RuntimeDroolsException( "Unable to find declaration in list while generating the consequence invoker" );
+            }
+        }
+
+        st.setAttribute( "indexes",
+                         indexes );
+
+        st.setAttribute( "text",
+                         ruleDescr.getConsequence() );
+
+        final String invokerClassName = context.getPkg().getName() + "." + ruleDescr.getClassName() + utils.ucFirst( className ) + "Invoker";
+        context.getInvokers().put( invokerClassName,
+                                   st.toString() );
+        context.getInvokerLookups().put( invokerClassName,
+                                         context.getRule() );
+        context.getDescrLookups().put( invokerClassName,
+                                       ruleDescr );
+        
+        // popping Rule.getLHS() from the build stack
+        context.getBuildStack().pop();
+    }
+
+}

Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaEvalBuilder.java	2007-02-27 00:06:47 UTC (rev 9780)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -1,117 +0,0 @@
-/*
- * 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.dialect.java;
-
-import java.util.List;
-
-import org.antlr.stringtemplate.StringTemplate;
-import org.drools.lang.descr.BaseDescr;
-import org.drools.lang.descr.EvalDescr;
-import org.drools.rule.ConditionalElement;
-import org.drools.rule.Declaration;
-import org.drools.rule.EvalCondition;
-import org.drools.semantics.java.builder.BuildContext;
-import org.drools.semantics.java.builder.BuildUtils;
-import org.drools.semantics.java.builder.ColumnBuilder;
-import org.drools.semantics.java.builder.ConditionalElementBuilder;
-
-/**
- * @author etirelli
- *
- */
-public class JavaEvalBuilder
-    implements
-    ConditionalElementBuilder {
-
-    /**
-     * Builds and returns an Eval Conditional Element
-     * 
-     * @param context The current build context
-     * @param utils The current build utils instance
-     * @param columnBuilder not used by EvalBuilder
-     * @param descr The Eval Descriptor to build the eval conditional element from
-     * 
-     * @return the Eval Conditional Element
-     */
-    public ConditionalElement build(final BuildContext context,
-                                    final BuildUtils utils,
-                                    final ColumnBuilder columnBuilder,
-                                    final BaseDescr descr) {
-        // it must be an EvalDescr
-        EvalDescr evalDescr = (EvalDescr) descr;
-
-        final String className = "eval" + context.getNextId();
-        
-        evalDescr.setClassMethodName( className );
-
-        final List[] usedIdentifiers = utils.getUsedIdentifiers( context,
-                                                                 evalDescr,
-                                                                 evalDescr.getText() );
-
-        final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
-        for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
-            declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
-        }
-
-        final EvalCondition eval = new EvalCondition( declarations );
-
-        StringTemplate st = utils.getRuleGroup().getInstanceOf( "evalMethod" );
-
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           declarations,
-                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
-
-        st.setAttribute( "methodName",
-                         className );
-
-        final String evalText = evalDescr.getText();
-        st.setAttribute( "text",
-                         evalText );
-
-        context.getMethods().add( st.toString() );
-
-        st = utils.getInvokerGroup().getInstanceOf( "evalInvoker" );
-
-        st.setAttribute( "package",
-                         context.getPkg().getName() );
-        st.setAttribute( "ruleClassName",
-                         utils.ucFirst( context.getRuleDescr().getClassName() ) );
-        st.setAttribute( "invokerClassName",
-                         context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
-        st.setAttribute( "methodName",
-                         className );
-
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           declarations,
-                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
-
-        st.setAttribute( "hashCode",
-                         evalText.hashCode() );
-
-        final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
-        context.getInvokers().put( invokerClassName,
-                                   st.toString() );
-        context.getInvokerLookups().put( invokerClassName,
-                                         eval );
-        context.getDescrLookups().put( invokerClassName,
-                                       evalDescr );
-        return eval;
-    }
-
-}

Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaEvalBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,117 @@
+/*
+ * 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.rule.builder.dialect.java;
+
+import java.util.List;
+
+import org.antlr.stringtemplate.StringTemplate;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.EvalDescr;
+import org.drools.rule.ConditionalElement;
+import org.drools.rule.Declaration;
+import org.drools.rule.EvalCondition;
+import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.BuildUtils;
+import org.drools.rule.builder.ColumnBuilder;
+import org.drools.rule.builder.ConditionalElementBuilder;
+
+/**
+ * @author etirelli
+ *
+ */
+public class JavaEvalBuilder
+    implements
+    ConditionalElementBuilder {
+
+    /**
+     * Builds and returns an Eval Conditional Element
+     * 
+     * @param context The current build context
+     * @param utils The current build utils instance
+     * @param columnBuilder not used by EvalBuilder
+     * @param descr The Eval Descriptor to build the eval conditional element from
+     * 
+     * @return the Eval Conditional Element
+     */
+    public ConditionalElement build(final BuildContext context,
+                                    final BuildUtils utils,
+                                    final ColumnBuilder columnBuilder,
+                                    final BaseDescr descr) {
+        // it must be an EvalDescr
+        EvalDescr evalDescr = (EvalDescr) descr;
+
+        final String className = "eval" + context.getNextId();
+        
+        evalDescr.setClassMethodName( className );
+
+        final List[] usedIdentifiers = utils.getUsedIdentifiers( context,
+                                                                 evalDescr,
+                                                                 evalDescr.getText() );
+
+        final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
+        for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
+            declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
+        }
+
+        final EvalCondition eval = new EvalCondition( declarations );
+
+        StringTemplate st = utils.getRuleGroup().getInstanceOf( "evalMethod" );
+
+        utils.setStringTemplateAttributes( context,
+                                           st,
+                                           declarations,
+                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
+        st.setAttribute( "methodName",
+                         className );
+
+        final String evalText = evalDescr.getText();
+        st.setAttribute( "text",
+                         evalText );
+
+        context.getMethods().add( st.toString() );
+
+        st = utils.getInvokerGroup().getInstanceOf( "evalInvoker" );
+
+        st.setAttribute( "package",
+                         context.getPkg().getName() );
+        st.setAttribute( "ruleClassName",
+                         utils.ucFirst( context.getRuleDescr().getClassName() ) );
+        st.setAttribute( "invokerClassName",
+                         context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
+        st.setAttribute( "methodName",
+                         className );
+
+        utils.setStringTemplateAttributes( context,
+                                           st,
+                                           declarations,
+                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
+        st.setAttribute( "hashCode",
+                         evalText.hashCode() );
+
+        final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
+        context.getInvokers().put( invokerClassName,
+                                   st.toString() );
+        context.getInvokerLookups().put( invokerClassName,
+                                         eval );
+        context.getDescrLookups().put( invokerClassName,
+                                       evalDescr );
+        return eval;
+    }
+
+}

Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaExprAnalyzer.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaExprAnalyzer.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaExprAnalyzer.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaExprAnalyzer.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,137 @@
+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.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.antlr.runtime.ANTLRStringStream;
+import org.antlr.runtime.CharStream;
+import org.antlr.runtime.CommonTokenStream;
+import org.antlr.runtime.RecognitionException;
+import org.antlr.runtime.TokenStream;
+import org.drools.semantics.java.parser.JavaParserLexer;
+import org.drools.semantics.java.parser.JavaParserParser;
+
+/**
+ * Expression analyzer.
+ * 
+ * @author <a href="mailto:bob at eng.werken.com">bob mcwhirter </a>
+ */
+public class JavaExprAnalyzer {
+    // ------------------------------------------------------------
+    // Constructors
+    // ------------------------------------------------------------
+
+    /**
+     * Construct.
+     */
+    public JavaExprAnalyzer() {
+        // intentionally left blank.
+    }
+
+    // ------------------------------------------------------------
+    // Instance methods
+    // ------------------------------------------------------------
+
+    /**
+     * Analyze an expression.
+     * 
+     * @param expr
+     *            The expression to analyze.
+     * @param availDecls
+     *            Total set of declarations available.
+     * 
+     * @return The <code>Set</code> of declarations used by the expression.
+     * @throws RecognitionException 
+     *             If an error occurs in the parser.
+     */
+    public List[] analyzeExpression(final String expr,
+                                    final Set[] availableIdentifiers) throws RecognitionException {
+        final CharStream charStream = new ANTLRStringStream( expr );
+        final JavaParserLexer lexer = new JavaParserLexer( charStream );
+        final TokenStream tokenStream = new CommonTokenStream( lexer );
+        final JavaParserParser parser = new JavaParserParser( tokenStream );
+
+        parser.logicalOrExpression();
+
+        return analyze( parser.getIdentifiers(),
+                        availableIdentifiers );
+    }
+
+    public List[] analyzeBlock(final String expr,
+                               final Set[] availableIdentifiers) throws RecognitionException {
+        final CharStream charStream = new ANTLRStringStream( "{" + expr + "}" );
+        final JavaParserLexer lexer = new JavaParserLexer( charStream );
+        final TokenStream tokenStream = new CommonTokenStream( lexer );
+        final JavaParserParser parser = new JavaParserParser( tokenStream );
+
+        parser.compoundStatement();
+
+        return analyze( parser.getIdentifiers(),
+                        availableIdentifiers );
+    }
+
+    /**
+     * Analyze an expression.
+     * 
+     * @param availDecls
+     *            Total set of declarations available.
+     * @param ast
+     *            The AST for the expression.
+     * 
+     * @return The <code>Set</code> of declarations used by the expression.
+     * 
+     * @throws RecognitionException
+     *             If an error occurs in the parser.
+     */
+    private List[] analyze(final List identifiers,
+                           final Set[] availableIdentifiers) throws RecognitionException {
+        final List[] used = new List[availableIdentifiers.length];
+        for ( int i = 0, length = used.length; i < length; i++ ) {
+            used[i] = new ArrayList();
+        }
+
+        for ( int i = 0, length = availableIdentifiers.length; i < length; i++ ) {
+            final Set set = availableIdentifiers[i];
+            for ( final Iterator it = set.iterator(); it.hasNext(); ) {
+                final String eachDecl = (String) it.next();
+                if ( identifiers.contains( eachDecl ) ) {
+                    used[i].add( eachDecl );
+                }
+            }
+        }
+
+        return used;
+        //--------------------------------------------------------        
+        //        List decls = new ArrayList();
+        //        
+        //        for ( Iterator declIter = availDecls.iterator(); declIter.hasNext(); )
+        //        {
+        //            String eachDecl = (String) declIter.next();
+        //
+        //            if ( identifiers.contains( eachDecl ) )
+        //            {
+        //                decls.add( eachDecl );
+        //            }
+        //        }
+        //
+        //        return decls;        
+    }
+}
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaPredicateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaPredicateBuilder.java	2007-02-27 00:06:47 UTC (rev 9780)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaPredicateBuilder.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -1,89 +0,0 @@
-package org.drools.dialect.java;
-
-import java.util.List;
-
-import org.antlr.stringtemplate.StringTemplate;
-import org.drools.lang.descr.PredicateDescr;
-import org.drools.rule.Declaration;
-import org.drools.rule.PredicateConstraint;
-import org.drools.semantics.java.builder.BuildContext;
-import org.drools.semantics.java.builder.BuildUtils;
-import org.drools.semantics.java.builder.PredicateBuilder;
-
-public class JavaPredicateBuilder
-    implements
-    PredicateBuilder {
-
-    public void build(final BuildContext context,
-                      final BuildUtils utils,
-                      final List[] usedIdentifiers,
-                      final Declaration[] previousDeclarations,
-                      final Declaration[] localDeclarations,
-                      final PredicateConstraint predicateConstraint,
-                      final PredicateDescr predicateDescr) {
-        // generate 
-        // generate Invoker
-        final String className = "predicate" + context.getNextId();
-        predicateDescr.setClassMethodName( className );
-
-        StringTemplate st = utils.getRuleGroup().getInstanceOf( "predicateMethod" );
-
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           previousDeclarations,
-                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
-
-        final String[] localDeclarationTypes = new String[localDeclarations.length];
-        for ( int i = 0, size = localDeclarations.length; i < size; i++ ) {
-            localDeclarationTypes[i] = utils.getTypeFixer().fix( localDeclarations[i] );
-        }
-
-        st.setAttribute( "localDeclarations",
-                         localDeclarations );
-        st.setAttribute( "localDeclarationTypes",
-                         localDeclarationTypes );
-
-        st.setAttribute( "methodName",
-                         className );
-
-        final String predicateText = predicateDescr.getText();
-
-        st.setAttribute( "text",
-                         predicateText );
-
-        context.getMethods().add( st.toString() );
-
-        st = utils.getInvokerGroup().getInstanceOf( "predicateInvoker" );
-
-        st.setAttribute( "package",
-                         context.getPkg().getName() );
-        st.setAttribute( "ruleClassName",
-                         utils.ucFirst( context.getRuleDescr().getClassName() ) );
-        st.setAttribute( "invokerClassName",
-                         context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
-        st.setAttribute( "methodName",
-                         className );
-
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           previousDeclarations,
-                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
-
-        st.setAttribute( "localDeclarations",
-                         localDeclarations );
-        st.setAttribute( "localDeclarationTypes",
-                         localDeclarationTypes );
-
-        st.setAttribute( "hashCode",
-                         predicateText.hashCode() );
-
-        final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
-        context.getInvokers().put( invokerClassName,
-                                   st.toString() );
-        context.getInvokerLookups().put( invokerClassName,
-                                         predicateConstraint );
-        context.getDescrLookups().put( invokerClassName,
-                                       predicateDescr );
-    }
-
-}

Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaPredicateBuilder.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaPredicateBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaPredicateBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaPredicateBuilder.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,89 @@
+package org.drools.rule.builder.dialect.java;
+
+import java.util.List;
+
+import org.antlr.stringtemplate.StringTemplate;
+import org.drools.lang.descr.PredicateDescr;
+import org.drools.rule.Declaration;
+import org.drools.rule.PredicateConstraint;
+import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.BuildUtils;
+import org.drools.rule.builder.PredicateBuilder;
+
+public class JavaPredicateBuilder
+    implements
+    PredicateBuilder {
+
+    public void build(final BuildContext context,
+                      final BuildUtils utils,
+                      final List[] usedIdentifiers,
+                      final Declaration[] previousDeclarations,
+                      final Declaration[] localDeclarations,
+                      final PredicateConstraint predicateConstraint,
+                      final PredicateDescr predicateDescr) {
+        // generate 
+        // generate Invoker
+        final String className = "predicate" + context.getNextId();
+        predicateDescr.setClassMethodName( className );
+
+        StringTemplate st = utils.getRuleGroup().getInstanceOf( "predicateMethod" );
+
+        utils.setStringTemplateAttributes( context,
+                                           st,
+                                           previousDeclarations,
+                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
+        final String[] localDeclarationTypes = new String[localDeclarations.length];
+        for ( int i = 0, size = localDeclarations.length; i < size; i++ ) {
+            localDeclarationTypes[i] = utils.getTypeFixer().fix( localDeclarations[i] );
+        }
+
+        st.setAttribute( "localDeclarations",
+                         localDeclarations );
+        st.setAttribute( "localDeclarationTypes",
+                         localDeclarationTypes );
+
+        st.setAttribute( "methodName",
+                         className );
+
+        final String predicateText = predicateDescr.getText();
+
+        st.setAttribute( "text",
+                         predicateText );
+
+        context.getMethods().add( st.toString() );
+
+        st = utils.getInvokerGroup().getInstanceOf( "predicateInvoker" );
+
+        st.setAttribute( "package",
+                         context.getPkg().getName() );
+        st.setAttribute( "ruleClassName",
+                         utils.ucFirst( context.getRuleDescr().getClassName() ) );
+        st.setAttribute( "invokerClassName",
+                         context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
+        st.setAttribute( "methodName",
+                         className );
+
+        utils.setStringTemplateAttributes( context,
+                                           st,
+                                           previousDeclarations,
+                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
+        st.setAttribute( "localDeclarations",
+                         localDeclarations );
+        st.setAttribute( "localDeclarationTypes",
+                         localDeclarationTypes );
+
+        st.setAttribute( "hashCode",
+                         predicateText.hashCode() );
+
+        final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
+        context.getInvokers().put( invokerClassName,
+                                   st.toString() );
+        context.getInvokerLookups().put( invokerClassName,
+                                         predicateConstraint );
+        context.getDescrLookups().put( invokerClassName,
+                                       predicateDescr );
+    }
+
+}

Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaReturnValueBuilder.java	2007-02-27 00:06:47 UTC (rev 9780)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueBuilder.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -1,81 +0,0 @@
-package org.drools.dialect.java;
-
-import java.util.List;
-
-import org.antlr.stringtemplate.StringTemplate;
-import org.drools.lang.descr.ReturnValueRestrictionDescr;
-import org.drools.rule.Declaration;
-import org.drools.rule.ReturnValueRestriction;
-import org.drools.semantics.java.builder.BuildContext;
-import org.drools.semantics.java.builder.BuildUtils;
-
-public class JavaReturnValueBuilder {
-    public void build(final BuildContext context,
-                      final BuildUtils utils,
-                      final List[] usedIdentifiers,
-                      final Declaration[] previousDeclarations,
-                      final Declaration[] localDeclarations,
-                      final ReturnValueRestriction returnValueRestriction,
-                      final ReturnValueRestrictionDescr returnValueRestrictionDescr) {
-        final String className = "returnValue" + context.getNextId();
-        returnValueRestrictionDescr.setClassMethodName( className );
-
-        StringTemplate st = utils.getRuleGroup().getInstanceOf( "returnValueMethod" );
-
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           previousDeclarations,
-                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
-
-        final String[] localDeclarationTypes = new String[localDeclarations.length];
-        for ( int i = 0, size = localDeclarations.length; i < size; i++ ) {
-            localDeclarationTypes[i] = utils.getTypeFixer().fix( localDeclarations[i] );
-        }
-
-        st.setAttribute( "localDeclarations",
-                         localDeclarations );
-        st.setAttribute( "localDeclarationTypes",
-                         localDeclarationTypes );
-
-        st.setAttribute( "methodName",
-                         className );
-
-        final String returnValueText = returnValueRestrictionDescr.getText();
-        st.setAttribute( "text",
-                         returnValueText );
-
-        context.getMethods().add( st.toString() );
-
-        st = utils.getInvokerGroup().getInstanceOf( "returnValueInvoker" );
-
-        st.setAttribute( "package",
-                         context.getPkg().getName() );
-        st.setAttribute( "ruleClassName",
-                         utils.ucFirst( context.getRuleDescr().getClassName() ) );
-        st.setAttribute( "invokerClassName",
-                         context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
-        st.setAttribute( "methodName",
-                         className );
-
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           previousDeclarations,
-                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
-
-        st.setAttribute( "localDeclarations",
-                         localDeclarations );
-        st.setAttribute( "localDeclarationTypes",
-                         localDeclarationTypes );
-
-        st.setAttribute( "hashCode",
-                         returnValueText.hashCode() );
-
-        final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
-        context.getInvokers().put( invokerClassName,
-                                   st.toString() );
-        context.getInvokerLookups().put( invokerClassName,
-                                         returnValueRestriction );
-        context.getDescrLookups().put( invokerClassName,
-                                       returnValueRestrictionDescr );
-    }
-}

Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueBuilder.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaReturnValueBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueBuilder.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,81 @@
+package org.drools.rule.builder.dialect.java;
+
+import java.util.List;
+
+import org.antlr.stringtemplate.StringTemplate;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
+import org.drools.rule.Declaration;
+import org.drools.rule.ReturnValueRestriction;
+import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.BuildUtils;
+
+public class JavaReturnValueBuilder {
+    public void build(final BuildContext context,
+                      final BuildUtils utils,
+                      final List[] usedIdentifiers,
+                      final Declaration[] previousDeclarations,
+                      final Declaration[] localDeclarations,
+                      final ReturnValueRestriction returnValueRestriction,
+                      final ReturnValueRestrictionDescr returnValueRestrictionDescr) {
+        final String className = "returnValue" + context.getNextId();
+        returnValueRestrictionDescr.setClassMethodName( className );
+
+        StringTemplate st = utils.getRuleGroup().getInstanceOf( "returnValueMethod" );
+
+        utils.setStringTemplateAttributes( context,
+                                           st,
+                                           previousDeclarations,
+                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
+        final String[] localDeclarationTypes = new String[localDeclarations.length];
+        for ( int i = 0, size = localDeclarations.length; i < size; i++ ) {
+            localDeclarationTypes[i] = utils.getTypeFixer().fix( localDeclarations[i] );
+        }
+
+        st.setAttribute( "localDeclarations",
+                         localDeclarations );
+        st.setAttribute( "localDeclarationTypes",
+                         localDeclarationTypes );
+
+        st.setAttribute( "methodName",
+                         className );
+
+        final String returnValueText = returnValueRestrictionDescr.getText();
+        st.setAttribute( "text",
+                         returnValueText );
+
+        context.getMethods().add( st.toString() );
+
+        st = utils.getInvokerGroup().getInstanceOf( "returnValueInvoker" );
+
+        st.setAttribute( "package",
+                         context.getPkg().getName() );
+        st.setAttribute( "ruleClassName",
+                         utils.ucFirst( context.getRuleDescr().getClassName() ) );
+        st.setAttribute( "invokerClassName",
+                         context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
+        st.setAttribute( "methodName",
+                         className );
+
+        utils.setStringTemplateAttributes( context,
+                                           st,
+                                           previousDeclarations,
+                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
+        st.setAttribute( "localDeclarations",
+                         localDeclarations );
+        st.setAttribute( "localDeclarationTypes",
+                         localDeclarationTypes );
+
+        st.setAttribute( "hashCode",
+                         returnValueText.hashCode() );
+
+        final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
+        context.getInvokers().put( invokerClassName,
+                                   st.toString() );
+        context.getInvokerLookups().put( invokerClassName,
+                                         returnValueRestriction );
+        context.getDescrLookups().put( invokerClassName,
+                                       returnValueRestrictionDescr );
+    }
+}

Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/KnowledgeHelperFixer.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/KnowledgeHelperFixer.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/KnowledgeHelperFixer.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/KnowledgeHelperFixer.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,199 @@
+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.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class KnowledgeHelperFixer {
+
+    static String  KNOWLEDGE_HELPER_PFX = "";                               //could also be: "drools\\." for "classic" mode.
+    static Pattern MODIFY               = Pattern.compile( "(.*)\\b" + KnowledgeHelperFixer.KNOWLEDGE_HELPER_PFX + "modify\\s*\\(([^)]+)\\)(.*)",
+                                                           Pattern.DOTALL );
+    static Pattern ASSERT               = Pattern.compile( "(.*)\\b" + KnowledgeHelperFixer.KNOWLEDGE_HELPER_PFX + "assert\\s*\\((.*)\\)(.*)",
+                                                           Pattern.DOTALL );
+    static Pattern ASSERT_LOGICAL       = Pattern.compile( "(.*)\\b" + KnowledgeHelperFixer.KNOWLEDGE_HELPER_PFX + "assertLogical\\s*\\((.*)\\)(.*)",
+                                                           Pattern.DOTALL );
+    static Pattern RETRACT              = Pattern.compile( "(.*)\\b" + KnowledgeHelperFixer.KNOWLEDGE_HELPER_PFX + "retract\\s*\\(([^)]+)\\)(.*)",
+                                                           Pattern.DOTALL );
+
+    /**
+     * This takes a raw consequence, and fixes up the KnowledegeHelper references 
+     * to be what SMF requires.
+     *
+     * eg: modify( myObject ); --> drools.modify( myObjectHandle, myObject );
+     * refer to the Replacer implementation classes below for the specific replacement patterns.
+     * 
+     * (can adjust the PREFIX if needed).
+     * 
+     * Uses some non-tail recursion to ensure that all parts are "expanded". 
+     */
+    public String fix(final String raw) {
+        String result = fix( raw,
+                             ModifyReplacer.INSTANCE );
+        result = fix( result,
+                      AssertReplacer.INSTANCE );
+        result = fix( result,
+                      AssertLogicalReplacer.INSTANCE );
+        result = fix( result,
+                      RetractReplacer.INSTANCE );
+        return result;
+    }
+
+    /**
+     * Recursively apply the pattern, replace the guts of what is matched.
+     */
+    public String fix(final String raw,
+                      final Replacer replacer) {
+        if ( raw == null ) {
+            return null;
+        }
+        final Matcher matcher = replacer.getPattern().matcher( raw );
+
+        if ( matcher.matches() ) {
+            String pre = matcher.group( 1 );
+            if ( matcher.group( 1 ) != null ) {
+                pre = fix( pre,
+                           replacer );
+            }
+            final String obj = matcher.group( 2 ).trim();
+            String post = matcher.group( 3 );
+            if ( post != null ) {
+                post = fix( post,
+                            replacer );
+            }
+
+            final String replacement = escapeDollarSigns( replacer,
+                                                    obj );
+            return pre + matcher.replaceAll( replacement ) + post;
+
+        } else {
+            return raw;
+        }
+    }
+
+    /** 
+     * This is needed to escape "$" so that matches doesn't try and pull out groups that don't exist.
+     * "$" may just be used in variable name etc... 
+     */
+    private String escapeDollarSigns(final Replacer replacer,
+                                     final String obj) {
+        return KnowledgeHelperFixer.replace( replacer.getReplacement( obj ),
+                             "$",
+                             "\\$",
+                             256 );
+    }
+
+    static interface Replacer {
+        Pattern getPattern();
+
+        String getReplacement(String guts);
+    }
+
+    static class AssertReplacer
+        implements
+        Replacer {
+
+        static Replacer INSTANCE = new AssertReplacer();
+
+        public Pattern getPattern() {
+            return KnowledgeHelperFixer.ASSERT;
+        }
+
+        public String getReplacement(final String guts) {
+            return "drools.assertObject(" + guts + ")";
+        }
+
+    }
+
+    static class AssertLogicalReplacer
+        implements
+        Replacer {
+
+        static Replacer INSTANCE = new AssertLogicalReplacer();
+
+        public Pattern getPattern() {
+            return KnowledgeHelperFixer.ASSERT_LOGICAL;
+        }
+
+        public String getReplacement(final String guts) {
+            return "drools.assertLogicalObject(" + guts + ")";
+        }
+
+    }
+
+    static class ModifyReplacer
+        implements
+        Replacer {
+
+        static Replacer INSTANCE = new ModifyReplacer();
+
+        public Pattern getPattern() {
+            return KnowledgeHelperFixer.MODIFY;
+        }
+
+        public String getReplacement(final String guts) {
+            return "drools.modifyObject(" + guts.trim() + "__Handle__, " + guts + ")";
+        }
+
+    }
+
+    static class RetractReplacer
+        implements
+        Replacer {
+
+        static Replacer INSTANCE = new RetractReplacer();
+
+        public Pattern getPattern() {
+            return KnowledgeHelperFixer.RETRACT;
+        }
+
+        public String getReplacement(final String guts) {
+            return "drools.retractObject(" + guts.trim() + "__Handle__)";
+        }
+
+    }
+
+    /**
+     * Simple non regex replacer. 
+     * jakarta commons provided the inspiration for this.
+     */
+    static String replace(final String text,
+                          final String repl,
+                          final String with,
+                          int max) {
+        if ( text == null || repl == null || repl.equals( "" ) || with == null || max == 0 ) {
+            return text;
+        }
+
+        final StringBuffer buf = new StringBuffer( text.length() );
+        int start = 0, end = 0;
+        while ( (end = text.indexOf( repl,
+                                     start )) != -1 ) {
+            buf.append( text.substring( start,
+                                        end ) ).append( with );
+            start = end + repl.length();
+
+            if ( --max == 0 ) {
+                break;
+            }
+        }
+        buf.append( text.substring( start ) );
+        return buf.toString();
+    }
+
+}
\ No newline at end of file

Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/PackageStore.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/PackageStore.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/PackageStore.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/PackageStore.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,65 @@
+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 org.apache.commons.jci.stores.ResourceStore;
+import org.drools.rule.PackageCompilationData;
+
+public class PackageStore
+    implements
+    ResourceStore {
+    private PackageCompilationData packageCompilationData;
+
+    public PackageStore() {
+    }
+
+    public PackageStore(final PackageCompilationData packageCompiationData) {
+        this.packageCompilationData = packageCompiationData;
+    }
+
+    public void setPackageCompilationData(final PackageCompilationData packageCompiationData) {
+        this.packageCompilationData = packageCompiationData;
+    }
+
+    public void write(final String resourceName,
+                      final byte[] clazzData) {
+        try {
+            this.packageCompilationData.write( resourceName,
+                                               clazzData );
+        } catch ( final Exception e ) {
+
+        }
+    }
+
+    public byte[] read(final String resourceName) {
+        byte[] clazz = null;
+        try {
+            clazz = this.packageCompilationData.read( resourceName );
+        } catch ( final Exception e ) {
+
+        }
+        return clazz;
+    }
+
+    public void remove(final String resourceName) {
+        try {
+            this.packageCompilationData.remove( resourceName );
+        } catch ( final Exception e ) {
+
+        }
+    }
+}
\ No newline at end of file

Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/RuleBuilder.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/RuleBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/RuleBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/RuleBuilder.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,250 @@
+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.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

Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel (from rev 9780, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/mvel)

Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/mvel/MVELEvalBuilder.java	2007-02-27 00:06:47 UTC (rev 9780)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -1,83 +0,0 @@
-/*
- * 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.dialect.mvel;
-
-import java.io.Serializable;
-import java.util.List;
-
-import org.antlr.stringtemplate.StringTemplate;
-import org.drools.base.DroolsMVELFactory;
-import org.drools.base.MVEL.MVELEvalExpression;
-import org.drools.lang.descr.BaseDescr;
-import org.drools.lang.descr.EvalDescr;
-import org.drools.rule.ConditionalElement;
-import org.drools.rule.Declaration;
-import org.drools.rule.EvalCondition;
-import org.drools.semantics.java.builder.BuildContext;
-import org.drools.semantics.java.builder.BuildUtils;
-import org.drools.semantics.java.builder.ColumnBuilder;
-import org.drools.semantics.java.builder.ConditionalElementBuilder;
-import org.drools.spi.DeclarationScopeResolver;
-import org.mvel.MVEL;
-
-/**
- * @author etirelli
- *
- */
-public class MVELEvalBuilder
-    implements
-    ConditionalElementBuilder {
-
-    /**
-     * Builds and returns an Eval Conditional Element
-     * 
-     * @param context The current build context
-     * @param utils The current build utils instance
-     * @param columnBuilder not used by EvalBuilder
-     * @param descr The Eval Descriptor to build the eval conditional element from
-     * 
-     * @return the Eval Conditional Element
-     */
-    public ConditionalElement build(final BuildContext context,
-                                    final BuildUtils utils,
-                                    final ColumnBuilder columnBuilder,
-                                    final BaseDescr descr) {
-        // it must be an EvalDescr
-        EvalDescr evalDescr = (EvalDescr) descr;
-
-        final Declaration[] declarations = new Declaration[0];
-//        final List[] usedIdentifiers = utils.getUsedIdentifiers( context,
-//                                                                 evalDescr,
-//                                                                 evalDescr.getText() );
-//
-//        final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
-//        for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
-//            declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
-//        }
-
-        DroolsMVELFactory factory = new DroolsMVELFactory( );
-        factory.setDeclarationMap( context.getDeclarationResolver().getDeclarations() );
-        factory.setGlobalsMap( context.getPkg().getGlobals() );        
-        
-        Serializable expr = MVEL.compileExpression( evalDescr.getText() );       
-        final EvalCondition eval = new EvalCondition( declarations );
-        eval.setEvalExpression( new MVELEvalExpression(expr,factory) );
-        
-        return eval;
-    }
-    
-}

Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/mvel/MVELEvalBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,83 @@
+/*
+ * 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.rule.builder.dialect.mvel;
+
+import java.io.Serializable;
+import java.util.List;
+
+import org.antlr.stringtemplate.StringTemplate;
+import org.drools.base.DroolsMVELFactory;
+import org.drools.base.MVEL.MVELEvalExpression;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.EvalDescr;
+import org.drools.rule.ConditionalElement;
+import org.drools.rule.Declaration;
+import org.drools.rule.EvalCondition;
+import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.BuildUtils;
+import org.drools.rule.builder.ColumnBuilder;
+import org.drools.rule.builder.ConditionalElementBuilder;
+import org.drools.spi.DeclarationScopeResolver;
+import org.mvel.MVEL;
+
+/**
+ * @author etirelli
+ *
+ */
+public class MVELEvalBuilder
+    implements
+    ConditionalElementBuilder {
+
+    /**
+     * Builds and returns an Eval Conditional Element
+     * 
+     * @param context The current build context
+     * @param utils The current build utils instance
+     * @param columnBuilder not used by EvalBuilder
+     * @param descr The Eval Descriptor to build the eval conditional element from
+     * 
+     * @return the Eval Conditional Element
+     */
+    public ConditionalElement build(final BuildContext context,
+                                    final BuildUtils utils,
+                                    final ColumnBuilder columnBuilder,
+                                    final BaseDescr descr) {
+        // it must be an EvalDescr
+        EvalDescr evalDescr = (EvalDescr) descr;
+
+        final Declaration[] declarations = new Declaration[0];
+//        final List[] usedIdentifiers = utils.getUsedIdentifiers( context,
+//                                                                 evalDescr,
+//                                                                 evalDescr.getText() );
+//
+//        final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
+//        for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
+//            declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
+//        }
+
+        DroolsMVELFactory factory = new DroolsMVELFactory( );
+        factory.setDeclarationMap( context.getDeclarationResolver().getDeclarations() );
+        factory.setGlobalsMap( context.getPkg().getGlobals() );        
+        
+        Serializable expr = MVEL.compileExpression( evalDescr.getText() );       
+        final EvalCondition eval = new EvalCondition( declarations );
+        eval.setEvalExpression( new MVELEvalExpression(expr,factory) );
+        
+        return eval;
+    }
+    
+}

Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/mvel/MVELFromBuilder.java	2007-02-27 00:06:47 UTC (rev 9780)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -1,91 +0,0 @@
-/*
- * 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.dialect.mvel;
-
-import java.io.Serializable;
-
-import org.drools.base.DroolsMVELFactory;
-import org.drools.base.dataproviders.MVELDataProvider;
-import org.drools.compiler.RuleError;
-import org.drools.lang.descr.AccessorDescr;
-import org.drools.lang.descr.BaseDescr;
-import org.drools.lang.descr.FromDescr;
-import org.drools.rule.Column;
-import org.drools.rule.ConditionalElement;
-import org.drools.rule.From;
-import org.drools.semantics.java.builder.BuildContext;
-import org.drools.semantics.java.builder.BuildUtils;
-import org.drools.semantics.java.builder.ColumnBuilder;
-import org.drools.semantics.java.builder.ConditionalElementBuilder;
-import org.drools.semantics.java.builder.FromBuilder;
-import org.drools.spi.DataProvider;
-import org.mvel.CompiledExpression;
-import org.mvel.ExpressionParser;
-import org.mvel.MVEL;
-
-/**
- * A builder for "from" conditional element
- * 
- * @author etirelli
- */
-public class MVELFromBuilder
-    implements
-    ConditionalElementBuilder, FromBuilder {
-
-    /* (non-Javadoc)
-     * @see org.drools.dialect.mvel.FromBuilder#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(final BuildContext context,
-                                    final BuildUtils utils,
-                                    final ColumnBuilder columnBuilder,
-                                    final BaseDescr descr) {
-        FromDescr fromDescr = (FromDescr) descr;
-
-        final Column column = columnBuilder.build( context,
-                                                   utils,
-                                                   fromDescr.getReturnedColumn() );
-
-        if ( column == null ) {
-            return null;
-        }
-
-        AccessorDescr accessor = (AccessorDescr) fromDescr.getDataSource();
-        DataProvider dataProvider = null;
-        try {
-//            JFDIParser parser = createParser( utils,
-//                                              accessor.toString() );
-            DroolsMVELFactory factory = new DroolsMVELFactory( );
-            factory.setDeclarationMap( context.getDeclarationResolver().getDeclarations() );
-            factory.setGlobalsMap( context.getPkg().getGlobals() );
-            
-            //parser.setValueHandlerFactory( factory );
-            Serializable compiled = MVEL.compileExpression( accessor.toString() );
-
-            dataProvider = new MVELDataProvider( compiled,
-                                                 factory );
-        } catch ( final Exception e ) {
-            context.getErrors().add( new RuleError( context.getRule(),
-                                                    fromDescr,
-                                                    null,
-                                                    "Unable to build expression for 'from' node '" + accessor.toString() + "'" ) );
-            return null;
-        }
-
-        return new From( column,
-                         dataProvider );
-    }
-}

Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java (from rev 9781, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/mvel/MVELFromBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -0,0 +1,91 @@
+/*
+ * 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.rule.builder.dialect.mvel;
+
+import java.io.Serializable;
+
+import org.drools.base.DroolsMVELFactory;
+import org.drools.base.dataproviders.MVELDataProvider;
+import org.drools.compiler.RuleError;
+import org.drools.lang.descr.AccessorDescr;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.FromDescr;
+import org.drools.rule.Column;
+import org.drools.rule.ConditionalElement;
+import org.drools.rule.From;
+import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.BuildUtils;
+import org.drools.rule.builder.ColumnBuilder;
+import org.drools.rule.builder.ConditionalElementBuilder;
+import org.drools.rule.builder.FromBuilder;
+import org.drools.spi.DataProvider;
+import org.mvel.CompiledExpression;
+import org.mvel.ExpressionParser;
+import org.mvel.MVEL;
+
+/**
+ * A builder for "from" conditional element
+ * 
+ * @author etirelli
+ */
+public class MVELFromBuilder
+    implements
+    ConditionalElementBuilder, FromBuilder {
+
+    /* (non-Javadoc)
+     * @see org.drools.dialect.mvel.FromBuilder#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(final BuildContext context,
+                                    final BuildUtils utils,
+                                    final ColumnBuilder columnBuilder,
+                                    final BaseDescr descr) {
+        FromDescr fromDescr = (FromDescr) descr;
+
+        final Column column = columnBuilder.build( context,
+                                                   utils,
+                                                   fromDescr.getReturnedColumn() );
+
+        if ( column == null ) {
+            return null;
+        }
+
+        AccessorDescr accessor = (AccessorDescr) fromDescr.getDataSource();
+        DataProvider dataProvider = null;
+        try {
+//            JFDIParser parser = createParser( utils,
+//                                              accessor.toString() );
+            DroolsMVELFactory factory = new DroolsMVELFactory( );
+            factory.setDeclarationMap( context.getDeclarationResolver().getDeclarations() );
+            factory.setGlobalsMap( context.getPkg().getGlobals() );
+            
+            //parser.setValueHandlerFactory( factory );
+            Serializable compiled = MVEL.compileExpression( accessor.toString() );
+
+            dataProvider = new MVELDataProvider( compiled,
+                                                 factory );
+        } catch ( final Exception e ) {
+            context.getErrors().add( new RuleError( context.getRule(),
+                                                    fromDescr,
+                                                    null,
+                                                    "Unable to build expression for 'from' node '" + accessor.toString() + "'" ) );
+            return null;
+        }
+
+        return new From( column,
+                         dataProvider );
+    }
+}

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/dialect/mvel/MVELEvalBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/dialect/mvel/MVELEvalBuilderTest.java	2007-02-27 00:11:32 UTC (rev 9781)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/dialect/mvel/MVELEvalBuilderTest.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -20,6 +20,7 @@
 import org.drools.rule.EvalCondition;
 import org.drools.rule.Package;
 import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.dialect.mvel.MVELEvalBuilder;
 import org.drools.spi.DeclarationScopeResolver;
 import org.drools.spi.FieldExtractor;
 

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:11:32 UTC (rev 9781)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/AccumulateTemplateTest.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -13,8 +13,8 @@
 import org.drools.Person;
 import org.drools.base.ClassFieldExtractor;
 import org.drools.base.ClassObjectType;
-import org.drools.dialect.java.RuleBuilder;
 import org.drools.rule.Declaration;
+import org.drools.rule.builder.dialect.java.RuleBuilder;
 import org.drools.spi.ColumnExtractor;
 
 public class AccumulateTemplateTest extends TestCase {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/KnowledgeHelperFixerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/KnowledgeHelperFixerTest.java	2007-02-27 00:11:32 UTC (rev 9781)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/KnowledgeHelperFixerTest.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-import org.drools.dialect.java.KnowledgeHelperFixer;
+import org.drools.rule.builder.dialect.java.KnowledgeHelperFixer;
 
 import junit.framework.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:11:32 UTC (rev 9781)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/RuleBuilderTest.java	2007-02-27 00:15:50 UTC (rev 9782)
@@ -29,13 +29,13 @@
 import org.codehaus.jfdi.interpreter.TypeResolver;
 import org.drools.base.ClassFieldExtractorCache;
 import org.drools.compiler.DrlParser;
-import org.drools.dialect.java.RuleBuilder;
 import org.drools.lang.descr.AttributeDescr;
 import org.drools.lang.descr.PackageDescr;
 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.RuleBuilder;
 import org.drools.spi.FunctionResolver;
 
 /**
@@ -59,7 +59,7 @@
     }
 
     /**
-     * Test method for {@link org.drools.dialect.java.RuleBuilder#build(org.drools.rule.Package, org.drools.lang.descr.RuleDescr)}.
+     * Test method for {@link org.drools.rule.builder.dialect.java.RuleBuilder#build(org.drools.rule.Package, org.drools.lang.descr.RuleDescr)}.
      */
     public void testBuild() {
         try {




More information about the jboss-svn-commits mailing list