[jboss-svn-commits] JBL Code SVN: r13539 - in labs/jbossrules/branches/mvel-tooling-2007-06-30: drools-compiler/src/main/java/org/drools/compiler and 38 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Jul 15 20:31:14 EDT 2007


Author: pombredanne
Date: 2007-07-15 20:31:13 -0400 (Sun, 15 Jul 2007)
New Revision: 13539

Added:
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/Dialect.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/DialectConfiguration.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialectConfiguration.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialectConfiguration.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/integrationtests/test_CollectAlphaRestriction.drl
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/integrationtests/test_bindings.drl
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/integrationtests/test_multipleFroms.drl
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/EventManager.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/LocalVariableResolver.java
Removed:
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/lang/dsl/DefaultExpanderResolverTest.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/ConcurrentStatelessSession.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/NoSuchFactHandleException.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/NoSuchFactObjectException.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/ReteConcurrentStatelessSession.java
Modified:
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/.classpath
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/DialectRegistry.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAnalysisResult.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/parser/JavaLexer.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/parser/JavaParser.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAccumulateBuilder.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAnalysisResult.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/resources/META-INF/drools.default.packagebuilder.conf
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/compiler/Java5Test.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderConfigurationTest.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/integrationtests/AccumulateTest.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/integrationtests/FirstOrderLogicTest.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilderTest.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/InstrumentedBuildContent.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilderTest.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/integrationtests/test_AccumulateMVEL.drl
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/integrationtests/test_MapAccess.drl
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/.classpath
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/Agenda.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/FactException.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/InitialFact.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/ObjectFilter.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/Otherwise.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/PackageIntegrationException.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/QueryResult.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/QueryResults.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/RuleBase.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/RuleBaseFactory.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/StatelessSession.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/WorkingMemory.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/audit/WorkingMemoryFileLogger.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/audit/WorkingMemoryLogger.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/ClassObjectFilter.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/ClassTypeResolver.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/accumulators/JavaAccumulatorFunctionExecutor.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/accumulators/MVELAccumulatorFunctionExecutor.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/dataproviders/MVELDataProvider.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/evaluators/ObjectFactory.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELFactory.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELAccumulator.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELConsequence.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELEvalExpression.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELPredicateExpression.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELReturnValueExpression.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELSalienceExpression.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/concurrent/CommandExecutor.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/concurrent/ExecutorService.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/Rete.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/builder/AccumulateBuilder.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/builder/CollectBuilder.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/rule/Accumulate.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/ruleflow/instance/impl/RuleFlowProcessInstanceImpl.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/spi/Accumulator.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/util/ChainedProperties.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/test/java/org/drools/reteoo/AccumulateNodeTest.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/test/java/org/drools/reteoo/MockAccumulator.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/test/java/org/drools/reteoo/OtherwiseTest.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/ExternalSheetListenerTest.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DRLInfo.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-examples/drools-examples-brms/.classpath
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-jbrms/src/main/java/org/drools/brms/server/builder/BRMSPackageBuilder.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-jbrms/src/test/java/org/drools/brms/server/builder/BRMSPackageBuilderTest.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-jsr94/src/main/java/org/drools/jsr94/rules/ObjectFilterAdapter.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-jsr94/src/main/java/org/drools/jsr94/rules/StatefulRuleSessionImpl.java
Log:
Ported r13536 from trunk to branch mvel-tooling-2007-06-30
- includes fixes as side effect of refactored Dialect interface move to org.drools.compiler

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/.classpath
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/.classpath	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/.classpath	2007-07-16 00:31:13 UTC (rev 13539)
@@ -6,14 +6,14 @@
   <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
   <classpathentry kind="output" path="target/classes"/>
   <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3/1.1.3.4.O/xpp3-1.1.3.4.O.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0/antlr-runtime-3.0.jar"/>
   <classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/xstream/xstream/1.1.3/xstream-1.1.3.jar"/>
   <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+  <classpathentry kind="src" path="/drools-core"/>
   <classpathentry kind="var" path="M2_REPO/org/mvel/mvel14/1.2pre3/mvel14-1.2pre3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xstream/xstream/1.1.3/xstream-1.1.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.4.0/xercesImpl-2.4.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.7/janino-2.5.7.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3/1.1.3.4.O/xpp3-1.1.3.4.O.jar"/>
-  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.7/janino-2.5.7.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.4.0/xercesImpl-2.4.0.jar"/>
-  <classpathentry kind="src" path="/drools-core"/>
 </classpath>

Copied: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/Dialect.java (from rev 13516, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/Dialect.java)
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/Dialect.java	                        (rev 0)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/Dialect.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -0,0 +1,129 @@
+package org.drools.compiler;
+
+import java.util.List;
+import java.util.Map;
+
+import org.drools.base.ClassFieldExtractorCache;
+import org.drools.base.TypeResolver;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.FunctionDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.rule.Package;
+import org.drools.rule.builder.AccumulateBuilder;
+import org.drools.rule.builder.ConsequenceBuilder;
+import org.drools.rule.builder.FromBuilder;
+import org.drools.rule.builder.PatternBuilder;
+import org.drools.rule.builder.PredicateBuilder;
+import org.drools.rule.builder.QueryBuilder;
+import org.drools.rule.builder.ReturnValueBuilder;
+import org.drools.rule.builder.RuleBuildContext;
+import org.drools.rule.builder.RuleClassBuilder;
+import org.drools.rule.builder.RuleConditionBuilder;
+import org.drools.rule.builder.SalienceBuilder;
+
+/**
+ * A Dialect implementation handles the building and execution of code expressions and blocks for a rule.
+ * This api is considered unstable, and subject to change. Those wishing to implement their own dialects
+ * should look ove the MVEL and Java dialect implementations.
+ *
+ */
+public interface Dialect {
+
+	//MVEL: Compiler change
+    String getId();
+    
+    void init(PackageBuilder builder);
+    
+    // this is needed because some dialects use other dialects
+    // to build complex expressions. Example: java dialect uses MVEL
+    // to execute complex expressions 
+    String getExpressionDialectName();
+
+    Map getBuilders();
+
+    TypeResolver getTypeResolver();
+
+    ClassFieldExtractorCache getClassFieldExtractorCache();
+
+    SalienceBuilder getSalienceBuilder();
+
+    PatternBuilder getPatternBuilder();
+
+    QueryBuilder getQueryBuilder();
+
+    RuleConditionBuilder getEvalBuilder();
+
+    AccumulateBuilder getAccumulateBuilder();
+
+    PredicateBuilder getPredicateBuilder();
+
+    ReturnValueBuilder getReturnValueBuilder();
+
+    ConsequenceBuilder getConsequenceBuilder();
+
+    RuleClassBuilder getRuleClassBuilder();
+
+    FromBuilder getFromBuilder();
+
+    RuleConditionBuilder getBuilder(Class clazz);
+
+    AnalysisResult analyzeExpression(final RuleBuildContext context,
+                                     final BaseDescr descr,
+                                     final Object content);
+
+    AnalysisResult analyzeBlock(final RuleBuildContext context,
+                                final BaseDescr descr,
+                                final String text);
+
+    void compileAll();
+
+    void addRule(final RuleBuildContext context);
+
+    void addFunction(final FunctionDescr functionDescr,
+                     TypeResolver typeResolver);
+
+    public void addImport(String importEntry);
+
+    public void addStaticImport(String importEntry);
+
+    List getResults();
+
+    void init(Package pkg);
+
+    void init(RuleDescr ruleDescr);
+
+    /**
+     * An interface with the results from the expression/block analysis
+     * 
+     * @author etirelli
+     */
+    public static interface AnalysisResult {
+
+        /**
+         * Returns the list<String> of all used identifiers
+         * @return
+         */
+        public List getIdentifiers();
+
+        /**
+         * Returns the array of lists<String> of bound identifiers
+         * @return
+         */
+        public List[] getBoundIdentifiers();
+
+        /**
+         * Returns the list<String> of not bounded identifiers
+         * @return
+         */
+        public List getNotBoundedIdentifiers();
+
+        /**
+         * Returns the list<String> of declared local variables
+         * 
+         * @return
+         */
+        public List getLocalVariables();
+
+    }
+
+}

Copied: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/DialectConfiguration.java (from rev 13516, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DialectConfiguration.java)
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/DialectConfiguration.java	                        (rev 0)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/DialectConfiguration.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -0,0 +1,16 @@
+package org.drools.compiler;
+
+/**
+ * Each Dialect can have its own configuration. Implementations of this class are typically
+ * loaded via reflection in PackageBuilderConfiguration during the call to buildDialectRegistry().
+ * This Class api is subject to change.
+ *
+ */
+public interface DialectConfiguration {    
+    
+    public void init(PackageBuilderConfiguration  configuration);
+    
+    public Dialect getDialect();
+    
+    public PackageBuilderConfiguration getPackageBuilderConfiguration();
+}

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/DialectRegistry.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/DialectRegistry.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/DialectRegistry.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -6,8 +6,12 @@
 import java.util.List;
 import java.util.Map;
 
-import org.drools.rule.builder.Dialect;
-
+/**
+ * A Registry of DialectConfigurations. It is also responsible for issueing actions to all registered
+ * dialects.
+ * This Class api is subject to change.
+ *
+ */
 public class DialectRegistry {
     private Map map;
 
@@ -15,50 +19,95 @@
         this.map = new HashMap();
     }
 
-    public void addDialect(final String name,
-                           final Dialect dialect) {
+    /**
+     * Add a DialectConfiguration to the registry
+     * @param name
+     * @param dialect
+     */
+    public void addDialectConfiguration(final String name,
+                                        final DialectConfiguration dialect) {
         this.map.put( name,
                       dialect );
     }
 
-    public Dialect getDialect(final String name) {
-        return (Dialect) this.map.get( name );
+    /**
+     * Get a DialectConfiguration for a named dialect
+     * @param name
+     * @return
+     */
+    public DialectConfiguration getDialectConfiguration(final String name) {
+        return (DialectConfiguration) this.map.get( name );
     }
-    
+
+    /**
+     * Initialise all registered dialects for the given PackageBuilder.
+     * @param builder
+     */
+    public void initAll(PackageBuilder builder) {
+        for ( Iterator it = this.map.values().iterator(); it.hasNext(); ) {
+            DialectConfiguration dialect = (DialectConfiguration) it.next();
+            dialect.getDialect().init( builder );
+        }
+    }
+
+    /**
+     * Instruct all registered dialects to compile what ever they have attempted to build.
+     *
+     */
     public void compileAll() {
         for ( Iterator it = this.map.values().iterator(); it.hasNext(); ) {
-            Dialect dialect = ( Dialect ) it.next();
-            dialect.compileAll();
+            DialectConfiguration dialect = (DialectConfiguration) it.next();
+            dialect.getDialect().compileAll();
         }
     }
-    
+
+    /**
+     * Return an Iterator of DialectConfigurations
+     * @return
+     */
     public Iterator iterator() {
         return this.map.values().iterator();
     }
-    
+
+    /**
+     * Add all registered Dialect results to the provided List.
+     * @param list
+     * @return
+     */
     public List addResults(List list) {
         if ( list == null ) {
             list = new ArrayList();
         }
         for ( Iterator it = this.map.values().iterator(); it.hasNext(); ) {
-            Dialect dialect = ( Dialect ) it.next();
-            list.addAll( dialect.getResults() );
-        }        
+            DialectConfiguration dialect = (DialectConfiguration) it.next();
+            List results = dialect.getDialect().getResults();
+            if ( results != null ) {
+                list.addAll( results );
+            }
+        }
         return list;
     }
 
+    /**
+     * Iterates all registered dialects, informing them of an import added to the PackageBuilder
+     * @param importEntry
+     */
     public void addImport(String importEntry) {
         for ( Iterator it = this.map.values().iterator(); it.hasNext(); ) {
-            Dialect dialect = ( Dialect ) it.next();
-            dialect.addImport( importEntry );
+            DialectConfiguration dialect = (DialectConfiguration) it.next();
+            dialect.getDialect().addImport( importEntry );
         }
     }
-    
+
+    /**
+     * Iterates all registered dialects, informing them of a static imports added to the PackageBuilder
+     * @param staticImportEntry
+     */    
     public void addStaticImport(String staticImportEntry) {
         for ( Iterator it = this.map.values().iterator(); it.hasNext(); ) {
-            Dialect dialect = ( Dialect ) it.next();
-            dialect.addStaticImport( staticImportEntry );
-        }        
+            DialectConfiguration dialect = (DialectConfiguration) it.next();
+            dialect.getDialect().addStaticImport( staticImportEntry );
+        }
     }
-    
+
 }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -44,7 +44,6 @@
 import org.drools.lang.descr.RuleDescr;
 import org.drools.rule.Package;
 import org.drools.rule.Rule;
-import org.drools.rule.builder.Dialect;
 import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.RuleBuilder;
 import org.drools.ruleflow.common.core.Process;
@@ -55,6 +54,12 @@
  * This is the main compiler class for parsing and compiling rules and
  * assembling or merging them into a binary Package instance. This can be done
  * by merging into existing binary packages, or totally from source.
+ * 
+ * If you are using the Java dialect the JavaDialectConfiguration will attempt to 
+ * validate that the specified compiler is in the classpath, using ClassLoader.loasClass(String). 
+ * If you intented to just Janino sa the compiler you must either overload the compiler 
+ * property before instantiating this class or the PackageBuilder, or make sure Eclipse is in the 
+ * classpath, as Eclipse is the default.
  */
 public class PackageBuilder {
 
@@ -72,7 +77,7 @@
 
     private Dialect                     dialect;
 
-    private DialectRegistry             dialects;
+//    private DialectRegistry             dialects;
 
     private ProcessBuilder              processBuilder;
 
@@ -92,6 +97,11 @@
               null );
     }
 
+    /**
+     * Pass a specific configuration for the PackageBuilder
+     * 
+     * @param configuration
+     */
     public PackageBuilder(final PackageBuilderConfiguration configuration) {
         this( null,
               configuration );
@@ -126,9 +136,13 @@
             this.typeResolver = new ClassTypeResolver( new ArrayList(),
                                                        this.configuration.getClassLoader() );
         }
+        this.configuration.getDialectRegistry().initAll( this );
+        if ( this.pkg != null ) {
+            initDialectPackage( pkg );            
+        }
+        
+        this.dialect = this.configuration.getDefaultDialect();
 
-        this.dialects = configuration.buildDialectRegistry( this );
-        this.dialect = this.dialects.getDialect( configuration.getDefaultDialect() );
     }
 
     /**
@@ -226,18 +240,15 @@
         
         // The Package does not have a default dialect, so set it
         if ( dialectName == null && this.dialect == null ) {
-                dialectName = configuration.getDefaultDialect();
-                this.dialect = this.dialects.getDialect( dialectName );     
+                this.dialect = this.configuration.getDefaultDialect();
         } 
             
         if ( dialectName != null ) {
-            this.dialect = this.dialects.getDialect( dialectName );
+            this.dialect = this.configuration.getDialectRegistry().getDialectConfiguration( dialectName ).getDialect();
         } else if ( this.dialect == null ) {
-            this.dialect = this.dialects.getDialect( configuration.getDefaultDialect() );               
+            this.dialect = this.configuration.getDefaultDialect();
         }
-        
-           
-
+                   
         if ( this.pkg != null ) {
             // mergePackage( packageDescr ) ;
             mergePackage( this.pkg,
@@ -273,8 +284,8 @@
             }
         }
 
-        this.dialects.compileAll();
-        this.results = this.dialects.addResults( this.results );
+        this.configuration.getDialectRegistry().compileAll();
+        this.results = this.configuration.getDialectRegistry().addResults( this.results );
     }
 
     private void validatePackageName(final PackageDescr packageDescr) {
@@ -308,16 +319,21 @@
         final Package pkg = new Package( packageDescr.getName(),
                                          this.configuration.getClassLoader() );       
 
-        for ( Iterator it = this.dialects.iterator(); it.hasNext(); ) {
-            Dialect dialect = ( Dialect ) it.next();
-            dialect.init( pkg );
-        }
+       initDialectPackage( pkg );
 
         mergePackage( pkg,
                       packageDescr );
 
         return pkg;
     }
+    
+    private void initDialectPackage(Package pkg) {
+        for ( Iterator it = this.configuration.getDialectRegistry().iterator(); it.hasNext(); ) {
+            Dialect dialect = (( DialectConfiguration ) it.next()).getDialect();
+            dialect.init( pkg );
+        }
+        
+    }
 
     private void mergePackage(final Package pkg,
                               final PackageDescr packageDescr) {
@@ -332,12 +348,12 @@
             String importEntry = ((ImportDescr) it.next()).getTarget();
             pkg.addImport( importEntry );
             this.typeResolver.addImport( importEntry );            
-            this.dialects.addImport( importEntry );
+            this.configuration.getDialectRegistry().addImport( importEntry );
         }
 
         for ( final Iterator it = packageDescr.getFunctionImports().iterator(); it.hasNext(); ) {
             String importEntry = ((FunctionImportDescr) it.next()).getTarget();
-            this.dialects.addStaticImport( importEntry );
+            this.configuration.getDialectRegistry().addStaticImport( importEntry );
             pkg.addStaticImport( importEntry );
         }
 
@@ -399,7 +415,7 @@
         RuleBuildContext context = new RuleBuildContext( this.configuration,
                                                          pkg,
                                                          ruleDescr,
-                                                         this.dialects,
+                                                         this.configuration.getDialectRegistry(),
                                                          this.dialect );
         this.builder.build( context );
 
@@ -435,7 +451,12 @@
 
         return this.pkg;
     }
-
+    
+    /**
+     * Return the PackageBuilderConfiguration for this PackageBuilder session
+     * @return
+     *      The PackageBuilderConfiguration
+     */
     public PackageBuilderConfiguration getPackageBuilderConfiguration() {
         return this.configuration;
     }
@@ -450,6 +471,11 @@
         }
     }
 
+    /**
+     * Return the ClassFieldExtractorCache, this should only be used internally, and is subject to change
+     * @return
+     *      the ClsasFieldExtractorCache
+     */
     public ClassFieldExtractorCache getClassFieldExtractorCache() {
         return this.classFieldExtractorCache;
     }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -2,13 +2,13 @@
 
 /*
  * 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.
@@ -27,39 +27,37 @@
 
 import org.drools.RuntimeDroolsException;
 import org.drools.base.accumulators.AccumulateFunction;
-import org.drools.rule.builder.Dialect;
 import org.drools.util.ChainedProperties;
 
 /**
- * This class configures the package compiler. 
- * There are options to use various flavours of runtime compilers.
- * Apache JCI is used as the interface to all the runtime compilers.
- * You may also use this class to override the class loader defaults that are otherwise used.
+ * This class configures the package compiler.
+ * Dialects and their DialectConfigurations  are handled by the DialectRegistry
  * Normally you will not need to look at this class, unless you want to override the defaults.
- * 
- * You can also use the system property "drools.compiler" to set the desired compiler.
- * The valid values are "ECLIPSE" and "JANINO" only. 
- * s
- * The default Java language level is 1.4 but it can be configured using the 
- * system property "drools.compiler.lnglevel". Valid values are 1.4, 1.5 and 1.6.
+ *
+ * drools.dialect.default = <String>
+ * drools.accumulate.function.<function name> = <qualified class>
+ *
+ * default dialect is java.
+ * Available preconfigured Accumulate functions are:
+ * drools.accumulate.function.average = org.drools.base.accumulators.AverageAccumulateFunction
+ * drools.accumulate.function.max = org.drools.base.accumulators.MaxAccumulateFunction
+ * drools.accumulate.function.min = org.drools.base.accumulators.MinAccumulateFunction
+ * drools.accumulate.function.count = org.drools.base.accumulators.CountAccumulateFunction
+ * drools.accumulate.function.sum = org.drools.base.accumulators.SumAccumulateFunction
  */
 public class PackageBuilderConfiguration {
-    public static final int      ECLIPSE                    = 0;
-    public static final int      JANINO                     = 1;
 
-    public static final String[] LANGUAGE_LEVELS            = new String[]{"1.4", "1.5", "1.6"};
 
     private static final String  ACCUMULATE_FUNCTION_PREFIX = "drools.accumulate.function.";
 
     private Map                  dialects;
 
+    private DialectRegistry      dialectRegistry;
+
     private String               defaultDialect;
 
-    private int                  compiler;
-
     private ClassLoader          classLoader;
 
-    private String               languageLevel;
 
     private ChainedProperties    chainedProperties;
 
@@ -107,39 +105,22 @@
             this.chainedProperties.addProperties( properties );
         }
 
-        setJavaLanguageLevel( getDefaultLanguageLevel() );
-
-        setCompiler( getDefaultCompiler() );                
-
         this.dialects = new HashMap();
         this.chainedProperties.mapStartsWith( this.dialects,
-                                              "drools.dialect" );
+                                              "drools.dialect",
+                                              false );
         setDefaultDialect( (String) this.dialects.remove( "drools.dialect.default" ) );
 
+        this.dialectRegistry = buildDialectRegistry( );
+
         buildAccumulateFunctionsMap();
     }
 
-    public int getCompiler() {
-        return this.compiler;
+    public ChainedProperties getChainedProperties() {
+        return this.chainedProperties;
     }
 
-    public String getJavaLanguageLevel() {
-        return this.languageLevel;
-    }
-
-    /**
-     * You cannot set language level below 1.5, as we need static imports, 1.5 is now the default.
-     * @param level
-     */
-    public void setJavaLanguageLevel(final String languageLevel) {
-        if ( Arrays.binarySearch( LANGUAGE_LEVELS,
-                                  languageLevel ) < 0 ) {
-            throw new RuntimeDroolsException( "value '" + languageLevel + "' is not a valid language level" );
-        }
-        this.languageLevel = languageLevel;
-    }
-
-    public DialectRegistry buildDialectRegistry(PackageBuilder packageBuilder) {
+    public DialectRegistry buildDialectRegistry() {
         DialectRegistry registry = new DialectRegistry();
         ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
         for ( Iterator it = this.dialects.entrySet().iterator(); it.hasNext(); ) {
@@ -149,43 +130,40 @@
             String dialectClass = (String) entry.getValue();
             try {
                 Class cls = classLoader.loadClass( dialectClass );
-                Constructor cons = cls.getConstructor( new Class[]{PackageBuilder.class} );
-                registry.addDialect( dialectName,
-                                     (Dialect) cons.newInstance( new Object[]{packageBuilder} ) );
+                DialectConfiguration dialectConf = ( DialectConfiguration ) cls.newInstance();
+                dialectConf.init( this );
+                registry.addDialectConfiguration( dialectName,
+                                     dialectConf );
             } catch ( Exception e ) {
             	//MVEL: Compiler change
                 e.printStackTrace();
-                throw new RuntimeDroolsException( "Unable to load dialect '" + dialectClass + ":" + dialectName + "'" );
+                throw new RuntimeDroolsException( "Unable to load dialect '" + dialectClass + ":" + dialectName + "'", e );
             }
         }
         return registry;
     }
 
-    public String getDefaultDialect() {
-        return this.defaultDialect;
+    public DialectRegistry getDialectRegistry() {
+        return this.dialectRegistry;
     }
 
+    public Dialect getDefaultDialect() {
+        return this.dialectRegistry.getDialectConfiguration( this.defaultDialect ).getDialect();
+    }
+
     public void setDefaultDialect(String defaultDialect) {
         this.defaultDialect = defaultDialect;
     }
 
-    /** 
-     * Set the compiler to be used when building the rules semantic code blocks.
-     * This overrides the default, and even what was set as a system property. 
-     */
-    public void setCompiler(final int compiler) {
-        switch ( compiler ) {
-            case PackageBuilderConfiguration.ECLIPSE :
-                this.compiler = PackageBuilderConfiguration.ECLIPSE;
-                break;
-            case PackageBuilderConfiguration.JANINO :
-                this.compiler = PackageBuilderConfiguration.JANINO;
-                break;
-            default :
-                throw new RuntimeDroolsException( "value '" + compiler + "' is not a valid compiler" );
-        }
+    public DialectConfiguration getDialectConfiguration(String name) {
+        return ( DialectConfiguration ) this.dialectRegistry.getDialectConfiguration( name );
     }
 
+    public void setDialectConfiguration(String name, DialectConfiguration configuration) {
+        this.dialects.put( name,
+                           configuration );
+    }
+
     public ClassLoader getClassLoader() {
         return this.classLoader;
     }
@@ -197,59 +175,12 @@
         }
     }
 
-    /**
-     * This will attempt to read the System property to work out what default to set.
-     * This should only be done once when the class is loaded. After that point, you will have
-     * to programmatically override it.
-     */
-    private int getDefaultCompiler() {
-        try {
-            final String prop = this.chainedProperties.getProperty( "drools.compiler",
-                                                                    "ECLIPSE" );
-            if ( prop.equals( "ECLIPSE".intern() ) ) {
-                return PackageBuilderConfiguration.ECLIPSE;
-            } else if ( prop.equals( "JANINO" ) ) {
-                return PackageBuilderConfiguration.JANINO;
-            } else {
-                System.err.println( "Drools config: unable to use the drools.compiler property. Using default. It was set to:" + prop );
-                return PackageBuilderConfiguration.ECLIPSE;
-            }
-        } catch ( final SecurityException e ) {
-            System.err.println( "Drools config: unable to read the drools.compiler property. Using default." );
-            return PackageBuilderConfiguration.ECLIPSE;
-        }
-    }
-
-    private String getDefaultLanguageLevel() {
-        String level = this.chainedProperties.getProperty( "drools.compiler.lnglevel",
-                                                           null );
-
-        if ( level == null ) {
-            String version = System.getProperty( "java.version" );
-            if ( version.startsWith( "1.4" ) ) {
-                level = "1.4";
-            } else if ( version.startsWith( "1.5" ) ) {
-                level = "1.5";
-            } else if ( version.startsWith( "1.6" ) ) {
-                level = "1.6";
-            } else {
-                level = "1.4";
-            }
-        }
-
-        if ( Arrays.binarySearch( LANGUAGE_LEVELS,
-                                  level ) < 0 ) {
-            throw new RuntimeDroolsException( "value '" + level + "' is not a valid language level" );
-        }
-
-        return level;
-    }
-
     private void buildAccumulateFunctionsMap() {
         this.accumulateFunctions = new HashMap();
         Map temp = new HashMap();
         this.chainedProperties.mapStartsWith( temp,
-                                              ACCUMULATE_FUNCTION_PREFIX );
+                                              ACCUMULATE_FUNCTION_PREFIX,
+                                              true );
         for ( Iterator it = temp.entrySet().iterator(); it.hasNext(); ) {
             Map.Entry entry = (Map.Entry) it.next();
             String identifier = ((String) entry.getKey()).trim().substring( ACCUMULATE_FUNCTION_PREFIX.length() );
@@ -257,7 +188,7 @@
                                            entry.getValue() );
         }
     }
-    
+
     public Map getAccumulateFunctionsMap() {
         return Collections.unmodifiableMap( this.accumulateFunctions );
     }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -2,13 +2,13 @@
 
 /*
  * 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.
@@ -20,11 +20,11 @@
 import java.util.Collections;
 import java.util.List;
 
-import org.drools.rule.builder.Dialect;
+import org.drools.compiler.Dialect;
 
 public class RuleDescr extends BaseDescr {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 400L;
     private String            name;
@@ -42,13 +42,13 @@
 
 	//MVEL: Compiler change
     private Dialect           dialect;
-    
+
     public RuleDescr(final String name) {
         this( name,
               "" );
     }
 
-    
+
     public RuleDescr(final String ruleName,
                      final String documentation) {
         this.name = ruleName;
@@ -57,7 +57,7 @@
 
     public String getName() {
         return this.name;
-    }       
+    }
 
     public String getSalience() {
         return salience;
@@ -131,7 +131,7 @@
     public int getConsequencePattern() {
         return this.consequencePattern;
     }
-	
+
     //MVEL: Compiler change
     public void setDialect(Dialect dialect) {
         this.dialect = dialect;

Deleted: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -1,109 +0,0 @@
-package org.drools.rule.builder;
-
-import java.util.List;
-import java.util.Map;
-
-import org.drools.base.ClassFieldExtractorCache;
-import org.drools.base.TypeResolver;
-import org.drools.lang.descr.BaseDescr;
-import org.drools.lang.descr.FunctionDescr;
-import org.drools.lang.descr.RuleDescr;
-import org.drools.rule.Package;
-
-public interface Dialect {
-    //MVEL: Compiler change
-    String getId();
-    
-    // this is needed because some dialects use other dialects
-    // to build complex expressions. Example: java dialect uses MVEL
-    // to execute complex expressions 
-    String getExpressionDialectName();
-
-    Map getBuilders();
-
-    TypeResolver getTypeResolver();
-
-    ClassFieldExtractorCache getClassFieldExtractorCache();
-
-    SalienceBuilder getSalienceBuilder();
-
-    PatternBuilder getPatternBuilder();
-
-    QueryBuilder getQueryBuilder();
-
-    RuleConditionBuilder getEvalBuilder();
-
-    AccumulateBuilder getAccumulateBuilder();
-
-    PredicateBuilder getPredicateBuilder();
-
-    ReturnValueBuilder getReturnValueBuilder();
-
-    ConsequenceBuilder getConsequenceBuilder();
-
-    RuleClassBuilder getRuleClassBuilder();
-
-    FromBuilder getFromBuilder();
-
-    RuleConditionBuilder getBuilder(Class clazz);
-
-    AnalysisResult analyzeExpression(final RuleBuildContext context,
-                                     final BaseDescr descr,
-                                     final Object content);
-
-    AnalysisResult analyzeBlock(final RuleBuildContext context,
-                                final BaseDescr descr,
-                                final String text);
-
-    void compileAll();
-
-    void addRule(final RuleBuildContext context);
-
-    void addFunction(final FunctionDescr functionDescr,
-                     TypeResolver typeResolver);
-
-    public void addImport(String importEntry);
-
-    public void addStaticImport(String importEntry);
-
-    List getResults();
-
-    void init(Package pkg);
-
-    void init(RuleDescr ruleDescr);
-
-    /**
-     * An interface with the results from the expression/block analysis
-     * 
-     * @author etirelli
-     */
-    public static interface AnalysisResult {
-
-        /**
-         * Returns the list<String> of all used identifiers
-         * @return
-         */
-        public List getIdentifiers();
-
-        /**
-         * Returns the array of lists<String> of bound identifiers
-         * @return
-         */
-        public List[] getBoundIdentifiers();
-
-        /**
-         * Returns the list<String> of not bounded identifiers
-         * @return
-         */
-        public List getNotBoundedIdentifiers();
-
-        /**
-         * Returns the list<String> of declared local variables
-         * 
-         * @return
-         */
-        public List getLocalVariables();
-
-    }
-
-}

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -25,6 +25,7 @@
 import org.drools.base.FieldFactory;
 import org.drools.base.ValueType;
 import org.drools.base.evaluators.Operator;
+import org.drools.compiler.Dialect;
 import org.drools.compiler.RuleError;
 import org.drools.facttemplates.FactTemplate;
 import org.drools.facttemplates.FactTemplateFieldExtractor;

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -25,6 +25,8 @@
 import java.util.Stack;
 
 import org.drools.base.evaluators.DateFactory;
+import org.drools.compiler.Dialect;
+import org.drools.compiler.DialectConfiguration;
 import org.drools.compiler.DialectRegistry;
 import org.drools.compiler.PackageBuilderConfiguration;
 import org.drools.lang.descr.AttributeDescr;
@@ -119,7 +121,7 @@
                        ruleDescr.getAttributes() );
 
         this.dialectRegistry = dialectRegistry;
-		this.dialect = (this.rule.getDialect() != null) ? this.dialectRegistry.getDialect( this.rule.getDialect() ) : defaultDialect;
+        this.dialect = (this.rule.getDialect() != null) ? this.dialectRegistry.getDialectConfiguration( this.rule.getDialect() ).getDialect() : defaultDialect;
 
         getDialect().init( ruleDescr );
     }
@@ -136,7 +138,7 @@
     }
 
     public Dialect getDialect(String dialectName) {
-        return (Dialect) this.dialectRegistry.getDialect( dialectName );
+        return ( (DialectConfiguration) this.dialectRegistry.getDialectConfiguration( dialectName ) ).getDialect();
     }
 
     /**

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -25,6 +25,7 @@
 
 import org.drools.base.accumulators.AccumulateFunction;
 import org.drools.base.accumulators.JavaAccumulatorFunctionExecutor;
+import org.drools.compiler.Dialect;
 import org.drools.lang.descr.AccumulateDescr;
 import org.drools.lang.descr.BaseDescr;
 import org.drools.lang.descr.PatternDescr;
@@ -33,7 +34,6 @@
 import org.drools.rule.Pattern;
 import org.drools.rule.RuleConditionElement;
 import org.drools.rule.builder.AccumulateBuilder;
-import org.drools.rule.builder.Dialect;
 import org.drools.rule.builder.PatternBuilder;
 import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.dialect.java.parser.JavaLocalDeclarationDescr;

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAnalysisResult.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAnalysisResult.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAnalysisResult.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -22,7 +22,7 @@
 import java.util.List;
 import java.util.Map;
 
-import org.drools.rule.builder.Dialect.AnalysisResult;
+import org.drools.compiler.Dialect.AnalysisResult;
 import org.drools.rule.builder.dialect.java.parser.JavaLocalDeclarationDescr;
 
 /**

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -20,11 +20,11 @@
 import java.util.List;
 import java.util.Map;
 
+import org.drools.compiler.Dialect;
 import org.drools.compiler.RuleError;
 import org.drools.lang.descr.RuleDescr;
 import org.drools.rule.Declaration;
 import org.drools.rule.builder.ConsequenceBuilder;
-import org.drools.rule.builder.Dialect;
 import org.drools.rule.builder.RuleBuildContext;
 import org.drools.spi.PatternExtractor;
 

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -17,8 +17,8 @@
 import org.drools.commons.jci.problems.CompilationProblem;
 import org.drools.commons.jci.readers.MemoryResourceReader;
 import org.drools.commons.jci.readers.ResourceReader;
+import org.drools.compiler.Dialect;
 import org.drools.compiler.PackageBuilder;
-import org.drools.compiler.PackageBuilderConfiguration;
 import org.drools.compiler.RuleError;
 import org.drools.compiler.PackageBuilder.ErrorHandler;
 import org.drools.compiler.PackageBuilder.FunctionErrorHandler;
@@ -44,7 +44,6 @@
 import org.drools.rule.builder.AccumulateBuilder;
 import org.drools.rule.builder.CollectBuilder;
 import org.drools.rule.builder.ConsequenceBuilder;
-import org.drools.rule.builder.Dialect;
 import org.drools.rule.builder.ForallBuilder;
 import org.drools.rule.builder.FromBuilder;
 import org.drools.rule.builder.FunctionBuilder;
@@ -82,11 +81,11 @@
     private final JavaFunctionBuilder      function                = new JavaFunctionBuilder();
 
     //
-    private final KnowledgeHelperFixer     knowledgeHelperFixer;
-    private final DeclarationTypeFixer     typeFixer;
-    private final JavaExprAnalyzer         analyzer;
+    private KnowledgeHelperFixer     knowledgeHelperFixer;
+    private DeclarationTypeFixer     typeFixer;
+    private JavaExprAnalyzer         analyzer;
 
-    private PackageBuilderConfiguration    configuration;
+    private JavaDialectConfiguration       configuration;
 
     private Package                        pkg;
     private JavaCompiler                   compiler;
@@ -98,15 +97,19 @@
     // the class name for the rule
     private String                         ruleClass;
 
-    private final TypeResolver             typeResolver;
-    private final ClassFieldExtractorCache classFieldExtractorCache;
+    private TypeResolver             typeResolver;
+    private ClassFieldExtractorCache classFieldExtractorCache;
 
     // a map of registered builders
     private Map                            builders;
 
-    public JavaDialect(final PackageBuilder builder) {
+    public JavaDialect() {
+
+    }
+
+    public void init(PackageBuilder builder) {
         this.pkg = builder.getPackage();
-        this.configuration = builder.getPackageBuilderConfiguration();
+        this.configuration = (JavaDialectConfiguration) builder.getPackageBuilderConfiguration().getDialectConfiguration( "java" );
         this.typeResolver = builder.getTypeResolver();
         this.classFieldExtractorCache = builder.getClassFieldExtractorCache();
 
@@ -172,9 +175,9 @@
     public void init(final Package pkg) {
 
         this.pkg = pkg;
-        
+
         //MVEL Compiler change
-        //TODO Consider lazy init for these as they might have been initialized from the constructor and maybe used meanwhile        
+        //TODO Consider lazy init for these as they might have been initialized from the constructor and maybe used meanwhile
         this.errorHandlers = new HashMap();
         this.results = new ArrayList();
 
@@ -423,10 +426,10 @@
         final LineMappings mapping = new LineMappings( name );
         mapping.setStartLine( ruleDescr.getConsequenceLine() );
         mapping.setOffset( ruleDescr.getConsequenceOffset() );
-        
+
         context.getPkg().getPackageCompilationData().getLineMappings().put( name,
                                                                            mapping );
-        
+
     }
 
     public void addFunction(final FunctionDescr functionDescr,
@@ -486,11 +489,11 @@
 
     private void loadCompiler() {
         switch ( this.configuration.getCompiler() ) {
-            case PackageBuilderConfiguration.JANINO : {
+            case JavaDialectConfiguration.JANINO : {
                 this.compiler = JavaCompilerFactory.getInstance().createCompiler( "janino" );
                 break;
             }
-            case PackageBuilderConfiguration.ECLIPSE :
+            case JavaDialectConfiguration.ECLIPSE :
             default : {
                 this.compiler = JavaCompilerFactory.getInstance().createCompiler( "eclipse" );
                 JavaCompilerSettings settings = this.compiler.createDefaultSettings();
@@ -549,7 +552,8 @@
             final String fileName = packageName.replaceAll( "\\.",
                                                             "/" ) + newName + "_" + counter + ext;
 
-            exists = src.isAvailable( fileName );
+            //MVEL:test null to Fix failing test on org.drools.rule.builder.dialect.mvel.MVELConsequenceBuilderTest.testImperativeCodeError()
+            exists = src != null && src.isAvailable( fileName );
         }
         // we have duplicate file names so append counter
         if ( counter >= 0 ) {

Copied: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialectConfiguration.java (from rev 13516, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialectConfiguration.java)
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialectConfiguration.java	                        (rev 0)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialectConfiguration.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -0,0 +1,172 @@
+package org.drools.rule.builder.dialect.java;
+
+import java.util.Arrays;
+import java.util.Properties;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.compiler.Dialect;
+import org.drools.compiler.DialectConfiguration;
+import org.drools.compiler.PackageBuilder;
+import org.drools.compiler.PackageBuilderConfiguration;
+
+/**
+ * 
+ * There are options to use various flavours of runtime compilers.
+ * Apache JCI is used as the interface to all the runtime compilers.
+ * 
+ * You can also use the system property "drools.compiler" to set the desired compiler.
+ * The valid values are "ECLIPSE" and "JANINO" only. 
+ * 
+ * drools.dialect.java.compiler = <ECLIPSE|JANINO>
+ * drools.dialect.java.lngLevel = <1.4|1.5|1.6>
+ * 
+ * The default compiler is Eclipse and the default lngLevel is 1.4.
+ * The lngLevel will attempt to autodiscover your system using the 
+ * system property "java.version"
+ * 
+ * The JavaDialectConfiguration will attempt to validate that the specified compiler
+ * is in the classpath, using ClassLoader.loasClass(String). If you intented to
+ * just Janino sa the compiler you must either overload the compiler property before 
+ * instantiating this class or the PackageBuilder, or make sure Eclipse is in the 
+ * classpath, as Eclipse is the default.
+ *
+ */
+public class JavaDialectConfiguration
+    implements
+    DialectConfiguration {
+    public static final int             ECLIPSE         = 0;
+    public static final int             JANINO          = 1;
+
+    public static final String[]        LANGUAGE_LEVELS = new String[]{"1.4", "1.5", "1.6"};
+
+    private String                      languageLevel;
+
+    private PackageBuilderConfiguration conf;
+
+    private int                         compiler;
+
+    private JavaDialect                 dialect;
+
+    public JavaDialectConfiguration() {
+    }
+
+    public void init(final PackageBuilderConfiguration conf) {
+        this.conf = conf;
+
+        setCompiler( getDefaultCompiler() );        
+        
+        setJavaLanguageLevel( getDefaultLanguageLevel() );
+    }
+
+    public PackageBuilderConfiguration getPackageBuilderConfiguration() {
+        return this.conf;
+    }
+
+    public Dialect getDialect() {
+        if ( this.dialect == null ) {
+            this.dialect = new JavaDialect();
+        }
+        return this.dialect;
+    }
+
+    public String getJavaLanguageLevel() {
+        return this.languageLevel;
+    }
+
+    /**
+     * You cannot set language level below 1.5, as we need static imports, 1.5 is now the default.
+     * @param level
+     */
+    public void setJavaLanguageLevel(final String languageLevel) {
+        if ( Arrays.binarySearch( LANGUAGE_LEVELS,
+                                  languageLevel ) < 0 ) {
+            throw new RuntimeDroolsException( "value '" + languageLevel + "' is not a valid language level" );
+        }
+        this.languageLevel = languageLevel;
+    }
+
+    /** 
+     * Set the compiler to be used when building the rules semantic code blocks.
+     * This overrides the default, and even what was set as a system property. 
+     */
+    public void setCompiler(final int compiler) {
+        // check that the jar for the specified compiler are present
+        if ( compiler == ECLIPSE ) {
+            try {
+                getClass().getClassLoader().loadClass( "org.eclipse.jdt.internal.compiler.Compiler" );
+            } catch ( ClassNotFoundException e ) {
+                throw new RuntimeException( "The Eclipse JDT Core jar is not in the classpath" );
+            }
+        } else if ( compiler == JANINO ){
+            try {
+                getClass().getClassLoader().loadClass( "org.codehaus.janino.Parser" );
+            } catch ( ClassNotFoundException e ) {
+                throw new RuntimeException( "The Janino jar is not in the classpath" );
+            }
+        }
+        
+        switch ( compiler ) {
+            case JavaDialectConfiguration.ECLIPSE :
+                this.compiler = JavaDialectConfiguration.ECLIPSE;
+                break;
+            case JavaDialectConfiguration.JANINO :
+                this.compiler = JavaDialectConfiguration.JANINO;
+                break;
+            default :
+                throw new RuntimeDroolsException( "value '" + compiler + "' is not a valid compiler" );
+        }
+    }
+
+    public int getCompiler() {
+        return this.compiler;
+    }
+
+    /**
+     * This will attempt to read the System property to work out what default to set.
+     * This should only be done once when the class is loaded. After that point, you will have
+     * to programmatically override it.
+     */
+    private int getDefaultCompiler() {
+        try {
+            final String prop = this.conf.getChainedProperties().getProperty( "drools.dialect.java.compiler",
+                                                                              "ECLIPSE" );
+            if ( prop.equals( "ECLIPSE".intern() ) ) {
+                return JavaDialectConfiguration.ECLIPSE;
+            } else if ( prop.equals( "JANINO" ) ) {
+                return JavaDialectConfiguration.JANINO;
+            } else {
+                System.err.println( "Drools config: unable to use the drools.compiler property. Using default. It was set to:" + prop );
+                return JavaDialectConfiguration.ECLIPSE;
+            }
+        } catch ( final SecurityException e ) {
+            System.err.println( "Drools config: unable to read the drools.compiler property. Using default." );
+            return JavaDialectConfiguration.ECLIPSE;
+        }
+    }
+
+    private String getDefaultLanguageLevel() {
+        String level = this.conf.getChainedProperties().getProperty( "drools.dialect.java.compiler.lnglevel",
+                                                                     null );
+
+        if ( level == null ) {
+            String version = System.getProperty( "java.version" );
+            if ( version.startsWith( "1.4" ) ) {
+                level = "1.4";
+            } else if ( version.startsWith( "1.5" ) ) {
+                level = "1.5";
+            } else if ( version.startsWith( "1.6" ) ) {
+                level = "1.6";
+            } else {
+                level = "1.4";
+            }
+        }
+
+        if ( Arrays.binarySearch( LANGUAGE_LEVELS,
+                                  level ) < 0 ) {
+            throw new RuntimeDroolsException( "value '" + level + "' is not a valid language level" );
+        }
+
+        return level;
+    }
+
+}

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -19,13 +19,13 @@
 import java.util.List;
 import java.util.Map;
 
+import org.drools.compiler.Dialect;
 import org.drools.lang.descr.BaseDescr;
 import org.drools.lang.descr.EvalDescr;
 import org.drools.rule.Declaration;
 import org.drools.rule.EvalCondition;
 import org.drools.rule.Pattern;
 import org.drools.rule.RuleConditionElement;
-import org.drools.rule.builder.Dialect;
 import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.RuleConditionBuilder;
 

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/parser/JavaLexer.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/parser/JavaLexer.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/parser/JavaLexer.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0 /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g 2007-07-01 14:08:52
+// $ANTLR 3.0 /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g 2007-07-15 10:51:14
 
 	package org.drools.rule.builder.dialect.java.parser;
 

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/parser/JavaParser.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/parser/JavaParser.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/parser/JavaParser.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0 /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g 2007-07-01 14:08:51
+// $ANTLR 3.0 /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g 2007-07-15 10:51:13
 
 	package org.drools.rule.builder.dialect.java.parser;
 	import java.util.Iterator;
@@ -11745,9 +11745,9 @@
                     i=(Token)input.LT(1);
                     match(input,Identifier,FOLLOW_Identifier_in_primary3793); if (failed) return ;
                     if ( backtracking==0 ) {
-                       identifiers.add( i.getText() );  
+                       if( ! "(".equals( input.LT(1) == null ? "" : input.LT(1).getText() ) ) identifiers.add( i.getText() );  
                     }
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g:860:55: ( '.' Identifier )*
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g:860:126: ( '.' Identifier )*
                     loop153:
                     do {
                         int alt153=2;
@@ -11772,7 +11772,7 @@
 
                         switch (alt153) {
                     	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g:860:56: '.' Identifier
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g:860:127: '.' Identifier
                     	    {
                     	    match(input,28,FOLLOW_28_in_primary3798); if (failed) return ;
                     	    match(input,Identifier,FOLLOW_Identifier_in_primary3800); if (failed) return ;
@@ -11785,7 +11785,7 @@
                         }
                     } while (true);
 
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g:860:73: ( identifierSuffix )?
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g:860:144: ( identifierSuffix )?
                     int alt154=2;
                     switch ( input.LA(1) ) {
                         case 41:
@@ -12039,7 +12039,7 @@
 
                     switch (alt154) {
                         case 1 :
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g:860:74: identifierSuffix
+                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g:860:145: identifierSuffix
                             {
                             pushFollow(FOLLOW_identifierSuffix_in_primary3805);
                             identifierSuffix();
@@ -14192,8 +14192,8 @@
 
     // $ANTLR start synpred238
     public final void synpred238_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g:860:56: ( '.' Identifier )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g:860:56: '.' Identifier
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g:860:127: ( '.' Identifier )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g:860:127: '.' Identifier
         {
         match(input,28,FOLLOW_28_in_synpred2383798); if (failed) return ;
         match(input,Identifier,FOLLOW_Identifier_in_synpred2383800); if (failed) return ;
@@ -14204,8 +14204,8 @@
 
     // $ANTLR start synpred239
     public final void synpred239_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g:860:74: ( identifierSuffix )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g:860:74: identifierSuffix
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g:860:145: ( identifierSuffix )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g:860:145: identifierSuffix
         {
         pushFollow(FOLLOW_identifierSuffix_in_synpred2393805);
         identifierSuffix();

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAccumulateBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAccumulateBuilder.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAccumulateBuilder.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -24,6 +24,7 @@
 import org.drools.base.accumulators.MVELAccumulatorFunctionExecutor;
 import org.drools.base.mvel.DroolsMVELFactory;
 import org.drools.base.mvel.MVELAccumulator;
+import org.drools.compiler.Dialect;
 import org.drools.lang.descr.AccumulateDescr;
 import org.drools.lang.descr.BaseDescr;
 import org.drools.lang.descr.PatternDescr;
@@ -32,7 +33,6 @@
 import org.drools.rule.Pattern;
 import org.drools.rule.RuleConditionElement;
 import org.drools.rule.builder.AccumulateBuilder;
-import org.drools.rule.builder.Dialect;
 import org.drools.rule.builder.PatternBuilder;
 import org.drools.rule.builder.RuleBuildContext;
 import org.drools.spi.Accumulator;

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAnalysisResult.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAnalysisResult.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAnalysisResult.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -21,7 +21,7 @@
 import java.util.List;
 import java.util.Map;
 
-import org.drools.rule.builder.Dialect.AnalysisResult;
+import org.drools.compiler.Dialect.AnalysisResult;
 
 /**
  * An analysis result implementation for the MVEL dialect

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -7,9 +7,9 @@
 import org.drools.base.mvel.DroolsMVELFactory;
 import org.drools.base.mvel.DroolsMVELKnowledgeHelper;
 import org.drools.base.mvel.MVELConsequence;
+import org.drools.compiler.Dialect;
 import org.drools.compiler.RuleError;
 import org.drools.rule.builder.ConsequenceBuilder;
-import org.drools.rule.builder.Dialect;
 import org.drools.rule.builder.RuleBuildContext;
 import org.drools.spi.KnowledgeHelper;
 import org.mvel.ASTNode;

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -15,9 +15,9 @@
 import org.drools.base.mvel.DroolsMVELFactory;
 import org.drools.base.mvel.DroolsMVELKnowledgeHelper;
 import org.drools.commons.jci.readers.MemoryResourceReader;
+import org.drools.compiler.Dialect;
 import org.drools.compiler.ImportError;
 import org.drools.compiler.PackageBuilder;
-import org.drools.compiler.PackageBuilderConfiguration;
 import org.drools.compiler.RuleError;
 import org.drools.lang.descr.AccumulateDescr;
 import org.drools.lang.descr.AndDescr;
@@ -36,7 +36,6 @@
 import org.drools.rule.Package;
 import org.drools.rule.builder.AccumulateBuilder;
 import org.drools.rule.builder.ConsequenceBuilder;
-import org.drools.rule.builder.Dialect;
 import org.drools.rule.builder.FromBuilder;
 import org.drools.rule.builder.GroupElementBuilder;
 import org.drools.rule.builder.PatternBuilder;
@@ -65,41 +64,40 @@
     implements
     Dialect {
 
-    public final static String                     ID = "MVELDialect";
+    public final static String                ID 					  = "MVELDialect";
 
-    private final static String                     EXPRESSION_DIALECT_NAME = "MVEL";
+    private final static String               EXPRESSION_DIALECT_NAME = "MVEL";
 
-    private final MVELRuleClassBuilder              rule                    = new MVELRuleClassBuilder();
+    private final MVELRuleClassBuilder        rule                    = new MVELRuleClassBuilder();
 
-    private final PatternBuilder                    pattern     = new PatternBuilder( );
-    private final QueryBuilder             query        = new QueryBuilder();
-    private final MVELAccumulateBuilder             accumulate              = new MVELAccumulateBuilder();
-    private final SalienceBuilder                   salience                = new MVELSalienceBuilder();
-    private final MVELEvalBuilder                   eval                    = new MVELEvalBuilder();
-    private final MVELPredicateBuilder              predicate               = new MVELPredicateBuilder();
-    private final MVELReturnValueBuilder            returnValue             = new MVELReturnValueBuilder();
-    private final MVELConsequenceBuilder            consequence             = new MVELConsequenceBuilder();
+    private final PatternBuilder              pattern                 = new PatternBuilder();
+    private final QueryBuilder                query                   = new QueryBuilder();
+    private final MVELAccumulateBuilder       accumulate              = new MVELAccumulateBuilder();
+    private final SalienceBuilder             salience                = new MVELSalienceBuilder();
+    private final MVELEvalBuilder             eval                    = new MVELEvalBuilder();
+    private final MVELPredicateBuilder        predicate               = new MVELPredicateBuilder();
+    private final MVELReturnValueBuilder      returnValue             = new MVELReturnValueBuilder();
+    private final MVELConsequenceBuilder      consequence             = new MVELConsequenceBuilder();
     //private final JavaRuleClassBuilder            rule        = new JavaRuleClassBuilder();
-    private final MVELFromBuilder                   from                    = new MVELFromBuilder();
+    private final MVELFromBuilder             from                    = new MVELFromBuilder();
 
-    private final Map                               interceptors;
+    private Map                               interceptors;
 
-    private List                                    results;
+    private List                              results;
     //private final JavaFunctionBuilder             function    = new JavaFunctionBuilder();
 
     private MemoryResourceReader                    src;
 
-    private Package                                 pkg;
-    private PackageBuilderConfiguration             configuration;
-    private final TypeResolver                      typeResolver;
-    private final ClassFieldExtractorCache          classFieldExtractorCache;
-    private final MVELExprAnalyzer                  analyzer;
+    private Package                           pkg;
+    private MVELDialectConfiguration          configuration;
+    private TypeResolver                      typeResolver;
+    private ClassFieldExtractorCache          classFieldExtractorCache;
+    private MVELExprAnalyzer                  analyzer;
+    private StaticMethodImportResolverFactory staticImportFactory;
+    private ClassImportResolverFactory        importFactory;
 
-    private final StaticMethodImportResolverFactory staticImportFactory;
-    private final ClassImportResolverFactory        importFactory;
+    private boolean                           strictMode;
 
-    private boolean strictMode;
-
     public void addFunction(FunctionDescr functionDescr,
                             TypeResolver typeResolver) {
         throw new UnsupportedOperationException( "MVEL does not support functions" );
@@ -109,14 +107,17 @@
     // a map of registered builders
     private Map builders;
 
-    public MVELDialect(final PackageBuilder builder) {
+    public MVELDialect() {
+    }
+
+    public void init(PackageBuilder builder) {
         AbstractParser.setLanguageLevel( 4 );
 
         this.pkg = builder.getPackage();
-        this.configuration = builder.getPackageBuilderConfiguration();
+        this.configuration = (MVELDialectConfiguration) builder.getPackageBuilderConfiguration().getDialectConfiguration( "mvel" );
         this.typeResolver = builder.getTypeResolver();
         this.classFieldExtractorCache = builder.getClassFieldExtractorCache();
-        this.strictMode = true;
+        this.strictMode = this.configuration.isStrict();
 
         this.analyzer = new MVELExprAnalyzer();
 
@@ -184,7 +185,10 @@
     public void init(RuleDescr ruleDescr) {
         //MVEL: Compiler change
         System.out.println("MVEL: MVELDialect.init with ruleDescr:" + ruleDescr);
-        final String ruleClassName = JavaDialect.getUniqueLegalName( this.pkg.getName(),
+
+        //MVEL:test null to Fix failing test on org.drools.rule.builder.dialect.mvel.MVELConsequenceBuilderTest.testImperativeCodeError()
+        String pkgName = this.pkg == null? "": this.pkg.getName();
+        final String ruleClassName = JavaDialect.getUniqueLegalName( pkgName,
         															 ruleDescr.getName(),
         															 "mvel",
         															 this.src );
@@ -206,7 +210,7 @@
         mapping.setStartLine( ruleDescr.getConsequenceLine() );
         mapping.setOffset( ruleDescr.getConsequenceOffset() );
         System.out.println("MVEL: Adding mvel mappings for:" + name + " at line: " + mapping.getStartLine());
-                
+
         context.getPkg().getPackageCompilationData().getLineMappings().put( name, mapping );
 
     }
@@ -235,7 +239,7 @@
                                                          index + 1 );
 
         try {
-            Class cls = configuration.getClassLoader().loadClass( className );
+            Class cls = this.configuration.getPackageBuilderConfiguration().getClassLoader().loadClass( className );
             Method[] methods = cls.getDeclaredMethods();
             for ( int i = 0; i < methods.length; i++ ) {
                 if ( methods[i].equals( "methodName" ) ) {
@@ -341,7 +345,7 @@
         //this.configuration.get
 
         parserContext.setStrictTypeEnforcement( strictMode );
-                       
+
         if ( interceptors != null ) {
             parserContext.setInterceptors( interceptors );
         }
@@ -362,11 +366,11 @@
             						(Class) globalTypes.get( identifier ) );
         }
 
-        Map mvelVars = ((MVELAnalysisResult)analysis).getMvelVariables();
+        Map mvelVars = ((MVELAnalysisResult) analysis).getMvelVariables();
         if ( mvelVars != null ) {
             for ( Iterator it = mvelVars.entrySet().iterator(); it.hasNext(); ) {
                 Entry entry = (Entry) it.next();
-                parserContext.addInput( (String)entry.getKey(),
+                parserContext.addInput( (String) entry.getKey(),
                                         (Class) entry.getValue() );
             }
         }
@@ -374,7 +378,7 @@
         if ( outerDeclarations != null ) {
             for ( Iterator it = outerDeclarations.entrySet().iterator(); it.hasNext(); ) {
                 Entry entry = (Entry) it.next();
-                parserContext.addInput( (String)entry.getKey(),
+                parserContext.addInput( (String) entry.getKey(),
                                         ((Declaration) entry.getValue()).getExtractor().getExtractToClass() );
             }
         }
@@ -383,10 +387,10 @@
                                 KnowledgeHelper.class );
 
         ExpressionCompiler compiler = new ExpressionCompiler( text );
-        
+
         //MVEL Debugging support
         compiler.setDebugSymbols( true );
-        
+
         Serializable expr = compiler.compile( parserContext );
         return expr;
     }
@@ -504,5 +508,4 @@
             return 0;
         }
     }
-}
-
+}
\ No newline at end of file

Copied: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialectConfiguration.java (from rev 13516, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialectConfiguration.java)
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialectConfiguration.java	                        (rev 0)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialectConfiguration.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -0,0 +1,57 @@
+package org.drools.rule.builder.dialect.mvel;
+
+import org.drools.compiler.Dialect;
+import org.drools.compiler.DialectConfiguration;
+import org.drools.compiler.PackageBuilder;
+import org.drools.compiler.PackageBuilderConfiguration;
+
+/**
+ * The MVEL dialect.
+ * 
+ * drools.dialect.mvel.strict = <true|false>
+ * 
+ * Default strict is true, which means all expressions and the consequence are type safe.
+ * However dynamic mode is still used while executed nested accessors in the field constraints.
+ *
+ */
+public class MVELDialectConfiguration
+    implements
+    DialectConfiguration {
+
+    private MVELDialect                 dialect;
+    private PackageBuilderConfiguration conf;
+
+    private boolean                     strict;
+
+    public Dialect getDialect() {
+        if ( this.dialect == null ) {
+            this.dialect = new MVELDialect();
+        }
+        return this.dialect;
+    }
+
+    public void init(PackageBuilderConfiguration conf) {
+        this.conf = conf;
+        setStrict( getStrict() );
+    }
+
+    public PackageBuilderConfiguration getPackageBuilderConfiguration() {
+        return this.conf;
+    }
+
+    public void setStrict(boolean strict) {
+        this.strict = strict;
+    }
+
+    public boolean isStrict() {
+        return this.strict;
+    }
+
+    private boolean getStrict() {
+        final String prop = this.conf.getChainedProperties().getProperty( "drools.dialect.mvel.strict",
+                                                                          "true" );
+        return Boolean.valueOf( prop ).booleanValue();
+
+    }
+
+}

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -23,6 +23,7 @@
 
 import org.drools.base.mvel.DroolsMVELFactory;
 import org.drools.base.mvel.MVELEvalExpression;
+import org.drools.compiler.Dialect;
 import org.drools.compiler.RuleError;
 import org.drools.lang.descr.BaseDescr;
 import org.drools.lang.descr.EvalDescr;
@@ -30,7 +31,6 @@
 import org.drools.rule.EvalCondition;
 import org.drools.rule.Pattern;
 import org.drools.rule.RuleConditionElement;
-import org.drools.rule.builder.Dialect;
 import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.RuleConditionBuilder;
 import org.drools.spi.DeclarationScopeResolver;

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -20,6 +20,7 @@
 
 import org.drools.base.dataproviders.MVELDataProvider;
 import org.drools.base.mvel.DroolsMVELFactory;
+import org.drools.compiler.Dialect;
 import org.drools.compiler.RuleError;
 import org.drools.lang.descr.AccessorDescr;
 import org.drools.lang.descr.BaseDescr;
@@ -27,7 +28,6 @@
 import org.drools.rule.From;
 import org.drools.rule.Pattern;
 import org.drools.rule.RuleConditionElement;
-import org.drools.rule.builder.Dialect;
 import org.drools.rule.builder.FromBuilder;
 import org.drools.rule.builder.RuleBuildContext;
 import org.drools.spi.DataProvider;

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -23,11 +23,11 @@
 
 import org.drools.base.mvel.DroolsMVELFactory;
 import org.drools.base.mvel.MVELPredicateExpression;
+import org.drools.compiler.Dialect;
 import org.drools.compiler.RuleError;
 import org.drools.lang.descr.PredicateDescr;
 import org.drools.rule.Declaration;
 import org.drools.rule.PredicateConstraint;
-import org.drools.rule.builder.Dialect;
 import org.drools.rule.builder.PredicateBuilder;
 import org.drools.rule.builder.RuleBuildContext;
 import org.mvel.ExpressionCompiler;

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -23,10 +23,10 @@
 
 import org.drools.base.mvel.DroolsMVELFactory;
 import org.drools.base.mvel.MVELReturnValueExpression;
+import org.drools.compiler.Dialect;
 import org.drools.lang.descr.ReturnValueRestrictionDescr;
 import org.drools.rule.Declaration;
 import org.drools.rule.ReturnValueRestriction;
-import org.drools.rule.builder.Dialect;
 import org.drools.rule.builder.ReturnValueBuilder;
 import org.drools.rule.builder.RuleBuildContext;
 import org.mvel.ExpressionCompiler;

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -4,8 +4,8 @@
 
 import org.drools.base.mvel.DroolsMVELFactory;
 import org.drools.base.mvel.MVELSalienceExpression;
+import org.drools.compiler.Dialect;
 import org.drools.compiler.RuleError;
-import org.drools.rule.builder.Dialect;
 import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.SalienceBuilder;
 import org.mvel.ExpressionCompiler;

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/resources/META-INF/drools.default.packagebuilder.conf
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/resources/META-INF/drools.default.packagebuilder.conf	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/resources/META-INF/drools.default.packagebuilder.conf	2007-07-16 00:31:13 UTC (rev 13539)
@@ -1,7 +1,10 @@
 drools.dialect.default = java
-drools.dialect.java = org.drools.rule.builder.dialect.java.JavaDialect
-drools.dialect.mvel = org.drools.rule.builder.dialect.mvel.MVELDialect
-drools.compiler = ECLIPSE
+drools.dialect.java = org.drools.rule.builder.dialect.java.JavaDialectConfiguration
+drools.dialect.java.compiler = ECLIPSE
+
+drools.dialect.mvel = org.drools.rule.builder.dialect.mvel.MVELDialectConfiguration
+drools.dialect.mvel.strict = true
+
 drools.accumulate.function.average = org.drools.base.accumulators.AverageAccumulateFunction
 drools.accumulate.function.max = org.drools.base.accumulators.MaxAccumulateFunction
 drools.accumulate.function.min = org.drools.base.accumulators.MinAccumulateFunction

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel	2007-07-16 00:31:13 UTC (rev 13539)
@@ -171,7 +171,8 @@
         return new @{ruleClassName}.@{className}();
     }
     
-    public void init(java.lang.Object context,
+    public void init(java.lang.Object workingMemoryContext,
+                     java.lang.Object context,
                      org.drools.spi.Tuple leftTuple,
                      org.drools.rule.Declaration[] declarations,
                      org.drools.WorkingMemory workingMemory) throws Exception {
@@ -186,7 +187,8 @@
         
     }
 
-    public void accumulate(java.lang.Object context,
+    public void accumulate(java.lang.Object workingMemoryContext,
+                           java.lang.Object context,
                            org.drools.spi.Tuple leftTuple,
                            org.drools.common.InternalFactHandle handle,
                            org.drools.rule.Declaration[] declarations,
@@ -205,7 +207,8 @@
 	        @foreach{globals as identifier} @{identifier}@end{","} );
     }
 
-    public void reverse(java.lang.Object context,
+    public void reverse(java.lang.Object workingMemoryContext,
+                           java.lang.Object context,
                            org.drools.spi.Tuple leftTuple,
                            org.drools.common.InternalFactHandle handle,
                            org.drools.rule.Declaration[] declarations,
@@ -224,7 +227,8 @@
 	        @foreach{globals as identifier} @{identifier}@end{","} );
     }
 
-    public Object getResult(java.lang.Object context,
+    public Object getResult(java.lang.Object workingMemoryContext,
+                            java.lang.Object context,
                             org.drools.spi.Tuple leftTuple,
                             org.drools.rule.Declaration[] declarations,
                             org.drools.WorkingMemory workingMemory) throws Exception {
@@ -241,6 +245,10 @@
     public boolean supportsReverse() {
         return @{supportsReverse};
     }
+
+    public Object createWorkingMemoryContext() {
+        return null;
+    }
     
     @includeByRef{hashCode(hashCode = hashCode)}
     

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g	2007-07-16 00:31:13 UTC (rev 13539)
@@ -857,7 +857,7 @@
     |   'super' superSuffix
     |   literal
     |   'new' creator
-    |   i=Identifier { identifiers.add( $i.text );  } ('.' Identifier)* (identifierSuffix)?
+    |   i=Identifier { if( ! "(".equals( input.LT(1) == null ? "" : input.LT(1).getText() ) ) identifiers.add( $i.text );  } ('.' Identifier)* (identifierSuffix)?
     |   primitiveType ('[' ']')* '.' 'class'
     |   'void' '.' 'class'
 	;

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/compiler/Java5Test.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/compiler/Java5Test.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/compiler/Java5Test.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -3,6 +3,7 @@
 import java.io.InputStreamReader;
 
 import org.drools.DroolsTestCase;
+import org.drools.rule.builder.dialect.java.JavaDialectConfiguration;
 
 public class Java5Test extends DroolsTestCase {
 
@@ -15,16 +16,19 @@
             return;
         }
         final PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
-        conf.setCompiler( PackageBuilderConfiguration.ECLIPSE );
-        conf.setJavaLanguageLevel( "1.5" );
-        final PackageBuilder builder = new PackageBuilder( conf );
+        JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) conf.getDialectConfiguration( "java" );
+        javaConf.setCompiler( JavaDialectConfiguration.ECLIPSE );
+        javaConf.setJavaLanguageLevel( "1.5" );
+        
+        final PackageBuilder builder = new PackageBuilder( );
         builder.addPackageFromDrl( new InputStreamReader( this.getClass().getResourceAsStream( "java5_rule.drl" ) ) );
         assertFalse( builder.hasErrors() );
     }
 
     public void testJava14Defaults() throws Exception {
         final PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
-        conf.setCompiler( PackageBuilderConfiguration.JANINO );
+        JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) conf.getDialectConfiguration( "java" );
+        javaConf.setCompiler( JavaDialectConfiguration.JANINO );
         final PackageBuilder builder = new PackageBuilder( conf );
         builder.addPackageFromDrl( new InputStreamReader( this.getClass().getResourceAsStream( "java5_rule.drl" ) ) );
         assertTrue( builder.hasErrors() );

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderConfigurationTest.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderConfigurationTest.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderConfigurationTest.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -1,84 +1,419 @@
 package org.drools.compiler;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
 import java.util.Properties;
 
 import junit.framework.TestCase;
 
+import org.drools.base.ClassFieldExtractorCache;
+import org.drools.base.TypeResolver;
+import org.drools.lang.descr.AndDescr;
+import org.drools.lang.descr.AttributeDescr;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.EvalDescr;
+import org.drools.lang.descr.FunctionDescr;
+import org.drools.lang.descr.FunctionImportDescr;
+import org.drools.lang.descr.ImportDescr;
+import org.drools.lang.descr.PackageDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.rule.Package;
+import org.drools.rule.Pattern;
+import org.drools.rule.Rule;
+import org.drools.rule.RuleConditionElement;
+import org.drools.rule.builder.AccumulateBuilder;
+import org.drools.rule.builder.ConsequenceBuilder;
+import org.drools.rule.builder.FromBuilder;
+import org.drools.rule.builder.GroupElementBuilder;
+import org.drools.rule.builder.PatternBuilder;
+import org.drools.rule.builder.PredicateBuilder;
+import org.drools.rule.builder.QueryBuilder;
+import org.drools.rule.builder.ReturnValueBuilder;
+import org.drools.rule.builder.RuleBuildContext;
+import org.drools.rule.builder.RuleClassBuilder;
+import org.drools.rule.builder.RuleConditionBuilder;
+import org.drools.rule.builder.SalienceBuilder;
+import org.drools.rule.builder.dialect.java.JavaDialect;
+import org.drools.rule.builder.dialect.java.JavaDialectConfiguration;
+import org.drools.rule.builder.dialect.mvel.MVELDialect;
+import org.drools.util.ChainedProperties;
+
 public class PackageBuilderConfigurationTest extends TestCase {
 
+    protected void setUp() throws Exception {
+        System.getProperties().remove( "drools.dialect.java.compiler" );
+        System.getProperties().remove( "drools.dialect.default" );
+    }
+
+    protected void tearDown() throws Exception {
+        System.getProperties().remove( "drools.dialect.java.compiler" );
+        System.getProperties().remove( "drools.dialect.default" );
+    }
+
+    public void testIgnoreDetauls() {
+        // check standard chained properties, that includes defaults
+        ChainedProperties chainedProperties = new ChainedProperties( null,
+                                                                     "packagebuilder.conf",
+                                                                     true );
+        System.out.println( chainedProperties.getProperty( "drools.dialect.java.compiler",
+                                                           null ) );
+        assertNotNull( chainedProperties.getProperty( "drools.dialect.java.compiler",
+                                                      null ) );
+
+
+        // now check that chained properties can ignore defaults
+        chainedProperties = new ChainedProperties( null,
+                                                   "packagebuilder.conf",
+                                                   false );
+        System.out.println( chainedProperties.getProperty( "drools.dialect.java.compiler",
+                                                           null ) );
+        assertNull( chainedProperties.getProperty( "drools.dialect.java.compiler",
+                                                   null ) );
+
+
+        // now check it can find defaults again.
+        chainedProperties = new ChainedProperties( null,
+                                                   "packagebuilder.conf",
+                                                   true );
+        System.out.println( chainedProperties.getProperty( "drools.dialect.java.compiler",
+                                                           null ) );
+        assertNotNull( chainedProperties.getProperty( "drools.dialect.java.compiler",
+                                                      null ) );
+    }
+
     public void testSystemProperties() {
         PackageBuilderConfiguration cfg = new PackageBuilderConfiguration();
-        assertEquals( PackageBuilderConfiguration.ECLIPSE,
-                      cfg.getCompiler() );
+        JavaDialectConfiguration javaConf = (JavaDialectConfiguration) cfg.getDialectConfiguration( "java" );
+        assertEquals( JavaDialectConfiguration.ECLIPSE,
+                      javaConf.getCompiler() );
 
-        System.setProperty( "drools.compiler",
+        System.setProperty( "drools.dialect.java.compiler",
                             "JANINO" );
         cfg = new PackageBuilderConfiguration();
-        assertEquals( PackageBuilderConfiguration.JANINO,
-                      cfg.getCompiler() );
+        javaConf = (JavaDialectConfiguration) cfg.getDialectConfiguration( "java" );
+        assertEquals( JavaDialectConfiguration.JANINO,
+                      javaConf.getCompiler() );
 
-        final PackageBuilderConfiguration cfg2 = new PackageBuilderConfiguration();
-        assertEquals( cfg.getCompiler(),
-                      cfg2.getCompiler() );
+        PackageBuilderConfiguration cfg2 = new PackageBuilderConfiguration();
+        JavaDialectConfiguration javaConf2 = (JavaDialectConfiguration) cfg2.getDialectConfiguration( "java" );
+        assertEquals( javaConf.getCompiler(),
+                      javaConf2.getCompiler() );
 
-        System.setProperty( "drools.compiler",
+        System.setProperty( "drools.dialect.java.compiler",
                             "ECLIPSE" );
         cfg = new PackageBuilderConfiguration();
-        assertEquals( PackageBuilderConfiguration.ECLIPSE,
-                      cfg.getCompiler() );
+        javaConf = (JavaDialectConfiguration) cfg.getDialectConfiguration( "java" );
+        assertEquals( JavaDialectConfiguration.ECLIPSE,
+                      javaConf.getCompiler() );
 
-        cfg2.setCompiler( PackageBuilderConfiguration.ECLIPSE );
-        assertEquals( PackageBuilderConfiguration.ECLIPSE,
-                      cfg2.getCompiler() );
+        javaConf2.setCompiler( JavaDialectConfiguration.ECLIPSE );
+        assertEquals( JavaDialectConfiguration.ECLIPSE,
+                      javaConf2.getCompiler() );
 
-        cfg2.setCompiler( PackageBuilderConfiguration.JANINO );
-        assertEquals( PackageBuilderConfiguration.JANINO,
-                      cfg2.getCompiler() );
+        javaConf2.setCompiler( JavaDialectConfiguration.JANINO );
+        assertEquals( JavaDialectConfiguration.JANINO,
+                      javaConf2.getCompiler() );
 
         final PackageBuilderConfiguration cfg3 = new PackageBuilderConfiguration();
-
-        assertEquals( cfg.getCompiler(),
-                      cfg3.getCompiler() );
-        
-        System.getProperties().remove( "drools.compiler" );
-
+        JavaDialectConfiguration javaConf3 = (JavaDialectConfiguration) cfg3.getDialectConfiguration( "java" );
+        assertEquals( javaConf.getCompiler(),
+                      javaConf3.getCompiler() );
     }
 
     public void testProgrammaticProperties() {
         PackageBuilderConfiguration cfg = new PackageBuilderConfiguration();
-        assertEquals( "java",
-                      cfg.getDefaultDialect() );
+        assertTrue( cfg.getDefaultDialect() instanceof JavaDialect );
 
         Properties properties = new Properties();
         properties.setProperty( "drools.dialect.default",
-                                "tea" );
+                                "mvel" );
         PackageBuilderConfiguration cfg1 = new PackageBuilderConfiguration( properties );
-        assertEquals( "tea",
-                      cfg1.getDefaultDialect() );
+        assertTrue( cfg1.getDefaultDialect() instanceof MVELDialect );
 
-        final PackageBuilderConfiguration cfg2 = new PackageBuilderConfiguration(properties);
-        assertEquals( cfg1.getDefaultDialect(),
-                      cfg2.getDefaultDialect() );
+        final PackageBuilderConfiguration cfg2 = new PackageBuilderConfiguration( properties );
+        assertEquals( cfg1.getDefaultDialect().getClass(),
+                      cfg2.getDefaultDialect().getClass() );
+    }
 
-        properties = new Properties();
-        properties.setProperty( "drools.dialect.default",
-                                "coke" );
-        PackageBuilderConfiguration cfg3 = new PackageBuilderConfiguration( properties );
-        assertEquals( "coke",
-                      cfg3.getDefaultDialect() );
+    public void testMockDialect() {
+        Package pkg = new Package( "org.pkg1" );
 
-        cfg2.setDefaultDialect( "orange" );
-        assertEquals( "orange",
-                      cfg2.getDefaultDialect() );
+        PackageBuilderConfiguration cfg1 = new PackageBuilderConfiguration();
+        MockDialectConfiguration mockConf = new MockDialectConfiguration();
+        cfg1.getDialectRegistry().addDialectConfiguration( "mock",
+                                                           mockConf );
+        cfg1.setDefaultDialect( "mock" );
 
-        cfg2.setDefaultDialect( "lemonade" );
-        assertEquals( "lemonade",
-                      cfg2.getDefaultDialect() );
+        PackageBuilder builder = new PackageBuilder( pkg,
+                                                     cfg1 );
 
-        final PackageBuilderConfiguration cfg4 = new PackageBuilderConfiguration();
+        MockDialect mockDialect2 = (MockDialect) builder.getPackageBuilderConfiguration().getDefaultDialect();
+        assertSame( mockConf.getDialect(),
+                    mockDialect2 );
 
-        assertEquals( cfg.getDefaultDialect(),
-                      cfg4.getDefaultDialect() );
-        
+        assertSame( builder,
+                    mockDialect2.getPackageBuilder() );
+        assertSame( pkg,
+                    mockDialect2.getPkg() );
+        assertNull( mockDialect2.getRuleDescr() );
+
+        RuleDescr ruleDescr = new RuleDescr( "test rule" );
+        ruleDescr.addAttribute( new AttributeDescr( "dialect",
+                                                    "mock" ) );
+        ruleDescr.setLhs( new AndDescr() );
+        EvalDescr evalDescr = new EvalDescr();
+        ruleDescr.getLhs().addDescr( evalDescr );
+
+        PackageDescr pkgDescr = new PackageDescr( "org.pkg1" );
+        pkgDescr.addImport( new ImportDescr( "java.util.HashMap" ) );
+        FunctionImportDescr functionImportDescr = new FunctionImportDescr();
+        functionImportDescr.setTarget( "System.out.println" );
+        pkgDescr.addFunctionImport( functionImportDescr );
+
+        pkgDescr.addRule( ruleDescr );
+
+        builder.addPackage( pkgDescr );
+
+        assertSame( ruleDescr,
+                    mockDialect2.getRuleDescr() );
+        assertTrue( mockDialect2.getImport().contains( "java.util.HashMap" ) );
+        assertTrue( mockDialect2.getStaticImport().contains( "System.out.println" ) );
+        assertEquals( "eval was built",
+                      evalDescr.getContent() );
+        assertEquals( "consequence was built",
+                      ruleDescr.getConsequence() );
+        assertTrue( mockDialect2.isCompileAll() );
+
+        assertNotNull( pkg.getRule( "test rule" ) );
+
     }
+
+    public static class MockDialectConfiguration
+        implements
+        DialectConfiguration {
+        private MockDialect                 dialect = new MockDialect();
+        private PackageBuilderConfiguration conf;
+
+        public Dialect getDialect() {
+            return this.dialect;
+        }
+
+        public PackageBuilderConfiguration getPackageBuilderConfiguration() {
+            return this.conf;
+        }
+
+        public void init(PackageBuilderConfiguration configuration) {
+            this.conf = configuration;
+        }
+
+    }
+
+    public static class MockDialect
+        implements
+        Dialect {
+        private PackageBuilder builder;
+        private Package        pkg;
+        private RuleDescr      ruleDescr;
+        private Rule           rule;
+
+        private List           imports       = new ArrayList();
+        private List           staticImports = new ArrayList();
+
+        private boolean        compileAll    = false;
+
+        public void init(PackageBuilder builder) {
+            this.builder = builder;
+
+        }
+
+        public void init(Package pkg) {
+            this.pkg = pkg;
+        }
+
+        public void init(RuleDescr ruleDescr) {
+            this.ruleDescr = ruleDescr;
+        }
+
+        public PackageBuilder getPackageBuilder() {
+            return builder;
+        }
+
+        public Package getPkg() {
+            return pkg;
+        }
+
+        public RuleDescr getRuleDescr() {
+            return ruleDescr;
+        }
+
+        public void addFunction(FunctionDescr functionDescr,
+                                TypeResolver typeResolver) {
+            // TODO Auto-generated method stub
+
+        }
+
+        public void addImport(String importEntry) {
+            this.imports.add( importEntry );
+        }
+
+        public List getImport() {
+            return this.imports;
+        }
+
+        public void addStaticImport(String importEntry) {
+            this.imports.add( importEntry );
+        }
+
+        public List getStaticImport() {
+            return this.imports;
+        }
+
+        public void addRule(RuleBuildContext context) {
+            this.rule = context.getRule();
+        }
+
+        public Rule getRule() {
+            return this.rule;
+        }
+
+        public AnalysisResult analyzeBlock(RuleBuildContext context,
+                                           BaseDescr descr,
+                                           String text) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public AnalysisResult analyzeExpression(RuleBuildContext context,
+                                                BaseDescr descr,
+                                                Object content) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public void compileAll() {
+            this.compileAll = true;
+        }
+
+        public boolean isCompileAll() {
+            return this.compileAll;
+        }
+
+        public AccumulateBuilder getAccumulateBuilder() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public RuleConditionBuilder getBuilder(Class clazz) {
+            if ( clazz == EvalDescr.class ) {
+                return getEvalBuilder();
+            } else if ( clazz == AndDescr.class ) {
+                return new GroupElementBuilder();
+            } else {
+                throw new RuntimeException( "clazz " + clazz + " is not yet configured " );
+            }
+        }
+
+        public Map getBuilders() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public ClassFieldExtractorCache getClassFieldExtractorCache() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public ConsequenceBuilder getConsequenceBuilder() {
+            return new MockConsequenceBuilder();
+        }
+
+        public RuleConditionBuilder getEvalBuilder() {
+            return new MockEvalBuilder();
+        }
+
+        public String getExpressionDialectName() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public FromBuilder getFromBuilder() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public PatternBuilder getPatternBuilder() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public PredicateBuilder getPredicateBuilder() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public QueryBuilder getQueryBuilder() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public List getResults() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public ReturnValueBuilder getReturnValueBuilder() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public RuleClassBuilder getRuleClassBuilder() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public SalienceBuilder getSalienceBuilder() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public TypeResolver getTypeResolver() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public String getId() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+    }
+
+    public static class MockEvalBuilder
+        implements
+        RuleConditionBuilder {
+
+        public RuleConditionElement build(RuleBuildContext context,
+                                          BaseDescr descr) {
+            EvalDescr evalDescr = (EvalDescr) descr;
+            evalDescr.setContent( "eval was built" );
+            return null;
+        }
+
+        public RuleConditionElement build(RuleBuildContext context,
+                                          BaseDescr descr,
+                                          Pattern prefixPattern) {
+            return null;
+        }
+
+    }
+
+    public static class MockConsequenceBuilder
+        implements
+        ConsequenceBuilder {
+
+        public void build(RuleBuildContext context) {
+            context.getRuleDescr().setConsequence( "consequence was built" );
+        }
+
+    }
 }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -81,6 +81,7 @@
 import org.drools.rule.ReturnValueConstraint;
 import org.drools.rule.Rule;
 import org.drools.rule.builder.dialect.java.JavaDialect;
+import org.drools.rule.builder.dialect.java.JavaDialectConfiguration;
 import org.drools.ruleflow.common.core.Process;
 import org.drools.ruleflow.core.impl.RuleFlowProcessImpl;
 import org.drools.spi.Activation;
@@ -1010,7 +1011,8 @@
 
         // test JANINO with property settings
         PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
-        conf.setCompiler( PackageBuilderConfiguration.JANINO );
+        JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) conf.getDialectConfiguration( "java" );
+        javaConf.setCompiler( JavaDialectConfiguration.JANINO );
         builder = new PackageBuilder( conf );
         dialect = (JavaDialect) dialectField.get( builder );
         compiler = (JavaCompiler) compilerField.get( dialect );
@@ -1019,7 +1021,8 @@
 
         // test eclipse jdt core with property settings and default source level
         conf = new PackageBuilderConfiguration();
-        conf.setCompiler( PackageBuilderConfiguration.ECLIPSE );
+        javaConf = ( JavaDialectConfiguration ) conf.getDialectConfiguration( "java" );
+        javaConf.setCompiler( JavaDialectConfiguration.ECLIPSE );
         builder = new PackageBuilder( conf );
         dialect = (JavaDialect) dialectField.get( builder );
         compiler = (JavaCompiler) compilerField.get( dialect );
@@ -1241,7 +1244,8 @@
     
     public void testJaninoWithStaticImports() throws Exception {
         PackageBuilderConfiguration cfg = new PackageBuilderConfiguration();
-        cfg.setCompiler( PackageBuilderConfiguration.JANINO );
+        JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) cfg.getDialectConfiguration( "java" );
+        javaConf.setCompiler( JavaDialectConfiguration.JANINO );
         
         
         PackageBuilder bldr = new PackageBuilder(cfg);

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/integrationtests/AccumulateTest.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/integrationtests/AccumulateTest.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/integrationtests/AccumulateTest.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -137,17 +137,17 @@
         wm.setGlobal( "results",
                       results );
 
+        wm.insert( new Person( "Bob",
+                               "stilton",
+                               20 ) );
+        wm.insert( new Person( "Mark",
+                               "provolone" ) );
         wm.insert( new Cheese( "stilton",
                                10 ) );
         wm.insert( new Cheese( "brie",
                                5 ) );
         wm.insert( new Cheese( "provolone",
                                150 ) );
-        wm.insert( new Person( "Bob",
-                               "stilton",
-                               20 ) );
-        wm.insert( new Person( "Mark",
-                               "provolone" ) );
 
         wm.fireAllRules();
 
@@ -175,17 +175,17 @@
         wm.setGlobal( "results",
                       results );
 
+        wm.insert( new Person( "Bob",
+                               "stilton",
+                               20 ) );
+        wm.insert( new Person( "Mark",
+                               "provolone" ) );
         wm.insert( new Cheese( "stilton",
                                10 ) );
         wm.insert( new Cheese( "brie",
                                5 ) );
         wm.insert( new Cheese( "provolone",
                                150 ) );
-        wm.insert( new Person( "Bob",
-                               "stilton",
-                               20 ) );
-        wm.insert( new Person( "Mark",
-                               "provolone" ) );
 
         wm.fireAllRules();
 
@@ -756,4 +756,74 @@
                              results.size() );
 
     }
+
+    public void testMVELAccumulate2WM() throws Exception {
+
+        // read in the source
+        final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_AccumulateMVEL.drl" ) );
+        final RuleBase ruleBase = loadRuleBase( reader );
+
+        final WorkingMemory wm1 = ruleBase.newStatefulSession();
+        final List results1 = new ArrayList();
+
+        wm1.setGlobal( "results",
+                       results1 );
+
+        final WorkingMemory wm2 = ruleBase.newStatefulSession();
+        final List results2 = new ArrayList();
+
+        wm2.setGlobal( "results",
+                       results2 );
+
+        wm1.insert( new Person( "Bob",
+                                "stilton",
+                                20 ) );
+        wm1.insert( new Person( "Mark",
+                                "provolone" ) );
+
+        wm2.insert( new Person( "Bob",
+                                "stilton",
+                                20 ) );
+        wm2.insert( new Person( "Mark",
+                                "provolone" ) );
+
+        wm1.insert( new Cheese( "stilton",
+                                10 ) );
+        wm1.insert( new Cheese( "brie",
+                                5 ) );
+        wm2.insert( new Cheese( "stilton",
+                                10 ) );
+        wm1.insert( new Cheese( "provolone",
+                                150 ) );
+        wm2.insert( new Cheese( "brie",
+                                5 ) );
+        wm2.insert( new Cheese( "provolone",
+                                150 ) );
+        wm1.fireAllRules();
+
+        wm2.fireAllRules();
+
+        Assert.assertEquals( new Integer( 165 ),
+                             results1.get( 0 ) );
+        Assert.assertEquals( new Integer( 10 ),
+                             results1.get( 1 ) );
+        Assert.assertEquals( new Integer( 150 ),
+                             results1.get( 2 ) );
+        Assert.assertEquals( new Integer( 10 ),
+                             results1.get( 3 ) );
+        Assert.assertEquals( new Integer( 210 ),
+                             results1.get( 4 ) );
+
+        Assert.assertEquals( new Integer( 165 ),
+                             results2.get( 0 ) );
+        Assert.assertEquals( new Integer( 10 ),
+                             results2.get( 1 ) );
+        Assert.assertEquals( new Integer( 150 ),
+                             results2.get( 2 ) );
+        Assert.assertEquals( new Integer( 10 ),
+                             results2.get( 3 ) );
+        Assert.assertEquals( new Integer( 210 ),
+                             results2.get( 4 ) );
+    }
+
 }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/integrationtests/FirstOrderLogicTest.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/integrationtests/FirstOrderLogicTest.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/integrationtests/FirstOrderLogicTest.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -462,6 +462,67 @@
 
     }
 
+    public void testCollectModifyAlphaRestriction() throws Exception {
+        // read in the source
+        final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_CollectAlphaRestriction.drl" ) );
+        final RuleBase ruleBase = loadRuleBase( reader );
+
+        final WorkingMemory wm = ruleBase.newStatefulSession();
+        final List results = new ArrayList();
+
+        wm.setGlobal( "results",
+                      results );
+
+        final Cheese[] cheese = new Cheese[]{new Cheese( "stilton",
+                                                         10 ), new Cheese( "stilton",
+                                                                           2 ), new Cheese( "stilton",
+                                                                                            5 ), new Cheese( "brie",
+                                                                                                             15 ), new Cheese( "brie",
+                                                                                                                               16 ), new Cheese( "provolone",
+                                                                                                                                                 8 )};
+
+        final FactHandle[] cheeseHandles = new FactHandle[cheese.length];
+        for ( int i = 0; i < cheese.length; i++ ) {
+            cheeseHandles[i] = wm.insert( cheese[i] );
+        }
+
+        // ---------------- 1st scenario
+        int fireCount = 0;
+        wm.fireAllRules();
+        Assert.assertEquals( ++fireCount,
+                             results.size() );
+        Assert.assertEquals( 3,
+                             ((Collection) results.get( fireCount - 1 )).size() );
+        Assert.assertEquals( ArrayList.class.getName(),
+                             results.get( fireCount - 1 ).getClass().getName() );
+
+        // ---------------- 2nd scenario
+        final int index = 1;
+        cheese[index].setType( "brie" );
+        wm.update( cheeseHandles[index],
+                   cheese[index] );
+        wm.fireAllRules();
+
+        Assert.assertEquals( ++fireCount,
+                             results.size() );
+        Assert.assertEquals( 2,
+                             ((Collection) results.get( fireCount - 1 )).size() );
+        Assert.assertEquals( ArrayList.class.getName(),
+                             results.get( fireCount - 1 ).getClass().getName() );
+
+        // ---------------- 3rd scenario
+        wm.retract( cheeseHandles[2] );
+        wm.fireAllRules();
+
+        Assert.assertEquals( ++fireCount,
+                             results.size() );
+        Assert.assertEquals( 1,
+                             ((Collection) results.get( fireCount - 1 )).size() );
+        Assert.assertEquals( ArrayList.class.getName(),
+                             results.get( fireCount - 1 ).getClass().getName() );
+
+    }
+
     private RuleBase loadRuleBase(final Reader reader) throws IOException,
                                                       DroolsParserException,
                                                       Exception {

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -94,6 +94,7 @@
 import org.drools.rule.InvalidRulePackage;
 import org.drools.rule.Package;
 import org.drools.rule.Rule;
+import org.drools.rule.builder.dialect.java.JavaDialectConfiguration;
 import org.drools.xml.XmlDumper;
 
 /** Run all the tests with the ReteOO engine implementation */
@@ -640,9 +641,11 @@
                       list.get( 0 ) );
     }
 
-    public void testJaninoEval() throws Exception {
+    public void testJaninoEval() throws Exception {        
         final PackageBuilderConfiguration config = new PackageBuilderConfiguration();
-        config.setCompiler( PackageBuilderConfiguration.JANINO );
+        JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) config.getDialectConfiguration( "java" );
+        javaConf.setCompiler( JavaDialectConfiguration.JANINO );
+        
         final PackageBuilder builder = new PackageBuilder( config );
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "eval_rule_test.drl" ) ) );
         final Package pkg = builder.getPackage();
@@ -3332,6 +3335,58 @@
         //Thread.currentThread().wait();
     }
 
-    
+    public void testBindingsOnConnectiveExpressions() throws Exception {
+        final PackageBuilder builder = new PackageBuilder();
+        builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_bindings.drl" ) ) );
+        final Package pkg = builder.getPackage();
 
+        final RuleBase ruleBase = getRuleBase();
+        ruleBase.addPackage( pkg );
+        final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+        final List results = new ArrayList();
+        workingMemory.setGlobal( "results",
+                                 results );
+
+        workingMemory.insert( new Cheese( "stilton", 15 ) );
+
+        workingMemory.fireAllRules();
+
+        assertEquals( 2,
+                      results.size() );
+        assertEquals( "stilton",
+                      results.get(0) );
+        assertEquals( new Integer(15),
+                      results.get(1) );
+    }
+
+    public void testMultipleFroms() throws Exception {
+        final PackageBuilder builder = new PackageBuilder();
+        builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_multipleFroms.drl" ) ) );
+        final Package pkg = builder.getPackage();
+
+        final RuleBase ruleBase = getRuleBase();
+        ruleBase.addPackage( pkg );
+        final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+        final List results = new ArrayList();
+        workingMemory.setGlobal( "results",
+                                 results );
+        
+        final Cheesery cheesery = new Cheesery();
+        cheesery.addCheese( new Cheese( "stilton", 15 ) );
+        cheesery.addCheese( new Cheese( "brie", 10 ) );
+
+        workingMemory.setGlobal( "cheesery", cheesery );
+
+        workingMemory.fireAllRules();
+
+        assertEquals( 2,
+                      results.size() );
+        assertEquals( 2,
+                      ((List)results.get(0)).size() );
+        assertEquals( 2,
+                      ((List)results.get(1)).size() );
+    }
+
 }
\ No newline at end of file

Deleted: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/lang/dsl/DefaultExpanderResolverTest.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/lang/dsl/DefaultExpanderResolverTest.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/lang/dsl/DefaultExpanderResolverTest.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -1,81 +0,0 @@
-package org.drools.lang.dsl;
-
-/*
- * 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 junit.framework.TestCase;
-
-public class DefaultExpanderResolverTest extends TestCase {
-
-    //    public void testResolve() throws Exception {
-    //        final DefaultExpanderResolver res = new DefaultExpanderResolver();
-    //        final Expander mock1 = new MockExpander();
-    //        res.addExpander( "mock1.dsl",
-    //                         mock1 );
-    //        assertEquals( mock1,
-    //                      res.get( "mock1.dsl",
-    //                               null ) );
-    //        res.addExpander( "mock2.dsl",
-    //                         new MockExpander() );
-    //        assertNotSame( mock1,
-    //                       res.get( "mock2.dsl",
-    //                                null ) );
-    //
-    //        final MockExpander def = new MockExpander();
-    //        res.addExpander( "*",
-    //                         def );
-    //        assertEquals( def,
-    //                      res.get( "nothing.here",
-    //                               null ) );
-    //
-    //    }
-    //
-    //    public void testDefault() throws Exception {
-    //
-    //        final InputStreamReader reader = new InputStreamReader( this.getClass().getResourceAsStream( "test.dsl" ) );
-    //
-    //        final DefaultExpanderResolver res = new DefaultExpanderResolver( reader );
-    //        final DefaultExpander exp = (DefaultExpander) res.get( "oooh",
-    //                                                         null );
-    //        assertNotNull( exp );
-    //
-    //        assertEquals( "Person(name==\"foo\")",
-    //                      exp.expand( "when",
-    //                                  "Person has name of foo" ) );
-    //        assertEquals( "wild();",
-    //                      exp.expand( "then",
-    //                                  "Go wild" ) );
-    //        assertEquals( "something",
-    //                      exp.expand( "when",
-    //                                  "nothing" ) );
-    //        assertEquals( "something",
-    //                      exp.expand( "then",
-    //                                  "nothing" ) );
-    //
-    //    }
-    //
-    public void testFindNone() {
-        //        final DefaultExpanderResolver exp = new DefaultExpanderResolver();
-        //        try {
-        //            exp.get( "nothing.dsl",
-        //                     "" );
-        //            fail( "should have thrown an exception when it can't find an expander." );
-        //        } catch ( final IllegalArgumentException e ) {
-        //            assertNotNull( e.getMessage() );
-        //        }
-    }
-
-}
\ No newline at end of file

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilderTest.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilderTest.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilderTest.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -4,6 +4,7 @@
 
 import junit.framework.TestCase;
 
+import org.drools.compiler.Dialect;
 import org.drools.compiler.DialectRegistry;
 import org.drools.compiler.PackageBuilder;
 import org.drools.compiler.PackageBuilderConfiguration;
@@ -13,7 +14,6 @@
 import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.RuleDescr;
 import org.drools.rule.Accumulate;
-import org.drools.rule.builder.Dialect;
 import org.drools.rule.builder.RuleBuildContext;
 
 public class JavaAccumulateBuilderTest extends TestCase {
@@ -43,13 +43,13 @@
         accumDescr.setResultCode( "new Integer( x )" );
         
         org.drools.rule.Package pkg = new org.drools.rule.Package( "org.drools" );
-        PackageBuilder pkgBuilder = new PackageBuilder( pkg );
-        DialectRegistry registry = new DialectRegistry();
-        Dialect java = new JavaDialect(pkgBuilder);
-        registry.addDialect( "java", java );
+        final PackageBuilder pkgBulider = new PackageBuilder(pkg);
+        final PackageBuilderConfiguration conf = pkgBulider.getPackageBuilderConfiguration();
+        Dialect dialect = pkgBulider.getPackageBuilderConfiguration().getDialectRegistry().getDialectConfiguration( "java" ).getDialect();
+        
+        
         RuleDescr ruleDescr = new RuleDescr("test rule");
-        PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
-        RuleBuildContext context = new RuleBuildContext( conf, pkg, ruleDescr, registry, java);
+        RuleBuildContext context = new RuleBuildContext( conf, pkg, ruleDescr, conf.getDialectRegistry(), dialect);
         
         Accumulate accumulate = (Accumulate) builder.build( context, accumDescr );
         

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -27,6 +27,7 @@
 
 import org.drools.base.ClassTypeResolver;
 import org.drools.base.TypeResolver;
+import org.drools.compiler.Dialect;
 import org.drools.compiler.DialectRegistry;
 import org.drools.compiler.DrlParser;
 import org.drools.compiler.PackageBuilder;
@@ -84,14 +85,13 @@
         typeResolver.addImport( pkgDescr.getName() + ".*" );
         typeResolver.addImport( "java.lang.*" );
 
-        final RuleBuilder builder = new RuleBuilder( );        
+        final RuleBuilder builder = new RuleBuilder( );                
         
-        JavaDialect dialect =  new JavaDialect( new PackageBuilder(pkg) ) ;  
-        DialectRegistry registry = new DialectRegistry();
-        registry.addDialect( "java", dialect );
+        final PackageBuilder pkgBulider = new PackageBuilder(pkg);
+        final PackageBuilderConfiguration conf = pkgBulider.getPackageBuilderConfiguration();
+        Dialect dialect = pkgBulider.getPackageBuilderConfiguration().getDialectRegistry().getDialectConfiguration( "java" ).getDialect();
         
-        final PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
-        RuleBuildContext context = new RuleBuildContext(conf, pkg, ruleDescr, registry, dialect);
+        RuleBuildContext context = new RuleBuildContext(conf, pkg, ruleDescr, conf.getDialectRegistry(), dialect);
       
         builder.build( context );
 

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/InstrumentedBuildContent.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/InstrumentedBuildContent.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/InstrumentedBuildContent.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -3,11 +3,11 @@
  */
 package org.drools.rule.builder.dialect.mvel;
 
+import org.drools.compiler.Dialect;
 import org.drools.compiler.DialectRegistry;
 import org.drools.compiler.PackageBuilderConfiguration;
 import org.drools.lang.descr.RuleDescr;
 import org.drools.rule.Package;
-import org.drools.rule.builder.Dialect;
 import org.drools.rule.builder.RuleBuildContext;
 import org.drools.spi.DeclarationScopeResolver;
 

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -2,6 +2,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Properties;
 
 import junit.framework.TestCase;
 
@@ -14,6 +15,7 @@
 import org.drools.common.AgendaItem;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.PropagationContextImpl;
+import org.drools.compiler.DialectConfiguration;
 import org.drools.compiler.DialectRegistry;
 import org.drools.compiler.PackageBuilder;
 import org.drools.compiler.PackageBuilderConfiguration;
@@ -35,16 +37,14 @@
         final RuleDescr ruleDescr = new RuleDescr( "rule 1" );
         ruleDescr.setConsequence( "modify (cheese) {price = 5 }; retract (cheese)" );
 
-        MVELDialect mvelDialect = new MVELDialect( new PackageBuilder( pkg ) );
-        DialectRegistry registry = new DialectRegistry();
-        registry.addDialect( "mvel",
-                             mvelDialect );
-        final PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
+        PackageBuilder pkgBuilder = new PackageBuilder( pkg );
+        final PackageBuilderConfiguration conf = pkgBuilder.getPackageBuilderConfiguration();
+        MVELDialect mvelDialect = ( MVELDialect ) ( (DialectConfiguration) conf.getDialectConfiguration( "mvel" ) ).getDialect();
 
         final InstrumentedBuildContent context = new InstrumentedBuildContent( conf,
                                                                                pkg,
                                                                                ruleDescr,
-                                                                               registry,
+                                                                               conf.getDialectRegistry(),
                                                                                mvelDialect );
 
         final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();
@@ -100,16 +100,17 @@
         final RuleDescr ruleDescr = new RuleDescr( "rule 1" );
         ruleDescr.setConsequence( "if (cheese.price == 10) { cheese.price = 5; }" );
 
-        MVELDialect mvelDialect = new MVELDialect( new PackageBuilder( pkg ) );
-        DialectRegistry registry = new DialectRegistry();
-        registry.addDialect( "default",
-                             mvelDialect );
+        Properties properties = new Properties();
+        properties.setProperty( "drools.dialect.default",
+                                "mvel" );        
+        PackageBuilderConfiguration cfg1 = new PackageBuilderConfiguration( properties );
+        MVELDialect mvelDialect = ( MVELDialect) cfg1.getDefaultDialect();
         final PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
 
         final InstrumentedBuildContent context = new InstrumentedBuildContent( conf,
                                                                                pkg,
                                                                                ruleDescr,
-                                                                               registry,
+                                                                               conf.getDialectRegistry(),
                                                                                mvelDialect );
 
         final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -12,6 +12,7 @@
 import org.drools.base.ClassFieldExtractorCache;
 import org.drools.base.ClassObjectType;
 import org.drools.common.InternalFactHandle;
+import org.drools.compiler.DialectConfiguration;
 import org.drools.compiler.DialectRegistry;
 import org.drools.compiler.PackageBuilder;
 import org.drools.compiler.PackageBuilderConfiguration;
@@ -32,17 +33,15 @@
     public void testSimpleExpression() {
         final Package pkg = new Package( "pkg1" );
         final RuleDescr ruleDescr = new RuleDescr( "rule 1" );
+               
+        PackageBuilder pkgBuilder = new PackageBuilder( pkg );
+        final PackageBuilderConfiguration conf = pkgBuilder.getPackageBuilderConfiguration();
+        MVELDialect mvelDialect = ( MVELDialect ) ( (DialectConfiguration) conf.getDialectConfiguration( "mvel" ) ).getDialect();
 
-        MVELDialect mvelDialect = new MVELDialect( new PackageBuilder( pkg ) );
-        DialectRegistry registry = new DialectRegistry();
-        registry.addDialect( "mvel",
-                             mvelDialect );
-        final PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
-
         final InstrumentedBuildContent context = new InstrumentedBuildContent( conf,
                                                                                pkg,
                                                                                ruleDescr,
-                                                                               registry,
+                                                                               conf.getDialectRegistry(),
                                                                                mvelDialect );
 
         final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -14,6 +14,7 @@
 import org.drools.base.ClassObjectType;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.compiler.DialectConfiguration;
 import org.drools.compiler.DialectRegistry;
 import org.drools.compiler.PackageBuilder;
 import org.drools.compiler.PackageBuilderConfiguration;
@@ -36,16 +37,14 @@
         final Package pkg = new Package( "pkg1" );
         final RuleDescr ruleDescr = new RuleDescr( "rule 1" );
 
-        MVELDialect mvelDialect = new MVELDialect( new PackageBuilder( pkg ) );
-        DialectRegistry registry = new DialectRegistry();
-        registry.addDialect( "mvel",
-                             mvelDialect );
-        final PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
+        PackageBuilder pkgBuilder = new PackageBuilder( pkg );
+        final PackageBuilderConfiguration conf = pkgBuilder.getPackageBuilderConfiguration();
+        MVELDialect mvelDialect = ( MVELDialect ) ( (DialectConfiguration) conf.getDialectConfiguration( "mvel" ) ).getDialect();
 
         final InstrumentedBuildContent context = new InstrumentedBuildContent( conf,
                                                                                pkg,
                                                                                ruleDescr,
-                                                                               registry,
+                                                                               conf.getDialectRegistry(),
                                                                                mvelDialect );
         
         final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -16,6 +16,7 @@
 import org.drools.base.evaluators.Operator;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.compiler.DialectConfiguration;
 import org.drools.compiler.DialectRegistry;
 import org.drools.compiler.PackageBuilder;
 import org.drools.compiler.PackageBuilderConfiguration;
@@ -38,16 +39,14 @@
         final Package pkg = new Package( "pkg1" );
         final RuleDescr ruleDescr = new RuleDescr( "rule 1" );
 
-        MVELDialect mvelDialect = new MVELDialect( new PackageBuilder( pkg ) );
-        DialectRegistry registry = new DialectRegistry();
-        registry.addDialect( "mvel",
-                             mvelDialect );
-        final PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
+        PackageBuilder pkgBuilder = new PackageBuilder( pkg );
+        final PackageBuilderConfiguration conf = pkgBuilder.getPackageBuilderConfiguration();
+        MVELDialect mvelDialect = ( MVELDialect ) ( (DialectConfiguration) conf.getDialectConfiguration( "mvel" ) ).getDialect();
 
         final InstrumentedBuildContent context = new InstrumentedBuildContent( conf,
                                                                                pkg,
                                                                                ruleDescr,
-                                                                               registry,
+                                                                               conf.getDialectRegistry(),
                                                                                mvelDialect );
         
         final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilderTest.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilderTest.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilderTest.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -11,6 +11,7 @@
 import org.drools.WorkingMemory;
 import org.drools.base.ClassObjectType;
 import org.drools.common.InternalFactHandle;
+import org.drools.compiler.DialectConfiguration;
 import org.drools.compiler.DialectRegistry;
 import org.drools.compiler.PackageBuilder;
 import org.drools.compiler.PackageBuilderConfiguration;
@@ -30,16 +31,14 @@
         ruleDescr.setSalience( "p.age + 20" );
         ruleDescr.setConsequence( "" );
 
-        MVELDialect mvelDialect = new MVELDialect( new PackageBuilder( pkg ) );
-        DialectRegistry registry = new DialectRegistry();
-        registry.addDialect( "mvel",
-                             mvelDialect );
-        final PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
+        PackageBuilder pkgBuilder = new PackageBuilder( pkg );
+        final PackageBuilderConfiguration conf = pkgBuilder.getPackageBuilderConfiguration();
+        MVELDialect mvelDialect = ( MVELDialect ) ( (DialectConfiguration) conf.getDialectConfiguration( "mvel" ) ).getDialect();
 
         final InstrumentedBuildContent context = new InstrumentedBuildContent( conf,
                                                                                pkg,
                                                                                ruleDescr,
-                                                                               registry,
+                                                                               conf.getDialectRegistry(),
                                                                                mvelDialect );
 
         final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/integrationtests/test_AccumulateMVEL.drl
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/integrationtests/test_AccumulateMVEL.drl	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/integrationtests/test_AccumulateMVEL.drl	2007-07-16 00:31:13 UTC (rev 13539)
@@ -27,7 +27,7 @@
                                                   result( total ) )
     then
         results.add($totalAmount);
-end  
+end
 
 rule "Constraints everywhere" salience 80
 	dialect "mvel"
@@ -39,7 +39,7 @@
     	                                        action( cheesery.addCheese( $cheese ); ),
                                                 result( cheesery ) );
     then
-        results.add(new Integer($cheesery.getTotalAmount()));
+        results.add($cheesery.getTotalAmount());
 end  
 
 rule "Source pattern binds" salience 70

Copied: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/integrationtests/test_CollectAlphaRestriction.drl (from rev 13536, labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_CollectAlphaRestriction.drl)
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/integrationtests/test_CollectAlphaRestriction.drl	                        (rev 0)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/integrationtests/test_CollectAlphaRestriction.drl	2007-07-16 00:31:13 UTC (rev 13539)
@@ -0,0 +1,12 @@
+package org.drools;
+
+import java.util.ArrayList;
+
+global java.util.List results;
+
+rule "Collect Alpha Restriction" salience 70
+    when
+    	$cheeseList  : ArrayList(size > 0) from collect( Cheese( type == "stilton" ) );
+    then
+        results.add($cheeseList);
+end

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/integrationtests/test_MapAccess.drl
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/integrationtests/test_MapAccess.drl	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/integrationtests/test_MapAccess.drl	2007-07-16 00:31:13 UTC (rev 13539)
@@ -6,7 +6,7 @@
 
 rule "map access"
 	when
-		$m : Map( this['name'] == "Edson", this.surname == "Tirelli", this['age'] == 28 )
+		$m : Map( this['name'] == "Edson", this.surname == "Tirelli", this.age == 28 )
 	then
 		results.add( $m );
 end
\ No newline at end of file

Copied: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/integrationtests/test_bindings.drl (from rev 13501, labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_bindings.drl)
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/integrationtests/test_bindings.drl	                        (rev 0)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/integrationtests/test_bindings.drl	2007-07-16 00:31:13 UTC (rev 13539)
@@ -0,0 +1,11 @@
+package org.drools;
+
+global java.util.List results;
+
+rule "bindings"
+when
+    Cheese( $t : type == "stilton" || $p : price == 10 )
+then
+    results.add( $t );
+    results.add( new Integer( $p ) );
+end 
\ No newline at end of file

Copied: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/integrationtests/test_multipleFroms.drl (from rev 13513, labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_multipleFroms.drl)
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/integrationtests/test_multipleFroms.drl	                        (rev 0)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/test/resources/org/drools/integrationtests/test_multipleFroms.drl	2007-07-16 00:31:13 UTC (rev 13539)
@@ -0,0 +1,16 @@
+package org.drools
+
+import java.util.ArrayList;
+
+global org.drools.Cheesery cheesery;
+global java.util.List results;
+
+rule MyRule
+    dialect "java"
+when
+	$i : ArrayList() from collect(Cheese() from cheesery.getCheeses())
+    $k : ArrayList() from collect(Cheese() from cheesery.getCheeses())
+then
+    results.add( $i );
+    results.add( $k );
+end

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/.classpath
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/.classpath	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/.classpath	2007-07-16 00:31:13 UTC (rev 13539)
@@ -6,8 +6,8 @@
   <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
   <classpathentry kind="output" path="target/classes"/>
   <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel14/1.2pre3/mvel14-1.2pre3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3/1.1.3.4.O/xpp3-1.1.3.4.O.jar"/>
   <classpathentry kind="var" path="M2_REPO/xstream/xstream/1.1.3/xstream-1.1.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel14/1.2pre3/mvel14-1.2pre3.jar"/>
   <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3/1.1.3.4.O/xpp3-1.1.3.4.O.jar"/>
 </classpath>

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/Agenda.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/Agenda.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/Agenda.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -1,18 +1,50 @@
 package org.drools;
+/*
+ * 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.drools.spi.Activation;
 import org.drools.spi.ActivationGroup;
 import org.drools.spi.AgendaGroup;
 import org.drools.spi.RuleFlowGroup;
 
+/**
+ * Agenda interface for the WorkingMemory
+ *
+ */
 public interface Agenda {
 
+    /**
+     * Returns the WorkignMemory for this Agenda
+     * @return
+     *      The WorkingMemory
+     */
     public WorkingMemory getWorkingMemory();
 
-    public org.drools.util.LinkedList getScheduledItems();
-
+    /**
+     * Sets the Agenda's focus to the specified AgendaGroup
+     * @param agendaGroup
+     * @return
+     */
     public boolean setFocus(AgendaGroup agendaGroup);
 
+    /**
+     * Sets the Agenda's focus to the specified AgendaGroup
+     * @param agendaGroup
+     * @return
+     */    
     public void setFocus(String name);
 
     public AgendaGroup getFocus();

Deleted: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/ConcurrentStatelessSession.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/ConcurrentStatelessSession.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/ConcurrentStatelessSession.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -1,14 +0,0 @@
-package org.drools;
-
-import java.util.List;
-
-import org.drools.event.AgendaEventListener;
-import org.drools.spi.AgendaFilter;
-import org.drools.spi.GlobalResolver;
-
-public interface ConcurrentStatelessSession {    
-    
-    void asyncExecute(Object object);
-    void asyncExecute(Object[] list);
-    void asyncExecute(List list);
-}

Copied: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/EventManager.java (from rev 13501, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/EventManager.java)
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/EventManager.java	                        (rev 0)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/EventManager.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -0,0 +1,104 @@
+package org.drools;
+
+/*
+ * 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.Serializable;
+import java.util.List;
+
+import org.drools.event.AgendaEventListener;
+import org.drools.event.AgendaEventSupport;
+import org.drools.event.RuleFlowEventListener;
+import org.drools.event.RuleFlowEventSupport;
+import org.drools.event.WorkingMemoryEventListener;
+import org.drools.event.WorkingMemoryEventSupport;
+
+/**
+ * The EventManager class is implemented by classes wishing to add,remove and get the various Drools EventListeners.
+ *
+ */
+public interface EventManager
+    extends
+    Serializable {
+    /**
+     * Add an event listener.
+     * 
+     * @param listener
+     *            The listener to add.
+     */
+    public void addEventListener(WorkingMemoryEventListener listener);
+
+    /**
+     * Remove an event listener.
+     * 
+     * @param listener
+     *            The listener to remove.
+     */
+    public void removeEventListener(WorkingMemoryEventListener listener);
+
+    /**
+     * Returns all event listeners.
+     * 
+     * @return listeners The listeners.
+     */
+    public List getWorkingMemoryEventListeners();
+
+    /**
+     * Add an event listener.
+     * 
+     * @param listener
+     *            The listener to add.
+     */
+    public void addEventListener(AgendaEventListener listener);
+
+    /**
+     * Remove an event listener.
+     * 
+     * @param listener
+     *            The listener to remove.
+     */
+    public void removeEventListener(AgendaEventListener listener);
+
+    /**
+     * Returns all event listeners.
+     * 
+     * @return listeners The listeners.
+     */
+    public List getAgendaEventListeners();
+
+    /**
+     * Add an event listener.
+     * 
+     * @param listener
+     *            The listener to add.
+     */
+    public void addEventListener(RuleFlowEventListener listener);
+
+    /**
+     * Remove an event listener.
+     * 
+     * @param listener
+     *            The listener to remove.
+     */
+    public void removeEventListener(RuleFlowEventListener listener);
+
+    /**
+     * Returns all event listeners.
+     * 
+     * @return listeners The listeners.
+     */
+    public List getRuleFlowEventListeners();
+}
\ No newline at end of file

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/FactException.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/FactException.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/FactException.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -19,8 +19,6 @@
 /**
  * Base exception indicating an error in manipulating facts.
  * 
- * @author <a href="mailto:mark.proctor at jboss.com">Mark Proctor</a>
- * @author <a href="mailto:bob at werken.com">Bob McWhirter</a>
  */
 public class FactException extends RuntimeDroolsException {
     /**

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/InitialFact.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/InitialFact.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/InitialFact.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -18,6 +18,10 @@
  * limitations under the License.
  */
 
+/**
+ * Initial fact, automatically put into the network. This fact is needed by 'not' CEs
+ * when they are the CEs in the rule.
+ */
 public interface InitialFact
     extends
     Serializable {

Deleted: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/NoSuchFactHandleException.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/NoSuchFactHandleException.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/NoSuchFactHandleException.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -1,75 +0,0 @@
-package org.drools;
-
-/*
- * 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.
- */
-
-/**
- * Indicates an attempt to retract, update or retrieve a fact object that is no
- * longer present.
- * 
- * @see FactHandle
- * @see WorkingMemory#getFactHandle
- * 
- * @author <a href="mailto:simon at redhillconsulting.com.au">Simon Harris </a>
- * 
- * @version $Id: NoSuchFactObjectException.java,v 1.3 2003/11/19 21:31:09 bob
- *          Exp $
- */
-public class NoSuchFactHandleException extends FactException {
-    /**
-     * 
-     */
-    private static final long serialVersionUID = -4900120393032700935L;
-    /** Invalid fact object. */
-    private final Object      object;
-
-    /**
-     * @see java.lang.Exception#Exception()
-     * 
-     * @param object
-     *            The invalid fact object.
-     */
-    public NoSuchFactHandleException(final Object object) {
-        super( createMessage( object ) );
-        this.object = object;
-    }
-
-    /**
-     * @see java.lang.Exception#Exception(Throwable cause)
-     * 
-     * @param object
-     *            The invalid fact object.
-     */
-    public NoSuchFactHandleException(final Object object,
-                                     final Throwable cause) {
-        super( createMessage( object ),
-               cause );
-        this.object = object;
-    }
-
-    /**
-     * Retrieve the invalid Object.
-     * 
-     * @return The invalid fact object.
-     */
-    public Object getObject() {
-        return this.object;
-    }
-
-    private static String createMessage(final Object object) {
-        return object == null ? "null fact object" : "no such fact handle for object:" + object;
-    }
-}
\ No newline at end of file

Deleted: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/NoSuchFactObjectException.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/NoSuchFactObjectException.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/NoSuchFactObjectException.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -1,76 +0,0 @@
-package org.drools;
-
-/*
- * 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.
- */
-
-/**
- * Indicates an attempt to retract, update or retrieve a fact object that is no
- * longer present.
- * 
- * @see FactHandle
- * @see WorkingMemory#assertObject
- * @see WorkingMemory#retractObject
- * @see WorkingMemory#getObject
- * 
- * @author <a href="mailto:bob at werken.com">bob mcwhirter </a>
- * 
- * @version $Id: NoSuchFactObjectException.java,v 1.3 2003/11/19 21:31:09 bob
- *          Exp $
- */
-public class NoSuchFactObjectException extends FactException {
-    /**
-     * 
-     */
-    private static final long serialVersionUID = 400L;
-    /** Invalid fact handle. */
-    private final FactHandle  handle;
-
-    /**
-     * @see java.lang.Exception#Exception()
-     * 
-     * @param object
-     *            The invalid fact object.
-     */
-    public NoSuchFactObjectException(final FactHandle handle) {
-        super( createMessage( handle ) );
-        this.handle = handle;
-    }
-
-    /**
-     * @see java.lang.Exception#Exception()
-     * 
-     * @param object
-     *            The invalid fact object.
-     */
-    public NoSuchFactObjectException(final FactHandle handle,
-                                     final Throwable cause) {
-        super( createMessage( handle ) );
-        this.handle = handle;
-    }
-
-    /**
-     * Retrieve the invalid <code>FactHandle</code>.
-     * 
-     * @return The invalid fact handle.
-     */
-    public FactHandle getFactHandle() {
-        return this.handle;
-    }
-
-    private static String createMessage(final FactHandle handle) {
-        return handle == null ? "null fact object" : "no such fact object for handle:" + handle.toExternalForm();
-    }
-}
\ No newline at end of file

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/ObjectFilter.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/ObjectFilter.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/ObjectFilter.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -1,5 +1,16 @@
 package org.drools;
 
+/**
+ * ObjectFilter is used with WorkingMemories to filter out instances during Iteration
+ * @author mproctor
+ *
+ */
 public interface ObjectFilter {
+    
+    /**
+     * Returning true means the Iterator accepts, and thus returns, the current Object.
+     * @param object
+     * @return
+     */
     boolean accept(Object object);
 }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/Otherwise.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/Otherwise.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/Otherwise.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -4,7 +4,8 @@
  * This class is essentually a named fact that will be asserted when the engine
  * has not matched any rules.
  * 
- * @author Michael Neale
+ * This class is not currently used.
+ * 
  *
  */
 public class Otherwise {

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/PackageIntegrationException.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/PackageIntegrationException.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/PackageIntegrationException.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -25,10 +25,6 @@
  * @see RuleBase#addRule
  * @see RuleBase#addPackage
  * 
- * @author <a href="mailto:bob at eng.werken.com">bob mcwhirter </a>
- * 
- * @version $Id: RuleIntegrationException.java,v 1.6 2004/09/17 00:14:06
- *          mproctor Exp $
  */
 public class PackageIntegrationException extends IntegrationException {
     /**

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/QueryResult.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/QueryResult.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/QueryResult.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -1,4 +1,19 @@
 package org.drools;
+/*
+ * 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.Map;
 
@@ -22,23 +37,53 @@
         this.queryResults = queryResults;
     }
 
+    /**
+     * Return a map of Declarations where the key is the identifier and the value
+     * is the Declaration.
+     * 
+     * @return
+     *      The Map of Declarations.
+     */    
     public Map getDeclarations() {
         return this.queryResults.getDeclarations();
     }
 
+    /**
+     * Returns the Object for int position in the Tuple
+     * 
+     * @param i
+     * @return
+     *     The Object
+     */
     public Object get(final int i) {
         //adjust for the DroolsQuery object
         return getObject( this.tuple.get( i + 1 ));
     }
 
+    /** 
+     * Return the Object for the given Declaration identifer.
+     * @param identifier
+     * @return
+     *      The Object
+     */
     public Object get(final String identifier) {
         return get( (Declaration) this.queryResults.getDeclarations().get( identifier ) );
     }
 
+    /** 
+     * Return the Object for the given Declaration.
+     * @param identifier
+     * @return
+     *      The Object
+     */    
     public Object get(final Declaration declaration) {
         return declaration.getValue( (InternalWorkingMemory) workingMemory, getObject( this.tuple.get( declaration ) ) );
     }
 
+    /**
+     * Return the FactHandles for the Tuple.
+     * @return
+     */
     public FactHandle[] getFactHandles() {
         // Strip the DroolsQuery fact
         final FactHandle[] src = this.tuple.getFactHandles();
@@ -51,12 +96,22 @@
         return dst;
     }
 
+    /**
+     * The size of the Tuple; i.e. the number of columns (FactHandles) in this row result.
+     * @return
+     */
     public int size() {
         // Adjust for the DroolsQuery object
         return this.tuple.getFactHandles().length - 1;
     }
     
-    private Object getObject(InternalFactHandle handle) {
+    /**
+     * Get the Object for the given FactHandle
+     * @param handle
+     * @return
+     */
+    private Object getObject(FactHandle factHandle) {
+        InternalFactHandle handle = ( InternalFactHandle ) factHandle; 
         if ( handle.isShadowFact() ) {
             return ((ShadowProxy) handle.getObject()).getShadowedObject();
         } else {

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/QueryResults.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/QueryResults.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/QueryResults.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -1,4 +1,19 @@
 package org.drools;
+/*
+ * 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.HashMap;
 import java.util.Iterator;
@@ -10,6 +25,11 @@
 import org.drools.rule.Query;
 import org.drools.spi.Tuple;
 
+/**
+ * Returned QueryResults instance for a requested named query. from here you can iterate the returned data, or
+ * get a specific row. All the available Declarations used in the query can also be accessed.
+ *
+ */
 public class QueryResults {
     private Query           query;
 
@@ -35,10 +55,22 @@
                                 this );
     }
 
+    /**
+     * Returns an Iterator for the results.
+     * 
+     * @return
+     */
     public Iterator iterator() {
         return new QueryResultsIterator( this.results.iterator() );
     }
 
+    /**
+     * Return a map of Declarations where the key is the identifier and the value
+     * is the Declaration.
+     * 
+     * @return
+     *      The Map of Declarations.
+     */
     public Map getDeclarations() {
 
         final Declaration[] declarations = this.query.getDeclarations();
@@ -52,11 +84,15 @@
         return this.declarations;
     }
 
+    /**
+     * The results size
+     * @return
+     */
     public int size() {
         return this.results.size();
     }
 
-    class QueryResultsIterator
+    private class QueryResultsIterator
         implements
         Iterator {
         private Iterator iterator;

Deleted: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/ReteConcurrentStatelessSession.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/ReteConcurrentStatelessSession.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/ReteConcurrentStatelessSession.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -1,63 +0,0 @@
-package org.drools;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.drools.event.AgendaEventListener;
-import org.drools.spi.AgendaFilter;
-import org.drools.spi.GlobalResolver;
-import org.drools.util.concurrent.locks.BlockingQueue;
-import org.drools.util.concurrent.locks.LinkedBlockingQueue;
-import org.drools.util.concurrent.locks.Queue;
-
-public class ReteConcurrentStatelessSession implements ConcurrentStatelessSession {    
-    private BlockingQueue queue;
-    
-    public void asyncExecute(Object object) {
-        this.queue.offer( object );
-    }
-    
-    public void asyncExecute(Object[] list) {
-        this.queue.offer( list );
-    }
-    
-    public void asyncExecute(List list) {
-        this.queue.offer( list );
-    }
-    
- 
-    public class ProducerConsumer implements Runnable {
-        private WorkingMemory workingMemory;
-        private BlockingQueue queue;
-        
-        
-        public ProducerConsumer(WorkingMemory workingMemory, BlockingQueue queue) {
-            this.workingMemory = workingMemory;
-            this.queue = queue;
-        }
-
-        public void run() {
-            while (true) {
-                try {
-                    Object object = this.queue.take();
-                    if ( object instanceof Object[] ) {
-                        this.workingMemory.insert( object );
-                    } else if ( object instanceof List ) {
-                        List list = ( List ) object;
-                        for ( Iterator it = list.iterator(); it.hasNext(); ) {
-                            this.workingMemory.insert( it.next() );
-                        }
-                    } else {
-                        Object[] objects = ( Object[] ) object;
-                        for ( int i = 0, length = objects.length; i < length; i++ ) {
-                            this.workingMemory.insert( objects[i] );
-                        }
-                    }
-                    Thread.sleep( 100 );
-                } catch(InterruptedException e) {
-                    return;
-                }
-            }
-        }        
-    }
-}

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/RuleBase.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/RuleBase.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/RuleBase.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -33,10 +33,6 @@
  * </p>
  * 
  * @see WorkingMemory
- * 
- * @author <a href="mailto:bob at werken.com">bob mcwhirter </a>
- * 
- * @version $Id: RuleBase.java,v 1.2 2005/08/04 23:33:30 mproctor Exp $
  */
 public interface RuleBase
     extends

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -43,11 +43,6 @@
  * mutable again. This is to avoid inconsistent behavior inside rulebase.
  * 
  * NOTE: This API is under review and may change in the future.
- *
- * Created: 16/05/2006
- * @author <a href="mailto:tirelli at post.com">Edson Tirelli</a> 
- *
- * @version $Id$
  */
 
 /**

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/RuleBaseFactory.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/RuleBaseFactory.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/RuleBaseFactory.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -21,7 +21,6 @@
 /**
  * This is a utility to create rule bases based on the type of engine you wish to use.
  * 
- * @author Michael Neale
  */
 public class RuleBaseFactory {
 

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/StatelessSession.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/StatelessSession.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/StatelessSession.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -19,26 +19,8 @@
  * Care should be used when using the async versions of the methods, consult the javadoc for 
  * the specific information.
  */
-public interface StatelessSession {
-    public void addEventListener(final WorkingMemoryEventListener listener);
-
-    public void removeEventListener(final WorkingMemoryEventListener listener);
-
-    public List getWorkingMemoryEventListeners();
-
-    public void addEventListener(final AgendaEventListener listener);
-
-    public void removeEventListener(final AgendaEventListener listener);
-
-    public List getAgendaEventListeners();
-
-    public void addEventListener(final RuleFlowEventListener listener);
-
-    public void removeEventListener(final RuleFlowEventListener listener);
-
-    public List getRuleFlowEventListeners();
-    
-    
+public interface StatelessSession extends EventManager {
+        
     void setAgendaFilter(AgendaFilter agendaFilter);
     
     /**

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/WorkingMemory.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/WorkingMemory.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/WorkingMemory.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -39,103 +39,55 @@
  * the RuleBase reference is transient. Please see the RuleBase interface for serializing
  * in WorkingMemories from an InputStream.
  * 
- * @author <a href="mailto:bob at eng.werken.com">bob mcwhirter </a>
  */
-public interface WorkingMemory
-    extends
-    Serializable {
-    /**
-     * Add an event listener.
-     * 
-     * @param listener
-     *            The listener to add.
-     */
-    public void addEventListener(WorkingMemoryEventListener listener);
+public interface WorkingMemory extends EventManager {
 
     /**
-     * Remove an event listener.
-     * 
-     * @param listener
-     *            The listener to remove.
+     * Returns the Agenda for this WorkingMemory. While the WorkingMemory interface is considered public, the Agenda interface 
+     * is more subject to change.
+     * @return
+     *         the Agenda
      */
-    public void removeEventListener(WorkingMemoryEventListener listener);
-
-    /**
-     * Returns all event listeners.
-     * 
-     * @return listeners The listeners.
-     */
-    public List getWorkingMemoryEventListeners();
-
-    /**
-     * Add an event listener.
-     * 
-     * @param listener
-     *            The listener to add.
-     */
-    public void addEventListener(AgendaEventListener listener);
-
-    /**
-     * Remove an event listener.
-     * 
-     * @param listener
-     *            The listener to remove.
-     */
-    public void removeEventListener(AgendaEventListener listener);
-
-    /**
-     * Add an event listener.
-     * 
-     * @param listener
-     *            The listener to add.
-     */
-    public void addEventListener(RuleFlowEventListener listener);
-
-    /**
-     * Remove an event listener.
-     * 
-     * @param listener
-     *            The listener to remove.
-     */
-    public void removeEventListener(RuleFlowEventListener listener);
-
-    /**
-     * Returns all event listeners.
-     * 
-     * @return listeners The listeners.
-     */
-    public List getAgendaEventListeners();
-
     public Agenda getAgenda();
 
     /**
-     * Set a specific piece of global in this working memory. Null values will return doing nothign
+     * Set a specific instance as a global in this working memory. Null values will return doing nothing.
+     * The global identifier and its type must be declared in the drl.
      * 
-     * @param name
-     *            the name under which to populate the data
+     * @param identifier
+     *            the identifier under which to populate the data
      * @param value
      *            the global value, cannot be null
      */
-    void setGlobal(String name,
+    void setGlobal(String identifier,
                    Object value);
 
     /**
-     * Retrieve a specific piece of global data by name
+     * Retrieve a specific instance of global data by identifier
      * 
-     * @return application data or null if nothing is set under this name
+     * @return application data or null if nothing is set under this identifier
      */
-    Object getGlobal(String name);
+    Object getGlobal(String identifier);
 
+    
     /**
-     * Delegate used to resolve any global names not found in the global map.
+     * Sets the GlobalResolver instance to be used when resolving globals, replaces the current GlobalResolver.
+     * Typcicaly a delegating GlobalResolver is created that first gets a reference to the current GlobalResolver,
+     * for delegating
+     * 
      * @param globalResolver
      */
     void setGlobalResolver(GlobalResolver globalResolver);
     
+    /**
+     * Returns the current GlobalResolver
+     * 
+     * @return
+     */
     GlobalResolver getGlobalResolver();
 
     /**
-     * Retrieve the <code>RuleBase</code> of this working memory.
+     * Retrieve the <code>RuleBase</code> for this working memory.
      * 
      * @return The <code>RuleBase</code>.
      */
@@ -145,7 +97,7 @@
      * Fire all items on the agenda until empty.
      * 
      * @throws FactException
-     *             If an error occurs.
+     *             If a RuntimeException error occurs.
      */
     void fireAllRules() throws FactException;
 
@@ -153,7 +105,7 @@
      * Fire all items on the agenda until empty, using the given AgendaFiler
      * 
      * @throws FactException
-     *             If an error occurs.
+     *             If a RuntimeException error occurs.
      */
     void fireAllRules(AgendaFilter agendaFilter) throws FactException;
       
@@ -161,7 +113,7 @@
      * Fire all items on the agenda until empty or at most 'fireLimit' rules have fired
      * 
      * @throws FactException
-     *             If an error occurs.
+     *             If a RuntimeException error occurs.
      */
     void fireAllRules( int fireLimit ) throws FactException;
 
@@ -170,54 +122,84 @@
      * until empty or at most 'fireLimit' rules have fired
      * 
      * @throws FactException
-     *             If an error occurs.
+     *             If a RuntimeException error occurs.
      */
     void fireAllRules(final AgendaFilter agendaFilter, int fireLimit ) throws FactException;
 
     /**
      * Retrieve the object associated with a <code>FactHandle</code>.
      * 
-     * @see #containsObject
      * 
      * @param handle
      *            The fact handle.
      * 
      * @return The associated object.
-     * 
-     * @throws NoSuchFactObjectException
-     *             If no object is known to be associated with the specified
-     *             handle.
      */
-    Object getObject(FactHandle handle) throws NoSuchFactObjectException;
+    Object getObject(FactHandle handle);
 
     /**
      * Retrieve the <code>FactHandle</code> associated with an Object.
      * 
-     * @see #containsObject
-     * 
      * @param object
      *            The object.
      * 
      * @return The associated fact handle.
-     * 
-     * @throws NoSuchFactHandleException
-     *             If no handle is known to be associated with the specified
-     *             object.
      */
-    FactHandle getFactHandle(Object object) throws NoSuchFactHandleException;
+    FactHandle getFactHandle(Object object);
 
+    /**
+     * Returns an Iterator for the Objects in the Working Memory. This Iterator is not thread safe.
+     * @return
+     *     the Iterator
+     */
     Iterator iterateObjects();
     
+    /**
+     *  Returns an Iterator for the Objects in the Working Memory. This Iterator will filter out
+     *  any objects that the ObjectFilter does not accept. This Iterator is not thread safe.
+     *  
+     * @param filter
+     * 
+     * @return
+     *     the Iterator
+     */    
     Iterator iterateObjects(ObjectFilter filter);
 
+    /**
+     * Returns an Iterator for the FactHandles in the Working Memory. This Iterator is not thread safe.
+     * @return
+     *     the Iterator
+     */    
     Iterator iterateFactHandles();
     
+    /**
+     *  Returns an Iterator for the Objects in the Working Memory. This Iterator will filter out
+     *  any objects that the ObjectFilter does not accept. This Iterator is not thread safe.
+     *  
+     * @param filter
+     * 
+     * @return
+     *     the Iterator
+     */        
     Iterator iterateFactHandles(ObjectFilter filter);    
     
+    /**
+     * Returns the AgendaGroup which has the current WorkingMemory focus. The AgendaGroup interface is subject to change.
+     * @return
+     *     the AgendaGroup
+     */
     public AgendaGroup getFocus();
 
+    /**
+     * Set the focus to the specified AgendaGroup
+     * @param focus
+     */
     void setFocus(String focus);
 
+    /**
+     * Set the focus to the specified AgendaGroup
+     * @param focus
+     */    
     void setFocus(AgendaGroup focus);
         
 
@@ -230,7 +212,7 @@
      * @return The new fact-handle associated with the object.
      * 
      * @throws FactException
-     *             If an error occurs.
+     *             If a RuntimeException error occurs.
      */
     FactHandle insert(Object object) throws FactException;
 
@@ -248,10 +230,25 @@
      */
     public QueryResults getQueryResults(String query);
     
+    /**
+     * Retrieve the QueryResults of the specified query and arguments
+     *
+     * @param query
+     *            The name of the query.
+     *            
+     * @param arguments
+     *            The arguments used for the query
+     *
+     * @return The QueryResults of the specified query.
+     *         If no results match the query it is empty.
+     *         
+     * @throws IllegalArgumentException 
+     *         if no query named "query" is found in the rulebase         
+     */    
     public QueryResults getQueryResults(String query, Object[] arguments);
 
     /**
-     * Assert a fact registering JavaBean <code>PropertyChangeListeners</code>
+     * Insert a fact registering JavaBean <code>PropertyChangeListeners</code>
      * on the Object to automatically trigger <code>update</code> calls
      * if <code>dynamic</code> is <code>true</code>.
      * 
@@ -264,7 +261,7 @@
      * @return The new fact-handle associated with the object.
      * 
      * @throws FactException
-     *             If an error occurs.
+     *             If a RuntimeException error occurs.
      */
     FactHandle insert(Object object,
                             boolean dynamic) throws FactException;
@@ -276,12 +273,13 @@
      *            The fact-handle associated with the fact to retract.
      * 
      * @throws FactException
-     *             If an error occurs.
+     *             If a RuntimeException error occurs.
      */
     void retract(FactHandle handle) throws FactException;
 
     /**
-     * Modify a fact.
+     * Inform the WorkingMemory that a Fact has been modified and that it
+     * should now update the network.
      * 
      * @param handle
      *            The fact-handle associated with the fact to modify.
@@ -289,13 +287,22 @@
      *            The new value of the fact.
      * 
      * @throws FactException
-     *             If an error occurs.
+     *             If a RuntimeException error occurs.
      */
     void update(FactHandle handle,
                       Object object) throws FactException;
     
+    /**
+     * 
+     * @param factHandle
+     */
     public void modifyRetract(final FactHandle factHandle);
     
+    /**
+     * 
+     * @param factHandle
+     * @param object
+     */
     public void modifyInsert(final FactHandle factHandle,
                              final Object object);    
 
@@ -308,13 +315,12 @@
     void setAsyncExceptionHandler(AsyncExceptionHandler handler);
 
     /**
-     * Clear the Agenda
-     * 
+     * Clear the Agenda. Iterates over each AgendaGroup cancalling all Activations.
      */
     void clearAgenda();
 
     /**
-     * Clear the Agenda Group
+     * Clear the Agenda Group, cancelling all its Activations.
      */
     public void clearAgendaGroup(String group);
 

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/audit/WorkingMemoryFileLogger.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/audit/WorkingMemoryFileLogger.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/audit/WorkingMemoryFileLogger.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -22,6 +22,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.drools.EventManager;
 import org.drools.WorkingMemory;
 import org.drools.audit.event.LogEvent;
 import com.thoughtworks.xstream.XStream;
@@ -53,8 +54,8 @@
      * Creates a new WorkingMemoryFileLogger for the given working memory.
      * @param workingMemory
      */
-    public WorkingMemoryFileLogger(final WorkingMemory workingMemory) {
-        super( workingMemory );
+    public WorkingMemoryFileLogger(final EventManager eventManager) {
+        super( eventManager );
     }
 
     /**

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/audit/WorkingMemoryLogger.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/audit/WorkingMemoryLogger.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/audit/WorkingMemoryLogger.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -20,6 +20,7 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.drools.EventManager;
 import org.drools.FactHandle;
 import org.drools.WorkingMemory;
 import org.drools.audit.event.ActivationLogEvent;
@@ -71,18 +72,18 @@
     RuleFlowEventListener {
 
     private final List    filters = new ArrayList();
-    private WorkingMemory workingMemory;
+    private EventManager eventManager;
 
     /**
      * Creates a new working memory logger for the given working memory.
      * 
      * @param workingMemory
      */
-    public WorkingMemoryLogger(final WorkingMemory workingMemory) {
-        this.workingMemory = workingMemory;
-        workingMemory.addEventListener( (WorkingMemoryEventListener) this );
-        workingMemory.addEventListener( (AgendaEventListener) this );
-        workingMemory.addEventListener( (RuleFlowEventListener) this );
+    public WorkingMemoryLogger(final EventManager eventManager) {
+        this.eventManager = eventManager;
+        this.eventManager.addEventListener( (WorkingMemoryEventListener) this );
+        this.eventManager.addEventListener( (AgendaEventListener) this );
+        this.eventManager.addEventListener( (RuleFlowEventListener) this );
     }
 
     /**
@@ -181,7 +182,7 @@
         filterLogEvent( new ActivationLogEvent( LogEvent.ACTIVATION_CREATED,
                                                 getActivationId( event.getActivation() ),
                                                 event.getActivation().getRule().getName(),
-                                                extractDeclarations( event.getActivation() ),
+                                                extractDeclarations( event.getActivation(), workingMemory ),
     											event.getActivation().getRule().getRuleFlowGroup() ) );
 	}
 
@@ -193,7 +194,7 @@
         filterLogEvent( new ActivationLogEvent( LogEvent.ACTIVATION_CANCELLED,
                                                 getActivationId( event.getActivation() ),
                                                 event.getActivation().getRule().getName(),
-                                                extractDeclarations( event.getActivation() ),
+                                                extractDeclarations( event.getActivation(), workingMemory ),
     											event.getActivation().getRule().getRuleFlowGroup() ) );
     }
 
@@ -205,7 +206,7 @@
         filterLogEvent( new ActivationLogEvent( LogEvent.BEFORE_ACTIVATION_FIRE,
                                                 getActivationId( event.getActivation() ),
                                                 event.getActivation().getRule().getName(),
-                                                extractDeclarations( event.getActivation() ),
+                                                extractDeclarations( event.getActivation(), workingMemory ),
     											event.getActivation().getRule().getRuleFlowGroup() ) );
     }
 
@@ -217,7 +218,7 @@
         filterLogEvent( new ActivationLogEvent( LogEvent.AFTER_ACTIVATION_FIRE,
                                                 getActivationId( event.getActivation() ),
                                                 event.getActivation().getRule().getName(),
-                                                extractDeclarations( event.getActivation() ),
+                                                extractDeclarations( event.getActivation(), workingMemory ),
     											event.getActivation().getRule().getRuleFlowGroup() ) );
     }
 
@@ -231,7 +232,7 @@
      * @param activation The activation from which the declarations should be extracted
      * @return A String represetation of the declarations of the activation.
      */
-    private String extractDeclarations(final Activation activation) {
+    private String extractDeclarations(final Activation activation,  final WorkingMemory workingMemory) {
         final StringBuffer result = new StringBuffer();
         final Tuple tuple = activation.getTuple();
         final Declaration[] declarations = activation.getRule().getDeclarations();
@@ -244,7 +245,7 @@
                     // This handle is now invalid, probably due to an fact retraction
                     continue;
                 }
-                final Object value = declaration.getValue( (InternalWorkingMemory) workingMemory, this.workingMemory.getObject( handle ) );
+                final Object value = declaration.getValue( (InternalWorkingMemory) workingMemory, workingMemory.getObject( handle ) );
 
                 result.append( declaration.getIdentifier() );
                 result.append( "=" );

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -123,7 +123,7 @@
                 return (BaseClassFieldExtractor) newClass.getConstructors()[0].newInstance( params );
             }
         } catch ( final Exception e ) {
-            System.out.println( e );
+            //e.printStackTrace();
             throw new RuntimeDroolsException( e );
         }
     }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/ClassObjectFilter.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/ClassObjectFilter.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/ClassObjectFilter.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -2,13 +2,27 @@
 
 import org.drools.ObjectFilter;
 
+/**
+ * Filters Objects by Class, only accepting Classes of the specified type
+ * @author mproctor
+ *
+ */
 public class ClassObjectFilter implements ObjectFilter {
     private Class clazz;
     
+    /** 
+     * The Allowed Class type
+     * @param clazz
+     */
     public ClassObjectFilter(Class clazz) {
         this.clazz = clazz;
     }
 
+    /**
+     * Returning true means the Iterator accepts, and thus returns, the current Object's Class type.
+     * @param object
+     * @return
+     */    
     public boolean accept(Object object) {
         return object.getClass().isAssignableFrom( this.clazz );
     }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/ClassTypeResolver.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/ClassTypeResolver.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/ClassTypeResolver.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -30,7 +30,7 @@
 public class ClassTypeResolver
     implements
     TypeResolver {
-    private List             imports;
+    private List             imports          = Collections.EMPTY_LIST;
 
     private ClassLoader      classLoader;
 
@@ -63,14 +63,14 @@
         if ( classLoader == null ) {
             throw new RuntimeDroolsException( "ClassTypeResolver cannot have a null parent ClassLoader" );
         }
-        
+
         this.classLoader = classLoader;
     }
 
     public void setClassLoader(ClassLoader classLoader) {
         this.classLoader = classLoader;
     }
-    
+
     /*
      * (non-Javadoc)
      * 

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/accumulators/JavaAccumulatorFunctionExecutor.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/accumulators/JavaAccumulatorFunctionExecutor.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/accumulators/JavaAccumulatorFunctionExecutor.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -53,7 +53,8 @@
     /* (non-Javadoc)
      * @see org.drools.spi.Accumulator#init(java.lang.Object, org.drools.spi.Tuple, org.drools.rule.Declaration[], org.drools.WorkingMemory)
      */
-    public void init(Object context,
+    public void init(Object workingMemoryContext,
+                     Object context,
                      Tuple leftTuple,
                      Declaration[] declarations,
                      WorkingMemory workingMemory) throws Exception {
@@ -63,7 +64,8 @@
     /* (non-Javadoc)
      * @see org.drools.spi.Accumulator#accumulate(java.lang.Object, org.drools.spi.Tuple, org.drools.common.InternalFactHandle, org.drools.rule.Declaration[], org.drools.rule.Declaration[], org.drools.WorkingMemory)
      */
-    public void accumulate(Object context,
+    public void accumulate(Object workingMemoryContext,
+                           Object context,
                            Tuple leftTuple,
                            InternalFactHandle handle,
                            Declaration[] declarations,
@@ -78,7 +80,8 @@
                                   value );
     }
 
-    public void reverse(Object context,
+    public void reverse(Object workingMemoryContext,
+                        Object context,
                         Tuple leftTuple,
                         InternalFactHandle handle,
                         Declaration[] declarations,
@@ -96,7 +99,8 @@
     /* (non-Javadoc)
      * @see org.drools.spi.Accumulator#getResult(java.lang.Object, org.drools.spi.Tuple, org.drools.rule.Declaration[], org.drools.WorkingMemory)
      */
-    public Object getResult(Object context,
+    public Object getResult(Object workingMemoryContext,
+                            Object context,
                             Tuple leftTuple,
                             Declaration[] declarations,
                             WorkingMemory workingMemory) throws Exception {
@@ -115,4 +119,8 @@
         this.expression = expression;
     }
 
+    public Object createWorkingMemoryContext() {
+        // no working memory context needed 
+        return null;
+    }
 }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/accumulators/MVELAccumulatorFunctionExecutor.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/accumulators/MVELAccumulatorFunctionExecutor.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/accumulators/MVELAccumulatorFunctionExecutor.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -18,6 +18,7 @@
 package org.drools.base.accumulators;
 
 import java.io.Serializable;
+import java.util.Map;
 
 import org.drools.WorkingMemory;
 import org.drools.base.mvel.DroolsMVELFactory;
@@ -36,18 +37,18 @@
     implements
     Accumulator {
 
-    private static final long         serialVersionUID = 400L;
+    private static final long        serialVersionUID = 400L;
 
-    private final Object              dummy            = new Object();
-    private final DroolsMVELFactory   factory;
-    private final Serializable        expression;
+    private final Object             dummy            = new Object();
+    private final DroolsMVELFactory  model;
+    private final Serializable       expression;
     private final AccumulateFunction function;
 
     public MVELAccumulatorFunctionExecutor(final DroolsMVELFactory factory,
                                            final Serializable expression,
                                            final AccumulateFunction function) {
         super();
-        this.factory = factory;
+        this.model = factory;
         this.expression = expression;
         this.function = function;
     }
@@ -62,7 +63,8 @@
     /* (non-Javadoc)
      * @see org.drools.spi.Accumulator#init(java.lang.Object, org.drools.spi.Tuple, org.drools.rule.Declaration[], org.drools.WorkingMemory)
      */
-    public void init(Object context,
+    public void init(Object workingMemoryContext,
+                     Object context,
                      Tuple leftTuple,
                      Declaration[] declarations,
                      WorkingMemory workingMemory) throws Exception {
@@ -72,43 +74,51 @@
     /* (non-Javadoc)
      * @see org.drools.spi.Accumulator#accumulate(java.lang.Object, org.drools.spi.Tuple, org.drools.common.InternalFactHandle, org.drools.rule.Declaration[], org.drools.rule.Declaration[], org.drools.WorkingMemory)
      */
-    public void accumulate(Object context,
+    public void accumulate(Object workingMemoryContext,
+                           Object context,
                            Tuple leftTuple,
                            InternalFactHandle handle,
                            Declaration[] declarations,
                            Declaration[] innerDeclarations,
                            WorkingMemory workingMemory) throws Exception {
-        this.factory.setContext( leftTuple,
-                                 null,
-                                 handle.getObject(),
-                                 workingMemory );
+        DroolsMVELFactory factory = (DroolsMVELFactory) workingMemoryContext;
+        factory.setContext( leftTuple,
+                            null,
+                            handle.getObject(),
+                            workingMemory,
+                            (Map) context );
         final Object value = MVEL.executeExpression( this.expression,
                                                      this.dummy,
-                                                     this.factory );
+                                                     factory );
         this.function.accumulate( context,
                                   value );
     }
 
-    public void reverse(Object context,
+    public void reverse(Object workingMemoryContext,
+                        Object context,
                         Tuple leftTuple,
                         InternalFactHandle handle,
                         Declaration[] declarations,
                         Declaration[] innerDeclarations,
                         WorkingMemory workingMemory) throws Exception {
-        this.factory.setContext( leftTuple,
-                                 null,
-                                 handle.getObject(),
-                                 workingMemory );
+        DroolsMVELFactory factory = (DroolsMVELFactory) workingMemoryContext;
+        factory.setContext( leftTuple,
+                               null,
+                               handle.getObject(),
+                               workingMemory,
+                               (Map) context );
         final Object value = MVEL.executeExpression( this.expression,
                                                      this.dummy,
-                                                     this.factory );
-        this.function.reverse( context, value );
+                                                     factory );
+        this.function.reverse( context,
+                               value );
     }
 
     /* (non-Javadoc)
      * @see org.drools.spi.Accumulator#getResult(java.lang.Object, org.drools.spi.Tuple, org.drools.rule.Declaration[], org.drools.WorkingMemory)
      */
-    public Object getResult(Object context,
+    public Object getResult(Object workingMemoryContext,
+                            Object context,
                             Tuple leftTuple,
                             Declaration[] declarations,
                             WorkingMemory workingMemory) throws Exception {
@@ -119,4 +129,8 @@
         return this.function.supportsReverse();
     }
 
+    public Object createWorkingMemoryContext() {
+        return this.model.clone();
+    }
+
 }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/dataproviders/MVELDataProvider.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/dataproviders/MVELDataProvider.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/dataproviders/MVELDataProvider.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -38,7 +38,8 @@
         this.factory.setContext( tuple,
                                  null,
                                  null,
-                                 wm );
+                                 wm,
+                                 null );
 
         //this.expression.
         final Object result = MVEL.executeExpression( this.expression,

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/evaluators/ObjectFactory.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/evaluators/ObjectFactory.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/evaluators/ObjectFactory.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -464,21 +464,21 @@
                                 final Object object1, final FieldValue object2) {
             final Object value = object2.getValue();
             final Collection col = (Collection) extractor.getValue( workingMemory, object1 );
-            return col.contains( value );
+            return ( col == null ) ? false : col.contains( value );
         }
 
         public boolean evaluateCachedRight(InternalWorkingMemory workingMemory,
                                            final VariableContextEntry context, final Object left) {
             final Object value = context.declaration.getExtractor().getValue( workingMemory, left );
             final Collection col = (Collection) ((ObjectVariableContextEntry) context).right;
-            return col.contains( value );
+            return ( col == null ) ? false : col.contains( value );
         }
 
         public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
                                           final VariableContextEntry context, final Object right) {
             final Object value = ((ObjectVariableContextEntry) context).left;
             final Collection col = (Collection) context.extractor.getValue( workingMemory, right );
-            return col.contains( value );
+            return ( col == null ) ? false : col.contains( value );
         }
 
         public boolean evaluate(InternalWorkingMemory workingMemory,
@@ -487,7 +487,7 @@
                                 final Extractor extractor2, final Object object2) {
             final Object value = extractor2.getValue( workingMemory, object2 );
             final Collection col = (Collection) extractor1.getValue( workingMemory, object1 );
-            return col.contains( value );
+            return ( col == null ) ? false : col.contains( value );
         }
 
         public String toString() {

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELFactory.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELFactory.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELFactory.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -1,41 +1,37 @@
 package org.drools.base.mvel;
 
-import org.drools.FactHandle;
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
 import org.drools.WorkingMemory;
 import org.drools.rule.Declaration;
 import org.drools.spi.KnowledgeHelper;
 import org.drools.spi.Tuple;
 import org.mvel.CompileException;
 import org.mvel.integration.VariableResolver;
-import org.mvel.integration.VariableResolverFactory;
 import org.mvel.integration.impl.BaseVariableResolverFactory;
-import org.mvel.integration.impl.ClassImportResolverFactory;
-import org.mvel.integration.impl.MapVariableResolver;
-import org.mvel.integration.impl.StaticMethodImportResolverFactory;
 
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
+public class DroolsMVELFactory extends BaseVariableResolverFactory
+    implements
+    Serializable,
+    Cloneable {
 
-public class DroolsMVELFactory extends BaseVariableResolverFactory implements Serializable {
+    private static final long serialVersionUID = 1504379613555271045L;
+
     /**
      * Holds the instance of the variables.
      */
-    //private Map           variables;
-    //    public DroolsMVELFactory(Map variables) {
-    //        this.variables = variables;
-    //    }
-    private Tuple           tuple;
-    private KnowledgeHelper knowledgeHelper;
-    private Object          object;
-    private Map             localDeclarations;
-    private Map             previousDeclarations;
-    private Map             globals;
+    private Tuple             tuple;
+    private KnowledgeHelper   knowledgeHelper;
+    private Object            object;
+    private Map               localDeclarations;
+    private Map               previousDeclarations;
+    private Map               globals;
 
-    private WorkingMemory   workingMemory;
+    private WorkingMemory     workingMemory;
 
-    private Map             variables;
+    private Map               localVariables;
 
     public DroolsMVELFactory(final Map previousDeclarations,
                              final Map localDeclarations,
@@ -43,7 +39,6 @@
         this.previousDeclarations = previousDeclarations;
         this.localDeclarations = localDeclarations;
         this.globals = globals;
-        //this.variables = new HashMap();
     }
 
     public Object getObject() {
@@ -57,11 +52,13 @@
     public void setContext(final Tuple tuple,
                            final KnowledgeHelper knowledgeHelper,
                            final Object object,
-                           final WorkingMemory workingMemory) {
+                           final WorkingMemory workingMemory,
+                           final Map variables) {
         this.tuple = tuple;
         this.knowledgeHelper = knowledgeHelper;
         this.object = object;
         this.workingMemory = workingMemory;
+        this.localVariables = variables;
     }
 
     public KnowledgeHelper getKnowledgeHelper() {
@@ -76,6 +73,16 @@
         return this.workingMemory.getGlobal( identifier );
     }
 
+    public Object getLocalValue(final String identifier) {
+        return this.localVariables.get( identifier );
+    }
+
+    public void setLocalValue(final String identifier,
+                              final Object value) {
+        this.localVariables.put( identifier,
+                                 value );
+    }
+
     public VariableResolver createVariable(String name,
                                            Object value) {
         VariableResolver vr = getVariableResolver( name );
@@ -83,12 +90,12 @@
             vr.setValue( value );
             return vr;
         } else {
-            if ( this.variables == null ) {
-                this.variables = new HashMap();
+            if ( this.localVariables == null ) {
+                this.localVariables = new HashMap();
             }
             addResolver( name,
-                         vr = new MapVariableResolver( this.variables,
-                                                       name ) );
+                         vr = new LocalVariableResolver( this,
+                                                         name ) );
             vr.setValue( value );
             return vr;
         }
@@ -101,20 +108,20 @@
         if ( vr != null && vr.getType() != null ) {
             throw new CompileException( "variable already defined within scope: " + vr.getType() + " " + name );
         } else {
-            if ( this.variables == null ) {
-                this.variables = new HashMap();
+            if ( this.localVariables == null ) {
+                this.localVariables = new HashMap();
             }
             addResolver( name,
-                         vr = new MapVariableResolver( this.variables,
-                                                       name,
-                                                       type ) );
+                         vr = new LocalVariableResolver( this,
+                                                         name,
+                                                         type ) );
             vr.setValue( value );
             return vr;
         }
     }
 
     public boolean isResolveable(String name) {
-        if ( DroolsMVELKnowledgeHelper.DROOLS.equals( name  ) ) {
+        if ( DroolsMVELKnowledgeHelper.DROOLS.equals( name ) ) {
             addResolver( DroolsMVELKnowledgeHelper.DROOLS,
                          new DroolsMVELKnowledgeHelper( this ) );
             return true;
@@ -139,8 +146,8 @@
             return true;
         } else if ( this.variableResolvers != null && this.variableResolvers.containsKey( name ) ) {
             addResolver( name,
-                         new MapVariableResolver( this.variableResolvers,
-                                                  name ) );
+                         new LocalVariableResolver( this,
+                                                    name ) );
             return true;
         } else if ( nextFactory != null ) {
             return nextFactory.isResolveable( name );
@@ -165,4 +172,10 @@
             return false;
         }
     }
+
+    public Object clone() {
+        return new DroolsMVELFactory( this.previousDeclarations,
+                                      this.localDeclarations,
+                                      this.globals );
+    }
 }

Copied: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/LocalVariableResolver.java (from rev 13501, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/LocalVariableResolver.java)
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/LocalVariableResolver.java	                        (rev 0)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/LocalVariableResolver.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -0,0 +1,109 @@
+/**
+ * MVEL (The MVFLEX Expression Language)
+ *
+ * Copyright (C) 2007 Christopher Brock, MVFLEX/Valhalla Project and the Codehaus
+ *
+ * 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.base.mvel;
+
+import org.mvel.CompileException;
+import org.mvel.DataConversion;
+import org.mvel.integration.VariableResolver;
+
+import java.util.Map;
+
+public class LocalVariableResolver implements VariableResolver {
+    private String name;
+    private Class knownType;
+    private DroolsMVELFactory factory;
+
+    private boolean cache = false;
+
+    public LocalVariableResolver(DroolsMVELFactory factory, String name) {
+        this.factory = factory;
+        this.name = name;
+    }
+
+    public LocalVariableResolver(DroolsMVELFactory factory, String name, Class knownType) {
+        this.name = name;
+        this.knownType = knownType;
+        this.factory = factory;
+    }
+
+    public LocalVariableResolver(DroolsMVELFactory factory, String name, boolean cache) {
+        this.factory = factory;
+        this.name = name;
+        this.cache = cache;
+    }
+
+    public LocalVariableResolver(DroolsMVELFactory factory, String name, Class knownType, boolean cache) {
+        this.name = name;
+        this.knownType = knownType;
+        this.factory = factory;
+        this.cache = cache;
+    }
+
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public void setStaticType(Class knownType) {
+        this.knownType = knownType;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public Class getType() {
+        return knownType;
+    }
+
+    public void setValue(Object value) {
+        if (knownType != null && value != null && value.getClass() != knownType) {
+            if (!DataConversion.canConvert(knownType, value.getClass())) {
+                throw new CompileException("cannot assign " + value.getClass().getName() + " to type: "
+                        + knownType.getName());
+            }
+            try {
+                value = DataConversion.convert(value, knownType);
+            }
+            catch (Exception e) {
+                throw new CompileException("cannot convert value of " + value.getClass().getName()
+                        + " to: " + knownType.getName());
+            }
+        }
+        
+        this.factory.setLocalValue( this.name, value );
+    }
+
+    public Object getValue() {
+        return this.factory.getLocalValue( this.name );
+    }
+
+    public int getFlags() {
+        return 0;
+    }
+
+
+    public boolean isCache() {
+        return cache;
+    }
+
+    public void setCache(boolean cache) {
+        this.cache = cache;
+    }
+}

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELAccumulator.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELAccumulator.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELAccumulator.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -19,6 +19,7 @@
 
 import java.io.Serializable;
 import java.util.HashMap;
+import java.util.Map;
 
 import org.drools.WorkingMemory;
 import org.drools.common.InternalFactHandle;
@@ -38,7 +39,7 @@
 
     private static final long       serialVersionUID = 400L;
 
-    private final DroolsMVELFactory factory;
+    private final DroolsMVELFactory model;
     private final Serializable      init;
     private final Serializable      action;
     private final Serializable      reverse;
@@ -50,7 +51,7 @@
                            final Serializable reverse,
                            final Serializable result) {
         super();
-        this.factory = factory;
+        this.model = factory;
         this.init = init;
         this.action = action;
         this.reverse = reverse;
@@ -67,71 +68,87 @@
     /* (non-Javadoc)
      * @see org.drools.spi.Accumulator#init(java.lang.Object, org.drools.spi.Tuple, org.drools.rule.Declaration[], org.drools.WorkingMemory)
      */
-    public void init(Object context,
+    public void init(Object workingMemoryContext,
+                     Object context,
                      Tuple leftTuple,
                      Declaration[] declarations,
                      WorkingMemory workingMemory) throws Exception {
-        this.factory.setContext( leftTuple,
-                                 null,
-                                 null,
-                                 workingMemory );
+        DroolsMVELFactory factory = (DroolsMVELFactory) workingMemoryContext;
+        factory.setContext( leftTuple,
+                            null,
+                            null,
+                            workingMemory,
+                            (Map) context );
         MVEL.executeExpression( this.init,
-                                context,
-                                this.factory );
+                                null,
+                                factory );
     }
 
     /* (non-Javadoc)
      * @see org.drools.spi.Accumulator#accumulate(java.lang.Object, org.drools.spi.Tuple, org.drools.common.InternalFactHandle, org.drools.rule.Declaration[], org.drools.rule.Declaration[], org.drools.WorkingMemory)
      */
-    public void accumulate(Object context,
+    public void accumulate(Object workingMemoryContext,
+                           Object context,
                            Tuple leftTuple,
                            InternalFactHandle handle,
                            Declaration[] declarations,
                            Declaration[] innerDeclarations,
                            WorkingMemory workingMemory) throws Exception {
-        this.factory.setContext( leftTuple,
-                                 null,
-                                 handle.getObject(),
-                                 workingMemory );
+        DroolsMVELFactory factory = (DroolsMVELFactory) workingMemoryContext;
+        factory.setContext( leftTuple,
+                            null,
+                            handle.getObject(),
+                            workingMemory,
+                            (Map) context );
         MVEL.executeExpression( this.action,
-                                context,
-                                this.factory );
+                                null,
+                                factory );
     }
 
-    public void reverse(Object context,
+    public void reverse(Object workingMemoryContext,
+                        Object context,
                         Tuple leftTuple,
                         InternalFactHandle handle,
                         Declaration[] declarations,
                         Declaration[] innerDeclarations,
                         WorkingMemory workingMemory) throws Exception {
-        this.factory.setContext( leftTuple,
-                                 null,
-                                 handle.getObject(),
-                                 workingMemory );
+        DroolsMVELFactory factory = (DroolsMVELFactory) workingMemoryContext;
+        factory.setContext( leftTuple,
+                            null,
+                            handle.getObject(),
+                            workingMemory,
+                            (Map) context );
         MVEL.executeExpression( this.reverse,
-                                context,
-                                this.factory );
+                                null,
+                                factory );
     }
 
     /* (non-Javadoc)
      * @see org.drools.spi.Accumulator#getResult(java.lang.Object, org.drools.spi.Tuple, org.drools.rule.Declaration[], org.drools.WorkingMemory)
      */
-    public Object getResult(Object context,
+    public Object getResult(Object workingMemoryContext,
+                            Object context,
                             Tuple leftTuple,
                             Declaration[] declarations,
                             WorkingMemory workingMemory) throws Exception {
-        this.factory.setContext( leftTuple,
-                                 null,
-                                 null,
-                                 workingMemory );
+        DroolsMVELFactory factory = (DroolsMVELFactory) workingMemoryContext;
+        factory.setContext( leftTuple,
+                            null,
+                            null,
+                            workingMemory,
+                            (Map) context );
         final Object result = MVEL.executeExpression( this.result,
-                                                      context,
-                                                      this.factory );
+                                                      null,
+                                                      factory );
         return result;
     }
 
     public boolean supportsReverse() {
-        return this.reverse != null ;
+        return this.reverse != null;
     }
 
+    public Object createWorkingMemoryContext() {
+        return this.model.clone();
+    }
+
 }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELConsequence.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELConsequence.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELConsequence.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -29,7 +29,8 @@
         this.factory.setContext( knowledgeHelper.getTuple(),
                                  knowledgeHelper,
                                  null,
-                                 workingMemory );
+                                 workingMemory,
+                                 null );
 		//MVEL: Core change
         System.out.println("MVEL:Executing expression " + ((CompiledExpression)expr).getSourceName());
 

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELEvalExpression.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELEvalExpression.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELEvalExpression.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -31,7 +31,8 @@
         this.factory.setContext( tuple,
                                  null,
                                  null,
-                                 workingMemory );
+                                 workingMemory,
+                                 null );
         final Boolean result = (Boolean) MVEL.executeExpression( this.expr,
                                                                  new Object(),
                                                                  this.factory );

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELPredicateExpression.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELPredicateExpression.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELPredicateExpression.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -31,9 +31,10 @@
         this.factory.setContext( tuple,
                                  null,
                                  object,
-                                 workingMemory );
+                                 workingMemory,
+                                 null );
         final Boolean result = (Boolean) MVEL.executeExpression( this.expr,
-                                                                 null,
+                                                                 object,
                                                                  this.factory );
         return result.booleanValue();
     }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELReturnValueExpression.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELReturnValueExpression.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELReturnValueExpression.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -32,7 +32,8 @@
         this.factory.setContext( tuple,
                                  null,
                                  object,
-                                 workingMemory );
+                                 workingMemory,
+                                 null );
 
         return org.drools.base.FieldFactory.getFieldValue( MVEL.executeExpression( this.expr,
                                                                                    null,

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELSalienceExpression.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELSalienceExpression.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELSalienceExpression.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -28,7 +28,8 @@
         this.factory.setContext( tuple,
                                  null,
                                  null,
-                                 workingMemory );
+                                 workingMemory,
+                                 null );
         return ((Integer) MVEL.executeExpression( this.expr,
                                                   this.factory )).intValue();
     }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -30,13 +30,12 @@
 import org.drools.Agenda;
 import org.drools.FactException;
 import org.drools.FactHandle;
-import org.drools.NoSuchFactHandleException;
-import org.drools.NoSuchFactObjectException;
 import org.drools.ObjectFilter;
 import org.drools.Otherwise;
 import org.drools.QueryResults;
 import org.drools.RuleBase;
 import org.drools.RuleBaseConfiguration;
+import org.drools.RuntimeDroolsException;
 import org.drools.WorkingMemory;
 import org.drools.RuleBaseConfiguration.AssertBehaviour;
 import org.drools.RuleBaseConfiguration.LogicalOverride;
@@ -309,25 +308,6 @@
         return this.handleFactory;
     }
 
-//    public void setGlobals(Map globals) {
-//        //this.globals = globals;
-//    }
-
-//    /**
-//     * @see WorkingMemory
-//     */
-//    public Map getGlobals() {
-//        try {
-//            this.lock.lock();
-//            return this.globals;
-//        } finally {
-//            this.lock.unlock();
-//        }
-//    }
-
-    /**
-     * @see WorkingMemory
-     */
     public void setGlobal(final String identifier,
                           final Object value) {
         // Cannot set null values
@@ -346,7 +326,7 @@
                 throw new RuntimeException( "Illegal class for global. " + "Expected [" + type.getName() + "], " + "found [" + value.getClass().getName() + "]." );
 
             } else {
-                this.globalResolver.setGlobal( identifier, 
+                this.globalResolver.setGlobal( identifier,
                                                value );
             }
         } finally {
@@ -362,7 +342,7 @@
             this.lock.unlock();
         }
     }
-    
+
     public GlobalResolver getGlobalResolver() {
         return this.globalResolver;
     }
@@ -371,9 +351,6 @@
         return this.id;
     }
 
-    /**
-     * @see WorkingMemory
-     */
     public Object getGlobal(final String identifier) {
         try {
             this.lock.lock();
@@ -383,33 +360,18 @@
         }
     }
 
-    /**
-     * Retrieve the rule-firing <code>Agenda</code> for this
-     * <code>WorkingMemory</code>.
-     * 
-     * @return The <code>Agenda</code>.
-     */
     public Agenda getAgenda() {
         return this.agenda;
     }
 
-    /**
-     * Clear the Agenda
-     */
     public void clearAgenda() {
         this.agenda.clearAgenda();
     }
 
-    /**
-     * Clear the Agenda Group
-     */
     public void clearAgendaGroup(final String group) {
         this.agenda.clearAgendaGroup( group );
     }
 
-    /**
-     * @see WorkingMemory
-     */
     public RuleBase getRuleBase() {
         return this.ruleBase;
     }
@@ -418,9 +380,6 @@
         this.halt = true;
     }
 
-    /**
-     * @see WorkingMemory
-     */
     public synchronized void fireAllRules() throws FactException {
         fireAllRules( null,
                       -1 );
@@ -469,10 +428,11 @@
                 }
             } finally {
                 this.firing = false;
-                if ( noneFired ) {
-                    doOtherwise( agendaFilter,
-                                 fireLimit );
-                }
+                // @todo (mproctor) disabling Otherwise management for now, not happy with the current implementation
+//                if ( noneFired ) {
+//                    doOtherwise( agendaFilter,
+//                                 fireLimit );
+//                }
 
             }
         }
@@ -755,7 +715,7 @@
                     // assert
                     handle = this.handleFactory.newFactHandle( object );
                     addHandleToMaps( handle );
-                    
+
                     key = new EqualityKey( handle );
                     handle.setEqualityKey( key );
                     this.tms.put( key );
@@ -801,7 +761,7 @@
                             handle.setEqualityKey( key );
                             key.addFactHandle( handle );
                             addHandleToMaps( handle );
-                            
+
                         }
 
                     } else {
@@ -809,7 +769,7 @@
                         addHandleToMaps( handle );
                         key.addFactHandle( handle );
                         handle.setEqualityKey( key );
-                        
+
                     }
 
                 } else {
@@ -834,7 +794,7 @@
                 }
                 handle = this.handleFactory.newFactHandle( object );
                 addHandleToMaps( handle );
-                
+
             }
 
             if ( dynamic ) {
@@ -856,7 +816,7 @@
                         Object object,
                         Rule rule,
                         Activation activation) {
-        if( activation != null ) {
+        if ( activation != null ) {
             // release resources so that they can be GC'ed
             activation.getPropagationContext().releaseResources();
         }
@@ -908,7 +868,7 @@
                                   Object object,
                                   PropagationContext propagationContext) throws FactException;
 
-    protected void removePropertyChangeListener(final FactHandle handle) throws NoSuchFactObjectException {
+    protected void removePropertyChangeListener(final FactHandle handle) {
         Object object = null;
         try {
             object = getObject( handle );
@@ -926,15 +886,15 @@
             // stop processing JavaBean PropertyChangeEvents
             // on the retracted Object
         } catch ( final IllegalArgumentException e ) {
-            System.err.println( "Warning: The removePropertyChangeListener method" + " on the class " + object.getClass() + " does not take" + " a simple PropertyChangeListener argument" + " so Drools will be unable to stop processing JavaBean"
+            throw new RuntimeDroolsException(  "Warning: The removePropertyChangeListener method on the class " + object.getClass() + " does not take a simple PropertyChangeListener argument so Drools will be unable to stop processing JavaBean"
                                 + " PropertyChangeEvents on the retracted Object" );
         } catch ( final IllegalAccessException e ) {
-            System.err.println( "Warning: The removePropertyChangeListener method" + " on the class " + object.getClass() + " is not public" + " so Drools will be unable to stop processing JavaBean" + " PropertyChangeEvents on the retracted Object" );
+            throw new RuntimeDroolsException(  "Warning: The removePropertyChangeListener method on the class " + object.getClass() + " is not public so Drools will be unable to stop processing JavaBean PropertyChangeEvents on the retracted Object" );
         } catch ( final InvocationTargetException e ) {
-            System.err.println( "Warning: The removePropertyChangeL istener method" + " on the class " + object.getClass() + " threw an InvocationTargetException" + " so Drools will be unable to stop processing JavaBean"
+            throw new RuntimeDroolsException(  "Warning: The removePropertyChangeL istener method on the class " + object.getClass() + " threw an InvocationTargetException so Drools will be unable to stop processing JavaBean"
                                 + " PropertyChangeEvents on the retracted Object: " + e.getMessage() );
         } catch ( final SecurityException e ) {
-            System.err.println( "Warning: The SecurityManager controlling the class " + object.getClass() + " did not allow the lookup of a" + " removePropertyChangeListener method" + " so Drools will be unable to stop processing JavaBean"
+            throw new RuntimeDroolsException(  "Warning: The SecurityManager controlling the class " + object.getClass() + " did not allow the lookup of a removePropertyChangeListener method so Drools will be unable to stop processing JavaBean"
                                 + " PropertyChangeEvents on the retracted Object: " + e.getMessage() );
         }
     }
@@ -967,7 +927,7 @@
             }
             removePropertyChangeListener( handle );
 
-            if( activation != null ) {
+            if ( activation != null ) {
                 // release resources so that they can be GC'ed
                 activation.getPropagationContext().releaseResources();
             }
@@ -1010,7 +970,6 @@
 
             removeHandleFromMaps( handle );
 
-
             this.handleFactory.destroyFactHandle( handle );
 
             if ( !this.actionQueue.isEmpty() ) {
@@ -1062,7 +1021,7 @@
             return;
         }
 
-        if( activation != null ) {
+        if ( activation != null ) {
             // release resources so that they can be GC'ed
             activation.getPropagationContext().releaseResources();
         }
@@ -1123,7 +1082,7 @@
 
             this.handleFactory.increaseFactHandleRecency( handle );
 
-            if( activation != null ) {
+            if ( activation != null ) {
                 // release resources so that they can be GC'ed
                 activation.getPropagationContext().releaseResources();
             }
@@ -1189,7 +1148,7 @@
                 return;
             }
 
-            if( activation != null ) {
+            if ( activation != null ) {
                 // release resources so that they can be GC'ed
                 activation.getPropagationContext().releaseResources();
             }
@@ -1344,8 +1303,6 @@
         try {
             update( getFactHandle( object ),
                     object );
-        } catch ( final NoSuchFactHandleException e ) {
-            // Not a fact so unable to process the chnage event
         } catch ( final FactException e ) {
             throw new RuntimeException( e.getMessage() );
         }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/common/DefaultAgenda.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/common/DefaultAgenda.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -161,13 +161,6 @@
         item.cancel();
     }
 
-    /* (non-Javadoc)
-     * @see org.drools.common.AgendaI#getScheduledItems()
-     */
-    public org.drools.util.LinkedList getScheduledItems() {
-        return this.scheduledActivations;
-    }
-
     public void addAgendaGroup(final AgendaGroup agendaGroup) {
         this.agendaGroups.put( agendaGroup.getName(),
                                agendaGroup );

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/concurrent/CommandExecutor.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/concurrent/CommandExecutor.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/concurrent/CommandExecutor.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -9,6 +9,12 @@
 import org.drools.util.concurrent.locks.BlockingQueue;
 import org.drools.util.concurrent.locks.LinkedBlockingQueue;
 
+/**
+ * The CommandExecutor is a Producer/Consumer style classes that provides a queue of Commands
+ * in a LinkedBlockingQueue. This the run() method loops for continously until shutdown() is 
+ * called.
+ *
+ */
 public class CommandExecutor implements Runnable, Serializable {
     private WorkingMemory workingMemory;
     private BlockingQueue queue;
@@ -21,10 +27,22 @@
         this.queue = new LinkedBlockingQueue();
     }        
     
+    /**
+     * Allows the looping run() method to execute. 
+     *
+     */
     public void shutdown() {
         this.run = false;
     }        
     
+    /**
+     * Submit a Command for execution
+     * 
+     * @param command
+     * 
+     * @return
+     *     return the Future
+     */
     public Future submit(Command command) {
         this.queue.offer( command );
         // we know our commands also implement Future

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/concurrent/ExecutorService.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/concurrent/ExecutorService.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/concurrent/ExecutorService.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -6,10 +6,36 @@
 import java.io.Serializable;
 
 
-
+/**
+ * This class instance is configed by the RuleBaseConfiguration and is responsible for thread management
+ * of the async services.
+ *
+ */
 public interface ExecutorService extends Serializable {
+    
+    /**
+     * The CommandExecutor is a producer/consumer style class that handles the queue and execution
+     * of the async actions
+     * @param executor
+     */
     public void setCommandExecutor(CommandExecutor executor);
+    
+    /**
+     * Submit a command for execution, adds it ot the commandExecutor's queue
+     * @param command
+     * @return
+     */
     Future submit(Command command);
+    
+    /**
+     * Shutdown this ExecutorService
+     *
+     */
     void shutDown();
+    
+    /**
+     * Startup this ExecutorService, typically called on first submit for lazy startup.
+     *
+     */
     void startUp();
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -18,6 +18,7 @@
 
 import java.util.Arrays;
 
+import org.drools.RuleBaseConfiguration;
 import org.drools.common.BetaConstraints;
 import org.drools.common.EmptyBetaConstraints;
 import org.drools.common.InternalFactHandle;
@@ -82,7 +83,7 @@
                           final BetaConstraints sourceBinder,
                           final BetaConstraints resultBinder,
                           final Accumulate accumulate,
-                          final boolean unwrapRightObject ) {
+                          final boolean unwrapRightObject) {
         super( id,
                leftInput,
                rightInput,
@@ -116,13 +117,13 @@
                             final PropagationContext context,
                             final InternalWorkingMemory workingMemory) {
 
-        final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
+        final AccumulateMemory memory = (AccumulateMemory) workingMemory.getNodeMemory( this );
 
         AccumulateResult accresult = new AccumulateResult();
 
         if ( !workingMemory.isSequential() ) {
-            memory.getTupleMemory().add( leftTuple );
-            memory.getCreatedHandles().put( leftTuple,
+            memory.betaMemory.getTupleMemory().add( leftTuple );
+            memory.betaMemory.getCreatedHandles().put( leftTuple,
                                             accresult,
                                             false );
         }
@@ -130,29 +131,32 @@
         final Object accContext = this.accumulate.createContext();
 
         accresult.context = accContext;
-        this.accumulate.init( accContext,
+        this.accumulate.init( memory.workingMemoryContext,
+                              accContext,
                               leftTuple,
                               workingMemory );
 
-        final Iterator it = memory.getFactHandleMemory().iterator( leftTuple );
+        final Iterator it = memory.betaMemory.getFactHandleMemory().iterator( leftTuple );
         this.constraints.updateFromTuple( workingMemory,
                                           leftTuple );
 
         for ( FactEntry entry = (FactEntry) it.next(); entry != null; entry = (FactEntry) it.next() ) {
             InternalFactHandle handle = entry.getFactHandle();
             if ( this.constraints.isAllowedCachedLeft( handle.getObject() ) ) {
-                if( this.unwrapRightObject ) {
+                if ( this.unwrapRightObject ) {
                     // if there is a subnetwork, handle must be unwrapped
-                    handle = ((ReteTuple) handle.getObject()).getLastHandle(); 
+                    handle = ((ReteTuple) handle.getObject()).getLastHandle();
                 }
-                this.accumulate.accumulate( accContext,
+                this.accumulate.accumulate( memory.workingMemoryContext,
+                                            accContext,
                                             leftTuple,
                                             handle,
                                             workingMemory );
             }
         }
 
-        final Object result = this.accumulate.getResult( accContext,
+        final Object result = this.accumulate.getResult( memory.workingMemoryContext,
+                                                         accContext,
                                                          leftTuple,
                                                          workingMemory );
 
@@ -191,9 +195,9 @@
     public void retractTuple(final ReteTuple leftTuple,
                              final PropagationContext context,
                              final InternalWorkingMemory workingMemory) {
-        final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
-        memory.getTupleMemory().remove( leftTuple );
-        final AccumulateResult accresult = (AccumulateResult) memory.getCreatedHandles().remove( leftTuple );
+        final AccumulateMemory memory = (AccumulateMemory) workingMemory.getNodeMemory( this );
+        memory.betaMemory.getTupleMemory().remove( leftTuple );
+        final AccumulateResult accresult = (AccumulateResult) memory.betaMemory.getCreatedHandles().remove( leftTuple );
 
         // if tuple was propagated
         if ( accresult.handle != null ) {
@@ -221,23 +225,23 @@
                              final PropagationContext context,
                              final InternalWorkingMemory workingMemory) {
 
-        final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
-        memory.getFactHandleMemory().add( handle );
+        final AccumulateMemory memory = (AccumulateMemory) workingMemory.getNodeMemory( this );
+        memory.betaMemory.getFactHandleMemory().add( handle );
 
         if ( workingMemory.isSequential() ) {
             // do nothing here, as we know there are no left tuples at this stage in sequential mode.
             return;
-        }        
+        }
 
         this.constraints.updateFromFactHandle( workingMemory,
                                                handle );
 
         // need to clone the tuples to avoid concurrent modification exceptions
-        Entry[] tuples = memory.getTupleMemory().toArray();
+        Entry[] tuples = memory.betaMemory.getTupleMemory().toArray();
         for ( int i = 0; i < tuples.length; i++ ) {
             ReteTuple tuple = (ReteTuple) tuples[i];
             if ( this.constraints.isAllowedCachedRight( tuple ) ) {
-                if( this.accumulate.supportsReverse() || context.getType() == PropagationContext.ASSERTION ) {
+                if ( this.accumulate.supportsReverse() || context.getType() == PropagationContext.ASSERTION ) {
                     modifyTuple( true,
                                  tuple,
                                  handle,
@@ -265,15 +269,15 @@
     public void retractObject(final InternalFactHandle handle,
                               final PropagationContext context,
                               final InternalWorkingMemory workingMemory) {
-        final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
-        if ( !memory.getFactHandleMemory().remove( handle ) ) {
+        final AccumulateMemory memory = (AccumulateMemory) workingMemory.getNodeMemory( this );
+        if ( !memory.betaMemory.getFactHandleMemory().remove( handle ) ) {
             return;
         }
 
         this.constraints.updateFromFactHandle( workingMemory,
                                                handle );
         // need to clone the tuples to avoid concurrent modification exceptions
-        Entry[] tuples = memory.getTupleMemory().toArray();
+        Entry[] tuples = memory.betaMemory.getTupleMemory().toArray();
         for ( int i = 0; i < tuples.length; i++ ) {
             ReteTuple tuple = (ReteTuple) tuples[i];
             if ( this.constraints.isAllowedCachedRight( tuple ) ) {
@@ -301,8 +305,8 @@
                             final PropagationContext context,
                             final InternalWorkingMemory workingMemory) {
 
-        final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
-        AccumulateResult accresult = (AccumulateResult) memory.getCreatedHandles().get( leftTuple );
+        final AccumulateMemory memory = (AccumulateMemory) workingMemory.getNodeMemory( this );
+        AccumulateResult accresult = (AccumulateResult) memory.betaMemory.getCreatedHandles().get( leftTuple );
 
         // if tuple was propagated
         if ( accresult.handle != null ) {
@@ -316,49 +320,55 @@
             accresult.handle = null;
         }
 
-        if( this.unwrapRightObject ) {
+        if ( this.unwrapRightObject ) {
             // if there is a subnetwork, handle must be unwrapped
-            handle = ((ReteTuple) handle.getObject()).getLastHandle(); 
+            handle = ((ReteTuple) handle.getObject()).getLastHandle();
         }
-        
+
         if ( context.getType() == PropagationContext.ASSERTION ) {
             // assertion
             if ( accresult.context == null ) {
                 final Object accContext = this.accumulate.createContext();
 
-                this.accumulate.init( accContext,
+                this.accumulate.init( memory.workingMemoryContext,
+                                      accContext,
                                       leftTuple,
                                       workingMemory );
 
                 accresult.context = accContext;
             }
 
-            this.accumulate.accumulate( accresult.context,
+            this.accumulate.accumulate( memory.workingMemoryContext,
+                                        accresult.context,
                                         leftTuple,
                                         handle,
                                         workingMemory );
-        } else if( context.getType() == PropagationContext.MODIFICATION ) {
+        } else if ( context.getType() == PropagationContext.MODIFICATION ) {
             // modification
-            if( isAssert ) {
-                this.accumulate.accumulate( accresult.context,
+            if ( isAssert ) {
+                this.accumulate.accumulate( memory.workingMemoryContext,
+                                            accresult.context,
                                             leftTuple,
                                             handle,
                                             workingMemory );
             } else {
-                this.accumulate.reverse( accresult.context,
+                this.accumulate.reverse( memory.workingMemoryContext,
+                                         accresult.context,
                                          leftTuple,
                                          handle,
                                          workingMemory );
             }
         } else {
             // retraction
-            this.accumulate.reverse( accresult.context,
+            this.accumulate.reverse( memory.workingMemoryContext,
+                                     accresult.context,
                                      leftTuple,
                                      handle,
                                      workingMemory );
         }
 
-        final Object result = this.accumulate.getResult( accresult.context,
+        final Object result = this.accumulate.getResult( memory.workingMemoryContext,
+                                                         accresult.context,
                                                          leftTuple,
                                                          workingMemory );
 
@@ -389,9 +399,9 @@
     public void updateSink(final TupleSink sink,
                            final PropagationContext context,
                            final InternalWorkingMemory workingMemory) {
-        final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
+        final AccumulateMemory memory = (AccumulateMemory) workingMemory.getNodeMemory( this );
 
-        final Iterator it = memory.getCreatedHandles().iterator();
+        final Iterator it = memory.betaMemory.getCreatedHandles().iterator();
 
         for ( ObjectEntry entry = (ObjectEntry) it.next(); entry != null; entry = (ObjectEntry) it.next() ) {
             AccumulateResult accresult = (AccumulateResult) entry.getValue();
@@ -435,9 +445,27 @@
         return "[ " + this.getClass().getName() + "(" + this.id + ") ]";
     }
 
+    /**
+     * Creates a BetaMemory for the BetaNode's memory.
+     */
+    public Object createMemory(final RuleBaseConfiguration config) {
+        AccumulateMemory memory = new AccumulateMemory();
+        memory.betaMemory = this.constraints.createBetaMemory( config );
+        memory.workingMemoryContext = this.accumulate.createWorkingMemoryContext();
+        return memory;
+    }
+
+    public static class AccumulateMemory {
+        private static final long serialVersionUID = -5487673715134696118L;
+        
+        public Object workingMemoryContext;
+        public BetaMemory betaMemory;
+    }
+
     private static class AccumulateResult {
         // keeping attributes public just for performance
         public InternalFactHandle handle;
         public Object             context;
     }
+
 }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/CollectNode.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/CollectNode.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -234,7 +234,8 @@
         for ( int i = 0; i < tuples.length; i++ ) {
             ReteTuple tuple = (ReteTuple) tuples[i];
             if ( this.constraints.isAllowedCachedRight( tuple ) ) {
-                this.modifyTuple( tuple,
+                this.modifyTuple( true,
+                                  tuple,
                                   handle,
                                   context,
                                   workingMemory );
@@ -266,7 +267,8 @@
             ReteTuple tuple = (ReteTuple) tuples[i];
             if ( this.constraints.isAllowedCachedRight( tuple ) ) {
                 
-                this.modifyTuple( tuple,
+                this.modifyTuple( false,
+                                  tuple,
                                   handle,
                                   context,
                                   workingMemory );
@@ -283,7 +285,8 @@
      * @param context
      * @param workingMemory
      */
-    public void modifyTuple(final ReteTuple leftTuple,
+    public void modifyTuple(final boolean isAssert,
+                            final ReteTuple leftTuple,
                             InternalFactHandle handle,
                             final PropagationContext context,
                             final InternalWorkingMemory workingMemory) {
@@ -311,7 +314,11 @@
         } else if ( context.getType() == PropagationContext.RETRACTION ) {
             ((Collection) result.handle.getObject()).remove( handle.getObject() );
         } else if ( context.getType() == PropagationContext.MODIFICATION ) {
-            // nothing to do
+            if( isAssert ) {
+                ((Collection) result.handle.getObject()).add( handle.getObject() );
+            } else {
+                ((Collection) result.handle.getObject()).remove( handle.getObject() );
+            }
         }
 
         // First alpha node filters

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -122,7 +122,7 @@
                         this.hashableSinks.remove( (ObjectSinkNode) sink );
                     }
 
-                    if ( this.hashableSinks.isEmpty() ) {
+                    if ( this.hashableSinks != null && this.hashableSinks.isEmpty() ) {
                         this.hashableSinks = null;
                     }
 

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/Rete.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/Rete.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/Rete.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -320,7 +320,8 @@
                 return;
             }
             
-            String pkgName = cls.getPackage().getName();
+            Package pkg = cls.getPackage();
+            String pkgName = (pkg != null) ? pkg.getName() : "";
             if ( "org.drools.reteoo".equals( pkgName ) || "org.drools.base".equals( pkgName ) ) {
                 // We don't shadow internal classes
                 this.shadowEnabled = false;

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -18,11 +18,11 @@
 
 import java.io.Serializable;
 
+import org.drools.common.EventSupport;
 import org.drools.RuleBaseConfiguration;
 import org.drools.common.BinaryHeapQueueAgendaGroup;
 import org.drools.common.AgendaItem;
 import org.drools.common.BaseNode;
-import org.drools.common.EventSupport;
 import org.drools.common.InternalAgenda;
 import org.drools.common.InternalAgendaGroup;
 import org.drools.common.InternalFactHandle;

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/builder/AccumulateBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/builder/AccumulateBuilder.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/builder/AccumulateBuilder.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -58,8 +58,9 @@
         // get builder for the pattern
         final ReteooComponentBuilder builder = utils.getBuilderFor( sourcePattern );
 
-        // save tuple source for later if needed
+        // save tuple source and current pattern offset for later if needed
         final TupleSource tupleSource = context.getTupleSource();
+        final int currentPatternIndex = context.getCurrentPatternOffset();
         
         // builds the source pattern
         builder.build( context,
@@ -103,6 +104,7 @@
                                                                                     existSubNetwort ) ) );
         // source pattern was bound, so nulling context
         context.setObjectSource( null );
+        context.setCurrentPatternOffset( currentPatternIndex );
     }
 
     /**

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/builder/CollectBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/builder/CollectBuilder.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/reteoo/builder/CollectBuilder.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -56,8 +56,9 @@
         // get builder for the pattern
         final ReteooComponentBuilder builder = utils.getBuilderFor( sourcePattern );
 
-        // save tuple source for later if needed
+        // save tuple source and pattern offset for later if needed
         final TupleSource tupleSource = context.getTupleSource();
+        final int currentPatternIndex = context.getCurrentPatternOffset();
         
         // builds the source pattern
         builder.build( context,
@@ -97,6 +98,7 @@
                                                                                  existSubNetwort ) ) );
         // source pattern was bound, so nulling context
         context.setObjectSource( null );
+        context.setCurrentPatternOffset( currentPatternIndex );
     }
 
     /**

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/rule/Accumulate.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/rule/Accumulate.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/rule/Accumulate.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -88,11 +88,13 @@
      * @param workingMemory
      * @throws Exception
      */
-    public void init(final Object context,
+    public void init(final Object workingMemoryContext,
+                     final Object context,
                      final Tuple leftTuple,
                      final WorkingMemory workingMemory) {
         try {
-            this.accumulator.init( context,
+            this.accumulator.init( workingMemoryContext,
+                                   context,
                                    leftTuple,
                                    this.requiredDeclarations,
                                    workingMemory );
@@ -111,12 +113,14 @@
      * @param workingMemory
      * @throws Exception
      */
-    public void accumulate(final Object context,
+    public void accumulate(final Object workingMemoryContext,
+                           final Object context,
                            final Tuple leftTuple,
                            final InternalFactHandle handle,
                            final WorkingMemory workingMemory) {
         try {
-            this.accumulator.accumulate( context,
+            this.accumulator.accumulate( workingMemoryContext,
+                                         context,
                                          leftTuple,
                                          handle,
                                          this.requiredDeclarations,
@@ -137,12 +141,14 @@
      * @param workingMemory
      * @throws Exception
      */
-    public void reverse(final Object context,
+    public void reverse(final Object workingMemoryContext,
+                        final Object context,
                         final Tuple leftTuple,
                         final InternalFactHandle handle,
                         final WorkingMemory workingMemory) {
         try {
-            this.accumulator.reverse( context,
+            this.accumulator.reverse( workingMemoryContext,
+                                      context,
                                       leftTuple,
                                       handle,
                                       this.requiredDeclarations,
@@ -162,11 +168,13 @@
      * @return
      * @throws Exception
      */
-    public Object getResult(final Object context,
+    public Object getResult(final Object workingMemoryContext,
+                            final Object context,
                             final Tuple leftTuple,
                             final WorkingMemory workingMemory) {
         try {
-            return this.accumulator.getResult( context,
+            return this.accumulator.getResult( workingMemoryContext,
+                                               context,
                                                leftTuple,
                                                this.requiredDeclarations,
                                                workingMemory );
@@ -208,5 +216,9 @@
     public Declaration resolveDeclaration(final String identifier) {
         return (Declaration) this.sourcePattern.getInnerDeclarations().get( identifier );
     }
+    
+    public Object createWorkingMemoryContext() {
+        return this.accumulator.createWorkingMemoryContext();
+    }
 
 }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -209,7 +209,6 @@
                                              this.localDeclarations,
                                              ctx.workingMemory );
         } catch ( final Exception e ) {
-            e.printStackTrace();
             throw new RuntimeDroolsException( "Exception executing predicate " + this.expression,
                                               e );
         }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/ruleflow/instance/impl/RuleFlowProcessInstanceImpl.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/ruleflow/instance/impl/RuleFlowProcessInstanceImpl.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/ruleflow/instance/impl/RuleFlowProcessInstanceImpl.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -23,8 +23,8 @@
 import java.util.List;
 
 import org.drools.Agenda;
+import org.drools.common.EventSupport;
 import org.drools.WorkingMemory;
-import org.drools.common.EventSupport;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.event.ActivationCancelledEvent;
 import org.drools.event.ActivationCreatedEvent;

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/spi/Accumulator.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/spi/Accumulator.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/spi/Accumulator.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -33,6 +33,13 @@
     Invoker {
     
     /**
+     * Creates and return a context object for each working memory instance
+     * 
+     * @return
+     */
+    public Object createWorkingMemoryContext();
+    
+    /**
      * Creates the context object for an accumulator session.
      * The context is passed as a parameter to every subsequent accumulator
      * method call in the same session.
@@ -49,7 +56,8 @@
      * @param workingMemory
      * @throws Exception
      */
-    public void init(Object context,
+    public void init(Object workingMemoryContext,
+                     Object context,
                      Tuple leftTuple,
                      Declaration[] declarations,
                      WorkingMemory workingMemory) throws Exception;
@@ -64,7 +72,8 @@
      * @param workingMemory
      * @throws Exception
      */
-    public void accumulate(Object context,
+    public void accumulate(Object workingMemoryContext,
+                           Object context,
                            Tuple leftTuple,
                            InternalFactHandle handle,
                            Declaration[] declarations,
@@ -89,7 +98,8 @@
      * @param workingMemory
      * @throws Exception
      */
-    public void reverse(Object context,
+    public void reverse(Object workingMemoryContext,
+                        Object context,
                         Tuple leftTuple,
                         InternalFactHandle handle,
                         Declaration[] declarations,
@@ -105,7 +115,8 @@
      * @return
      * @throws Exception
      */
-    public Object getResult(Object context, 
+    public Object getResult(Object workingMemoryContext,
+                            Object context, 
                             Tuple leftTuple,
                             Declaration[] declarations,
                             WorkingMemory workingMemory) throws Exception;

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/util/ChainedProperties.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/util/ChainedProperties.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/util/ChainedProperties.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -23,8 +23,11 @@
         this( null,
               confFileName );
     }
+    public ChainedProperties(ClassLoader classLoader, String confFileName) {
+        this(classLoader, confFileName, true);
+    }
     
-    public ChainedProperties(ClassLoader classLoader, String confFileName) {
+    public ChainedProperties(ClassLoader classLoader, String confFileName, boolean populateDefaults) {
         if ( classLoader == null ) {
             classLoader = Thread.currentThread().getContextClassLoader();
             if ( classLoader == null ) {
@@ -69,6 +72,10 @@
         if ( confClassLoader != null && confClassLoader != classLoader ) {
             loadProperties( confClassLoader.getResource( "META-INF/drools." + confFileName ), this.props );
         }
+        
+        if ( !populateDefaults ) {
+            return;            
+        }
 
         // load default, only use the first one as there should only be one
         confClassLoader = classLoader;
@@ -130,29 +137,38 @@
     }
 
     public void mapStartsWith(Map map,
-                              String startsWith) {
+                              String startsWith,
+                              boolean includeSubProperties) {
         for ( Iterator it = this.props.iterator(); it.hasNext(); ) {
             Properties props = (Properties) it.next();
             mapStartsWith( map,
                            props,
-                           startsWith );
+                           startsWith,
+                           includeSubProperties );
         }
         
         for ( Iterator it = this.defaultProps.iterator(); it.hasNext(); ) {
             Properties props = (Properties) it.next();
             mapStartsWith( map,
                            props,
-                           startsWith );
+                           startsWith,
+                           includeSubProperties );
         }        
     }
 
     private void mapStartsWith(Map map,
                                Properties properties,
-                               String startsWith) {
+                               String startsWith,
+                               boolean includeSubProperties) {
         Enumeration enumeration = properties.propertyNames();
         while ( enumeration.hasMoreElements() ) {
             String key = (String) enumeration.nextElement();
-            if ( key.startsWith( startsWith ) ) {
+            if ( key.startsWith( startsWith ) ) {                
+                if ( !includeSubProperties && key.substring( startsWith.length() + 1 ).indexOf( '.' ) > 0 ) {
+                    // +1 to the length, as we do allow the direct property, just not ones below it
+                    // This key has sub properties beyond the given startsWith, so skip
+                    continue;
+                }
                 if ( !map.containsKey( key ) ) {
                     map.put( key,
                              properties.getProperty( key ) );

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -54,6 +54,7 @@
 
         final List list = new ArrayList();
         list.add( "foo" );
+        list.add( null );
 
         Collection col = Arrays.asList( new String[] { "foo", "bar", null} );
 
@@ -63,6 +64,9 @@
                                  {"foo", "!=", "bar", Boolean.TRUE}, 
                                  {list, "contains", "foo", Boolean.TRUE}, 
                                  {list, "contains", "bar", Boolean.FALSE},
+                                 {list, "contains", null, Boolean.TRUE},
+                                 {null, "contains", "bar", Boolean.FALSE},
+                                 {null, "contains", null, Boolean.FALSE},
                                  {list, "==", null, Boolean.FALSE}, 
                                  {list, "!=", null, Boolean.TRUE}, 
                                  {null, "==", null, Boolean.TRUE}, 

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/test/java/org/drools/reteoo/AccumulateNodeTest.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/test/java/org/drools/reteoo/AccumulateNodeTest.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/test/java/org/drools/reteoo/AccumulateNodeTest.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -25,6 +25,7 @@
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.common.PropagationContextImpl;
+import org.drools.reteoo.AccumulateNode.AccumulateMemory;
 import org.drools.rule.Accumulate;
 import org.drools.rule.Declaration;
 import org.drools.rule.Pattern;
@@ -86,7 +87,7 @@
 
         this.node.addTupleSink( this.sink );
 
-        this.memory = (BetaMemory) this.workingMemory.getNodeMemory( this.node );
+        this.memory = ((AccumulateMemory) this.workingMemory.getNodeMemory( this.node )).betaMemory;
 
         // check memories are empty
         assertEquals( 0,
@@ -372,7 +373,7 @@
                                                                   objectSource,
                                                                   this.accumulate );
 
-        final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( accumulateNode );
+        final BetaMemory memory = ((AccumulateMemory) this.workingMemory.getNodeMemory( this.node )).betaMemory;
 
         assertNotNull( memory );
     }
@@ -389,7 +390,7 @@
         this.workingMemory = new ReteooWorkingMemory( 1,
                                                       (ReteooRuleBase) RuleBaseFactory.newRuleBase( conf ) );
         
-        this.memory = (BetaMemory) this.workingMemory.getNodeMemory( this.node );
+        this.memory = ((AccumulateMemory) this.workingMemory.getNodeMemory( this.node )).betaMemory;
 
         final DefaultFactHandle f0 = (DefaultFactHandle) this.workingMemory.getFactHandleFactory().newFactHandle( "cheese" );
         final DefaultFactHandle f1 = (DefaultFactHandle) this.workingMemory.getFactHandleFactory().newFactHandle( "other cheese" );

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/test/java/org/drools/reteoo/MockAccumulator.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/test/java/org/drools/reteoo/MockAccumulator.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/test/java/org/drools/reteoo/MockAccumulator.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -57,7 +57,8 @@
         return this;
     }
 
-    public void init(Object context,
+    public void init(Object workingMemoryContext,
+                     Object context,
                      Tuple leftTuple,
                      Declaration[] declarations,
                      WorkingMemory workingMemory) throws Exception {
@@ -66,7 +67,8 @@
         this.workingMemory = workingMemory;
     }
 
-    public void accumulate(Object context,
+    public void accumulate(Object workingMemoryContext,
+                           Object context,
                            Tuple leftTuple,
                            InternalFactHandle handle,
                            Declaration[] declarations,
@@ -75,14 +77,16 @@
         this.matchingObjects.add( handle.getObject() );
     }
 
-    public Object getResult(Object context,
+    public Object getResult(Object workingMemoryContext,
+                            Object context,
                             Tuple leftTuple,
                             Declaration[] declarations,
                             WorkingMemory workingMemory) throws Exception {
         return this.matchingObjects;
     }
 
-    public void reverse(Object context,
+    public void reverse(Object workingMemoryContext,
+                        Object context,
                         Tuple leftTuple,
                         InternalFactHandle handle,
                         Declaration[] declarations,
@@ -95,4 +99,8 @@
         return false;
     }
 
+    public Object createWorkingMemoryContext() {
+        return null;
+    }
+
 }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/test/java/org/drools/reteoo/OtherwiseTest.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/test/java/org/drools/reteoo/OtherwiseTest.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/test/java/org/drools/reteoo/OtherwiseTest.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -66,7 +66,11 @@
 
     }
 
-    public void testOtherwiseFiringWithOneRule() throws Exception {
+    /**
+     * @TODO: this is a future to be implemented in the future 
+     * @throws Exception
+     */
+    public void FIXME_testOtherwiseFiringWithOneRule() throws Exception {
         final RuleBase ruleBase = RuleBaseFactory.newRuleBase( RuleBase.RETEOO );
 
         final Package pkg = new Package( "Miss Manners" );
@@ -87,7 +91,11 @@
 
     }
 
-    public void testOtherwiseFiringMultipleRules() throws Exception {
+    /**
+     * @TODO: this is a future to be implemented in the future 
+     * @throws Exception
+     */
+    public void FIXME_testOtherwiseFiringMultipleRules() throws Exception {
         final RuleBase ruleBase = RuleBaseFactory.newRuleBase( RuleBase.RETEOO );
 
         final Package pkg = new Package( "Miss Manners" );

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/ExternalSheetListenerTest.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/ExternalSheetListenerTest.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/ExternalSheetListenerTest.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -12,8 +12,6 @@
 import org.drools.Agenda;
 import org.drools.FactException;
 import org.drools.FactHandle;
-import org.drools.NoSuchFactHandleException;
-import org.drools.NoSuchFactObjectException;
 import org.drools.ObjectFilter;
 import org.drools.QueryResults;
 import org.drools.RuleBase;
@@ -166,8 +164,7 @@
 					return null;
 				}
 
-				public FactHandle getFactHandle(Object arg0)
-						throws NoSuchFactHandleException {
+				public FactHandle getFactHandle(Object arg0) {
 					return null;
 				}
 
@@ -183,8 +180,7 @@
 					return null;
 				}
 
-				public Object getObject(FactHandle arg0)
-						throws NoSuchFactObjectException {
+				public Object getObject(FactHandle arg0) {
 					return null;
 				}
 
@@ -354,6 +350,11 @@
                     // TODO Auto-generated method stub
                     return null;
                 }
+
+                public List getRuleFlowEventListeners() {
+                    // TODO Auto-generated method stub
+                    return null;
+                }
 			};
 		}
 	}

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DRLInfo.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DRLInfo.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DRLInfo.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -5,6 +5,7 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.drools.compiler.Dialect;
 import org.drools.compiler.DroolsError;
 import org.drools.lang.descr.FunctionDescr;
 import org.drools.lang.descr.PackageDescr;
@@ -12,13 +13,12 @@
 import org.drools.rule.LineMappings;
 import org.drools.rule.Package;
 import org.drools.rule.PackageCompilationData;
-import org.drools.rule.builder.Dialect;
 
 public class DRLInfo {
 
 	private static final DroolsError[] EMPTY_DROOLS_ERROR_ARRAY = new DroolsError[0];
 	private static final List EMPTY_LIST = Collections.unmodifiableList(Collections.EMPTY_LIST);
-	
+
 	private String sourcePathName;
 	private PackageDescr packageDescr;
 	private List parserErrors;
@@ -48,14 +48,14 @@
 			throw new IllegalArgumentException("Null package");
 		}
 		this.compiledPackage = compiledPackage;
-		this.builderErrors = 
+		this.builderErrors =
 			builderErrors == null ? EMPTY_DROOLS_ERROR_ARRAY : builderErrors;
 	}
 
 	public String getSourcePathName() {
 		return sourcePathName;
 	}
-	
+
 	public PackageDescr getPackageDescr() {
 		return packageDescr;
 	}
@@ -63,11 +63,11 @@
 	public List getParserErrors() {
 		return parserErrors;
 	}
-	
+
 	public Package getPackage() {
 		return compiledPackage;
 	}
-	
+
 	public DroolsError[] getBuilderErrors() {
 		return builderErrors;
 	}
@@ -75,11 +75,11 @@
 	public String getPackageName() {
 		return packageDescr.getName();
 	}
-	
+
 	public boolean isCompiled() {
 		return compiledPackage != null;
 	}
-	
+
 	public RuleInfo[] getRuleInfos() {
 		if (ruleInfos == null) {
 			List ruleInfosList = new ArrayList();
@@ -92,10 +92,10 @@
 		}
 		return ruleInfos;
 	}
-	
+
 	public RuleInfo getRuleInfo(int drlLineNumber) {
 		RuleInfo[] ruleInfos = getRuleInfos();
-                
+
 		int ruleLine = -1;
 		RuleInfo result = null;
 		for (int i = 0; i < ruleInfos.length; i++) {
@@ -108,14 +108,14 @@
 		}
 		return result;
 	}
-	
+
 	public class RuleInfo {
-		
+
 		private final RuleDescr ruleDescr;
 		// cached entries
 		private transient String className;
 		private transient int consequenceJavaLineNumber = -1;
-		
+
 		public RuleInfo(RuleDescr ruleDescr) {
 			if (ruleDescr == null) {
 				throw new IllegalArgumentException("Null ruleDescr");
@@ -126,7 +126,7 @@
         public Dialect getDialect() {
             return ruleDescr.getDialect();
         }
-        
+
 		public String getSourcePathName() {
 			return DRLInfo.this.getSourcePathName();
 		}
@@ -157,13 +157,13 @@
 				}
 				PackageCompilationData data = compiledPackage
                 					.getPackageCompilationData();
-                
+
                 System.out.println("MVEL:DRLInfo.getConsequenceJavaLineNumber: Getting mappings for " + getClassName());
-                
+
                 LineMappings mappings = data.getLineMappings(className);
                 consequenceJavaLineNumber = mappings.getOffset();
-                
-                System.out.println("MVEL:DRLInfo.getConsequenceJavaLineNumber:" 
+
+                System.out.println("MVEL:DRLInfo.getConsequenceJavaLineNumber:"
                 	+ " Calculated consequenceJavaLineNumber: " + consequenceJavaLineNumber);
                 System.out.println("  MVEL: startLINE  " + mappings.getStartLine());
                 System.out.println("  MVEL: DRLLine "+getConsequenceDrlLineNumber());
@@ -192,7 +192,7 @@
 		}
 		return functionInfos;
 	}
-	
+
 	public FunctionInfo getFunctionInfo(int drlLineNumber) {
 		FunctionInfo[] functionInfos = getFunctionInfos();
 		int functionLine = -1;
@@ -207,14 +207,14 @@
 		}
 		return result;
 	}
-	
+
 	public class FunctionInfo {
-		
+
 		private FunctionDescr functionDescr;
 		// cached entries
 		private transient String className;
 		private transient int javaLineNumber = -1;
-		
+
 		public FunctionInfo(FunctionDescr functionDescr) {
 			if (functionDescr == null) {
 				throw new IllegalArgumentException("Null functionDescr");

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -36,6 +36,7 @@
 import org.drools.eclipse.preferences.IDroolsConstants;
 import org.drools.eclipse.util.ProjectClassLoader;
 import org.drools.lang.descr.PackageDescr;
+import org.drools.rule.builder.dialect.java.JavaDialectConfiguration;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IResourceVisitor;
@@ -303,7 +304,8 @@
                 IJavaProject project = JavaCore.create(resource.getProject());
                 newLoader = ProjectClassLoader.getProjectClassLoader(project);
                 String level = project.getOption(JavaCore.COMPILER_COMPLIANCE, true);
-            	builder_configuration.setJavaLanguageLevel(level);
+                JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) builder_configuration.getDialectConfiguration( "java" );
+                javaConf.setJavaLanguageLevel(level);
             }
             try {
             	builder_configuration.setClassLoader(newLoader);

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-examples/drools-examples-brms/.classpath
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-examples/drools-examples-brms/.classpath	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-examples/drools-examples-brms/.classpath	2007-07-16 00:31:13 UTC (rev 13539)
@@ -3,6 +3,6 @@
 	<classpathentry excluding="resources/" kind="src" path="src/main"/>
 	<classpathentry kind="src" path="src/main/resources"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry combineaccessrules="false" kind="src" path="/drools-core"/>
+	<classpathentry kind="con" path="DROOLS/JBoss Rules"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-jbrms/src/main/java/org/drools/brms/server/builder/BRMSPackageBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-jbrms/src/main/java/org/drools/brms/server/builder/BRMSPackageBuilder.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-jbrms/src/main/java/org/drools/brms/server/builder/BRMSPackageBuilder.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -24,6 +24,7 @@
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Properties;
 import java.util.jar.JarEntry;
 import java.util.jar.JarInputStream;
 
@@ -38,6 +39,8 @@
 import org.drools.repository.PackageItem;
 import org.drools.repository.RulesRepositoryException;
 import org.drools.rule.MapBackedClassLoader;
+import org.drools.rule.builder.dialect.java.JavaDialectConfiguration;
+import org.drools.util.ChainedProperties;
 
 /**
  * This decorates the drools-compiler PackageBuilder
@@ -51,16 +54,16 @@
     private List<DSLMappingFile> dslFiles;
     private DefaultExpander expander;
     
-    /** the default compiler. This is nominally JANINO but can be overridden by setting drools.compiler to ECLIPSE */
-    static int COMPILER = getPreferredBRMSCompiler();
-    
     /**
      * This will give you a fresh new PackageBuilder 
      * using the given classpath.
      */
     public static BRMSPackageBuilder getInstance(List<JarInputStream> classpath) {
-
-    	MapBackedClassLoader loader = new MapBackedClassLoader( BRMSPackageBuilder.class.getClassLoader() );
+        ClassLoader parentClassLoader = Thread.currentThread().getContextClassLoader();
+        if ( parentClassLoader == null ) {
+            parentClassLoader = BRMSPackageBuilder.class.getClassLoader();
+        }
+    	MapBackedClassLoader loader = new MapBackedClassLoader( parentClassLoader );
         try {
             for ( JarInputStream jis : classpath ) {
                 JarEntry entry = null;
@@ -80,12 +83,23 @@
         } catch ( IOException e ) {
             throw new RulesRepositoryException( e );
         }
+        
 
-        PackageBuilderConfiguration config = new PackageBuilderConfiguration();
-        config.setClassLoader( loader );
-        config.setCompiler( COMPILER );
+        // See if we can find a packagebuilder.conf
+        // We do this manually here, as we cannot rely on PackageBuilder doing this correctly
+        // note this chainedProperties already checks System properties too
+        ChainedProperties chainedProperties = new ChainedProperties( BRMSPackageBuilder.class.getClassLoader(), // pass this as it searches currentThread anyway
+                                                                     "packagebuilder.conf",
+                                                                     false ); // false means it ignores any default values
+        
+        // the default compiler. This is nominally JANINO but can be overridden by setting drools.dialect.java.compiler to ECLIPSE 
+        Properties properties = new Properties();
+        properties.setProperty( "drools.dialect.java.compiler", 
+                                chainedProperties.getProperty( "drools.dialect.java.compiler", "JANINO" ) );
+        PackageBuilderConfiguration pkgConf = new PackageBuilderConfiguration( properties );
+        pkgConf.setClassLoader( loader );
 
-        return new BRMSPackageBuilder( config );
+        return new BRMSPackageBuilder( pkgConf );
 
     }
 
@@ -95,10 +109,10 @@
      * mainly in tomcat, grrr... 
      */
     static int getPreferredBRMSCompiler() {
-        if (System.getProperty( "drools.compiler", "JANINO" ).equals( "ECLIPSE" )) {
-            return PackageBuilderConfiguration.ECLIPSE;
+        if (System.getProperty( "drools.dialect.java.compiler", "JANINO" ).equals( "ECLIPSE" )) {
+            return JavaDialectConfiguration.ECLIPSE;
         } else {
-            return PackageBuilderConfiguration.JANINO;
+            return JavaDialectConfiguration.JANINO;
         }
     }
 

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-jbrms/src/test/java/org/drools/brms/server/builder/BRMSPackageBuilderTest.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-jbrms/src/test/java/org/drools/brms/server/builder/BRMSPackageBuilderTest.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-jbrms/src/test/java/org/drools/brms/server/builder/BRMSPackageBuilderTest.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -28,6 +28,7 @@
 import org.drools.lang.descr.PackageDescr;
 import org.drools.lang.dsl.DSLMappingFile;
 import org.drools.rule.Package;
+import org.drools.rule.builder.dialect.java.JavaDialectConfiguration;
 
 public class BRMSPackageBuilderTest extends TestCase {
     
@@ -35,6 +36,14 @@
    public void testEmpty() {
        
    }
+   
+   public void setUp() {
+       System.getProperties().remove( "drools.dialect.java.compiler" );
+   }
+   
+   public void tearDown() {
+       System.getProperties().remove( "drools.dialect.java.compiler" );
+   }   
 
     // @FIXME rule "abc" is null and the Packge has no namespace
     public void testPartialPackage() throws Exception {
@@ -51,7 +60,8 @@
         builder.addPackageFromDrl( new StringReader(header) );
         assertFalse(builder.hasErrors());
         
-        assertEquals(PackageBuilderConfiguration.JANINO, builder.getPackageBuilderConfiguration().getCompiler());
+        JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) builder.getPackageBuilderConfiguration().getDialectConfiguration( "java" );        
+        assertEquals(JavaDialectConfiguration.JANINO, javaConf.getCompiler());
         
         String ruleAtom = "rule foo \n when \n Person() \n then \n System.out.println(42); end";
         builder.addPackageFromDrl( new StringReader(ruleAtom) );
@@ -105,16 +115,52 @@
         assertNotNull(builder.getDSLExpander());
     }
     
-    public void testDefaultCompiler() {
-        assertEquals(PackageBuilderConfiguration.JANINO, BRMSPackageBuilder.COMPILER);
-        assertEquals(PackageBuilderConfiguration.JANINO, BRMSPackageBuilder.getPreferredBRMSCompiler());
-        System.setProperty( "drools.compiler", "ECLIPSE" );
-        assertEquals(PackageBuilderConfiguration.ECLIPSE, BRMSPackageBuilder.getPreferredBRMSCompiler());
-        System.setProperty( "drools.compiler", "" );
-        assertEquals(PackageBuilderConfiguration.JANINO, BRMSPackageBuilder.getPreferredBRMSCompiler());
+//    public void testDefaultCompiler() {
+//        assertEquals(JavaDialectConfiguration.JANINO, BRMSPackageBuilder.COMPILER);
+//        assertEquals(PackageBuilderConfiguration.JANINO, BRMSPackageBuilder.getPreferredBRMSCompiler());
+//        System.setProperty( "drools.compiler", "ECLIPSE" );
+//        assertEquals(PackageBuilderConfiguration.ECLIPSE, BRMSPackageBuilder.getPreferredBRMSCompiler());
+//        System.setProperty( "drools.compiler", "" );
+//        assertEquals(PackageBuilderConfiguration.JANINO, BRMSPackageBuilder.getPreferredBRMSCompiler());
+//    }
+    
+    // @FIXME rule "abc" is null and the Packge has no namespace
+    public void testDefaultCompiler() throws Exception {
+
+        JarInputStream jis = new JarInputStream( this.getClass().getResourceAsStream( "/billasurf.jar" ) );
+        List<JarInputStream> l = new ArrayList<JarInputStream>();
+        l.add( jis );
+        BRMSPackageBuilder builder = BRMSPackageBuilder.getInstance( l );
+        
+        PackageDescr pc = new PackageDescr("foo.bar");
+        builder.addPackage( pc );
+        
+        String header = "import com.billasurf.Person\n import com.billasurf.Board";
+        builder.addPackageFromDrl( new StringReader(header) );
+        assertFalse(builder.hasErrors());
+        
+        JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) builder.getPackageBuilderConfiguration().getDialectConfiguration( "java" );        
+        assertEquals(JavaDialectConfiguration.JANINO, javaConf.getCompiler());
     }
+    
+    public void testEclipseCompiler() throws Exception {
 
+        System.setProperty( "drools.dialect.java.compiler", "ECLIPSE" );
+        JarInputStream jis = new JarInputStream( this.getClass().getResourceAsStream( "/billasurf.jar" ) );
+        List<JarInputStream> l = new ArrayList<JarInputStream>();
+        l.add( jis );
+        BRMSPackageBuilder builder = BRMSPackageBuilder.getInstance( l );
+        
+        PackageDescr pc = new PackageDescr("foo.bar");
+        builder.addPackage( pc );
+        
+        String header = "import com.billasurf.Person\n import com.billasurf.Board";
+        builder.addPackageFromDrl( new StringReader(header) );
+        assertFalse(builder.hasErrors());
+        
+        JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) builder.getPackageBuilderConfiguration().getDialectConfiguration( "java" );        
+        assertEquals(JavaDialectConfiguration.ECLIPSE, javaConf.getCompiler());
+    }                
     
-    
 
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-jsr94/src/main/java/org/drools/jsr94/rules/ObjectFilterAdapter.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-jsr94/src/main/java/org/drools/jsr94/rules/ObjectFilterAdapter.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-jsr94/src/main/java/org/drools/jsr94/rules/ObjectFilterAdapter.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -2,6 +2,11 @@
 
 import javax.rules.ObjectFilter;
 
+/**
+ * Adaptor class, that makes JSR94 ObjectFilters work from a delegating Drools ObjectFilter
+ * @author mproctor
+ *
+ */
 public class ObjectFilterAdapter implements org.drools.ObjectFilter {
     private ObjectFilter filter;
     

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-jsr94/src/main/java/org/drools/jsr94/rules/StatefulRuleSessionImpl.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-jsr94/src/main/java/org/drools/jsr94/rules/StatefulRuleSessionImpl.java	2007-07-15 20:54:16 UTC (rev 13538)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-jsr94/src/main/java/org/drools/jsr94/rules/StatefulRuleSessionImpl.java	2007-07-16 00:31:13 UTC (rev 13539)
@@ -32,7 +32,6 @@
 
 import org.drools.FactException;
 import org.drools.FactHandle;
-import org.drools.NoSuchFactObjectException;
 import org.drools.StatefulSession;
 import org.drools.WorkingMemory;
 import org.drools.jsr94.rules.admin.RuleExecutionSetImpl;




More information about the jboss-svn-commits mailing list