[ 
https://issues.apache.org/jira/browse/JENA-679?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

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

    Description: 
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.BasicForwardRuleInfGraph|borderStyle=solid}
    
@Override
protected void instantiateRuleEngine(List<Rule> rules) {
    engine = FRuleEngineIFactory.getInstance().createFRuleEngineI(this, rules, 
false);
}
{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, 
useRETE);
}
{code}
{code:title=com.hp.hpl.jena.reasoner.rulesys.RETERuleInfGraph|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.

  was:
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}
{code:title=com.hp.hpl.jena.reasoner.rulesys.BasicForwardRuleInfGraph|borderStyle=solid}
    
@Override
protected void instantiateRuleEngine(List<Rule> rules) {
    engine = FRuleEngineIFactory.getInstance().createFRuleEngineI(this, rules, 
false);
}
{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, 
useRETE);
}
{code}
{code:title=com.hp.hpl.jena.reasoner.rulesys.RETERuleInfGraph|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.


> 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
>              Labels: patch
>             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.BasicForwardRuleInfGraph|borderStyle=solid}
>     
> @Override
> protected void instantiateRuleEngine(List<Rule> rules) {
>     engine = FRuleEngineIFactory.getInstance().createFRuleEngineI(this, 
> rules, false);
> }
> {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, useRETE);
> }
> {code}
> {code:title=com.hp.hpl.jena.reasoner.rulesys.RETERuleInfGraph|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