[jboss-svn-commits] JBL Code SVN: r23810 - in labs/jbossrules/trunk: drools-compiler/src/test/java/org/drools/integrationtests and 4 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Nov 10 19:29:40 EST 2008


Author: tirelli
Date: 2008-11-10 19:29:40 -0500 (Mon, 10 Nov 2008)
New Revision: 23810

Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_CEP_SimpleEventAssertionWithDuration.drl
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooFactHandleFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/TypeDeclaration.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/builder/BuildUtilsTest.java
Log:
Fixing event timestamp assignment

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	2008-11-11 00:25:09 UTC (rev 23809)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2008-11-11 00:29:40 UTC (rev 23810)
@@ -785,6 +785,11 @@
             String timestamp = typeDescr.getMetaAttribute( TypeDeclaration.ATTR_TIMESTAMP );
             if ( timestamp != null ) {
                 type.setTimestampAttribute( timestamp );
+                ClassDefinition cd = type.getTypeClassDef();
+                ClassFieldAccessorStore store = pkgRegistry.getPackage().getClassFieldAccessorStore();
+                InternalReadAccessor extractor = store.getReader( type.getTypeClass().getName(),
+                                                                  timestamp,
+                                                                  type.new TimestampAccessorSetter() );
             }
             String duration = typeDescr.getMetaAttribute( TypeDeclaration.ATTR_DURATION );
             if ( duration != null ) {
@@ -793,8 +798,7 @@
                 ClassFieldAccessorStore store = pkgRegistry.getPackage().getClassFieldAccessorStore();
                 InternalReadAccessor extractor = store.getReader( type.getTypeClass().getName(),
                                                                   duration,
-                                                                  type );
-                type.setReadAccessor( extractor );
+                                                                  type.new DurationAccessorSetter() );
             }
 
             pkgRegistry.getPackage().addTypeDeclaration( type );

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java	2008-11-11 00:25:09 UTC (rev 23809)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java	2008-11-11 00:29:40 UTC (rev 23810)
@@ -89,19 +89,19 @@
         StockTick tick1 = new StockTick( 1,
                                          "DROO",
                                          50,
-                                         System.currentTimeMillis() );
+                                         10000 );
         StockTick tick2 = new StockTick( 2,
                                          "ACME",
                                          10,
-                                         System.currentTimeMillis() );
+                                         10010 );
         StockTick tick3 = new StockTick( 3,
                                          "ACME",
                                          10,
-                                         System.currentTimeMillis() );
+                                         10100 );
         StockTick tick4 = new StockTick( 4,
                                          "DROO",
                                          50,
-                                         System.currentTimeMillis() );
+                                         11000 );
 
         InternalFactHandle handle1 = (InternalFactHandle) session.insert( tick1 );
         InternalFactHandle handle2 = (InternalFactHandle) session.insert( tick2 );
@@ -144,22 +144,22 @@
         StockTick tick1 = new StockTick( 1,
                                          "DROO",
                                          50,
-                                         System.currentTimeMillis(),
+                                         10000,
                                          5 );
         StockTick tick2 = new StockTick( 2,
                                          "ACME",
                                          10,
-                                         System.currentTimeMillis(),
+                                         11000,
                                          10 );
         StockTick tick3 = new StockTick( 3,
                                          "ACME",
                                          10,
-                                         System.currentTimeMillis(),
+                                         12000,
                                          8 );
         StockTick tick4 = new StockTick( 4,
                                          "DROO",
                                          50,
-                                         System.currentTimeMillis(),
+                                         13000,
                                          7 );
 
         InternalFactHandle handle1 = (InternalFactHandle) wm.insert( tick1 );
@@ -182,6 +182,15 @@
         EventFactHandle eh3 = (EventFactHandle) handle3;
         EventFactHandle eh4 = (EventFactHandle) handle4;
 
+        assertEquals( tick1.getTime(),
+                      eh1.getStartTimestamp() );
+        assertEquals( tick2.getTime(),
+                      eh2.getStartTimestamp() );
+        assertEquals( tick3.getTime(),
+                      eh3.getStartTimestamp() );
+        assertEquals( tick4.getTime(),
+                      eh4.getStartTimestamp() );
+
         assertEquals( tick1.getDuration(),
                       eh1.getDuration() );
         assertEquals( tick2.getDuration(),

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_CEP_SimpleEventAssertionWithDuration.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_CEP_SimpleEventAssertionWithDuration.drl	2008-11-11 00:25:09 UTC (rev 23809)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_CEP_SimpleEventAssertionWithDuration.drl	2008-11-11 00:29:40 UTC (rev 23810)
@@ -7,6 +7,7 @@
 declare StockTick 
     @role( event )
     @duration( duration )
+    @timestamp( time )
 end
 
 rule "Check event"

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooFactHandleFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooFactHandleFactory.java	2008-11-11 00:25:09 UTC (rev 23809)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooFactHandleFactory.java	2008-11-11 00:29:40 UTC (rev 23810)
@@ -16,6 +16,8 @@
  * limitations under the License.
  */
 
+import java.sql.Date;
+
 import org.drools.common.AbstractFactHandleFactory;
 import org.drools.common.DefaultFactHandle;
 import org.drools.common.EventFactHandle;
@@ -31,11 +33,13 @@
     public ReteooFactHandleFactory() {
         super();
     }
-    
-    public ReteooFactHandleFactory(int id, long counter) {
-        super( id, counter );     
-    }    
 
+    public ReteooFactHandleFactory(int id,
+                                   long counter) {
+        super( id,
+               counter );
+    }
+
     /* (non-Javadoc)
      * @see org.drools.reteoo.FactHandleFactory#newFactHandle(long)
      */
@@ -46,7 +50,18 @@
                                                      final InternalWorkingMemory workingMemory) {
         if ( conf != null && conf.isEvent() ) {
             TypeDeclaration type = conf.getTypeDeclaration();
-            long timestamp = workingMemory.getTimerService().getCurrentTime();
+            long timestamp;
+            if ( type.getTimestampExtractor() != null ) {
+                if ( Date.class.isAssignableFrom( type.getTimestampExtractor().getExtractToClass() ) ) {
+                    timestamp = ((Date) type.getTimestampExtractor().getValue( workingMemory,
+                                                                               object )).getTime();
+                } else {
+                    timestamp = type.getTimestampExtractor().getLongValue( workingMemory,
+                                                                           object );
+                }
+            } else {
+                timestamp = workingMemory.getTimerService().getCurrentTime();
+            }
             long duration = 0;
             if ( type.getDurationExtractor() != null ) {
                 duration = type.getDurationExtractor().getLongValue( workingMemory,
@@ -70,9 +85,11 @@
     public FactHandleFactory newInstance() {
         return new ReteooFactHandleFactory();
     }
-    
-    public FactHandleFactory newInstance(int id, long counter) {
-        return new ReteooFactHandleFactory(id, counter);
+
+    public FactHandleFactory newInstance(int id,
+                                         long counter) {
+        return new ReteooFactHandleFactory( id,
+                                            counter );
     }
 
     public Class getFactHandleType() {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/TypeDeclaration.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/TypeDeclaration.java	2008-11-11 00:25:09 UTC (rev 23809)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/TypeDeclaration.java	2008-11-11 00:29:40 UTC (rev 23810)
@@ -22,6 +22,7 @@
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import java.io.Serializable;
 
 import org.drools.factmodel.ClassDefinition;
 import org.drools.facttemplates.FactTemplate;
@@ -36,7 +37,6 @@
  */
 public class TypeDeclaration
     implements
-    AcceptsReadAccessor,
     Externalizable {
 
     public static final String ATTR_CLASS     = "class";
@@ -74,16 +74,17 @@
         }
     }
 
-    private String                         typeName;
-    private Role                           role;
-    private Format                         format;
-    private String                         timestampAttribute;
-    private String                         durationAttribute;
+    private String               typeName;
+    private Role                 role;
+    private Format               format;
+    private String               timestampAttribute;
+    private String               durationAttribute;
     private InternalReadAccessor durationExtractor;
-    private transient Class< ? >                     typeClass;
-    private FactTemplate                   typeTemplate;
-    private ClassDefinition                typeClassDef;
-
+    private InternalReadAccessor timestampExtractor;
+    private transient Class< ? > typeClass;
+    private FactTemplate         typeTemplate;
+    private ClassDefinition      typeClassDef;
+    
     public TypeDeclaration() {
     }
 
@@ -108,6 +109,7 @@
         this.typeTemplate = (FactTemplate) in.readObject();
         this.typeClassDef = (ClassDefinition) in.readObject();
         this.durationExtractor = (InternalReadAccessor) in.readObject();
+        this.timestampExtractor = (InternalReadAccessor) in.readObject();
     }
 
     public void writeExternal(ObjectOutput out) throws IOException {
@@ -120,11 +122,8 @@
         out.writeObject( typeTemplate );
         out.writeObject( typeClassDef );
         out.writeObject( durationExtractor );
+        out.writeObject( timestampExtractor );
     }
-    
-    public void setReadAccessor(InternalReadAccessor readAccessor) {
-        this.durationExtractor = readAccessor;
-    }    
 
     /**
      * @return the type
@@ -201,7 +200,7 @@
      */
     public void setTypeClass(Class< ? > typeClass) {
         this.typeClass = typeClass;
-        if( this.typeClassDef != null ) {
+        if ( this.typeClassDef != null ) {
             this.typeClassDef.setDefinedClass( this.typeClass );
         }
     }
@@ -278,4 +277,25 @@
         this.typeClassDef = typeClassDef;
     }
 
+    public InternalReadAccessor getTimestampExtractor() {
+        return timestampExtractor;
+    }
+
+    public void setTimestampExtractor(InternalReadAccessor timestampExtractor) {
+        this.timestampExtractor = timestampExtractor;
+    }
+
+    public class DurationAccessorSetter implements AcceptsReadAccessor, Serializable {
+        private static final long serialVersionUID = 1429300982505284833L;
+        public void setReadAccessor(InternalReadAccessor readAccessor) {
+            setDurationExtractor( readAccessor );
+        }
+    }
+    
+    public class TimestampAccessorSetter implements AcceptsReadAccessor, Serializable {
+        private static final long serialVersionUID = 8656678871125722903L;
+        public void setReadAccessor(InternalReadAccessor readAccessor) {
+            setTimestampExtractor( readAccessor );
+        }
+    }
 }

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/builder/BuildUtilsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/builder/BuildUtilsTest.java	2008-11-11 00:25:09 UTC (rev 23809)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/builder/BuildUtilsTest.java	2008-11-11 00:29:40 UTC (rev 23810)
@@ -34,7 +34,7 @@
 import static org.drools.time.Interval.*;
 
 /**
- * @author admin
+ * @author etirelli
  *
  */
 public class BuildUtilsTest extends TestCase {




More information about the jboss-svn-commits mailing list