You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rya.apache.org by dl...@apache.org on 2018/01/04 22:07:28 UTC
[06/17] incubator-rya git commit: RYA-414 Removed mongo connection
factory
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/17cebae3/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 d005ce7..aa700b1 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
@@ -27,12 +27,10 @@ import org.apache.rya.api.domain.RyaStatement;
import org.apache.rya.api.domain.RyaType;
import org.apache.rya.api.domain.RyaURI;
import org.apache.rya.api.domain.StatementMetadata;
-import org.apache.rya.api.persist.RyaDAOException;
import org.apache.rya.indexing.statement.metadata.matching.StatementMetadataNode;
import org.apache.rya.mongodb.MongoDBRdfConfiguration;
import org.apache.rya.mongodb.MongoDBRyaDAO;
import org.apache.rya.mongodb.MongoTestBase;
-import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -40,7 +38,6 @@ import org.openrdf.model.impl.LiteralImpl;
import org.openrdf.model.impl.URIImpl;
import org.openrdf.model.vocabulary.XMLSchema;
import org.openrdf.query.BindingSet;
-import org.openrdf.query.MalformedQueryException;
import org.openrdf.query.QueryEvaluationException;
import org.openrdf.query.algebra.StatementPattern;
import org.openrdf.query.algebra.evaluation.QueryBindingSet;
@@ -51,307 +48,321 @@ import org.openrdf.query.parser.sparql.SPARQLParser;
import info.aduna.iteration.CloseableIteration;
public class MongoStatementMetadataNodeTest extends MongoTestBase {
- private MongoDBRyaDAO dao;
- 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);
-
- dao = new MongoDBRyaDAO(conf, super.getMongoClient());
- dao.init();
- }
-
- @Test
- public void simpleQueryWithoutBindingSet()
- throws MalformedQueryException, QueryEvaluationException, RyaDAOException {
- 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);
- }
-
- /**
- * 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 MalformedQueryException, QueryEvaluationException, RyaDAOException {
- 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);
- }
-
- @Test
- public void simpleQueryWithBindingSet() throws MalformedQueryException, QueryEvaluationException, RyaDAOException {
-
- 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);
- }
-
- /**
- * 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 MalformedQueryException, QueryEvaluationException, RyaDAOException {
-
- 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);
- }
-
- /**
- * 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.
- *
- * @throws MalformedQueryException
- * @throws QueryEvaluationException
- * @throws RyaDAOException
- */
- @Test
- public void simpleQueryWithBindingSetJoinOnProperty()
- throws MalformedQueryException, QueryEvaluationException, RyaDAOException {
-
- 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);
- }
-
- /**
- * 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.
- *
- * @throws MalformedQueryException
- * @throws QueryEvaluationException
- * @throws RyaDAOException
- */
- @Test
- public void simpleQueryWithBindingSetCollection()
- throws MalformedQueryException, QueryEvaluationException, RyaDAOException {
-
- 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);
- }
+ 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/17cebae3/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 477e579..66d94db 100644
--- a/extras/indexingExample/src/main/java/MongoRyaDirectExample.java
+++ b/extras/indexingExample/src/main/java/MongoRyaDirectExample.java
@@ -58,8 +58,8 @@ import org.openrdf.repository.sail.SailRepositoryConnection;
import org.openrdf.sail.Sail;
import com.mongodb.MongoClient;
-import com.mongodb.ServerAddress;
+import de.flapdoodle.embed.mongo.config.IMongoConfig;
import info.aduna.iteration.Iterations;
@@ -295,12 +295,12 @@ public class MongoRyaDirectExample {
.setUseMockMongo(USE_MOCK).setUseInference(USE_INFER).setAuths("U");
if (USE_MOCK) {
- final MongoClient c = EmbeddedMongoFactory.newFactory().newMongoClient();
- final ServerAddress address = c.getAddress();
- final String url = address.getHost();
- final String port = Integer.toString(address.getPort());
- c.close();
- builder.setMongoHost(url).setMongoPort(port);
+ final EmbeddedMongoFactory factory = EmbeddedMongoFactory.newFactory();
+ final MongoClient c = factory.newMongoClient();
+ final IMongoConfig connectionConfig = factory.getMongoServerDetails();
+ //c.close();
+ builder.setMongoHost(connectionConfig.net().getServerAddress().getHostAddress())
+ .setMongoPort(connectionConfig.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/17cebae3/extras/rya.export/export.client/src/main/java/org/apache/rya/export/client/conf/MergeConfigHadoopAdapter.java
----------------------------------------------------------------------
diff --git a/extras/rya.export/export.client/src/main/java/org/apache/rya/export/client/conf/MergeConfigHadoopAdapter.java b/extras/rya.export/export.client/src/main/java/org/apache/rya/export/client/conf/MergeConfigHadoopAdapter.java
index c51d637..3b722f1 100644
--- a/extras/rya.export/export.client/src/main/java/org/apache/rya/export/client/conf/MergeConfigHadoopAdapter.java
+++ b/extras/rya.export/export.client/src/main/java/org/apache/rya/export/client/conf/MergeConfigHadoopAdapter.java
@@ -28,8 +28,8 @@ import org.apache.rya.mongodb.MongoDBRdfConfiguration;
public class MergeConfigHadoopAdapter {
public static MongoDBRdfConfiguration getMongoConfiguration(final MergeConfiguration config) {
final MongoDBRdfConfiguration configuration = new MongoDBRdfConfiguration();
- configuration.setMongoInstance(config.getChildHostname());
- configuration.set(MongoDBRdfConfiguration.MONGO_INSTANCE_PORT, config.getChildPort() + "");
+ configuration.setMongoHostname(config.getChildHostname());
+ configuration.set(MongoDBRdfConfiguration.MONGO_PORT, config.getChildPort() + "");
configuration.set(MongoDBRdfConfiguration.MONGO_DB_NAME, config.getChildRyaInstanceName());
return configuration;
}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/17cebae3/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 c96a2b6..2f7dca7 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,6 +20,7 @@ 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;
@@ -37,8 +38,8 @@ import org.apache.rya.export.api.store.RyaStatementStore;
import org.apache.rya.export.client.conf.MergeConfigHadoopAdapter;
import org.apache.rya.export.mongo.MongoRyaStatementStore;
import org.apache.rya.export.mongo.policy.TimestampPolicyMongoRyaStatementStore;
-import org.apache.rya.mongodb.MongoDBRdfConfiguration;
import org.apache.rya.mongodb.MongoDBRyaDAO;
+import org.apache.rya.mongodb.StatefulMongoDBRdfConfiguration;
import com.mongodb.MongoClient;
@@ -121,7 +122,9 @@ 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(new MongoDBRdfConfiguration(MergeConfigHadoopAdapter.getMongoConfiguration(configuration)), client);
+ final MongoDBRyaDAO dao = new MongoDBRyaDAO();
+ dao.setConf(new StatefulMongoDBRdfConfiguration(MergeConfigHadoopAdapter.getMongoConfiguration(configuration), client, new ArrayList<>()));
+ dao.init();
return new MongoRyaStatementStore(client, ryaInstanceName, dao);
}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/17cebae3/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 2eef621..c982d21 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
@@ -41,6 +41,7 @@ import org.apache.rya.export.client.merge.VisibilityStatementMerger;
import org.apache.rya.export.mongo.MongoRyaStatementStore;
import org.apache.rya.export.mongo.policy.TimestampPolicyMongoRyaStatementStore;
import org.apache.rya.mongodb.MongoDBRyaDAO;
+import org.apache.rya.mongodb.StatefulMongoDBRdfConfiguration;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
@@ -65,7 +66,9 @@ public class StoreToStoreIT extends ITBase {
private static TimestampPolicyMongoRyaStatementStore getParentMongo() throws Exception {
final MongoClient mongo = getNewMongoResources(RYA_INSTANCE);
- final MongoDBRyaDAO dao = new MongoDBRyaDAO(ITBase.getConf(mongo), mongo);
+ final MongoDBRyaDAO dao = new MongoDBRyaDAO();
+ dao.setConf(new StatefulMongoDBRdfConfiguration(ITBase.getConf(mongo), mongo, new ArrayList<>()));
+ dao.init();
final MongoRyaStatementStore store = new MongoRyaStatementStore(mongo, RYA_INSTANCE, dao);
final TimestampPolicyMongoRyaStatementStore timeStore = new TimestampPolicyMongoRyaStatementStore(store, currentDate, RYA_INSTANCE);
clients.add(mongo);
@@ -74,7 +77,9 @@ public class StoreToStoreIT extends ITBase {
private static MongoRyaStatementStore getChildMongo() throws Exception {
final MongoClient mongo = getNewMongoResources(RYA_INSTANCE);
- final MongoDBRyaDAO dao = new MongoDBRyaDAO(ITBase.getConf(mongo), mongo);
+ final MongoDBRyaDAO dao = new MongoDBRyaDAO();
+ dao.setConf(new StatefulMongoDBRdfConfiguration(ITBase.getConf(mongo), mongo, new ArrayList<>()));
+ dao.init();
final MongoRyaStatementStore store = new MongoRyaStatementStore(mongo, RYA_INSTANCE, dao);
clients.add(mongo);
return store;
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/17cebae3/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 6ad0edc..eee7310 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
@@ -1,6 +1,4 @@
-package org.apache.rya.indexing;
-
-/*
+/**
* 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
@@ -18,7 +16,7 @@ package org.apache.rya.indexing;
* specific language governing permissions and limitations
* under the License.
*/
-
+package org.apache.rya.indexing;
import java.io.IOException;
import java.net.UnknownHostException;
@@ -43,11 +41,10 @@ import org.apache.rya.indexing.accumulo.geo.GeoParseUtils;
import org.apache.rya.indexing.accumulo.geo.GeoTupleSet;
import org.apache.rya.indexing.accumulo.geo.OptionalConfigUtils;
import org.apache.rya.indexing.accumulo.temporal.AccumuloTemporalIndexer;
-import org.apache.rya.indexing.mongodb.freetext.MongoFreeTextIndexer;
-import org.apache.rya.indexing.mongodb.temporal.MongoTemporalIndexer;
+import org.apache.rya.mongodb.MongoSecondaryIndex;
+import org.apache.rya.mongodb.StatefulMongoDBRdfConfiguration;
import org.openrdf.model.Resource;
import org.openrdf.model.URI;
-import org.openrdf.model.Value;
import org.openrdf.model.ValueFactory;
import org.openrdf.model.impl.URIImpl;
import org.openrdf.model.impl.ValueFactoryImpl;
@@ -103,12 +100,16 @@ public class GeoEnabledFilterFunctionOptimizer implements QueryOptimizer, Config
if (!init) {
if (ConfigUtils.getUseMongo(conf)) {
// create a new MongoGeoIndexer() without having it at compile time.
- geoIndexer = instantiate(GeoIndexerType.MONGO_DB.getGeoIndexerClassString(), GeoIndexer.class);
- geoIndexer.setConf(conf);
- freeTextIndexer = new MongoFreeTextIndexer();
- freeTextIndexer.setConf(conf);
- temporalIndexer = new MongoTemporalIndexer();
- temporalIndexer.setConf(conf);
+ 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) {
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/17cebae3/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 3c01bf6..ae6af10 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
@@ -20,25 +20,17 @@ package org.apache.rya.indexing;
import static java.util.Objects.requireNonNull;
-import java.net.UnknownHostException;
+import java.util.Arrays;
+import java.util.List;
import java.util.Objects;
import org.apache.accumulo.core.client.AccumuloException;
import org.apache.accumulo.core.client.AccumuloSecurityException;
import org.apache.accumulo.core.client.Connector;
-import org.apache.accumulo.core.client.Instance;
-import org.apache.accumulo.core.client.security.tokens.PasswordToken;
+import org.apache.commons.configuration.ConfigurationRuntimeException;
import org.apache.hadoop.conf.Configuration;
-import org.openrdf.sail.Sail;
-import org.openrdf.sail.SailException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.mongodb.MongoClient;
-
import org.apache.rya.accumulo.AccumuloRdfConfiguration;
import org.apache.rya.accumulo.AccumuloRyaDAO;
-import org.apache.rya.accumulo.instance.AccumuloRyaInstanceDetailsRepository;
import org.apache.rya.api.RdfCloudTripleStoreConfiguration;
import org.apache.rya.api.instance.RyaDetailsRepository.RyaDetailsRepositoryException;
import org.apache.rya.api.instance.RyaDetailsToConfiguration;
@@ -47,14 +39,24 @@ import org.apache.rya.api.persist.RyaDAO;
import org.apache.rya.api.persist.RyaDAOException;
import org.apache.rya.indexing.accumulo.ConfigUtils;
import org.apache.rya.indexing.accumulo.geo.OptionalConfigUtils;
-import org.apache.rya.mongodb.MongoConnectorFactory;
import org.apache.rya.mongodb.MongoDBRdfConfiguration;
import org.apache.rya.mongodb.MongoDBRyaDAO;
+import org.apache.rya.mongodb.MongoSecondaryIndex;
+import org.apache.rya.mongodb.StatefulMongoDBRdfConfiguration;
import org.apache.rya.mongodb.instance.MongoRyaInstanceDetailsRepository;
import org.apache.rya.rdftriplestore.RdfCloudTripleStore;
import org.apache.rya.rdftriplestore.inference.InferenceEngine;
import org.apache.rya.rdftriplestore.inference.InferenceEngineException;
import org.apache.rya.sail.config.RyaSailFactory;
+import org.openrdf.sail.Sail;
+import org.openrdf.sail.SailException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.mongodb.MongoClient;
+import com.mongodb.MongoCredential;
+import com.mongodb.MongoException;
+import com.mongodb.ServerAddress;
public class GeoRyaSailFactory {
private static final Logger LOG = LoggerFactory.getLogger(GeoRyaSailFactory.class);
@@ -84,16 +86,36 @@ public class GeoRyaSailFactory {
Objects.requireNonNull(ryaInstance, "RyaInstance or table prefix is missing from configuration."+RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX);
if(ConfigUtils.getUseMongo(config)) {
- final MongoDBRdfConfiguration mongoConfig = new MongoDBRdfConfiguration(config);
- rdfConfig = mongoConfig;
- final MongoClient client = MongoConnectorFactory.getMongoClient(config);
+ // 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.getCollectionName());
+ final MongoRyaInstanceDetailsRepository ryaDetailsRepo = new MongoRyaInstanceDetailsRepository(client, mongoConfig.getRyaInstance());
RyaDetailsToConfiguration.addRyaDetailsToConfiguration(ryaDetailsRepo.getRyaInstanceDetails(), mongoConfig);
} catch (final RyaDetailsRepositoryException e) {
LOG.info("Instance does not have a rya details collection, skipping.");
}
- dao = getMongoDAO((MongoDBRdfConfiguration)rdfConfig, client);
+
+ // Set the configuration to the stateful configuration that is used to pass the constructed objects around.
+ final StatefulMongoDBRdfConfiguration statefulConfig = new StatefulMongoDBRdfConfiguration(mongoConfig, client, indexers);
+ rdfConfig = statefulConfig;
+
+ // Create the DAO that is able to interact with MongoDB.
+ final MongoDBRyaDAO mongoDao = new MongoDBRyaDAO();
+ mongoDao.setConf(statefulConfig);
+ mongoDao.init();
+ dao = mongoDao;
} else {
rdfConfig = new AccumuloRdfConfiguration(config);
user = rdfConfig.get(ConfigUtils.CLOUDBASE_USER);
@@ -120,20 +142,39 @@ public class GeoRyaSailFactory {
return store;
}
- private static MongoDBRyaDAO getMongoDAO(final MongoDBRdfConfiguration config, final MongoClient client) throws RyaDAOException {
- MongoDBRyaDAO dao = null;
- OptionalConfigUtils.setIndexers(config);
- if(client != null) {
- dao = new MongoDBRyaDAO(config, client);
+ /**
+ * Create a {@link MongoClient} that is connected to the configured database.
+ *
+ * @param mongoConf - Configures what will be connected to. (not null)
+ * @throws ConfigurationRuntimeException An invalid port was provided by {@code mongoConf}.
+ * @throws MongoException Couldn't connect to the MongoDB database.
+ */
+ private static MongoClient createMongoClient(final MongoDBRdfConfiguration mongoConf) throws ConfigurationRuntimeException, MongoException {
+ requireNonNull(mongoConf);
+ requireNonNull(mongoConf.getMongoHostname());
+ requireNonNull(mongoConf.getMongoPort());
+ requireNonNull(mongoConf.getMongoDBName());
+
+ // Connect to a running MongoDB server.
+ final int port;
+ try {
+ port = Integer.parseInt( mongoConf.getMongoPort() );
+ } catch(final NumberFormatException e) {
+ throw new ConfigurationRuntimeException("Port '" + mongoConf.getMongoPort() + "' must be an integer.");
+ }
+
+ final ServerAddress server = new ServerAddress(mongoConf.getMongoHostname(), port);
+
+ // Connect to a specific MongoDB Database if that information is provided.
+ final String username = mongoConf.getMongoUser();
+ final String database = mongoConf.getMongoDBName();
+ final String password = mongoConf.getMongoPassword();
+ if(username != null && password != null) {
+ final MongoCredential cred = MongoCredential.createCredential(username, database, password.toCharArray());
+ return new MongoClient(server, Arrays.asList(cred));
} else {
- try {
- dao = new MongoDBRyaDAO(config);
- } catch (NumberFormatException | UnknownHostException e) {
- throw new RyaDAOException("Unable to connect to mongo at the configured location.", e);
- }
+ return new MongoClient(server);
}
- dao.init();
- return dao;
}
private static AccumuloRyaDAO getAccumuloDAO(final AccumuloRdfConfiguration config) throws AccumuloException, AccumuloSecurityException, RyaDAOException {
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/17cebae3/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/geotemporal/GeoTemporalIndexer.java
----------------------------------------------------------------------
diff --git a/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/geotemporal/GeoTemporalIndexer.java b/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/geotemporal/GeoTemporalIndexer.java
index 106588b..cb34bd0 100644
--- a/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/geotemporal/GeoTemporalIndexer.java
+++ b/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/geotemporal/GeoTemporalIndexer.java
@@ -18,7 +18,6 @@
*/
package org.apache.rya.indexing.geotemporal;
-import org.apache.hadoop.conf.Configuration;
import org.apache.rya.api.persist.index.RyaSecondaryIndexer;
import org.apache.rya.indexing.GeoConstants;
import org.apache.rya.indexing.geotemporal.storage.EventStorage;
@@ -33,15 +32,15 @@ public interface GeoTemporalIndexer extends RyaSecondaryIndexer {
/**
* initialize after setting configuration.
*/
- public void init();
+ @Override
+ public void init();
/**
- * Creates the {@link Eventtorage} that will be used by the indexer.
- *
- * @param conf - Indicates how the {@link EventStorage} is initialized. (not null)
+ * Creates the {@link EventStorage} that will be used by the indexer.
+ * NOTE: {@link #setConf(org.apache.hadoop.conf.Configuration)} must be called before calling this.
* @return The {@link EventStorage} that will be used by this indexer.
*/
- public abstract EventStorage getEventStorage(final Configuration conf);
+ public abstract EventStorage getEventStorage();
/**
* Used to indicate which geo filter functions to use in a query.
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/17cebae3/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/geotemporal/GeoTemporalIndexerFactory.java
----------------------------------------------------------------------
diff --git a/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/geotemporal/GeoTemporalIndexerFactory.java b/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/geotemporal/GeoTemporalIndexerFactory.java
index f4df8bc..24e9666 100644
--- a/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/geotemporal/GeoTemporalIndexerFactory.java
+++ b/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/geotemporal/GeoTemporalIndexerFactory.java
@@ -19,13 +19,11 @@
package org.apache.rya.indexing.geotemporal;
import org.apache.hadoop.conf.Configuration;
-import org.apache.rya.indexing.GeoEnabledFilterFunctionOptimizer;
-import org.apache.rya.indexing.GeoIndexer;
-import org.apache.rya.indexing.GeoIndexerType;
-import org.apache.rya.indexing.GeoTemporalIndexerType;
import org.apache.rya.indexing.accumulo.ConfigUtils;
-import org.apache.rya.mongodb.MongoDBRdfConfiguration;
import org.apache.rya.mongodb.MongoSecondaryIndex;
+import org.apache.rya.mongodb.StatefulMongoDBRdfConfiguration;
+
+import com.google.common.base.Preconditions;
/**
* Factory for retrieving a {@link GeoTemporalIndexer} based on a provided {@link Configuration}.
@@ -38,17 +36,16 @@ public class GeoTemporalIndexerFactory {
*/
public GeoTemporalIndexer getIndexer(final Configuration conf) {
if(ConfigUtils.getUseMongo(conf)) {
- final MongoDBRdfConfiguration config = new MongoDBRdfConfiguration(conf);
- for(final MongoSecondaryIndex index : config.getAdditionalIndexers()) {
+ Preconditions.checkArgument(conf instanceof StatefulMongoDBRdfConfiguration,
+ "The configuration provided must be a StatefulMongoDBRdfConfiguration, found: " + conf.getClass().getSimpleName());
+ final StatefulMongoDBRdfConfiguration statefulConf = (StatefulMongoDBRdfConfiguration) conf;
+ for(final MongoSecondaryIndex index : statefulConf.getAdditionalIndexers()) {
if(index instanceof GeoTemporalIndexer) {
return (GeoTemporalIndexer) index;
}
}
- /* Created a MongoGeoTemporalIndexer */
- final GeoTemporalIndexer index = GeoEnabledFilterFunctionOptimizer.instantiate(GeoTemporalIndexerType.MONGO_GEO_TEMPORAL.getGeoTemporalIndexerClassString(), GeoTemporalIndexer.class);
- index.setConf(conf);
- index.init();
- return index;
+
+ throw new IllegalStateException("Geo Temporal Indexing is not turned on. Check configuration.");
} else {
//TODO: add Accumulo here.
return null;
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/17cebae3/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/geotemporal/GeoTemporalOptimizer.java
----------------------------------------------------------------------
diff --git a/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/geotemporal/GeoTemporalOptimizer.java b/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/geotemporal/GeoTemporalOptimizer.java
index d626adc..f6e57a7 100644
--- a/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/geotemporal/GeoTemporalOptimizer.java
+++ b/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/geotemporal/GeoTemporalOptimizer.java
@@ -44,7 +44,7 @@ public class GeoTemporalOptimizer extends AbstractExternalSetOptimizer<EventQuer
indexer = factory.getIndexer(conf);
//conf here does not matter since EventStorage has already been set in the indexer.
- provider = new GeoTemporalIndexSetProvider(indexer.getEventStorage(conf));
+ provider = new GeoTemporalIndexSetProvider(indexer.getEventStorage());
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/17cebae3/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 2631e06..261f061 100644
--- a/extras/rya.geoindexing/geo.mongo/pom.xml
+++ b/extras/rya.geoindexing/geo.mongo/pom.xml
@@ -43,5 +43,11 @@
<artifactId>gt-xsd-gml3</artifactId>
<version>${geotools.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.rya</groupId>
+ <artifactId>mongodb.rya</artifactId>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/17cebae3/extras/rya.geoindexing/geo.mongo/src/main/java/org/apache/rya/indexing/geoExamples/RyaMongoGeoDirectExample.java
----------------------------------------------------------------------
diff --git a/extras/rya.geoindexing/geo.mongo/src/main/java/org/apache/rya/indexing/geoExamples/RyaMongoGeoDirectExample.java b/extras/rya.geoindexing/geo.mongo/src/main/java/org/apache/rya/indexing/geoExamples/RyaMongoGeoDirectExample.java
index ede3f98..04488bb 100644
--- a/extras/rya.geoindexing/geo.mongo/src/main/java/org/apache/rya/indexing/geoExamples/RyaMongoGeoDirectExample.java
+++ b/extras/rya.geoindexing/geo.mongo/src/main/java/org/apache/rya/indexing/geoExamples/RyaMongoGeoDirectExample.java
@@ -30,18 +30,14 @@ import org.apache.rya.indexing.accumulo.geo.OptionalConfigUtils;
import org.apache.rya.indexing.mongodb.MongoIndexingConfiguration;
import org.apache.rya.indexing.mongodb.MongoIndexingConfiguration.MongoDBIndexingConfigBuilder;
import org.apache.rya.mongodb.EmbeddedMongoFactory;
-import org.apache.rya.mongodb.MongoConnectorFactory;
import org.openrdf.model.vocabulary.RDFS;
import org.openrdf.query.BindingSet;
-import org.openrdf.query.MalformedQueryException;
-import org.openrdf.query.QueryEvaluationException;
import org.openrdf.query.QueryLanguage;
import org.openrdf.query.QueryResultHandlerException;
import org.openrdf.query.TupleQuery;
import org.openrdf.query.TupleQueryResultHandler;
import org.openrdf.query.TupleQueryResultHandlerException;
import org.openrdf.query.Update;
-import org.openrdf.query.UpdateExecutionException;
import org.openrdf.repository.RepositoryException;
import org.openrdf.repository.sail.SailRepository;
import org.openrdf.repository.sail.SailRepositoryConnection;
@@ -90,7 +86,6 @@ public class RyaMongoGeoDirectExample {
if (mock != null) {
mock.shutdown();
}
- MongoConnectorFactory.closeMongoClient();
}
}
/**
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/17cebae3/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 2561c23..62a2181 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
@@ -18,6 +18,7 @@
*/
package org.apache.rya.indexing.geotemporal.mongo;
+import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkState;
import static java.util.Objects.requireNonNull;
@@ -43,8 +44,7 @@ import org.apache.rya.indexing.geotemporal.storage.EventStorage;
import org.apache.rya.indexing.mongodb.AbstractMongoIndexer;
import org.apache.rya.indexing.mongodb.IndexingException;
import org.apache.rya.indexing.mongodb.geo.GmlParser;
-import org.apache.rya.mongodb.MongoConnectorFactory;
-import org.apache.rya.mongodb.MongoDBRdfConfiguration;
+import org.apache.rya.mongodb.StatefulMongoDBRdfConfiguration;
import org.joda.time.DateTime;
import org.openrdf.model.Statement;
import org.openrdf.model.URI;
@@ -77,12 +77,13 @@ public class MongoGeoTemporalIndexer extends AbstractMongoIndexer<GeoTemporalMon
private static final Logger LOG = Logger.getLogger(MongoGeoTemporalIndexer.class);
public static final String GEO_TEMPORAL_COLLECTION = "geo_temporal";
- private final AtomicReference<MongoDBRdfConfiguration> configuration = new AtomicReference<>();
private final AtomicReference<EventStorage> events = new AtomicReference<>();
@Override
public void init() {
initCore();
+ events.set(getEventStorage());
+
predicates = ConfigUtils.getGeoPredicates(conf);
predicates.addAll(ConfigUtils.getTemporalPredicates(conf));
storageStrategy = new GeoTemporalMongoDBStorageStrategy();
@@ -91,10 +92,10 @@ public class MongoGeoTemporalIndexer extends AbstractMongoIndexer<GeoTemporalMon
@Override
public void setConf(final Configuration conf) {
requireNonNull(conf);
- events.set(null);
- events.set(getEventStorage(conf));
- super.conf = conf;
- configuration.set(new MongoDBRdfConfiguration(conf));
+ checkArgument(conf instanceof StatefulMongoDBRdfConfiguration,
+ "The configuration must be of type StatefulMongoDBRdfConfiguration but you provided: "
+ + conf.getClass().getSimpleName());
+ super.conf = (StatefulMongoDBRdfConfiguration) conf;
}
@Override
@@ -206,22 +207,14 @@ public class MongoGeoTemporalIndexer extends AbstractMongoIndexer<GeoTemporalMon
}
@Override
- public EventStorage getEventStorage(final Configuration conf) {
+ public EventStorage getEventStorage() {
requireNonNull(conf);
if(events.get() != null) {
return events.get();
}
-
- final MongoDBRdfConfiguration mongoConf = new MongoDBRdfConfiguration(conf);
- mongoClient = mongoConf.getMongoClient();
- configuration.set(mongoConf);
- if (mongoClient == null) {
- mongoClient = MongoConnectorFactory.getMongoClient(conf);
- }
- final String ryaInstanceName = mongoConf.getMongoDBName();
- events.set(new MongoEventStorage(mongoClient, ryaInstanceName));
+ events.set(new MongoEventStorage(conf.getMongoClient(), conf.getRyaInstance()));
return events.get();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/17cebae3/extras/rya.geoindexing/geo.mongo/src/test/java/org/apache/rya/indexing/geotemporal/GeoTemporalProviderTest.java
----------------------------------------------------------------------
diff --git a/extras/rya.geoindexing/geo.mongo/src/test/java/org/apache/rya/indexing/geotemporal/GeoTemporalProviderTest.java b/extras/rya.geoindexing/geo.mongo/src/test/java/org/apache/rya/indexing/geotemporal/GeoTemporalProviderTest.java
index 7151b56..fa2f52b 100644
--- a/extras/rya.geoindexing/geo.mongo/src/test/java/org/apache/rya/indexing/geotemporal/GeoTemporalProviderTest.java
+++ b/extras/rya.geoindexing/geo.mongo/src/test/java/org/apache/rya/indexing/geotemporal/GeoTemporalProviderTest.java
@@ -36,7 +36,7 @@ import org.openrdf.model.Value;
import org.openrdf.model.ValueFactory;
import org.openrdf.model.impl.ValueFactoryImpl;
-public class GeoTemporalProviderTest extends GeoTemporalTestBase {
+public class GeoTemporalProviderTest extends GeoTemporalTestUtils {
private static final String URI_PROPERTY_AT_TIME = "Property:atTime";
private GeoTemporalIndexSetProvider provider;
private EventStorage events;
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/17cebae3/extras/rya.geoindexing/geo.mongo/src/test/java/org/apache/rya/indexing/geotemporal/GeoTemporalTestBase.java
----------------------------------------------------------------------
diff --git a/extras/rya.geoindexing/geo.mongo/src/test/java/org/apache/rya/indexing/geotemporal/GeoTemporalTestBase.java b/extras/rya.geoindexing/geo.mongo/src/test/java/org/apache/rya/indexing/geotemporal/GeoTemporalTestBase.java
deleted file mode 100644
index 6b6bf15..0000000
--- a/extras/rya.geoindexing/geo.mongo/src/test/java/org/apache/rya/indexing/geotemporal/GeoTemporalTestBase.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * 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.indexing.geotemporal;
-
-import static org.junit.Assert.assertEquals;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.rya.indexing.TemporalInstant;
-import org.apache.rya.indexing.TemporalInstantRfc3339;
-import org.apache.rya.indexing.external.matching.QuerySegment;
-import org.apache.rya.indexing.geotemporal.model.EventQueryNode;
-import org.junit.ComparisonFailure;
-import org.mockito.Mockito;
-import org.openrdf.query.algebra.FunctionCall;
-import org.openrdf.query.algebra.QueryModelNode;
-import org.openrdf.query.algebra.StatementPattern;
-import org.openrdf.query.algebra.helpers.QueryModelVisitorBase;
-import org.openrdf.query.algebra.helpers.StatementPatternCollector;
-import org.openrdf.query.parser.sparql.SPARQLParser;
-
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.LineString;
-import com.vividsolutions.jts.geom.LinearRing;
-import com.vividsolutions.jts.geom.Point;
-import com.vividsolutions.jts.geom.Polygon;
-import com.vividsolutions.jts.geom.PrecisionModel;
-import com.vividsolutions.jts.geom.impl.PackedCoordinateSequence;
-
-public class GeoTemporalTestBase {
- private static final GeometryFactory gf = new GeometryFactory(new PrecisionModel(), 4326);
-
- /**
- * Make an uniform instant with given seconds.
- */
- protected static TemporalInstant makeInstant(final int secondsMakeMeUnique) {
- return new TemporalInstantRfc3339(2015, 12, 30, 12, 00, secondsMakeMeUnique);
- }
-
- protected static Polygon poly(final double[] arr) {
- final LinearRing r1 = gf.createLinearRing(new PackedCoordinateSequence.Double(arr, 2));
- final Polygon p1 = gf.createPolygon(r1, new LinearRing[] {});
- return p1;
- }
-
- protected static Point point(final double x, final double y) {
- return gf.createPoint(new Coordinate(x, y));
- }
-
- protected static LineString line(final double x1, final double y1, final double x2, final double y2) {
- return new LineString(new PackedCoordinateSequence.Double(new double[] { x1, y1, x2, y2 }, 2), gf);
- }
-
- protected static double[] bbox(final double x1, final double y1, final double x2, final double y2) {
- return new double[] { x1, y1, x1, y2, x2, y2, x2, y1, x1, y1 };
- }
-
- protected void assertEqualMongo(final Object expected, final Object actual) throws ComparisonFailure {
- try {
- assertEquals(expected, actual);
- } catch(final Throwable e) {
- throw new ComparisonFailure(e.getMessage(), expected.toString(), actual.toString());
- }
- }
-
- public List<FunctionCall> getFilters(final String query) throws Exception {
- final FunctionCallCollector collector = new FunctionCallCollector();
- new SPARQLParser().parseQuery(query, null).getTupleExpr().visit(collector);
- return collector.getTupleExpr();
- }
-
- public List<StatementPattern> getSps(final String query) throws Exception {
- final StatementPatternCollector collector = new StatementPatternCollector();
- new SPARQLParser().parseQuery(query, null).getTupleExpr().visit(collector);
- return collector.getStatementPatterns();
- }
-
- public QuerySegment<EventQueryNode> getQueryNode(final String query) throws Exception {
- final List<QueryModelNode> exprs = getNodes(query);
- final QuerySegment<EventQueryNode> node = Mockito.mock(QuerySegment.class);
- //provider only cares about Ordered nodes.
- Mockito.when(node.getOrderedNodes()).thenReturn(exprs);
- return node;
- }
-
- private static List<QueryModelNode> getNodes(final String sparql) throws Exception {
- final NodeCollector collector = new NodeCollector();
- new SPARQLParser().parseQuery(sparql, null).getTupleExpr().visit(collector);
- return collector.getTupleExpr();
- }
-
- private static class NodeCollector extends QueryModelVisitorBase<RuntimeException> {
- private final List<QueryModelNode> stPatterns = new ArrayList<>();
-
- public List<QueryModelNode> getTupleExpr() {
- return stPatterns;
- }
-
- @Override
- public void meet(final FunctionCall node) {
- stPatterns.add(node);
- }
-
- @Override
- public void meet(final StatementPattern node) {
- stPatterns.add(node);
- }
- }
-
- private static class FunctionCallCollector extends QueryModelVisitorBase<RuntimeException> {
- private final List<FunctionCall> filters = new ArrayList<>();
-
- public List<FunctionCall> getTupleExpr() {
- return filters;
- }
-
- @Override
- public void meet(final FunctionCall node) {
- filters.add(node);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/17cebae3/extras/rya.geoindexing/geo.mongo/src/test/java/org/apache/rya/indexing/geotemporal/GeoTemporalTestUtils.java
----------------------------------------------------------------------
diff --git a/extras/rya.geoindexing/geo.mongo/src/test/java/org/apache/rya/indexing/geotemporal/GeoTemporalTestUtils.java b/extras/rya.geoindexing/geo.mongo/src/test/java/org/apache/rya/indexing/geotemporal/GeoTemporalTestUtils.java
new file mode 100644
index 0000000..23399c8
--- /dev/null
+++ b/extras/rya.geoindexing/geo.mongo/src/test/java/org/apache/rya/indexing/geotemporal/GeoTemporalTestUtils.java
@@ -0,0 +1,140 @@
+/*
+ * 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.indexing.geotemporal;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.rya.indexing.TemporalInstant;
+import org.apache.rya.indexing.TemporalInstantRfc3339;
+import org.apache.rya.indexing.external.matching.QuerySegment;
+import org.apache.rya.indexing.geotemporal.model.EventQueryNode;
+import org.junit.ComparisonFailure;
+import org.mockito.Mockito;
+import org.openrdf.query.algebra.FunctionCall;
+import org.openrdf.query.algebra.QueryModelNode;
+import org.openrdf.query.algebra.StatementPattern;
+import org.openrdf.query.algebra.helpers.QueryModelVisitorBase;
+import org.openrdf.query.algebra.helpers.StatementPatternCollector;
+import org.openrdf.query.parser.sparql.SPARQLParser;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.LineString;
+import com.vividsolutions.jts.geom.LinearRing;
+import com.vividsolutions.jts.geom.Point;
+import com.vividsolutions.jts.geom.Polygon;
+import com.vividsolutions.jts.geom.PrecisionModel;
+import com.vividsolutions.jts.geom.impl.PackedCoordinateSequence;
+
+public class GeoTemporalTestUtils {
+ private static final GeometryFactory gf = new GeometryFactory(new PrecisionModel(), 4326);
+
+ /**
+ * Make an uniform instant with given seconds.
+ */
+ public static TemporalInstant makeInstant(final int secondsMakeMeUnique) {
+ return new TemporalInstantRfc3339(2015, 12, 30, 12, 00, secondsMakeMeUnique);
+ }
+
+ public static Polygon poly(final double[] arr) {
+ final LinearRing r1 = gf.createLinearRing(new PackedCoordinateSequence.Double(arr, 2));
+ final Polygon p1 = gf.createPolygon(r1, new LinearRing[] {});
+ return p1;
+ }
+
+ public static Point point(final double x, final double y) {
+ return gf.createPoint(new Coordinate(x, y));
+ }
+
+ public static LineString line(final double x1, final double y1, final double x2, final double y2) {
+ return new LineString(new PackedCoordinateSequence.Double(new double[] { x1, y1, x2, y2 }, 2), gf);
+ }
+
+ public static double[] bbox(final double x1, final double y1, final double x2, final double y2) {
+ return new double[] { x1, y1, x1, y2, x2, y2, x2, y1, x1, y1 };
+ }
+
+ public static void assertEqualMongo(final Object expected, final Object actual) throws ComparisonFailure {
+ try {
+ assertEquals(expected, actual);
+ } catch(final Throwable e) {
+ throw new ComparisonFailure(e.getMessage(), expected.toString(), actual.toString());
+ }
+ }
+
+ public static List<FunctionCall> getFilters(final String query) throws Exception {
+ final FunctionCallCollector collector = new FunctionCallCollector();
+ new SPARQLParser().parseQuery(query, null).getTupleExpr().visit(collector);
+ return collector.getTupleExpr();
+ }
+
+ public static List<StatementPattern> getSps(final String query) throws Exception {
+ final StatementPatternCollector collector = new StatementPatternCollector();
+ new SPARQLParser().parseQuery(query, null).getTupleExpr().visit(collector);
+ return collector.getStatementPatterns();
+ }
+
+ public static QuerySegment<EventQueryNode> getQueryNode(final String query) throws Exception {
+ final List<QueryModelNode> exprs = getNodes(query);
+ final QuerySegment<EventQueryNode> node = Mockito.mock(QuerySegment.class);
+ //provider only cares about Ordered nodes.
+ Mockito.when(node.getOrderedNodes()).thenReturn(exprs);
+ return node;
+ }
+
+ private static List<QueryModelNode> getNodes(final String sparql) throws Exception {
+ final NodeCollector collector = new NodeCollector();
+ new SPARQLParser().parseQuery(sparql, null).getTupleExpr().visit(collector);
+ return collector.getTupleExpr();
+ }
+
+ private static class NodeCollector extends QueryModelVisitorBase<RuntimeException> {
+ private final List<QueryModelNode> stPatterns = new ArrayList<>();
+
+ public List<QueryModelNode> getTupleExpr() {
+ return stPatterns;
+ }
+
+ @Override
+ public void meet(final FunctionCall node) {
+ stPatterns.add(node);
+ }
+
+ @Override
+ public void meet(final StatementPattern node) {
+ stPatterns.add(node);
+ }
+ }
+
+ private static class FunctionCallCollector extends QueryModelVisitorBase<RuntimeException> {
+ private final List<FunctionCall> filters = new ArrayList<>();
+
+ public List<FunctionCall> getTupleExpr() {
+ return filters;
+ }
+
+ @Override
+ public void meet(final FunctionCall node) {
+ filters.add(node);
+ }
+ }
+}