package org.drools.chance;
import org.drools.KnowledgeBaseConfiguration;
import org.drools.KnowledgeBaseFactory;
import org.drools.RuleBaseConfiguration;
import org.drools.builder.KnowledgeBuilderConfiguration;
import org.drools.chance.common.ChanceStrategyFactory;
import org.drools.chance.rule.ChanceLogicTransformerFactory;
import org.drools.chance.rule.builder.ChanceConstraintBuilderFactory;
import org.drools.chance.rule.builder.ChanceMVELDumper;
import org.drools.chance.rule.constraint.core.connectives.factories.fuzzy.mvl.ManyValuedConnectiveFactory;
import org.drools.chance.rule.constraint.core.evaluators.HoldsEvaluatorDefinition;
import org.drools.chance.rule.constraint.core.evaluators.ImperfectBaseEvaluatorDefinition;
import org.drools.chance.rule.constraint.core.evaluators.IsAEvaluatorDefinition;
import org.drools.chance.rule.constraint.core.evaluators.linguistic.IsEvaluatorDefinition;
import org.drools.chance.core.util.ImperfectTripleFactory;
import org.drools.chance.factmodel.*;
import org.drools.chance.reteoo.ChanceFactHandleFactory;
import org.drools.chance.reteoo.ChanceFieldFactory;
import org.drools.chance.reteoo.builder.*;
import org.drools.chance.rule.builder.ChanceRulePatternBuilder;
import org.drools.compiler.PackageBuilderConfiguration;
import org.drools.factmodel.ClassBuilderFactory;
import org.drools.factmodel.traits.TraitFactory;
import org.drools.factmodel.traits.TraitProxy;
import org.drools.reteoo.ReteooComponentFactory;
import org.drools.rule.builder.DroolsCompilerComponentFactory;
import org.drools.rule.builder.GroupElementBuilder;
import org.drools.rule.builder.PatternBuilder;
import org.drools.rule.builder.dialect.java.JavaDialect;
import org.drools.rule.builder.dialect.java.JavaRuleBuilderHelper;
import org.drools.rule.builder.dialect.mvel.MVELConsequenceBuilder;
import org.drools.rule.builder.dialect.mvel.MVELDialect;
import org.drools.runtime.KnowledgeSessionConfiguration;
import org.mvel2.Macro;
public class Chance {
public static void initialize() {
ChanceStrategyFactory.initDefaults();
JavaDialect.setPatternBuilder( new ChanceRulePatternBuilder() );
JavaDialect.setGEBuilder( new ChanceRuleGroupElementBuilder() );
JavaDialect.reinitBuilder();
MVELDialect.setPatternBuilder( new ChanceRulePatternBuilder() );
MVELDialect.setGEBuilder( new ChanceRuleGroupElementBuilder() );
MVELDialect.reinitBuilder();
JavaRuleBuilderHelper.setConsequenceTemplate( "chanceRule.mvel" );
MVELConsequenceBuilder.macros.put( "chance",
new Macro() {
public String doMacro() {
return "((org.drools.chance.ChanceHelper) drools)";
}
} );
ChanceStrategyFactory.setDefaultFactory( new ManyValuedConnectiveFactory() );
}
public static void restoreDefaults() {
JavaDialect.setPatternBuilder( new PatternBuilder() );
JavaDialect.setGEBuilder( new GroupElementBuilder() );
JavaDialect.reinitBuilder();
MVELDialect.setPatternBuilder( new PatternBuilder() );
MVELDialect.setGEBuilder( new GroupElementBuilder() );
MVELDialect.reinitBuilder();
JavaRuleBuilderHelper.setConsequenceTemplate( "javaRule.mvel" );
}
public static KnowledgeBuilderConfiguration getChanceKBuilderConfiguration() {
return getChanceKBuilderConfiguration( new PackageBuilderConfiguration() );
}
public static KnowledgeBuilderConfiguration getChanceKBuilderConfiguration( KnowledgeBuilderConfiguration baseConf ) {
PackageBuilderConfiguration pbc = (PackageBuilderConfiguration) baseConf;
pbc.getEvaluatorRegistry().addEvaluatorDefinition( new IsEvaluatorDefinition() );
pbc.getEvaluatorRegistry().addEvaluatorDefinition( new IsAEvaluatorDefinition() );
pbc.getEvaluatorRegistry().addEvaluatorDefinition( new HoldsEvaluatorDefinition() );
pbc.getEvaluatorRegistry().addEvaluatorDefinition( new ImperfectBaseEvaluatorDefinition() );
DroolsCompilerComponentFactory dcf = new DroolsCompilerComponentFactory();
dcf.setConstraintBuilderFactoryProvider( new ChanceConstraintBuilderFactory() );
dcf.setExpressionProcessor( new ChanceMVELDumper() );
dcf.setFieldDataFactory( new ChanceFieldFactory() );
ClassBuilderFactory cbf = new ClassBuilderFactory();
cbf.setBeanClassBuilder( new ChanceBeanBuilderImpl() );
cbf.setTraitBuilder( new ChanceTraitBuilderImpl() );
cbf.setTraitProxyBuilder( new ChanceTripleProxyBuilderImpl() );
cbf.setPropertyWrapperBuilder( new ChanceTriplePropertyWrapperClassBuilderImpl() );
cbf.setEnumClassBuilder( new ChanceEnumBuilderImpl() );
pbc.setClassBuilderFactory( cbf );
pbc.setComponentFactory( dcf );
return pbc;
}
public static KnowledgeBaseConfiguration getChanceKnowledgeBaseConfiguration( KnowledgeBaseConfiguration baseConf ) {
RuleBaseConfiguration rbc = (RuleBaseConfiguration) baseConf;
rbc.addActivationListener( "query", new ChanceQueryActivationListenerFactory() );
ReteooComponentFactory rcf = new ReteooComponentFactory();
rcf.setHandleFactoryProvider( new ChanceFactHandleFactory() );
rcf.setNodeFactoryProvider( new ChanceNodeFactory() );
rcf.setRuleBuilderProvider( new ChanceRuleBuilderFactory() );
rcf.setAgendaFactory( new ChanceAgendaFactory() );
rcf.setFieldDataFactory( new ChanceFieldFactory() );
rcf.setTripleFactory( new ImperfectTripleFactory() );
rcf.setKnowledgeHelperFactory( new ChanceKnowledgeHelperFactory() );
rcf.setLogicTransformerFactory( new ChanceLogicTransformerFactory() );
rcf.setBaseTraitProxyClass( ImperfectTraitProxy.class );
ClassBuilderFactory cbf = new ClassBuilderFactory();
cbf.setBeanClassBuilder( new ChanceBeanBuilderImpl() );
cbf.setTraitBuilder( new ChanceTraitBuilderImpl() );
cbf.setTraitProxyBuilder( new ChanceTripleProxyBuilderImpl() );
cbf.setPropertyWrapperBuilder( new ChanceTriplePropertyWrapperClassBuilderImpl() );
cbf.setEnumClassBuilder( new ChanceEnumBuilderImpl() );
rcf.setClassBuilderFactory( cbf );
rbc.setComponentFactory( rcf );
return rbc;
}
public static KnowledgeBaseConfiguration getChanceKnowledgeBaseConfiguration() {
return getChanceKnowledgeBaseConfiguration(KnowledgeBaseFactory.newKnowledgeBaseConfiguration() );
}
public static KnowledgeSessionConfiguration getChanceKnowledgeSessionConfiguration( KnowledgeSessionConfiguration baseConf ) {
return baseConf;
}
public static KnowledgeSessionConfiguration getChanceKnowledgeSessionConfiguration( ) {
return getChanceKnowledgeSessionConfiguration( KnowledgeBaseFactory.newKnowledgeSessionConfiguration() );
}
}