RYA-85 Configuration glue code
Added a configuration utility for updating the
configuration used in Rya based on what is
in RyaDetails, the admin table.

Added integration examples, these will need to
be updated to use JUnit


Project: http://git-wip-us.apache.org/repos/asf/incubator-rya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rya/commit/12b8ce6d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rya/tree/12b8ce6d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rya/diff/12b8ce6d

Branch: refs/heads/master
Commit: 12b8ce6d1d0861d219a5a873eaf9025d9da06123
Parents: 42ca087
Author: isper3at <smith...@gmail.com>
Authored: Fri Jun 10 16:51:43 2016 -0400
Committer: Aaron Mihalik <miha...@alum.mit.edu>
Committed: Tue Aug 23 10:41:37 2016 -0400

----------------------------------------------------------------------
 .../rya/api/instance/ConfigurationFields.java   |  35 +++++
 .../api/instance/RyaDetailsToConfiguration.java |  54 +++++++
 .../instance/RyaDetailsToConfigurationTest.java |  87 ++++++++++++
 .../mongodb/instance/MongoDetailsAdapter.java   |  19 +++
 .../MongoRyaInstanceDetailsRepository.java      |  19 +++
 .../instance/MongoDetailsAdapterTest.java       |  19 +++
 .../instance/MongoRyaDetailsRepositoryIT.java   |  10 +-
 .../mvm/rya/sail/config/RyaSailFactory.java     | 141 +++++++++++++------
 .../external/PcjIntegrationTestingUtil.java     |  18 ++-
 9 files changed, 347 insertions(+), 55 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/12b8ce6d/common/rya.api/src/main/java/mvm/rya/api/instance/ConfigurationFields.java
----------------------------------------------------------------------
diff --git 
a/common/rya.api/src/main/java/mvm/rya/api/instance/ConfigurationFields.java 
b/common/rya.api/src/main/java/mvm/rya/api/instance/ConfigurationFields.java
new file mode 100644
index 0000000..25212f4
--- /dev/null
+++ b/common/rya.api/src/main/java/mvm/rya/api/instance/ConfigurationFields.java
@@ -0,0 +1,35 @@
+package mvm.rya.api.instance;
+
+/*
+ * 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.
+ */
+
+/**
+ * The possible configuration fields used in a Rya application.
+ *
+ * Note: The fields used here are from ConfigUtils.java, but this project
+ * doesn't have scope.
+ * TODO: Refactor ConfigUtils so this class is not needed.
+ */
+class ConfigurationFields {
+    static final String USE_GEO = "sc.use_geo";
+    static final String USE_FREETEXT = "sc.use_freetext";
+    static final String USE_TEMPORAL = "sc.use_temporal";
+    static final String USE_ENTITY = "sc.use_entity";
+    static final String USE_PCJ = "sc.use_pcj";
+}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/12b8ce6d/common/rya.api/src/main/java/mvm/rya/api/instance/RyaDetailsToConfiguration.java
----------------------------------------------------------------------
diff --git 
a/common/rya.api/src/main/java/mvm/rya/api/instance/RyaDetailsToConfiguration.java
 
b/common/rya.api/src/main/java/mvm/rya/api/instance/RyaDetailsToConfiguration.java
new file mode 100644
index 0000000..8c7ba6e
--- /dev/null
+++ 
b/common/rya.api/src/main/java/mvm/rya/api/instance/RyaDetailsToConfiguration.java
@@ -0,0 +1,54 @@
+package mvm.rya.api.instance;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.log4j.Logger;
+
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+
+/**
+ * Used to fetch {@link RyaDetails} from a {@link RyaDetailsRepository} and
+ * add them to the application's {@link Configuration}.
+ */
+public class RyaDetailsToConfiguration {
+    private static final Logger LOG = 
Logger.getLogger(RyaDetailsToConfiguration.class);
+    /**
+     * Ensures the values in the {@link Configuration} do not conflict with 
the values in {@link RyaDetails}.
+     * If they do, the values in {@link RyaDetails} take precedent and the 
{@link Configuration} value will
+     * be overwritten.
+     *
+     * @param details - The {@link RyaDetails} to add to the {@link 
Configuration}.
+     * @param conf - The {@link Configuration} to add {@link RyaDetails} to.
+     */
+    public static void addRyaDetailsToConfiguration(final RyaDetails details, 
final Configuration conf) {
+        Preconditions.checkNotNull(details);
+        Preconditions.checkNotNull(conf);
+
+        checkAndSet(conf, ConfigurationFields.USE_ENTITY, 
details.getEntityCentricIndexDetails().isEnabled());
+        checkAndSet(conf, ConfigurationFields.USE_FREETEXT, 
details.getFreeTextIndexDetails().isEnabled());
+        checkAndSet(conf, ConfigurationFields.USE_GEO, 
details.getGeoIndexDetails().isEnabled());
+        checkAndSet(conf, ConfigurationFields.USE_TEMPORAL, 
details.getTemporalIndexDetails().isEnabled());
+        checkAndSet(conf, ConfigurationFields.USE_PCJ, 
details.getPCJIndexDetails().isEnabled());
+    }
+
+    /**
+     * Checks to see if the configuration has a value in the specified field.
+     * If the value exists and does not match what is expected by the {@link 
RyaDetails},
+     * an error will be logged and the value will be overwritten.
+     * @param conf - The {@link Configuration} to potentially change.
+     * @param field - The field to check and set.
+     * @param value - The new value in the field (is not used if the value 
doesn't need to be changed).
+     */
+    private static void checkAndSet(final Configuration conf, final String 
field, final boolean value) {
+        final Optional<String> opt = Optional.fromNullable(conf.get(field));
+        if(opt.isPresent()) {
+            final Boolean curVal = new Boolean(opt.get());
+            if(curVal != value) {
+                LOG.error("The user configured value in: " + field + " will be 
overwritten by what has been configured by the admin.");
+                conf.setBoolean(field, value);
+            }
+        } else {
+            conf.setBoolean(field, value);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/12b8ce6d/common/rya.api/src/test/java/mvm/rya/api/instance/RyaDetailsToConfigurationTest.java
----------------------------------------------------------------------
diff --git 
a/common/rya.api/src/test/java/mvm/rya/api/instance/RyaDetailsToConfigurationTest.java
 
b/common/rya.api/src/test/java/mvm/rya/api/instance/RyaDetailsToConfigurationTest.java
new file mode 100644
index 0000000..32b75cf
--- /dev/null
+++ 
b/common/rya.api/src/test/java/mvm/rya/api/instance/RyaDetailsToConfigurationTest.java
@@ -0,0 +1,87 @@
+package mvm.rya.api.instance;
+
+/*
+ * 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.
+ */
+
+import static mvm.rya.api.instance.ConfigurationFields.USE_ENTITY;
+import static mvm.rya.api.instance.ConfigurationFields.USE_FREETEXT;
+import static mvm.rya.api.instance.ConfigurationFields.USE_GEO;
+import static mvm.rya.api.instance.ConfigurationFields.USE_PCJ;
+import static mvm.rya.api.instance.ConfigurationFields.USE_TEMPORAL;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Date;
+
+import org.apache.hadoop.conf.Configuration;
+import org.junit.Test;
+
+import com.google.common.base.Optional;
+
+import mvm.rya.api.instance.RyaDetails.EntityCentricIndexDetails;
+import mvm.rya.api.instance.RyaDetails.FreeTextIndexDetails;
+import mvm.rya.api.instance.RyaDetails.GeoIndexDetails;
+import mvm.rya.api.instance.RyaDetails.JoinSelectivityDetails;
+import mvm.rya.api.instance.RyaDetails.PCJIndexDetails;
+import mvm.rya.api.instance.RyaDetails.PCJIndexDetails.FluoDetails;
+import mvm.rya.api.instance.RyaDetails.PCJIndexDetails.PCJDetails;
+import 
mvm.rya.api.instance.RyaDetails.PCJIndexDetails.PCJDetails.PCJUpdateStrategy;
+import mvm.rya.api.instance.RyaDetails.ProspectorDetails;
+import mvm.rya.api.instance.RyaDetails.TemporalIndexDetails;
+
+public class RyaDetailsToConfigurationTest {
+    @Test
+    public void populateConfigTest() {
+        final RyaDetails.Builder builder = RyaDetails.builder();
+
+        builder.setRyaInstanceName("test_instance")
+            .setRyaVersion("1.2.3.4")
+            .setEntityCentricIndexDetails( new EntityCentricIndexDetails(true) 
)
+            .setGeoIndexDetails( new GeoIndexDetails(true) )
+            .setTemporalIndexDetails( new TemporalIndexDetails(true) )
+            .setFreeTextDetails( new FreeTextIndexDetails(false) )
+            .setPCJIndexDetails(
+                    PCJIndexDetails.builder()
+                        .setEnabled(true)
+                        .setFluoDetails( new 
FluoDetails("test_instance_rya_pcj_updater") )
+                        .addPCJDetails(
+                                PCJDetails.builder()
+                                    .setId("pcj 1")
+                                    .setUpdateStrategy(PCJUpdateStrategy.BATCH)
+                                    .setLastUpdateTime( new Date() )
+                                    .build())
+                        .addPCJDetails(
+                                PCJDetails.builder()
+                                    .setId("pcj 2")
+                                    
.setUpdateStrategy(PCJUpdateStrategy.INCREMENTAL)
+                                    .build())
+                        .build())
+            .setProspectorDetails( new ProspectorDetails(Optional.of(new 
Date())) )
+            .setJoinSelectivityDetails( new 
JoinSelectivityDetails(Optional.of(new Date())) );
+        final Configuration conf = new Configuration();
+        
RyaDetailsToConfiguration.addRyaDetailsToConfiguration(builder.build(), conf);
+
+        //defaults are set to cause the assert to fail
+        assertTrue(conf.getBoolean(USE_ENTITY, false));
+        assertFalse(conf.getBoolean(USE_FREETEXT, true));
+        assertTrue(conf.getBoolean(USE_GEO, false));
+        assertTrue(conf.getBoolean(USE_TEMPORAL, false));
+        assertTrue(conf.getBoolean(USE_PCJ, false));
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/12b8ce6d/dao/mongodb.rya/src/main/java/mvm/rya/mongodb/instance/MongoDetailsAdapter.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/main/java/mvm/rya/mongodb/instance/MongoDetailsAdapter.java
 
b/dao/mongodb.rya/src/main/java/mvm/rya/mongodb/instance/MongoDetailsAdapter.java
index e1662e8..3a6e61d 100644
--- 
a/dao/mongodb.rya/src/main/java/mvm/rya/mongodb/instance/MongoDetailsAdapter.java
+++ 
b/dao/mongodb.rya/src/main/java/mvm/rya/mongodb/instance/MongoDetailsAdapter.java
@@ -1,5 +1,24 @@
 package mvm.rya.mongodb.instance;
 
+/*
+ * 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.
+ */
+
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/12b8ce6d/dao/mongodb.rya/src/main/java/mvm/rya/mongodb/instance/MongoRyaInstanceDetailsRepository.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/main/java/mvm/rya/mongodb/instance/MongoRyaInstanceDetailsRepository.java
 
b/dao/mongodb.rya/src/main/java/mvm/rya/mongodb/instance/MongoRyaInstanceDetailsRepository.java
index 51ba9c2..dfefa8f 100644
--- 
a/dao/mongodb.rya/src/main/java/mvm/rya/mongodb/instance/MongoRyaInstanceDetailsRepository.java
+++ 
b/dao/mongodb.rya/src/main/java/mvm/rya/mongodb/instance/MongoRyaInstanceDetailsRepository.java
@@ -1,5 +1,24 @@
 package mvm.rya.mongodb.instance;
 
+/*
+ * 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.
+ */
+
 import static com.google.common.base.Preconditions.checkNotNull;
 import static java.util.Objects.requireNonNull;
 

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/12b8ce6d/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoDetailsAdapterTest.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoDetailsAdapterTest.java
 
b/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoDetailsAdapterTest.java
index 8628dbd..efcd553 100644
--- 
a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoDetailsAdapterTest.java
+++ 
b/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoDetailsAdapterTest.java
@@ -1,5 +1,24 @@
 package mvm.rya.mongodb.instance;
 
+/*
+ * 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.
+ */
+
 import static org.junit.Assert.assertEquals;
 
 import java.util.Date;

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/12b8ce6d/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java
 
b/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java
index 05dab7e..447eb98 100644
--- 
a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java
+++ 
b/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java
@@ -315,11 +315,15 @@ public class MongoRyaDetailsRepositoryIT {
         repo.initialize(details);
 
         // Create a new state for the details.
+        final RyaDetails wrongOriginal = new RyaDetails.Builder( details )
+            .setTemporalIndexDetails( new TemporalIndexDetails(false) )
+            .build();
+
         final RyaDetails updated = new RyaDetails.Builder( details )
-                .setGeoIndexDetails( new GeoIndexDetails(false) )
-                .build();
+            .setGeoIndexDetails( new GeoIndexDetails(false) )
+            .build();
 
         // Try to execute the update where the old state is not the currently 
stored state.
-        repo.update(updated, updated);
+        repo.update(wrongOriginal, updated);
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/12b8ce6d/extras/indexing/src/main/java/mvm/rya/sail/config/RyaSailFactory.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/main/java/mvm/rya/sail/config/RyaSailFactory.java 
b/extras/indexing/src/main/java/mvm/rya/sail/config/RyaSailFactory.java
index caf4a59..54b872c 100644
--- a/extras/indexing/src/main/java/mvm/rya/sail/config/RyaSailFactory.java
+++ b/extras/indexing/src/main/java/mvm/rya/sail/config/RyaSailFactory.java
@@ -1,13 +1,5 @@
 package mvm.rya.sail.config;
 
-import java.net.UnknownHostException;
-
-import org.apache.accumulo.core.client.AccumuloException;
-import org.apache.accumulo.core.client.AccumuloSecurityException;
-import org.apache.accumulo.core.client.Connector;
-import org.apache.hadoop.conf.Configuration;
-import org.openrdf.sail.Sail;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -27,66 +19,70 @@ import org.openrdf.sail.Sail;
  * under the License.
  */
 
+import java.net.UnknownHostException;
+
+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.hadoop.conf.Configuration;
+import org.openrdf.sail.Sail;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.Lists;
+import com.mongodb.MongoClient;
+import com.mongodb.MongoCredential;
+import com.mongodb.ServerAddress;
 
 import mvm.rya.accumulo.AccumuloRdfConfiguration;
 import mvm.rya.accumulo.AccumuloRyaDAO;
+import mvm.rya.accumulo.instance.AccumuloRyaInstanceDetailsRepository;
 import mvm.rya.api.RdfCloudTripleStoreConfiguration;
+import mvm.rya.api.instance.RyaDetailsRepository.RyaDetailsRepositoryException;
+import mvm.rya.api.instance.RyaDetailsToConfiguration;
 import mvm.rya.api.persist.RyaDAO;
 import mvm.rya.api.persist.RyaDAOException;
 import mvm.rya.indexing.accumulo.ConfigUtils;
 import mvm.rya.mongodb.MongoDBRdfConfiguration;
 import mvm.rya.mongodb.MongoDBRyaDAO;
+import mvm.rya.mongodb.instance.MongoRyaInstanceDetailsRepository;
 import mvm.rya.rdftriplestore.RdfCloudTripleStore;
 import mvm.rya.rdftriplestore.inference.InferenceEngine;
 import mvm.rya.rdftriplestore.inference.InferenceEngineException;
 
 public class RyaSailFactory {
-
-
+    private static final Logger LOG = 
LoggerFactory.getLogger(RyaSailFactory.class);
 
     public static Sail getInstance(final Configuration conf) throws 
AccumuloException,
-    AccumuloSecurityException, RyaDAOException, InferenceEngineException, 
NumberFormatException, UnknownHostException {
-
+        AccumuloSecurityException, RyaDAOException, InferenceEngineException {
         return getRyaSail(conf);
     }
 
-
-
-    private static Sail getRyaSail(final Configuration config) throws 
AccumuloException, AccumuloSecurityException, RyaDAOException, 
InferenceEngineException, NumberFormatException, UnknownHostException {
-
+    private static Sail getRyaSail(final Configuration config) throws 
InferenceEngineException, RyaDAOException, AccumuloException, 
AccumuloSecurityException {
         final RdfCloudTripleStore store = new RdfCloudTripleStore();
-        RyaDAO crdfdao = null;
-        RdfCloudTripleStoreConfiguration conf;
-        if (ConfigUtils.getUseMongo(config)) {
-            conf = new MongoDBRdfConfiguration(config);
-            
conf.setTablePrefix(config.get(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX));
-            ConfigUtils.setIndexers(conf);
-
-            crdfdao = new MongoDBRyaDAO((MongoDBRdfConfiguration)conf);
-            crdfdao.init();
-
-            conf.setDisplayQueryPlan(true);
-            store.setRyaDAO(crdfdao);
+        final RyaDAO dao;
+        final RdfCloudTripleStoreConfiguration rdfConfig;
+
+        final String user = config.get(ConfigUtils.CLOUDBASE_USER);
+        final String pswd = config.get(ConfigUtils.CLOUDBASE_PASSWORD);
+        final String instance = 
config.get(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX);
+        if(ConfigUtils.getUseMongo(config)) {
+            rdfConfig = new MongoDBRdfConfiguration(config);
+            final MongoClient client = 
updateMongoConfig((MongoDBRdfConfiguration) rdfConfig, user, pswd, instance);
+            dao = getMongoDAO((MongoDBRdfConfiguration)rdfConfig, client);
         } else {
-            final Connector connector = ConfigUtils.getConnector(config);
-            crdfdao = new AccumuloRyaDAO();
-            ((AccumuloRyaDAO)crdfdao).setConnector(connector);
-
-            conf = new AccumuloRdfConfiguration(config);
-            
conf.setTablePrefix(config.get(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX));
 // sets
-                                                                               
                // TablePrefixLayoutStrategy
-            ConfigUtils.setIndexers(conf);
-            conf.setDisplayQueryPlan(true);
-
-            crdfdao.setConf(conf);
-            crdfdao.init();
-            store.setRyaDAO(crdfdao);
+            rdfConfig = new AccumuloRdfConfiguration(config);
+            updateAccumuloConfig((AccumuloRdfConfiguration) rdfConfig, user, 
pswd, instance);
+            dao = getAccumuloDAO((AccumuloRdfConfiguration)rdfConfig);
         }
+        rdfConfig.setTablePrefix(instance);
 
-        if (conf.isInfer()){
+        if (rdfConfig.isInfer()){
             final InferenceEngine inferenceEngine = new InferenceEngine();
-            inferenceEngine.setConf(conf);
-            inferenceEngine.setRyaDAO(crdfdao);
+            inferenceEngine.setConf(rdfConfig);
+            inferenceEngine.setRyaDAO(dao);
             inferenceEngine.init();
             store.setInferenceEngine(inferenceEngine);
         }
@@ -94,6 +90,61 @@ public class RyaSailFactory {
         return store;
     }
 
+    private static RyaDAO getMongoDAO(final MongoDBRdfConfiguration config, 
final MongoClient client) throws RyaDAOException {
+        MongoDBRyaDAO dao = null;
+        ConfigUtils.setIndexers(config);
+        if(client != null) {
+            dao = new MongoDBRyaDAO(config, client);
+        } else {
+            try {
+                dao = new MongoDBRyaDAO(config);
+            } catch (NumberFormatException | UnknownHostException e) {
+                throw new RyaDAOException("Unable to connect to mongo at the 
configured location.", e);
+            }
+        }
+        dao.init();
+        return dao;
+    }
+
+    private static RyaDAO getAccumuloDAO(final AccumuloRdfConfiguration 
config) throws AccumuloException, AccumuloSecurityException, RyaDAOException {
+        final Connector connector = ConfigUtils.getConnector(config);
+        final AccumuloRyaDAO dao = new AccumuloRyaDAO();
+        dao.setConnector(connector);
+
+        ConfigUtils.setIndexers(config);
+        config.setDisplayQueryPlan(true);
+
+        dao.setConf(config);
+        dao.init();
+        return dao;
+    }
 
+    private static MongoClient updateMongoConfig(final MongoDBRdfConfiguration 
config, final String user, final String pswd, final String instance) throws 
RyaDAOException {
+        final MongoCredential creds = MongoCredential.createCredential(user, 
instance, pswd.toCharArray());
+        final String hostname = config.getMongoInstance();
+        final int port = Integer.parseInt(config.getMongoPort());
+
+        MongoClient client = null;
+        try {
+            client = new MongoClient(new ServerAddress(hostname, port), 
Lists.newArrayList(creds));
+            final MongoRyaInstanceDetailsRepository ryaDetailsRepo = new 
MongoRyaInstanceDetailsRepository(client, config.getCollectionName());
+            
RyaDetailsToConfiguration.addRyaDetailsToConfiguration(ryaDetailsRepo.getRyaInstanceDetails(),
 config);
+        } catch(final RyaDetailsRepositoryException e) {
+            LOG.info("Instance does not have a rya details collection, 
skipping.", e);
+        } catch (final UnknownHostException ue) {
+            throw new RyaDAOException("Unable to connect to mongo at the 
configured location.", ue);
+        }
+        return client;
+    }
 
-}
+    private static void updateAccumuloConfig(final AccumuloRdfConfiguration 
config, final String user, final String pswd, final String instance) throws 
AccumuloException, AccumuloSecurityException {
+        try {
+            final PasswordToken pswdToken = new PasswordToken(pswd);
+            final Instance accInst = ConfigUtils.getInstance(config);
+            final AccumuloRyaInstanceDetailsRepository ryaDetailsRepo = new 
AccumuloRyaInstanceDetailsRepository(accInst.getConnector(user, pswdToken), 
instance);
+            
RyaDetailsToConfiguration.addRyaDetailsToConfiguration(ryaDetailsRepo.getRyaInstanceDetails(),
 config);
+        } catch(final RyaDetailsRepositoryException e) {
+            LOG.info("Instance does not have a rya details collection, 
skipping.", e);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/12b8ce6d/extras/indexing/src/test/java/mvm/rya/indexing/external/PcjIntegrationTestingUtil.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/mvm/rya/indexing/external/PcjIntegrationTestingUtil.java
 
b/extras/indexing/src/test/java/mvm/rya/indexing/external/PcjIntegrationTestingUtil.java
index 7646084..c11c7e2 100644
--- 
a/extras/indexing/src/test/java/mvm/rya/indexing/external/PcjIntegrationTestingUtil.java
+++ 
b/extras/indexing/src/test/java/mvm/rya/indexing/external/PcjIntegrationTestingUtil.java
@@ -101,9 +101,7 @@ public class PcjIntegrationTestingUtil {
 
         final AccumuloRdfConfiguration pcjConf = new 
AccumuloRdfConfiguration();
         pcjConf.set(ConfigUtils.USE_PCJ, "true");
-        pcjConf.set(ConfigUtils.USE_MOCK_INSTANCE, "true");
-        pcjConf.set(ConfigUtils.CLOUDBASE_INSTANCE, instance);
-        pcjConf.setTablePrefix(tablePrefix);
+        populateTestConfig(instance, tablePrefix, pcjConf);
 
         final Sail pcjSail = RyaSailFactory.getInstance(pcjConf);
         final SailRepository pcjRepo = new SailRepository(pcjSail);
@@ -117,16 +115,22 @@ public class PcjIntegrationTestingUtil {
             NumberFormatException, UnknownHostException {
 
         final AccumuloRdfConfiguration nonPcjConf = new 
AccumuloRdfConfiguration();
-        nonPcjConf.set(ConfigUtils.USE_MOCK_INSTANCE, "true");
-        nonPcjConf.set(ConfigUtils.CLOUDBASE_INSTANCE, instance);
-        nonPcjConf.setTablePrefix(tablePrefix);
-
+        populateTestConfig(instance, tablePrefix, nonPcjConf);
         final Sail nonPcjSail = RyaSailFactory.getInstance(nonPcjConf);
         final SailRepository nonPcjRepo = new SailRepository(nonPcjSail);
         nonPcjRepo.initialize();
         return nonPcjRepo;
     }
 
+    private static void populateTestConfig(final String instance, final String 
tablePrefix, final AccumuloRdfConfiguration config) {
+        config.set(ConfigUtils.USE_MOCK_INSTANCE, "true");
+        config.set(ConfigUtils.CLOUDBASE_INSTANCE, instance);
+        config.set(ConfigUtils.CLOUDBASE_USER, "test_user");
+        config.set(ConfigUtils.CLOUDBASE_PASSWORD, "pswd");
+        config.set(ConfigUtils.CLOUDBASE_ZOOKEEPERS, "localhost");
+        config.setTablePrefix(tablePrefix);
+    }
+
     public static void closeAndShutdown(final SailRepositoryConnection 
connection,
             final SailRepository repo) throws RepositoryException {
         connection.close();

Reply via email to