org.drools.reteoo
Class ExistsNode

java.lang.Object
  extended by org.drools.common.BaseNode
      extended by org.drools.reteoo.TupleSource
          extended by org.drools.reteoo.ExistsNode
All Implemented Interfaces:
java.io.Serializable, NetworkNode, NodeMemory, ObjectSink, ObjectSinkNode, TupleSink, TupleSinkNode

public class ExistsNode
extends TupleSource

ExistsNode extends BetaNode to perform tests for the existence of a Fact plus one or more conditions. Where existence is found the left ReteTuple is copied and propagated. Further to this it maintains the "truth" by cancelling any Activations that are no longer considered true by the retraction of ReteTuple's or FactHandleImpl. Tuples are considered to be asserted from the left input and facts from the right input. The BetaNode provides the BetaMemory to store assserted ReteTuples and FactHandleImpls. Each fact handle is stored in the right memory.

Author:
Edson Tirelli
See Also:
Serialized Form

Field Summary
protected  BetaConstraints constraints
           
protected  TupleSource leftInput
          The left input TupleSource.
protected  boolean objectMemory
           
protected  ObjectSource rightInput
          The right input TupleSource.
protected  boolean tupleMemoryEnabled
           
 
Fields inherited from class org.drools.reteoo.TupleSource
sink
 
Fields inherited from class org.drools.common.BaseNode
id
 
Constructor Summary
ExistsNode(int id, TupleSource leftInput, ObjectSource rightInput, BetaConstraints joinNodeBinder, BuildContext context)
          Construct.
 
Method Summary
 void assertObject(InternalFactHandle handle, PropagationContext context, InternalWorkingMemory workingMemory)
          Assert a new FactHandleImpl from the right input.
 void assertTuple(ReteTuple leftTuple, PropagationContext context, InternalWorkingMemory workingMemory)
          Assert a new ReteTuple from the left input.
 void attach()
          Attaches the node into the network.
 void attach(InternalWorkingMemory[] workingMemories)
           
 java.lang.Object createMemory(RuleBaseConfiguration config)
          Creates a BetaMemory for the BetaNode's memory.
 void dumpMemory(InternalWorkingMemory workingMemory)
           
 boolean equals(java.lang.Object object)
           
 BetaNodeFieldConstraint[] getConstraints()
           
 ObjectSinkNode getNextObjectSinkNode()
          Returns the next node
 TupleSinkNode getNextTupleSinkNode()
          Returns the next node
 ObjectTypeNode getObjectTypeNode()
           
 ObjectSinkNode getPreviousObjectSinkNode()
          Returns the previous node
 TupleSinkNode getPreviousTupleSinkNode()
          Returns the previous node
 java.util.List getRules()
           
 int hashCode()
          The hashCode return is simply the unique id of the node.
 boolean isObjectMemoryEnabled()
           
 boolean isTupleMemoryEnabled()
           
 void remove(RuleRemovalContext context, BaseNode node, InternalWorkingMemory[] workingMemories)
          Removes the node from teh network.
 void retractObject(InternalFactHandle handle, PropagationContext context, InternalWorkingMemory workingMemory)
          Retract the FactHandleImpl.
 void retractTuple(ReteTuple leftTuple, PropagationContext context, InternalWorkingMemory workingMemory)
          Retract the ReteTuple, any resulting propagated joins are also retracted.
 void setNextObjectSinkNode(ObjectSinkNode next)
          Sets the next node
 void setNextTupleSinkNode(TupleSinkNode next)
          Sets the next node
 void setObjectMemoryEnabled(boolean objectMemory)
           
 void setPreviousObjectSinkNode(ObjectSinkNode previous)
          Sets the previous node
 void setPreviousTupleSinkNode(TupleSinkNode previous)
          Sets the previous node
 void setTupleMemoryEnabled(boolean tupleMemoryEnabled)
           
 java.lang.String toString()
           
 void updateSink(TupleSink sink, PropagationContext context, InternalWorkingMemory workingMemory)
          Updates the given sink propagating all previously propagated tuples to it
 
Methods inherited from class org.drools.reteoo.TupleSource
addTupleSink, getSinkPropagator, isInUse, removeTupleSink
 
Methods inherited from class org.drools.common.BaseNode
getId
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.drools.common.NodeMemory
getId
 

Field Detail

leftInput

protected final TupleSource leftInput
The left input TupleSource.


rightInput

protected final ObjectSource rightInput
The right input TupleSource.


constraints

protected final BetaConstraints constraints

objectMemory

protected boolean objectMemory

tupleMemoryEnabled

protected boolean tupleMemoryEnabled
Constructor Detail

ExistsNode

public ExistsNode(int id,
                  TupleSource leftInput,
                  ObjectSource rightInput,
                  BetaConstraints joinNodeBinder,
                  BuildContext context)
Construct.

Parameters:
leftInput - The left input TupleSource.
rightInput - The right input ObjectSource.
joinNodeBinder - The constraints to be aplied to the right objects
Method Detail

assertTuple

public void assertTuple(ReteTuple leftTuple,
                        PropagationContext context,
                        InternalWorkingMemory workingMemory)
Assert a new ReteTuple from the left input. It iterates over the right FactHandleImpl's and if any match is found, a copy of the ReteTuple is made and propagated.

Parameters:
tuple - The Tuple being asserted.
context - The PropagationContext
workingMemory - The working memory seesion.

assertObject

public void assertObject(InternalFactHandle handle,
                         PropagationContext context,
                         InternalWorkingMemory workingMemory)
Assert a new FactHandleImpl from the right input. If it matches any left ReteTuple's that had no matches before, propagate tuple as an assertion.

Parameters:
handle - The FactHandleImpl being asserted.
context - The PropagationContext
workingMemory - The working memory seesion.

retractObject

public void retractObject(InternalFactHandle handle,
                          PropagationContext context,
                          InternalWorkingMemory workingMemory)
Retract the FactHandleImpl. If the handle has any ReteTuple matches and those tuples now have no other match, retract tuple

Parameters:
handle - the being retracted
context - The PropagationContext
workingMemory - The working memory seesion.

retractTuple

public void retractTuple(ReteTuple leftTuple,
                         PropagationContext context,
                         InternalWorkingMemory workingMemory)
Retract the ReteTuple, any resulting propagated joins are also retracted.

Parameters:
leftTuple - The tuple being retracted
context - The PropagationContext
workingMemory - The working memory seesion.

updateSink

public void updateSink(TupleSink sink,
                       PropagationContext context,
                       InternalWorkingMemory workingMemory)
Updates the given sink propagating all previously propagated tuples to it

Specified by:
updateSink in class TupleSource

toString

public java.lang.String toString()

getConstraints

public BetaNodeFieldConstraint[] getConstraints()

attach

public void attach()
Description copied from class: BaseNode
Attaches the node into the network. Usually to the parent ObjectSource or TupleSource

Specified by:
attach in class BaseNode

getRules

public java.util.List getRules()

getObjectTypeNode

public ObjectTypeNode getObjectTypeNode()

attach

public void attach(InternalWorkingMemory[] workingMemories)
Specified by:
attach in class BaseNode

remove

public void remove(RuleRemovalContext context,
                   BaseNode node,
                   InternalWorkingMemory[] workingMemories)
Description copied from class: BaseNode
Removes the node from teh network. Usually from the parent ObjectSource or TupleSource

Specified by:
remove in class BaseNode

isObjectMemoryEnabled

public boolean isObjectMemoryEnabled()
Specified by:
isObjectMemoryEnabled in interface ObjectSink

setObjectMemoryEnabled

public void setObjectMemoryEnabled(boolean objectMemory)
Specified by:
setObjectMemoryEnabled in interface ObjectSink

isTupleMemoryEnabled

public boolean isTupleMemoryEnabled()
Specified by:
isTupleMemoryEnabled in interface TupleSink

setTupleMemoryEnabled

public void setTupleMemoryEnabled(boolean tupleMemoryEnabled)
Specified by:
setTupleMemoryEnabled in interface TupleSink

dumpMemory

public void dumpMemory(InternalWorkingMemory workingMemory)

hashCode

public int hashCode()
Description copied from class: BaseNode
The hashCode return is simply the unique id of the node. It is expected that base classes will also implement equals(Object object).

Overrides:
hashCode in class BaseNode

equals

public boolean equals(java.lang.Object object)
Overrides:
equals in class java.lang.Object

createMemory

public java.lang.Object createMemory(RuleBaseConfiguration config)
Creates a BetaMemory for the BetaNode's memory.

Specified by:
createMemory in interface NodeMemory

getNextTupleSinkNode

public TupleSinkNode getNextTupleSinkNode()
Returns the next node

Specified by:
getNextTupleSinkNode in interface TupleSinkNode
Returns:
The next TupleSinkNode

setNextTupleSinkNode

public void setNextTupleSinkNode(TupleSinkNode next)
Sets the next node

Specified by:
setNextTupleSinkNode in interface TupleSinkNode
Parameters:
next - The next TupleSinkNode

getPreviousTupleSinkNode

public TupleSinkNode getPreviousTupleSinkNode()
Returns the previous node

Specified by:
getPreviousTupleSinkNode in interface TupleSinkNode
Returns:
The previous TupleSinkNode

setPreviousTupleSinkNode

public void setPreviousTupleSinkNode(TupleSinkNode previous)
Sets the previous node

Specified by:
setPreviousTupleSinkNode in interface TupleSinkNode
Parameters:
previous - The previous TupleSinkNode

getNextObjectSinkNode

public ObjectSinkNode getNextObjectSinkNode()
Returns the next node

Specified by:
getNextObjectSinkNode in interface ObjectSinkNode
Returns:
The next ObjectSinkNode

setNextObjectSinkNode

public void setNextObjectSinkNode(ObjectSinkNode next)
Sets the next node

Specified by:
setNextObjectSinkNode in interface ObjectSinkNode
Parameters:
next - The next ObjectSinkNode

getPreviousObjectSinkNode

public ObjectSinkNode getPreviousObjectSinkNode()
Returns the previous node

Specified by:
getPreviousObjectSinkNode in interface ObjectSinkNode
Returns:
The previous ObjectSinkNode

setPreviousObjectSinkNode

public void setPreviousObjectSinkNode(ObjectSinkNode previous)
Sets the previous node

Specified by:
setPreviousObjectSinkNode in interface ObjectSinkNode
Parameters:
previous - The previous ObjectSinkNode