package org.drools.chance.reteoo.tuples; import org.drools.chance.degree.Degree; import org.drools.chance.evaluation.Evaluation; import org.drools.chance.reteoo.ChanceFactHandle; import org.drools.common.InternalFactHandle; import org.drools.reteoo.RightTuple; import org.drools.reteoo.RightTupleSink; public class ImperfectRightTuple extends RightTuple implements ImperfectTuple { private Evaluation evaluation; public ImperfectRightTuple() { super(); } public ImperfectRightTuple( InternalFactHandle handle, Evaluation eval ) { super( handle ); this.evaluation = eval; } public ImperfectRightTuple( InternalFactHandle handle, RightTupleSink sink, Evaluation eval ) { super( handle, sink ); this.evaluation = eval; } public Evaluation getEvaluation() { return evaluation; } public Evaluation getCachedEvaluation( int idx ) { Evaluation eval = evaluation.getNodeId() == idx ? evaluation : null; return eval != null ? eval : ((ChanceFactHandle) this.getFactHandle()).getCachedEvaluation( idx ); } public void addEvaluation(Evaluation evaluation) { this.evaluation = evaluation; ((ChanceFactHandle) this.getFactHandle()).addEvaluation( evaluation.getNodeId(), evaluation ); } public void setEvaluation(Evaluation eval) { throw new UnsupportedOperationException( "Evaluations are added, not set, on a right tuple" ); } public Degree getDegree() { return getEvaluation().getDegree(); } public int getSourceId() { return getEvaluation().getNodeId(); } }