[jboss-svn-commits] JBL Code SVN: r30651 - in labs/jbossrules/trunk: drools-api/src/main/java/org/drools/command and 17 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Dec 14 18:20:18 EST 2009


Author: mark.proctor at jboss.com
Date: 2009-12-14 18:20:16 -0500 (Mon, 14 Dec 2009)
New Revision: 30651

Added:
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/DateFormats.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/builder/impl/DateFormatsImpl.java
Modified:
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactory.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/Calendars.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/EnvironmentName.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/QueryBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FieldFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ComparableEvaluatorsDefinition.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/EqualityEvaluatorsDefinition.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELCalendarCoercion.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELDateCoercion.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/time/impl/CronTrigger.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/time/impl/IntervalTrigger.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/time/impl/PointInTimeTrigger.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/DateUtils.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/FieldFactoryTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/mvel/MVELCalendarCoercionTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/mvel/MVELDateCoercionTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/SchedulerTest.java
Log:
JBRULES-2373 Add String converter
-Added various points for String based conversion, but not working yet, just basic plumbing.
 Currently hard coded to dates.
 

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/DateFormats.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/DateFormats.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/DateFormats.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -0,0 +1,13 @@
+package org.drools.builder;
+
+import java.text.DateFormat;
+import java.util.Date;
+
+public interface DateFormats {
+    DateFormat get(String identifier);
+
+    void set(String identifier,
+             DateFormat value);
+    
+    Date parse(String identifer, String date);
+}

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactory.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactory.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -18,8 +18,8 @@
  * drools-transformer-xstream is added then the PipelineFactory can be used in conjunction with the BatchExecutionHelper to marshall to and from XML. BatchExecutionHelper
  * also provides additional documentation on the supported XML format.
  * </p>
+ *`
  *
- *
  * <p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>  
  */
 public class CommandFactory {

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/Calendars.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/Calendars.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/Calendars.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -6,5 +6,5 @@
     Calendar get(String identifier);
 
     void set(String identifier,
-             Calendar value);
+             Calendar value);   
 }

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/EnvironmentName.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/EnvironmentName.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/EnvironmentName.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -6,4 +6,6 @@
     public static final String TRANSACTION_MANAGER = "drools.persistence.jpa.TransactionManager";
     public static final String OBJECT_MARSHALLING_STRATEGIES = "drools.marshalling.ObjectMarshallingStrategies";
     public static final String GLOBALS = "drools.Globals";
+    public static final String CALENDARS = "org.drools.time.Calendars";
+    public static final String DATE_FORMATS = "org.drools.build.DateFormats";
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -41,9 +41,11 @@
 import org.drools.base.ClassFieldAccessorCache;
 import org.drools.base.ClassFieldAccessorStore;
 import org.drools.base.evaluators.TimeIntervalParser;
+import org.drools.builder.DateFormats;
 import org.drools.builder.DecisionTableConfiguration;
 import org.drools.builder.ResourceConfiguration;
 import org.drools.builder.ResourceType;
+import org.drools.builder.impl.DateFormatsImpl;
 import org.drools.common.InternalRuleBase;
 import org.drools.commons.jci.problems.CompilationProblem;
 import org.drools.definition.process.Process;
@@ -86,6 +88,7 @@
 import org.drools.rule.TypeDeclaration;
 import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.RuleBuilder;
+import org.drools.runtime.EnvironmentName;
 import org.drools.spi.InternalReadAccessor;
 import org.drools.util.DroolsStreamUtils;
 import org.drools.xml.XmlChangeSetReader;
@@ -133,6 +136,8 @@
     private List<DSLTokenizedMappingFile>     dslFiles;
 
     private TimeIntervalParser                timeParser;
+    
+    protected DateFormats                     dateFormats;    
 
     /**
      * Use this when package is starting from scratch.
@@ -178,6 +183,12 @@
         } else {
             this.configuration = configuration;
         }
+        
+        this.dateFormats = null;//(DateFormats) this.environment.get( EnvironmentName.DATE_FORMATS );
+        if ( this.dateFormats == null ) {
+            this.dateFormats = new DateFormatsImpl();
+            //this.environment.set( EnvironmentName.DATE_FORMATS , this.dateFormats );
+        }        
 
         this.rootClassLoader = new CompositeClassLoader( this.configuration.getClassLoader() );
 
@@ -208,6 +219,12 @@
         } else {
             this.rootClassLoader = new CompositeClassLoader( this.configuration.getClassLoader() );
         }
+        
+        this.dateFormats = null;//(DateFormats) this.environment.get( EnvironmentName.DATE_FORMATS );
+        if ( this.dateFormats == null ) {
+            this.dateFormats = new DateFormatsImpl();
+            //this.environment.set( EnvironmentName.DATE_FORMATS , this.dateFormats );
+        }                
 
         // FIXME, we need to get drools to support "default" namespace.
         //this.defaultNamespace = pkg.getName();        
@@ -1202,6 +1219,10 @@
     public Map<String, PackageRegistry> getPackageRegistry() {
         return this.pkgRegistryMap;
     }
+    
+    public DateFormats getDateFormats() {
+        return this.dateFormats;
+    }    
 
     /**
      * Returns an expander for DSLs (only if there is a DSL configured for this package).

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -806,7 +806,8 @@
             }
 
             field = FieldFactory.getFieldValue( value,
-                                                extractor.getValueType() );
+                                                extractor.getValueType(),
+                                                context.getPackageBuilder().getDateFormats() );
         } catch ( final Exception e ) {
             context.getErrors().add( new DescrBuildError( context.getParentDescr(),
                                                           literalRestrictionDescr,
@@ -899,7 +900,8 @@
         try {
             final Class staticClass = context.getDialect().getTypeResolver().resolveType( className );
             field = FieldFactory.getFieldValue( staticClass.getField( fieldName ).get( null ),
-                                                extractor.getValueType() );
+                                                extractor.getValueType(),
+                                                context.getPackageBuilder().getDateFormats()  );
             if ( field.isObjectField() ) {
                 ((ObjectFieldImpl) field).setEnum( true );
                 ((ObjectFieldImpl) field).setEnumName( staticClass.getName() );

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/QueryBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/QueryBuilder.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/QueryBuilder.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -28,7 +28,8 @@
         final InternalReadAccessor extractor = PatternBuilder.getFieldReadAccessor( context, queryDescr, objectType, "name", null, true );
 
         final FieldValue field = FieldFactory.getFieldValue( queryDescr.getName(),
-                                                             ValueType.STRING_TYPE );
+                                                             ValueType.STRING_TYPE,
+                                                             context.getPackageBuilder().getDateFormats() );
 
         final LiteralConstraint constraint = new LiteralConstraint( extractor,
                                                                     context.getConfiguration().getEvaluatorRegistry().getEvaluator( ValueType.STRING_TYPE,

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -125,11 +125,13 @@
                 buildCalendars( rule, attributeDescr.getValue(), context );
             } else if ( name.equals( "date-effective" ) ) {
                 final Calendar cal = Calendar.getInstance();
-                cal.setTime( DateUtils.parseDate( attributeDescr.getValue() ) );
+                cal.setTime( DateUtils.parseDate( attributeDescr.getValue(),
+                                                  context.getPackageBuilder().getDateFormats()  ) );
                 rule.setDateEffective( cal );
             } else if ( name.equals( "date-expires" ) ) {
                 final Calendar cal = Calendar.getInstance();
-                cal.setTime( DateUtils.parseDate( attributeDescr.getValue() ) );
+                cal.setTime( DateUtils.parseDate( attributeDescr.getValue(),
+                                                  context.getPackageBuilder().getDateFormats()  ) );
                 rule.setDateExpires( cal );
             }
         }
@@ -242,7 +244,8 @@
             }
             
             int equalsPos = timerString.indexOf( '=', startPos );
-            startDate = DateUtils.parseDate( timerString.substring( equalsPos + 1, p ).trim() );              
+            startDate = DateUtils.parseDate( timerString.substring( equalsPos + 1, p ).trim(),
+                                             context.getPackageBuilder().getDateFormats()  );              
         }
         
         if ( endPos != -1 ) {
@@ -256,7 +259,8 @@
             }
             
             int equalsPos = timerString.indexOf( '=', endPos );
-            endDate = DateUtils.parseDate( timerString.substring( equalsPos + 1, p ).trim() );              
+            endDate = DateUtils.parseDate( timerString.substring( equalsPos + 1, p ).trim(),
+                                           context.getPackageBuilder().getDateFormats()  );              
         }
         
         if ( repeatPos != -1 ) {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -27,6 +27,7 @@
 import org.drools.builder.KnowledgeBuilder;
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.ResourceType;
+import org.drools.builder.impl.DateFormatsImpl;
 import org.drools.compiler.DrlParser;
 import org.drools.compiler.DroolsParserException;
 import org.drools.compiler.PackageBuilder;
@@ -69,7 +70,8 @@
         assertEquals( "hello world",
                       list2.get( 0 ) );
 
-        Date dt = DateUtils.parseDate( "10-Jul-1974" );
+        Date dt = DateUtils.parseDate( "10-Jul-1974",
+                                       new DateFormatsImpl() );
         assertEquals( dt,
                       c.getUsedBy() );
     }

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -350,19 +350,23 @@
     public void testMVELSoundex() throws Exception {
 
         // read in the source
-        final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "MVEL_soundex.drl" ) );
-        RuleBase ruleBase = loadRuleBase( reader );
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add( ResourceFactory.newClassPathResource( "MVEL_soundex.drl", getClass() ), ResourceType.DRL );        
 
-        ruleBase = SerializationHelper.serializeObject( ruleBase );
-        StatefulSession session = ruleBase.newStatefulSession();
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+        
+        kbase = SerializationHelper.serializeObject( kbase );
+        
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();         
 
-        session = SerializationHelper.getSerialisedStatefulSession( session,
-                                                                    ruleBase );
+        ksession = SerializationHelper.getSerialisedStatefulKnowledgeSession( ksession, true );        
+
         Cheese c = new Cheese( "fubar",
                                2 );
 
-        session.insert( c );
-        session.fireAllRules();
+        ksession.insert( c );
+        ksession.fireAllRules();
         assertEquals( 42,
                       c.getPrice() );
     }
@@ -370,16 +374,17 @@
     public void testMVELRewrite() throws Exception {
 
         // read in the source
-        final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_MVELrewrite.drl" ) );
-        RuleBase ruleBase = loadRuleBase( reader );
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add( ResourceFactory.newClassPathResource( "test_MVELrewrite.drl", getClass() ), ResourceType.DRL );        
 
-        ruleBase = SerializationHelper.serializeObject( ruleBase );
-        StatefulSession session = ruleBase.newStatefulSession();
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+        
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();         
 
-        session = SerializationHelper.getSerialisedStatefulSession( session,
-                                                                    ruleBase );
+        ksession = SerializationHelper.getSerialisedStatefulKnowledgeSession( ksession, true );
         List results = new ArrayList();
-        session.setGlobal( "results",
+        ksession.setGlobal( "results",
                            results );
 
         Cheese brie = new Cheese( "brie",
@@ -390,8 +395,8 @@
         cheesery.addCheese( brie );
         cheesery.addCheese( stilton );
 
-        session.insert( cheesery );
-        session.fireAllRules();
+        ksession.insert( cheesery );
+        ksession.fireAllRules();
 
         assertEquals( 1,
                       results.size() );
@@ -1317,39 +1322,43 @@
     }
 
     public void testExplicitAnd() throws Exception {
-        final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_ExplicitAnd.drl" ) );
-        final RuleBase ruleBase = loadRuleBase( reader );
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add( ResourceFactory.newClassPathResource( "test_ExplicitAnd.drl", getClass() ), ResourceType.DRL );        
 
-        StatefulSession session = ruleBase.newStatefulSession();
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+        
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
         final List list = new ArrayList();
-        session.setGlobal( "list",
+        ksession.setGlobal( "list",
                            list );
-        session.insert( new Message( "hola" ) );
+        ksession.insert( new Message( "hola" ) );
 
-        session.fireAllRules();
+        ksession.fireAllRules();
         assertEquals( 0,
                       list.size() );
 
-        session.insert( new Cheese( "brie",
+        ksession.insert( new Cheese( "brie",
                                     33 ) );
 
-        session = SerializationHelper.getSerialisedStatefulSession( session,
-                                                                    ruleBase );
-        session.fireAllRules();
+        ksession = SerializationHelper.getSerialisedStatefulKnowledgeSession( ksession, true );
+        ksession.fireAllRules();
         assertEquals( 1,
-                      ((List) session.getGlobal( "list" )).size() );
+                      ((List) ksession.getGlobal( "list" )).size() );
     }
 
     public void testHelloWorld() throws Exception {
-
         // read in the source
-        final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "HelloWorld.drl" ) );
-        RuleBase ruleBase = loadRuleBase( reader );
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add( ResourceFactory.newClassPathResource( "HelloWorld.drl", getClass() ), ResourceType.DRL );        
 
-        WorkingMemory workingMemory = ruleBase.newStatefulSession();
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+        
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
 
         final List list = new ArrayList();
-        workingMemory.setGlobal( "list",
+        ksession.setGlobal( "list",
                                  list );
 
         // go !
@@ -1357,13 +1366,13 @@
         message.addToList( "hello" );
         message.setNumber( 42 );
 
-        workingMemory.insert( message );
-        workingMemory.insert( "boo" );
+        ksession.insert( message );
+        ksession.insert( "boo" );
         //        workingMemory    = SerializationHelper.serializeObject(workingMemory);
-        workingMemory.fireAllRules();
+        ksession.fireAllRules();
         assertTrue( message.isFired() );
         assertEquals( message,
-                      ((List) workingMemory.getGlobal( "list" )).get( 0 ) );
+                      ((List) ksession.getGlobal( "list" )).get( 0 ) );
 
     }
 
@@ -3435,18 +3444,22 @@
     }
 
     public void testInsurancePricingExample() throws Exception {
-        final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "insurance_pricing_example.drl" ) );
-        final RuleBase ruleBase = loadRuleBase( reader );
-        final WorkingMemory wm = ruleBase.newStatefulSession();
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add( ResourceFactory.newClassPathResource( "insurance_pricing_example.drl", getClass() ), ResourceType.DRL );        
 
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+        
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();        
+
         // now create some test data
         final Driver driver = new Driver();
         final Policy policy = new Policy();
 
-        wm.insert( driver );
-        wm.insert( policy );
+        ksession.insert( driver );
+        ksession.insert( policy );
 
-        wm.fireAllRules();
+        ksession.fireAllRules();
 
         assertEquals( 120,
                       policy.getBasePrice() );
@@ -3455,10 +3468,16 @@
     public void testLLR() throws Exception {
 
         // read in the source
-        final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_JoinNodeModifyTuple.drl" ) );
-        RuleBase ruleBase = loadRuleBase( reader );
-        final WorkingMemory wm = ruleBase.newStatefulSession();
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add( ResourceFactory.newClassPathResource( "test_JoinNodeModifyTuple.drl", getClass() ), ResourceType.DRL );        
 
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+        
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();         
+
+        ksession = SerializationHelper.getSerialisedStatefulKnowledgeSession( ksession, true );
+
         // 1st time
         org.drools.Target tgt = new org.drools.Target();
         tgt.setLabel( "Santa-Anna" );
@@ -3467,7 +3486,7 @@
         tgt.setCourse( new Float( 145.0f ) );
         tgt.setSpeed( new Float( 12.0f ) );
         tgt.setTime( new Float( 1.8666667f ) );
-        wm.insert( tgt );
+        ksession.insert( tgt );
 
         tgt = new org.drools.Target();
         tgt.setLabel( "Santa-Maria" );
@@ -3476,9 +3495,9 @@
         tgt.setCourse( new Float( 325.0f ) );
         tgt.setSpeed( new Float( 8.0f ) );
         tgt.setTime( new Float( 1.8666667f ) );
-        wm.insert( tgt );
+        ksession.insert( tgt );
 
-        wm.fireAllRules();
+        ksession.fireAllRules();
 
         // 2nd time
         tgt = new org.drools.Target();
@@ -3488,7 +3507,7 @@
         tgt.setCourse( new Float( 145.0f ) );
         tgt.setSpeed( new Float( 12.0f ) );
         tgt.setTime( new Float( 1.9f ) );
-        wm.insert( tgt );
+        ksession.insert( tgt );
 
         tgt = new org.drools.Target();
         tgt.setLabel( "Santa-Maria" );
@@ -3497,9 +3516,9 @@
         tgt.setCourse( new Float( 325.0f ) );
         tgt.setSpeed( new Float( 8.0f ) );
         tgt.setTime( new Float( 1.9f ) );
-        wm.insert( tgt );
+        ksession.insert( tgt );
 
-        wm.fireAllRules();
+        ksession.fireAllRules();
 
         // 3d time
         tgt = new org.drools.Target();
@@ -3509,7 +3528,7 @@
         tgt.setCourse( new Float( 145.0f ) );
         tgt.setSpeed( new Float( 12.0f ) );
         tgt.setTime( new Float( 1.9333333f ) );
-        wm.insert( tgt );
+        ksession.insert( tgt );
 
         tgt = new org.drools.Target();
         tgt.setLabel( "Santa-Maria" );
@@ -3518,9 +3537,9 @@
         tgt.setCourse( new Float( 325.0f ) );
         tgt.setSpeed( new Float( 8.0f ) );
         tgt.setTime( new Float( 1.9333333f ) );
-        wm.insert( tgt );
+        ksession.insert( tgt );
 
-        wm.fireAllRules();
+        ksession.fireAllRules();
 
         // 4th time
         tgt = new org.drools.Target();
@@ -3530,7 +3549,7 @@
         tgt.setCourse( new Float( 145.0f ) );
         tgt.setSpeed( new Float( 12.0f ) );
         tgt.setTime( new Float( 1.9666667f ) );
-        wm.insert( tgt );
+        ksession.insert( tgt );
 
         tgt = new org.drools.Target();
         tgt.setLabel( "Santa-Maria" );
@@ -3539,9 +3558,9 @@
         tgt.setCourse( new Float( 325.0f ) );
         tgt.setSpeed( new Float( 8.0f ) );
         tgt.setTime( new Float( 1.9666667f ) );
-        wm.insert( tgt );
+        ksession.insert( tgt );
 
-        wm.fireAllRules();
+        ksession.fireAllRules();
     }
 
     public void testDoubleQueryWithExists() throws Exception {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -28,6 +28,7 @@
 import org.drools.base.ClassTypeResolver;
 import org.drools.base.EnabledBoolean;
 import org.drools.base.TypeResolver;
+import org.drools.builder.impl.DateFormatsImpl;
 import org.drools.compiler.Dialect;
 import org.drools.compiler.DialectCompiletimeRegistry;
 import org.drools.compiler.DrlParser;
@@ -187,9 +188,11 @@
 
         // creates expected results
         final Calendar effective = Calendar.getInstance();
-        effective.setTime( DateUtils.parseDate( "10-Jul-1974" ) );
+        effective.setTime( DateUtils.parseDate( "10-Jul-1974",
+                                                new DateFormatsImpl() ) );
         final Calendar expires = Calendar.getInstance();
-        expires.setTime( DateUtils.parseDate( "10-Jul-2040" ) );
+        expires.setTime( DateUtils.parseDate( "10-Jul-2040",
+                                              new DateFormatsImpl() ) );
 
         // defining expectations on the mock object
         mockery.checking( new Expectations() {
@@ -197,6 +200,7 @@
                 // return values for the context
                 allowing( context ).getRule(); will( returnValue( rule ) );
                 allowing( context ).getRuleDescr(); will( returnValue( ruleDescr ) );
+                allowing( context ).getPackageBuilder(); will( returnValue( new PackageBuilder() ) );
 
                 // expected values for the rule object
                 oneOf( rule ).setNoLoop( true );

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -18,6 +18,7 @@
 import org.drools.RuleBase;
 import org.drools.SessionConfiguration;
 import org.drools.WorkingMemoryEntryPoint;
+import org.drools.builder.DateFormats;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalRuleBase;
 import org.drools.common.InternalWorkingMemory;
@@ -548,16 +549,6 @@
         
     }
 
-    public Collection< ? extends org.drools.runtime.rule.FactHandle> getFactHandles() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    public Collection< ? extends org.drools.runtime.rule.FactHandle> getFactHandles(ObjectFilter filter) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
     public Collection< Object > getObjects() {
         // TODO Auto-generated method stub
         return null;
@@ -618,4 +609,19 @@
         return 0;
     }
 
+    public DateFormats getDateFormats() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public <T extends org.drools.runtime.rule.FactHandle> Collection<T> getFactHandles() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public <T extends org.drools.runtime.rule.FactHandle> Collection<T> getFactHandles(ObjectFilter filter) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FieldFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FieldFactory.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FieldFactory.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -22,6 +22,7 @@
 import org.drools.base.field.DoubleFieldImpl;
 import org.drools.base.field.LongFieldImpl;
 import org.drools.base.field.ObjectFieldImpl;
+import org.drools.builder.DateFormats;
 import org.drools.spi.FieldValue;
 import org.drools.util.DateUtils;
 import org.drools.util.MathUtils;
@@ -38,7 +39,8 @@
     }
 
     public static FieldValue getFieldValue(final String value,
-                                           ValueType valueType) {
+                                           ValueType valueType,
+                                           DateFormats dateFormats) {
         FieldValue field = null;
         if ( value == null ) {
             valueType = ValueType.NULL_TYPE;
@@ -81,7 +83,7 @@
         } else if ( valueType == ValueType.STRING_TYPE ) {
             field = new ObjectFieldImpl( value.intern() );
         } else if ( valueType == ValueType.DATE_TYPE ) {
-            Date date = DateUtils.parseDate( value );
+            Date date = DateUtils.parseDate( value, dateFormats );
             field = new ObjectFieldImpl( date );
         } else if ( valueType == ValueType.ARRAY_TYPE ) {
             //MN: I think its fine like this.
@@ -98,7 +100,8 @@
     }
 
     public static FieldValue getFieldValue(final Object value,
-                                           ValueType valueType) {
+                                           ValueType valueType,
+                                           DateFormats dateFormats) {
         FieldValue field = null;
         if ( value == null ) {
             valueType = ValueType.NULL_TYPE;
@@ -175,7 +178,7 @@
         } else if ( valueType == ValueType.DATE_TYPE ) {
             //MN: I think its fine like this, seems to work !
             if( value instanceof String ) {
-                Date date = DateUtils.parseDate( (String) value );
+                Date date = DateUtils.parseDate( (String) value, dateFormats );
                 field = new ObjectFieldImpl( date );
             } else {
                 field = new ObjectFieldImpl( value );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ComparableEvaluatorsDefinition.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ComparableEvaluatorsDefinition.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ComparableEvaluatorsDefinition.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -1085,7 +1085,7 @@
             }
             final Date value1 = (Date) extractor.getValue( workingMemory, object1 );
             final Object value2 = object2.getValue();
-            return value1.compareTo( DateUtils.getRightDate( value2 ) ) < 0;
+            return value1.compareTo( DateUtils.getRightDate( value2, workingMemory.getDateFormats() ) ) < 0;
         }
 
         public boolean evaluateCachedRight(InternalWorkingMemory workingMemory,
@@ -1095,7 +1095,7 @@
             }
             final Date value1 = (Date) context.declaration.getExtractor().getValue( workingMemory, left );
             final Object value2 = ((ObjectVariableContextEntry) context).right;
-            return DateUtils.getRightDate( value2 ).compareTo( value1 ) < 0;
+            return DateUtils.getRightDate( value2, workingMemory.getDateFormats() ).compareTo( value1 ) < 0;
         }
 
         public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
@@ -1105,7 +1105,7 @@
             }
             final Date value1 = (Date) ((ObjectVariableContextEntry) context).left;
             final Object value2 = context.extractor.getValue( workingMemory, right );
-            return DateUtils.getRightDate( value2 ).compareTo( value1 ) < 0;
+            return DateUtils.getRightDate( value2, workingMemory.getDateFormats() ).compareTo( value1 ) < 0;
         }
 
         public boolean evaluate(InternalWorkingMemory workingMemory,
@@ -1146,7 +1146,7 @@
             }
             final Date value1 = (Date) extractor.getValue( workingMemory, object1 );
             final Object value2 = object2.getValue();
-            return value1.compareTo( DateUtils.getRightDate( value2 ) ) <= 0;
+            return value1.compareTo( DateUtils.getRightDate( value2, workingMemory.getDateFormats() ) ) <= 0;
         }
 
         public boolean evaluateCachedRight(InternalWorkingMemory workingMemory,
@@ -1156,7 +1156,7 @@
             }
             final Date value1 = (Date) context.declaration.getExtractor().getValue( workingMemory, left );
             final Object value2 = ((ObjectVariableContextEntry) context).right;
-            return DateUtils.getRightDate( value2 ).compareTo( value1 ) <= 0;
+            return DateUtils.getRightDate( value2, workingMemory.getDateFormats() ).compareTo( value1 ) <= 0;
         }
 
         public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
@@ -1166,7 +1166,7 @@
             }
             final Date value1 = (Date) ((ObjectVariableContextEntry) context).left;
             final Object value2 = context.extractor.getValue( workingMemory, right );
-            return DateUtils.getRightDate( value2 ).compareTo( value1 ) <= 0;
+            return DateUtils.getRightDate( value2, workingMemory.getDateFormats() ).compareTo( value1 ) <= 0;
         }
 
         public boolean evaluate(InternalWorkingMemory workingMemory,
@@ -1207,7 +1207,7 @@
             }
             final Date value1 = (Date) extractor.getValue( workingMemory, object1 );
             final Object value2 = object2.getValue();
-            return value1.compareTo( DateUtils.getRightDate( value2 ) ) > 0;
+            return value1.compareTo( DateUtils.getRightDate( value2, workingMemory.getDateFormats() ) ) > 0;
         }
 
         public boolean evaluateCachedRight(InternalWorkingMemory workingMemory,
@@ -1217,7 +1217,7 @@
             }
             final Date value1 = (Date) context.declaration.getExtractor().getValue( workingMemory, left );
             final Object value2 = ((ObjectVariableContextEntry) context).right;
-            return DateUtils.getRightDate( value2 ).compareTo( value1 ) > 0;
+            return DateUtils.getRightDate( value2, workingMemory.getDateFormats() ).compareTo( value1 ) > 0;
         }
 
         public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
@@ -1227,7 +1227,7 @@
             }
             final Date value1 = (Date) ((ObjectVariableContextEntry) context).left;
             final Object value2 = context.extractor.getValue( workingMemory, right );
-            return DateUtils.getRightDate( value2 ).compareTo( value1 ) > 0;
+            return DateUtils.getRightDate( value2, workingMemory.getDateFormats() ).compareTo( value1 ) > 0;
         }
 
         public boolean evaluate(InternalWorkingMemory workingMemory,
@@ -1268,7 +1268,7 @@
             }
             final Date value1 = (Date) extractor.getValue( workingMemory, object1 );
             final Object value2 = object2.getValue();
-            return value1.compareTo( DateUtils.getRightDate( value2 ) ) >= 0;
+            return value1.compareTo( DateUtils.getRightDate( value2, workingMemory.getDateFormats() ) ) >= 0;
         }
 
         public boolean evaluateCachedRight(InternalWorkingMemory workingMemory,
@@ -1278,7 +1278,7 @@
             }
             final Date value1 = (Date) context.declaration.getExtractor().getValue( workingMemory, left );
             final Object value2 = ((ObjectVariableContextEntry) context).right;
-            return DateUtils.getRightDate( value2 ).compareTo( value1 ) >= 0;
+            return DateUtils.getRightDate( value2, workingMemory.getDateFormats() ).compareTo( value1 ) >= 0;
         }
 
         public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
@@ -1288,7 +1288,7 @@
             }
             final Date value1 = (Date) ((ObjectVariableContextEntry) context).left;
             final Object value2 = context.extractor.getValue( workingMemory, right );
-            return DateUtils.getRightDate( value2 ).compareTo( value1 ) >= 0;
+            return DateUtils.getRightDate( value2, workingMemory.getDateFormats() ).compareTo( value1 ) >= 0;
         }
 
         public boolean evaluate(InternalWorkingMemory workingMemory,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/EqualityEvaluatorsDefinition.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/EqualityEvaluatorsDefinition.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/EqualityEvaluatorsDefinition.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -957,7 +957,7 @@
             if ( value2 == null ) {
                 return false;
             }
-            return value1.compareTo( DateUtils.getRightDate( value2 ) ) == 0;
+            return value1.compareTo( DateUtils.getRightDate( value2, workingMemory.getDateFormats() ) ) == 0;
         }
 
         public boolean evaluateCachedRight(InternalWorkingMemory workingMemory,
@@ -970,7 +970,7 @@
             if ( value2 == null ) {
                 return false;
             }
-            return value1.compareTo( DateUtils.getRightDate( value2 ) ) == 0;
+            return value1.compareTo( DateUtils.getRightDate( value2, workingMemory.getDateFormats() ) ) == 0;
         }
 
         public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
@@ -983,7 +983,7 @@
             if ( value2 == null ) {
                 return false;
             }
-            return value1.compareTo( DateUtils.getRightDate( value2 ) ) == 0;
+            return value1.compareTo( DateUtils.getRightDate( value2, workingMemory.getDateFormats() ) ) == 0;
         }
 
         public boolean evaluate(InternalWorkingMemory workingMemory,
@@ -1030,7 +1030,7 @@
             if ( value2 == null ) {
                 return true;
             }
-            return value1.compareTo( DateUtils.getRightDate( value2 ) ) != 0;
+            return value1.compareTo( DateUtils.getRightDate( value2, workingMemory.getDateFormats() ) ) != 0;
         }
 
         public boolean evaluateCachedRight(InternalWorkingMemory workingMemory,
@@ -1043,7 +1043,7 @@
             if ( value2 == null ) {
                 return true;
             }
-            return value1.compareTo( DateUtils.getRightDate( value2 ) ) != 0;
+            return value1.compareTo( DateUtils.getRightDate( value2, workingMemory.getDateFormats() ) ) != 0;
         }
 
         public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
@@ -1056,7 +1056,7 @@
             if ( value2 == null ) {
                 return true;
             }
-            return value1.compareTo( DateUtils.getRightDate( value2 ) ) != 0;
+            return value1.compareTo( DateUtils.getRightDate( value2, workingMemory.getDateFormats() ) ) != 0;
         }
 
         public boolean evaluate(InternalWorkingMemory workingMemory,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELCalendarCoercion.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELCalendarCoercion.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELCalendarCoercion.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -2,6 +2,7 @@
 
 import java.util.Calendar;
 
+import org.drools.builder.impl.DateFormatsImpl;
 import org.drools.util.DateUtils;
 import org.mvel2.ConversionHandler;
 
@@ -18,7 +19,7 @@
     public Object convertFrom(Object o) {
         if (o instanceof String) {
             Calendar cal = Calendar.getInstance();
-            cal.setTime( DateUtils.parseDate( (String) o) );
+            cal.setTime( DateUtils.parseDate( (String) o, DateFormatsImpl.dateFormats.get() ) );
             return cal;
         } else {
             return o;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELDateCoercion.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELDateCoercion.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELDateCoercion.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -1,11 +1,16 @@
 package org.drools.base.mvel;
 
+import java.text.DateFormat;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
 
+import org.drools.builder.DateFormats;
+import org.drools.builder.impl.DateFormatsImpl;
 import org.drools.util.DateUtils;
 import org.mvel2.ConversionHandler;
 
-public class MVELDateCoercion implements ConversionHandler {
+public class MVELDateCoercion implements ConversionHandler {    
 
     public boolean canConvertFrom(Class cls) {
         if (cls == String.class || cls.isAssignableFrom( Date.class )) {
@@ -17,7 +22,7 @@
 
     public Object convertFrom(Object o) {
         if (o instanceof String) {
-            return DateUtils.parseDate( (String) o);
+            return DateUtils.parseDate( (String) o, DateFormatsImpl.dateFormats.get() );
         } else {
             return o;
         }

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/builder/impl/DateFormatsImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/builder/impl/DateFormatsImpl.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/builder/impl/DateFormatsImpl.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -0,0 +1,86 @@
+package org.drools.builder.impl;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.text.DateFormat;
+import java.text.DateFormatSymbols;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.drools.builder.DateFormats;
+
+public class DateFormatsImpl
+    implements
+    DateFormats,
+    Externalizable {
+
+    private static final long       serialVersionUID = 400L;
+
+    private Map<String, DateFormat> map;
+    
+    private static ThreadLocal<Map<String, DateFormat>> localMap = new ThreadLocal<Map<String, DateFormat>>() {
+        protected Map<String, DateFormat> initialValue() {;
+            return new HashMap<String, DateFormat>();
+        };
+    };    
+    
+    /**
+     * This is here for any static classes, such as MVEL DataConverters, to access.
+     * It is expected this will be set, before access.
+     */
+    public static ThreadLocal<DateFormats> dateFormats = new ThreadLocal<DateFormats>() {
+
+    };      
+
+    public DateFormatsImpl() {
+        this.map = new ConcurrentHashMap<String, DateFormat>();
+    }
+
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+        map = (Map) in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject( map );
+    }
+
+    public DateFormat get(String identifier) {
+        return this.map.get( identifier );
+    }
+
+    public void set(String identifier,
+                    DateFormat calendar) {
+        this.map.put( identifier,
+                      calendar );
+    }
+
+    public Date parse(String identifier,
+                      String date) {
+        
+        // DateFormat's are not thread safe, so always keep a local thread copy
+        DateFormat df = this.localMap.get().get( identifier );
+        if ( df == null ) {
+            df = this.map.get( identifier );
+            if ( df == null ) {
+                throw new RuntimeException( "Unable to find DateFormat for id '" + identifier + "'" );
+            }
+            this.localMap.get().put( identifier, ( DateFormat ) df.clone() );
+        }
+        
+        try {
+            return df.parse( date );
+        } catch ( ParseException e ) {
+            throw new IllegalArgumentException("Invalid date input format: ["
+                                               + date + "] using the DateFormat: [" + df + "]");
+        }
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -52,6 +52,8 @@
 import org.drools.RuleBaseConfiguration.LogicalOverride;
 import org.drools.base.CalendarsImpl;
 import org.drools.base.MapGlobalResolver;
+import org.drools.builder.DateFormats;
+import org.drools.builder.impl.DateFormatsImpl;
 import org.drools.concurrent.ExecutorService;
 import org.drools.concurrent.ExternalExecutorService;
 import org.drools.definition.process.Process;
@@ -149,6 +151,7 @@
     protected GlobalResolver                                     globalResolver;
     
     protected Calendars                                          calendars;
+    protected DateFormats                                        dateFormats;
 
     /** The eventSupport */
     protected WorkingMemoryEventSupport                          workingMemoryEventSupport;
@@ -285,6 +288,12 @@
         }
         
         this.calendars = new CalendarsImpl();
+        
+        this.dateFormats = (DateFormats) this.environment.get( EnvironmentName.DATE_FORMATS );
+        if ( this.dateFormats == null ) {
+            this.dateFormats = new DateFormatsImpl();
+            this.environment.set( EnvironmentName.DATE_FORMATS , this.dateFormats );
+        }
 
         final RuleBaseConfiguration conf = this.ruleBase.getConfiguration();
 
@@ -638,6 +647,10 @@
     public Calendars getCalendars() {
         return this.calendars;
     }
+    
+    public DateFormats getDateFormats() {
+        return this.dateFormats;
+    }
 
     public int getId() {
         return this.id;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -7,6 +7,7 @@
 import org.drools.FactHandle;
 import org.drools.SessionConfiguration;
 import org.drools.WorkingMemory;
+import org.drools.builder.DateFormats;
 import org.drools.concurrent.ExecutorService;
 import org.drools.event.AgendaEventSupport;
 import org.drools.event.RuleFlowEventSupport;
@@ -203,5 +204,7 @@
      * @return
      */
     public long getTotalFactCount();
+    
+    public DateFormats getDateFormats();  
 
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -87,9 +87,9 @@
 
     public boolean isAllowed(final InternalReadAccessor readAccessor,
                              final InternalFactHandle handle,
-                             final InternalWorkingMemory workingMemoiry,
+                             final InternalWorkingMemory workingMemory,
                              final ContextEntry context) {
-        return this.evaluator.evaluate( null,
+        return this.evaluator.evaluate( workingMemory,
                                         this.readAccessor,
                                         handle.getObject(),
                                         this.field );
@@ -97,7 +97,7 @@
 
     public boolean isAllowedCachedLeft(final ContextEntry context,
                                        final InternalFactHandle handle) {
-        return this.evaluator.evaluate( null,
+        return this.evaluator.evaluate( ((LiteralContextEntry)context).workingMemory,
                                         ((LiteralContextEntry) context).getFieldExtractor(),
                                         handle.getObject(),
                                         this.field );
@@ -105,7 +105,7 @@
 
     public boolean isAllowedCachedRight(final LeftTuple tuple,
                                         final ContextEntry context) {
-        return this.evaluator.evaluate( null,
+        return this.evaluator.evaluate( ((LiteralContextEntry)context).workingMemory,
                                         ((LiteralContextEntry) context).getFieldExtractor(),
                                         ((LiteralContextEntry) context).getObject(),
                                         this.field );
@@ -170,6 +170,7 @@
         public InternalReadAccessor extractor;
         public Object               object;
         public ContextEntry         next;
+        public InternalWorkingMemory workingMemory;
 
         public LiteralContextEntry() {
         }
@@ -183,12 +184,14 @@
             extractor = (InternalReadAccessor) in.readObject();
             object = in.readObject();
             next = (ContextEntry) in.readObject();
+            workingMemory = ( InternalWorkingMemory ) in .readObject();
         }
 
         public void writeExternal(ObjectOutput out) throws IOException {
             out.writeObject( extractor );
             out.writeObject( object );
             out.writeObject( next );
+            out.writeObject( workingMemory );
         }
 
         public InternalReadAccessor getFieldExtractor() {
@@ -210,11 +213,12 @@
         public void updateFromFactHandle(final InternalWorkingMemory workingMemory,
                                          final InternalFactHandle handle) {
             this.object = handle.getObject();
+            this.workingMemory = workingMemory;
         }
 
         public void updateFromTuple(final InternalWorkingMemory workingMemory,
                                     final LeftTuple tuple) {
-            // nothing to do
+            this.workingMemory = workingMemory;
         }
 
         public void resetTuple() {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/time/impl/CronTrigger.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/time/impl/CronTrigger.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/time/impl/CronTrigger.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -278,7 +278,7 @@
     }
 
     public void updateToNextIncludeDate() {
-        if ( calendarNames == null || calendarNames.length == 0 ) {
+        if ( this.calendars == null || calendarNames == null || calendarNames.length == 0 ) {
             // There are no assigned calendars
             return;
         }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/time/impl/IntervalTrigger.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/time/impl/IntervalTrigger.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/time/impl/IntervalTrigger.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -164,7 +164,7 @@
     }
 
     public void updateToNextIncludeDate() {
-        if ( calendarNames == null || calendarNames.length == 0 ) {
+        if ( this.calendars == null || calendarNames == null || calendarNames.length == 0 ) {
             // There are no assigned calendars
             return;
         }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/time/impl/PointInTimeTrigger.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/time/impl/PointInTimeTrigger.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/time/impl/PointInTimeTrigger.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -37,7 +37,7 @@
                               Calendars calendars) {
         boolean included = true;
 
-        if ( calendarNames != null && calendarNames.length > 0 ) {
+        if ( calendars != null && calendarNames != null && calendarNames.length > 0 ) {
             for ( String calName : calendarNames ) {
                 // all calendars must not block, as soon as one blocks break
                 org.drools.time.Calendar cal = calendars.get( calName );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/DateUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/DateUtils.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/DateUtils.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -17,12 +17,15 @@
  */
 package org.drools.util;
 
+import java.text.DateFormat;
 import java.text.DateFormatSymbols;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.Locale;
 
+import org.drools.builder.DateFormats;
+
 /**
  * @author etirelli
  *
@@ -66,9 +69,14 @@
 	}
 
 	/** Use the simple date formatter to read the date from a string */
-	public static Date parseDate(final String input) {
+	public static Date parseDate(final String input, DateFormats dateFormats) {
 		try {
-			return df.get().parse(input);
+//		    if (  dateFormat != null ) {
+//		        return dateFormat.parse( input );
+//		    } else {
+//		        return df.get().parse(input);
+//		    }
+		    return df.get().parse(input);
 		} catch (final ParseException e) {
 			throw new IllegalArgumentException("Invalid date input format: ["
 					+ input + "] it should follow: [" + DATE_FORMAT_MASK + "]");
@@ -76,12 +84,12 @@
 	}
 
 	/** Converts the right hand side date as appropriate */
-	public static Date getRightDate(final Object object2) {
+	public static Date getRightDate(final Object object2, DateFormats dateFormats) {
 		if (object2 == null) {
 			return null;
 		}
 		if (object2 instanceof String) {
-			return parseDate((String) object2);
+			return parseDate((String) object2, dateFormats);
 		} else if (object2 instanceof Date) {
 			return (Date) object2;
 		} else {

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -34,6 +34,7 @@
 
 import org.drools.base.evaluators.EvaluatorRegistry;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.reteoo.ReteooRuleBase;
 import org.drools.rule.Declaration;
 import org.drools.rule.VariableRestriction.BooleanVariableContextEntry;
 import org.drools.rule.VariableRestriction.CharVariableContextEntry;
@@ -451,7 +452,7 @@
                                                     final Object[] row,
                                                     final Evaluator evaluator) {
         final FieldValue value = FieldFactory.getFieldValue( row[2] );
-        final boolean result = evaluator.evaluate( null,
+        final boolean result = evaluator.evaluate( ( InternalWorkingMemory ) new ReteooRuleBase( "id1" ).newStatefulSession(),
                                                    extractor,
                                                    row[0],
                                                    value );
@@ -480,7 +481,7 @@
                                                                    extractor,
                                                                    valueType,
                                                                    row );
-        final boolean result = evaluator.evaluateCachedRight( null,
+        final boolean result = evaluator.evaluateCachedRight( ( InternalWorkingMemory ) new ReteooRuleBase( "id1" ).newStatefulSession(),
                                                               context,
                                                               row[2] );
         final String message = "The evaluator type: [" + valueType + "] with CachedRight incorrectly returned " + result + " for [" + row[0] + " " + row[1] + " " + row[2] + "]. It was asserted to return " + row[3];
@@ -508,7 +509,7 @@
                                                                    extractor,
                                                                    valueType,
                                                                    row );
-        final boolean result = evaluator.evaluateCachedLeft( null,
+        final boolean result = evaluator.evaluateCachedLeft( ( InternalWorkingMemory ) new ReteooRuleBase( "id1" ).newStatefulSession(),
                                                              context,
                                                              row[0] );
         final String message = "The evaluator type: [" + valueType + "] with CachedLeft incorrectly returned " + result + " for [" + row[0] + " " + row[1] + " " + row[2] + "]. It was asserted to return " + row[3];

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/FieldFactoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/FieldFactoryTest.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/FieldFactoryTest.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -7,13 +7,15 @@
 
 import junit.framework.TestCase;
 
+import org.drools.builder.impl.DateFormatsImpl;
 import org.drools.spi.FieldValue;
 
 public class FieldFactoryTest extends TestCase {
 
     public void testBigDecimal() {
         final FieldValue val = FieldFactory.getFieldValue( "42.42",
-                                                           ValueType.BIG_DECIMAL_TYPE );
+                                                           ValueType.BIG_DECIMAL_TYPE,
+                                                           new DateFormatsImpl() );
         assertEquals( BigDecimal.class,
                       val.getValue().getClass() );
         assertTrue( val.getValue().equals( new BigDecimal( "42.42" ) ) );
@@ -21,7 +23,8 @@
 
     public void testBigInteger() {
         final FieldValue val = FieldFactory.getFieldValue( "424242",
-                                                           ValueType.BIG_INTEGER_TYPE );
+                                                           ValueType.BIG_INTEGER_TYPE,
+                                                           new DateFormatsImpl() );
         assertEquals( BigInteger.class,
                       val.getValue().getClass() );
         assertTrue( val.getValue().equals( new BigInteger( "424242" ) ) );
@@ -30,7 +33,8 @@
     public void testDate() throws Exception {
     	SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
     	String s = df.format(df.parse("10-Jul-1974"));
-        final FieldValue val = FieldFactory.getFieldValue( s, ValueType.DATE_TYPE );
+        final FieldValue val = FieldFactory.getFieldValue( s, ValueType.DATE_TYPE,
+                                                           new DateFormatsImpl() );
         assertEquals( Date.class, val.getValue().getClass() );
 
         Date dt = (Date) val.getValue();

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/mvel/MVELCalendarCoercionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/mvel/MVELCalendarCoercionTest.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/mvel/MVELCalendarCoercionTest.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -6,6 +6,7 @@
 
 import junit.framework.TestCase;
 
+import org.drools.builder.impl.DateFormatsImpl;
 import org.drools.util.DateUtils;
 
 public class MVELCalendarCoercionTest extends TestCase {
@@ -27,7 +28,8 @@
 
         String dt = df.format(df.parse("10-Jul-1974"));
 
-        Date dt_ = DateUtils.parseDate( dt );
+        Date dt_ = DateUtils.parseDate( dt,
+                                        new DateFormatsImpl() );
         Calendar cal = Calendar.getInstance();
         cal.setTime( dt_ );
         assertEquals(cal, co.convertFrom( dt ));

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/mvel/MVELDateCoercionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/mvel/MVELDateCoercionTest.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/mvel/MVELDateCoercionTest.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -5,6 +5,7 @@
 
 import junit.framework.TestCase;
 
+import org.drools.builder.impl.DateFormatsImpl;
 import org.drools.util.DateUtils;
 
 public class MVELDateCoercionTest extends TestCase {
@@ -24,7 +25,8 @@
         SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
 
         String dt = df.format(df.parse("10-Jul-1974"));
-        Date dt_ = DateUtils.parseDate( dt );
+        Date dt_ = DateUtils.parseDate( dt,
+                                        new DateFormatsImpl() );
         assertEquals(dt_, co.convertFrom( dt ));
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/SchedulerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/SchedulerTest.java	2009-12-14 22:49:13 UTC (rev 30650)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/SchedulerTest.java	2009-12-14 23:20:16 UTC (rev 30651)
@@ -178,7 +178,7 @@
                       data.size() );
 
         // sleep for 0.5 seconds
-        Thread.sleep( 500 );
+        Thread.sleep( 750 );
 
         // now check for update
         assertEquals( 4,



More information about the jboss-svn-commits mailing list