Sébastien Boulet created JENA-679:
-------------------------------------

             Summary: Use an alternative implementation of a FRuleEngineI
                 Key: JENA-679
                 URL: https://issues.apache.org/jira/browse/JENA-679
             Project: Apache Jena
          Issue Type: Improvement
          Components: Reasoners
    Affects Versions: Jena 2.11.1
            Reporter: Sébastien Boulet
            Priority: Minor
             Fix For: Jena 2.11.2


Give the possibility to use an alternative {{FRuleEngineI}} implementation.
My proposition is to introduce a singleton factory {{FRuleEngineIFactory}}.
{code:title=com.hp.hpl.jena.reasoner.rulesys.impl.FRuleEngineIFactory.java|borderStyle=solid}
public class FRuleEngineIFactory {
    private static FRuleEngineIFactory instance = new FRuleEngineIFactory();
    public static void setInstance(FRuleEngineIFactory instance) { 
FRuleEngineIFactory.instance = instance; }
    public FRuleEngineIFactory getInstance() { return instance; }
    
    public FRuleEngineI createFRuleEngineI(ForwardRuleInfGraphI parent, 
List<Rule> rules, boolean useRETE) {
        FRuleEngineI engine;
        if (rules != null) {
            if (useRETE) {
                engine = new RETEEngine(parent, rules);
            } else {
                engine = new FRuleEngine(parent, rules);
            }
        } else {
            if (useRETE) {
                engine = new RETEEngine(parent);
            } else {
                engine = new FRuleEngine(parent);
            }
        }
        return engine;
    }
}
{code}

This factory will be used by existing classes.

{code:title=com.hp.hpl.jena.reasoner.rulesys.FBRuleInfGraph|borderStyle=solid}
@Override
protected void instantiateRuleEngine(List<Rule> rules) {
    engine = FRuleEngineIFactory.getInstance().createFRuleEngineI(this, rules, 
useRETE);
}
{code}
{code:title=com.hp.hpl.jena.reasoner.rulesys.FBRuleInfGraph|borderStyle=solid}  
  
@Override
protected void instantiateRuleEngine(List<Rule> rules) {
    engine = FRuleEngineIFactory.getInstance().createFRuleEngineI(this, rules, 
true);
}
{code}

And i could replace the factory instance by my own instance :
{code}
FRuleEngineIFactory.setInstance(new CustomFRuleEngineIFactory());
{code}

I will propose a patch soon.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to