http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/157c0649/extras/indexing/src/test/java/org/apache/rya/indexing/statement/metadata/MongoStatementMetadataIT.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/indexing/statement/metadata/MongoStatementMetadataIT.java b/extras/indexing/src/test/java/org/apache/rya/indexing/statement/metadata/MongoStatementMetadataIT.java index e62404c..c4db88e 100644 --- a/extras/indexing/src/test/java/org/apache/rya/indexing/statement/metadata/MongoStatementMetadataIT.java +++ b/extras/indexing/src/test/java/org/apache/rya/indexing/statement/metadata/MongoStatementMetadataIT.java @@ -51,207 +51,207 @@ import org.openrdf.sail.Sail; public class MongoStatementMetadataIT extends MongoTestBase { - private final String query1 = "prefix owl: <http://www.w3.org/2002/07/owl#> prefix ano: <http://www.w3.org/2002/07/owl#annotated> prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> select ?x ?y where {_:blankNode rdf:type owl:Annotation; ano:Source <http://Joe>; " - + "ano:Property <http://worksAt>; ano:Target ?x; <http://createdBy> ?y; <http://createdOn> \'2017-01-04\'^^xsd:date }"; - private final String query2 = "prefix owl: <http://www.w3.org/2002/07/owl#> prefix ano: <http://www.w3.org/2002/07/owl#annotated> prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> select ?a ?b ?c where {_:blankNode1 rdf:type owl:Annotation; ano:Source ?a; " - + "ano:Property <http://worksAt>; ano:Target <http://BurgerShack>; <http://createdBy> ?c; <http://createdOn> \'2017-01-04\'^^xsd:date. " - + "_:blankNode2 rdf:type owl:Annotation; ano:Source ?a; " - + "ano:Property <http://talksTo>; ano:Target ?b; <http://createdBy> ?c; <http://createdOn> \'2017-01-04\'^^xsd:date }"; + private final String query1 = "prefix owl: <http://www.w3.org/2002/07/owl#> prefix ano: <http://www.w3.org/2002/07/owl#annotated> prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> select ?x ?y where {_:blankNode rdf:type owl:Annotation; ano:Source <http://Joe>; " + + "ano:Property <http://worksAt>; ano:Target ?x; <http://createdBy> ?y; <http://createdOn> \'2017-01-04\'^^xsd:date }"; + private final String query2 = "prefix owl: <http://www.w3.org/2002/07/owl#> prefix ano: <http://www.w3.org/2002/07/owl#annotated> prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> select ?a ?b ?c where {_:blankNode1 rdf:type owl:Annotation; ano:Source ?a; " + + "ano:Property <http://worksAt>; ano:Target <http://BurgerShack>; <http://createdBy> ?c; <http://createdOn> \'2017-01-04\'^^xsd:date. " + + "_:blankNode2 rdf:type owl:Annotation; ano:Source ?a; " + + "ano:Property <http://talksTo>; ano:Target ?b; <http://createdBy> ?c; <http://createdOn> \'2017-01-04\'^^xsd:date }"; - @Override - protected void updateConfiguration(final MongoDBRdfConfiguration conf) { - final Set<RyaURI> propertySet = new HashSet<>( - Arrays.asList(new RyaURI("http://createdBy"), new RyaURI("http://createdOn"))); - conf.setUseStatementMetadata(true); - conf.setStatementMetadataProperties(propertySet); - } + @Override + protected void updateConfiguration(final MongoDBRdfConfiguration conf) { + final Set<RyaURI> propertySet = new HashSet<>( + Arrays.asList(new RyaURI("http://createdBy"), new RyaURI("http://createdOn"))); + conf.setUseStatementMetadata(true); + conf.setStatementMetadataProperties(propertySet); + } - @Test - public void simpleQueryWithoutBindingSet() throws Exception { - Sail sail = RyaSailFactory.getInstance(conf); - MongoDBRyaDAO dao = new MongoDBRyaDAO(); - try { - dao.setConf(conf); - dao.init(); + @Test + public void simpleQueryWithoutBindingSet() throws Exception { + Sail sail = RyaSailFactory.getInstance(conf); + MongoDBRyaDAO dao = new MongoDBRyaDAO(); + try { + dao.setConf(conf); + dao.init(); - final StatementMetadata metadata = new StatementMetadata(); - metadata.addMetadata(new RyaURI("http://createdBy"), new RyaType("Joe")); - metadata.addMetadata(new RyaURI("http://createdOn"), new RyaType(XMLSchema.DATE, "2017-01-04")); + final StatementMetadata metadata = new StatementMetadata(); + metadata.addMetadata(new RyaURI("http://createdBy"), new RyaType("Joe")); + metadata.addMetadata(new RyaURI("http://createdOn"), new RyaType(XMLSchema.DATE, "2017-01-04")); - final RyaStatement statement = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), - new RyaType("CoffeeShop"), new RyaURI("http://context"), "", metadata); - dao.add(statement); + final RyaStatement statement = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), + new RyaType("CoffeeShop"), new RyaURI("http://context"), "", metadata); + dao.add(statement); - SailRepositoryConnection conn = new SailRepository(sail).getConnection(); - final TupleQueryResult result = conn.prepareTupleQuery(QueryLanguage.SPARQL, query1).evaluate(); + SailRepositoryConnection conn = new SailRepository(sail).getConnection(); + final TupleQueryResult result = conn.prepareTupleQuery(QueryLanguage.SPARQL, query1).evaluate(); - final QueryBindingSet bs = new QueryBindingSet(); - bs.addBinding("x", new LiteralImpl("CoffeeShop")); - bs.addBinding("y", new LiteralImpl("Joe")); + final QueryBindingSet bs = new QueryBindingSet(); + bs.addBinding("x", new LiteralImpl("CoffeeShop")); + bs.addBinding("y", new LiteralImpl("Joe")); - final List<BindingSet> bsList = new ArrayList<>(); - while (result.hasNext()) { - bsList.add(result.next()); - } + final List<BindingSet> bsList = new ArrayList<>(); + while (result.hasNext()) { + bsList.add(result.next()); + } - assertEquals(1, bsList.size()); - assertEquals(bs, bsList.get(0)); - dao.delete(statement, conf); - } finally { - dao.destroy(); - sail.shutDown(); - } - } + assertEquals(1, bsList.size()); + assertEquals(bs, bsList.get(0)); + dao.delete(statement, conf); + } finally { + dao.destroy(); + sail.shutDown(); + } + } - /** - * Tests if results are filtered correctly using the metadata properties. In - * this case, the date for the ingested RyaStatement differs from the date - * specified in the query. - * - * @throws MalformedQueryException - * @throws QueryEvaluationException - * @throws RyaDAOException - */ - @Test - public void simpleQueryWithoutBindingSetInvalidProperty() throws Exception { - Sail sail = RyaSailFactory.getInstance(conf); - MongoDBRyaDAO dao = new MongoDBRyaDAO(); - try { - dao.setConf(conf); - dao.init(); - final StatementMetadata metadata = new StatementMetadata(); - metadata.addMetadata(new RyaURI("http://createdBy"), new RyaType("Doug")); - metadata.addMetadata(new RyaURI("http://createdOn"), new RyaType(XMLSchema.DATE, "2017-02-15")); + /** + * Tests if results are filtered correctly using the metadata properties. In + * this case, the date for the ingested RyaStatement differs from the date + * specified in the query. + * + * @throws MalformedQueryException + * @throws QueryEvaluationException + * @throws RyaDAOException + */ + @Test + public void simpleQueryWithoutBindingSetInvalidProperty() throws Exception { + Sail sail = RyaSailFactory.getInstance(conf); + MongoDBRyaDAO dao = new MongoDBRyaDAO(); + try { + dao.setConf(conf); + dao.init(); + final StatementMetadata metadata = new StatementMetadata(); + metadata.addMetadata(new RyaURI("http://createdBy"), new RyaType("Doug")); + metadata.addMetadata(new RyaURI("http://createdOn"), new RyaType(XMLSchema.DATE, "2017-02-15")); - final RyaStatement statement = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), - new RyaType("CoffeeShop"), new RyaURI("http://context"), "", metadata); - dao.add(statement); + final RyaStatement statement = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), + new RyaType("CoffeeShop"), new RyaURI("http://context"), "", metadata); + dao.add(statement); - SailRepositoryConnection conn = new SailRepository(sail).getConnection(); - final TupleQueryResult result = conn.prepareTupleQuery(QueryLanguage.SPARQL, query1).evaluate(); + SailRepositoryConnection conn = new SailRepository(sail).getConnection(); + final TupleQueryResult result = conn.prepareTupleQuery(QueryLanguage.SPARQL, query1).evaluate(); - final List<BindingSet> bsList = new ArrayList<>(); - while (result.hasNext()) { - bsList.add(result.next()); - } - assertEquals(0, bsList.size()); - dao.delete(statement, conf); - } finally { - dao.destroy(); - sail.shutDown(); - } - } + final List<BindingSet> bsList = new ArrayList<>(); + while (result.hasNext()) { + bsList.add(result.next()); + } + assertEquals(0, bsList.size()); + dao.delete(statement, conf); + } finally { + dao.destroy(); + sail.shutDown(); + } + } - @Test - public void simpleQueryWithBindingSet() throws Exception { - Sail sail = RyaSailFactory.getInstance(conf); - MongoDBRyaDAO dao = new MongoDBRyaDAO(); - try { - dao.setConf(conf); - dao.init(); - final StatementMetadata metadata = new StatementMetadata(); - metadata.addMetadata(new RyaURI("http://createdBy"), new RyaType("Joe")); - metadata.addMetadata(new RyaURI("http://createdOn"), new RyaType(XMLSchema.DATE, "2017-01-04")); + @Test + public void simpleQueryWithBindingSet() throws Exception { + Sail sail = RyaSailFactory.getInstance(conf); + MongoDBRyaDAO dao = new MongoDBRyaDAO(); + try { + dao.setConf(conf); + dao.init(); + final StatementMetadata metadata = new StatementMetadata(); + metadata.addMetadata(new RyaURI("http://createdBy"), new RyaType("Joe")); + metadata.addMetadata(new RyaURI("http://createdOn"), new RyaType(XMLSchema.DATE, "2017-01-04")); - final RyaStatement statement1 = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), - new RyaType("CoffeeShop"), new RyaURI("http://context"), "", metadata); - final RyaStatement statement2 = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), - new RyaType("HardwareStore"), new RyaURI("http://context"), "", metadata); - dao.add(statement1); - dao.add(statement2); + final RyaStatement statement1 = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), + new RyaType("CoffeeShop"), new RyaURI("http://context"), "", metadata); + final RyaStatement statement2 = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), + new RyaType("HardwareStore"), new RyaURI("http://context"), "", metadata); + dao.add(statement1); + dao.add(statement2); - SailRepositoryConnection conn = new SailRepository(sail).getConnection(); - final TupleQueryResult result = conn.prepareTupleQuery(QueryLanguage.SPARQL, query1).evaluate(); + SailRepositoryConnection conn = new SailRepository(sail).getConnection(); + final TupleQueryResult result = conn.prepareTupleQuery(QueryLanguage.SPARQL, query1).evaluate(); - final Set<BindingSet> expected = new HashSet<>(); - final QueryBindingSet expected1 = new QueryBindingSet(); - expected1.addBinding("x", new LiteralImpl("CoffeeShop")); - expected1.addBinding("y", new LiteralImpl("Joe")); - final QueryBindingSet expected2 = new QueryBindingSet(); - expected2.addBinding("x", new LiteralImpl("HardwareStore")); - expected2.addBinding("y", new LiteralImpl("Joe")); - expected.add(expected1); - expected.add(expected2); + final Set<BindingSet> expected = new HashSet<>(); + final QueryBindingSet expected1 = new QueryBindingSet(); + expected1.addBinding("x", new LiteralImpl("CoffeeShop")); + expected1.addBinding("y", new LiteralImpl("Joe")); + final QueryBindingSet expected2 = new QueryBindingSet(); + expected2.addBinding("x", new LiteralImpl("HardwareStore")); + expected2.addBinding("y", new LiteralImpl("Joe")); + expected.add(expected1); + expected.add(expected2); - final Set<BindingSet> bsSet = new HashSet<>(); - while (result.hasNext()) { - bsSet.add(result.next()); - } + final Set<BindingSet> bsSet = new HashSet<>(); + while (result.hasNext()) { + bsSet.add(result.next()); + } - assertEquals(expected, bsSet); + assertEquals(expected, bsSet); - dao.delete(statement1, conf); - dao.delete(statement2, conf); - } finally { - dao.destroy(); - sail.shutDown(); - } - } + dao.delete(statement1, conf); + dao.delete(statement2, conf); + } finally { + dao.destroy(); + sail.shutDown(); + } + } - /** - * Tests to see if correct result is passed back when a metadata statement - * is joined with a StatementPattern statement (i.e. a common variable - * appears in a StatementPattern statement and a metadata statement). - * StatementPattern statements have either rdf:subject, rdf:predicate, or - * rdf:object as the predicate while a metadata statement is any statement - * in the reified query whose predicate is not rdf:type and not a - * StatementPattern predicate. - * - * @throws MalformedQueryException - * @throws QueryEvaluationException - * @throws RyaDAOException - */ - @Test - public void simpleQueryWithBindingSetJoinPropertyToSubject() throws Exception { - Sail sail = RyaSailFactory.getInstance(conf); - MongoDBRyaDAO dao = new MongoDBRyaDAO(); - try { - dao.setConf(conf); - dao.init(); - final StatementMetadata metadata1 = new StatementMetadata(); - metadata1.addMetadata(new RyaURI("http://createdBy"), new RyaURI("http://Doug")); - metadata1.addMetadata(new RyaURI("http://createdOn"), new RyaType(XMLSchema.DATE, "2017-01-04")); - final StatementMetadata metadata2 = new StatementMetadata(); - metadata2.addMetadata(new RyaURI("http://createdBy"), new RyaURI("http://Bob")); - metadata2.addMetadata(new RyaURI("http://createdOn"), new RyaType(XMLSchema.DATE, "2017-02-04")); + /** + * Tests to see if correct result is passed back when a metadata statement + * is joined with a StatementPattern statement (i.e. a common variable + * appears in a StatementPattern statement and a metadata statement). + * StatementPattern statements have either rdf:subject, rdf:predicate, or + * rdf:object as the predicate while a metadata statement is any statement + * in the reified query whose predicate is not rdf:type and not a + * StatementPattern predicate. + * + * @throws MalformedQueryException + * @throws QueryEvaluationException + * @throws RyaDAOException + */ + @Test + public void simpleQueryWithBindingSetJoinPropertyToSubject() throws Exception { + Sail sail = RyaSailFactory.getInstance(conf); + MongoDBRyaDAO dao = new MongoDBRyaDAO(); + try { + dao.setConf(conf); + dao.init(); + final StatementMetadata metadata1 = new StatementMetadata(); + metadata1.addMetadata(new RyaURI("http://createdBy"), new RyaURI("http://Doug")); + metadata1.addMetadata(new RyaURI("http://createdOn"), new RyaType(XMLSchema.DATE, "2017-01-04")); + final StatementMetadata metadata2 = new StatementMetadata(); + metadata2.addMetadata(new RyaURI("http://createdBy"), new RyaURI("http://Bob")); + metadata2.addMetadata(new RyaURI("http://createdOn"), new RyaType(XMLSchema.DATE, "2017-02-04")); - final RyaStatement statement1 = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), - new RyaURI("http://BurgerShack"), new RyaURI("http://context"), "", metadata1); - final RyaStatement statement2 = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://talksTo"), - new RyaURI("http://Betty"), new RyaURI("http://context"), "", metadata1); - final RyaStatement statement3 = new RyaStatement(new RyaURI("http://Fred"), new RyaURI("http://talksTo"), - new RyaURI("http://Amanda"), new RyaURI("http://context"), "", metadata1); - final RyaStatement statement4 = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://talksTo"), - new RyaURI("http://Wanda"), new RyaURI("http://context"), "", metadata2); - dao.add(statement1); - dao.add(statement2); - dao.add(statement3); - dao.add(statement4); + final RyaStatement statement1 = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), + new RyaURI("http://BurgerShack"), new RyaURI("http://context"), "", metadata1); + final RyaStatement statement2 = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://talksTo"), + new RyaURI("http://Betty"), new RyaURI("http://context"), "", metadata1); + final RyaStatement statement3 = new RyaStatement(new RyaURI("http://Fred"), new RyaURI("http://talksTo"), + new RyaURI("http://Amanda"), new RyaURI("http://context"), "", metadata1); + final RyaStatement statement4 = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://talksTo"), + new RyaURI("http://Wanda"), new RyaURI("http://context"), "", metadata2); + dao.add(statement1); + dao.add(statement2); + dao.add(statement3); + dao.add(statement4); - SailRepositoryConnection conn = new SailRepository(sail).getConnection(); - final TupleQueryResult result = conn.prepareTupleQuery(QueryLanguage.SPARQL, query2).evaluate(); + SailRepositoryConnection conn = new SailRepository(sail).getConnection(); + final TupleQueryResult result = conn.prepareTupleQuery(QueryLanguage.SPARQL, query2).evaluate(); - final Set<BindingSet> expected = new HashSet<>(); - final QueryBindingSet expected1 = new QueryBindingSet(); - expected1.addBinding("b", new URIImpl("http://Betty")); - expected1.addBinding("a", new URIImpl("http://Joe")); - expected1.addBinding("c", new URIImpl("http://Doug")); - expected.add(expected1); + final Set<BindingSet> expected = new HashSet<>(); + final QueryBindingSet expected1 = new QueryBindingSet(); + expected1.addBinding("b", new URIImpl("http://Betty")); + expected1.addBinding("a", new URIImpl("http://Joe")); + expected1.addBinding("c", new URIImpl("http://Doug")); + expected.add(expected1); - final Set<BindingSet> bsSet = new HashSet<>(); - while (result.hasNext()) { - bsSet.add(result.next()); - } + final Set<BindingSet> bsSet = new HashSet<>(); + while (result.hasNext()) { + bsSet.add(result.next()); + } - assertEquals(expected, bsSet); + assertEquals(expected, bsSet); - dao.delete(statement1, conf); - dao.delete(statement2, conf); - dao.delete(statement3, conf); - dao.delete(statement4, conf); - } finally { - dao.destroy(); - sail.shutDown(); - } - } + dao.delete(statement1, conf); + dao.delete(statement2, conf); + dao.delete(statement3, conf); + dao.delete(statement4, conf); + } finally { + dao.destroy(); + sail.shutDown(); + } + } }
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/157c0649/extras/indexing/src/test/java/org/apache/rya/indexing/statement/metadata/MongoStatementMetadataNodeTest.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/indexing/statement/metadata/MongoStatementMetadataNodeTest.java b/extras/indexing/src/test/java/org/apache/rya/indexing/statement/metadata/MongoStatementMetadataNodeTest.java index aa700b1..a45197c 100644 --- a/extras/indexing/src/test/java/org/apache/rya/indexing/statement/metadata/MongoStatementMetadataNodeTest.java +++ b/extras/indexing/src/test/java/org/apache/rya/indexing/statement/metadata/MongoStatementMetadataNodeTest.java @@ -48,321 +48,321 @@ import org.openrdf.query.parser.sparql.SPARQLParser; import info.aduna.iteration.CloseableIteration; public class MongoStatementMetadataNodeTest extends MongoTestBase { - private final String query = "prefix owl: <http://www.w3.org/2002/07/owl#> prefix ano: <http://www.w3.org/2002/07/owl#annotated> prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> select ?x ?y where {_:blankNode rdf:type owl:Annotation; ano:Source <http://Joe>; " - + "ano:Property <http://worksAt>; ano:Target ?x; <http://createdBy> ?y; <http://createdOn> \'2017-01-04\'^^xsd:date }"; - private final String query2 = "prefix owl: <http://www.w3.org/2002/07/owl#> prefix ano: <http://www.w3.org/2002/07/owl#annotated> prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> select ?x ?y where {_:blankNode rdf:type owl:Annotation; ano:Source ?x; " - + "ano:Property <http://worksAt>; ano:Target ?y; <http://createdBy> ?x; <http://createdOn> \'2017-01-04\'^^xsd:date }"; - - @Before - public void init() throws Exception { - final Set<RyaURI> propertySet = new HashSet<RyaURI>(Arrays.asList(new RyaURI("http://createdBy"), new RyaURI("http://createdOn"))); - conf.setUseStatementMetadata(true); - conf.setStatementMetadataProperties(propertySet); - } - - @Test - public void simpleQueryWithoutBindingSet() throws Exception { - MongoDBRyaDAO dao = new MongoDBRyaDAO(); - try { - dao.setConf(conf); - dao.init(); - StatementMetadata metadata = new StatementMetadata(); - metadata.addMetadata(new RyaURI("http://createdBy"), new RyaType("Joe")); - metadata.addMetadata(new RyaURI("http://createdOn"), new RyaType(XMLSchema.DATE, "2017-01-04")); - - RyaStatement statement = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), - new RyaType("CoffeeShop"), new RyaURI("http://context"), "", metadata); - dao.add(statement); - - SPARQLParser parser = new SPARQLParser(); - ParsedQuery pq = parser.parseQuery(query, null); - List<StatementPattern> spList = StatementPatternCollector.process(pq.getTupleExpr()); - - StatementMetadataNode<?> node = new StatementMetadataNode<>(spList, conf); - CloseableIteration<BindingSet, QueryEvaluationException> iteration = node.evaluate(new QueryBindingSet()); - - QueryBindingSet bs = new QueryBindingSet(); - bs.addBinding("x", new LiteralImpl("CoffeeShop")); - bs.addBinding("y", new LiteralImpl("Joe")); - - List<BindingSet> bsList = new ArrayList<>(); - while (iteration.hasNext()) { - bsList.add(iteration.next()); - } - - Assert.assertEquals(1, bsList.size()); - Assert.assertEquals(bs, bsList.get(0)); - dao.delete(statement, conf); - } finally { - dao.destroy(); - } - } - - /** - * Tests if results are filtered correctly using the metadata properties. In - * this case, the date for the ingested RyaStatement differs from the date - * specified in the query. - */ - @Test - public void simpleQueryWithoutBindingSetInvalidProperty() throws Exception { - MongoDBRyaDAO dao = new MongoDBRyaDAO(); - try { - dao.setConf(conf); - dao.init(); - - StatementMetadata metadata = new StatementMetadata(); - metadata.addMetadata(new RyaURI("http://createdBy"), new RyaType("Doug")); - metadata.addMetadata(new RyaURI("http://createdOn"), new RyaType(XMLSchema.DATE, "2017-02-15")); - - RyaStatement statement = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), - new RyaType("CoffeeShop"), new RyaURI("http://context"), "", metadata); - dao.add(statement); - - SPARQLParser parser = new SPARQLParser(); - ParsedQuery pq = parser.parseQuery(query, null); - List<StatementPattern> spList = StatementPatternCollector.process(pq.getTupleExpr()); - StatementMetadataNode<MongoDBRdfConfiguration> node = new StatementMetadataNode<>(spList, conf); - CloseableIteration<BindingSet, QueryEvaluationException> iteration = node.evaluate(new QueryBindingSet()); - - List<BindingSet> bsList = new ArrayList<>(); - while (iteration.hasNext()) { - bsList.add(iteration.next()); - } - Assert.assertEquals(0, bsList.size()); - dao.delete(statement, conf); - } finally { - dao.destroy(); - } - } - - @Test - public void simpleQueryWithBindingSet() throws Exception { - MongoDBRyaDAO dao = new MongoDBRyaDAO(); - try { - dao.setConf(conf); - dao.init(); - StatementMetadata metadata = new StatementMetadata(); - metadata.addMetadata(new RyaURI("http://createdBy"), new RyaType("Joe")); - metadata.addMetadata(new RyaURI("http://createdOn"), new RyaType(XMLSchema.DATE, "2017-01-04")); - - RyaStatement statement1 = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), - new RyaType("CoffeeShop"), new RyaURI("http://context"), "", metadata); - RyaStatement statement2 = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), - new RyaType("HardwareStore"), new RyaURI("http://context"), "", metadata); - dao.add(statement1); - dao.add(statement2); - - SPARQLParser parser = new SPARQLParser(); - ParsedQuery pq = parser.parseQuery(query, null); - List<StatementPattern> spList = StatementPatternCollector.process(pq.getTupleExpr()); - StatementMetadataNode<MongoDBRdfConfiguration> node = new StatementMetadataNode<>(spList, conf); - - QueryBindingSet bsConstraint = new QueryBindingSet(); - bsConstraint.addBinding("x", new LiteralImpl("CoffeeShop")); - bsConstraint.addBinding("z", new LiteralImpl("Virginia")); - - CloseableIteration<BindingSet, QueryEvaluationException> iteration = node.evaluate(bsConstraint); - - QueryBindingSet expected = new QueryBindingSet(); - expected.addBinding("x", new LiteralImpl("CoffeeShop")); - expected.addBinding("y", new LiteralImpl("Joe")); - expected.addBinding("z", new LiteralImpl("Virginia")); - - List<BindingSet> bsList = new ArrayList<>(); - while (iteration.hasNext()) { - bsList.add(iteration.next()); - } - - Assert.assertEquals(1, bsList.size()); - Assert.assertEquals(expected, bsList.get(0)); - - dao.delete(statement1, conf); - dao.delete(statement2, conf); - } finally { - dao.destroy(); - } - } - - /** - * Tests to see if correct result is passed back when a metadata statement - * is joined with a StatementPattern statement (i.e. a common variable - * appears in a StatementPattern statement and a metadata statement). - * StatementPattern statements have either rdf:subject, rdf:predicate, or - * rdf:object as the predicate while a metadata statement is any statement - * in the reified query whose predicate is not rdf:type and not a - * StatementPattern predicate. - */ - @Test - public void simpleQueryWithBindingSetJoinPropertyToSubject() throws Exception { - MongoDBRyaDAO dao = new MongoDBRyaDAO(); - try { - dao.setConf(conf); - dao.init(); - StatementMetadata metadata = new StatementMetadata(); - metadata.addMetadata(new RyaURI("http://createdBy"), new RyaURI("http://Joe")); - metadata.addMetadata(new RyaURI("http://createdOn"), new RyaType(XMLSchema.DATE, "2017-01-04")); - - RyaStatement statement1 = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), - new RyaType("CoffeeShop"), new RyaURI("http://context"), "", metadata); - RyaStatement statement2 = new RyaStatement(new RyaURI("http://Bob"), new RyaURI("http://worksAt"), - new RyaType("HardwareStore"), new RyaURI("http://context"), "", metadata); - dao.add(statement1); - dao.add(statement2); - - SPARQLParser parser = new SPARQLParser(); - ParsedQuery pq = parser.parseQuery(query2, null); - List<StatementPattern> spList = StatementPatternCollector.process(pq.getTupleExpr()); - StatementMetadataNode<MongoDBRdfConfiguration> node = new StatementMetadataNode<>(spList, conf); - - List<BindingSet> bsCollection = new ArrayList<>(); - QueryBindingSet bsConstraint1 = new QueryBindingSet(); - bsConstraint1.addBinding("y", new LiteralImpl("CoffeeShop")); - bsConstraint1.addBinding("z", new LiteralImpl("Virginia")); - - QueryBindingSet bsConstraint2 = new QueryBindingSet(); - bsConstraint2.addBinding("y", new LiteralImpl("HardwareStore")); - bsConstraint2.addBinding("z", new LiteralImpl("Maryland")); - bsCollection.add(bsConstraint1); - bsCollection.add(bsConstraint2); - - CloseableIteration<BindingSet, QueryEvaluationException> iteration = node.evaluate(bsCollection); - - QueryBindingSet expected = new QueryBindingSet(); - expected.addBinding("y", new LiteralImpl("CoffeeShop")); - expected.addBinding("x", new URIImpl("http://Joe")); - expected.addBinding("z", new LiteralImpl("Virginia")); - - List<BindingSet> bsList = new ArrayList<>(); - while (iteration.hasNext()) { - bsList.add(iteration.next()); - } - - Assert.assertEquals(1, bsList.size()); - Assert.assertEquals(expected, bsList.get(0)); - - dao.delete(statement1, conf); - dao.delete(statement2, conf); - } finally { - dao.destroy(); - } - } - - /** - * Tests if the StatementMetadataNode joins BindingSet correctly for - * variables appearing in metadata statements. In this case, the metadata - * statements are (_:blankNode <http://createdOn 2017-01-04 ) and - * (_:blankNode <http://createdBy> ?y). The variable ?y appears as the - * object in the above metadata statement and its values are joined to the - * constraint BindingSets in the example below. - */ - @Test - public void simpleQueryWithBindingSetJoinOnProperty() throws Exception { - MongoDBRyaDAO dao = new MongoDBRyaDAO(); - try { - dao.setConf(conf); - dao.init(); - StatementMetadata metadata = new StatementMetadata(); - metadata.addMetadata(new RyaURI("http://createdBy"), new RyaType("Joe")); - metadata.addMetadata(new RyaURI("http://createdOn"), new RyaType(XMLSchema.DATE, "2017-01-04")); - - RyaStatement statement1 = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), - new RyaType("CoffeeShop"), new RyaURI("http://context"), "", metadata); - dao.add(statement1); - - SPARQLParser parser = new SPARQLParser(); - ParsedQuery pq = parser.parseQuery(query, null); - List<StatementPattern> spList = StatementPatternCollector.process(pq.getTupleExpr()); - StatementMetadataNode<MongoDBRdfConfiguration> node = new StatementMetadataNode<>(spList, conf); - - QueryBindingSet bsConstraint = new QueryBindingSet(); - bsConstraint.addBinding("x", new LiteralImpl("CoffeeShop")); - bsConstraint.addBinding("y", new LiteralImpl("Doug")); - - CloseableIteration<BindingSet, QueryEvaluationException> iteration = node.evaluate(bsConstraint); - - List<BindingSet> bsList = new ArrayList<>(); - while (iteration.hasNext()) { - bsList.add(iteration.next()); - } - - Assert.assertEquals(0, bsList.size()); - dao.delete(statement1, conf); - } finally { - dao.destroy(); - } - } - - /** - * Tests if StatementMetadataNode joins BindingSet values correctly for - * variables appearing as the object in one of the StatementPattern - * statements (in the case ?x appears as the Object in the statement - * _:blankNode rdf:object ?x). StatementPattern statements have either - * rdf:subject, rdf:predicate, or rdf:object as the predicate. - */ - @Test - public void simpleQueryWithBindingSetCollection() throws Exception { - MongoDBRyaDAO dao = new MongoDBRyaDAO(); - try { - dao.setConf(conf); - dao.init(); - StatementMetadata metadata = new StatementMetadata(); - metadata.addMetadata(new RyaURI("http://createdBy"), new RyaType("Joe")); - metadata.addMetadata(new RyaURI("http://createdOn"), new RyaType(XMLSchema.DATE, "2017-01-04")); - - RyaStatement statement1 = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), - new RyaType("CoffeeShop"), new RyaURI("http://context"), "", metadata); - RyaStatement statement2 = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), - new RyaType("HardwareStore"), new RyaURI("http://context"), "", metadata); - dao.add(statement1); - dao.add(statement2); - - SPARQLParser parser = new SPARQLParser(); - ParsedQuery pq = parser.parseQuery(query, null); - List<StatementPattern> spList = StatementPatternCollector.process(pq.getTupleExpr()); - StatementMetadataNode<MongoDBRdfConfiguration> node = new StatementMetadataNode<>(spList, conf); - - List<BindingSet> bsCollection = new ArrayList<>(); - QueryBindingSet bsConstraint1 = new QueryBindingSet(); - bsConstraint1.addBinding("x", new LiteralImpl("CoffeeShop")); - bsConstraint1.addBinding("z", new LiteralImpl("Virginia")); - - QueryBindingSet bsConstraint2 = new QueryBindingSet(); - bsConstraint2.addBinding("x", new LiteralImpl("HardwareStore")); - bsConstraint2.addBinding("z", new LiteralImpl("Maryland")); - - QueryBindingSet bsConstraint3 = new QueryBindingSet(); - bsConstraint3.addBinding("x", new LiteralImpl("BurgerShack")); - bsConstraint3.addBinding("z", new LiteralImpl("Delaware")); - bsCollection.add(bsConstraint1); - bsCollection.add(bsConstraint2); - bsCollection.add(bsConstraint3); - - CloseableIteration<BindingSet, QueryEvaluationException> iteration = node.evaluate(bsCollection); - - Set<BindingSet> expected = new HashSet<>(); - QueryBindingSet expected1 = new QueryBindingSet(); - expected1.addBinding("x", new LiteralImpl("CoffeeShop")); - expected1.addBinding("y", new LiteralImpl("Joe")); - expected1.addBinding("z", new LiteralImpl("Virginia")); - - QueryBindingSet expected2 = new QueryBindingSet(); - expected2.addBinding("x", new LiteralImpl("HardwareStore")); - expected2.addBinding("y", new LiteralImpl("Joe")); - expected2.addBinding("z", new LiteralImpl("Maryland")); - expected.add(expected1); - expected.add(expected2); - - Set<BindingSet> bsSet = new HashSet<>(); - while (iteration.hasNext()) { - bsSet.add(iteration.next()); - } - - Assert.assertEquals(expected, bsSet); - - dao.delete(statement1, conf); - dao.delete(statement2, conf); - } finally { - dao.destroy(); - } - } + private final String query = "prefix owl: <http://www.w3.org/2002/07/owl#> prefix ano: <http://www.w3.org/2002/07/owl#annotated> prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> select ?x ?y where {_:blankNode rdf:type owl:Annotation; ano:Source <http://Joe>; " + + "ano:Property <http://worksAt>; ano:Target ?x; <http://createdBy> ?y; <http://createdOn> \'2017-01-04\'^^xsd:date }"; + private final String query2 = "prefix owl: <http://www.w3.org/2002/07/owl#> prefix ano: <http://www.w3.org/2002/07/owl#annotated> prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> select ?x ?y where {_:blankNode rdf:type owl:Annotation; ano:Source ?x; " + + "ano:Property <http://worksAt>; ano:Target ?y; <http://createdBy> ?x; <http://createdOn> \'2017-01-04\'^^xsd:date }"; + + @Before + public void init() throws Exception { + final Set<RyaURI> propertySet = new HashSet<RyaURI>(Arrays.asList(new RyaURI("http://createdBy"), new RyaURI("http://createdOn"))); + conf.setUseStatementMetadata(true); + conf.setStatementMetadataProperties(propertySet); + } + + @Test + public void simpleQueryWithoutBindingSet() throws Exception { + MongoDBRyaDAO dao = new MongoDBRyaDAO(); + try { + dao.setConf(conf); + dao.init(); + StatementMetadata metadata = new StatementMetadata(); + metadata.addMetadata(new RyaURI("http://createdBy"), new RyaType("Joe")); + metadata.addMetadata(new RyaURI("http://createdOn"), new RyaType(XMLSchema.DATE, "2017-01-04")); + + RyaStatement statement = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), + new RyaType("CoffeeShop"), new RyaURI("http://context"), "", metadata); + dao.add(statement); + + SPARQLParser parser = new SPARQLParser(); + ParsedQuery pq = parser.parseQuery(query, null); + List<StatementPattern> spList = StatementPatternCollector.process(pq.getTupleExpr()); + + StatementMetadataNode<?> node = new StatementMetadataNode<>(spList, conf); + CloseableIteration<BindingSet, QueryEvaluationException> iteration = node.evaluate(new QueryBindingSet()); + + QueryBindingSet bs = new QueryBindingSet(); + bs.addBinding("x", new LiteralImpl("CoffeeShop")); + bs.addBinding("y", new LiteralImpl("Joe")); + + List<BindingSet> bsList = new ArrayList<>(); + while (iteration.hasNext()) { + bsList.add(iteration.next()); + } + + Assert.assertEquals(1, bsList.size()); + Assert.assertEquals(bs, bsList.get(0)); + dao.delete(statement, conf); + } finally { + dao.destroy(); + } + } + + /** + * Tests if results are filtered correctly using the metadata properties. In + * this case, the date for the ingested RyaStatement differs from the date + * specified in the query. + */ + @Test + public void simpleQueryWithoutBindingSetInvalidProperty() throws Exception { + MongoDBRyaDAO dao = new MongoDBRyaDAO(); + try { + dao.setConf(conf); + dao.init(); + + StatementMetadata metadata = new StatementMetadata(); + metadata.addMetadata(new RyaURI("http://createdBy"), new RyaType("Doug")); + metadata.addMetadata(new RyaURI("http://createdOn"), new RyaType(XMLSchema.DATE, "2017-02-15")); + + RyaStatement statement = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), + new RyaType("CoffeeShop"), new RyaURI("http://context"), "", metadata); + dao.add(statement); + + SPARQLParser parser = new SPARQLParser(); + ParsedQuery pq = parser.parseQuery(query, null); + List<StatementPattern> spList = StatementPatternCollector.process(pq.getTupleExpr()); + StatementMetadataNode<MongoDBRdfConfiguration> node = new StatementMetadataNode<>(spList, conf); + CloseableIteration<BindingSet, QueryEvaluationException> iteration = node.evaluate(new QueryBindingSet()); + + List<BindingSet> bsList = new ArrayList<>(); + while (iteration.hasNext()) { + bsList.add(iteration.next()); + } + Assert.assertEquals(0, bsList.size()); + dao.delete(statement, conf); + } finally { + dao.destroy(); + } + } + + @Test + public void simpleQueryWithBindingSet() throws Exception { + MongoDBRyaDAO dao = new MongoDBRyaDAO(); + try { + dao.setConf(conf); + dao.init(); + StatementMetadata metadata = new StatementMetadata(); + metadata.addMetadata(new RyaURI("http://createdBy"), new RyaType("Joe")); + metadata.addMetadata(new RyaURI("http://createdOn"), new RyaType(XMLSchema.DATE, "2017-01-04")); + + RyaStatement statement1 = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), + new RyaType("CoffeeShop"), new RyaURI("http://context"), "", metadata); + RyaStatement statement2 = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), + new RyaType("HardwareStore"), new RyaURI("http://context"), "", metadata); + dao.add(statement1); + dao.add(statement2); + + SPARQLParser parser = new SPARQLParser(); + ParsedQuery pq = parser.parseQuery(query, null); + List<StatementPattern> spList = StatementPatternCollector.process(pq.getTupleExpr()); + StatementMetadataNode<MongoDBRdfConfiguration> node = new StatementMetadataNode<>(spList, conf); + + QueryBindingSet bsConstraint = new QueryBindingSet(); + bsConstraint.addBinding("x", new LiteralImpl("CoffeeShop")); + bsConstraint.addBinding("z", new LiteralImpl("Virginia")); + + CloseableIteration<BindingSet, QueryEvaluationException> iteration = node.evaluate(bsConstraint); + + QueryBindingSet expected = new QueryBindingSet(); + expected.addBinding("x", new LiteralImpl("CoffeeShop")); + expected.addBinding("y", new LiteralImpl("Joe")); + expected.addBinding("z", new LiteralImpl("Virginia")); + + List<BindingSet> bsList = new ArrayList<>(); + while (iteration.hasNext()) { + bsList.add(iteration.next()); + } + + Assert.assertEquals(1, bsList.size()); + Assert.assertEquals(expected, bsList.get(0)); + + dao.delete(statement1, conf); + dao.delete(statement2, conf); + } finally { + dao.destroy(); + } + } + + /** + * Tests to see if correct result is passed back when a metadata statement + * is joined with a StatementPattern statement (i.e. a common variable + * appears in a StatementPattern statement and a metadata statement). + * StatementPattern statements have either rdf:subject, rdf:predicate, or + * rdf:object as the predicate while a metadata statement is any statement + * in the reified query whose predicate is not rdf:type and not a + * StatementPattern predicate. + */ + @Test + public void simpleQueryWithBindingSetJoinPropertyToSubject() throws Exception { + MongoDBRyaDAO dao = new MongoDBRyaDAO(); + try { + dao.setConf(conf); + dao.init(); + StatementMetadata metadata = new StatementMetadata(); + metadata.addMetadata(new RyaURI("http://createdBy"), new RyaURI("http://Joe")); + metadata.addMetadata(new RyaURI("http://createdOn"), new RyaType(XMLSchema.DATE, "2017-01-04")); + + RyaStatement statement1 = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), + new RyaType("CoffeeShop"), new RyaURI("http://context"), "", metadata); + RyaStatement statement2 = new RyaStatement(new RyaURI("http://Bob"), new RyaURI("http://worksAt"), + new RyaType("HardwareStore"), new RyaURI("http://context"), "", metadata); + dao.add(statement1); + dao.add(statement2); + + SPARQLParser parser = new SPARQLParser(); + ParsedQuery pq = parser.parseQuery(query2, null); + List<StatementPattern> spList = StatementPatternCollector.process(pq.getTupleExpr()); + StatementMetadataNode<MongoDBRdfConfiguration> node = new StatementMetadataNode<>(spList, conf); + + List<BindingSet> bsCollection = new ArrayList<>(); + QueryBindingSet bsConstraint1 = new QueryBindingSet(); + bsConstraint1.addBinding("y", new LiteralImpl("CoffeeShop")); + bsConstraint1.addBinding("z", new LiteralImpl("Virginia")); + + QueryBindingSet bsConstraint2 = new QueryBindingSet(); + bsConstraint2.addBinding("y", new LiteralImpl("HardwareStore")); + bsConstraint2.addBinding("z", new LiteralImpl("Maryland")); + bsCollection.add(bsConstraint1); + bsCollection.add(bsConstraint2); + + CloseableIteration<BindingSet, QueryEvaluationException> iteration = node.evaluate(bsCollection); + + QueryBindingSet expected = new QueryBindingSet(); + expected.addBinding("y", new LiteralImpl("CoffeeShop")); + expected.addBinding("x", new URIImpl("http://Joe")); + expected.addBinding("z", new LiteralImpl("Virginia")); + + List<BindingSet> bsList = new ArrayList<>(); + while (iteration.hasNext()) { + bsList.add(iteration.next()); + } + + Assert.assertEquals(1, bsList.size()); + Assert.assertEquals(expected, bsList.get(0)); + + dao.delete(statement1, conf); + dao.delete(statement2, conf); + } finally { + dao.destroy(); + } + } + + /** + * Tests if the StatementMetadataNode joins BindingSet correctly for + * variables appearing in metadata statements. In this case, the metadata + * statements are (_:blankNode <http://createdOn 2017-01-04 ) and + * (_:blankNode <http://createdBy> ?y). The variable ?y appears as the + * object in the above metadata statement and its values are joined to the + * constraint BindingSets in the example below. + */ + @Test + public void simpleQueryWithBindingSetJoinOnProperty() throws Exception { + MongoDBRyaDAO dao = new MongoDBRyaDAO(); + try { + dao.setConf(conf); + dao.init(); + StatementMetadata metadata = new StatementMetadata(); + metadata.addMetadata(new RyaURI("http://createdBy"), new RyaType("Joe")); + metadata.addMetadata(new RyaURI("http://createdOn"), new RyaType(XMLSchema.DATE, "2017-01-04")); + + RyaStatement statement1 = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), + new RyaType("CoffeeShop"), new RyaURI("http://context"), "", metadata); + dao.add(statement1); + + SPARQLParser parser = new SPARQLParser(); + ParsedQuery pq = parser.parseQuery(query, null); + List<StatementPattern> spList = StatementPatternCollector.process(pq.getTupleExpr()); + StatementMetadataNode<MongoDBRdfConfiguration> node = new StatementMetadataNode<>(spList, conf); + + QueryBindingSet bsConstraint = new QueryBindingSet(); + bsConstraint.addBinding("x", new LiteralImpl("CoffeeShop")); + bsConstraint.addBinding("y", new LiteralImpl("Doug")); + + CloseableIteration<BindingSet, QueryEvaluationException> iteration = node.evaluate(bsConstraint); + + List<BindingSet> bsList = new ArrayList<>(); + while (iteration.hasNext()) { + bsList.add(iteration.next()); + } + + Assert.assertEquals(0, bsList.size()); + dao.delete(statement1, conf); + } finally { + dao.destroy(); + } + } + + /** + * Tests if StatementMetadataNode joins BindingSet values correctly for + * variables appearing as the object in one of the StatementPattern + * statements (in the case ?x appears as the Object in the statement + * _:blankNode rdf:object ?x). StatementPattern statements have either + * rdf:subject, rdf:predicate, or rdf:object as the predicate. + */ + @Test + public void simpleQueryWithBindingSetCollection() throws Exception { + MongoDBRyaDAO dao = new MongoDBRyaDAO(); + try { + dao.setConf(conf); + dao.init(); + StatementMetadata metadata = new StatementMetadata(); + metadata.addMetadata(new RyaURI("http://createdBy"), new RyaType("Joe")); + metadata.addMetadata(new RyaURI("http://createdOn"), new RyaType(XMLSchema.DATE, "2017-01-04")); + + RyaStatement statement1 = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), + new RyaType("CoffeeShop"), new RyaURI("http://context"), "", metadata); + RyaStatement statement2 = new RyaStatement(new RyaURI("http://Joe"), new RyaURI("http://worksAt"), + new RyaType("HardwareStore"), new RyaURI("http://context"), "", metadata); + dao.add(statement1); + dao.add(statement2); + + SPARQLParser parser = new SPARQLParser(); + ParsedQuery pq = parser.parseQuery(query, null); + List<StatementPattern> spList = StatementPatternCollector.process(pq.getTupleExpr()); + StatementMetadataNode<MongoDBRdfConfiguration> node = new StatementMetadataNode<>(spList, conf); + + List<BindingSet> bsCollection = new ArrayList<>(); + QueryBindingSet bsConstraint1 = new QueryBindingSet(); + bsConstraint1.addBinding("x", new LiteralImpl("CoffeeShop")); + bsConstraint1.addBinding("z", new LiteralImpl("Virginia")); + + QueryBindingSet bsConstraint2 = new QueryBindingSet(); + bsConstraint2.addBinding("x", new LiteralImpl("HardwareStore")); + bsConstraint2.addBinding("z", new LiteralImpl("Maryland")); + + QueryBindingSet bsConstraint3 = new QueryBindingSet(); + bsConstraint3.addBinding("x", new LiteralImpl("BurgerShack")); + bsConstraint3.addBinding("z", new LiteralImpl("Delaware")); + bsCollection.add(bsConstraint1); + bsCollection.add(bsConstraint2); + bsCollection.add(bsConstraint3); + + CloseableIteration<BindingSet, QueryEvaluationException> iteration = node.evaluate(bsCollection); + + Set<BindingSet> expected = new HashSet<>(); + QueryBindingSet expected1 = new QueryBindingSet(); + expected1.addBinding("x", new LiteralImpl("CoffeeShop")); + expected1.addBinding("y", new LiteralImpl("Joe")); + expected1.addBinding("z", new LiteralImpl("Virginia")); + + QueryBindingSet expected2 = new QueryBindingSet(); + expected2.addBinding("x", new LiteralImpl("HardwareStore")); + expected2.addBinding("y", new LiteralImpl("Joe")); + expected2.addBinding("z", new LiteralImpl("Maryland")); + expected.add(expected1); + expected.add(expected2); + + Set<BindingSet> bsSet = new HashSet<>(); + while (iteration.hasNext()) { + bsSet.add(iteration.next()); + } + + Assert.assertEquals(expected, bsSet); + + dao.delete(statement1, conf); + dao.delete(statement2, conf); + } finally { + dao.destroy(); + } + } } http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/157c0649/extras/indexingExample/src/main/java/MongoRyaDirectExample.java ---------------------------------------------------------------------- diff --git a/extras/indexingExample/src/main/java/MongoRyaDirectExample.java b/extras/indexingExample/src/main/java/MongoRyaDirectExample.java index 66d94db..addbd18 100644 --- a/extras/indexingExample/src/main/java/MongoRyaDirectExample.java +++ b/extras/indexingExample/src/main/java/MongoRyaDirectExample.java @@ -57,9 +57,8 @@ import org.openrdf.repository.sail.SailRepository; import org.openrdf.repository.sail.SailRepositoryConnection; import org.openrdf.sail.Sail; -import com.mongodb.MongoClient; - import de.flapdoodle.embed.mongo.config.IMongoConfig; +import de.flapdoodle.embed.mongo.config.Net; import info.aduna.iteration.Iterations; @@ -295,12 +294,11 @@ public class MongoRyaDirectExample { .setUseMockMongo(USE_MOCK).setUseInference(USE_INFER).setAuths("U"); if (USE_MOCK) { - final EmbeddedMongoFactory factory = EmbeddedMongoFactory.newFactory(); - final MongoClient c = factory.newMongoClient(); + final EmbeddedMongoFactory factory = EmbeddedMongoFactory.newFactory(); final IMongoConfig connectionConfig = factory.getMongoServerDetails(); - //c.close(); - builder.setMongoHost(connectionConfig.net().getServerAddress().getHostAddress()) - .setMongoPort(connectionConfig.net().getPort() + ""); + Net net = connectionConfig.net(); + builder.setMongoHost(net.getServerAddress().getHostAddress()) + .setMongoPort(net.getPort() + ""); } else { // User name and password must be filled in: builder = builder.setMongoUser(MONGO_USER) http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/157c0649/extras/rya.export/export.client/src/main/java/org/apache/rya/export/client/merge/StatementStoreFactory.java ---------------------------------------------------------------------- diff --git a/extras/rya.export/export.client/src/main/java/org/apache/rya/export/client/merge/StatementStoreFactory.java b/extras/rya.export/export.client/src/main/java/org/apache/rya/export/client/merge/StatementStoreFactory.java index 2f7dca7..536ea60 100644 --- a/extras/rya.export/export.client/src/main/java/org/apache/rya/export/client/merge/StatementStoreFactory.java +++ b/extras/rya.export/export.client/src/main/java/org/apache/rya/export/client/merge/StatementStoreFactory.java @@ -20,7 +20,6 @@ package org.apache.rya.export.client.merge; import static java.util.Objects.requireNonNull; -import java.util.ArrayList; import java.util.Date; import org.apache.rya.accumulo.AccumuloRyaDAO; @@ -123,7 +122,7 @@ public class StatementStoreFactory { private MongoRyaStatementStore getBaseMongoStore(final String hostname, final int port, final String ryaInstanceName) throws RyaDAOException { final MongoClient client = new MongoClient(hostname, port); final MongoDBRyaDAO dao = new MongoDBRyaDAO(); - dao.setConf(new StatefulMongoDBRdfConfiguration(MergeConfigHadoopAdapter.getMongoConfiguration(configuration), client, new ArrayList<>())); + dao.setConf(new StatefulMongoDBRdfConfiguration(MergeConfigHadoopAdapter.getMongoConfiguration(configuration), client)); dao.init(); return new MongoRyaStatementStore(client, ryaInstanceName, dao); } http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/157c0649/extras/rya.export/export.integration/src/test/java/org/apache/rya/indexing/export/StoreToStoreIT.java ---------------------------------------------------------------------- diff --git a/extras/rya.export/export.integration/src/test/java/org/apache/rya/indexing/export/StoreToStoreIT.java b/extras/rya.export/export.integration/src/test/java/org/apache/rya/indexing/export/StoreToStoreIT.java index c982d21..9b6c0c0 100644 --- a/extras/rya.export/export.integration/src/test/java/org/apache/rya/indexing/export/StoreToStoreIT.java +++ b/extras/rya.export/export.integration/src/test/java/org/apache/rya/indexing/export/StoreToStoreIT.java @@ -67,7 +67,7 @@ public class StoreToStoreIT extends ITBase { private static TimestampPolicyMongoRyaStatementStore getParentMongo() throws Exception { final MongoClient mongo = getNewMongoResources(RYA_INSTANCE); final MongoDBRyaDAO dao = new MongoDBRyaDAO(); - dao.setConf(new StatefulMongoDBRdfConfiguration(ITBase.getConf(mongo), mongo, new ArrayList<>())); + dao.setConf(new StatefulMongoDBRdfConfiguration(ITBase.getConf(mongo), mongo)); dao.init(); final MongoRyaStatementStore store = new MongoRyaStatementStore(mongo, RYA_INSTANCE, dao); final TimestampPolicyMongoRyaStatementStore timeStore = new TimestampPolicyMongoRyaStatementStore(store, currentDate, RYA_INSTANCE); @@ -78,7 +78,7 @@ public class StoreToStoreIT extends ITBase { private static MongoRyaStatementStore getChildMongo() throws Exception { final MongoClient mongo = getNewMongoResources(RYA_INSTANCE); final MongoDBRyaDAO dao = new MongoDBRyaDAO(); - dao.setConf(new StatefulMongoDBRdfConfiguration(ITBase.getConf(mongo), mongo, new ArrayList<>())); + dao.setConf(new StatefulMongoDBRdfConfiguration(ITBase.getConf(mongo), mongo)); dao.init(); final MongoRyaStatementStore store = new MongoRyaStatementStore(mongo, RYA_INSTANCE, dao); clients.add(mongo); http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/157c0649/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/GeoEnabledFilterFunctionOptimizer.java ---------------------------------------------------------------------- diff --git a/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/GeoEnabledFilterFunctionOptimizer.java b/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/GeoEnabledFilterFunctionOptimizer.java index eee7310..a425ce4 100644 --- a/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/GeoEnabledFilterFunctionOptimizer.java +++ b/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/GeoEnabledFilterFunctionOptimizer.java @@ -91,35 +91,35 @@ public class GeoEnabledFilterFunctionOptimizer implements QueryOptimizer, Config this.conf = conf; //reset the init. init = false; - init(); + init(); } /** * Load instances of the selected indexers. This is tricky because some (geomesa vs geowave) have incompatible dependencies (geotools versions). */ private synchronized void init() { if (!init) { - if (ConfigUtils.getUseMongo(conf)) { - // create a new MongoGeoIndexer() without having it at compile time. - StatefulMongoDBRdfConfiguration stateConf = (StatefulMongoDBRdfConfiguration) conf; - for(final MongoSecondaryIndex indexer : stateConf.getAdditionalIndexers()) { - if(indexer instanceof FreeTextIndexer) { - freeTextIndexer = (FreeTextIndexer) indexer; - } else if(indexer instanceof TemporalIndexer) { - temporalIndexer = (TemporalIndexer) indexer; - } else if(indexer instanceof GeoIndexer) { - geoIndexer = (GeoIndexer) indexer; - } - } - } else { - GeoIndexerType geoIndexerType = OptionalConfigUtils.getGeoIndexerType(conf); - if (geoIndexerType == GeoIndexerType.UNSPECIFIED) { - geoIndexer = instantiate(GeoIndexerType.GEO_MESA.getGeoIndexerClassString(), GeoIndexer.class); - } else { - geoIndexer = instantiate(geoIndexerType.getGeoIndexerClassString(), GeoIndexer.class); - } - geoIndexer.setConf(conf); - freeTextIndexer = new AccumuloFreeTextIndexer(); - freeTextIndexer.setConf(conf); + if (ConfigUtils.getUseMongo(conf)) { + // create a new MongoGeoIndexer() without having it at compile time. + StatefulMongoDBRdfConfiguration stateConf = (StatefulMongoDBRdfConfiguration) conf; + for(final MongoSecondaryIndex indexer : stateConf.getAdditionalIndexers()) { + if(indexer instanceof FreeTextIndexer) { + freeTextIndexer = (FreeTextIndexer) indexer; + } else if(indexer instanceof TemporalIndexer) { + temporalIndexer = (TemporalIndexer) indexer; + } else if(indexer instanceof GeoIndexer) { + geoIndexer = (GeoIndexer) indexer; + } + } + } else { + GeoIndexerType geoIndexerType = OptionalConfigUtils.getGeoIndexerType(conf); + if (geoIndexerType == GeoIndexerType.UNSPECIFIED) { + geoIndexer = instantiate(GeoIndexerType.GEO_MESA.getGeoIndexerClassString(), GeoIndexer.class); + } else { + geoIndexer = instantiate(geoIndexerType.getGeoIndexerClassString(), GeoIndexer.class); + } + geoIndexer.setConf(conf); + freeTextIndexer = new AccumuloFreeTextIndexer(); + freeTextIndexer.setConf(conf); temporalIndexer = new AccumuloTemporalIndexer(); temporalIndexer.setConf(conf); } @@ -127,10 +127,10 @@ public class GeoEnabledFilterFunctionOptimizer implements QueryOptimizer, Config } } - + @Override public void optimize(final TupleExpr tupleExpr, final Dataset dataset, final BindingSet bindings) { - // find variables used in property and resource based searches: + // find variables used in property and resource based searches: final SearchVarVisitor searchVars = new SearchVarVisitor(); tupleExpr.visit(searchVars); // rewrites for property searches: @@ -148,8 +148,8 @@ public class GeoEnabledFilterFunctionOptimizer implements QueryOptimizer, Config try{ return type.cast(Class.forName(className).newInstance()); } catch(InstantiationException - | IllegalAccessException - | ClassNotFoundException e){ + | IllegalAccessException + | ClassNotFoundException e){ throw new IllegalStateException(e); } } @@ -191,7 +191,7 @@ public class GeoEnabledFilterFunctionOptimizer implements QueryOptimizer, Config //find vars contained in filters private static class SearchVarVisitor extends QueryModelVisitorBase<RuntimeException> { - private final Collection<Var> searchProperties = new ArrayList<Var>(); + private final Collection<Var> searchProperties = new ArrayList<>(); @Override public void meet(final FunctionCall fn) { @@ -206,8 +206,8 @@ public class GeoEnabledFilterFunctionOptimizer implements QueryOptimizer, Config //find StatementPatterns containing filter variables private static class MatchStatementVisitor extends QueryModelVisitorBase<RuntimeException> { private final Collection<Var> propertyVars; - private final Collection<Var> usedVars = new ArrayList<Var>(); - private final List<StatementPattern> matchStatements = new ArrayList<StatementPattern>(); + private final Collection<Var> usedVars = new ArrayList<>(); + private final List<StatementPattern> matchStatements = new ArrayList<>(); public MatchStatementVisitor(final Collection<Var> propertyVars) { this.propertyVars = propertyVars; http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/157c0649/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/GeoRyaSailFactory.java ---------------------------------------------------------------------- diff --git a/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/GeoRyaSailFactory.java b/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/GeoRyaSailFactory.java index ae6af10..c53fea1 100644 --- a/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/GeoRyaSailFactory.java +++ b/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/GeoRyaSailFactory.java @@ -86,29 +86,28 @@ public class GeoRyaSailFactory { Objects.requireNonNull(ryaInstance, "RyaInstance or table prefix is missing from configuration."+RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX); if(ConfigUtils.getUseMongo(config)) { - // Get a reference to a Mongo DB configuration object. + // Get a reference to a Mongo DB configuration object. final MongoDBRdfConfiguration mongoConfig = (config instanceof MongoDBRdfConfiguration) ? (MongoDBRdfConfiguration)config : new MongoDBRdfConfiguration(config); // Create the MongoClient that will be used by the Sail object's components. final MongoClient client = createMongoClient(mongoConfig); - + // Add the Indexer and Optimizer names to the configuration object that are configured to be used. OptionalConfigUtils.setIndexers(mongoConfig); - - // Initialize the indexer and optimizer objects that will be used within the Sail object. - final List<MongoSecondaryIndex> indexers = mongoConfig.getInstances(AccumuloRdfConfiguration.CONF_ADDITIONAL_INDEXERS, MongoSecondaryIndex.class); // Populate the configuration using previously stored Rya Details if this instance uses them. try { - final MongoRyaInstanceDetailsRepository ryaDetailsRepo = new MongoRyaInstanceDetailsRepository(client, mongoConfig.getRyaInstance()); + final MongoRyaInstanceDetailsRepository ryaDetailsRepo = new MongoRyaInstanceDetailsRepository(client, mongoConfig.getRyaInstanceName()); RyaDetailsToConfiguration.addRyaDetailsToConfiguration(ryaDetailsRepo.getRyaInstanceDetails(), mongoConfig); } catch (final RyaDetailsRepositoryException e) { LOG.info("Instance does not have a rya details collection, skipping."); } // Set the configuration to the stateful configuration that is used to pass the constructed objects around. - final StatefulMongoDBRdfConfiguration statefulConfig = new StatefulMongoDBRdfConfiguration(mongoConfig, client, indexers); + final StatefulMongoDBRdfConfiguration statefulConfig = new StatefulMongoDBRdfConfiguration(mongoConfig, client); + final List<MongoSecondaryIndex> indexers = statefulConfig.getInstances(AccumuloRdfConfiguration.CONF_ADDITIONAL_INDEXERS, MongoSecondaryIndex.class); + statefulConfig.setIndexers(indexers); rdfConfig = statefulConfig; // Create the DAO that is able to interact with MongoDB. http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/157c0649/extras/rya.geoindexing/geo.mongo/pom.xml ---------------------------------------------------------------------- diff --git a/extras/rya.geoindexing/geo.mongo/pom.xml b/extras/rya.geoindexing/geo.mongo/pom.xml index 261f061..154fd4e 100644 --- a/extras/rya.geoindexing/geo.mongo/pom.xml +++ b/extras/rya.geoindexing/geo.mongo/pom.xml @@ -46,8 +46,8 @@ <dependency> <groupId>org.apache.rya</groupId> <artifactId>mongodb.rya</artifactId> - <type>test-jar</type> - <scope>test</scope> + <type>test-jar</type> + <scope>test</scope> </dependency> </dependencies> </project> http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/157c0649/extras/rya.geoindexing/geo.mongo/src/main/java/org/apache/rya/indexing/geotemporal/mongo/MongoGeoTemporalIndexer.java ---------------------------------------------------------------------- diff --git a/extras/rya.geoindexing/geo.mongo/src/main/java/org/apache/rya/indexing/geotemporal/mongo/MongoGeoTemporalIndexer.java b/extras/rya.geoindexing/geo.mongo/src/main/java/org/apache/rya/indexing/geotemporal/mongo/MongoGeoTemporalIndexer.java index 62a2181..ce6d653 100644 --- a/extras/rya.geoindexing/geo.mongo/src/main/java/org/apache/rya/indexing/geotemporal/mongo/MongoGeoTemporalIndexer.java +++ b/extras/rya.geoindexing/geo.mongo/src/main/java/org/apache/rya/indexing/geotemporal/mongo/MongoGeoTemporalIndexer.java @@ -92,9 +92,9 @@ public class MongoGeoTemporalIndexer extends AbstractMongoIndexer<GeoTemporalMon @Override public void setConf(final Configuration conf) { requireNonNull(conf); - checkArgument(conf instanceof StatefulMongoDBRdfConfiguration, - "The configuration must be of type StatefulMongoDBRdfConfiguration but you provided: " - + conf.getClass().getSimpleName()); + checkArgument(conf instanceof StatefulMongoDBRdfConfiguration, + "The configuration must be of type StatefulMongoDBRdfConfiguration but you provided: " + + conf.getClass().getSimpleName()); super.conf = (StatefulMongoDBRdfConfiguration) conf; } @@ -214,7 +214,7 @@ public class MongoGeoTemporalIndexer extends AbstractMongoIndexer<GeoTemporalMon return events.get(); } - events.set(new MongoEventStorage(conf.getMongoClient(), conf.getRyaInstance())); + events.set(new MongoEventStorage(conf.getMongoClient(), conf.getRyaInstanceName())); return events.get(); } } http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/157c0649/extras/rya.geoindexing/geo.mongo/src/test/java/org/apache/rya/indexing/geotemporal/MongoGeoTemporalIndexIT.java ---------------------------------------------------------------------- diff --git a/extras/rya.geoindexing/geo.mongo/src/test/java/org/apache/rya/indexing/geotemporal/MongoGeoTemporalIndexIT.java b/extras/rya.geoindexing/geo.mongo/src/test/java/org/apache/rya/indexing/geotemporal/MongoGeoTemporalIndexIT.java index cff0996..9c28bf0 100644 --- a/extras/rya.geoindexing/geo.mongo/src/test/java/org/apache/rya/indexing/geotemporal/MongoGeoTemporalIndexIT.java +++ b/extras/rya.geoindexing/geo.mongo/src/test/java/org/apache/rya/indexing/geotemporal/MongoGeoTemporalIndexIT.java @@ -51,135 +51,130 @@ import org.openrdf.repository.sail.SailRepositoryConnection; import org.openrdf.sail.Sail; public class MongoGeoTemporalIndexIT extends MongoTestBase { - private static final String URI_PROPERTY_AT_TIME = "Property:atTime"; - - private static final ValueFactory VF = ValueFactoryImpl.getInstance(); - @Override - public void updateConfiguration(final MongoDBRdfConfiguration conf) { - // mongoClient = super.getMongoClient(); - // conf = new MongoDBRdfConfiguration(); - // conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, MongoGeoTemporalIndexIT.class.getSimpleName() + "_" + COUNTER.getAndIncrement()); - // conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya"); - // conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, "rya"); - // conf.setBoolean(ConfigUtils.USE_MONGO, true); - conf.setBoolean(OptionalConfigUtils.USE_GEOTEMPORAL, true); - - // conn = new SailRepository(sail).getConnection(); - // conn.begin(); - - } - - @Test - public void ensureInEventStore_Test() throws Exception { - final Sail sail = GeoRyaSailFactory.getInstance(conf); - final SailRepository repo = new SailRepository(sail); - try(final MongoGeoTemporalIndexer indexer = new MongoGeoTemporalIndexer()) { - indexer.setConf(conf); - indexer.init(); - - addStatements(repo.getConnection()); - final EventStorage events = indexer.getEventStorage(); - final RyaURI subject = new RyaURI("urn:event1"); - final Optional<Event> event = events.get(subject); - assertTrue(event.isPresent()); - } finally { - sail.shutDown(); - } - } - - @Test - public void constantSubjQuery_Test() throws Exception { - final Sail sail = GeoRyaSailFactory.getInstance(conf); - final SailRepositoryConnection conn = new SailRepository(sail).getConnection(); - - try { - final String query = - "PREFIX time: <http://www.w3.org/2006/time#> \n" - + "PREFIX tempo: <tag:rya-rdf.org,2015:temporal#> \n" - + "PREFIX geo: <http://www.opengis.net/ont/geosparql#>" - + "PREFIX geof: <http://www.opengis.net/def/function/geosparql/>" - + "SELECT * " - + "WHERE { " - + " <urn:event1> time:atTime ?time . " - + " <urn:event1> geo:asWKT ?point . " - + " FILTER(geof:sfWithin(?point, \"POLYGON((-3 -2, -3 2, 1 2, 1 -2, -3 -2))\"^^geo:wktLiteral)) " - + " FILTER(tempo:equals(?time, \"2015-12-30T12:00:00Z\")) " - + "}"; - - final TupleQueryResult rez = conn.prepareTupleQuery(QueryLanguage.SPARQL, query).evaluate(); - final Set<BindingSet> results = new HashSet<>(); - while(rez.hasNext()) { - final BindingSet bs = rez.next(); - results.add(bs); - } - final MapBindingSet expected = new MapBindingSet(); - expected.addBinding("point", VF.createLiteral("POINT (0 0)")); - expected.addBinding("time", VF.createLiteral("2015-12-30T12:00:00Z")); - - assertEquals(1, results.size()); - assertEquals(expected, results.iterator().next()); - } finally { - conn.close(); - sail.shutDown(); - } - } - - @Test - public void variableSubjQuery_Test() throws Exception { - final Sail sail = GeoRyaSailFactory.getInstance(conf); - final SailRepositoryConnection conn = new SailRepository(sail).getConnection(); - - try { - final String query = - "PREFIX time: <http://www.w3.org/2006/time#> \n" - + "PREFIX tempo: <tag:rya-rdf.org,2015:temporal#> \n" - + "PREFIX geo: <http://www.opengis.net/ont/geosparql#>" - + "PREFIX geof: <http://www.opengis.net/def/function/geosparql/>" - + "SELECT * " - + "WHERE { " - + " ?subj time:atTime ?time . " - + " ?subj geo:asWKT ?point . " - + " FILTER(geof:sfWithin(?point, \"POLYGON((-3 -2, -3 2, 1 2, 1 -2, -3 -2))\"^^geo:wktLiteral)) " - + " FILTER(tempo:equals(?time, \"2015-12-30T12:00:00Z\")) " - + "}"; - - final TupleQueryResult rez = conn.prepareTupleQuery(QueryLanguage.SPARQL, query).evaluate(); - final List<BindingSet> results = new ArrayList<>(); - while(rez.hasNext()) { - final BindingSet bs = rez.next(); - results.add(bs); - } - final MapBindingSet expected1 = new MapBindingSet(); - expected1.addBinding("point", VF.createLiteral("POINT (0 0)")); - expected1.addBinding("time", VF.createLiteral("2015-12-30T12:00:00Z")); - - final MapBindingSet expected2 = new MapBindingSet(); - expected2.addBinding("point", VF.createLiteral("POINT (1 1)")); - expected2.addBinding("time", VF.createLiteral("2015-12-30T12:00:00Z")); - - assertEquals(2, results.size()); - assertEquals(expected1, results.get(0)); - assertEquals(expected2, results.get(1)); - } finally { - conn.close(); - sail.shutDown(); - } - } - - private void addStatements(final SailRepositoryConnection conn) throws Exception { - URI subject = VF.createURI("urn:event1"); - final URI predicate = VF.createURI(URI_PROPERTY_AT_TIME); - Value object = VF.createLiteral(new TemporalInstantRfc3339(2015, 12, 30, 12, 00, 0).toString()); - conn.add(VF.createStatement(subject, predicate, object)); - - object = VF.createLiteral("Point(0 0)", GeoConstants.XMLSCHEMA_OGC_WKT); - conn.add(VF.createStatement(subject, GeoConstants.GEO_AS_WKT, object)); - - subject = VF.createURI("urn:event2"); - object = VF.createLiteral(new TemporalInstantRfc3339(2015, 12, 30, 12, 00, 0).toString()); - conn.add(VF.createStatement(subject, predicate, object)); - - object = VF.createLiteral("Point(1 1)", GeoConstants.XMLSCHEMA_OGC_WKT); - conn.add(VF.createStatement(subject, GeoConstants.GEO_AS_WKT, object)); - } + private static final String URI_PROPERTY_AT_TIME = "Property:atTime"; + + private static final ValueFactory VF = ValueFactoryImpl.getInstance(); + + @Override + public void updateConfiguration(final MongoDBRdfConfiguration conf) { + conf.setBoolean(OptionalConfigUtils.USE_GEOTEMPORAL, true); + } + + @Test + public void ensureInEventStore_Test() throws Exception { + final Sail sail = GeoRyaSailFactory.getInstance(conf); + final SailRepository repo = new SailRepository(sail); + try(final MongoGeoTemporalIndexer indexer = new MongoGeoTemporalIndexer()) { + indexer.setConf(conf); + indexer.init(); + + addStatements(repo.getConnection()); + final EventStorage events = indexer.getEventStorage(); + final RyaURI subject = new RyaURI("urn:event1"); + final Optional<Event> event = events.get(subject); + assertTrue(event.isPresent()); + } finally { + sail.shutDown(); + } + } + + @Test + public void constantSubjQuery_Test() throws Exception { + final Sail sail = GeoRyaSailFactory.getInstance(conf); + final SailRepositoryConnection conn = new SailRepository(sail).getConnection(); + + try { + addStatements(conn); + + final String query = + "PREFIX time: <http://www.w3.org/2006/time#> \n" + + "PREFIX tempo: <tag:rya-rdf.org,2015:temporal#> \n" + + "PREFIX geo: <http://www.opengis.net/ont/geosparql#>" + + "PREFIX geof: <http://www.opengis.net/def/function/geosparql/>" + + "SELECT * " + + "WHERE { " + + " <urn:event1> time:atTime ?time . " + + " <urn:event1> geo:asWKT ?point . " + + " FILTER(geof:sfWithin(?point, \"POLYGON((-3 -2, -3 2, 1 2, 1 -2, -3 -2))\"^^geo:wktLiteral)) " + + " FILTER(tempo:equals(?time, \"2015-12-30T12:00:00Z\")) " + + "}"; + + final TupleQueryResult rez = conn.prepareTupleQuery(QueryLanguage.SPARQL, query).evaluate(); + final Set<BindingSet> results = new HashSet<>(); + while(rez.hasNext()) { + final BindingSet bs = rez.next(); + results.add(bs); + } + final MapBindingSet expected = new MapBindingSet(); + expected.addBinding("point", VF.createLiteral("POINT (0 0)")); + expected.addBinding("time", VF.createLiteral("2015-12-30T12:00:00Z")); + + assertEquals(1, results.size()); + assertEquals(expected, results.iterator().next()); + } finally { + conn.close(); + sail.shutDown(); + } + } + + @Test + public void variableSubjQuery_Test() throws Exception { + final Sail sail = GeoRyaSailFactory.getInstance(conf); + final SailRepositoryConnection conn = new SailRepository(sail).getConnection(); + + try { + addStatements(conn); + + final String query = + "PREFIX time: <http://www.w3.org/2006/time#> \n" + + "PREFIX tempo: <tag:rya-rdf.org,2015:temporal#> \n" + + "PREFIX geo: <http://www.opengis.net/ont/geosparql#>" + + "PREFIX geof: <http://www.opengis.net/def/function/geosparql/>" + + "SELECT * " + + "WHERE { " + + " ?subj time:atTime ?time . " + + " ?subj geo:asWKT ?point . " + + " FILTER(geof:sfWithin(?point, \"POLYGON((-3 -2, -3 2, 1 2, 1 -2, -3 -2))\"^^geo:wktLiteral)) " + + " FILTER(tempo:equals(?time, \"2015-12-30T12:00:00Z\")) " + + "}"; + + final TupleQueryResult rez = conn.prepareTupleQuery(QueryLanguage.SPARQL, query).evaluate(); + final List<BindingSet> results = new ArrayList<>(); + while(rez.hasNext()) { + final BindingSet bs = rez.next(); + results.add(bs); + } + final MapBindingSet expected1 = new MapBindingSet(); + expected1.addBinding("point", VF.createLiteral("POINT (0 0)")); + expected1.addBinding("time", VF.createLiteral("2015-12-30T12:00:00Z")); + + final MapBindingSet expected2 = new MapBindingSet(); + expected2.addBinding("point", VF.createLiteral("POINT (1 1)")); + expected2.addBinding("time", VF.createLiteral("2015-12-30T12:00:00Z")); + + assertEquals(2, results.size()); + assertEquals(expected1, results.get(0)); + assertEquals(expected2, results.get(1)); + } finally { + conn.close(); + sail.shutDown(); + } + } + + private void addStatements(final SailRepositoryConnection conn) throws Exception { + URI subject = VF.createURI("urn:event1"); + final URI predicate = VF.createURI(URI_PROPERTY_AT_TIME); + Value object = VF.createLiteral(new TemporalInstantRfc3339(2015, 12, 30, 12, 00, 0).toString()); + conn.add(VF.createStatement(subject, predicate, object)); + + object = VF.createLiteral("Point(0 0)", GeoConstants.XMLSCHEMA_OGC_WKT); + conn.add(VF.createStatement(subject, GeoConstants.GEO_AS_WKT, object)); + + subject = VF.createURI("urn:event2"); + object = VF.createLiteral(new TemporalInstantRfc3339(2015, 12, 30, 12, 00, 0).toString()); + conn.add(VF.createStatement(subject, predicate, object)); + + object = VF.createLiteral("Point(1 1)", GeoConstants.XMLSCHEMA_OGC_WKT); + conn.add(VF.createStatement(subject, GeoConstants.GEO_AS_WKT, object)); + } }