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)