[jboss-svn-commits] JBL Code SVN: r26267 - in labs/jbossrules/trunk: drools-core/src/main/java/org/drools/common and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Apr 26 07:36:02 EDT 2009


Author: mark.proctor at jboss.com
Date: 2009-04-26 07:36:02 -0400 (Sun, 26 Apr 2009)
New Revision: 26267

Added:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DisconnectedFactHandle.java
Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultFactHandle.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/IdentityAssertMapComparator.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalFactHandle.java
Log:
-disonnected facthandles now work

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-04-26 11:00:44 UTC (rev 26266)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2009-04-26 11:36:02 UTC (rev 26267)
@@ -97,6 +97,8 @@
 import org.drools.builder.ResourceType;
 import org.drools.common.AbstractWorkingMemory;
 import org.drools.common.DefaultAgenda;
+import org.drools.common.DefaultFactHandle;
+import org.drools.common.DisconnectedFactHandle;
 import org.drools.common.InternalFactHandle;
 import org.drools.compiler.DescrBuildError;
 import org.drools.compiler.DrlParser;
@@ -1669,6 +1671,20 @@
         session.dispose();
 
     }
+    
+    public void testDisconnectedFactHandle() {
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        DefaultFactHandle helloHandle = ( DefaultFactHandle ) ksession.insert( "hello" );
+        DefaultFactHandle goodbyeHandle = ( DefaultFactHandle ) ksession.insert( "goodbye" );
+        
+        FactHandle key = new DisconnectedFactHandle( helloHandle.toExternalForm() );
+        assertEquals( "hello", ksession.getObject( key ) );
+        
+        key = new DisconnectedFactHandle( goodbyeHandle.toExternalForm() );
+        assertEquals( "goodbye", ksession.getObject( key ) );
+        
+    }
 
     public void testBigDecimal() throws Exception {
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultFactHandle.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultFactHandle.java	2009-04-26 11:00:44 UTC (rev 26266)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultFactHandle.java	2009-04-26 11:36:02 UTC (rev 26267)
@@ -75,6 +75,17 @@
         this.object = object;
         this.objectHashCode = object.hashCode();
     }
+    
+    public DefaultFactHandle(final int id,
+                             final int objectHashCode,
+                             final long recency) {
+        this.id = id;
+        this.recency = recency;
+        this.objectHashCode = objectHashCode;
+    }
+        
+    
+    
 
     // ----------------------------------------------------------------------
     // Instance members
@@ -99,6 +110,10 @@
         return this.objectHashCode;
     }
     
+    public int getIdentityHashCode() {
+        return System.identityHashCode( this.object );
+    }    
+    
     protected void setObjectHashCode( int hashCode ) {
         this.objectHashCode = hashCode;
     }
@@ -111,17 +126,19 @@
     }
 
     /**
+     * format_version:id:identity:hashcode:recency
+     * 
      * @see FactHandle
      */
     public String toExternalForm() {
-        return "[fact fid:" + this.id + ":" + this.recency + ":" + this.object + "]";
+        return "0:" + this.id + ":" + getIdentityHashCode() + ":" + getObjectHashCode() + ":" + getRecency();
     }
 
     /**
      * @see Object
      */
     public String toString() {
-        return toExternalForm();
+        return "[fact " + toExternalForm() + ":" + this.object + "]";
     }
 
     public long getRecency() {

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DisconnectedFactHandle.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DisconnectedFactHandle.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DisconnectedFactHandle.java	2009-04-26 11:36:02 UTC (rev 26267)
@@ -0,0 +1,118 @@
+package org.drools.common;
+
+import org.drools.reteoo.LeftTuple;
+import org.drools.reteoo.RightTuple;
+import org.drools.runtime.rule.WorkingMemoryEntryPoint;
+
+public class DisconnectedFactHandle
+    implements
+    InternalFactHandle {
+
+    private int  id;
+    private int  identityHashCode;
+    private int  objectHashCode;
+    private long recency;
+
+    public DisconnectedFactHandle(int id,
+                                  int identityHashCode,
+                                  int objectHashCode,
+                                  long recency) {
+        this.id = id;
+        this.identityHashCode = identityHashCode;
+        this.objectHashCode = objectHashCode;
+        this.recency = recency;
+    }
+    
+    public DisconnectedFactHandle(String externalFormat) {
+        String[] elements = externalFormat.split( ":" );
+        if ( elements.length != 5 ) {
+            throw new IllegalArgumentException( "externalFormat did not have enough elements" );
+        }
+        
+        this.id = Integer.parseInt( elements[1] );
+        this.identityHashCode = Integer.parseInt( elements[2] );
+        this.objectHashCode = Integer.parseInt( elements[3] );
+        this.recency = Long.parseLong( elements[4] );
+    }
+
+    public int getId() {
+        return this.id;
+    }
+
+    public int getIdentityHashCode() {
+        return this.identityHashCode;
+    }
+
+    public int getObjectHashCode() {
+        return this.objectHashCode;
+    }
+
+    public long getRecency() {
+        return this.recency;
+    }
+
+    public LeftTuple getLeftTuple() {
+        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
+    }
+
+    public Object getObject() {
+        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
+    }
+
+    public WorkingMemoryEntryPoint getEntryPoint() {
+        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
+    }
+
+    public EqualityKey getEqualityKey() {
+        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
+    }
+
+    public RightTuple getRightTuple() {
+        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
+    }
+
+    public void invalidate() {
+        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
+    }
+
+    public boolean isEvent() {
+        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
+    }
+
+    public boolean isValid() {
+        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
+    }
+
+    public void setEntryPoint(WorkingMemoryEntryPoint ep) {
+        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
+    }
+
+    public void setEqualityKey(EqualityKey key) {
+        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
+    }
+
+    public void setLeftTuple(LeftTuple leftTuple) {
+        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
+    }
+
+    public void setObject(Object object) {
+        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
+    }
+
+    public void setRecency(long recency) {
+        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
+    }
+
+    public void setRightTuple(RightTuple rightTuple) {
+        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
+    }
+
+    public DefaultFactHandle clone() {
+        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
+    }
+
+    public String toExternalForm() {
+        return "0" + this.id + ":" + this.identityHashCode + ":" + this.objectHashCode + ":" + this.recency;
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/IdentityAssertMapComparator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/IdentityAssertMapComparator.java	2009-04-26 11:00:44 UTC (rev 26266)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/IdentityAssertMapComparator.java	2009-04-26 11:36:02 UTC (rev 26267)
@@ -44,9 +44,10 @@
     public int hashCodeOf(final Object obj) {
         Object realObject = obj;
         if ( realObject instanceof FactHandle ) {
-            realObject = ((InternalFactHandle) obj).getObject();
+            return rehash( ((InternalFactHandle) obj).getIdentityHashCode() );
+        } else {
+            return rehash( System.identityHashCode( realObject ) );
         }
-        return rehash( System.identityHashCode( realObject ) );
     }
 
     public int rehash(int h) {
@@ -63,8 +64,8 @@
      */
     public boolean equal(final Object o1,
                          final Object o2) {
-        if ( o1 instanceof FactHandle ) {
-            return ((InternalFactHandle) o1).getObject() == ((InternalFactHandle) o2).getObject();
+        if ( o1 instanceof InternalFactHandle ) {
+            return ((InternalFactHandle) o1).getId() == ((InternalFactHandle) o2).getId();
         }
         Object left = o1;
         final InternalFactHandle handle = ((InternalFactHandle) o2);

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalFactHandle.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalFactHandle.java	2009-04-26 11:00:44 UTC (rev 26266)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalFactHandle.java	2009-04-26 11:36:02 UTC (rev 26267)
@@ -41,6 +41,8 @@
     public void invalidate();
     
     public boolean isValid();
+    
+    public int getIdentityHashCode();
 
     public int getObjectHashCode();
     
@@ -67,4 +69,6 @@
     
     public InternalFactHandle clone();
     
+    public String toExternalForm();
+    
 }
\ No newline at end of file




More information about the jboss-svn-commits mailing list