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:24 UTC
[02/17] incubator-rya git commit: RYA-414 Introduced the stateful
mongo configuratino object so that it is the arbitor of MongoDB state within
a Sail object.
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/extras/indexing/src/main/java/org/apache/rya/sail/config/RyaSailFactory.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/main/java/org/apache/rya/sail/config/RyaSailFactory.java b/extras/indexing/src/main/java/org/apache/rya/sail/config/RyaSailFactory.java
index e156f86..1ec8543 100644
--- a/extras/indexing/src/main/java/org/apache/rya/sail/config/RyaSailFactory.java
+++ b/extras/indexing/src/main/java/org/apache/rya/sail/config/RyaSailFactory.java
@@ -1,4 +1,4 @@
-/*
+/**
* 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
@@ -20,12 +20,14 @@ package org.apache.rya.sail.config;
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.commons.configuration.ConfigurationRuntimeException;
import org.apache.hadoop.conf.Configuration;
import org.apache.rya.accumulo.AccumuloRdfConfiguration;
import org.apache.rya.accumulo.AccumuloRyaDAO;
@@ -37,9 +39,10 @@ import org.apache.rya.api.layout.TablePrefixLayoutStrategy;
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.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;
@@ -50,6 +53,9 @@ 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 RyaSailFactory {
private static final Logger LOG = LoggerFactory.getLogger(RyaSailFactory.class);
@@ -79,16 +85,38 @@ public class RyaSailFactory {
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.
+ ConfigUtils.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);
+ // TODO Optimizers the same way. They're getting the wrong configuration somehow.
+
+ // 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);
@@ -115,20 +143,39 @@ public class RyaSailFactory {
return store;
}
- private static MongoDBRyaDAO getMongoDAO(final MongoDBRdfConfiguration config, final MongoClient client) throws RyaDAOException {
- MongoDBRyaDAO dao = null;
- ConfigUtils.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;
}
/**
@@ -137,7 +184,7 @@ public class RyaSailFactory {
* tables might be created when using this method. This method does not require the {@link AccumuloRyaInstanceDetailsRepository}
* to exist. This is for internal use, backwards compatibility and testing purposes only. It is recommended that
* {@link RyaSailFactory#getAccumuloDAOWithUpdatedConfig(AccumuloRdfConfiguration)} be used for new installations of Rya.
- *
+ *
* @param config - user configuration
* @return - AccumuloRyaDAO with Indexers configured according to user's specification
* @throws AccumuloException
@@ -155,14 +202,14 @@ public class RyaSailFactory {
dao.init();
return dao;
}
-
+
/**
* Creates an AccumuloRyaDAO after updating the AccumuloRdfConfiguration so that it is consistent
* with the configuration of the RyaInstance that the user is trying to connect to. This ensures
- * that user configuration aligns with Rya instance configuration and prevents the creation of
+ * that user configuration aligns with Rya instance configuration and prevents the creation of
* new index tables based on a user's query configuration. This method requires the {@link AccumuloRyaInstanceDetailsRepository}
* to exist.
- *
+ *
* @param config - user's query configuration
* @return - AccumuloRyaDAO with an updated configuration that is consistent with the Rya instance configuration
* @throws AccumuloException
@@ -170,16 +217,16 @@ public class RyaSailFactory {
* @throws RyaDAOException
*/
public static AccumuloRyaDAO getAccumuloDAOWithUpdatedConfig(final AccumuloRdfConfiguration config) throws AccumuloException, AccumuloSecurityException, RyaDAOException {
-
- String ryaInstance = config.get(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX);
+
+ final String ryaInstance = config.get(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX);
Objects.requireNonNull(ryaInstance, "RyaInstance or table prefix is missing from configuration."+RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX);
- String user = config.get(AccumuloRdfConfiguration.CLOUDBASE_USER);
- String pswd = config.get(AccumuloRdfConfiguration.CLOUDBASE_PASSWORD);
+ final String user = config.get(AccumuloRdfConfiguration.CLOUDBASE_USER);
+ final String pswd = config.get(AccumuloRdfConfiguration.CLOUDBASE_PASSWORD);
Objects.requireNonNull(user, "Accumulo user name is missing from configuration."+AccumuloRdfConfiguration.CLOUDBASE_USER);
Objects.requireNonNull(pswd, "Accumulo user password is missing from configuration."+AccumuloRdfConfiguration.CLOUDBASE_PASSWORD);
config.setTableLayoutStrategy( new TablePrefixLayoutStrategy(ryaInstance) );
updateAccumuloConfig(config, user, pswd, ryaInstance);
-
+
return getAccumuloDAO(config);
}
@@ -192,4 +239,62 @@ public class RyaSailFactory {
LOG.info("Instance does not have a rya details collection, skipping.");
}
}
-}
\ No newline at end of file
+}
+
+
+
+///**
+//* TODO add docs. names for reflection
+//* @param indexers
+//*/
+//public void setMongoIndexers(final Class<? extends MongoSecondaryIndex>... indexers) {
+// final List<String> strs = Lists.newArrayList();
+// for (final Class<?> ai : indexers){
+// strs.add(ai.getName());
+// }
+//
+// setStrings(CONF_ADDITIONAL_INDEXERS, strs.toArray(new String[]{}));
+//}
+
+///**
+//* TODO add docs. explain hack is used here. do reflection. eww.
+//* @return
+//*/
+//public List<MongoSecondaryIndex> getAdditionalIndexers() {
+// stateLock.lock();
+// try {
+// if(indexers == null) {
+// indexers = getInstances(CONF_ADDITIONAL_INDEXERS, MongoSecondaryIndex.class);
+// }
+// return indexers;
+// } finally {
+// stateLock.unlock();
+// }
+//}
+
+//// XXX Not sure what all of this stuff is for. I'm guessing Rya Sail state stuff.
+//public void setAdditionalIndexers(final Class<? extends MongoSecondaryIndex>... indexers) {
+// final List<String> strs = Lists.newArrayList();
+// for (final Class<?> ai : indexers){
+// strs.add(ai.getName());
+// }
+//
+// setStrings(CONF_ADDITIONAL_INDEXERS, strs.toArray(new String[]{}));
+//}
+//
+
+//conf.setStrings(AccumuloRdfConfiguration.CONF_ADDITIONAL_INDEXERS, indexList.toArray(new String[] {}));
+//conf.setStrings(RdfCloudTripleStoreConfiguration.CONF_OPTIMIZERS, optimizers.toArray(new String[] {}));
+
+//public List<MongoSecondaryIndex> getAdditionalIndexers() {
+// return getInstances(CONF_ADDITIONAL_INDEXERS, MongoSecondaryIndex.class);
+//}
+
+//public void setMongoClient(final MongoClient client) {
+// requireNonNull(client);
+// this.mongoClient = client;
+//}
+//
+//public MongoClient getMongoClient() {
+// return mongoClient;
+//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexIT.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexIT.java b/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexIT.java
index 019760d..36e1445 100644
--- a/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexIT.java
+++ b/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexIT.java
@@ -32,10 +32,9 @@ import org.apache.rya.indexing.entity.model.Type;
import org.apache.rya.indexing.entity.storage.EntityStorage;
import org.apache.rya.indexing.entity.storage.TypeStorage;
import org.apache.rya.indexing.entity.update.mongo.MongoEntityIndexer;
+import org.apache.rya.mongodb.MongoDBRdfConfiguration;
import org.apache.rya.mongodb.MongoTestBase;
import org.apache.rya.sail.config.RyaSailFactory;
-import org.junit.After;
-import org.junit.Before;
import org.junit.Test;
import org.openrdf.model.URI;
import org.openrdf.model.Value;
@@ -54,100 +53,130 @@ import com.google.common.collect.ImmutableSet;
public class MongoEntityIndexIT extends MongoTestBase {
private static final ValueFactory VF = ValueFactoryImpl.getInstance();
- private SailRepositoryConnection conn;
- private MongoEntityIndexer indexer;
- @Before
- public void setUp() throws Exception {
+ @Override
+ protected void updateConfiguration(final MongoDBRdfConfiguration conf) {
conf.setBoolean(ConfigUtils.USE_MONGO, true);
conf.setBoolean(ConfigUtils.USE_ENTITY, true);
-
- final Sail sail = RyaSailFactory.getInstance(conf);
- conn = new SailRepository(sail).getConnection();
- conn.begin();
-
- indexer = new MongoEntityIndexer();
- indexer.setConf(conf);
- indexer.init();
}
- @After
- public void tearDown() throws Exception {
- if (conn != null) {
- conn.clear();
- }
- if (indexer != null) {
- indexer.close();
- }
- }
+// private SailRepositoryConnection conn;
+// private MongoEntityIndexer indexer;
+
+// @Before
+// public void setUp() throws Exception {
+// conf.setBoolean(ConfigUtils.USE_MONGO, true);
+// conf.setBoolean(ConfigUtils.USE_ENTITY, true);
+//
+// final Sail sail = RyaSailFactory.getInstance(conf);
+// conn = new SailRepository(sail).getConnection();
+// conn.begin();
+//
+// indexer = new MongoEntityIndexer();
+// indexer.setConf(conf);
+// indexer.init();
+// }
+//
+// @After
+// public void tearDown() throws Exception {
+// if (conn != null) {
+// conn.clear();
+// }
+// if (indexer != null) {
+// indexer.close();
+// }
+// }
@Test
public void ensureInEntityStore_Test() throws Exception {
- setupTypes();
- addStatements();
+ final Sail sail = RyaSailFactory.getInstance(conf);
+ SailRepositoryConnection conn = new SailRepository(sail).getConnection();
+ conn.begin();
- final EntityStorage entities = indexer.getEntityStorage(conf);
- final RyaURI subject = new RyaURI("urn:alice");
- final Optional<Entity> alice = entities.get(subject);
- assertTrue(alice.isPresent());
+ try(MongoEntityIndexer indexer = new MongoEntityIndexer()) {
+ setupTypes(indexer);
+ addStatements(conn);
+
+ final EntityStorage entities = indexer.getEntityStorage(conf);
+ final RyaURI subject = new RyaURI("urn:alice");
+ final Optional<Entity> alice = entities.get(subject);
+ assertTrue(alice.isPresent());
+ } finally {
+ conn.close();
+ }
}
@Test
public void sparqlQuery_Test() throws Exception {
- setupTypes();
- addStatements();
- //conn.commit();
-
- final String query = "SELECT * WHERE { " +
- "<urn:strawberry> <" + RDF.TYPE + "> <urn:icecream> ."+
- "<urn:strawberry> <urn:brand> ?brand . " +
- "<urn:strawberry> <urn:flavor> ?flavor . " +
- "}";
-
- 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("flavor", ValueFactoryImpl.getInstance().createLiteral("Strawberry"));
- expected.addBinding("brand", ValueFactoryImpl.getInstance().createLiteral("Awesome Icecream"));
+ final Sail sail = RyaSailFactory.getInstance(conf);
+ SailRepositoryConnection conn = new SailRepository(sail).getConnection();
+ conn.begin();
- assertEquals(1, results.size());
- assertEquals(expected, results.iterator().next());
+ try(MongoEntityIndexer indexer = new MongoEntityIndexer()) {
+ setupTypes(indexer);
+ addStatements(conn);
+
+ final String query = "SELECT * WHERE { " +
+ "<urn:strawberry> <" + RDF.TYPE + "> <urn:icecream> ."+
+ "<urn:strawberry> <urn:brand> ?brand . " +
+ "<urn:strawberry> <urn:flavor> ?flavor . " +
+ "}";
+
+ 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("flavor", ValueFactoryImpl.getInstance().createLiteral("Strawberry"));
+ expected.addBinding("brand", ValueFactoryImpl.getInstance().createLiteral("Awesome Icecream"));
+
+ assertEquals(1, results.size());
+ assertEquals(expected, results.iterator().next());
+ } finally {
+ conn.close();
+ }
}
@Test
public void partialQuery_Test() throws Exception {
- setupTypes();
- addStatements();
- conn.commit();
-
- final String query = "SELECT * WHERE { " +
- "<urn:george> <" + RDF.TYPE + "> <urn:person> ."+
- "<urn:george> <urn:name> ?name . " +
- "<urn:george> <urn:eye> ?eye . " +
- "}";
-
- final TupleQueryResult rez = conn.prepareTupleQuery(QueryLanguage.SPARQL, query).evaluate();
- final Set<BindingSet> results = new HashSet<>();
- while(rez.hasNext()) {
- final BindingSet bs = rez.next();
- System.out.println(bs);
- results.add(bs);
+ final Sail sail = RyaSailFactory.getInstance(conf);
+ SailRepositoryConnection conn = new SailRepository(sail).getConnection();
+ conn.begin();
+
+ try(MongoEntityIndexer indexer = new MongoEntityIndexer()) {
+ setupTypes(indexer);
+ addStatements(conn);
+ conn.commit();
+
+ final String query = "SELECT * WHERE { " +
+ "<urn:george> <" + RDF.TYPE + "> <urn:person> ."+
+ "<urn:george> <urn:name> ?name . " +
+ "<urn:george> <urn:eye> ?eye . " +
+ "}";
+
+ final TupleQueryResult rez = conn.prepareTupleQuery(QueryLanguage.SPARQL, query).evaluate();
+ final Set<BindingSet> results = new HashSet<>();
+ while(rez.hasNext()) {
+ final BindingSet bs = rez.next();
+ System.out.println(bs);
+ results.add(bs);
+ }
+ final ValueFactory vf = ValueFactoryImpl.getInstance();
+ final MapBindingSet expected = new MapBindingSet();
+ //expected.addBinding("name", vf.createURI("http://www.w3.org/2001/SMLSchema#string", "George"));
+ expected.addBinding("name", vf.createLiteral("George"));
+ expected.addBinding("eye", vf.createLiteral("blue"));
+
+ assertEquals(1, results.size());
+ assertEquals(expected, results.iterator().next());
+ } finally {
+ conn.close();
}
- final ValueFactory vf = ValueFactoryImpl.getInstance();
- final MapBindingSet expected = new MapBindingSet();
- //expected.addBinding("name", vf.createURI("http://www.w3.org/2001/SMLSchema#string", "George"));
- expected.addBinding("name", vf.createLiteral("George"));
- expected.addBinding("eye", vf.createLiteral("blue"));
-
- assertEquals(1, results.size());
- assertEquals(expected, results.iterator().next());
}
- private void setupTypes() throws Exception {
+ private void setupTypes(MongoEntityIndexer indexer) throws Exception {
final TypeStorage typeStore = indexer.getTypeStorage(conf);
// Add some Types to the storage.
final Type cat = new Type(new RyaURI("urn:cat"),
@@ -184,7 +213,7 @@ public class MongoEntityIndexIT extends MongoTestBase {
typeStore.create(person);
}
- private void addStatements() throws Exception {
+ private void addStatements(SailRepositoryConnection conn) throws Exception {
//alice
URI subject = VF.createURI("urn:alice");
URI predicate = VF.createURI("urn:name");
@@ -304,4 +333,4 @@ public class MongoEntityIndexIT extends MongoTestBase {
conn.add(VF.createStatement(subject, predicate, object));
conn.add(VF.createStatement(subject, RDF.TYPE, VF.createURI("urn:icecream")));
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoFreeTextIndexerTest.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoFreeTextIndexerTest.java b/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoFreeTextIndexerTest.java
index f111fd1..71840ea 100644
--- a/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoFreeTextIndexerTest.java
+++ b/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoFreeTextIndexerTest.java
@@ -1,5 +1,4 @@
-package org.apache.rya.indexing.mongo;
-/*
+/**
* 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
@@ -17,6 +16,10 @@ package org.apache.rya.indexing.mongo;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.rya.indexing.mongo;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import java.util.HashSet;
import java.util.Set;
@@ -30,7 +33,6 @@ import org.apache.rya.indexing.StatementConstraints;
import org.apache.rya.indexing.accumulo.ConfigUtils;
import org.apache.rya.indexing.mongodb.freetext.MongoFreeTextIndexer;
import org.apache.rya.mongodb.MongoTestBase;
-import org.junit.Assert;
import org.junit.Test;
import org.openrdf.model.Statement;
import org.openrdf.model.URI;
@@ -44,13 +46,17 @@ import com.google.common.collect.Sets;
import info.aduna.iteration.CloseableIteration;
+/**
+ * Integration tests the methods of {@link MongoFreeTextIndexer}.
+ */
public class MongoFreeTextIndexerTest extends MongoTestBase {
private static final StatementConstraints EMPTY_CONSTRAINTS = new StatementConstraints();
@Test
public void testSearch() throws Exception {
try (MongoFreeTextIndexer f = new MongoFreeTextIndexer()) {
- f.initIndexer(conf, super.getMongoClient());
+ f.setConf(conf);
+ f.init();
final ValueFactory vf = new ValueFactoryImpl();
@@ -64,17 +70,18 @@ public class MongoFreeTextIndexerTest extends MongoTestBase {
f.storeStatement(RdfToRyaConversions.convertStatement(statement));
f.flush();
- Assert.assertEquals(Sets.newHashSet(), getSet(f.queryText("asdf", EMPTY_CONSTRAINTS)));
+ assertEquals(Sets.newHashSet(), getSet(f.queryText("asdf", EMPTY_CONSTRAINTS)));
- Assert.assertEquals(Sets.newHashSet(statement), getSet(f.queryText("new", EMPTY_CONSTRAINTS)));
- Assert.assertEquals(Sets.newHashSet(statement), getSet(f.queryText("hat new", EMPTY_CONSTRAINTS)));
+ assertEquals(Sets.newHashSet(statement), getSet(f.queryText("new", EMPTY_CONSTRAINTS)));
+ assertEquals(Sets.newHashSet(statement), getSet(f.queryText("hat new", EMPTY_CONSTRAINTS)));
}
}
@Test
public void testDelete() throws Exception {
try (MongoFreeTextIndexer f = new MongoFreeTextIndexer()) {
- f.initIndexer(conf, super.getMongoClient());
+ f.setConf(conf);
+ f.init();
final ValueFactory vf = new ValueFactoryImpl();
@@ -100,15 +107,15 @@ public class MongoFreeTextIndexerTest extends MongoTestBase {
f.deleteStatement(RdfToRyaConversions.convertStatement(statement1));
- Assert.assertEquals(Sets.newHashSet(statement2), getSet(f.queryText("Do you like my new hat?", EMPTY_CONSTRAINTS)));
+ assertEquals(Sets.newHashSet(statement2), getSet(f.queryText("Do you like my new hat?", EMPTY_CONSTRAINTS)));
// Check that "new" didn't get deleted from the term table after "this is a new hat"
// was deleted since "new" is still in "Do you like my new hat?"
- Assert.assertEquals(Sets.newHashSet(statement2), getSet(f.queryText("new", EMPTY_CONSTRAINTS)));
+ assertEquals(Sets.newHashSet(statement2), getSet(f.queryText("new", EMPTY_CONSTRAINTS)));
f.deleteStatement(RdfToRyaConversions.convertStatement(statement2));
- Assert.assertEquals(Sets.newHashSet(), getSet(f.queryText("this is a new hat", EMPTY_CONSTRAINTS)));
- Assert.assertEquals(Sets.newHashSet(), getSet(f.queryText("Do you like my new hat?", EMPTY_CONSTRAINTS)));
+ assertEquals(Sets.newHashSet(), getSet(f.queryText("this is a new hat", EMPTY_CONSTRAINTS)));
+ assertEquals(Sets.newHashSet(), getSet(f.queryText("Do you like my new hat?", EMPTY_CONSTRAINTS)));
}
}
@@ -117,7 +124,8 @@ public class MongoFreeTextIndexerTest extends MongoTestBase {
conf.setStrings(ConfigUtils.FREETEXT_PREDICATES_LIST, "pred:1,pred:2");
try (MongoFreeTextIndexer f = new MongoFreeTextIndexer()) {
- f.initIndexer(conf, super.getMongoClient());
+ f.setConf(conf);
+ f.init();
// These should not be stored because they are not in the predicate list
f.storeStatement(new RyaStatement(new RyaURI("foo:subj1"), new RyaURI(RDFS.LABEL.toString()), new RyaType("invalid")));
@@ -137,20 +145,21 @@ public class MongoFreeTextIndexerTest extends MongoTestBase {
f.flush();
- Assert.assertEquals(Sets.newHashSet(), getSet(f.queryText("invalid", EMPTY_CONSTRAINTS)));
- Assert.assertEquals(Sets.newHashSet(), getSet(f.queryText("in:validURI", EMPTY_CONSTRAINTS)));
+ assertEquals(Sets.newHashSet(), getSet(f.queryText("invalid", EMPTY_CONSTRAINTS)));
+ assertEquals(Sets.newHashSet(), getSet(f.queryText("in:validURI", EMPTY_CONSTRAINTS)));
final Set<Statement> actual = getSet(f.queryText("valid", EMPTY_CONSTRAINTS));
- Assert.assertEquals(2, actual.size());
- Assert.assertTrue(actual.contains(RyaToRdfConversions.convertStatement(s3)));
- Assert.assertTrue(actual.contains(RyaToRdfConversions.convertStatement(s4)));
+ assertEquals(2, actual.size());
+ assertTrue(actual.contains(RyaToRdfConversions.convertStatement(s3)));
+ assertTrue(actual.contains(RyaToRdfConversions.convertStatement(s4)));
}
}
@Test
public void testContextSearch() throws Exception {
try (MongoFreeTextIndexer f = new MongoFreeTextIndexer()) {
- f.initIndexer(conf, super.getMongoClient());
+ f.setConf(conf);
+ f.init();
final ValueFactory vf = new ValueFactoryImpl();
final URI subject = new URIImpl("foo:subj");
@@ -162,19 +171,18 @@ public class MongoFreeTextIndexerTest extends MongoTestBase {
f.storeStatement(RdfToRyaConversions.convertStatement(statement));
f.flush();
- Assert.assertEquals(Sets.newHashSet(statement), getSet(f.queryText("hat", EMPTY_CONSTRAINTS)));
- Assert.assertEquals(Sets.newHashSet(statement), getSet(f.queryText("hat", new StatementConstraints().setContext(context))));
- Assert.assertEquals(Sets.newHashSet(),
+ assertEquals(Sets.newHashSet(statement), getSet(f.queryText("hat", EMPTY_CONSTRAINTS)));
+ assertEquals(Sets.newHashSet(statement), getSet(f.queryText("hat", new StatementConstraints().setContext(context))));
+ assertEquals(Sets.newHashSet(),
getSet(f.queryText("hat", new StatementConstraints().setContext(vf.createURI("foo:context2")))));
}
}
-
private static <X> Set<X> getSet(final CloseableIteration<X, ?> iter) throws Exception {
- final Set<X> set = new HashSet<X>();
+ final Set<X> set = new HashSet<>();
while (iter.hasNext()) {
set.add(iter.next());
}
return set;
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoIndexingConfigurationTest.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoIndexingConfigurationTest.java b/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoIndexingConfigurationTest.java
index cbd18b2..1f083f2 100644
--- a/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoIndexingConfigurationTest.java
+++ b/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoIndexingConfigurationTest.java
@@ -68,11 +68,11 @@ public class MongoIndexingConfigurationTest {
assertEquals(conf.getCv(), visibility);
assertEquals(conf.isInfer(), useInference);
assertEquals(conf.isDisplayQueryPlan(), displayPlan);
- assertEquals(conf.getMongoInstance(), "host");
+ assertEquals(conf.getMongoHostname(), "host");
assertEquals(conf.getBoolean(".useMockInstance", false), useMock);
assertEquals(conf.getMongoPort(), "1000");
assertEquals(conf.getMongoDBName(), "dbname");
- assertEquals(conf.getCollectionName(), "prefix_");
+ assertEquals(conf.getRyaInstance(), "prefix_");
assertEquals(conf.get(MongoDBRdfConfiguration.MONGO_USER), user);
assertEquals(conf.get(MongoDBRdfConfiguration.MONGO_USER_PASSWORD), password);
assertTrue(
@@ -103,11 +103,11 @@ public class MongoIndexingConfigurationTest {
assertEquals(conf.getCv(), visibility);
assertEquals(conf.isInfer(), useInference);
assertEquals(conf.isDisplayQueryPlan(), displayPlan);
- assertEquals(conf.getMongoInstance(), "host");
+ assertEquals(conf.getMongoHostname(), "host");
assertEquals(conf.getBoolean(".useMockInstance", false), useMock);
assertEquals(conf.getMongoPort(), "1000");
assertEquals(conf.getMongoDBName(), "dbname");
- assertEquals(conf.getCollectionName(), "prefix_");
+ assertEquals(conf.getRyaInstance(), "prefix_");
assertEquals(conf.get(MongoDBRdfConfiguration.MONGO_USER), user);
assertEquals(conf.get(MongoDBRdfConfiguration.MONGO_USER_PASSWORD), password);
assertTrue(
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoTemporalIndexerTest.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoTemporalIndexerTest.java b/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoTemporalIndexerTest.java
index 215e64c..ec7d1ec 100644
--- a/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoTemporalIndexerTest.java
+++ b/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoTemporalIndexerTest.java
@@ -80,13 +80,13 @@ import info.aduna.iteration.CloseableIteration;
*
*/
public final class MongoTemporalIndexerTest extends MongoTestBase {
- private MongoTemporalIndexer tIndexer;
- private DBCollection collection;
+// private MongoTemporalIndexer tIndexer;
+// private DBCollection collection;
private static final String URI_PROPERTY_EVENT_TIME = "Property:event:time";
private static final String URI_PROPERTY_CIRCA = "Property:circa";
private static final String URI_PROPERTY_AT_TIME = "Property:atTime";
- private static final String STAT_VALUEHASH = "valuehash";
+// private static final String STAT_VALUEHASH = "valuehash";
private static final StatementConstraints EMPTY_CONSTRAINTS = new StatementConstraints();
// Assign this in setUpBeforeClass, store them in each test.
@@ -164,85 +164,110 @@ public final class MongoTemporalIndexerTest extends MongoTestBase {
@Before
public void before() throws Exception {
+// // This is from http://linkedevents.org/ontology
+// // and http://motools.sourceforge.net/event/event.html
+// conf.setStrings(ConfigUtils.TEMPORAL_PREDICATES_LIST, ""
+// + URI_PROPERTY_AT_TIME + ","
+// + URI_PROPERTY_CIRCA + ","
+// + URI_PROPERTY_EVENT_TIME);
+
+// tIndexer
+// tIndexer.setConf(conf);
+// tIndexer.init();
+//// tIndexer.initIndexer(conf, super.getMongoClient());
+
+// final String dbName = conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME);
+// final DB db = super.getMongoClient().getDB(dbName);
+// collection = db.getCollection(conf.get(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya") + tIndexer.getCollectionName());
+ }
+
+ @Override
+ protected void updateConfiguration(final MongoDBRdfConfiguration conf) {
// This is from http://linkedevents.org/ontology
// and http://motools.sourceforge.net/event/event.html
conf.setStrings(ConfigUtils.TEMPORAL_PREDICATES_LIST, ""
+ URI_PROPERTY_AT_TIME + ","
+ URI_PROPERTY_CIRCA + ","
+ URI_PROPERTY_EVENT_TIME);
-
- tIndexer = new MongoTemporalIndexer();
- tIndexer.initIndexer(conf, super.getMongoClient());
-
- final String dbName = conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME);
- final DB db = super.getMongoClient().getDB(dbName);
- collection = db.getCollection(conf.get(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya") + tIndexer.getCollectionName());
- }
+ }
/**
* Test method for {@link MongoTemporalIndexer#storeStatement(convertStatement(org.openrdf.model.Statement)}
*/
@Test
public void testStoreStatement() throws IOException {
- final ValueFactory vf = new ValueFactoryImpl();
+ try(MongoTemporalIndexer tIndexer = new MongoTemporalIndexer()) {
+ tIndexer.setConf(conf);
+ tIndexer.init();
- final URI pred1_atTime = vf.createURI(URI_PROPERTY_AT_TIME);
- final URI pred2_circa = vf.createURI(URI_PROPERTY_CIRCA);
-
- // Should not be stored because they are not in the predicate list
- final String validDateStringWithThirteens = "1313-12-13T13:13:13Z";
- tIndexer.storeStatement(convertStatement(new StatementImpl(vf.createURI("foo:subj1"), RDFS.LABEL, vf.createLiteral(validDateStringWithThirteens))));
-
- final String invalidDateString = "ThisIsAnInvalidDate";
- tIndexer.storeStatement(convertStatement(new StatementImpl(vf.createURI("foo:subj2"), pred1_atTime, vf.createLiteral(invalidDateString))));
-
- // These are different datetimes instant but from different time zones.
- // This is an arbitrary zone, BRST=Brazil, better if not local.
- // same as "2015-01-01T01:59:59Z"
- final String testDate2014InBRST = "2014-12-31T23:59:59-02:00";
- // next year, same as "2017-01-01T01:59:59Z"
- final String testDate2016InET = "2016-12-31T20:59:59-05:00";
-
- // These should be stored because they are in the predicate list.
- // BUT they will get converted to the same exact datetime in UTC.
- final Statement s3 = new StatementImpl(vf.createURI("foo:subj3"), pred1_atTime, vf.createLiteral(testDate2014InBRST));
- final Statement s4 = new StatementImpl(vf.createURI("foo:subj4"), pred2_circa, vf.createLiteral(testDate2016InET));
- tIndexer.storeStatement(convertStatement(s3));
- tIndexer.storeStatement(convertStatement(s4));
-
- // This should not be stored because the object is not a literal
- tIndexer.storeStatement(convertStatement(new StatementImpl(vf.createURI("foo:subj5"), pred1_atTime, vf.createURI("in:valid"))));
-
- printTables("junit testing: Temporal entities stored in testStoreStatement");
- assertEquals(2, tIndexer.getCollection().find().count());
+ final ValueFactory vf = new ValueFactoryImpl();
+
+ final URI pred1_atTime = vf.createURI(URI_PROPERTY_AT_TIME);
+ final URI pred2_circa = vf.createURI(URI_PROPERTY_CIRCA);
+
+ // Should not be stored because they are not in the predicate list
+ final String validDateStringWithThirteens = "1313-12-13T13:13:13Z";
+ tIndexer.storeStatement(convertStatement(new StatementImpl(vf.createURI("foo:subj1"), RDFS.LABEL, vf.createLiteral(validDateStringWithThirteens))));
+
+ final String invalidDateString = "ThisIsAnInvalidDate";
+ tIndexer.storeStatement(convertStatement(new StatementImpl(vf.createURI("foo:subj2"), pred1_atTime, vf.createLiteral(invalidDateString))));
+
+ // These are different datetimes instant but from different time zones.
+ // This is an arbitrary zone, BRST=Brazil, better if not local.
+ // same as "2015-01-01T01:59:59Z"
+ final String testDate2014InBRST = "2014-12-31T23:59:59-02:00";
+ // next year, same as "2017-01-01T01:59:59Z"
+ final String testDate2016InET = "2016-12-31T20:59:59-05:00";
+
+ // These should be stored because they are in the predicate list.
+ // BUT they will get converted to the same exact datetime in UTC.
+ final Statement s3 = new StatementImpl(vf.createURI("foo:subj3"), pred1_atTime, vf.createLiteral(testDate2014InBRST));
+ final Statement s4 = new StatementImpl(vf.createURI("foo:subj4"), pred2_circa, vf.createLiteral(testDate2016InET));
+ tIndexer.storeStatement(convertStatement(s3));
+ tIndexer.storeStatement(convertStatement(s4));
+
+ // This should not be stored because the object is not a literal
+ tIndexer.storeStatement(convertStatement(new StatementImpl(vf.createURI("foo:subj5"), pred1_atTime, vf.createURI("in:valid"))));
+
+ printTables(tIndexer, "junit testing: Temporal entities stored in testStoreStatement");
+ assertEquals(2, tIndexer.getCollection().find().count());
+ }
}
@Test
public void testDelete() throws IOException, MongoException, TableNotFoundException, TableExistsException, NoSuchAlgorithmException {
- final ValueFactory vf = new ValueFactoryImpl();
+ try(MongoTemporalIndexer tIndexer = new MongoTemporalIndexer()) {
+ tIndexer.setConf(conf);
+ tIndexer.init();
- final URI pred1_atTime = vf.createURI(URI_PROPERTY_AT_TIME);
- final URI pred2_circa = vf.createURI(URI_PROPERTY_CIRCA);
+ final ValueFactory vf = new ValueFactoryImpl();
+
+ final URI pred1_atTime = vf.createURI(URI_PROPERTY_AT_TIME);
+ final URI pred2_circa = vf.createURI(URI_PROPERTY_CIRCA);
- final String testDate2014InBRST = "2014-12-31T23:59:59-02:00";
- final String testDate2016InET = "2016-12-31T20:59:59-05:00";
+ final String testDate2014InBRST = "2014-12-31T23:59:59-02:00";
+ final String testDate2016InET = "2016-12-31T20:59:59-05:00";
- // These should be stored because they are in the predicate list.
- // BUT they will get converted to the same exact datetime in UTC.
- final Statement s1 = new StatementImpl(vf.createURI("foo:subj3"), pred1_atTime, vf.createLiteral(testDate2014InBRST));
- final Statement s2 = new StatementImpl(vf.createURI("foo:subj4"), pred2_circa, vf.createLiteral(testDate2016InET));
- tIndexer.storeStatement(convertStatement(s1));
- tIndexer.storeStatement(convertStatement(s2));
+ // These should be stored because they are in the predicate list.
+ // BUT they will get converted to the same exact datetime in UTC.
+ final Statement s1 = new StatementImpl(vf.createURI("foo:subj3"), pred1_atTime, vf.createLiteral(testDate2014InBRST));
+ final Statement s2 = new StatementImpl(vf.createURI("foo:subj4"), pred2_circa, vf.createLiteral(testDate2016InET));
+ tIndexer.storeStatement(convertStatement(s1));
+ tIndexer.storeStatement(convertStatement(s2));
+ final String dbName = conf.getMongoDBName();
+ final DB db = super.getMongoClient().getDB(dbName);
+ DBCollection collection = db.getCollection(conf.get(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya") + tIndexer.getCollectionName());
- printTables("junit testing: Temporal entities stored in testDelete before delete");
- assertEquals("Number of rows stored.", 2, collection.count()); // 4 index entries per statement
+ printTables(tIndexer, "junit testing: Temporal entities stored in testDelete before delete");
+ assertEquals("Number of rows stored.", 2, collection.count()); // 4 index entries per statement
- tIndexer.deleteStatement(convertStatement(s1));
- tIndexer.deleteStatement(convertStatement(s2));
+ tIndexer.deleteStatement(convertStatement(s1));
+ tIndexer.deleteStatement(convertStatement(s2));
- printTables("junit testing: Temporal entities stored in testDelete after delete");
- assertEquals("Number of rows stored after delete.", 0, collection.count());
+ printTables(tIndexer, "junit testing: Temporal entities stored in testDelete after delete");
+ assertEquals("Number of rows stored after delete.", 0, collection.count());
+ }
}
/**
@@ -254,31 +279,36 @@ public final class MongoTemporalIndexerTest extends MongoTestBase {
*/
@Test
public void testQueryInstantAfterInstant() throws IOException, QueryEvaluationException, TableNotFoundException, MongoException {
- // tiB02_E30 read as: Begins 2 seconds, ends at 30 seconds
- // these should not match as they are not instances.
- tIndexer.storeStatement(convertStatement(spo_B03_E20));
- tIndexer.storeStatement(convertStatement(spo_B02_E30));
- tIndexer.storeStatement(convertStatement(spo_B02_E40));
- tIndexer.storeStatement(convertStatement(spo_B02_E31));
- tIndexer.storeStatement(convertStatement(spo_B30_E32));
-
- // seriesSpo[s] and seriesTs[s] are statements and instant for s seconds after the uniform time.
- final int searchForSeconds = 4;
- final int expectedResultCount = 9;
- for (int s = 0; s <= searchForSeconds + expectedResultCount; s++) { // <== logic here
- tIndexer.storeStatement(convertStatement(seriesSpo[s]));
- }
+ try(MongoTemporalIndexer tIndexer = new MongoTemporalIndexer()) {
+ tIndexer.setConf(conf);
+ tIndexer.init();
+
+ // tiB02_E30 read as: Begins 2 seconds, ends at 30 seconds
+ // these should not match as they are not instances.
+ tIndexer.storeStatement(convertStatement(spo_B03_E20));
+ tIndexer.storeStatement(convertStatement(spo_B02_E30));
+ tIndexer.storeStatement(convertStatement(spo_B02_E40));
+ tIndexer.storeStatement(convertStatement(spo_B02_E31));
+ tIndexer.storeStatement(convertStatement(spo_B30_E32));
+
+ // seriesSpo[s] and seriesTs[s] are statements and instant for s seconds after the uniform time.
+ final int searchForSeconds = 4;
+ final int expectedResultCount = 9;
+ for (int s = 0; s <= searchForSeconds + expectedResultCount; s++) { // <== logic here
+ tIndexer.storeStatement(convertStatement(seriesSpo[s]));
+ }
- CloseableIteration<Statement, QueryEvaluationException> iter;
- iter = tIndexer.queryInstantAfterInstant(seriesTs[searchForSeconds], EMPTY_CONSTRAINTS);
- int count = 0;
- while (iter.hasNext()) {
- final Statement s = iter.next();
- final Statement nextExpectedStatement = seriesSpo[searchForSeconds + count + 1]; // <== logic here
- assertTrue("Should match: " + nextExpectedStatement + " == " + s, nextExpectedStatement.equals(s));
- count++;
+ CloseableIteration<Statement, QueryEvaluationException> iter;
+ iter = tIndexer.queryInstantAfterInstant(seriesTs[searchForSeconds], EMPTY_CONSTRAINTS);
+ int count = 0;
+ while (iter.hasNext()) {
+ final Statement s = iter.next();
+ final Statement nextExpectedStatement = seriesSpo[searchForSeconds + count + 1]; // <== logic here
+ assertTrue("Should match: " + nextExpectedStatement + " == " + s, nextExpectedStatement.equals(s));
+ count++;
+ }
+ assertEquals("Should find count of rows.", expectedResultCount, count);
}
- assertEquals("Should find count of rows.", expectedResultCount, count);
}
/**
* Test instant before a given instant.
@@ -286,32 +316,37 @@ public final class MongoTemporalIndexerTest extends MongoTestBase {
*/
@Test
public void testQueryInstantBeforeInstant() throws IOException, QueryEvaluationException {
- // tiB02_E30 read as: Begins 2 seconds, ends at 30 seconds
- // these should not match as they are not instances.
- tIndexer.storeStatement(convertStatement(spo_B03_E20));
- tIndexer.storeStatement(convertStatement(spo_B02_E30));
- tIndexer.storeStatement(convertStatement(spo_B02_E40));
- tIndexer.storeStatement(convertStatement(spo_B02_E31));
- tIndexer.storeStatement(convertStatement(spo_B30_E32));
-
- // seriesSpo[s] and seriesTs[s] are statements and instant for s seconds after the uniform time.
- final int searchForSeconds = 4;
- final int expectedResultCount = 4;
- for (int s = 0; s <= searchForSeconds + 15; s++) { // <== logic here
- tIndexer.storeStatement(convertStatement(seriesSpo[s]));
- }
+ try(MongoTemporalIndexer tIndexer = new MongoTemporalIndexer()) {
+ tIndexer.setConf(conf);
+ tIndexer.init();
+
+ // tiB02_E30 read as: Begins 2 seconds, ends at 30 seconds
+ // these should not match as they are not instances.
+ tIndexer.storeStatement(convertStatement(spo_B03_E20));
+ tIndexer.storeStatement(convertStatement(spo_B02_E30));
+ tIndexer.storeStatement(convertStatement(spo_B02_E40));
+ tIndexer.storeStatement(convertStatement(spo_B02_E31));
+ tIndexer.storeStatement(convertStatement(spo_B30_E32));
+
+ // seriesSpo[s] and seriesTs[s] are statements and instant for s seconds after the uniform time.
+ final int searchForSeconds = 4;
+ final int expectedResultCount = 4;
+ for (int s = 0; s <= searchForSeconds + 15; s++) { // <== logic here
+ tIndexer.storeStatement(convertStatement(seriesSpo[s]));
+ }
- CloseableIteration<Statement, QueryEvaluationException> iter;
+ CloseableIteration<Statement, QueryEvaluationException> iter;
- iter = tIndexer.queryInstantBeforeInstant(seriesTs[searchForSeconds], EMPTY_CONSTRAINTS);
- int count = 0;
- while (iter.hasNext()) {
- final Statement s = iter.next();
- final Statement nextExpectedStatement = seriesSpo[count]; // <== logic here
- assertTrue("Should match: " + nextExpectedStatement + " == " + s, nextExpectedStatement.equals(s));
- count++;
+ iter = tIndexer.queryInstantBeforeInstant(seriesTs[searchForSeconds], EMPTY_CONSTRAINTS);
+ int count = 0;
+ while (iter.hasNext()) {
+ final Statement s = iter.next();
+ final Statement nextExpectedStatement = seriesSpo[count]; // <== logic here
+ assertTrue("Should match: " + nextExpectedStatement + " == " + s, nextExpectedStatement.equals(s));
+ count++;
+ }
+ assertEquals("Should find count of rows.", expectedResultCount, count);
}
- assertEquals("Should find count of rows.", expectedResultCount, count);
}
/**
@@ -320,31 +355,36 @@ public final class MongoTemporalIndexerTest extends MongoTestBase {
*/
@Test
public void testQueryInstantBeforeInterval() throws IOException, QueryEvaluationException {
- // tiB02_E30 read as: Begins 2 seconds, ends at 30 seconds
- // these should not match as they are not instances.
- tIndexer.storeStatement(convertStatement(spo_B03_E20));
- tIndexer.storeStatement(convertStatement(spo_B02_E30));
- tIndexer.storeStatement(convertStatement(spo_B02_E40));
- tIndexer.storeStatement(convertStatement(spo_B02_E31));
- tIndexer.storeStatement(convertStatement(spo_B30_E32));
-
- // seriesSpo[s] and seriesTs[s] are statements and instants for s seconds after the uniform time.
- final TemporalInterval searchForSeconds = tvB02_E31;
- final int expectedResultCount = 2; // 00 and 01 seconds.
- for (int s = 0; s <= 40; s++) { // <== logic here
- tIndexer.storeStatement(convertStatement(seriesSpo[s]));
- }
+ try(MongoTemporalIndexer tIndexer = new MongoTemporalIndexer()) {
+ tIndexer.setConf(conf);
+ tIndexer.init();
+
+ // tiB02_E30 read as: Begins 2 seconds, ends at 30 seconds
+ // these should not match as they are not instances.
+ tIndexer.storeStatement(convertStatement(spo_B03_E20));
+ tIndexer.storeStatement(convertStatement(spo_B02_E30));
+ tIndexer.storeStatement(convertStatement(spo_B02_E40));
+ tIndexer.storeStatement(convertStatement(spo_B02_E31));
+ tIndexer.storeStatement(convertStatement(spo_B30_E32));
+
+ // seriesSpo[s] and seriesTs[s] are statements and instants for s seconds after the uniform time.
+ final TemporalInterval searchForSeconds = tvB02_E31;
+ final int expectedResultCount = 2; // 00 and 01 seconds.
+ for (int s = 0; s <= 40; s++) { // <== logic here
+ tIndexer.storeStatement(convertStatement(seriesSpo[s]));
+ }
- CloseableIteration<Statement, QueryEvaluationException> iter;
- iter = tIndexer.queryInstantBeforeInterval(searchForSeconds, EMPTY_CONSTRAINTS);
- int count = 0;
- while (iter.hasNext()) {
- final Statement s = iter.next();
- final Statement nextExpectedStatement = seriesSpo[count]; // <== logic here
- assertTrue("Should match: " + nextExpectedStatement + " == " + s, nextExpectedStatement.equals(s));
- count++;
+ CloseableIteration<Statement, QueryEvaluationException> iter;
+ iter = tIndexer.queryInstantBeforeInterval(searchForSeconds, EMPTY_CONSTRAINTS);
+ int count = 0;
+ while (iter.hasNext()) {
+ final Statement s = iter.next();
+ final Statement nextExpectedStatement = seriesSpo[count]; // <== logic here
+ assertTrue("Should match: " + nextExpectedStatement + " == " + s, nextExpectedStatement.equals(s));
+ count++;
+ }
+ assertEquals("Should find count of rows.", expectedResultCount, count);
}
- assertEquals("Should find count of rows.", expectedResultCount, count);
}
/**
@@ -353,32 +393,37 @@ public final class MongoTemporalIndexerTest extends MongoTestBase {
*/
@Test
public void testQueryInstantAfterInterval() throws IOException, QueryEvaluationException {
- // tiB02_E30 read as: Begins 2 seconds, ends at 30 seconds
- // these should not match as they are not instances.
- tIndexer.storeStatement(convertStatement(spo_B03_E20));
- tIndexer.storeStatement(convertStatement(spo_B02_E30));
- tIndexer.storeStatement(convertStatement(spo_B02_E40));
- tIndexer.storeStatement(convertStatement(spo_B02_E31));
- tIndexer.storeStatement(convertStatement(spo_B30_E32));
-
- // seriesSpo[s] and seriesTs[s] are statements and instants for s seconds after the uniform time.
- final TemporalInterval searchAfterInterval = tvB02_E31; // from 2 to 31 seconds
- final int endingSeconds = 31;
- final int expectedResultCount = 9; // 32,33,...,40 seconds.
- for (int s = 0; s <= endingSeconds + expectedResultCount; s++) { // <== logic here
- tIndexer.storeStatement(convertStatement(seriesSpo[s]));
- }
+ try(MongoTemporalIndexer tIndexer = new MongoTemporalIndexer()) {
+ tIndexer.setConf(conf);
+ tIndexer.init();
+
+ // tiB02_E30 read as: Begins 2 seconds, ends at 30 seconds
+ // these should not match as they are not instances.
+ tIndexer.storeStatement(convertStatement(spo_B03_E20));
+ tIndexer.storeStatement(convertStatement(spo_B02_E30));
+ tIndexer.storeStatement(convertStatement(spo_B02_E40));
+ tIndexer.storeStatement(convertStatement(spo_B02_E31));
+ tIndexer.storeStatement(convertStatement(spo_B30_E32));
+
+ // seriesSpo[s] and seriesTs[s] are statements and instants for s seconds after the uniform time.
+ final TemporalInterval searchAfterInterval = tvB02_E31; // from 2 to 31 seconds
+ final int endingSeconds = 31;
+ final int expectedResultCount = 9; // 32,33,...,40 seconds.
+ for (int s = 0; s <= endingSeconds + expectedResultCount; s++) { // <== logic here
+ tIndexer.storeStatement(convertStatement(seriesSpo[s]));
+ }
- CloseableIteration<Statement, QueryEvaluationException> iter;
- iter = tIndexer.queryInstantAfterInterval(searchAfterInterval, EMPTY_CONSTRAINTS);
- int count = 0;
- while (iter.hasNext()) {
- final Statement s = iter.next();
- final Statement nextExpectedStatement = seriesSpo[count + endingSeconds + 1]; // <== logic here
- assertTrue("Should match: " + nextExpectedStatement + " == " + s, nextExpectedStatement.equals(s));
- count++;
+ CloseableIteration<Statement, QueryEvaluationException> iter;
+ iter = tIndexer.queryInstantAfterInterval(searchAfterInterval, EMPTY_CONSTRAINTS);
+ int count = 0;
+ while (iter.hasNext()) {
+ final Statement s = iter.next();
+ final Statement nextExpectedStatement = seriesSpo[count + endingSeconds + 1]; // <== logic here
+ assertTrue("Should match: " + nextExpectedStatement + " == " + s, nextExpectedStatement.equals(s));
+ count++;
+ }
+ assertEquals("Should find count of rows.", expectedResultCount, count);
}
- assertEquals("Should find count of rows.", expectedResultCount, count);
}
/**
@@ -387,99 +432,116 @@ public final class MongoTemporalIndexerTest extends MongoTestBase {
*/
@Test
public void testQueryInstantInsideInterval() throws IOException, QueryEvaluationException {
- // tiB02_E30 read as: Begins 2 seconds, ends at 30 seconds
- // these should not match as they are not instances.
- tIndexer.storeStatement(convertStatement(spo_B03_E20));
- tIndexer.storeStatement(convertStatement(spo_B02_E30));
- tIndexer.storeStatement(convertStatement(spo_B02_E40));
- tIndexer.storeStatement(convertStatement(spo_B02_E31));
- tIndexer.storeStatement(convertStatement(spo_B30_E32));
-
- // seriesSpo[s] and seriesTs[s] are statements and instants for s seconds after the uniform time.
- final TemporalInterval searchInsideInterval = tvB02_E31; // from 2 to 31 seconds
- final int beginningSeconds = 2; // <== logic here, and next few lines.
- final int endingSeconds = 31;
- final int expectedResultCount = endingSeconds - beginningSeconds - 1; // 3,4,...,30 seconds.
- for (int s = 0; s <= 40; s++) {
- tIndexer.storeStatement(convertStatement(seriesSpo[s]));
- }
+ try(MongoTemporalIndexer tIndexer = new MongoTemporalIndexer()) {
+ tIndexer.setConf(conf);
+ tIndexer.init();
+
+ // tiB02_E30 read as: Begins 2 seconds, ends at 30 seconds
+ // these should not match as they are not instances.
+ tIndexer.storeStatement(convertStatement(spo_B03_E20));
+ tIndexer.storeStatement(convertStatement(spo_B02_E30));
+ tIndexer.storeStatement(convertStatement(spo_B02_E40));
+ tIndexer.storeStatement(convertStatement(spo_B02_E31));
+ tIndexer.storeStatement(convertStatement(spo_B30_E32));
+
+ // seriesSpo[s] and seriesTs[s] are statements and instants for s seconds after the uniform time.
+ final TemporalInterval searchInsideInterval = tvB02_E31; // from 2 to 31 seconds
+ final int beginningSeconds = 2; // <== logic here, and next few lines.
+ final int endingSeconds = 31;
+ final int expectedResultCount = endingSeconds - beginningSeconds - 1; // 3,4,...,30 seconds.
+ for (int s = 0; s <= 40; s++) {
+ tIndexer.storeStatement(convertStatement(seriesSpo[s]));
+ }
- CloseableIteration<Statement, QueryEvaluationException> iter;
- iter = tIndexer.queryInstantInsideInterval(searchInsideInterval, EMPTY_CONSTRAINTS);
- int count = 0;
- while (iter.hasNext()) {
- final Statement s = iter.next();
- final Statement nextExpectedStatement = seriesSpo[count + beginningSeconds + 1]; // <== logic here
- assertTrue("Should match: " + nextExpectedStatement + " == " + s, nextExpectedStatement.equals(s));
- count++;
+ CloseableIteration<Statement, QueryEvaluationException> iter;
+ iter = tIndexer.queryInstantInsideInterval(searchInsideInterval, EMPTY_CONSTRAINTS);
+ int count = 0;
+ while (iter.hasNext()) {
+ final Statement s = iter.next();
+ final Statement nextExpectedStatement = seriesSpo[count + beginningSeconds + 1]; // <== logic here
+ assertTrue("Should match: " + nextExpectedStatement + " == " + s, nextExpectedStatement.equals(s));
+ count++;
+ }
+ assertEquals("Should find count of rows.", expectedResultCount, count);
}
- assertEquals("Should find count of rows.", expectedResultCount, count);
}
+
/**
* Test instant is the Beginning of the given interval.
* from the series: Instance {hasBeginning, hasEnd} Interval
*/
@Test
public void testQueryInstantHasBeginningInterval() throws IOException, QueryEvaluationException {
- // tiB02_E30 read as: Begins 2 seconds, ends at 30 seconds
- // these should not match as they are not instances.
- tIndexer.storeStatement(convertStatement(spo_B03_E20));
- tIndexer.storeStatement(convertStatement(spo_B02_E30));
- tIndexer.storeStatement(convertStatement(spo_B02_E40));
- tIndexer.storeStatement(convertStatement(spo_B02_E31));
- tIndexer.storeStatement(convertStatement(spo_B30_E32));
-
- // seriesSpo[s] and seriesTs[s] are statements and instants for s seconds after the uniform time.
- final TemporalInterval searchInsideInterval = tvB02_E31; // from 2 to 31 seconds
- final int searchSeconds = 2; // <== logic here, and next few lines.
- final int expectedResultCount = 1; // 2 seconds.
- for (int s = 0; s <= 10; s++) {
- tIndexer.storeStatement(convertStatement(seriesSpo[s]));
- }
+ try(MongoTemporalIndexer tIndexer = new MongoTemporalIndexer()) {
+ tIndexer.setConf(conf);
+ tIndexer.init();
+
+ // tiB02_E30 read as: Begins 2 seconds, ends at 30 seconds
+ // these should not match as they are not instances.
+ tIndexer.storeStatement(convertStatement(spo_B03_E20));
+ tIndexer.storeStatement(convertStatement(spo_B02_E30));
+ tIndexer.storeStatement(convertStatement(spo_B02_E40));
+ tIndexer.storeStatement(convertStatement(spo_B02_E31));
+ tIndexer.storeStatement(convertStatement(spo_B30_E32));
+
+ // seriesSpo[s] and seriesTs[s] are statements and instants for s seconds after the uniform time.
+ final TemporalInterval searchInsideInterval = tvB02_E31; // from 2 to 31 seconds
+ final int searchSeconds = 2; // <== logic here, and next few lines.
+ final int expectedResultCount = 1; // 2 seconds.
+ for (int s = 0; s <= 10; s++) {
+ tIndexer.storeStatement(convertStatement(seriesSpo[s]));
+ }
- CloseableIteration<Statement, QueryEvaluationException> iter;
- iter = tIndexer.queryInstantHasBeginningInterval(searchInsideInterval, EMPTY_CONSTRAINTS);
- int count = 0;
- while (iter.hasNext()) {
- final Statement s = iter.next();
- final Statement nextExpectedStatement = seriesSpo[searchSeconds]; // <== logic here
- assertTrue("Should match: " + nextExpectedStatement + " == " + s, nextExpectedStatement.equals(s));
- count++;
+ CloseableIteration<Statement, QueryEvaluationException> iter;
+ iter = tIndexer.queryInstantHasBeginningInterval(searchInsideInterval, EMPTY_CONSTRAINTS);
+ int count = 0;
+ while (iter.hasNext()) {
+ final Statement s = iter.next();
+ final Statement nextExpectedStatement = seriesSpo[searchSeconds]; // <== logic here
+ assertTrue("Should match: " + nextExpectedStatement + " == " + s, nextExpectedStatement.equals(s));
+ count++;
+ }
+ assertEquals("Should find count of rows.", expectedResultCount, count);
}
- assertEquals("Should find count of rows.", expectedResultCount, count);
}
+
/**
* Test instant is the end of the given interval.
* from the series: Instance {hasBeginning, hasEnd} Interval
*/
@Test
public void testQueryInstantHasEndInterval() throws IOException, QueryEvaluationException {
- // tiB02_E30 read as: Begins 2 seconds, ends at 30 seconds
- // these should not match as they are not instances.
- tIndexer.storeStatement(convertStatement(spo_B03_E20));
- tIndexer.storeStatement(convertStatement(spo_B02_E30));
- tIndexer.storeStatement(convertStatement(spo_B02_E40));
- tIndexer.storeStatement(convertStatement(spo_B02_E31));
- tIndexer.storeStatement(convertStatement(spo_B30_E32));
-
- // seriesSpo[s] and seriesTs[s] are statements and instants for s seconds after the uniform time.
- final TemporalInterval searchInsideInterval = tvB02_E31; // from 2 to 31 seconds
- final int searchSeconds = 31; // <== logic here, and next few lines.
- final int expectedResultCount = 1; // 31 seconds.
- for (int s = 0; s <= 40; s++) {
- tIndexer.storeStatement(convertStatement(seriesSpo[s]));
- }
+ try(MongoTemporalIndexer tIndexer = new MongoTemporalIndexer()) {
+ tIndexer.setConf(conf);
+ tIndexer.init();
+
+ // tiB02_E30 read as: Begins 2 seconds, ends at 30 seconds
+ // these should not match as they are not instances.
+ tIndexer.storeStatement(convertStatement(spo_B03_E20));
+ tIndexer.storeStatement(convertStatement(spo_B02_E30));
+ tIndexer.storeStatement(convertStatement(spo_B02_E40));
+ tIndexer.storeStatement(convertStatement(spo_B02_E31));
+ tIndexer.storeStatement(convertStatement(spo_B30_E32));
+
+ // seriesSpo[s] and seriesTs[s] are statements and instants for s seconds after the uniform time.
+ final TemporalInterval searchInsideInterval = tvB02_E31; // from 2 to 31 seconds
+ final int searchSeconds = 31; // <== logic here, and next few lines.
+ final int expectedResultCount = 1; // 31 seconds.
+ for (int s = 0; s <= 40; s++) {
+ tIndexer.storeStatement(convertStatement(seriesSpo[s]));
+ }
- CloseableIteration<Statement, QueryEvaluationException> iter;
- iter = tIndexer.queryInstantHasEndInterval(searchInsideInterval, EMPTY_CONSTRAINTS);
- int count = 0;
- while (iter.hasNext()) {
- final Statement s = iter.next();
- final Statement nextExpectedStatement = seriesSpo[searchSeconds]; // <== logic here
- assertTrue("Should match: " + nextExpectedStatement + " == " + s, nextExpectedStatement.equals(s));
- count++;
+ CloseableIteration<Statement, QueryEvaluationException> iter;
+ iter = tIndexer.queryInstantHasEndInterval(searchInsideInterval, EMPTY_CONSTRAINTS);
+ int count = 0;
+ while (iter.hasNext()) {
+ final Statement s = iter.next();
+ final Statement nextExpectedStatement = seriesSpo[searchSeconds]; // <== logic here
+ assertTrue("Should match: " + nextExpectedStatement + " == " + s, nextExpectedStatement.equals(s));
+ count++;
+ }
+ assertEquals("Should find count of rows.", expectedResultCount, count);
}
- assertEquals("Should find count of rows.", expectedResultCount, count);
}
/**
@@ -492,21 +554,26 @@ public final class MongoTemporalIndexerTest extends MongoTestBase {
*/
@Test
public void testQueryIntervalEquals() throws IOException, QueryEvaluationException {
- // tiB02_E30 read as: Begins 2 seconds, ends at 30 seconds
- tIndexer.storeStatement(convertStatement(spo_B03_E20));
- tIndexer.storeStatement(convertStatement(spo_B02_E30));
- tIndexer.storeStatement(convertStatement(spo_B02_E40));
- tIndexer.storeStatement(convertStatement(spo_B02_E31));
- tIndexer.storeStatement(convertStatement(spo_B30_E32));
- tIndexer.storeStatement(convertStatement(seriesSpo[4])); // instance at 4 seconds
-
-
- CloseableIteration<Statement, QueryEvaluationException> iter;
- iter = tIndexer.queryIntervalEquals(tvB02_E40, EMPTY_CONSTRAINTS);
- // Should be found twice:
- assertTrue("queryIntervalEquals: spo_B02_E40 should be found, but actually returned empty results. spo_B02_E40=" + spo_B02_E40, iter.hasNext());
- assertTrue("queryIntervalEquals: spo_B02_E40 should be found, but does not match.", spo_B02_E40.equals(iter.next()));
- assertFalse("queryIntervalEquals: Find no more than one, but actually has more.", iter.hasNext());
+ try(MongoTemporalIndexer tIndexer = new MongoTemporalIndexer()) {
+ tIndexer.setConf(conf);
+ tIndexer.init();
+
+ // tiB02_E30 read as: Begins 2 seconds, ends at 30 seconds
+ tIndexer.storeStatement(convertStatement(spo_B03_E20));
+ tIndexer.storeStatement(convertStatement(spo_B02_E30));
+ tIndexer.storeStatement(convertStatement(spo_B02_E40));
+ tIndexer.storeStatement(convertStatement(spo_B02_E31));
+ tIndexer.storeStatement(convertStatement(spo_B30_E32));
+ tIndexer.storeStatement(convertStatement(seriesSpo[4])); // instance at 4 seconds
+
+
+ CloseableIteration<Statement, QueryEvaluationException> iter;
+ iter = tIndexer.queryIntervalEquals(tvB02_E40, EMPTY_CONSTRAINTS);
+ // Should be found twice:
+ assertTrue("queryIntervalEquals: spo_B02_E40 should be found, but actually returned empty results. spo_B02_E40=" + spo_B02_E40, iter.hasNext());
+ assertTrue("queryIntervalEquals: spo_B02_E40 should be found, but does not match.", spo_B02_E40.equals(iter.next()));
+ assertFalse("queryIntervalEquals: Find no more than one, but actually has more.", iter.hasNext());
+ }
}
/**
@@ -518,25 +585,30 @@ public final class MongoTemporalIndexerTest extends MongoTestBase {
*/
@Test
public void testQueryIntervalBefore() throws IOException, QueryEvaluationException {
- // tiB02_E30 read as: Begins 2 seconds, ends at 30 seconds
- tIndexer.storeStatement(convertStatement(spo_B00_E01));
- tIndexer.storeStatement(convertStatement(spo_B02_E30));
- tIndexer.storeStatement(convertStatement(spo_B02_E31));
- tIndexer.storeStatement(convertStatement(spo_B02_E40));
- tIndexer.storeStatement(convertStatement(spo_B03_E20));
- // instants should be ignored.
- tIndexer.storeStatement(convertStatement(spo_B30_E32));
- tIndexer.storeStatement(convertStatement(seriesSpo[1])); // instance at 1 seconds
- tIndexer.storeStatement(convertStatement(seriesSpo[2]));
- tIndexer.storeStatement(convertStatement(seriesSpo[31]));
-
-
- CloseableIteration<Statement, QueryEvaluationException> iter;
- iter = tIndexer.queryIntervalBefore(tvB02_E31, EMPTY_CONSTRAINTS);
- // Should be found twice:
- assertTrue("spo_B00_E01 should be found, but actually returned empty results. spo_B00_E01=" + spo_B00_E01, iter.hasNext());
- assertTrue("spo_B00_E01 should be found, but found another.", spo_B00_E01.equals(iter.next()));
- assertFalse("Find no more than one, but actually has more.", iter.hasNext());
+ try(MongoTemporalIndexer tIndexer = new MongoTemporalIndexer()) {
+ tIndexer.setConf(conf);
+ tIndexer.init();
+
+ // tiB02_E30 read as: Begins 2 seconds, ends at 30 seconds
+ tIndexer.storeStatement(convertStatement(spo_B00_E01));
+ tIndexer.storeStatement(convertStatement(spo_B02_E30));
+ tIndexer.storeStatement(convertStatement(spo_B02_E31));
+ tIndexer.storeStatement(convertStatement(spo_B02_E40));
+ tIndexer.storeStatement(convertStatement(spo_B03_E20));
+ // instants should be ignored.
+ tIndexer.storeStatement(convertStatement(spo_B30_E32));
+ tIndexer.storeStatement(convertStatement(seriesSpo[1])); // instance at 1 seconds
+ tIndexer.storeStatement(convertStatement(seriesSpo[2]));
+ tIndexer.storeStatement(convertStatement(seriesSpo[31]));
+
+
+ CloseableIteration<Statement, QueryEvaluationException> iter;
+ iter = tIndexer.queryIntervalBefore(tvB02_E31, EMPTY_CONSTRAINTS);
+ // Should be found twice:
+ assertTrue("spo_B00_E01 should be found, but actually returned empty results. spo_B00_E01=" + spo_B00_E01, iter.hasNext());
+ assertTrue("spo_B00_E01 should be found, but found another.", spo_B00_E01.equals(iter.next()));
+ assertFalse("Find no more than one, but actually has more.", iter.hasNext());
+ }
}
/**
@@ -548,29 +620,33 @@ public final class MongoTemporalIndexerTest extends MongoTestBase {
*/
@Test
public void testQueryIntervalAfter() throws IOException, QueryEvaluationException {
- // tiB02_E30 read as: Begins 2 seconds, ends at 30 seconds
- tIndexer.storeStatement(convertStatement(spo_B00_E01));
- tIndexer.storeStatement(convertStatement(spo_B02_E29)); //<- after this one.
- tIndexer.storeStatement(convertStatement(spo_B02_E30));
- tIndexer.storeStatement(convertStatement(spo_B02_E31));
- tIndexer.storeStatement(convertStatement(spo_B02_E40));
- tIndexer.storeStatement(convertStatement(spo_B03_E20));
- tIndexer.storeStatement(convertStatement(spo_B29_E30));
- tIndexer.storeStatement(convertStatement(spo_B30_E32));
- // instants should be ignored.
- tIndexer.storeStatement(convertStatement(spo_B02));
- tIndexer.storeStatement(convertStatement(seriesSpo[1])); // instance at 1 seconds
- tIndexer.storeStatement(convertStatement(seriesSpo[2]));
- tIndexer.storeStatement(convertStatement(seriesSpo[31]));
-
- CloseableIteration<Statement, QueryEvaluationException> iter;
- iter = tIndexer.queryIntervalAfter(tvB02_E29, EMPTY_CONSTRAINTS);
- // Should be found twice:
- assertTrue("spo_B30_E32 should be found, but actually returned empty results. spo_B30_E32=" + spo_B30_E32, iter.hasNext());
- final Statement s = iter.next();
- assertTrue("spo_B30_E32 should be found, but found another. spo_B30_E32="+spo_B30_E32+", but found="+s, spo_B30_E32.equals(s));
- assertFalse("Find no more than one, but actually has more.", iter.hasNext());
-
+ try(MongoTemporalIndexer tIndexer = new MongoTemporalIndexer()) {
+ tIndexer.setConf(conf);
+ tIndexer.init();
+
+ // tiB02_E30 read as: Begins 2 seconds, ends at 30 seconds
+ tIndexer.storeStatement(convertStatement(spo_B00_E01));
+ tIndexer.storeStatement(convertStatement(spo_B02_E29)); //<- after this one.
+ tIndexer.storeStatement(convertStatement(spo_B02_E30));
+ tIndexer.storeStatement(convertStatement(spo_B02_E31));
+ tIndexer.storeStatement(convertStatement(spo_B02_E40));
+ tIndexer.storeStatement(convertStatement(spo_B03_E20));
+ tIndexer.storeStatement(convertStatement(spo_B29_E30));
+ tIndexer.storeStatement(convertStatement(spo_B30_E32));
+ // instants should be ignored.
+ tIndexer.storeStatement(convertStatement(spo_B02));
+ tIndexer.storeStatement(convertStatement(seriesSpo[1])); // instance at 1 seconds
+ tIndexer.storeStatement(convertStatement(seriesSpo[2]));
+ tIndexer.storeStatement(convertStatement(seriesSpo[31]));
+
+ CloseableIteration<Statement, QueryEvaluationException> iter;
+ iter = tIndexer.queryIntervalAfter(tvB02_E29, EMPTY_CONSTRAINTS);
+ // Should be found twice:
+ assertTrue("spo_B30_E32 should be found, but actually returned empty results. spo_B30_E32=" + spo_B30_E32, iter.hasNext());
+ final Statement s = iter.next();
+ assertTrue("spo_B30_E32 should be found, but found another. spo_B30_E32="+spo_B30_E32+", but found="+s, spo_B30_E32.equals(s));
+ assertFalse("Find no more than one, but actually has more.", iter.hasNext());
+ }
}
/**
@@ -578,65 +654,70 @@ public final class MongoTemporalIndexerTest extends MongoTestBase {
*/
@Test
public void testQueryWithMultiplePredicates() throws IOException, QueryEvaluationException {
- // tiB02_E30 read as: Begins 2 seconds, ends at 30 seconds
- // these should not match as they are not instances.
- tIndexer.storeStatement(convertStatement(spo_B03_E20));
- tIndexer.storeStatement(convertStatement(spo_B02_E30));
- tIndexer.storeStatement(convertStatement(spo_B02_E40));
- tIndexer.storeStatement(convertStatement(spo_B02_E31));
- tIndexer.storeStatement(convertStatement(spo_B30_E32));
-
- // seriesSpo[s] and seriesTs[s] are statements and instant for s seconds after the uniform time.
- final int searchForSeconds = 4;
- final int expectedResultCount = 9;
- for (int s = 0; s <= searchForSeconds + expectedResultCount; s++) { // <== logic here
- tIndexer.storeStatement(convertStatement(seriesSpo[s]));
- }
- final ValueFactory vf = new ValueFactoryImpl();
- final URI pred3_CIRCA_ = vf.createURI(URI_PROPERTY_CIRCA); // this one to ignore.
- final URI pred2_eventTime = vf.createURI(URI_PROPERTY_EVENT_TIME);
- final URI pred1_atTime = vf.createURI(URI_PROPERTY_AT_TIME);
-
- // add the predicate = EventTime ; Store in an array for verification.
- final Statement[] SeriesTs_EventTime = new Statement[expectedResultCount+1];
- for (int s = 0; s <= searchForSeconds + expectedResultCount; s++) { // <== logic here
- final Statement statement = new StatementImpl(vf.createURI("foo:EventTimeSubj0" + s), pred2_eventTime, vf.createLiteral(seriesTs[s].getAsReadable()));
- tIndexer.storeStatement(convertStatement(statement));
- if (s>searchForSeconds) {
- SeriesTs_EventTime[s - searchForSeconds -1 ] = statement;
+ try(MongoTemporalIndexer tIndexer = new MongoTemporalIndexer()) {
+ tIndexer.setConf(conf);
+ tIndexer.init();
+
+ // tiB02_E30 read as: Begins 2 seconds, ends at 30 seconds
+ // these should not match as they are not instances.
+ tIndexer.storeStatement(convertStatement(spo_B03_E20));
+ tIndexer.storeStatement(convertStatement(spo_B02_E30));
+ tIndexer.storeStatement(convertStatement(spo_B02_E40));
+ tIndexer.storeStatement(convertStatement(spo_B02_E31));
+ tIndexer.storeStatement(convertStatement(spo_B30_E32));
+
+ // seriesSpo[s] and seriesTs[s] are statements and instant for s seconds after the uniform time.
+ final int searchForSeconds = 4;
+ final int expectedResultCount = 9;
+ for (int s = 0; s <= searchForSeconds + expectedResultCount; s++) { // <== logic here
+ tIndexer.storeStatement(convertStatement(seriesSpo[s]));
+ }
+ final ValueFactory vf = new ValueFactoryImpl();
+ final URI pred3_CIRCA_ = vf.createURI(URI_PROPERTY_CIRCA); // this one to ignore.
+ final URI pred2_eventTime = vf.createURI(URI_PROPERTY_EVENT_TIME);
+ final URI pred1_atTime = vf.createURI(URI_PROPERTY_AT_TIME);
+
+ // add the predicate = EventTime ; Store in an array for verification.
+ final Statement[] SeriesTs_EventTime = new Statement[expectedResultCount+1];
+ for (int s = 0; s <= searchForSeconds + expectedResultCount; s++) { // <== logic here
+ final Statement statement = new StatementImpl(vf.createURI("foo:EventTimeSubj0" + s), pred2_eventTime, vf.createLiteral(seriesTs[s].getAsReadable()));
+ tIndexer.storeStatement(convertStatement(statement));
+ if (s>searchForSeconds) {
+ SeriesTs_EventTime[s - searchForSeconds -1 ] = statement;
+ }
+ }
+ // add the predicate = CIRCA ; to be ignored because it is not in the constraints.
+ for (int s = 0; s <= searchForSeconds + expectedResultCount; s++) { // <== logic here
+ final Statement statement = new StatementImpl(vf.createURI("foo:CircaEventSubj0" + s), pred3_CIRCA_, vf.createLiteral(seriesTs[s].getAsReadable()));
+ tIndexer.storeStatement(convertStatement(statement));
}
- }
- // add the predicate = CIRCA ; to be ignored because it is not in the constraints.
- for (int s = 0; s <= searchForSeconds + expectedResultCount; s++) { // <== logic here
- final Statement statement = new StatementImpl(vf.createURI("foo:CircaEventSubj0" + s), pred3_CIRCA_, vf.createLiteral(seriesTs[s].getAsReadable()));
- tIndexer.storeStatement(convertStatement(statement));
- }
- CloseableIteration<Statement, QueryEvaluationException> iter;
- final StatementConstraints constraints = new StatementConstraints();
- constraints.setPredicates(new HashSet<URI>(Arrays.asList( pred2_eventTime, pred1_atTime )));
+ CloseableIteration<Statement, QueryEvaluationException> iter;
+ final StatementConstraints constraints = new StatementConstraints();
+ constraints.setPredicates(new HashSet<>(Arrays.asList( pred2_eventTime, pred1_atTime )));
+
+ iter = tIndexer.queryInstantAfterInstant(seriesTs[searchForSeconds], constraints); // EMPTY_CONSTRAINTS);//
+ int count_AtTime = 0;
+ int count_EventTime = 0;
+ while (iter.hasNext()) {
+ final Statement s = iter.next();
+ final Statement nextExpectedStatement = seriesSpo[searchForSeconds + count_AtTime + 1]; // <== logic here
+ if (s.getPredicate().equals(pred1_atTime)) {
+ assertTrue("Should match atTime: " + nextExpectedStatement + " == " + s, nextExpectedStatement.equals(s));
+ count_AtTime++;
+ }
+ else if (s.getPredicate().equals(pred2_eventTime)) {
+ assertTrue("Should match eventTime: " + SeriesTs_EventTime[count_EventTime] + " == " + s, SeriesTs_EventTime[count_EventTime].equals(s));
+ count_EventTime++;
+ } else {
+ assertTrue("This predicate should not be returned: "+s, false);
+ }
- iter = tIndexer.queryInstantAfterInstant(seriesTs[searchForSeconds], constraints); // EMPTY_CONSTRAINTS);//
- int count_AtTime = 0;
- int count_EventTime = 0;
- while (iter.hasNext()) {
- final Statement s = iter.next();
- final Statement nextExpectedStatement = seriesSpo[searchForSeconds + count_AtTime + 1]; // <== logic here
- if (s.getPredicate().equals(pred1_atTime)) {
- assertTrue("Should match atTime: " + nextExpectedStatement + " == " + s, nextExpectedStatement.equals(s));
- count_AtTime++;
- }
- else if (s.getPredicate().equals(pred2_eventTime)) {
- assertTrue("Should match eventTime: " + SeriesTs_EventTime[count_EventTime] + " == " + s, SeriesTs_EventTime[count_EventTime].equals(s));
- count_EventTime++;
- } else {
- assertTrue("This predicate should not be returned: "+s, false);
}
+ assertEquals("Should find count of atTime rows.", expectedResultCount, count_AtTime);
+ assertEquals("Should find count of eventTime rows.", expectedResultCount, count_EventTime);
}
-
- assertEquals("Should find count of atTime rows.", expectedResultCount, count_AtTime);
- assertEquals("Should find count of eventTime rows.", expectedResultCount, count_EventTime);
}
/**
@@ -651,7 +732,7 @@ public final class MongoTemporalIndexerTest extends MongoTestBase {
* @return Count of entries in the index table.
* @throws IOException
*/
- public void printTables(final String description) throws IOException {
+ public void printTables(MongoTemporalIndexer tIndexer, final String description) throws IOException {
System.out.println("-- start printTables() -- " + description);
System.out.println("Reading : " + tIndexer.getCollection().getFullName());
final DBCursor cursor = tIndexer.getCollection().find();