package org.drools.chance.reteoo; import org.drools.WorkingMemory; import org.drools.base.DefaultKnowledgeHelper; import org.drools.chance.ChanceHelper; import org.drools.chance.degree.simple.SimpleDegree; import org.drools.chance.factmodel.ImperfectTraitProxy; import org.drools.chance.degree.Degree; import org.drools.chance.evaluation.Evaluation; //import org.drools.factmodel.traits.LogicalTypeInconsistencyException; import org.drools.factmodel.traits.LogicalTypeInconsistencyException; import org.drools.factmodel.traits.Thing; public class ChanceKnowledgeHelper extends DefaultKnowledgeHelper implements ChanceHelper { public ChanceKnowledgeHelper( WorkingMemory workingMemory ) { super( workingMemory ); } public Degree getDegree() { return ((ChanceAgendaItem) getActivation()).getDegree(); } public Degree getDegree( String label ) { if ( label == null || label.isEmpty() ) { return getDegree(); } return getEvaluation( label ).getDegree(); } public Evaluation getEvaluation() { return ((ChanceAgendaItem) getActivation()).getEvaluation(); } public Evaluation getEvaluation( String label ) { if ( label == null || label.isEmpty() ) { return getEvaluation(); } return getEvaluation().lookupLabel( label ); } public <T, K> T don( Thing<K> core, Class<T> trait ) { return don( core.getCore(), trait, SimpleDegree.TRUE ); } public <T, K> T don( K core, Class<T> trait ) { return don( core, trait, SimpleDegree.TRUE ); } public <T, K> T don( Thing<K> core, Class<T> trait, Degree deg ) { return don( core.getCore(), trait, deg ); } public <T, K> T don( K core, Class<T> trait, Degree deg ) { return don( core, trait, deg, false ); } public <T, K> T don( K core, Class<T> trait, Degree deg, boolean logical ) { if ( core instanceof Thing && ( (Thing) core ).getCore() != core ) { return don( ((Thing) core).getCore(), trait, deg, logical ); } try { T thing = applyTrait( core, trait, deg, logical ); return thing; } catch ( LogicalTypeInconsistencyException ltie ) { ltie.printStackTrace(); return null; } } protected <T> void configureTrait( T thing, Object value ) { ((ImperfectTraitProxy) thing).setDegree( (Degree) value ); } }