[jboss-svn-commits] JBL Code SVN: r7004 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools/common main/java/org/drools/reteoo main/java/org/drools/rule main/java/org/drools/spi main/java/org/drools/util test/java/org/drools/reteoo
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sat Oct 21 16:12:39 EDT 2006
Author: tirelli
Date: 2006-10-21 16:12:23 -0400 (Sat, 21 Oct 2006)
New Revision: 7004
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ScheduledAgendaItem.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Restriction.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractBaseLinkedListNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedList.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedListNode.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FromNodeTest.java
Log:
Fixing compilation problems and FromNode
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java 2006-10-21 17:23:59 UTC (rev 7003)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java 2006-10-21 20:12:23 UTC (rev 7004)
@@ -298,7 +298,7 @@
*/
public Activation[] getScheduledActivations() {
final List list = new ArrayList( this.scheduledActivations.size() );
- for ( LinkedListNode node = this.scheduledActivations.getFirst(); node != null; node = node.getNext() ) {
+ for ( LinkedListNode node = this.scheduledActivations.getFirst(); node != null; node = (LinkedListNode) node.getNext() ) {
list.add( node );
}
return (Activation[]) list.toArray( new Activation[list.size()] );
@@ -373,7 +373,7 @@
*/
public void clearActivationGroup(final ActivationGroup activationGroup) {
final EventSupport eventsupport = (EventSupport) this.workingMemory;
- final java.util.Iterator it = activationGroup.iterator();
+ final Iterator it = activationGroup.iterator();
for ( ActivationGroupNode node = (ActivationGroupNode) it.next() ; node != null; node = (ActivationGroupNode) it.next()) {
final Activation activation = node.getActivation();
activation.setActivationGroupNode( null );
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java 2006-10-21 17:23:59 UTC (rev 7003)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java 2006-10-21 20:12:23 UTC (rev 7004)
@@ -18,7 +18,6 @@
import java.io.Serializable;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
import org.drools.base.evaluators.Operator;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ScheduledAgendaItem.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ScheduledAgendaItem.java 2006-10-21 17:23:59 UTC (rev 7003)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ScheduledAgendaItem.java 2006-10-21 20:12:23 UTC (rev 7004)
@@ -23,6 +23,7 @@
import org.drools.spi.Activation;
import org.drools.spi.PropagationContext;
import org.drools.spi.Tuple;
+import org.drools.util.Entry;
import org.drools.util.LinkedList;
import org.drools.util.LinkedListNode;
@@ -128,12 +129,12 @@
return this.activationNumber;
}
- public LinkedListNode getNext() {
+ public Entry getNext() {
return this.next;
}
- public void setNext(final LinkedListNode next) {
- this.next = next;
+ public void setNext(final Entry next) {
+ this.next = (LinkedListNode) next;
}
public LinkedListNode getPrevious() {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java 2006-10-21 17:23:59 UTC (rev 7003)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java 2006-10-21 20:12:23 UTC (rev 7004)
@@ -11,6 +11,7 @@
import org.drools.spi.Evaluator;
import org.drools.spi.FieldExtractor;
import org.drools.spi.PropagationContext;
+import org.drools.util.Entry;
import org.drools.util.Iterator;
import org.drools.util.LinkedList;
import org.drools.util.LinkedListNode;
@@ -415,6 +416,7 @@
public static class FieldIndex
implements
LinkedListNode {
+ private static final long serialVersionUID = 3853708964744065172L;
private final int index;
private FieldExtractor fieldExtactor;
@@ -463,7 +465,7 @@
this.count--;
}
- public LinkedListNode getNext() {
+ public Entry getNext() {
return this.next;
}
@@ -471,8 +473,8 @@
return this.previous;
}
- public void setNext(final LinkedListNode next) {
- this.next = next;
+ public void setNext(final Entry next) {
+ this.next = (LinkedListNode) next;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java 2006-10-21 17:23:59 UTC (rev 7003)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java 2006-10-21 20:12:23 UTC (rev 7004)
@@ -12,7 +12,10 @@
import org.drools.spi.DataProvider;
import org.drools.spi.PropagationContext;
import org.drools.util.Iterator;
-import org.drools.util.ObjectHashMap.ObjectEntry;
+import org.drools.util.LinkedList;
+import org.drools.util.LinkedListEntry;
+import org.drools.util.TupleHashTable;
+import org.drools.util.LinkedList.LinkedListIterator;
public class FromNode extends TupleSource
implements
@@ -25,8 +28,8 @@
private DataProvider dataProvider;
private TupleSource tupleSource;
- private AlphaNodeFieldConstraint[] constraints;
- private BetaConstraints binder;
+ private AlphaNodeFieldConstraint[] alphaConstraints;
+ private BetaConstraints betaConstraints;
public FromNode(final int id,
final DataProvider dataProvider,
@@ -36,8 +39,8 @@
super( id );
this.dataProvider = dataProvider;
this.tupleSource = tupleSource;
- this.constraints = constraints;
- this.binder = ( binder == null ) ? EmptyBetaConstraints.getInstance() : binder;
+ this.alphaConstraints = constraints;
+ this.betaConstraints = (binder == null) ? EmptyBetaConstraints.getInstance() : binder;
}
/**
@@ -49,33 +52,47 @@
final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
memory.getTupleMemory().add( leftTuple );
- this.binder.updateFromTuple( workingMemory, leftTuple );
+ LinkedList list = new LinkedList();
+ this.betaConstraints.updateFromTuple( workingMemory,
+ leftTuple );
for ( final java.util.Iterator it = this.dataProvider.getResults( leftTuple,
- workingMemory,
- context ); it.hasNext(); ) {
+ workingMemory,
+ context ); it.hasNext(); ) {
final Object object = it.next();
- // First alpha node filters
- for ( int i = 0, length = this.constraints.length; i < length; i++ ) {
- if ( !this.constraints[i].isAllowed( object,
- workingMemory ) ) {
- // next iteration
+ if( this.alphaConstraints != null ) {
+ // First alpha node filters
+ boolean isAllowed = true;
+ for ( int i = 0, length = this.alphaConstraints.length; i < length; i++ ) {
+ if ( !this.alphaConstraints[i].isAllowed( object,
+ workingMemory ) ) {
+ // next iteration
+ isAllowed = false;
+ break;
+ }
+ }
+ if( !isAllowed ) {
continue;
}
}
- if ( this.binder.isAllowedCachedLeft( object ) ) {
+ if ( this.betaConstraints.isAllowedCachedLeft( object ) ) {
final InternalFactHandle handle = workingMemory.getFactHandleFactory().newFactHandle( object );
-
- memory.getCreatedHandles().put( leftTuple, handle );
+ list.add( new LinkedListEntry( handle ) );
+
this.sink.propagateAssertTuple( leftTuple,
handle,
context,
workingMemory );
}
}
+ if ( !list.isEmpty() ) {
+ memory.getCreatedHandles().put( leftTuple,
+ list );
+ }
+
}
public void retractTuple(final ReteTuple leftTuple,
@@ -83,19 +100,20 @@
final InternalWorkingMemory workingMemory) {
final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
- memory.getTupleMemory().remove( leftTuple );
- final InternalFactHandle handle = (InternalFactHandle) memory.getCreatedHandles().remove( leftTuple );
+ ReteTuple tuple = (ReteTuple) memory.getTupleMemory().remove( leftTuple );
+ LinkedList list = (LinkedList) memory.getCreatedHandles().remove( tuple );
// if tuple was propagated
- if ( handle != null ) {
-
- this.sink.propagateRetractTuple( leftTuple,
- handle,
- context,
- workingMemory );
-
- // Destroying the 'from' result object
- workingMemory.getFactHandleFactory().destroyFactHandle( handle );
+ if ( list != null ) {
+ LinkedListIterator it = (LinkedListIterator) list.iterator();
+ for ( LinkedListEntry entry = (LinkedListEntry) it.next(); entry != null; entry = (LinkedListEntry) it.next() ) {
+ InternalFactHandle handle = (InternalFactHandle) entry.getObject();
+ this.sink.propagateRetractTuple( leftTuple,
+ handle,
+ context,
+ workingMemory );
+ workingMemory.getFactHandleFactory().destroyFactHandle( handle );
+ }
}
}
@@ -112,13 +130,15 @@
PropagationContext.RULE_ADDITION,
null,
null );
- this.tupleSource.updateSink( this, propagationContext, workingMemory );
+ this.tupleSource.updateSink( this,
+ propagationContext,
+ workingMemory );
}
}
public void remove(final BaseNode node,
final InternalWorkingMemory[] workingMemories) {
-
+
if ( !node.isInUse() ) {
removeTupleSink( (TupleSink) node );
}
@@ -130,26 +150,36 @@
}
}
this.tupleSource.remove( this,
- workingMemories );
+ workingMemories );
}
- public Object createMemory(final RuleBaseConfiguration config) {
- return this.binder.createBetaMemory();
- }
-
public void updateSink(TupleSink sink,
PropagationContext context,
InternalWorkingMemory workingMemory) {
-
+
final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
-
- final Iterator it = memory.getCreatedHandles().iterator();
- for ( ObjectEntry entry = (ObjectEntry) it.next(); entry != null; entry = (ObjectEntry) it.next()) {
- sink.assertTuple( new ReteTuple( (ReteTuple)entry.getKey(),
- (InternalFactHandle) entry.getValue()),
- context,
- workingMemory );
+ Iterator tupleIter = memory.getTupleMemory().iterator();
+ for ( ReteTuple tuple = (ReteTuple) tupleIter.next(); tuple != null; tuple = (ReteTuple) tupleIter.next() ) {
+ LinkedList list = (LinkedList) memory.getCreatedHandles().remove( tuple );
+ if ( list == null ) {
+ continue;
+ }
+ Iterator it = list.iterator();
+ for ( LinkedListEntry entry = (LinkedListEntry) it.next(); entry != null; entry = (LinkedListEntry) it.next() ) {
+ InternalFactHandle handle = (InternalFactHandle) entry.getObject();
+ this.sink.propagateRetractTuple( tuple,
+ handle,
+ context,
+ workingMemory );
+ workingMemory.getFactHandleFactory().destroyFactHandle( handle );
+ }
}
}
+
+ public Object createMemory(final RuleBaseConfiguration config) {
+ return new BetaMemory( new TupleHashTable(),
+ null );
+ }
+
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java 2006-10-21 17:23:59 UTC (rev 7003)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java 2006-10-21 20:12:23 UTC (rev 7004)
@@ -487,7 +487,7 @@
column.getFactIndex(),
notNode ) );
- final BetaConstraints identityBinder = new DefaultBetaConstraints( new InstanceEqualsConstraint( column ) );
+ final BetaConstraints identityBinder = new DefaultBetaConstraints( new BetaNodeFieldConstraint[] { new InstanceEqualsConstraint( column ) } );
notNode = (NotNode) attachNode( new NotNode( this.id++,
tupleSource,
adapter,
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java 2006-10-21 17:23:59 UTC (rev 7003)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java 2006-10-21 20:12:23 UTC (rev 7004)
@@ -55,20 +55,20 @@
return this.evaluator;
}
+ public boolean isAllowed(final Extractor extractor,
+ final Object object,
+ final InternalWorkingMemory workingMemoiry) {
+ throw new UnsupportedOperationException( "does not support method call isAllowed(Object object, InternalWorkingMemory workingMemoiry)" );
+ }
+
public boolean isAllowedCachedLeft(final ContextEntry context,
final Object object) {
- // return this.evaluator.evaluate( ((VariableContextEntry) context).left,
- // ((VariableContextEntry) context).extractor,
- // object );
return this.evaluator.evaluateCachedLeft( (VariableContextEntry) context,
object );
}
public boolean isAllowedCachedRight(final ReteTuple tuple,
final ContextEntry context) {
- // return this.evaluator.evaluate( this.declaration.getExtractor(),
- // tuple.get( this.declaration ).getObject(),
- // ((VariableContextEntry) context).right );
return this.evaluator.evaluateCachedRight( (VariableContextEntry) context,
tuple.get( this.declaration ).getObject() );
}
@@ -104,9 +104,4 @@
other.requiredDeclarations );
}
- public boolean isAllowed(final Extractor extractor,
- final Object object,
- final InternalWorkingMemory workingMemoiry) {
- throw new UnsupportedOperationException( "does not support method call isAllowed(Object object, InternalWorkingMemory workingMemoiry)" );
- }
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Restriction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Restriction.java 2006-10-21 17:23:59 UTC (rev 7003)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Restriction.java 2006-10-21 20:12:23 UTC (rev 7004)
@@ -14,7 +14,7 @@
public boolean isAllowed(Extractor extractor,
Object object,
- InternalWorkingMemory workingMemoiry);
+ InternalWorkingMemory workingMemory);
public boolean isAllowedCachedLeft(ContextEntry context,
Object object);
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractBaseLinkedListNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractBaseLinkedListNode.java 2006-10-21 17:23:59 UTC (rev 7003)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractBaseLinkedListNode.java 2006-10-21 20:12:23 UTC (rev 7004)
@@ -27,6 +27,9 @@
public class AbstractBaseLinkedListNode
implements
LinkedListNode {
+
+ private static final long serialVersionUID = -3926700105253864146L;
+
private LinkedListNode previous;
private LinkedListNode next;
@@ -40,15 +43,15 @@
/* (non-Javadoc)
* @see org.drools.reteoo.LinkedListNode#getNext()
*/
- public LinkedListNode getNext() {
+ public Entry getNext() {
return this.next;
}
/* (non-Javadoc)
* @see org.drools.reteoo.LinkedListNode#setNext(org.drools.reteoo.LinkedListNode)
*/
- public void setNext(final LinkedListNode next) {
- this.next = next;
+ public void setNext(final Entry next) {
+ this.next = (LinkedListNode) next;
}
/* (non-Javadoc)
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedList.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedList.java 2006-10-21 17:23:59 UTC (rev 7003)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedList.java 2006-10-21 20:12:23 UTC (rev 7004)
@@ -90,7 +90,7 @@
public void remove(final LinkedListNode node) {
if ( (this.firstNode != node) && (this.lastNode != node) ) {
node.getPrevious().setNext( node.getNext() );
- node.getNext().setPrevious( node.getPrevious() );
+ ((LinkedListNode)node.getNext()).setPrevious( node.getPrevious() );
this.size--;
node.setPrevious( null );
node.setNext( null );
@@ -134,7 +134,7 @@
return null;
}
final LinkedListNode node = this.firstNode;
- this.firstNode = node.getNext();
+ this.firstNode = (LinkedListNode) node.getNext();
node.setNext( null );
if ( this.firstNode != null ) {
this.firstNode.setPrevious( null );
@@ -159,7 +159,7 @@
newNode.setNext( node );
this.firstNode = newNode;
} else {
- existingNode.getNext().setPrevious( newNode );
+ ((LinkedListNode)existingNode.getNext()).setPrevious( newNode );
newNode.setNext( existingNode.getNext() );
existingNode.setNext( newNode );
newNode.setPrevious( existingNode );
@@ -217,7 +217,7 @@
public int hashCode() {
final int PRIME = 31;
int result = 1;
- for ( LinkedListNode node = this.firstNode; node != null; node = node.getNext() ) {
+ for ( LinkedListNode node = this.firstNode; node != null; node = (LinkedListNode)node.getNext() ) {
result = PRIME * result + node.hashCode();
}
return result;
@@ -238,7 +238,7 @@
return false;
}
- for ( LinkedListNode thisNode = this.firstNode, otherNode = other.firstNode; thisNode != null && otherNode != null; thisNode = thisNode.getNext(), otherNode = otherNode.getNext() ) {
+ for ( LinkedListNode thisNode = this.firstNode, otherNode = other.firstNode; thisNode != null && otherNode != null; thisNode = (LinkedListNode)thisNode.getNext(), otherNode = (LinkedListNode)otherNode.getNext() ) {
if ( !thisNode.equals( otherNode ) ) {
return false;
}
@@ -248,27 +248,28 @@
public Iterator iterator() {
this.iterator.reset( this );
- return this.iterator();
+ return this.iterator;
}
/**
* Returns a list iterator
* @return
*/
- public class LinkedListIterator {
+ public class LinkedListIterator implements Iterator {
private LinkedList list;
private LinkedListNode current;
public void reset( LinkedList list) {
this.list = list;
+ this.current = this.list.firstNode;
}
- public LinkedListNode next() {
- if ( this.current == null ) {
- this.current = this.list.firstNode;
+ public Entry next() {
+ if( this.current == null ){
+ return null;
}
LinkedListNode node = this.current;
- current = current.getNext();
+ current = (LinkedListNode) current.getNext();
return node;
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedListNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedListNode.java 2006-10-21 17:23:59 UTC (rev 7003)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedListNode.java 2006-10-21 20:12:23 UTC (rev 7004)
@@ -28,21 +28,21 @@
*/
public interface LinkedListNode
extends
- Serializable {
+ Entry, Serializable {
/**
* Returns the next node
* @return
* The next LinkedListNode
*/
- public LinkedListNode getNext();
+ public Entry getNext();
/**
* Sets the next node
* @param next
* The next LinkedListNode
*/
- public void setNext(LinkedListNode next);
+ public void setNext(Entry next);
/**
* Returns the previous node
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FromNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FromNodeTest.java 2006-10-21 17:23:59 UTC (rev 7003)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FromNodeTest.java 2006-10-21 20:12:23 UTC (rev 7004)
@@ -15,8 +15,11 @@
import org.drools.base.ClassObjectType;
import org.drools.base.ValueType;
import org.drools.base.evaluators.Operator;
+import org.drools.common.BetaConstraints;
import org.drools.common.DefaultFactHandle;
+import org.drools.common.InternalFactHandle;
import org.drools.common.PropagationContextImpl;
+import org.drools.common.SingleBetaConstraints;
import org.drools.rule.Column;
import org.drools.rule.Declaration;
import org.drools.rule.LiteralConstraint;
@@ -27,6 +30,8 @@
import org.drools.spi.MockField;
import org.drools.spi.PropagationContext;
import org.drools.spi.Tuple;
+import org.drools.util.LinkedList;
+import org.drools.util.LinkedListEntry;
public class FromNodeTest extends TestCase {
@@ -47,23 +52,23 @@
final List list = new ArrayList();
final Cheese cheese1 = new Cheese( "cheddar",
- 20 );
+ 20 );
final Cheese cheese2 = new Cheese( "brie",
- 20 );
+ 20 );
list.add( cheese1 );
list.add( cheese2 );
final MockDataProvider dataProvider = new MockDataProvider( list );
final FromNode from = new FromNode( 3,
- dataProvider,
- null,
- new AlphaNodeFieldConstraint[]{constraint},
- null );
+ dataProvider,
+ null,
+ new AlphaNodeFieldConstraint[]{constraint},
+ null );
final MockTupleSink sink = new MockTupleSink( 5 );
from.addTupleSink( sink );
final Person person1 = new Person( "xxx1",
- 30 );
+ 30 );
final FactHandle person1Handle = workingMemory.assertObject( person1 );
final ReteTuple tuple1 = new ReteTuple( (DefaultFactHandle) person1Handle );
from.assertTuple( tuple1,
@@ -77,7 +82,7 @@
//Set cheese1 to stilton and it should now propagate
cheese1.setType( "stilton" );
final Person person2 = new Person( "xxx2",
- 30 );
+ 30 );
final FactHandle person2Handle = workingMemory.assertObject( person2 );
final ReteTuple tuple2 = new ReteTuple( (DefaultFactHandle) person2Handle );
from.assertTuple( tuple2,
@@ -89,13 +94,13 @@
asserted.size() );
Tuple tuple = (Tuple) ((Object[]) asserted.get( 0 ))[0];
assertSame( person2,
- tuple.getFactHandles()[0].getObject() );
- assertSame( cheese1,
tuple.getFactHandles()[1].getObject() );
+ assertSame( cheese1,
+ tuple.getFactHandles()[0].getObject() );
cheese2.setType( "stilton" );
final Person person3 = new Person( "xxx2",
- 30 );
+ 30 );
final FactHandle person3Handle = workingMemory.assertObject( person3 );
final ReteTuple tuple3 = new ReteTuple( (DefaultFactHandle) person3Handle );
from.assertTuple( tuple3,
@@ -106,14 +111,14 @@
asserted.size() );
tuple = (Tuple) ((Object[]) asserted.get( 1 ))[0];
assertSame( person3,
- tuple.getFactHandles()[0].getObject() );
- assertSame( cheese1,
tuple.getFactHandles()[1].getObject() );
+ assertSame( cheese1,
+ tuple.getFactHandles()[0].getObject() );
tuple = (Tuple) ((Object[]) asserted.get( 2 ))[0];
assertSame( person3,
- tuple.getFactHandles()[0].getObject() );
- assertSame( cheese2,
tuple.getFactHandles()[1].getObject() );
+ assertSame( cheese2,
+ tuple.getFactHandles()[0].getObject() );
assertNotSame( cheese1,
cheese2 );
@@ -135,35 +140,36 @@
"age" );
final Column column = new Column( 0,
- new ClassObjectType( Person.class ) );
+ new ClassObjectType( Person.class ) );
final Declaration declaration = new Declaration( "age",
- ageExtractor,
- column );
+ ageExtractor,
+ column );
final VariableConstraint variableConstraint = new VariableConstraint( priceExtractor,
- declaration,
- ValueType.INTEGER_TYPE.getEvaluator( Operator.EQUAL ) );
+ declaration,
+ ValueType.PINTEGER_TYPE.getEvaluator( Operator.EQUAL ) );
+ final BetaConstraints betaConstraints = new SingleBetaConstraints( variableConstraint, false );
final List list = new ArrayList();
final Cheese cheese1 = new Cheese( "cheddar",
- 18 );
+ 18 );
final Cheese cheese2 = new Cheese( "brie",
- 12 );
+ 12 );
list.add( cheese1 );
list.add( cheese2 );
final MockDataProvider dataProvider = new MockDataProvider( list );
final FromNode from = new FromNode( 3,
- dataProvider,
- null,
- new AlphaNodeFieldConstraint[]{variableConstraint},
- null );
+ dataProvider,
+ null,
+ null,
+ betaConstraints );
final MockTupleSink sink = new MockTupleSink( 5 );
from.addTupleSink( sink );
final Person person1 = new Person( "xxx1",
- 30 );
+ 30 );
final FactHandle person1Handle = workingMemory.assertObject( person1 );
final ReteTuple tuple1 = new ReteTuple( (DefaultFactHandle) person1Handle );
from.assertTuple( tuple1,
@@ -177,7 +183,7 @@
//Set cheese1 to stilton and it should now propagate
cheese1.setPrice( 30 );
final Person person2 = new Person( "xxx2",
- 30 );
+ 30 );
final FactHandle person2Handle = workingMemory.assertObject( person2 );
final ReteTuple tuple2 = new ReteTuple( (DefaultFactHandle) person2Handle );
from.assertTuple( tuple2,
@@ -189,13 +195,13 @@
asserted.size() );
Tuple tuple = (Tuple) ((Object[]) asserted.get( 0 ))[0];
assertSame( person2,
- tuple.getFactHandles()[0].getObject() );
- assertSame( cheese1,
tuple.getFactHandles()[1].getObject() );
+ assertSame( cheese1,
+ tuple.getFactHandles()[0].getObject() );
cheese2.setPrice( 30 );
final Person person3 = new Person( "xxx2",
- 30 );
+ 30 );
final FactHandle person3Handle = workingMemory.assertObject( person3 );
final ReteTuple tuple3 = new ReteTuple( (DefaultFactHandle) person3Handle );
from.assertTuple( tuple3,
@@ -206,14 +212,14 @@
asserted.size() );
tuple = (Tuple) ((Object[]) asserted.get( 1 ))[0];
assertSame( person3,
- tuple.getFactHandles()[0].getObject() );
- assertSame( cheese1,
tuple.getFactHandles()[1].getObject() );
+ assertSame( cheese1,
+ tuple.getFactHandles()[0].getObject() );
tuple = (Tuple) ((Object[]) asserted.get( 2 ))[0];
assertSame( person3,
- tuple.getFactHandles()[0].getObject() );
- assertSame( cheese2,
tuple.getFactHandles()[1].getObject() );
+ assertSame( cheese2,
+ tuple.getFactHandles()[0].getObject() );
assertNotSame( cheese1,
cheese2 );
@@ -236,25 +242,25 @@
List list = new ArrayList();
final Cheese cheese1 = new Cheese( "stilton",
- 5 );
+ 5 );
final Cheese cheese2 = new Cheese( "stilton",
- 15 );
+ 15 );
list.add( cheese1 );
list.add( cheese2 );
final MockDataProvider dataProvider = new MockDataProvider( list );
final FromNode from = new FromNode( 3,
- dataProvider,
- null,
- new AlphaNodeFieldConstraint[]{constraint},
- null );
+ dataProvider,
+ null,
+ new AlphaNodeFieldConstraint[]{constraint},
+ null );
final MockTupleSink sink = new MockTupleSink( 5 );
from.addTupleSink( sink );
final List asserted = sink.getAsserted();
final Person person1 = new Person( "xxx2",
- 30 );
+ 30 );
final FactHandle person1Handle = workingMemory.assertObject( person1 );
final ReteTuple tuple = new ReteTuple( (DefaultFactHandle) person1Handle );
from.assertTuple( tuple,
@@ -266,124 +272,25 @@
final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( from );
assertEquals( 1,
- memory.getLeftTupleMemory().size() );
- assertEquals( 0,
- memory.getRightObjectMemory().size() );
+ memory.getTupleMemory().size() );
+ assertNull( memory.getObjectMemory() );
assertEquals( 2,
- tuple.getTupleMatches().size() );
+ ((LinkedList) memory.getCreatedHandles().get( tuple )).size() );
- list = new ArrayList();
- for ( final Iterator it = tuple.getTupleMatches().values().iterator(); it.hasNext(); ) {
- TupleMatch tupleMatch = (TupleMatch) it.next();
- list.add( tupleMatch.getObjectMatches().getFactHandle().getObject() );
- }
- assertEquals( 2,
- list.size() );
- assertTrue( list.contains( cheese1 ) );
- assertTrue( list.contains( cheese2 ) );
+ InternalFactHandle handle1 = (InternalFactHandle) ((LinkedListEntry)((LinkedList) memory.getCreatedHandles().get( tuple )).getFirst()).getObject();
+ InternalFactHandle handle2 = (InternalFactHandle) ((LinkedListEntry)((LinkedList) memory.getCreatedHandles().get( tuple )).getLast()).getObject();
+ assertEquals( handle1.getObject(), cheese1 );
+ assertEquals( handle2.getObject(), cheese2 );
from.retractTuple( tuple,
context,
workingMemory );
assertEquals( 0,
- memory.getLeftTupleMemory().size() );
- assertEquals( 0,
- memory.getRightObjectMemory().size() );
+ memory.getTupleMemory().size() );
+ assertNull( memory.getObjectMemory() );
}
- public void testModify() {
- final PropagationContext context = new PropagationContextImpl( 0,
- PropagationContext.ASSERTION,
- null,
- null );
- final ReteooWorkingMemory workingMemory = new ReteooWorkingMemory( 1,
- (ReteooRuleBase) RuleBaseFactory.newRuleBase() );
- final ClassFieldExtractor extractor = new ClassFieldExtractor( Cheese.class,
- "type" );
- final FieldValue field = new MockField( "stilton" );
- final LiteralConstraint constraint = new LiteralConstraint( extractor,
- ValueType.STRING_TYPE.getEvaluator( Operator.EQUAL ),
- field );
-
- final List list = new ArrayList();
- final Cheese cheese1 = new Cheese( "cheddar",
- 20 );
- final Cheese cheese2 = new Cheese( "brie",
- 20 );
- list.add( cheese1 );
- list.add( cheese2 );
- final MockDataProvider dataProvider = new MockDataProvider( list );
-
- final FromNode from = new FromNode( 3,
- dataProvider,
- null,
- new AlphaNodeFieldConstraint[]{constraint},
- null );
- final MockTupleSink sink = new MockTupleSink( 5 );
- from.addTupleSink( sink );
-
- final Person person1 = new Person( "xxx1",
- 30 );
- final FactHandle person1Handle = workingMemory.assertObject( person1 );
- final ReteTuple tuple1 = new ReteTuple( (DefaultFactHandle) person1Handle );
- from.assertTuple( tuple1,
- context,
- workingMemory );
-
- // nothing should be asserted, as cheese1 is cheddar and we are filtering on stilton
- assertEquals( 0,
- sink.getAsserted().size() );
-
- //Set cheese1 to stilton and it should now propagate
- cheese1.setType( "stilton" );
- from.modifyTuple( tuple1,
- context,
- workingMemory );
- final List asserted = sink.getAsserted();
- assertEquals( 1,
- asserted.size() );
- Tuple tuple = (Tuple) ((Object[]) asserted.get( 0 ))[0];
- assertSame( person1,
- tuple.getFactHandles()[0].getObject() );
- assertSame( cheese1,
- tuple.getFactHandles()[1].getObject() );
-
- cheese2.setType( "stilton" );
- from.modifyTuple( tuple1,
- context,
- workingMemory );
-
- // A modify when using from involves a retract and an assert - so make sure there was a retraction and no modify propagations
- assertEquals( 0,
- sink.getModified().size() );
- assertEquals( 1,
- sink.getRetracted().size() );
-
- assertEquals( 3,
- asserted.size() );
- tuple = (Tuple) ((Object[]) asserted.get( 1 ))[0];
- assertSame( person1,
- tuple.getFactHandles()[0].getObject() );
- assertSame( cheese1,
- tuple.getFactHandles()[1].getObject() );
-
- tuple = (Tuple) ((Object[]) asserted.get( 2 ))[0];
- assertSame( person1,
- tuple.getFactHandles()[0].getObject() );
- assertSame( cheese2,
- tuple.getFactHandles()[1].getObject() );
-
- // Double check the nodes memory
- final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( from );
- assertEquals( 1,
- memory.getLeftTupleMemory().size() );
- assertEquals( 0,
- memory.getRightObjectMemory().size() );
- assertEquals( 2,
- tuple1.getTupleMatches().size() );
- }
-
public static class MockDataProvider
implements
DataProvider {
More information about the jboss-svn-commits
mailing list