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 {