You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by de...@apache.org on 2014/04/18 16:13:36 UTC
svn commit: r1588475 - in /jena/trunk/jena-core/src:
main/java/com/hp/hpl/jena/reasoner/rulesys/
main/java/com/hp/hpl/jena/reasoner/rulesys/impl/
test/java/com/hp/hpl/jena/reasoner/rulesys/test/
Author: der
Date: Fri Apr 18 14:13:36 2014
New Revision: 1588475
URL: http://svn.apache.org/r1588475
Log:
Applying patch from JENA-679
Added:
jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/reasoner/rulesys/impl/FRuleEngineIFactory.java
jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/reasoner/rulesys/test/FRuleEngineIFactoryTest.java
Modified:
jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/reasoner/rulesys/BasicForwardRuleInfGraph.java
jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/reasoner/rulesys/FBRuleInfGraph.java
jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/reasoner/rulesys/RETERuleInfGraph.java
jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/reasoner/rulesys/test/TestPackage.java
Modified: jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/reasoner/rulesys/BasicForwardRuleInfGraph.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/reasoner/rulesys/BasicForwardRuleInfGraph.java?rev=1588475&r1=1588474&r2=1588475&view=diff
==============================================================================
--- jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/reasoner/rulesys/BasicForwardRuleInfGraph.java (original)
+++ jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/reasoner/rulesys/BasicForwardRuleInfGraph.java Fri Apr 18 14:13:36 2014
@@ -18,23 +18,27 @@
package com.hp.hpl.jena.reasoner.rulesys;
-import java.util.Iterator ;
-import java.util.List ;
+import java.util.Iterator;
+import java.util.List;
-import org.slf4j.Logger ;
-import org.slf4j.LoggerFactory ;
-
-import com.hp.hpl.jena.graph.Factory ;
-import com.hp.hpl.jena.graph.Graph ;
-import com.hp.hpl.jena.graph.Node ;
-import com.hp.hpl.jena.graph.Triple ;
-import com.hp.hpl.jena.reasoner.* ;
-import com.hp.hpl.jena.reasoner.rulesys.impl.FRuleEngine ;
-import com.hp.hpl.jena.reasoner.rulesys.impl.FRuleEngineI ;
-import com.hp.hpl.jena.reasoner.rulesys.impl.SafeGraph ;
-import com.hp.hpl.jena.util.OneToManyMap ;
-import com.hp.hpl.jena.util.iterator.ExtendedIterator ;
-import com.hp.hpl.jena.util.iterator.NullIterator ;
+import com.hp.hpl.jena.graph.Factory;
+import com.hp.hpl.jena.graph.Graph;
+import com.hp.hpl.jena.graph.Node;
+import com.hp.hpl.jena.graph.Triple;
+import com.hp.hpl.jena.reasoner.BaseInfGraph;
+import com.hp.hpl.jena.reasoner.Derivation;
+import com.hp.hpl.jena.reasoner.FGraph;
+import com.hp.hpl.jena.reasoner.Finder;
+import com.hp.hpl.jena.reasoner.FinderUtil;
+import com.hp.hpl.jena.reasoner.Reasoner;
+import com.hp.hpl.jena.reasoner.ReasonerException;
+import com.hp.hpl.jena.reasoner.TriplePattern;
+import com.hp.hpl.jena.reasoner.rulesys.impl.FRuleEngineI;
+import com.hp.hpl.jena.reasoner.rulesys.impl.FRuleEngineIFactory;
+import com.hp.hpl.jena.reasoner.rulesys.impl.SafeGraph;
+import com.hp.hpl.jena.util.OneToManyMap;
+import com.hp.hpl.jena.util.iterator.ExtendedIterator;
+import com.hp.hpl.jena.util.iterator.NullIterator;
/**
* An inference graph interface that runs a set of forward chaining
@@ -72,7 +76,7 @@ public class BasicForwardRuleInfGraph ex
/** Flag which, if true, enables tracing of rule actions to logger.info */
protected boolean traceOn = false;
- private static Logger logger = LoggerFactory.getLogger(BasicForwardRuleInfGraph.class);
+// private static Logger logger = LoggerFactory.getLogger(BasicForwardRuleInfGraph.class);
//=======================================================================
// Core methods
@@ -132,11 +136,7 @@ public class BasicForwardRuleInfGraph ex
* @param rules the rule set or null if there are not rules bound in yet.
*/
protected void instantiateRuleEngine(List<Rule> rules) {
- if (rules != null) {
- engine = new FRuleEngine(this, rules);
- } else {
- engine = new FRuleEngine(this);
- }
+ engine = FRuleEngineIFactory.getInstance().createFRuleEngineI(this, rules, false);
}
/**
Modified: jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/reasoner/rulesys/FBRuleInfGraph.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/reasoner/rulesys/FBRuleInfGraph.java?rev=1588475&r1=1588474&r2=1588475&view=diff
==============================================================================
--- jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/reasoner/rulesys/FBRuleInfGraph.java (original)
+++ jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/reasoner/rulesys/FBRuleInfGraph.java Fri Apr 18 14:13:36 2014
@@ -156,19 +156,7 @@ public class FBRuleInfGraph extends Bas
*/
@Override
protected void instantiateRuleEngine(List<Rule> rules) {
- if (rules != null) {
- if (useRETE) {
- engine = new RETEEngine(this, rules);
- } else {
- engine = new FRuleEngine(this, rules);
- }
- } else {
- if (useRETE) {
- engine = new RETEEngine(this);
- } else {
- engine = new FRuleEngine(this);
- }
- }
+ engine = FRuleEngineIFactory.getInstance().createFRuleEngineI(this, rules, useRETE);
}
/**
Modified: jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/reasoner/rulesys/RETERuleInfGraph.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/reasoner/rulesys/RETERuleInfGraph.java?rev=1588475&r1=1588474&r2=1588475&view=diff
==============================================================================
--- jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/reasoner/rulesys/RETERuleInfGraph.java (original)
+++ jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/reasoner/rulesys/RETERuleInfGraph.java Fri Apr 18 14:13:36 2014
@@ -78,11 +78,7 @@ public class RETERuleInfGraph extends Ba
*/
@Override
protected void instantiateRuleEngine(List<Rule> rules) {
- if (rules != null) {
- engine = new RETEEngine(this, rules);
- } else {
- engine = new RETEEngine(this);
- }
+ engine = FRuleEngineIFactory.getInstance().createFRuleEngineI(this, rules, true);
}
/**
Added: jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/reasoner/rulesys/impl/FRuleEngineIFactory.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/reasoner/rulesys/impl/FRuleEngineIFactory.java?rev=1588475&view=auto
==============================================================================
--- jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/reasoner/rulesys/impl/FRuleEngineIFactory.java (added)
+++ jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/reasoner/rulesys/impl/FRuleEngineIFactory.java Fri Apr 18 14:13:36 2014
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.hp.hpl.jena.reasoner.rulesys.impl;
+
+import java.util.List;
+
+import com.hp.hpl.jena.reasoner.rulesys.ForwardRuleInfGraphI;
+import com.hp.hpl.jena.reasoner.rulesys.Rule;
+
+/**
+ * Factory class for creating {@link FRuleEngineI}. This class is a singleton pattern, the single global
+ * instance could be replaced to provide a custom implementation.
+ * <pre>
+ * {@code
+ * MyFRuleEngineIFactory anotherFactory = new MyFRuleEngineIFactory();
+ * FRuleEngineIFactory.setInstance(anotherFactory);
+* }
+* </pre>
+ */
+public class FRuleEngineIFactory {
+ private static FRuleEngineIFactory instance = new FRuleEngineIFactory();
+
+ /**
+ * Return the single global instance of this factory
+ */
+ public static FRuleEngineIFactory getInstance() { return instance; }
+
+ /**
+ * Replaces the custom global instance.
+ * @param instance the new factory instance
+ */
+ public static void setInstance(FRuleEngineIFactory instance) { FRuleEngineIFactory.instance = instance; }
+
+ /**
+ * Creates a {@link ForwardRuleInfGraphI} instance.
+ *
+ * @param parent the F or FB infGraph that it using the engine, the parent graph
+ * holds the deductions graph and source data.
+ * @param rules the rule set to be processed
+ * @param useRETE if <code>true</code> force this factory to create a {@link RETEEngine} otherwise a
+ * {@link FRuleEngine} is created.
+ * @return the created engine.
+ */
+ 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;
+ }
+}
Added: jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/reasoner/rulesys/test/FRuleEngineIFactoryTest.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/reasoner/rulesys/test/FRuleEngineIFactoryTest.java?rev=1588475&view=auto
==============================================================================
--- jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/reasoner/rulesys/test/FRuleEngineIFactoryTest.java (added)
+++ jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/reasoner/rulesys/test/FRuleEngineIFactoryTest.java Fri Apr 18 14:13:36 2014
@@ -0,0 +1,235 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.hp.hpl.jena.reasoner.rulesys.test;
+
+import java.util.Iterator;
+
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import com.hp.hpl.jena.graph.BulkUpdateHandler;
+import com.hp.hpl.jena.graph.Capabilities;
+import com.hp.hpl.jena.graph.Graph;
+import com.hp.hpl.jena.graph.GraphEventManager;
+import com.hp.hpl.jena.graph.GraphStatisticsHandler;
+import com.hp.hpl.jena.graph.Node;
+import com.hp.hpl.jena.graph.TransactionHandler;
+import com.hp.hpl.jena.graph.Triple;
+import com.hp.hpl.jena.graph.TripleMatch;
+import com.hp.hpl.jena.reasoner.Derivation;
+import com.hp.hpl.jena.reasoner.Reasoner;
+import com.hp.hpl.jena.reasoner.ValidityReport;
+import com.hp.hpl.jena.reasoner.rulesys.ForwardRuleInfGraphI;
+import com.hp.hpl.jena.reasoner.rulesys.Rule;
+import com.hp.hpl.jena.reasoner.rulesys.impl.FRuleEngine;
+import com.hp.hpl.jena.reasoner.rulesys.impl.FRuleEngineI;
+import com.hp.hpl.jena.reasoner.rulesys.impl.FRuleEngineIFactory;
+import com.hp.hpl.jena.reasoner.rulesys.impl.RETEEngine;
+import com.hp.hpl.jena.shared.AddDeniedException;
+import com.hp.hpl.jena.shared.DeleteDeniedException;
+import com.hp.hpl.jena.shared.PrefixMapping;
+import com.hp.hpl.jena.util.iterator.ExtendedIterator;
+
+
+public class FRuleEngineIFactoryTest extends TestCase {
+
+ /**
+ * Boilerplate for junit.
+ * This is its own test suite
+ */
+ public static TestSuite suite() {
+ return new TestSuite( FRuleEngineIFactoryTest.class );
+ }
+
+ @Override
+ public void tearDown() {
+ FRuleEngineIFactory.setInstance(new FRuleEngineIFactory());
+ }
+
+ public void testItShouldBeASingleton() {
+ FRuleEngineIFactory instance = FRuleEngineIFactory.getInstance();
+
+ assertNotNull("A default instance must be created", instance);
+
+ assertSame("The same instance should have be returned",
+ instance, FRuleEngineIFactory.getInstance());
+ }
+
+ public void testItShouldLetYouReplaceTheSingletonInstance() {
+ MyFRuleEngineIFactory anotherFactory = new MyFRuleEngineIFactory();
+ FRuleEngineIFactory.setInstance(anotherFactory);
+
+ assertSame("The instance should have been replaced",
+ anotherFactory, FRuleEngineIFactory.getInstance());
+ }
+
+ public void testItShouldInstantiateAFRuleEngineIfUseRETEisFalse() {
+ ForwardRuleInfGraphI infGraph = new DummyForwardRuleInfGraph();
+ FRuleEngineI engine =
+ FRuleEngineIFactory.getInstance().createFRuleEngineI(infGraph, null, false);
+
+ assertSame("A FRuleEngine should have been instantiated", FRuleEngine.class, engine.getClass());
+ }
+
+ public void testItShouldInstantiateAReteEngineIfUseRETEisTrue() {
+ ForwardRuleInfGraphI infGraph = new DummyForwardRuleInfGraph();
+ FRuleEngineI engine =
+ FRuleEngineIFactory.getInstance().createFRuleEngineI(infGraph, null, true);
+
+ assertSame("A RETEEngine should have been instantiated", RETEEngine.class, engine.getClass());
+ }
+
+ private static final class MyFRuleEngineIFactory extends FRuleEngineIFactory {
+ }
+
+ private static final class DummyForwardRuleInfGraph implements ForwardRuleInfGraphI{
+
+ @Override
+ public Graph getRawGraph() { return null; }
+
+ @Override
+ public Reasoner getReasoner() { return null; }
+
+ @Override
+ public void rebind(Graph data) {}
+
+ @Override
+ public void rebind() {}
+
+ @Override
+ public void prepare() {}
+
+ @Override
+ public void reset() {}
+
+ @Override
+ public Node getGlobalProperty(Node property) { return null; }
+
+ @Override
+ public boolean testGlobalProperty(Node property) { return false; }
+
+ @Override
+ public ValidityReport validate() { return null; }
+
+ @Override
+ public ExtendedIterator<Triple> find(Node subject, Node property, Node object, Graph param) { return null; }
+
+ @Override
+ public void setDerivationLogging(boolean logOn) {}
+
+ @Override
+ public Iterator<Derivation> getDerivation(Triple triple) { return null; }
+
+ @Override
+ public boolean dependsOn(Graph other) { return false; }
+
+ @Override
+ public TransactionHandler getTransactionHandler() { return null; }
+
+ @Override
+ public BulkUpdateHandler getBulkUpdateHandler() { return null; }
+
+ @Override
+ public Capabilities getCapabilities() { return null; }
+
+ @Override
+ public GraphEventManager getEventManager() { return null; }
+
+ @Override
+ public GraphStatisticsHandler getStatisticsHandler() { return null; }
+
+ @Override
+ public PrefixMapping getPrefixMapping() { return null; }
+
+ @Override
+ public void add(Triple t) throws AddDeniedException {}
+
+ @Override
+ public void delete(Triple t) throws DeleteDeniedException {}
+
+ @Override
+ public ExtendedIterator<Triple> find(TripleMatch m) { return null; }
+
+ @Override
+ public ExtendedIterator<Triple> find(Node s, Node p, Node o) { return null; }
+
+ @Override
+ public boolean isIsomorphicWith(Graph g) { return false; }
+
+ @Override
+ public boolean contains(Node s, Node p, Node o) { return false; }
+
+ @Override
+ public boolean contains(Triple t) { return false; }
+
+ @Override
+ public void clear() {}
+
+ @Override
+ public void remove(Node s, Node p, Node o) {}
+
+ @Override
+ public void close() {}
+
+ @Override
+ public boolean isEmpty() { return false; }
+
+ @Override
+ public int size() { return 0; }
+
+ @Override
+ public boolean isClosed() { return false; }
+
+ @Override
+ public void silentAdd(Triple t) {}
+
+ @Override
+ public boolean shouldTrace() { return false; }
+
+ @Override
+ public void addBRule(Rule brule) {}
+
+ @Override
+ public void deleteBRule(Rule brule) {}
+
+ @Override
+ public Graph getDeductionsGraph() { return null; }
+
+ @Override
+ public Graph getCurrentDeductionsGraph() { return null; }
+
+ @Override
+ public void addDeduction(Triple t) {}
+
+ @Override
+ public ExtendedIterator<Triple> findDataMatches(Node subject, Node predicate, Node object) {
+ return null;
+ }
+
+ @Override
+ public boolean shouldLogDerivations() { return false;}
+
+ @Override
+ public void logDerivation(Triple t, Derivation derivation) {}
+
+ @Override
+ public void setFunctorFiltering(boolean param) {}
+
+ }
+ }
Modified: jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/reasoner/rulesys/test/TestPackage.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/reasoner/rulesys/test/TestPackage.java?rev=1588475&r1=1588474&r2=1588475&view=diff
==============================================================================
--- jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/reasoner/rulesys/test/TestPackage.java (original)
+++ jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/reasoner/rulesys/test/TestPackage.java Fri Apr 18 14:13:36 2014
@@ -54,6 +54,7 @@ public class TestPackage extends TestSui
addTest( "TestOWLMisc", TestOWLMisc.suite() );
addTest( "TestCapabilities", TestCapabilities.suite() );
addTest( "TestComparatorBuiltins", TestComparatorBuiltins.suite() );
+ addTest( "FRuleEngineIFactoryTest", FRuleEngineIFactoryTest.suite() );
//addTest ("TestRuleLoader", TestRuleLoader.suite() );
try {