Repository: incubator-rya
Updated Branches:
  refs/heads/master 1efa10093 -> e9488ff69


http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e9488ff6/sail/src/main/java/org/apache/rya/rdftriplestore/inference/PropertyChainVisitor.java
----------------------------------------------------------------------
diff --git 
a/sail/src/main/java/org/apache/rya/rdftriplestore/inference/PropertyChainVisitor.java
 
b/sail/src/main/java/org/apache/rya/rdftriplestore/inference/PropertyChainVisitor.java
index 67d4365..a966a46 100644
--- 
a/sail/src/main/java/org/apache/rya/rdftriplestore/inference/PropertyChainVisitor.java
+++ 
b/sail/src/main/java/org/apache/rya/rdftriplestore/inference/PropertyChainVisitor.java
@@ -1,19 +1,3 @@
-package org.apache.rya.rdftriplestore.inference;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-import org.openrdf.model.URI;
-import org.openrdf.model.vocabulary.RDF;
-import org.openrdf.model.vocabulary.RDFS;
-import org.openrdf.model.vocabulary.SESAME;
-import org.openrdf.query.algebra.Join;
-import org.openrdf.query.algebra.QueryModelNode;
-import org.openrdf.query.algebra.StatementPattern;
-import org.openrdf.query.algebra.TupleExpr;
-import org.openrdf.query.algebra.Var;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -22,9 +6,9 @@ import org.openrdf.query.algebra.Var;
  * 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
@@ -32,13 +16,21 @@ import org.openrdf.query.algebra.Var;
  * specific language governing permissions and limitations
  * under the License.
  */
+package org.apache.rya.rdftriplestore.inference;
 
-
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
 
 import org.apache.rya.api.RdfCloudTripleStoreConfiguration;
-import org.apache.rya.api.utils.NullableStatementImpl;
-import org.apache.rya.rdftriplestore.utils.FixedStatementPattern;
-import org.apache.rya.rdftriplestore.utils.FixedStatementPattern;
+import org.openrdf.model.URI;
+import org.openrdf.model.vocabulary.RDF;
+import org.openrdf.model.vocabulary.RDFS;
+import org.openrdf.model.vocabulary.SESAME;
+import org.openrdf.query.algebra.Join;
+import org.openrdf.query.algebra.StatementPattern;
+import org.openrdf.query.algebra.TupleExpr;
+import org.openrdf.query.algebra.Var;
 
 /**
  * All predicates are changed
@@ -48,19 +40,19 @@ import 
org.apache.rya.rdftriplestore.utils.FixedStatementPattern;
  */
 public class PropertyChainVisitor extends AbstractInferVisitor {
 
-    public PropertyChainVisitor(RdfCloudTripleStoreConfiguration conf, 
InferenceEngine inferenceEngine) {
+    public PropertyChainVisitor(final RdfCloudTripleStoreConfiguration conf, 
final InferenceEngine inferenceEngine) {
         super(conf, inferenceEngine);
         include = true;
     }
 
 
     @Override
-    protected void meetSP(StatementPattern node) throws Exception {
-        StatementPattern sp = node.clone();
+    protected void meetSP(final StatementPattern node) throws Exception {
+        final StatementPattern sp = node.clone();
         final Var predVar = sp.getPredicateVar();
 
-        URI pred = (URI) predVar.getValue();
-        String predNamespace = pred.getNamespace();
+        final URI pred = (URI) predVar.getValue();
+        final String predNamespace = pred.getNamespace();
 
         final Var objVar = sp.getObjectVar();
         final Var cntxtVar = sp.getContextVar();
@@ -69,45 +61,45 @@ public class PropertyChainVisitor extends 
AbstractInferVisitor {
                 !SESAME.NAMESPACE.equals(predNamespace) &&
                 !RDFS.NAMESPACE.equals(predNamespace)
                 && !EXPANDED.equals(cntxtVar)) {
- 
-            URI chainPropURI = (URI) predVar.getValue();
-            List<URI> chain = inferenceEngine.getPropertyChain(chainPropURI);
-            List<StatementPattern> expandedPatterns = new 
ArrayList<StatementPattern>();
+
+            final URI chainPropURI = (URI) predVar.getValue();
+            final List<URI> chain = 
inferenceEngine.getPropertyChain(chainPropURI);
+            final List<StatementPattern> expandedPatterns = new 
ArrayList<StatementPattern>();
             if (chain.size() > 0) {
-               Var originalSubj = sp.getSubjectVar();
-               Var originalObj = sp.getObjectVar();
-               
-               Var nextSubj = originalSubj;
-               StatementPattern lastStatementPatternAdded = null;
-               for (URI chainElement : chain ){
-                       String s = UUID.randomUUID().toString();
-                    Var currentObj = new Var("c-" + s);
+                final Var originalSubj = sp.getSubjectVar();
+                final Var originalObj = sp.getObjectVar();
+
+                Var nextSubj = originalSubj;
+                StatementPattern lastStatementPatternAdded = null;
+                for (final URI chainElement : chain ){
+                    final String s = UUID.randomUUID().toString();
+                    final Var currentObj = new Var("c-" + s);
                     StatementPattern statementPattern = new 
StatementPattern(nextSubj, new Var(chainElement.stringValue()), currentObj, 
sp.getContextVar());
                     if (chainElement instanceof InverseURI){
-                       statementPattern = new StatementPattern(currentObj, new 
Var(chainElement.stringValue()), nextSubj, sp.getContextVar());
+                        statementPattern = new StatementPattern(currentObj, 
new Var(chainElement.stringValue()), nextSubj, sp.getContextVar());
                     }
-                       expandedPatterns.add(statementPattern);
-                       lastStatementPatternAdded = statementPattern;
+                    expandedPatterns.add(statementPattern);
+                    lastStatementPatternAdded = statementPattern;
                     nextSubj = currentObj;
-                       
-               }
-               lastStatementPatternAdded.setObjectVar(originalObj);
-               
-               TupleExpr lastRight = null;
-               // replace the statement pattern with a series of joins
-               for (StatementPattern pattern : expandedPatterns){
-                       if (lastRight == null){
-                               lastRight = pattern;
-                       }
-                       else {
-                               Join newJoin = new Join(pattern, lastRight);
-                               lastRight = newJoin;
-                       }
-               }
-               if (lastRight != null){
-                       node.replaceWith(lastRight);    
-               }
-               
+
+                }
+                lastStatementPatternAdded.setObjectVar(originalObj);
+
+                TupleExpr lastRight = null;
+                // replace the statement pattern with a series of joins
+                for (final StatementPattern pattern : expandedPatterns){
+                    if (lastRight == null){
+                        lastRight = pattern;
+                    }
+                    else {
+                        final Join newJoin = new Join(pattern, lastRight);
+                        lastRight = newJoin;
+                    }
+                }
+                if (lastRight != null){
+                    node.replaceWith(lastRight);
+                }
+
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e9488ff6/sail/src/main/java/org/apache/rya/rdftriplestore/inference/SubClassOfVisitor.java
----------------------------------------------------------------------
diff --git 
a/sail/src/main/java/org/apache/rya/rdftriplestore/inference/SubClassOfVisitor.java
 
b/sail/src/main/java/org/apache/rya/rdftriplestore/inference/SubClassOfVisitor.java
index 7fb1b4a..1f2fd27 100644
--- 
a/sail/src/main/java/org/apache/rya/rdftriplestore/inference/SubClassOfVisitor.java
+++ 
b/sail/src/main/java/org/apache/rya/rdftriplestore/inference/SubClassOfVisitor.java
@@ -6,9 +6,9 @@
  * 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
@@ -18,19 +18,18 @@
  */
 package org.apache.rya.rdftriplestore.inference;
 
+import java.util.Collection;
+import java.util.UUID;
+
 import org.apache.rya.api.RdfCloudTripleStoreConfiguration;
 import org.apache.rya.api.utils.NullableStatementImpl;
 import org.apache.rya.rdftriplestore.utils.FixedStatementPattern;
-import org.apache.rya.rdftriplestore.utils.FixedStatementPattern;
 import org.openrdf.model.URI;
 import org.openrdf.model.vocabulary.RDF;
 import org.openrdf.model.vocabulary.RDFS;
 import org.openrdf.query.algebra.StatementPattern;
 import org.openrdf.query.algebra.Var;
 
-import java.util.Collection;
-import java.util.UUID;
-
 /**
  * Class SubClassOfVisitor
  * Date: Mar 29, 2011
@@ -38,14 +37,14 @@ import java.util.UUID;
  */
 public class SubClassOfVisitor extends AbstractInferVisitor {
 
-    public SubClassOfVisitor(RdfCloudTripleStoreConfiguration conf, 
InferenceEngine inferenceEngine) {
+    public SubClassOfVisitor(final RdfCloudTripleStoreConfiguration conf, 
final InferenceEngine inferenceEngine) {
         super(conf, inferenceEngine);
         include = conf.isInferSubClassOf();
     }
 
     @Override
-    protected void meetSP(StatementPattern node) throws Exception {
-        StatementPattern sp = node.clone();
+    protected void meetSP(final StatementPattern node) throws Exception {
+        final StatementPattern sp = node.clone();
         final Var predVar = sp.getPredicateVar();
         final Var objVar = sp.getObjectVar();
         final Var conVar = sp.getContextVar();
@@ -62,19 +61,19 @@ public class SubClassOfVisitor extends AbstractInferVisitor 
{
 //            join.getProperties().put(InferConstants.INFERRED, 
InferConstants.TRUE);
 //            node.replaceWith(join);
 
-            URI subclassof_uri = (URI) objVar.getValue();
-            Collection<URI> parents = 
inferenceEngine.findParents(inferenceEngine.getSubClassOfGraph(), 
subclassof_uri);
+            final URI subclassof_uri = (URI) objVar.getValue();
+            final Collection<URI> parents = 
InferenceEngine.findParents(inferenceEngine.getSubClassOfGraph(), 
subclassof_uri);
             if (parents != null && parents.size() > 0) {
-                String s = UUID.randomUUID().toString();
-                Var typeVar = new Var(s);
-                FixedStatementPattern fsp = new FixedStatementPattern(typeVar, 
new Var("c-" + s, RDFS.SUBCLASSOF), objVar, conVar);
+                final String s = UUID.randomUUID().toString();
+                final Var typeVar = new Var(s);
+                final FixedStatementPattern fsp = new 
FixedStatementPattern(typeVar, new Var("c-" + s, RDFS.SUBCLASSOF), objVar, 
conVar);
                 parents.add(subclassof_uri);
-                for (URI u : parents) {
+                for (final URI u : parents) {
                     fsp.statements.add(new NullableStatementImpl(u, 
RDFS.SUBCLASSOF, subclassof_uri));
                 }
 
-                StatementPattern rdfType = new 
DoNotExpandSP(sp.getSubjectVar(), sp.getPredicateVar(), typeVar, conVar);
-                InferJoin join = new InferJoin(fsp, rdfType);
+                final StatementPattern rdfType = new 
DoNotExpandSP(sp.getSubjectVar(), sp.getPredicateVar(), typeVar, conVar);
+                final InferJoin join = new InferJoin(fsp, rdfType);
                 join.getProperties().put(InferConstants.INFERRED, 
InferConstants.TRUE);
                 node.replaceWith(join);
             }

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e9488ff6/sail/src/main/java/org/apache/rya/rdftriplestore/inference/SubPropertyOfVisitor.java
----------------------------------------------------------------------
diff --git 
a/sail/src/main/java/org/apache/rya/rdftriplestore/inference/SubPropertyOfVisitor.java
 
b/sail/src/main/java/org/apache/rya/rdftriplestore/inference/SubPropertyOfVisitor.java
index 9447658..f3a40ab 100644
--- 
a/sail/src/main/java/org/apache/rya/rdftriplestore/inference/SubPropertyOfVisitor.java
+++ 
b/sail/src/main/java/org/apache/rya/rdftriplestore/inference/SubPropertyOfVisitor.java
@@ -6,9 +6,9 @@
  * 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
@@ -18,10 +18,12 @@
  */
 package org.apache.rya.rdftriplestore.inference;
 
+import java.util.Set;
+import java.util.UUID;
+
 import org.apache.rya.api.RdfCloudTripleStoreConfiguration;
 import org.apache.rya.api.utils.NullableStatementImpl;
 import org.apache.rya.rdftriplestore.utils.FixedStatementPattern;
-import org.apache.rya.rdftriplestore.utils.FixedStatementPattern;
 import org.openrdf.model.URI;
 import org.openrdf.model.vocabulary.RDF;
 import org.openrdf.model.vocabulary.RDFS;
@@ -29,9 +31,6 @@ import org.openrdf.model.vocabulary.SESAME;
 import org.openrdf.query.algebra.StatementPattern;
 import org.openrdf.query.algebra.Var;
 
-import java.util.Set;
-import java.util.UUID;
-
 /**
  * All predicates are changed
  * Class SubPropertyOfVisitor
@@ -40,18 +39,18 @@ import java.util.UUID;
  */
 public class SubPropertyOfVisitor extends AbstractInferVisitor {
 
-    public SubPropertyOfVisitor(RdfCloudTripleStoreConfiguration conf, 
InferenceEngine inferenceEngine) {
+    public SubPropertyOfVisitor(final RdfCloudTripleStoreConfiguration conf, 
final InferenceEngine inferenceEngine) {
         super(conf, inferenceEngine);
         include = conf.isInferSubPropertyOf();
     }
 
     @Override
-    protected void meetSP(StatementPattern node) throws Exception {
-        StatementPattern sp = node.clone();
+    protected void meetSP(final StatementPattern node) throws Exception {
+        final StatementPattern sp = node.clone();
         final Var predVar = sp.getPredicateVar();
 
-        URI pred = (URI) predVar.getValue();
-        String predNamespace = pred.getNamespace();
+        final URI pred = (URI) predVar.getValue();
+        final String predNamespace = pred.getNamespace();
 
         final Var objVar = sp.getObjectVar();
         final Var cntxtVar = sp.getContextVar();
@@ -95,21 +94,21 @@ public class SubPropertyOfVisitor extends 
AbstractInferVisitor {
 //                node.replaceWith(new StatementPattern(subjVar, vc, objVar, 
node.getContextVar()));
 //            }
 
-            URI subprop_uri = (URI) predVar.getValue();
-            Set<URI> parents = 
inferenceEngine.findParents(inferenceEngine.getSubPropertyOfGraph(), 
subprop_uri);
+            final URI subprop_uri = (URI) predVar.getValue();
+            final Set<URI> parents = 
InferenceEngine.findParents(inferenceEngine.getSubPropertyOfGraph(), 
subprop_uri);
             if (parents != null && parents.size() > 0) {
-                String s = UUID.randomUUID().toString();
-                Var typeVar = new Var(s);
-                FixedStatementPattern fsp = new FixedStatementPattern(typeVar, 
new Var("c-" + s, RDFS.SUBPROPERTYOF), predVar, cntxtVar);
+                final String s = UUID.randomUUID().toString();
+                final Var typeVar = new Var(s);
+                final FixedStatementPattern fsp = new 
FixedStatementPattern(typeVar, new Var("c-" + s, RDFS.SUBPROPERTYOF), predVar, 
cntxtVar);
 //                fsp.statements.add(new NullableStatementImpl(subprop_uri, 
RDFS.SUBPROPERTYOF, subprop_uri));
                 //add self
                 parents.add(subprop_uri);
-                for (URI u : parents) {
+                for (final URI u : parents) {
                     fsp.statements.add(new NullableStatementImpl(u, 
RDFS.SUBPROPERTYOF, subprop_uri));
                 }
 
-                StatementPattern rdfType = new 
DoNotExpandSP(sp.getSubjectVar(), typeVar, sp.getObjectVar(), cntxtVar);
-                InferJoin join = new InferJoin(fsp, rdfType);
+                final StatementPattern rdfType = new 
DoNotExpandSP(sp.getSubjectVar(), typeVar, sp.getObjectVar(), cntxtVar);
+                final InferJoin join = new InferJoin(fsp, rdfType);
                 join.getProperties().put(InferConstants.INFERRED, 
InferConstants.TRUE);
                 node.replaceWith(join);
             }

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e9488ff6/sail/src/main/java/org/apache/rya/rdftriplestore/inference/TransitivePropertyVisitor.java
----------------------------------------------------------------------
diff --git 
a/sail/src/main/java/org/apache/rya/rdftriplestore/inference/TransitivePropertyVisitor.java
 
b/sail/src/main/java/org/apache/rya/rdftriplestore/inference/TransitivePropertyVisitor.java
index b50da9c..45f74ed 100644
--- 
a/sail/src/main/java/org/apache/rya/rdftriplestore/inference/TransitivePropertyVisitor.java
+++ 
b/sail/src/main/java/org/apache/rya/rdftriplestore/inference/TransitivePropertyVisitor.java
@@ -1,5 +1,3 @@
-package org.apache.rya.rdftriplestore.inference;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -8,9 +6,9 @@ package org.apache.rya.rdftriplestore.inference;
  * 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
@@ -18,12 +16,10 @@ package org.apache.rya.rdftriplestore.inference;
  * specific language governing permissions and limitations
  * under the License.
  */
-
-
+package org.apache.rya.rdftriplestore.inference;
 
 import org.apache.rya.api.RdfCloudTripleStoreConfiguration;
 import org.apache.rya.rdftriplestore.utils.TransitivePropertySP;
-import org.apache.rya.rdftriplestore.utils.TransitivePropertySP;
 import org.openrdf.model.URI;
 import org.openrdf.model.vocabulary.RDF;
 import org.openrdf.model.vocabulary.RDFS;
@@ -39,18 +35,18 @@ import org.openrdf.query.algebra.Var;
  */
 public class TransitivePropertyVisitor extends AbstractInferVisitor {
 
-    public TransitivePropertyVisitor(RdfCloudTripleStoreConfiguration conf, 
InferenceEngine inferenceEngine) {
+    public TransitivePropertyVisitor(final RdfCloudTripleStoreConfiguration 
conf, final InferenceEngine inferenceEngine) {
         super(conf, inferenceEngine);
         include = conf.isInferTransitiveProperty();
     }
 
     @Override
-    protected void meetSP(StatementPattern node) throws Exception {
-        StatementPattern sp = node.clone();
+    protected void meetSP(final StatementPattern node) throws Exception {
+        final StatementPattern sp = node.clone();
         final Var predVar = sp.getPredicateVar();
 
-        URI pred = (URI) predVar.getValue();
-        String predNamespace = pred.getNamespace();
+        final URI pred = (URI) predVar.getValue();
+        final String predNamespace = pred.getNamespace();
 
         final Var objVar = sp.getObjectVar();
         final Var cntxtVar = sp.getContextVar();
@@ -60,7 +56,7 @@ public class TransitivePropertyVisitor extends 
AbstractInferVisitor {
                 !RDFS.NAMESPACE.equals(predNamespace)
                 && !EXPANDED.equals(cntxtVar)) {
 
-            URI transPropUri = (URI) predVar.getValue();
+            final URI transPropUri = (URI) predVar.getValue();
             if (inferenceEngine.isTransitiveProperty(transPropUri)) {
                 node.replaceWith(new TransitivePropertySP(sp.getSubjectVar(), 
sp.getPredicateVar(), sp.getObjectVar(), sp.getContextVar()));
             }

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e9488ff6/sail/src/main/java/org/apache/rya/rdftriplestore/utils/FixedStatementPattern.java
----------------------------------------------------------------------
diff --git 
a/sail/src/main/java/org/apache/rya/rdftriplestore/utils/FixedStatementPattern.java
 
b/sail/src/main/java/org/apache/rya/rdftriplestore/utils/FixedStatementPattern.java
index bfefe12..ee63213 100644
--- 
a/sail/src/main/java/org/apache/rya/rdftriplestore/utils/FixedStatementPattern.java
+++ 
b/sail/src/main/java/org/apache/rya/rdftriplestore/utils/FixedStatementPattern.java
@@ -1,5 +1,3 @@
-package org.apache.rya.rdftriplestore.utils;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -8,9 +6,9 @@ package org.apache.rya.rdftriplestore.utils;
  * 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
@@ -18,16 +16,15 @@ package org.apache.rya.rdftriplestore.utils;
  * specific language governing permissions and limitations
  * under the License.
  */
+package org.apache.rya.rdftriplestore.utils;
 
-
+import java.util.ArrayList;
+import java.util.Collection;
 
 import org.openrdf.model.Statement;
 import org.openrdf.query.algebra.StatementPattern;
 import org.openrdf.query.algebra.Var;
 
-import java.util.ArrayList;
-import java.util.Collection;
-
 /**
  * StatementPattern gives fixed statements back
  *
@@ -36,24 +33,24 @@ import java.util.Collection;
  * Time: 2:42:06 PM
  */
 public class FixedStatementPattern extends StatementPattern {
-    public Collection<Statement> statements = new ArrayList();
+    public Collection<Statement> statements = new ArrayList<>();
 
     public FixedStatementPattern() {
     }
 
-    public FixedStatementPattern(Var subject, Var predicate, Var object) {
+    public FixedStatementPattern(final Var subject, final Var predicate, final 
Var object) {
         super(subject, predicate, object);
     }
 
-    public FixedStatementPattern(Scope scope, Var subject, Var predicate, Var 
object) {
+    public FixedStatementPattern(final Scope scope, final Var subject, final 
Var predicate, final Var object) {
         super(scope, subject, predicate, object);
     }
 
-    public FixedStatementPattern(Var subject, Var predicate, Var object, Var 
context) {
+    public FixedStatementPattern(final Var subject, final Var predicate, final 
Var object, final Var context) {
         super(subject, predicate, object, context);
     }
 
-    public FixedStatementPattern(Scope scope, Var subjVar, Var predVar, Var 
objVar, Var conVar) {
+    public FixedStatementPattern(final Scope scope, final Var subjVar, final 
Var predVar, final Var objVar, final Var conVar) {
         super(scope, subjVar, predVar, objVar, conVar);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e9488ff6/sail/src/test/java/org/apache/rya/rdftriplestore/inference/InferenceEngineTest.java
----------------------------------------------------------------------
diff --git 
a/sail/src/test/java/org/apache/rya/rdftriplestore/inference/InferenceEngineTest.java
 
b/sail/src/test/java/org/apache/rya/rdftriplestore/inference/InferenceEngineTest.java
index 556413f..10edf49 100644
--- 
a/sail/src/test/java/org/apache/rya/rdftriplestore/inference/InferenceEngineTest.java
+++ 
b/sail/src/test/java/org/apache/rya/rdftriplestore/inference/InferenceEngineTest.java
@@ -1,4 +1,3 @@
-package org.apache.rya.rdftriplestore.inference;
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -17,10 +16,12 @@ package org.apache.rya.rdftriplestore.inference;
  * specific language governing permissions and limitations
  * under the License.
  */
+package org.apache.rya.rdftriplestore.inference;
 
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -33,7 +34,6 @@ import org.apache.rya.rdftriplestore.RdfCloudTripleStore;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.junit.After;
 import org.junit.Assert;
-
 import org.junit.Test;
 import org.openrdf.model.Resource;
 import org.openrdf.model.URI;
@@ -44,12 +44,14 @@ import org.openrdf.query.QueryLanguage;
 import org.openrdf.repository.sail.SailRepository;
 import org.openrdf.repository.sail.SailRepositoryConnection;
 
+import com.google.common.collect.Sets;
+
 import junit.framework.TestCase;
 
 public class InferenceEngineTest extends TestCase {
     private Connector connector;
     private AccumuloRyaDAO dao;
-    private ValueFactory vf = new ValueFactoryImpl();
+    private final ValueFactory vf = new ValueFactoryImpl();
     private AccumuloRdfConfiguration conf;
     private RdfCloudTripleStore store;
     private InferenceEngine inferenceEngine;
@@ -77,6 +79,7 @@ public class InferenceEngineTest extends TestCase {
         conn = repository.getConnection();
     }
 
+    @Override
     @After
     public void tearDown() throws Exception {
         conn.close();
@@ -88,7 +91,7 @@ public class InferenceEngineTest extends TestCase {
 
     @Test
     public void testSubClassGraph() throws Exception {
-        String insert = "INSERT DATA { GRAPH <http://updated/test> {\n"
+        final String insert = "INSERT DATA { GRAPH <http://updated/test> {\n"
                 + "  <urn:A> rdfs:subClassOf <urn:C> . \n"
                 + "  <urn:B> rdfs:subClassOf <urn:C> . \n"
                 + "  <urn:C> rdfs:subClassOf <urn:D> . \n"
@@ -99,34 +102,33 @@ public class InferenceEngineTest extends TestCase {
                 + "}}";
         conn.prepareUpdate(QueryLanguage.SPARQL, insert).execute();
         inferenceEngine.refreshGraph();
-        Graph graph = inferenceEngine.getSubClassOfGraph();
-        URI a = vf.createURI("urn:A");
-        URI b = vf.createURI("urn:B");
-        URI c = vf.createURI("urn:C");
-        URI d = vf.createURI("urn:D");
-        URI e = vf.createURI("urn:E");
-        URI f = vf.createURI("urn:F");
-        URI g = vf.createURI("urn:G");
-        URI z = vf.createURI("urn:Z");
-        URI missing = vf.createURI("urn:Missing");
-        Set<URI> empty = new HashSet<>();
-        Set<URI> belowLevel2 = new HashSet<>(Arrays.asList(new URI[] { a, b 
}));
-        Set<URI> belowLevel3 = new HashSet<>(Arrays.asList(new URI[] { a, b, 
c, d, e }));
-        Set<URI> belowLevel4 = new HashSet<>(Arrays.asList(new URI[] { a, b, 
c, d, e, f, g }));
-        Assert.assertEquals(empty, inferenceEngine.findParents(graph, a));
-        Assert.assertEquals(empty, inferenceEngine.findParents(graph, b));
-        Assert.assertEquals(empty, inferenceEngine.findParents(graph, z));
-        Assert.assertEquals(empty, inferenceEngine.findParents(graph, 
missing));
-        Assert.assertEquals(belowLevel2, inferenceEngine.findParents(graph, 
c));
-        Assert.assertEquals(belowLevel3, inferenceEngine.findParents(graph, 
d));
-        Assert.assertEquals(belowLevel3, inferenceEngine.findParents(graph, 
e));
-        Assert.assertEquals(belowLevel4, inferenceEngine.findParents(graph, 
f));
-        Assert.assertEquals(belowLevel4, inferenceEngine.findParents(graph, 
g));
+        final URI a = vf.createURI("urn:A");
+        final URI b = vf.createURI("urn:B");
+        final URI c = vf.createURI("urn:C");
+        final URI d = vf.createURI("urn:D");
+        final URI e = vf.createURI("urn:E");
+        final URI f = vf.createURI("urn:F");
+        final URI g = vf.createURI("urn:G");
+        final URI z = vf.createURI("urn:Z");
+        final URI missing = vf.createURI("urn:Missing");
+        final Set<URI> empty = new HashSet<>();
+        final Set<URI> belowLevel2 = new HashSet<>(Arrays.asList(new URI[] { 
a, b }));
+        final Set<URI> belowLevel3 = new HashSet<>(Arrays.asList(new URI[] { 
a, b, c, d, e }));
+        final Set<URI> belowLevel4 = new HashSet<>(Arrays.asList(new URI[] { 
a, b, c, d, e, f, g }));
+        Assert.assertEquals(empty, inferenceEngine.getSubClasses(a));
+        Assert.assertEquals(empty, inferenceEngine.getSubClasses(b));
+        Assert.assertEquals(empty, inferenceEngine.getSubClasses(z));
+        Assert.assertEquals(empty, inferenceEngine.getSubClasses(missing));
+        Assert.assertEquals(belowLevel2, inferenceEngine.getSubClasses(c));
+        Assert.assertEquals(belowLevel3, inferenceEngine.getSubClasses(d));
+        Assert.assertEquals(belowLevel3, inferenceEngine.getSubClasses(e));
+        Assert.assertEquals(belowLevel4, inferenceEngine.getSubClasses(f));
+        Assert.assertEquals(belowLevel4, inferenceEngine.getSubClasses(g));
     }
 
     @Test
     public void testSubPropertyGraph() throws Exception {
-        String insert = "INSERT DATA { GRAPH <http://updated/test> {\n"
+        final String insert = "INSERT DATA { GRAPH <http://updated/test> {\n"
                 + "  <urn:p> rdfs:subPropertyOf <urn:q> . \n"
                 + "  <urn:p> rdfs:subPropertyOf <urn:r> . \n"
                 + "  <urn:r> owl:equivalentProperty <urn:s> . \n"
@@ -138,35 +140,35 @@ public class InferenceEngineTest extends TestCase {
                 + "}}";
         conn.prepareUpdate(QueryLanguage.SPARQL, insert).execute();
         inferenceEngine.refreshGraph();
-        Graph graph = inferenceEngine.getSubPropertyOfGraph();
-        URI p = vf.createURI("urn:p");
-        URI q = vf.createURI("urn:q");
-        URI r = vf.createURI("urn:r");
-        URI s = vf.createURI("urn:s");
-        URI t = vf.createURI("urn:t");
-        URI u = vf.createURI("urn:u");
-        URI v = vf.createURI("urn:v");
-        URI w = vf.createURI("urn:w");
-        URI missing = vf.createURI("urn:Missing");
-        Set<URI> empty = new HashSet<>();
-        Set<URI> belowQ = new HashSet<>(Arrays.asList(new URI[] { p }));
-        Set<URI> belowR = new HashSet<>(Arrays.asList(new URI[] { p, r, s }));
-        Set<URI> belowT = new HashSet<>(Arrays.asList(new URI[] { p, q }));
-        Set<URI> belowU = new HashSet<>(Arrays.asList(new URI[] { p, q, r, s, 
t, u, v }));
-        Assert.assertEquals(empty, inferenceEngine.findParents(graph, p));
-        Assert.assertEquals(empty, inferenceEngine.findParents(graph, w));
-        Assert.assertEquals(empty, inferenceEngine.findParents(graph, 
missing));
-        Assert.assertEquals(belowQ, inferenceEngine.findParents(graph, q));
-        Assert.assertEquals(belowR, inferenceEngine.findParents(graph, r));
-        Assert.assertEquals(belowR, inferenceEngine.findParents(graph, s));
-        Assert.assertEquals(belowT, inferenceEngine.findParents(graph, t));
-        Assert.assertEquals(belowU, inferenceEngine.findParents(graph, u));
-        Assert.assertEquals(belowU, inferenceEngine.findParents(graph, v));
+        final Graph graph = inferenceEngine.getSubPropertyOfGraph();
+        final URI p = vf.createURI("urn:p");
+        final URI q = vf.createURI("urn:q");
+        final URI r = vf.createURI("urn:r");
+        final URI s = vf.createURI("urn:s");
+        final URI t = vf.createURI("urn:t");
+        final URI u = vf.createURI("urn:u");
+        final URI v = vf.createURI("urn:v");
+        final URI w = vf.createURI("urn:w");
+        final URI missing = vf.createURI("urn:Missing");
+        final Set<URI> empty = new HashSet<>();
+        final Set<URI> belowQ = new HashSet<>(Arrays.asList(new URI[] { p }));
+        final Set<URI> belowR = new HashSet<>(Arrays.asList(new URI[] { p, r, 
s }));
+        final Set<URI> belowT = new HashSet<>(Arrays.asList(new URI[] { p, q 
}));
+        final Set<URI> belowU = new HashSet<>(Arrays.asList(new URI[] { p, q, 
r, s, t, u, v }));
+        Assert.assertEquals(empty, InferenceEngine.findParents(graph, p));
+        Assert.assertEquals(empty, InferenceEngine.findParents(graph, w));
+        Assert.assertEquals(empty, InferenceEngine.findParents(graph, 
missing));
+        Assert.assertEquals(belowQ, InferenceEngine.findParents(graph, q));
+        Assert.assertEquals(belowR, InferenceEngine.findParents(graph, r));
+        Assert.assertEquals(belowR, InferenceEngine.findParents(graph, s));
+        Assert.assertEquals(belowT, InferenceEngine.findParents(graph, t));
+        Assert.assertEquals(belowU, InferenceEngine.findParents(graph, u));
+        Assert.assertEquals(belowU, InferenceEngine.findParents(graph, v));
     }
 
     @Test
     public void testDomainRange() throws Exception {
-        String insert = "INSERT DATA { GRAPH <http://updated/test> {\n"
+        final String insert = "INSERT DATA { GRAPH <http://updated/test> {\n"
                 + "  <urn:p1> rdfs:subPropertyOf <urn:p2> . \n"
                 + "  <urn:p2> rdfs:subPropertyOf <urn:p3> . \n"
                 + "  <urn:q1> rdfs:subPropertyOf <urn:q2> . \n"
@@ -187,25 +189,25 @@ public class InferenceEngineTest extends TestCase {
                 + "}}";
         conn.prepareUpdate(QueryLanguage.SPARQL, insert).execute();
         inferenceEngine.refreshGraph();
-        Set<URI> hasDomainD1 = 
inferenceEngine.getPropertiesWithDomain(vf.createURI("urn:D1"));
-        Set<URI> hasDomainD2 = 
inferenceEngine.getPropertiesWithDomain(vf.createURI("urn:D2"));
-        Set<URI> hasDomainD3 = 
inferenceEngine.getPropertiesWithDomain(vf.createURI("urn:D3"));
-        Set<URI> hasRangeD1 = 
inferenceEngine.getPropertiesWithRange(vf.createURI("urn:D1"));
-        Set<URI> hasRangeD2 = 
inferenceEngine.getPropertiesWithRange(vf.createURI("urn:D2"));
-        Set<URI> hasRangeD3 = 
inferenceEngine.getPropertiesWithRange(vf.createURI("urn:D3"));
-        Set<URI> hasDomainR1 = 
inferenceEngine.getPropertiesWithDomain(vf.createURI("urn:R1"));
-        Set<URI> hasDomainR2 = 
inferenceEngine.getPropertiesWithDomain(vf.createURI("urn:R2"));
-        Set<URI> hasDomainR3 = 
inferenceEngine.getPropertiesWithDomain(vf.createURI("urn:R3"));
-        Set<URI> hasRangeR1 = 
inferenceEngine.getPropertiesWithRange(vf.createURI("urn:R1"));
-        Set<URI> hasRangeR2 = 
inferenceEngine.getPropertiesWithRange(vf.createURI("urn:R2"));
-        Set<URI> hasRangeR3 = 
inferenceEngine.getPropertiesWithRange(vf.createURI("urn:R3"));
-        Set<URI> empty = new HashSet<>();
-        Set<URI> expectedForward = new HashSet<>();
+        final Set<URI> hasDomainD1 = 
inferenceEngine.getPropertiesWithDomain(vf.createURI("urn:D1"));
+        final Set<URI> hasDomainD2 = 
inferenceEngine.getPropertiesWithDomain(vf.createURI("urn:D2"));
+        final Set<URI> hasDomainD3 = 
inferenceEngine.getPropertiesWithDomain(vf.createURI("urn:D3"));
+        final Set<URI> hasRangeD1 = 
inferenceEngine.getPropertiesWithRange(vf.createURI("urn:D1"));
+        final Set<URI> hasRangeD2 = 
inferenceEngine.getPropertiesWithRange(vf.createURI("urn:D2"));
+        final Set<URI> hasRangeD3 = 
inferenceEngine.getPropertiesWithRange(vf.createURI("urn:D3"));
+        final Set<URI> hasDomainR1 = 
inferenceEngine.getPropertiesWithDomain(vf.createURI("urn:R1"));
+        final Set<URI> hasDomainR2 = 
inferenceEngine.getPropertiesWithDomain(vf.createURI("urn:R2"));
+        final Set<URI> hasDomainR3 = 
inferenceEngine.getPropertiesWithDomain(vf.createURI("urn:R3"));
+        final Set<URI> hasRangeR1 = 
inferenceEngine.getPropertiesWithRange(vf.createURI("urn:R1"));
+        final Set<URI> hasRangeR2 = 
inferenceEngine.getPropertiesWithRange(vf.createURI("urn:R2"));
+        final Set<URI> hasRangeR3 = 
inferenceEngine.getPropertiesWithRange(vf.createURI("urn:R3"));
+        final Set<URI> empty = new HashSet<>();
+        final Set<URI> expectedForward = new HashSet<>();
         expectedForward.add(vf.createURI("urn:p2"));
         expectedForward.add(vf.createURI("urn:p1"));
         expectedForward.add(vf.createURI("urn:q2"));
         expectedForward.add(vf.createURI("urn:q1"));
-        Set<URI> expectedInverse = new HashSet<>();
+        final Set<URI> expectedInverse = new HashSet<>();
         expectedInverse.add(vf.createURI("urn:i1"));
         expectedInverse.add(vf.createURI("urn:i2"));
         expectedInverse.add(vf.createURI("urn:j1"));
@@ -226,7 +228,7 @@ public class InferenceEngineTest extends TestCase {
 
     @Test
     public void testAllValuesFrom() throws Exception {
-        String insert = "INSERT DATA { GRAPH <http://updated/test> {\n"
+        final String insert = "INSERT DATA { GRAPH <http://updated/test> {\n"
                 + "  <urn:Dog> owl:onProperty <urn:relative> ; 
owl:allValuesFrom <urn:Dog> .\n"
                 + "  <urn:Retriever> rdfs:subClassOf <urn:Dog> .\n"
                 + "  <urn:Terrier> rdfs:subClassOf <urn:Dog> .\n"
@@ -257,7 +259,7 @@ public class InferenceEngineTest extends TestCase {
 
     @Test
     public void testHasValueGivenProperty() throws Exception {
-        String insert = "INSERT DATA { GRAPH <http://updated/test> {\n"
+        final String insert = "INSERT DATA { GRAPH <http://updated/test> {\n"
                 + "  <urn:Biped> owl:onProperty <urn:walksUsingLegs>  . \n"
                 + "  <urn:Biped> owl:hasValue \"2\" . \n"
                 + "  <urn:Mammal> owl:onProperty <urn:taxon> . \n"
@@ -288,7 +290,7 @@ public class InferenceEngineTest extends TestCase {
 
     @Test
     public void testHasValueGivenType() throws Exception {
-        String insert = "INSERT DATA { GRAPH <http://updated/test> {\n"
+        final String insert = "INSERT DATA { GRAPH <http://updated/test> {\n"
                 + "  <urn:Biped> owl:onProperty <urn:walksUsingLegs>  . \n"
                 + "  <urn:Biped> owl:hasValue \"2\" . \n"
                 + "  <urn:Mammal> owl:onProperty <urn:taxon> . \n"
@@ -352,11 +354,10 @@ public class InferenceEngineTest extends TestCase {
                 + "}}";
         conn.prepareUpdate(QueryLanguage.SPARQL, ontology).execute();
         inferenceEngine.refreshGraph();
-        Graph subClassGraph = inferenceEngine.getSubClassOfGraph();
-        Set<URI> subClassesA = inferenceEngine.findParents(subClassGraph, 
vf.createURI("urn:A"));
-        Set<URI> subClassesB = inferenceEngine.findParents(subClassGraph, 
vf.createURI("urn:B"));
-        Set<URI> expectedA = new HashSet<>();
-        Set<URI> expectedB = new HashSet<>();
+        final Set<URI> subClassesA = 
inferenceEngine.getSubClasses(vf.createURI("urn:A"));
+        final Set<URI> subClassesB = 
inferenceEngine.getSubClasses(vf.createURI("urn:B"));
+        final Set<URI> expectedA = new HashSet<>();
+        final Set<URI> expectedB = new HashSet<>();
         expectedB.add(vf.createURI("urn:Y"));
         expectedB.add(vf.createURI("urn:SubY"));
         expectedB.add(vf.createURI("urn:Z"));
@@ -365,4 +366,76 @@ public class InferenceEngineTest extends TestCase {
         Assert.assertEquals(expectedA, subClassesA);
         Assert.assertEquals(expectedB, subClassesB);
     }
+
+    public void testIntersectionOf() throws Exception {
+        final String ontology = "INSERT DATA { GRAPH <http://updated/test> {\n"
+                + "  <urn:Mother> owl:intersectionOf _:bnode1 . \n"
+                + "  _:bnode1 rdf:first <urn:Woman> . \n"
+                + "  _:bnode1 rdf:rest _:bnode2 . \n"
+                + "  _:bnode2 rdf:first <urn:Parent> . \n"
+                + "  _:bnode2 rdf:rest rdf:nil . \n"
+                + "  <urn:Father> owl:intersectionOf _:bnode3 . \n"
+                + "  _:bnode3 rdf:first <urn:Man> . \n"
+                + "  _:bnode3 rdf:rest _:bnode4 . \n"
+                + "  _:bnode4 rdf:first <urn:Parent> . \n"
+                + "  _:bnode4 rdf:rest rdf:nil . \n"
+                + "  <urn:Mom> owl:intersectionOf _:bnode5 . \n"
+                + "  _:bnode5 rdf:first <urn:Woman> . \n"
+                + "  _:bnode5 rdf:rest _:bnode6 . \n"
+                + "  _:bnode6 rdf:first <urn:Parent> . \n"
+                + "  _:bnode6 rdf:rest rdf:nil . \n"
+                + "  <urn:Mother> rdfs:subClassOf <urn:ImmediateFamilyMember> 
. \n"
+                + "  <urn:ImmediateFamilyMember> rdfs:subClassOf 
<urn:Relative> . \n"
+                + "}}";
+
+        conn.prepareUpdate(QueryLanguage.SPARQL, ontology).execute();
+        inferenceEngine.refreshGraph();
+
+        final URI mother = vf.createURI("urn:Mother");
+        final URI father = vf.createURI("urn:Father");
+        final URI woman = vf.createURI("urn:Woman");
+        final URI parent = vf.createURI("urn:Parent");
+        final URI man = vf.createURI("urn:Man");
+        final URI mom = vf.createURI("urn:Mom");
+        final URI immediateFamilyMember = 
vf.createURI("urn:ImmediateFamilyMember");
+        final URI relative = vf.createURI("urn:Relative");
+
+        final List<Set<Resource>> intersectionsImplyingMother = 
Arrays.asList(Sets.newHashSet(woman, parent));
+        Assert.assertEquals(intersectionsImplyingMother, 
inferenceEngine.getIntersectionsImplying(mother));
+        final List<Set<Resource>> intersectionsImplyingFather = 
Arrays.asList(Sets.newHashSet(man, parent));
+        Assert.assertEquals(intersectionsImplyingFather, 
inferenceEngine.getIntersectionsImplying(father));
+
+        // Check that Mother is a subclassOf Parent and Woman and
+        // ImmediateFamilyMember and Relative. Also, Mother is a subclassOf
+        // Mother and Mom through inferring equivalentClass.
+        final Set<URI> motherSuperClassUris = 
inferenceEngine.getSuperClasses(mother);
+        Assert.assertNotNull(motherSuperClassUris);
+        Assert.assertEquals(6, motherSuperClassUris.size());
+        Assert.assertTrue(motherSuperClassUris.contains(parent));
+        Assert.assertTrue(motherSuperClassUris.contains(woman));
+        
Assert.assertTrue(motherSuperClassUris.contains(immediateFamilyMember));
+        Assert.assertTrue(motherSuperClassUris.contains(relative));
+        Assert.assertTrue(motherSuperClassUris.contains(mother));
+        Assert.assertTrue(motherSuperClassUris.contains(mom));
+        // Check that Father is a subclassOf Parent and Man
+        final Set<URI> fatherSuperClassUris = 
inferenceEngine.getSuperClasses(father);
+        Assert.assertNotNull(fatherSuperClassUris);
+        Assert.assertEquals(2, fatherSuperClassUris.size());
+        Assert.assertTrue(fatherSuperClassUris.contains(parent));
+        Assert.assertTrue(fatherSuperClassUris.contains(man));
+
+        // Check that Mom is a subclassOf Parent and Woman and
+        // ImmediateFamilyMember and Relative. The last 2 should be inferred
+        // from having the same intersection as Mother. Also, Mom is a
+        // subclassOf Mother and Mom through inferring equivalentClass.
+        final Set<URI> momSuperClassUris = 
inferenceEngine.getSuperClasses(mom);
+        Assert.assertNotNull(momSuperClassUris);
+        Assert.assertEquals(6, momSuperClassUris.size());
+        Assert.assertTrue(momSuperClassUris.contains(parent));
+        Assert.assertTrue(momSuperClassUris.contains(woman));
+        Assert.assertTrue(momSuperClassUris.contains(immediateFamilyMember));
+        Assert.assertTrue(momSuperClassUris.contains(relative));
+        Assert.assertTrue(momSuperClassUris.contains(mother));
+        Assert.assertTrue(momSuperClassUris.contains(mom));
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e9488ff6/sail/src/test/java/org/apache/rya/rdftriplestore/inference/InferenceIT.java
----------------------------------------------------------------------
diff --git 
a/sail/src/test/java/org/apache/rya/rdftriplestore/inference/InferenceIT.java 
b/sail/src/test/java/org/apache/rya/rdftriplestore/inference/InferenceIT.java
index 7d6f7d1..dcda8a9 100644
--- 
a/sail/src/test/java/org/apache/rya/rdftriplestore/inference/InferenceIT.java
+++ 
b/sail/src/test/java/org/apache/rya/rdftriplestore/inference/InferenceIT.java
@@ -50,7 +50,7 @@ import junit.framework.TestCase;
 public class InferenceIT extends TestCase {
     private Connector connector;
     private AccumuloRyaDAO dao;
-    private ValueFactory vf = new ValueFactoryImpl();
+    private final ValueFactory vf = new ValueFactoryImpl();
     private AccumuloRdfConfiguration conf;
     private RdfCloudTripleStore store;
     private InferenceEngine inferenceEngine;
@@ -84,20 +84,23 @@ public class InferenceIT extends TestCase {
             @Override
             public void endQueryResult() throws 
TupleQueryResultHandlerException { }
             @Override
-            public void handleBoolean(boolean arg0) throws 
QueryResultHandlerException { }
+            public void handleBoolean(final boolean value) throws 
QueryResultHandlerException { }
             @Override
-            public void handleLinks(List<String> arg0) throws 
QueryResultHandlerException { }
+            public void handleLinks(final List<String> linkUrls) throws 
QueryResultHandlerException { }
             @Override
-            public void handleSolution(BindingSet arg0) throws 
TupleQueryResultHandlerException {
-                solutions.add(arg0);
+            public void handleSolution(final BindingSet bindingSet) throws 
TupleQueryResultHandlerException {
+                if (bindingSet != null && bindingSet.iterator().hasNext()) {
+                    solutions.add(bindingSet);
+                }
             }
             @Override
-            public void startQueryResult(List<String> arg0) throws 
TupleQueryResultHandlerException {
+            public void startQueryResult(final List<String> bindingNames) 
throws TupleQueryResultHandlerException {
                 solutions.clear();
             }
         };
     }
 
+    @Override
     @After
     public void tearDown() throws Exception {
         conn.close();
@@ -131,12 +134,12 @@ public class InferenceIT extends TestCase {
         inferenceEngine.refreshGraph();
         conn.prepareUpdate(QueryLanguage.SPARQL, instances).execute();
         conn.prepareTupleQuery(QueryLanguage.SPARQL, 
query).evaluate(resultHandler);
-        Set<Value> expected = new HashSet<>();
+        final Set<Value> expected = new HashSet<>();
         expected.add(vf.createURI("urn:Alice"));
         expected.add(vf.createURI("urn:Bob"));
         expected.add(vf.createURI("urn:Eve"));
-        Set<Value> returned = new HashSet<>();
-        for (BindingSet bs : solutions) {
+        final Set<Value> returned = new HashSet<>();
+        for (final BindingSet bs : solutions) {
             returned.add(bs.getBinding("x").getValue());
         }
         Assert.assertEquals(expected, returned);
@@ -174,13 +177,13 @@ public class InferenceIT extends TestCase {
         inferenceEngine.refreshGraph();
         conn.prepareUpdate(QueryLanguage.SPARQL, instances).execute();
         conn.prepareTupleQuery(QueryLanguage.SPARQL, 
query).evaluate(resultHandler);
-        Set<Value> expected = new HashSet<>();
+        final Set<Value> expected = new HashSet<>();
         expected.add(vf.createURI("urn:Professor1"));
         expected.add(vf.createURI("urn:Professor2"));
         expected.add(vf.createURI("urn:Professor3"));
         expected.add(vf.createURI("urn:Professor4"));
-        Set<Value> returned = new HashSet<>();
-        for (BindingSet bs : solutions) {
+        final Set<Value> returned = new HashSet<>();
+        for (final BindingSet bs : solutions) {
             returned.add(bs.getBinding("x").getValue());
         }
         Assert.assertEquals(expected, returned);
@@ -249,14 +252,14 @@ public class InferenceIT extends TestCase {
         inferenceEngine.refreshGraph();
         conn.prepareUpdate(QueryLanguage.SPARQL, instances).execute();
         conn.prepareTupleQuery(QueryLanguage.SPARQL, 
query).evaluate(resultHandler);
-        Set<Value> expected = new HashSet<>();
+        final Set<Value> expected = new HashSet<>();
         expected.add(vf.createURI("urn:Alice"));
         expected.add(vf.createURI("urn:Bob"));
         expected.add(vf.createURI("urn:Carol"));
         expected.add(vf.createURI("urn:Dan"));
         expected.add(vf.createURI("urn:Lucy"));
-        Set<Value> returned = new HashSet<>();
-        for (BindingSet bs : solutions) {
+        final Set<Value> returned = new HashSet<>();
+        for (final BindingSet bs : solutions) {
             returned.add(bs.getBinding("x").getValue());
         }
         Assert.assertEquals(expected, returned);
@@ -286,8 +289,8 @@ public class InferenceIT extends TestCase {
         conn.prepareUpdate(QueryLanguage.SPARQL, instances).execute();
         inferenceEngine.refreshGraph();
         conn.prepareTupleQuery(QueryLanguage.SPARQL, 
query).evaluate(resultHandler);
-        Set<BindingSet> expected = new HashSet<BindingSet>();
-        List<String> varNames = new LinkedList<>();
+        final Set<BindingSet> expected = new HashSet<BindingSet>();
+        final List<String> varNames = new LinkedList<>();
         varNames.add("individual");
         varNames.add("taxon");
         expected.add(new ListBindingSet(varNames, vf.createURI("urn:Alice"), 
vf.createURI("urn:Hominidae")));
@@ -324,15 +327,77 @@ public class InferenceIT extends TestCase {
         inferenceEngine.refreshGraph();
         conn.prepareUpdate(QueryLanguage.SPARQL, instances).execute();
         conn.prepareTupleQuery(QueryLanguage.SPARQL, 
query).evaluate(resultHandler);
-        Set<Value> expected = new HashSet<>();
+        final Set<Value> expected = new HashSet<>();
         expected.add(vf.createURI("urn:Bob"));
         expected.add(vf.createURI("urn:Carol"));
         expected.add(vf.createURI("urn:Eve"));
-        Set<Value> returned = new HashSet<>();
-        for (BindingSet bs : solutions) {
+        final Set<Value> returned = new HashSet<>();
+        for (final BindingSet bs : solutions) {
             returned.add(bs.getBinding("x").getValue());
         }
         Assert.assertEquals(expected, returned);
         Assert.assertEquals(expected.size(), solutions.size());
     }
+
+    public void testIntersectionOfQuery() throws Exception {
+        final String ontology = "INSERT DATA { GRAPH <http://updated/test> {\n"
+                + "  <urn:Mother> owl:intersectionOf _:bnode1 . \n"
+                + "  _:bnode1 rdf:first <urn:Woman> . \n"
+                + "  _:bnode1 rdf:rest _:bnode2 . \n"
+                + "  _:bnode2 rdf:first <urn:Parent> . \n"
+                + "  _:bnode2 rdf:rest rdf:nil . \n"
+                + "  <urn:Father> owl:intersectionOf _:bnode3 . \n"
+                + "  _:bnode3 rdf:first <urn:Man> . \n"
+                + "  _:bnode3 rdf:rest _:bnode4 . \n"
+                + "  _:bnode4 rdf:first <urn:Parent> . \n"
+                + "  _:bnode4 rdf:rest rdf:nil . \n"
+                + "}}";
+        final String instances = "INSERT DATA { GRAPH <http://updated/test> 
{\n"
+                + "  <urn:Susan> a <urn:Mother> . \n"
+                + "  <urn:Bob> a <urn:Man> . \n"
+                + "  <urn:Bob> a <urn:Parent> . \n"
+                + "}}";
+        conn.prepareUpdate(QueryLanguage.SPARQL, ontology).execute();
+        conn.prepareUpdate(QueryLanguage.SPARQL, instances).execute();
+        inferenceEngine.refreshGraph();
+
+        final List<String> varNames = new LinkedList<>();
+        varNames.add("individual");
+
+        // Find all <urn:Mother> types (expect 1 result)
+        final String motherQuery = "SELECT ?individual { GRAPH 
<http://updated/test> { ?individual rdf:type <urn:Mother> } } \n";
+        conn.prepareTupleQuery(QueryLanguage.SPARQL, 
motherQuery).evaluate(resultHandler);
+        final Set<BindingSet> expectedMothers = new HashSet<>();
+        expectedMothers.add(new ListBindingSet(varNames, 
vf.createURI("urn:Susan")));
+        Assert.assertEquals(expectedMothers, new HashSet<>(solutions));
+
+        // Find all <urn:Father> types (expect 1 result)
+        final String fatherQuery = "SELECT ?individual { GRAPH 
<http://updated/test> { ?individual rdf:type <urn:Father> } } \n";
+        conn.prepareTupleQuery(QueryLanguage.SPARQL, 
fatherQuery).evaluate(resultHandler);
+        final Set<BindingSet> expectedFathers = new HashSet<>();
+        expectedFathers.add(new ListBindingSet(varNames, 
vf.createURI("urn:Bob")));
+        Assert.assertEquals(expectedFathers, new HashSet<>(solutions));
+
+        // Find all <urn:Parent> types (expect 2 results)
+        final String parentQuery = "SELECT ?individual { GRAPH 
<http://updated/test> { ?individual rdf:type <urn:Parent> } } \n";
+        conn.prepareTupleQuery(QueryLanguage.SPARQL, 
parentQuery).evaluate(resultHandler);
+        final Set<BindingSet> expectedParents = new HashSet<>();
+        expectedParents.add(new ListBindingSet(varNames, 
vf.createURI("urn:Bob")));
+        expectedParents.add(new ListBindingSet(varNames, 
vf.createURI("urn:Susan")));
+        Assert.assertEquals(expectedParents, new HashSet<>(solutions));
+
+        // Find all <urn:Woman> types (expect 1 result)
+        final String womanQuery = "SELECT ?individual { GRAPH 
<http://updated/test> { ?individual rdf:type <urn:Woman> } } \n";
+        conn.prepareTupleQuery(QueryLanguage.SPARQL, 
womanQuery).evaluate(resultHandler);
+        final Set<BindingSet> expectedWomen = new HashSet<>();
+        expectedWomen.add(new ListBindingSet(varNames, 
vf.createURI("urn:Susan")));
+        Assert.assertEquals(expectedWomen, new HashSet<>(solutions));
+
+        // Find all <urn:Man> types (expect 1 result)
+        final String manQuery = "SELECT ?individual { GRAPH 
<http://updated/test> { ?individual rdf:type <urn:Man> } } \n";
+        conn.prepareTupleQuery(QueryLanguage.SPARQL, 
manQuery).evaluate(resultHandler);
+        final Set<BindingSet> expectedMen = new HashSet<>();
+        expectedMen.add(new ListBindingSet(varNames, vf.createURI("urn:Bob")));
+        Assert.assertEquals(expectedMen, new HashSet<>(solutions));
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e9488ff6/sail/src/test/java/org/apache/rya/rdftriplestore/inference/IntersectionOfVisitorTest.java
----------------------------------------------------------------------
diff --git 
a/sail/src/test/java/org/apache/rya/rdftriplestore/inference/IntersectionOfVisitorTest.java
 
b/sail/src/test/java/org/apache/rya/rdftriplestore/inference/IntersectionOfVisitorTest.java
new file mode 100644
index 0000000..58551a5
--- /dev/null
+++ 
b/sail/src/test/java/org/apache/rya/rdftriplestore/inference/IntersectionOfVisitorTest.java
@@ -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 org.apache.rya.rdftriplestore.inference;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.rya.accumulo.AccumuloRdfConfiguration;
+import org.junit.Test;
+import org.openrdf.model.Resource;
+import org.openrdf.model.URI;
+import org.openrdf.model.ValueFactory;
+import org.openrdf.model.impl.ValueFactoryImpl;
+import org.openrdf.model.vocabulary.RDF;
+import org.openrdf.query.algebra.Join;
+import org.openrdf.query.algebra.Projection;
+import org.openrdf.query.algebra.ProjectionElem;
+import org.openrdf.query.algebra.ProjectionElemList;
+import org.openrdf.query.algebra.StatementPattern;
+import org.openrdf.query.algebra.Union;
+import org.openrdf.query.algebra.Var;
+
+import com.google.common.collect.Sets;
+
+/**
+ * Tests the methods of {@link IntersectionOfVisitor}.
+ */
+public class IntersectionOfVisitorTest {
+    private final AccumuloRdfConfiguration conf = new 
AccumuloRdfConfiguration();
+    private static final ValueFactory VF = new ValueFactoryImpl();
+
+    private static final URI MOTHER = VF.createURI("urn:Mother");
+    private static final URI FATHER = VF.createURI("urn:Father");
+
+    // Definition #1: :Mother owl:intersectionOf(:Animal, :Female, :Parent)
+    private static final URI ANIMAL = VF.createURI("urn:Animal");
+    private static final URI FEMALE = VF.createURI("urn:Female");
+    private static final URI PARENT = VF.createURI("urn:Parent");
+
+    // Definition #2: :Mother owl:intersectionOf(:Female, :Leader, :Nun)
+    private static final URI NUN = VF.createURI("urn:Nun");
+    private static final URI LEADER = VF.createURI("urn:Leader");
+
+    // Definition #3: :Father owl:intersectionOf(:Man, :Parent)
+    private static final URI MAN = VF.createURI("urn:Man");
+
+    @Test
+    public void testIntersectionOf() throws Exception {
+        // Configure a mock instance engine with an ontology:
+        final InferenceEngine inferenceEngine = mock(InferenceEngine.class);
+        final Map<Resource, List<Set<Resource>>> intersections = new 
HashMap<>();
+        final List<Set<Resource>> motherIntersections = Arrays.asList(
+                Sets.newHashSet(ANIMAL, FEMALE, PARENT),
+                Sets.newHashSet(FEMALE, LEADER, NUN)
+            );
+        final List<Set<Resource>> fatherIntersections = Arrays.asList(
+                Sets.newHashSet(MAN, PARENT)
+            );
+        intersections.put(MOTHER, motherIntersections);
+        
when(inferenceEngine.getIntersectionsImplying(MOTHER)).thenReturn(motherIntersections);
+        
when(inferenceEngine.getIntersectionsImplying(FATHER)).thenReturn(fatherIntersections);
+        // Query for a specific type and rewrite using the visitor:
+        final Projection query = new Projection(
+                new StatementPattern(new Var("s"), new Var("p", RDF.TYPE), new 
Var("o", MOTHER)),
+                new ProjectionElemList(new ProjectionElem("s", "subject")));
+        query.visit(new IntersectionOfVisitor(conf, inferenceEngine));
+        // Expected structure: a union whose members are the original
+        // statement pattern and a nested union of statement patterns and 
joins.
+        // This will join both intersections of Mother together. The nested
+        // union tree is unioned with the original statement pattern.
+        // The nested union of Mother should be:
+        // Union(
+        //     Join(
+        //         SP(Animal),
+        //         Join(
+        //             SP(Female),
+        //             SP(Parent)
+        //         )
+        //     ),
+        //     Join(
+        //         SP(Female),
+        //         Join(
+        //             SP(Leader),
+        //             SP(Nun)
+        //         )
+        //     )
+        // )
+        //
+        // Collect the arguments to the union:
+        assertTrue(query.getArg() instanceof Union);
+        final Union union1 = (Union) query.getArg();
+        assertTrue(union1.getLeftArg() instanceof Union);
+        final Union union2 = (Union) union1.getLeftArg();
+
+        assertTrue(union2.getLeftArg() instanceof Join);
+        final Join join1 = (Join) union2.getLeftArg();
+        assertTrue(join1.getLeftArg() instanceof StatementPattern);
+        final StatementPattern animalSp = (StatementPattern) 
join1.getLeftArg();
+        assertStatementPattern(animalSp, ANIMAL);
+        assertTrue(join1.getRightArg() instanceof Join);
+        final Join join2 = (Join) join1.getRightArg();
+        assertTrue(join2.getLeftArg() instanceof StatementPattern);
+        final StatementPattern femaleSp = (StatementPattern) 
join2.getLeftArg();
+        assertStatementPattern(femaleSp, FEMALE);
+        assertTrue(join2.getRightArg() instanceof StatementPattern);
+        final StatementPattern parentSp = (StatementPattern) 
join2.getRightArg();
+        assertStatementPattern(parentSp, PARENT);
+
+        assertTrue(union2.getRightArg() instanceof Join);
+        final Join join3 = (Join) union2.getRightArg();
+        assertTrue(join3.getLeftArg() instanceof StatementPattern);
+        final StatementPattern femaleSp2 = (StatementPattern) 
join3.getLeftArg();
+        assertStatementPattern(femaleSp2, FEMALE);
+        assertTrue(join3.getRightArg() instanceof Join);
+        final Join join4 = (Join) join3.getRightArg();
+        assertTrue(join4.getLeftArg() instanceof StatementPattern);
+        final StatementPattern leaderSp = (StatementPattern) 
join4.getLeftArg();
+        assertStatementPattern(leaderSp, LEADER);
+        assertTrue(join4.getRightArg() instanceof StatementPattern);
+        final StatementPattern nunSp = (StatementPattern) join4.getRightArg();
+        assertStatementPattern(nunSp, NUN);
+
+        assertTrue(union1.getRightArg() instanceof StatementPattern);
+        final StatementPattern actualMotherSp = (StatementPattern) 
union1.getRightArg();
+        final StatementPattern expectedMotherSp = new StatementPattern(new 
Var("s"), new Var("p", RDF.TYPE), new Var("o", MOTHER));
+        assertEquals(expectedMotherSp, actualMotherSp);
+
+
+        // Query for a specific type and rewrite using the visitor:
+        final Projection query2 = new Projection(
+                new StatementPattern(new Var("s"), new Var("p", RDF.TYPE), new 
Var("o", FATHER)),
+                new ProjectionElemList(new ProjectionElem("s", "subject")));
+        query2.visit(new IntersectionOfVisitor(conf, inferenceEngine));
+        // Since Father produces only one intersection it creates a nested join
+        // that gets union with the original statement pattern.
+        // The nested join of Father should be:
+        // Join(
+        //     SP(Man),
+        //     SP(Parent)
+        // )
+        // Collect the arguments to the union:
+        assertTrue(query2.getArg() instanceof Union);
+        final Union union3 = (Union) query2.getArg();
+        assertTrue(union3.getLeftArg() instanceof Join);
+        final Join join5 = (Join) union3.getLeftArg();
+        assertTrue(join5.getLeftArg() instanceof StatementPattern);
+        final StatementPattern manSp = (StatementPattern) join5.getLeftArg();
+        assertStatementPattern(manSp, MAN);
+        assertTrue(join5.getRightArg() instanceof StatementPattern);
+        final StatementPattern parentSp2 = (StatementPattern) 
join5.getRightArg();
+        assertStatementPattern(parentSp2, PARENT);
+
+        assertTrue(union3.getRightArg() instanceof StatementPattern);
+        final StatementPattern actualFatherSp = (StatementPattern) 
union3.getRightArg();
+        final StatementPattern expectedFatherSp = new StatementPattern(new 
Var("s"), new Var("p", RDF.TYPE), new Var("o", FATHER));
+        assertEquals(expectedFatherSp, actualFatherSp);
+    }
+
+    @Test
+    public void testIntersectionOfDisabled() throws Exception {
+        // Configure a mock instance engine with an ontology:
+        final InferenceEngine inferenceEngine = mock(InferenceEngine.class);
+        final Map<Resource, List<Set<Resource>>> intersections = new 
HashMap<>();
+        final List<Set<Resource>> motherIntersections = Arrays.asList(
+                Sets.newHashSet(ANIMAL, FEMALE, PARENT),
+                Sets.newHashSet(FEMALE, LEADER, NUN)
+            );
+        final List<Set<Resource>> fatherIntersections = Arrays.asList(
+                Sets.newHashSet(MAN, PARENT)
+            );
+        intersections.put(MOTHER, motherIntersections);
+        
when(inferenceEngine.getIntersectionsImplying(MOTHER)).thenReturn(motherIntersections);
+        
when(inferenceEngine.getIntersectionsImplying(FATHER)).thenReturn(fatherIntersections);
+        // Query for a specific type and rewrite using the visitor:
+        final Projection query = new Projection(
+                new StatementPattern(new Var("s"), new Var("p", RDF.TYPE), new 
Var("o", MOTHER)),
+                new ProjectionElemList(new ProjectionElem("s", "subject")));
+
+        final AccumuloRdfConfiguration disabledConf = conf.clone();
+        disabledConf.setInferIntersectionOf(false);
+
+        query.visit(new IntersectionOfVisitor(disabledConf, inferenceEngine));
+
+        // Expected structure: the original statement:
+        assertTrue(query.getArg() instanceof StatementPattern);
+        final StatementPattern actualMotherSp = (StatementPattern) 
query.getArg();
+        final StatementPattern expectedMotherSp = new StatementPattern(new 
Var("s"), new Var("p", RDF.TYPE), new Var("o", MOTHER));
+        assertEquals(expectedMotherSp, actualMotherSp);
+
+
+        // Query for a specific type and rewrite using the visitor:
+        final Projection query2 = new Projection(
+                new StatementPattern(new Var("s"), new Var("p", RDF.TYPE), new 
Var("o", FATHER)),
+                new ProjectionElemList(new ProjectionElem("s", "subject")));
+        query2.visit(new IntersectionOfVisitor(disabledConf, inferenceEngine));
+
+        // Expected structure: the original statement:
+        assertTrue(query2.getArg() instanceof StatementPattern);
+        final StatementPattern actualFatherSp = (StatementPattern) 
query2.getArg();
+        final StatementPattern expectedFatherSp = new StatementPattern(new 
Var("s"), new Var("p", RDF.TYPE), new Var("o", FATHER));
+        assertEquals(expectedFatherSp, actualFatherSp);
+    }
+
+    private static void assertStatementPattern(final StatementPattern 
statementPattern, final URI uri) {
+        assertNotNull(statementPattern.getPredicateVar());
+        assertEquals(RDF.TYPE, statementPattern.getPredicateVar().getValue());
+        assertNotNull(statementPattern.getObjectVar());
+        assertEquals(uri, statementPattern.getObjectVar().getValue());
+    }
+}
\ No newline at end of file

Reply via email to