[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