package org.drools.chance.rule.constraint;
import org.drools.chance.rule.constraint.core.evaluators.ImperfectEvaluator;
import org.drools.chance.degree.Degree;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.reteoo.LeftTuple;
import org.drools.rule.ContextEntry;
import org.drools.rule.Declaration;
import org.drools.rule.VariableRestriction;
import org.drools.rule.constraint.EvaluatorConstraint;
import org.drools.spi.Evaluator;
import org.drools.spi.FieldValue;
import org.drools.spi.InternalReadAccessor;
public class ImperfectEvaluatorConstraint extends EvaluatorConstraint implements ImperfectAlphaConstraint, ImperfectBetaConstraint {
private int refNodeId;
private String label;
private boolean cutting;
public boolean isCutting() {
return cutting;
}
public void setCutting(boolean cutting) {
this.cutting = cutting;
}
public ImperfectEvaluatorConstraint( ) {
}
public ImperfectEvaluatorConstraint( FieldValue field, Evaluator evaluator, InternalReadAccessor extractor ) {
super( field, evaluator, extractor );
}
public ImperfectEvaluatorConstraint( Declaration[] declarations, Evaluator evaluator, InternalReadAccessor extractor ) {
super( declarations, evaluator, extractor );
}
public Degree match( InternalFactHandle factHandle, InternalWorkingMemory workingMemory, ContextEntry context ) {
ImperfectEvaluator evaluator = (ImperfectEvaluator) getEvaluator();
if ( isLiteral() ) {
return evaluator.match( workingMemory, rightReadAccessor, factHandle, field );
}
return evaluator.match(
workingMemory,
rightReadAccessor,
factHandle,
declarations[0].getExtractor(),
factHandle );
}
public Degree matchCachedLeft( ContextEntry context, InternalFactHandle handle ) {
if (isLiteral()) {
return ( (ImperfectEvaluator) evaluator).match( ((LiteralContextEntry) context).workingMemory,
((LiteralContextEntry) context).getFieldExtractor(),
handle,
field );
}
return ( (ImperfectEvaluator) evaluator).matchCachedLeft( ((VariableRestriction.VariableContextEntry) context).workingMemory,
(VariableRestriction.VariableContextEntry) context,
handle );
}
public Degree matchCachedRight(LeftTuple tuple, ContextEntry context) {
if ( isLiteral() ) {
return ((ImperfectEvaluator)evaluator).match( ((LiteralContextEntry) context).workingMemory,
((LiteralContextEntry) context).getFieldExtractor(),
((LiteralContextEntry) context).getFactHandle(),
field );
}
return ((ImperfectEvaluator)evaluator).matchCachedRight(
((VariableRestriction.VariableContextEntry) context).workingMemory,
(VariableRestriction.VariableContextEntry) context,
tuple.get(declarations[0]) );
}
public int getNodeId() {
return refNodeId;
}
public void setNodeId( int id ) {
refNodeId = id;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
@Override
public ContextEntry createContextEntry() {
return super.createContextEntry();
}
}