RYA-104 Removed the MongoCommand class.

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

Branch: refs/heads/master
Commit: 6bb7146e642d7ce7e11c42ae2f9706b3ae359391
Parents: c3c262d
Author: kchilton2 <kevin.e.chil...@gmail.com>
Authored: Wed Dec 27 19:50:57 2017 -0500
Committer: kchilton2 <kevin.e.chil...@gmail.com>
Committed: Fri Jan 5 16:48:40 2018 -0500

----------------------------------------------------------------------
 .../rya/api/client/mongo/MongoCommand.java      | 62 --------------
 .../client/mongo/MongoConnectionDetails.java    | 72 ++++++++--------
 .../client/mongo/MongoExecuteSparqlQuery.java   | 34 +++-----
 .../client/mongo/MongoGetInstanceDetails.java   | 15 ++--
 .../rya/api/client/mongo/MongoInstall.java      | 89 +++++++++++---------
 .../api/client/mongo/MongoInstanceExists.java   | 13 +--
 .../api/client/mongo/MongoListInstances.java    | 20 +++--
 .../api/client/mongo/MongoLoadStatements.java   | 36 ++++----
 .../client/mongo/MongoLoadStatementsFile.java   | 25 +++---
 .../api/client/mongo/MongoRyaClientFactory.java | 24 +++---
 .../rya/api/client/mongo/MongoUninstall.java    | 17 ++--
 .../client/mongo/MongoExecuteSparqlQueryIT.java | 18 ++--
 .../client/mongo/MongoGetInstanceDetailsIT.java | 26 +++---
 .../rya/api/client/mongo/MongoInstallIT.java    | 19 +++--
 .../api/client/mongo/MongoInstanceExistsIT.java | 17 +---
 .../api/client/mongo/MongoListInstancesIT.java  | 22 +++--
 .../client/mongo/MongoLoadStatementsFileIT.java | 24 +++---
 .../api/client/mongo/MongoLoadStatementsIT.java | 21 ++---
 .../rya/api/client/mongo/MongoUninstallIT.java  | 28 +++---
 .../apache/rya/shell/RyaConnectionCommands.java | 63 +++++++-------
 .../apache/rya/shell/RyaPromptProviderTest.java |  5 +-
 21 files changed, 300 insertions(+), 350 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6bb7146e/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoCommand.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoCommand.java
 
b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoCommand.java
deleted file mode 100644
index 443fec7..0000000
--- 
a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoCommand.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.rya.api.client.mongo;
-
-import static java.util.Objects.requireNonNull;
-
-import com.mongodb.MongoClient;
-
-import edu.umd.cs.findbugs.annotations.DefaultAnnotation;
-import edu.umd.cs.findbugs.annotations.NonNull;
-
-/**
- * An abstract class that holds onto Mongo access information. Extend this
- * when implementing a command that interacts with Mongo.
- */
-@DefaultAnnotation(NonNull.class)
-public abstract class MongoCommand {
-
-    private final MongoConnectionDetails connectionDetails;
-    private final MongoClient client;
-
-    /**
-     * Constructs an instance of {@link MongoCommand}.
-     *
-     * @param connectionDetails - Details about the values that were used to 
create the client. (not null)
-     * @param client - Provides programmatic access to the instance of Mongo 
that hosts Rya instance. (not null)
-     */
-    public MongoCommand(final MongoConnectionDetails connectionDetails, final 
MongoClient client) {
-        this.connectionDetails = requireNonNull(connectionDetails);
-        this.client = requireNonNull(client);
-    }
-
-    /**
-     * @return Details about the values that were used to create the connector 
to mongo.
-     */
-    public MongoConnectionDetails getMongoConnectionDetails() {
-        return connectionDetails;
-    }
-
-    /**
-     * @param client - Provides programmatic access to the instance of Mongo 
that hosts Rya instance.
-     */
-    public MongoClient getClient() {
-        return client;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6bb7146e/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoConnectionDetails.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoConnectionDetails.java
 
b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoConnectionDetails.java
index cf8abc1..b48bb9f 100644
--- 
a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoConnectionDetails.java
+++ 
b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoConnectionDetails.java
@@ -24,9 +24,6 @@ import java.util.Optional;
 
 import org.apache.rya.indexing.accumulo.ConfigUtils;
 import org.apache.rya.mongodb.MongoDBRdfConfiguration;
-import org.apache.rya.mongodb.StatefulMongoDBRdfConfiguration;
-
-import com.mongodb.MongoClient;
 
 import edu.umd.cs.findbugs.annotations.DefaultAnnotation;
 import edu.umd.cs.findbugs.annotations.NonNull;
@@ -38,43 +35,31 @@ import edu.umd.cs.findbugs.annotations.NonNull;
 public class MongoConnectionDetails {
 
     private final Optional<String> username;
-    private final Optional<char[]> userPass;
+    private final Optional<char[]> password;
     private final String hostname;
     private final int port;
 
     /**
      * Constructs an instance of {@link MongoConnectionDetails}.
      *
-     * @param username - The username that was used to establish the 
connection.
-     * @param password - The password that was used to establish the 
connection.
      * @param hostname - The hostname of the Mongo DB that was connected to. 
(not null)
      * @param port - The port of the Mongo DB that was connected to.
+     * @param username - The username that was used to establish the connection
+     *   when performing administrative operations. (not null)
+     * @param password - The password that was used to establish the connection
+     *   when performing administrative operations. (not null)
      */
-    public MongoConnectionDetails( //
-            final String username, //
-            final char[] userPass, //
-            final String hostname, //
-            final int port) {
-        this.username = Optional.ofNullable(username);
-        this.userPass = Optional.ofNullable(userPass);
+    public MongoConnectionDetails(
+            final String hostname,
+            final int port,
+            final Optional<String> username,
+            final Optional<char[]> password) {
         this.hostname = requireNonNull(hostname);
         this.port = port;
+        this.username = requireNonNull(username);
+        this.password = requireNonNull(password);
     }
 
-    // /**
-    // * @return The username that was used to establish the connection.
-    // */
-    // public String getUsername() {
-    // return this.username;
-    // }
-    //
-    // /**
-    // * @return The password that was used to establish the connection.
-    // */
-    // public char[] getPassword() {
-    // return this.userPass;
-    // }
-
     /**
      * @return The hostname of the Mongo DB that was connected to.
      */
@@ -89,18 +74,27 @@ public class MongoConnectionDetails {
         return port;
     }
 
+     /**
+      * @return The username that was used to establish the connection when 
performing administrative operations.
+      */
+     public Optional<String> getUsername() {
+         return this.username;
+     }
+
+     /**
+      * @return The password that was used to establish the connection when 
performing administrative operations.
+      */
+     public Optional<char[]> getPassword() {
+         return password;
+     }
+
     /**
      * Create a {@link MongoDBRdfConfiguration} that is using this object's 
values.
      *
-     * @param ryaInstanceName
-     *            - The Rya instance to connect to.
+     * @param ryaInstanceName - The Rya instance to connect to. (not null)
      * @return Constructs a new {@link MongoDBRdfConfiguration} object with 
values from this object.
      */
     public MongoDBRdfConfiguration build(final String ryaInstanceName) {
-        return build(ryaInstanceName, null);
-    }
-
-    public StatefulMongoDBRdfConfiguration build(final String ryaInstanceName, 
final MongoClient mongoClient) {
         // Note, we don't use the MongoDBRdfConfigurationBuilder here because 
it explicitly sets
         // authorizations and visibilities to an empty string if they are not 
set on the builder.
         // If they are null in the MongoRdfConfiguration object, it may do the 
right thing.
@@ -108,13 +102,19 @@ public class MongoConnectionDetails {
         conf.setBoolean(ConfigUtils.USE_MONGO, true);
         conf.setMongoHostname(hostname);
         conf.setMongoPort("" + port);
-        // conf.setMongoUser(username);
-        // conf.setMongoPassword(new String(userPass));
         conf.setMongoDBName(ryaInstanceName);
 
+        if(username.isPresent()) {
+            conf.setMongoUser(username.get());
+        }
+
+        if(password.isPresent()) {
+            conf.setMongoPassword( new String(password.get()) );
+        }
+
         // Both of these are ways to configure the collection prefixes.
         //TODO these should not be explicitly set
         conf.setTablePrefix("rya");
-        return new StatefulMongoDBRdfConfiguration(conf, mongoClient);
+        return conf;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6bb7146e/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQuery.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQuery.java
 
b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQuery.java
index 681e344..d920b30 100644
--- 
a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQuery.java
+++ 
b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQuery.java
@@ -27,7 +27,6 @@ import java.text.DecimalFormat;
 
 import org.apache.accumulo.core.client.AccumuloException;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
-import org.apache.log4j.Logger;
 import org.apache.rya.api.client.ExecuteSparqlQuery;
 import org.apache.rya.api.client.InstanceDoesNotExistException;
 import org.apache.rya.api.client.InstanceExists;
@@ -49,8 +48,6 @@ import org.openrdf.repository.sail.SailRepositoryConnection;
 import org.openrdf.sail.Sail;
 import org.openrdf.sail.SailException;
 
-import com.mongodb.MongoClient;
-
 import edu.umd.cs.findbugs.annotations.DefaultAnnotation;
 import edu.umd.cs.findbugs.annotations.NonNull;
 
@@ -58,20 +55,22 @@ import edu.umd.cs.findbugs.annotations.NonNull;
  * Execute a sparql query on mongo Rya.
  */
 @DefaultAnnotation(NonNull.class)
-public class MongoExecuteSparqlQuery extends MongoCommand implements 
ExecuteSparqlQuery {
+public class MongoExecuteSparqlQuery implements ExecuteSparqlQuery {
 
-    private static final Logger log = 
Logger.getLogger(MongoExecuteSparqlQuery.class);
+    private final MongoConnectionDetails connectionDetails;
     private final InstanceExists instanceExists;
-    
+
     /**
      * Constructs an instance.
      *
-     * @param connectionDetails - Details about the values that were used to 
create the client. (not null)
-     * @param connector - Provides programmatic access to the instance of 
Mongo that hosts Rya instances. (not null)
+     * @param connectionDetails - Details to connect to the server. (not null)
+     * @param instanceExists - The interactor used to check if a Rya instance 
exists. (not null)
      */
-    public MongoExecuteSparqlQuery(final MongoConnectionDetails 
connectionDetails, final MongoClient client) {
-        super(connectionDetails, client);
-        instanceExists = new MongoInstanceExists(connectionDetails, client);
+    public MongoExecuteSparqlQuery(
+            final MongoConnectionDetails connectionDetails,
+            final MongoInstanceExists instanceExists) {
+        this.connectionDetails = requireNonNull(connectionDetails);
+        this.instanceExists = requireNonNull(instanceExists);
     }
     @Override
     public String executeSparqlQuery(final String ryaInstanceName, final 
String sparqlQuery) throws InstanceDoesNotExistException, RyaClientException {
@@ -89,12 +88,10 @@ public class MongoExecuteSparqlQuery extends MongoCommand 
implements ExecuteSpar
         SailRepository sailRepo = null;
         SailRepositoryConnection sailRepoConn = null;
         // Get a Sail object that is connected to the Rya instance.
-        final MongoDBRdfConfiguration ryaConf = 
getMongoConnectionDetails().build(ryaInstanceName, getClient());
-        // ryaConf.setFlush(false); //Accumulo version said: RYA-327 should 
address this hardcoded value.
+        final MongoDBRdfConfiguration ryaConf = 
connectionDetails.build(ryaInstanceName);
         try {
             sail = RyaSailFactory.getInstance(ryaConf);
-        } catch (SailException | RyaDAOException | InferenceEngineException | 
AccumuloException
-                        | AccumuloSecurityException e) {
+        } catch (SailException | RyaDAOException | InferenceEngineException | 
AccumuloException | AccumuloSecurityException e) {
             throw new RyaClientException("While getting a sail instance.", e);
         }
 
@@ -116,15 +113,10 @@ public class MongoExecuteSparqlQuery extends MongoCommand 
implements ExecuteSpar
             sb.append(new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
             final String seconds = new 
DecimalFormat("0.0##").format((System.currentTimeMillis() - start) / 1000.0);
-            sb.append("Retrieved ").append(handler.getCount()).append(" 
results in ").append(seconds).append(
-                            " seconds.");
+            sb.append("Retrieved ").append(handler.getCount()).append(" 
results in ").append(seconds).append(" seconds.");
 
             return sb.toString();
 
-            // } catch (final SailException | AccumuloException | 
AccumuloSecurityException | RyaDAOException
-            // | InferenceEngineException e) {
-            // throw new RyaClientException("A problem connecting to the Rya 
instance named '" + ryaInstanceName
-            // + "' has caused the query to fail.", e);
         } catch (final MalformedQueryException e) {
             throw new RyaClientException("There was a problem parsing the 
supplied query.", e);
         } catch (final QueryEvaluationException | 
TupleQueryResultHandlerException e) {

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6bb7146e/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetails.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetails.java
 
b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetails.java
index b61e107..ade7990 100644
--- 
a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetails.java
+++ 
b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetails.java
@@ -40,19 +40,20 @@ import edu.umd.cs.findbugs.annotations.NonNull;
  * An Mongo implementation of the {@link GetInstanceDetails} command.
  */
 @DefaultAnnotation(NonNull.class)
-public class MongoGetInstanceDetails extends MongoCommand implements 
GetInstanceDetails {
+public class MongoGetInstanceDetails implements GetInstanceDetails {
 
+    private final MongoClient adminClient;
     private final InstanceExists instanceExists;
 
     /**
      * Constructs an instance of {@link MongoGetInstanceDetails}.
      *
-     * @param connectionDetails - Details about the values that were used to 
create the connector to the cluster. (not null)
-     * @param connector - Provides programmatic access to the instance of 
Mongo that hosts Rya instances. (not null)
+     * @param adminClient - Provides programmatic access to the instance of 
Mongo that hosts Rya instances. (not null)
+     * @param instanceExists - The interactor used to check if a Rya instance 
exists. (not null)
      */
-    public MongoGetInstanceDetails(final MongoConnectionDetails 
connectionDetails, final MongoClient client) {
-        super(connectionDetails, client);
-        instanceExists = new MongoInstanceExists(connectionDetails, client);
+    public MongoGetInstanceDetails(final MongoClient adminClient, 
MongoInstanceExists instanceExists) {
+        this.adminClient = requireNonNull(adminClient);
+        this.instanceExists = requireNonNull(instanceExists);
     }
 
     @Override
@@ -65,7 +66,7 @@ public class MongoGetInstanceDetails extends MongoCommand 
implements GetInstance
         }
 
         // If the instance has details, then return them.
-        final RyaDetailsRepository detailsRepo = new 
MongoRyaInstanceDetailsRepository(getClient(), ryaInstanceName);
+        final RyaDetailsRepository detailsRepo = new 
MongoRyaInstanceDetailsRepository(adminClient, ryaInstanceName);
         try {
             return Optional.of(detailsRepo.getRyaInstanceDetails());
         } catch (final NotInitializedException e) {

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6bb7146e/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstall.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstall.java
 
b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstall.java
index 177355d..51bd4bf 100644
--- 
a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstall.java
+++ 
b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstall.java
@@ -22,6 +22,8 @@ import static java.util.Objects.requireNonNull;
 
 import java.util.Date;
 
+import org.apache.accumulo.core.client.AccumuloException;
+import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.rya.api.client.Install;
 import org.apache.rya.api.client.InstanceExists;
 import org.apache.rya.api.client.RyaClientException;
@@ -35,12 +37,14 @@ import 
org.apache.rya.api.instance.RyaDetails.TemporalIndexDetails;
 import org.apache.rya.api.instance.RyaDetailsRepository;
 import 
org.apache.rya.api.instance.RyaDetailsRepository.AlreadyInitializedException;
 import 
org.apache.rya.api.instance.RyaDetailsRepository.RyaDetailsRepositoryException;
-import org.apache.rya.api.layout.TablePrefixLayoutStrategy;
 import org.apache.rya.api.persist.RyaDAOException;
 import org.apache.rya.indexing.accumulo.ConfigUtils;
-import org.apache.rya.mongodb.MongoDBRyaDAO;
-import org.apache.rya.mongodb.StatefulMongoDBRdfConfiguration;
+import org.apache.rya.mongodb.MongoDBRdfConfiguration;
 import org.apache.rya.mongodb.instance.MongoRyaInstanceDetailsRepository;
+import org.apache.rya.rdftriplestore.inference.InferenceEngineException;
+import org.apache.rya.sail.config.RyaSailFactory;
+import org.openrdf.sail.Sail;
+import org.openrdf.sail.SailException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -52,35 +56,43 @@ import edu.umd.cs.findbugs.annotations.NonNull;
 
 /**
  * An Mongo implementation of the {@link Install} command.
- * Note about the scheme:
- * the Rya instance is used as the mongoDBName.
- * the Rya triples, instance details, and Rya indexes each get their own 
collection.
- * the triples collection name is always constant: "rya_triples" (or? 
ryaInstance+"_triples")
- * This means that each Mongo DB can have only one Rya instance.
- * A Collection corresponds to an Accumulo table.
+ * </p>
+ * Notes about the scheme:
+ * <ul>
+ *   <li>The Rya instance name is used as the DB name in Mongo.</li>
+ *   <li>The Rya triples, instance details, and Rya indexes each get their own 
collection.</li>
+ *   <li>Each Mongo DB can have only one Rya instance.</li>
+ * </ul>
  */
 @DefaultAnnotation(NonNull.class)
-public class MongoInstall extends MongoCommand implements Install {
+public class MongoInstall implements Install {
 
     private static final Logger log = 
LoggerFactory.getLogger(MongoInstall.class);
 
+    private final MongoConnectionDetails connectionDetails;
+    private final MongoClient adminClient;
     private final InstanceExists instanceExists;
 
     /**
      * Constructs an instance of {@link MongoInstall}.
      *
-     * @param connectionDetails - Details about the values that were used to 
create the connector to the cluster. (not null)
-     * @param connector - Provides programmatic access to the instance of 
Mongo that hosts Rya instances. (not null)
+     * @param connectionDetails - Details to connect to the server. (not null)
+     * @param adminClient - Provides programmatic access to the instance of 
Mongo that hosts Rya instances. (not null)
+     * @param instanceExists - The interactor used to check if a Rya instance 
exists. (not null)
      */
-    public MongoInstall(final MongoConnectionDetails connectionDetails, final 
MongoClient client) {
-        super(connectionDetails, client);
-        instanceExists = new MongoInstanceExists(connectionDetails, client);
+    public MongoInstall(
+            final MongoConnectionDetails connectionDetails,
+            final MongoClient adminClient,
+            final MongoInstanceExists instanceExists) {
+        this.connectionDetails = requireNonNull(connectionDetails);
+        this.adminClient = requireNonNull(adminClient);
+        this.instanceExists = requireNonNull(instanceExists);
     }
 
     @Override
     public void install(final String instanceName, final InstallConfiguration 
installConfig) throws DuplicateInstanceNameException, RyaClientException {
-        requireNonNull(instanceName, "instanceName required.");
-        requireNonNull(installConfig, "installConfig required.");
+        requireNonNull(instanceName);
+        requireNonNull(installConfig);
 
         // Check to see if a Rya instance has already been installed with this 
name.
         if (instanceExists.exists(instanceName)) {
@@ -88,32 +100,28 @@ public class MongoInstall extends MongoCommand implements 
Install {
         }
 
         // Initialize the Rya Details table.
-        RyaDetails details;
+        final RyaDetails ryaDetails;
         try {
-            details = initializeRyaDetails(instanceName, installConfig);
+            ryaDetails = initializeRyaDetails(instanceName, installConfig);
         } catch (final AlreadyInitializedException e) {
             // This can only happen if somebody else installs an instance of 
Rya with the name between the check and now.
-            throw new DuplicateInstanceNameException("An instance of Rya has 
already been installed to this Rya storage "//
-                    + "with the name '" + instanceName//
-                    + "'. Try again with a different name.");
+            throw new DuplicateInstanceNameException(
+                    "An instance of Rya has already been installed to this Rya 
storage " +
+                    "with the name '" + instanceName + "'. Try again with a 
different name.");
         } catch (final RyaDetailsRepositoryException e) {
             throw new RyaClientException("The RyaDetails couldn't be 
initialized. Details: " + e.getMessage(), e);
         }
 
-        // Initialize the rest of the tables used by the Rya instance.
-        final StatefulMongoDBRdfConfiguration ryaConfig = 
makeRyaConfig(getMongoConnectionDetails(), details, getClient());
+        // Initialize the rest of the collections used by the Rya instance.
+        final MongoDBRdfConfiguration ryaConfig = 
makeRyaConfig(connectionDetails, ryaDetails);
         try {
-            final MongoDBRyaDAO ryaDao = new MongoDBRyaDAO();
-            ryaDao.setConf(ryaConfig);
-
-            final TablePrefixLayoutStrategy tls = new 
TablePrefixLayoutStrategy();
-            tls.setTablePrefix(instanceName);
-            ryaConfig.setTableLayoutStrategy(tls);
-
-            ryaDao.init();
-        } catch (final RyaDAOException e) {
-            throw new RyaClientException("Could not initialize all of the 
tables for the new Rya instance. " //
-                    + "This instance may be left in a bad state.", e);
+            final Sail ryaSail = RyaSailFactory.getInstance(ryaConfig);
+            ryaSail.shutDown();
+        } catch (final AccumuloException | AccumuloSecurityException | 
RyaDAOException | InferenceEngineException e) {
+            throw new RyaClientException("Could not initialize all of the 
tables for the new Rya instance. " +
+                    "This instance may be left in a bad state.", e);
+        } catch (final SailException e) {
+            throw new RyaClientException("Problem shutting down the Sail 
object used to install Rya.", e);
         }
     }
 
@@ -137,7 +145,7 @@ public class MongoInstall extends MongoCommand implements 
Install {
     private RyaDetails initializeRyaDetails(
             final String instanceName,
             final InstallConfiguration installConfig) throws 
AlreadyInitializedException, RyaDetailsRepositoryException {
-        final RyaDetailsRepository detailsRepo = new 
MongoRyaInstanceDetailsRepository(getClient(), instanceName);
+        final RyaDetailsRepository detailsRepo = new 
MongoRyaInstanceDetailsRepository(adminClient, instanceName);
 
         // Build the PCJ Index details. [not supported in mongo]
         final PCJIndexDetails.Builder pcjDetailsBuilder = 
PCJIndexDetails.builder().setEnabled(false);
@@ -152,7 +160,7 @@ public class MongoInstall extends MongoCommand implements 
Install {
                 .setTemporalIndexDetails(new 
TemporalIndexDetails(installConfig.isTemporalIndexEnabled()))
                 .setFreeTextDetails(new 
FreeTextIndexDetails(installConfig.isFreeTextIndexEnabled()))//
 
-                // Entity centric indexing is not supported in Mongo Db.
+                // Entity centric indexing is not supported in Mongo DB.
                 .setEntityCentricIndexDetails(new 
EntityCentricIndexDetails(false))
 
                 .setPCJIndexDetails(pcjDetailsBuilder)
@@ -174,13 +182,14 @@ public class MongoInstall extends MongoCommand implements 
Install {
      *
      * @param connectionDetails - Indicates how to connect to Mongo. (not null)
      * @param ryaDetails - Indicates what needs to be installed. (not null)
-     * @param mongoClient
      * @return A Rya Configuration object that can be used to perform the 
install.
      */
-    private static StatefulMongoDBRdfConfiguration makeRyaConfig(final 
MongoConnectionDetails connectionDetails, final RyaDetails ryaDetails, final 
MongoClient mongoClient) {
+    private static MongoDBRdfConfiguration makeRyaConfig(
+            final MongoConnectionDetails connectionDetails,
+            final RyaDetails ryaDetails) {
         // Start with a configuration that is built using the connection 
details.
 
-        final StatefulMongoDBRdfConfiguration conf = 
connectionDetails.build(ryaDetails.getRyaInstanceName(), mongoClient);
+        final MongoDBRdfConfiguration conf = 
connectionDetails.build(ryaDetails.getRyaInstanceName());
 
         // The Mongo implementation of Rya does not currently support PCJs.
         if(ryaDetails.getPCJIndexDetails().isEnabled()) {

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6bb7146e/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstanceExists.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstanceExists.java
 
b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstanceExists.java
index a00079a..5961367 100644
--- 
a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstanceExists.java
+++ 
b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstanceExists.java
@@ -31,22 +31,23 @@ import edu.umd.cs.findbugs.annotations.NonNull;
  * An Mongo implementation of the {@link InstanceExists} command.
  */
 @DefaultAnnotation(NonNull.class)
-public class MongoInstanceExists extends MongoCommand implements 
InstanceExists {
+public class MongoInstanceExists implements InstanceExists {
+
+    private final MongoClient adminClient;
 
     /**
      * Constructs an insatnce of {@link MongoInstanceExists}.
      *
-     * @param connectionDetails - Details about the values that were used to 
create the connector to the cluster. (not null)
-     * @param connector - Provides programmatic access to the instance of 
Mongo that hosts Rya instances. (not null)
+     * @param adminClient - Provides programmatic access to the instance of 
Mongo that hosts Rya instances. (not null)
      */
-    public MongoInstanceExists(final MongoConnectionDetails connectionDetails, 
final MongoClient client) {
-        super(connectionDetails, client);
+    public MongoInstanceExists(final MongoClient adminClient) {
+        this.adminClient = requireNonNull(adminClient);
     }
 
     @Override
     public boolean exists(final String instanceName) {
         requireNonNull( instanceName );
-        for(final String dbName : getClient().listDatabaseNames()) {
+        for(final String dbName : adminClient.listDatabaseNames()) {
             if(dbName.equals(instanceName)) {
                 return true;
             }

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6bb7146e/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoListInstances.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoListInstances.java
 
b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoListInstances.java
index bf29848..1154700 100644
--- 
a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoListInstances.java
+++ 
b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoListInstances.java
@@ -18,6 +18,8 @@
  */
 package org.apache.rya.api.client.mongo;
 
+import static java.util.Objects.requireNonNull;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -34,25 +36,25 @@ import edu.umd.cs.findbugs.annotations.NonNull;
  * An Mongo implementation of the {@link ListInstances} command.
  */
 @DefaultAnnotation(NonNull.class)
-public class MongoListInstances extends MongoCommand implements ListInstances {
+public class MongoListInstances implements ListInstances {
+
+    private final MongoClient adminClient;
+
     /**
      * Constructs an instance of {@link MongoListInstances}.
      *
-     * @param connectionDetails - Details about the values that were used to 
create the connector to the cluster. (not null)
-     * @param connector - Provides programmatic access to the instance of 
Mongo that hosts Rya instances. (not null)
+     * @param adminClient - Provides programmatic access to the instance of 
Mongo that hosts Rya instances. (not null)
      */
-    public MongoListInstances(final MongoConnectionDetails connectionDetails, 
final MongoClient client) {
-        super(connectionDetails, client);
+    public MongoListInstances(final MongoClient adminClient) {
+        this.adminClient = requireNonNull(adminClient);
     }
 
     @Override
     public List<String> listInstances() throws RyaClientException {
-        final MongoClient client = super.getClient();
-
         // Each database that contains an instance details collection is a Rya 
Instance.
         final List<String> ryaInstances = new ArrayList<>();
-        for (final String db : getClient().listDatabaseNames()) {
-            for(final String collection : 
client.getDatabase(db).listCollectionNames()) {
+        for (final String db : adminClient.listDatabaseNames()) {
+            for(final String collection : 
adminClient.getDatabase(db).listCollectionNames()) {
                 if 
(collection.equals(MongoRyaInstanceDetailsRepository.INSTANCE_DETAILS_COLLECTION_NAME))
 {
                     ryaInstances.add(db);
                     break;

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6bb7146e/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatements.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatements.java
 
b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatements.java
index 9a32355..37f1d95 100644
--- 
a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatements.java
+++ 
b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatements.java
@@ -22,7 +22,6 @@ import static java.util.Objects.requireNonNull;
 
 import org.apache.accumulo.core.client.AccumuloException;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
-import org.apache.log4j.Logger;
 import org.apache.rya.api.client.InstanceDoesNotExistException;
 import org.apache.rya.api.client.InstanceExists;
 import org.apache.rya.api.client.LoadStatements;
@@ -38,8 +37,6 @@ import org.openrdf.repository.sail.SailRepositoryConnection;
 import org.openrdf.sail.Sail;
 import org.openrdf.sail.SailException;
 
-import com.mongodb.MongoClient;
-
 import edu.umd.cs.findbugs.annotations.DefaultAnnotation;
 import edu.umd.cs.findbugs.annotations.NonNull;
 
@@ -47,44 +44,42 @@ import edu.umd.cs.findbugs.annotations.NonNull;
  * An Mongo implementation of the {@link LoadStatements} command.
  */
 @DefaultAnnotation(NonNull.class)
-public class MongoLoadStatements extends MongoCommand implements 
LoadStatements {
-    private static final Logger log = 
Logger.getLogger(MongoLoadStatements.class);
+public class MongoLoadStatements implements LoadStatements {
+
+    private final MongoConnectionDetails connectionDetails;
     private final InstanceExists instanceExists;
 
     /**
      * Constructs an instance.
      *
      * @param connectionDetails - Details to connect to the server. (not null)
-     * @param client - Provides programmatic access to the instance of Mongo
-     *            that hosts Rya instance. (not null)
+     * @param instanceExists - The interactor used to check if a Rya instance 
exists. (not null)
      */
-    public MongoLoadStatements(MongoConnectionDetails connectionDetails, 
MongoClient client) {
-        super(connectionDetails, client);
-        instanceExists = new MongoInstanceExists(connectionDetails, client);
+    public MongoLoadStatements(final MongoConnectionDetails connectionDetails, 
final MongoInstanceExists instanceExists) {
+        this.connectionDetails = requireNonNull(connectionDetails);
+        this.instanceExists = requireNonNull(instanceExists);
     }
 
     @Override
-    public void loadStatements(String ryaInstanceName, Iterable<? extends 
Statement> statements) throws InstanceDoesNotExistException, RyaClientException 
{
+    public void loadStatements(final String ryaInstanceName, final Iterable<? 
extends Statement> statements) throws InstanceDoesNotExistException, 
RyaClientException {
         requireNonNull(ryaInstanceName);
         requireNonNull(statements);
 
         // Ensure the Rya Instance exists.
         if (!instanceExists.exists(ryaInstanceName)) {
-            throw new InstanceDoesNotExistException(String.format("There is no 
Rya instance named '%s'.",
-                            ryaInstanceName));
+            throw new InstanceDoesNotExistException(String.format("There is no 
Rya instance named '%s'.", ryaInstanceName));
         }
 
         Sail sail = null;
         SailRepository sailRepo = null;
         SailRepositoryConnection sailRepoConn = null;
+
         // Get a Sail object that is connected to the Rya instance.
-        final MongoDBRdfConfiguration ryaConf = 
getMongoConnectionDetails().build(ryaInstanceName, getClient());
-        // ryaConf.setFlush(false); //Accumulo version said: RYA-327 should 
address this hardcoded value.
+        final MongoDBRdfConfiguration ryaConf = 
connectionDetails.build(ryaInstanceName);
         try {
             sail = RyaSailFactory.getInstance(ryaConf);
-        } catch (SailException | RyaDAOException | InferenceEngineException | 
AccumuloException
-                        | AccumuloSecurityException e) {
-            throw new RyaClientException("While getting a sail instance.", e);
+        } catch (SailException | RyaDAOException | InferenceEngineException | 
AccumuloException | AccumuloSecurityException e) {
+            throw new RyaClientException("Could not load statements into Rya 
because of a problem while creating the Sail object.", e);
         }
 
         // Load the file.
@@ -92,9 +87,8 @@ public class MongoLoadStatements extends MongoCommand 
implements LoadStatements
         try {
             sailRepoConn = sailRepo.getConnection();
             sailRepoConn.add(statements);
-        } catch (RepositoryException e) {
+        } catch (final RepositoryException e) {
             throw new RyaClientException("While getting a connection and 
adding statements.", e);
         }
     }
-
-}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6bb7146e/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFile.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFile.java
 
b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFile.java
index e57b6cb..00a7c61 100644
--- 
a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFile.java
+++ 
b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFile.java
@@ -25,7 +25,6 @@ import java.nio.file.Path;
 
 import org.apache.accumulo.core.client.AccumuloException;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
-import org.apache.log4j.Logger;
 import org.apache.rya.api.client.InstanceDoesNotExistException;
 import org.apache.rya.api.client.InstanceExists;
 import org.apache.rya.api.client.LoadStatementsFile;
@@ -42,8 +41,6 @@ import org.openrdf.rio.RDFParseException;
 import org.openrdf.sail.Sail;
 import org.openrdf.sail.SailException;
 
-import com.mongodb.MongoClient;
-
 import edu.umd.cs.findbugs.annotations.DefaultAnnotation;
 import edu.umd.cs.findbugs.annotations.NonNull;
 
@@ -51,25 +48,26 @@ import edu.umd.cs.findbugs.annotations.NonNull;
  * An Mongo implementation of the {@link LoadStatementsFile} command.
  */
 @DefaultAnnotation(NonNull.class)
-public class MongoLoadStatementsFile extends MongoCommand implements 
LoadStatementsFile {
-    private static final Logger log = 
Logger.getLogger(MongoLoadStatementsFile.class);
+public class MongoLoadStatementsFile implements LoadStatementsFile {
 
+    private final MongoConnectionDetails connectionDetails;
     private final InstanceExists instanceExists;
 
     /**
      * Constructs an instance of {@link MongoListInstances}.
      *
      * @param connectionDetails - Details to connect to the server. (not null)
-     * @param client - Provides programmatic access to the instance of Mongo
-     *            that hosts Rya instance. (not null)
+     * @param instanceExists - The interactor used to check if a Rya instance 
exists. (not null)
      */
-    public MongoLoadStatementsFile(MongoConnectionDetails connectionDetails, 
MongoClient client) {
-        super(connectionDetails, client);
-        instanceExists = new MongoInstanceExists(connectionDetails, client);
+    public MongoLoadStatementsFile(
+            final MongoConnectionDetails connectionDetails,
+            final MongoInstanceExists instanceExists) {
+        this.connectionDetails = requireNonNull(connectionDetails);
+        this.instanceExists = requireNonNull(instanceExists);
     }
 
     @Override
-    public void loadStatements(String ryaInstanceName, Path statementsFile, 
RDFFormat format) throws InstanceDoesNotExistException, RyaClientException {
+    public void loadStatements(final String ryaInstanceName, final Path 
statementsFile, final RDFFormat format) throws InstanceDoesNotExistException, 
RyaClientException {
         requireNonNull(ryaInstanceName);
         requireNonNull(statementsFile);
         requireNonNull(format);
@@ -83,8 +81,7 @@ public class MongoLoadStatementsFile extends MongoCommand 
implements LoadStateme
         SailRepository sailRepo = null;
         SailRepositoryConnection sailRepoConn = null;
         // Get a Sail object that is connected to the Rya instance.
-        final MongoDBRdfConfiguration ryaConf = 
getMongoConnectionDetails().build(ryaInstanceName, getClient());
-        // ryaConf.setFlush(false); //Accumulo version said: RYA-327 should 
address this hardcoded value.
+        final MongoDBRdfConfiguration ryaConf = 
connectionDetails.build(ryaInstanceName);
         try {
             sail = RyaSailFactory.getInstance(ryaConf);
         } catch (SailException | RyaDAOException | InferenceEngineException | 
AccumuloException | AccumuloSecurityException e) {
@@ -100,4 +97,4 @@ public class MongoLoadStatementsFile extends MongoCommand 
implements LoadStateme
             throw new RyaClientException("While getting a connection and 
adding statements from a file.", e);
         }
     }
-}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6bb7146e/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoRyaClientFactory.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoRyaClientFactory.java
 
b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoRyaClientFactory.java
index f4d68e7..55c6e8a 100644
--- 
a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoRyaClientFactory.java
+++ 
b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoRyaClientFactory.java
@@ -41,32 +41,34 @@ public class MongoRyaClientFactory {
      * Rya that is hosted by a MongoDB server.
      *
      * @param connectionDetails - Details about the values that were used to 
connect to Mongo DB. (not null)
-     * @param mongoClient - The MongoDB client the commands will use. (not 
null)
+     * @param adminClient - The MongoDB client the administrative commands 
will use. (not null)
      * @return The initialized commands.
      */
     public static RyaClient build(
             final MongoConnectionDetails connectionDetails,
-            final MongoClient mongoClient) {
+            final MongoClient adminClient) {
         requireNonNull(connectionDetails);
-        requireNonNull(mongoClient);
+        requireNonNull(adminClient);
 
         // Build the RyaCommands option with the initialized commands.
+        final MongoInstanceExists instanceExists = new 
MongoInstanceExists(adminClient);
+
         return new RyaClient(
-                new MongoInstall(connectionDetails, mongoClient),
+                new MongoInstall(connectionDetails, adminClient, 
instanceExists),
                 Optional.empty(),
                 Optional.empty(),
                 Optional.empty(),
                 Optional.empty(),
                 Optional.empty(),
                 Optional.empty(),
-                new MongoGetInstanceDetails(connectionDetails, mongoClient),
-                new MongoInstanceExists(connectionDetails, mongoClient),
-                new MongoListInstances(connectionDetails, mongoClient),
+                new MongoGetInstanceDetails(adminClient, instanceExists),
+                instanceExists,
+                new MongoListInstances(adminClient),
                 Optional.empty(),
                 Optional.empty(),
-                new MongoUninstall(connectionDetails, mongoClient),
-                new MongoLoadStatements(connectionDetails, mongoClient),
-                new MongoLoadStatementsFile(connectionDetails, mongoClient),
-                new MongoExecuteSparqlQuery(connectionDetails, mongoClient));
+                new MongoUninstall(adminClient, instanceExists),
+                new MongoLoadStatements(connectionDetails, instanceExists),
+                new MongoLoadStatementsFile(connectionDetails, instanceExists),
+                new MongoExecuteSparqlQuery(connectionDetails, 
instanceExists));
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6bb7146e/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoUninstall.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoUninstall.java
 
b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoUninstall.java
index 979f93d..a6fbb4c 100644
--- 
a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoUninstall.java
+++ 
b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoUninstall.java
@@ -18,6 +18,8 @@
  */
 package org.apache.rya.api.client.mongo;
 
+import static java.util.Objects.requireNonNull;
+
 import org.apache.rya.api.client.InstanceDoesNotExistException;
 import org.apache.rya.api.client.InstanceExists;
 import org.apache.rya.api.client.RyaClientException;
@@ -33,19 +35,20 @@ import edu.umd.cs.findbugs.annotations.NonNull;
  * An Mongo implementation of the {@link Uninstall} command.
  */
 @DefaultAnnotation(NonNull.class)
-public class MongoUninstall extends MongoCommand implements Uninstall {
+public class MongoUninstall implements Uninstall {
 
+    private final MongoClient adminClient;
     private final InstanceExists instanceExists;
 
     /**
      * Constructs an instance of {@link MongoUninstall}.
      *
-     * @param connectionDetails - Details about the values that were used to 
create the connector to the cluster. (not null)
-     * @param connector - Provides programmatic access to the instance of 
Mongo that hosts Rya instances. (not null)
+     * @param adminClient- Provides programmatic access to the instance of 
Mongo that hosts Rya instances. (not null)
+     * @param instanceExists - The interactor used to check if a Rya instance 
exists. (not null)
      */
-    public MongoUninstall(final MongoConnectionDetails connectionDetails, 
final MongoClient client) {
-        super(connectionDetails, client);
-        instanceExists = new MongoInstanceExists(connectionDetails, client);
+    public MongoUninstall(final MongoClient adminClient, final 
MongoInstanceExists instanceExists) {
+        this.adminClient = requireNonNull(adminClient);
+        this.instanceExists = requireNonNull(instanceExists);
     }
 
     @Override
@@ -54,7 +57,7 @@ public class MongoUninstall extends MongoCommand implements 
Uninstall {
             if (!instanceExists.exists(ryaInstanceName)) {
                 throw new InstanceDoesNotExistException("The database '" + 
ryaInstanceName + "' does not exist.");
             }
-            getClient().dropDatabase(ryaInstanceName);
+            adminClient.dropDatabase(ryaInstanceName);
         } catch (final MongoException e) {
             throw new RyaClientException("Failed to uninstall '" + 
ryaInstanceName + "' " + e.getLocalizedMessage(), e);
         }

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6bb7146e/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQueryIT.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQueryIT.java
 
b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQueryIT.java
index 4e28e21..0be9e8b 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQueryIT.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQueryIT.java
@@ -45,7 +45,7 @@ public class MongoExecuteSparqlQueryIT extends MongoTestBase {
     public void ExecuteSparqlQuery_exec() throws MongoException, 
DuplicateInstanceNameException, RyaClientException {
         // Install an instance of Rya.
         final MongoConnectionDetails connectionDetails = 
getConnectionDetails();
-        final RyaClient ryaClient = 
MongoRyaClientFactory.build(connectionDetails, conf.getMongoClient());
+        final RyaClient ryaClient = 
MongoRyaClientFactory.build(connectionDetails, getMongoClient());
         // install rya and load some data
         final List<Statement> loadMe = installAndLoad();
         // Here comes the method to test
@@ -77,7 +77,7 @@ public class MongoExecuteSparqlQueryIT extends MongoTestBase {
                 .setEnableGeoIndex(false)
                 .build();
         final MongoConnectionDetails connectionDetails = 
getConnectionDetails();
-        final RyaClient ryaClient = 
MongoRyaClientFactory.build(connectionDetails, conf.getMongoClient());
+        final RyaClient ryaClient = 
MongoRyaClientFactory.build(connectionDetails, getMongoClient());
         final Install install = ryaClient.getInstall();
         install.install(conf.getMongoDBName(), installConfig);
         // next, load data
@@ -104,15 +104,15 @@ public class MongoExecuteSparqlQueryIT extends 
MongoTestBase {
         return loadMe;
     }
 
-    /**
-     * @return copy from conf to MongoConnectionDetails
-     */
     private MongoConnectionDetails getConnectionDetails() {
+        final java.util.Optional<char[]> password = conf.getMongoPassword() != 
null ?
+                java.util.Optional.of(conf.getMongoPassword().toCharArray()) :
+                    java.util.Optional.empty();
+
         return new MongoConnectionDetails(
-                conf.getMongoUser(),
-                null,//conf.getMongoPassword().toCharArray(),
                 conf.getMongoHostname(),
-                Integer.parseInt(conf.getMongoPort()));
-
+                Integer.parseInt(conf.getMongoPort()),
+                java.util.Optional.ofNullable(conf.getMongoUser()),
+                password);
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6bb7146e/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetailsIT.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetailsIT.java
 
b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetailsIT.java
index af09b49..e68ec49 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetailsIT.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetailsIT.java
@@ -28,6 +28,7 @@ import org.apache.rya.api.client.GetInstanceDetails;
 import org.apache.rya.api.client.Install;
 import org.apache.rya.api.client.Install.InstallConfiguration;
 import org.apache.rya.api.client.InstanceDoesNotExistException;
+import org.apache.rya.api.client.RyaClient;
 import org.apache.rya.api.client.RyaClientException;
 import org.apache.rya.api.instance.RyaDetails;
 import org.apache.rya.api.instance.RyaDetails.EntityCentricIndexDetails;
@@ -59,11 +60,12 @@ public class MongoGetInstanceDetailsIT extends 
MongoTestBase {
                 .setEnablePcjIndex(true)
                 .build();
 
-        final Install install = new MongoInstall(getConnectionDetails(), 
getMongoClient());
+        final RyaClient ryaClient = 
MongoRyaClientFactory.build(getConnectionDetails(), getMongoClient());
+        final Install install = ryaClient.getInstall();
         install.install(instanceName, installConfig);
 
         // Verify the correct details were persisted.
-        final GetInstanceDetails getInstanceDetails = new 
MongoGetInstanceDetails(getConnectionDetails(), getMongoClient());
+        final GetInstanceDetails getInstanceDetails = 
ryaClient.getGetInstanceDetails();
         final Optional<RyaDetails> details = 
getInstanceDetails.getDetails(instanceName);
 
         final RyaDetails expectedDetails = RyaDetails.builder()
@@ -93,7 +95,8 @@ public class MongoGetInstanceDetailsIT extends MongoTestBase {
 
     @Test(expected = InstanceDoesNotExistException.class)
     public void getDetails_instanceDoesNotExist() throws MongoException, 
RyaClientException {
-        final GetInstanceDetails getInstanceDetails = new 
MongoGetInstanceDetails(getConnectionDetails(), conf.getMongoClient());
+        final RyaClient ryaClient = 
MongoRyaClientFactory.build(getConnectionDetails(), getMongoClient());
+        final GetInstanceDetails getInstanceDetails = 
ryaClient.getGetInstanceDetails();
         getInstanceDetails.getDetails("instance_name");
     }
 
@@ -105,18 +108,21 @@ public class MongoGetInstanceDetailsIT extends 
MongoTestBase {
         
getMongoClient().getDatabase(instanceName).createCollection("rya_triples");
 
         // Verify that the operation returns empty.
-        final GetInstanceDetails getInstanceDetails = new 
MongoGetInstanceDetails(getConnectionDetails(), getMongoClient());
+        final RyaClient ryaClient = 
MongoRyaClientFactory.build(getConnectionDetails(), getMongoClient());
+        final GetInstanceDetails getInstanceDetails = 
ryaClient.getGetInstanceDetails();
         final Optional<RyaDetails> details = 
getInstanceDetails.getDetails(instanceName);
         assertFalse( details.isPresent() );
     }
 
-    /**
-     * @return copy from conf to MongoConnectionDetails
-     */
     private MongoConnectionDetails getConnectionDetails() {
-        return new MongoConnectionDetails(conf.getMongoUser(),
-                null,//conf.getMongoPassword().toCharArray(),
+        final java.util.Optional<char[]> password = conf.getMongoPassword() != 
null ?
+                java.util.Optional.of(conf.getMongoPassword().toCharArray()) :
+                    java.util.Optional.empty();
+
+        return new MongoConnectionDetails(
                 conf.getMongoHostname(),
-                Integer.parseInt(conf.getMongoPort()));
+                Integer.parseInt(conf.getMongoPort()),
+                java.util.Optional.ofNullable(conf.getMongoUser()),
+                password);
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6bb7146e/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstallIT.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstallIT.java
 
b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstallIT.java
index 2725b99..16991c7 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstallIT.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstallIT.java
@@ -25,6 +25,7 @@ import static org.junit.Assert.assertTrue;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Optional;
 
 import org.apache.rya.api.client.Install;
 import org.apache.rya.api.client.Install.DuplicateInstanceNameException;
@@ -49,7 +50,7 @@ public class MongoInstallIT extends MongoTestBase {
         final MongoConnectionDetails connectionDetails = 
getConnectionDetails();
 
         // Check that the instance does not exist.
-        final InstanceExists instanceExists = new 
MongoInstanceExists(connectionDetails, getMongoClient());
+        final InstanceExists instanceExists = new 
MongoInstanceExists(getMongoClient());
         assertFalse(instanceExists.exists(ryaInstance));
 
         // Install an instance of Rya with all the valid options turned on.
@@ -59,9 +60,8 @@ public class MongoInstallIT extends MongoTestBase {
                 .setEnableTemporalIndex(true)
                 .build();
 
-        final RyaClient ryaClient = 
MongoRyaClientFactory.build(connectionDetails, conf.getMongoClient());
+        final RyaClient ryaClient = 
MongoRyaClientFactory.build(connectionDetails, getMongoClient());
         final Install install = ryaClient.getInstall();
-        assertTrue("ryaClient should give mongoInstall", install instanceof 
MongoInstall);
         install.install(ryaInstance, installConfig);
 
         // Check that the instance exists.
@@ -87,7 +87,8 @@ public class MongoInstallIT extends MongoTestBase {
 
         final MongoConnectionDetails connectionDetails = 
getConnectionDetails();
 
-        final Install install = new MongoInstall(connectionDetails, 
getMongoClient());
+        final RyaClient ryaClient = 
MongoRyaClientFactory.build(connectionDetails, getMongoClient());
+        final Install install = ryaClient.getInstall();
         install.install(instanceName, installConfig);
 
         // Install it again throws expected error.
@@ -95,10 +96,14 @@ public class MongoInstallIT extends MongoTestBase {
     }
 
     private MongoConnectionDetails getConnectionDetails() {
+        final Optional<char[]> password = conf.getMongoPassword() != null ?
+                Optional.of(conf.getMongoPassword().toCharArray()) :
+                    Optional.empty();
+
         return new MongoConnectionDetails(
-                conf.getMongoUser(),
-                null,//conf.getMongoPassword().toCharArray(),
                 conf.getMongoHostname(),
-                Integer.parseInt(conf.getMongoPort()));
+                Integer.parseInt(conf.getMongoPort()),
+                Optional.ofNullable(conf.getMongoUser()),
+                password);
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6bb7146e/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstanceExistsIT.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstanceExistsIT.java
 
b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstanceExistsIT.java
index 3ebfc68..a2e8e25 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstanceExistsIT.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstanceExistsIT.java
@@ -43,7 +43,7 @@ public class MongoInstanceExistsIT extends MongoTestBase {
         
client.getDatabase(instanceName).createCollection(MongoRyaInstanceDetailsRepository.INSTANCE_DETAILS_COLLECTION_NAME);
 
         // Verify the command reports the instance exists.
-        final MongoInstanceExists instanceExists = new 
MongoInstanceExists(getConnectionDetails(), client);
+        final MongoInstanceExists instanceExists = new 
MongoInstanceExists(getMongoClient());
         assertTrue( instanceExists.exists(instanceName) );
     }
 
@@ -56,25 +56,14 @@ public class MongoInstanceExistsIT extends MongoTestBase {
         client.getDatabase(instanceName).createCollection("rya_triples");
 
         // Verify the command reports the instance exists.
-        final MongoInstanceExists instanceExists = new 
MongoInstanceExists(getConnectionDetails(), client);
+        final MongoInstanceExists instanceExists = new 
MongoInstanceExists(getMongoClient());
         assertTrue( instanceExists.exists(instanceName) );
     }
 
     @Test
     public void doesNotExist() throws MongoException {
         // Verify the command reports the instance does not exists.
-        final MongoInstanceExists instanceExists = new 
MongoInstanceExists(getConnectionDetails(), getMongoClient());
+        final MongoInstanceExists instanceExists = new 
MongoInstanceExists(getMongoClient());
         assertFalse( instanceExists.exists("some_instance") );
     }
-
-    /**
-     * @return copy from conf to MongoConnectionDetails
-     */
-    private MongoConnectionDetails getConnectionDetails() {//
-        return new MongoConnectionDetails(
-                conf.getMongoUser(),
-                null,//conf.getMongoPassword().toCharArray(),
-                conf.getMongoHostname(),
-                Integer.parseInt(conf.getMongoPort()));
-    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6bb7146e/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoListInstancesIT.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoListInstancesIT.java
 
b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoListInstancesIT.java
index 0628935..c66670e 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoListInstancesIT.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoListInstancesIT.java
@@ -22,11 +22,13 @@ import static org.junit.Assert.assertEquals;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.Optional;
 
 import org.apache.rya.api.client.Install;
 import org.apache.rya.api.client.Install.DuplicateInstanceNameException;
 import org.apache.rya.api.client.Install.InstallConfiguration;
 import org.apache.rya.api.client.ListInstances;
+import org.apache.rya.api.client.RyaClient;
 import org.apache.rya.api.client.RyaClientException;
 import org.apache.rya.mongodb.MongoTestBase;
 import org.junit.Test;
@@ -42,13 +44,14 @@ public class MongoListInstancesIT extends MongoTestBase {
     @Test
     public void listInstances_hasRyaDetailsTable() throws MongoException, 
DuplicateInstanceNameException, RyaClientException {
         // Install a few instances of Rya using the install command.
-        final Install install = new MongoInstall(getConnectionDetails(), 
getMongoClient());
+        final RyaClient ryaClient = 
MongoRyaClientFactory.build(getConnectionDetails(), getMongoClient());
+        final Install install = ryaClient.getInstall();
         install.install("instance1_", InstallConfiguration.builder().build());
         install.install("instance2_", InstallConfiguration.builder().build());
         install.install("instance3_", InstallConfiguration.builder().build());
 
         // Fetch the list and verify it matches what is expected.
-        final ListInstances listInstances = new 
MongoListInstances(getConnectionDetails(), getMongoClient());
+        final ListInstances listInstances = new 
MongoListInstances(getMongoClient());
         final List<String> instances = listInstances.listInstances();
         Collections.sort(instances);
 
@@ -56,14 +59,15 @@ public class MongoListInstancesIT extends MongoTestBase {
         assertEquals(expected, instances);
     }
 
-    /**
-     * @return copy from conf to MongoConnectionDetails
-     */
-    private MongoConnectionDetails getConnectionDetails() {//
+    private MongoConnectionDetails getConnectionDetails() {
+        final Optional<char[]> password = conf.getMongoPassword() != null ?
+                Optional.of(conf.getMongoPassword().toCharArray()) :
+                    Optional.empty();
+
         return new MongoConnectionDetails(
-                conf.getMongoUser(),
-                null,//conf.getMongoPassword().toCharArray(),
                 conf.getMongoHostname(),
-                Integer.parseInt(conf.getMongoPort()));
+                Integer.parseInt(conf.getMongoPort()),
+                Optional.ofNullable(conf.getMongoUser()),
+                password);
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6bb7146e/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFileIT.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFileIT.java
 
b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFileIT.java
index e3ad902..0f84fea 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFileIT.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFileIT.java
@@ -45,7 +45,7 @@ public class MongoLoadStatementsFileIT extends MongoTestBase {
     @Test(expected = InstanceDoesNotExistException.class)
     public void instanceDoesNotExist() throws Exception {
         org.apache.log4j.BasicConfigurator.configure();
-        final RyaClient ryaClient = 
MongoRyaClientFactory.build(getConnectionDetails(), conf.getMongoClient());
+        final RyaClient ryaClient = 
MongoRyaClientFactory.build(getConnectionDetails(), getMongoClient());
         
ryaClient.getLoadStatementsFile().loadStatements(getConnectionDetails().getHostname(),
 Paths.get("src/test/resources/example.ttl"), RDFFormat.TURTLE);
     }
 
@@ -61,7 +61,7 @@ public class MongoLoadStatementsFileIT extends MongoTestBase {
                 .setEnableGeoIndex(false)
                 .build();
         final MongoConnectionDetails connectionDetails = 
getConnectionDetails();
-        final RyaClient ryaClient = 
MongoRyaClientFactory.build(connectionDetails, conf.getMongoClient());
+        final RyaClient ryaClient = 
MongoRyaClientFactory.build(connectionDetails, getMongoClient());
         final Install install = ryaClient.getInstall();
         install.install(conf.getMongoDBName(), installConfig);
 
@@ -81,7 +81,6 @@ public class MongoLoadStatementsFileIT extends MongoTestBase {
 
         final List<Statement> statements = new ArrayList<>();
         final MongoCursor<Document> x = getRyaCollection().find().iterator();
-        System.out.println("getRyaCollection().count()=" + 
getRyaCollection().count());
         while (x.hasNext()) {
             final Document y = x.next();
             
statements.add(vf.createStatement(vf.createURI(y.getString("subject")), 
vf.createURI(y.getString("predicate")), vf.createURI(y.getString("object"))));
@@ -90,18 +89,15 @@ public class MongoLoadStatementsFileIT extends 
MongoTestBase {
         assertEquals("All rows in DB should match expected rows:", expected, 
statements);
     }
 
-    private boolean isRyaMetadataStatement(final ValueFactory vf, final 
Statement statement) {
-        return 
statement.getPredicate().equals(vf.createURI("urn:org.apache.rya/2012/05#version"))
 || 
statement.getPredicate().equals(vf.createURI("urn:org.apache.rya/2012/05#rts"));
-    }
-
-    /**
-     * @return copy from conf to MongoConnectionDetails
-     */
     private MongoConnectionDetails getConnectionDetails() {
+        final java.util.Optional<char[]> password = conf.getMongoPassword() != 
null ?
+                java.util.Optional.of(conf.getMongoPassword().toCharArray()) :
+                    java.util.Optional.empty();
+
         return new MongoConnectionDetails(
-                conf.getMongoUser(),
-                null,//conf.getMongoPassword().toCharArray(),
                 conf.getMongoHostname(),
-                Integer.parseInt(conf.getMongoPort()));
+                Integer.parseInt(conf.getMongoPort()),
+                java.util.Optional.ofNullable(conf.getMongoUser()),
+                password);
     }
-}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6bb7146e/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsIT.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsIT.java
 
b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsIT.java
index 9dfb71b..47b953d 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsIT.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsIT.java
@@ -42,18 +42,17 @@ import com.mongodb.client.MongoCursor;
  * Integration tests the methods of {@link MongoLoadStatements}.
  */
 public class MongoLoadStatementsIT extends MongoTestBase {
+
     @Test(expected = InstanceDoesNotExistException.class)
     public void instanceDoesNotExist() throws Exception {
         org.apache.log4j.BasicConfigurator.configure();
-        final RyaClient ryaClient = 
MongoRyaClientFactory.build(getConnectionDetails(), conf.getMongoClient());
+        final RyaClient ryaClient = 
MongoRyaClientFactory.build(getConnectionDetails(), getMongoClient());
         // Skip the install step to create error causing situation.
         
ryaClient.getLoadStatements().loadStatements(getConnectionDetails().getHostname(),
 makeTestStatements());
     }
 
     /**
      * Pass a list of statements to our loadStatement class.
-     *
-     * @throws Exception
      */
     @Test
     public void loadTurtleFile() throws Exception {
@@ -99,7 +98,7 @@ public class MongoLoadStatementsIT extends MongoTestBase {
                 .setEnableGeoIndex(false)
                 .build();
         final MongoConnectionDetails connectionDetails = 
getConnectionDetails();
-        final RyaClient ryaClient = 
MongoRyaClientFactory.build(connectionDetails, conf.getMongoClient());
+        final RyaClient ryaClient = 
MongoRyaClientFactory.build(connectionDetails, getMongoClient());
         final Install install = ryaClient.getInstall();
         install.install(conf.getMongoDBName(), installConfig);
         // next, load data
@@ -109,14 +108,16 @@ public class MongoLoadStatementsIT extends MongoTestBase {
                 loadMe);
         return loadMe;
     }
-    /**
-     * @return copy from conf to MongoConnectionDetails
-     */
+
     private MongoConnectionDetails getConnectionDetails() {
+        final java.util.Optional<char[]> password = conf.getMongoPassword() != 
null ?
+                java.util.Optional.of(conf.getMongoPassword().toCharArray()) :
+                    java.util.Optional.empty();
+
         return new MongoConnectionDetails(
-                conf.getMongoUser(),
-                null,//conf.getMongoPassword().toCharArray(),
                 conf.getMongoHostname(),
-                Integer.parseInt(conf.getMongoPort()));
+                Integer.parseInt(conf.getMongoPort()),
+                java.util.Optional.ofNullable(conf.getMongoUser()),
+                password);
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6bb7146e/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoUninstallIT.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoUninstallIT.java
 
b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoUninstallIT.java
index 69e3eec..6c9d4fd 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoUninstallIT.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoUninstallIT.java
@@ -21,10 +21,13 @@ package org.apache.rya.api.client.mongo;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
+import java.util.Optional;
+
 import org.apache.rya.api.client.Install;
 import org.apache.rya.api.client.Install.InstallConfiguration;
 import org.apache.rya.api.client.InstanceDoesNotExistException;
 import org.apache.rya.api.client.InstanceExists;
+import org.apache.rya.api.client.RyaClient;
 import org.apache.rya.api.client.RyaClientException;
 import org.apache.rya.api.client.Uninstall;
 import org.apache.rya.mongodb.MongoTestBase;
@@ -43,15 +46,16 @@ public class MongoUninstallIT extends MongoTestBase {
         final String instanceName = "testInstance_";
         final InstallConfiguration installConfig = 
InstallConfiguration.builder().setEnableTableHashPrefix(true).setEnableEntityCentricIndex(true).setEnableFreeTextIndex(true).setEnableTemporalIndex(true).setEnablePcjIndex(true).setEnableGeoIndex(true).setFluoPcjAppName("fluo_app_name").build();
 
-        final Install install = new MongoInstall(getConnectionDetails(), 
conf.getMongoClient());
+        final RyaClient ryaClient = 
MongoRyaClientFactory.build(getConnectionDetails(), getMongoClient());
+        final Install install = ryaClient.getInstall();
         install.install(instanceName, installConfig);
 
         // Show that the instance exists.
-        final InstanceExists instanceExists = new 
MongoInstanceExists(getConnectionDetails(), conf.getMongoClient());
+        final InstanceExists instanceExists = ryaClient.getInstanceExists();
         assertTrue( instanceExists.exists(instanceName) );
 
         // Uninstall the instance
-        final Uninstall uninstall = new MongoUninstall(getConnectionDetails(), 
conf.getMongoClient());
+        final Uninstall uninstall = ryaClient.getUninstall();
         uninstall.uninstall(instanceName);
 
         // Check that the instance no longer exists.
@@ -64,18 +68,20 @@ public class MongoUninstallIT extends MongoTestBase {
         final String instanceName = "testInstance_";
 
         // Uninstall the instance
-        final Uninstall uninstall = new MongoUninstall(getConnectionDetails(), 
conf.getMongoClient());
+        final RyaClient ryaClient = 
MongoRyaClientFactory.build(getConnectionDetails(), getMongoClient());
+        final Uninstall uninstall = ryaClient.getUninstall();
         uninstall.uninstall(instanceName);
     }
 
-    /**
-     * @return copy from conf to MongoConnectionDetails
-     */
-    private MongoConnectionDetails getConnectionDetails() {//
+    private MongoConnectionDetails getConnectionDetails() {
+        final Optional<char[]> password = conf.getMongoPassword() != null ?
+                Optional.of(conf.getMongoPassword().toCharArray()) :
+                    Optional.empty();
+
         return new MongoConnectionDetails(
-                conf.getMongoUser(),
-                null,//conf.getMongoPassword().toCharArray(),
                 conf.getMongoHostname(),
-                Integer.parseInt(conf.getMongoPort()));
+                Integer.parseInt(conf.getMongoPort()),
+                Optional.ofNullable(conf.getMongoUser()),
+                password);
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6bb7146e/extras/shell/src/main/java/org/apache/rya/shell/RyaConnectionCommands.java
----------------------------------------------------------------------
diff --git 
a/extras/shell/src/main/java/org/apache/rya/shell/RyaConnectionCommands.java 
b/extras/shell/src/main/java/org/apache/rya/shell/RyaConnectionCommands.java
index 9a55460..4cb14fa 100644
--- a/extras/shell/src/main/java/org/apache/rya/shell/RyaConnectionCommands.java
+++ b/extras/shell/src/main/java/org/apache/rya/shell/RyaConnectionCommands.java
@@ -22,6 +22,7 @@ import static java.util.Objects.requireNonNull;
 
 import java.io.IOException;
 import java.nio.CharBuffer;
+import java.util.Optional;
 
 import org.apache.accumulo.core.client.AccumuloException;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
@@ -33,7 +34,6 @@ import 
org.apache.rya.api.client.accumulo.AccumuloConnectionDetails;
 import org.apache.rya.api.client.accumulo.AccumuloRyaClientFactory;
 import org.apache.rya.api.client.mongo.MongoConnectionDetails;
 import org.apache.rya.api.client.mongo.MongoRyaClientFactory;
-import org.apache.rya.mongodb.MongoDBRdfConfiguration;
 import org.apache.rya.shell.SharedShellState.ConnectionState;
 import org.apache.rya.shell.SharedShellState.StorageType;
 import org.apache.rya.shell.util.ConnectorFactory;
@@ -45,11 +45,7 @@ import org.springframework.shell.core.annotation.CliCommand;
 import org.springframework.shell.core.annotation.CliOption;
 import org.springframework.stereotype.Component;
 
-import com.google.common.base.Optional;
-import com.google.common.collect.Lists;
 import com.mongodb.MongoClient;
-import com.mongodb.MongoCredential;
-import com.mongodb.ServerAddress;
 
 /**
  * Spring Shell commands that manage the connection that is used by the shell.
@@ -108,7 +104,7 @@ public class RyaConnectionCommands implements CommandMarker 
{
     @CliCommand(value = PRINT_CONNECTION_DETAILS_CMD, help = "Print 
information about the Shell's Rya storage connection.")
     public String printConnectionDetails() {
         // Check to see if the shell is connected to any storages.
-        final Optional<StorageType> storageType = 
sharedState.getShellState().getStorageType();
+        final com.google.common.base.Optional<StorageType> storageType = 
sharedState.getShellState().getStorageType();
         if(!storageType.isPresent()) {
             return "The shell is not connected to anything.";
         }
@@ -124,10 +120,17 @@ public class RyaConnectionCommands implements 
CommandMarker {
 
         case MONGO:
             final MongoConnectionDetails mongoDetails = 
sharedState.getShellState().getMongoDetails().get();
-            return "The shell is connected to an instance of MongoDB using the 
following parameters:\n" +
-            "    Hostname: "  + mongoDetails.getHostname() + "\n" +
-            "    Port: " + mongoDetails.getPort() + "\n";
-            //+"    Username:" + mongoDetails.getUsername();
+
+            StringBuilder message = new StringBuilder()
+                    .append("The shell is connected to an instance of MongoDB 
using the following parameters:\\n")
+                    .append("    Hostname: "  + mongoDetails.getHostname() + 
"\n")
+                    .append("    Port: " + mongoDetails.getPort() + "\n");
+
+            if(mongoDetails.getUsername().isPresent()) {
+                message.append("    Username:" + 
mongoDetails.getUsername().get());
+            }
+
+            return message.toString();
 
         default:
             throw new RuntimeException("Unrecognized StorageType: " + 
storageType.get());
@@ -163,47 +166,41 @@ public class RyaConnectionCommands implements 
CommandMarker {
 
     @CliCommand(value = CONNECT_MONGO_CMD, help = "Connect the shell to an 
instance of MongoDB.")
     public String connectToMongo(
-            @CliOption(key = {"username"}, mandatory = false, help = "The 
username that will be used to connect to MongoDB.")
+            @CliOption(key = {"username"}, mandatory = false, help =
+                "The username that will be used to connect to MongoDB when 
performing administrative tasks.")
             final String username,
             @CliOption(key= {"hostname"}, mandatory = true, help = "The 
hostname of the MongoDB that will be connected to.")
             final String hostname,
             @CliOption(key= {"port"}, mandatory = true, help = "The port of 
the MongoDB that will be connected to.")
             final String port) {
 
-        // Prompt the user for their password.
         try {
-            // Set up a configuration file that connects to the specified 
Mongo DB.
-            final MongoDBRdfConfiguration conf = new MongoDBRdfConfiguration();
-            final MongoClient client;
-            conf.setMongoHostname(hostname);
-            conf.setMongoPort(port);
-
-            final char[] password;
+            // If a username was provided, then prompt for a password.
+            char[] password = null;
             if(username != null) {
                 password = passwordPrompt.getPassword();
-                conf.setMongoUser(username);
-                conf.setMongoPassword(new String(password));
-                final ServerAddress addr = new ServerAddress(hostname, 
Integer.parseInt(port));
-                final MongoCredential creds = 
MongoCredential.createPlainCredential(username, "$external", password);
-                client = new MongoClient(addr, Lists.newArrayList(creds));
-            } else {
-                password = null;
-                client = new MongoClient(hostname, Integer.parseInt(port));
             }
 
-            // Create the singleton instance of Mongo that will be used 
through out the application.
+            // Create the Mongo Connection Details that describe the Mongo DB 
Server we are interacting with.
+            final MongoConnectionDetails connectionDetails = new 
MongoConnectionDetails(
+                    hostname,
+                    Integer.parseInt(port),
+                    Optional.ofNullable(username),
+                    Optional.ofNullable(password));
+
+            // Connect to a MongoDB server. TODO Figure out how to provide 
auth info?
+            MongoClient adminClient = new MongoClient(hostname, 
Integer.parseInt(port));
 
             // Make sure the client is closed at shutdown.
             Runtime.getRuntime().addShutdownHook(new Thread() {
                 @Override
                 public void run() {
-                    client.close();
+                    adminClient.close();
                 }
             });
 
             // Initialize the connected to Mongo shared state.
-            final MongoConnectionDetails connectionDetails = new 
MongoConnectionDetails(username, password, hostname, Integer.parseInt(port));
-            final RyaClient ryaClient = 
MongoRyaClientFactory.build(connectionDetails, client);
+            final RyaClient ryaClient = 
MongoRyaClientFactory.build(connectionDetails, adminClient);
             sharedState.connectedToMongo(connectionDetails, ryaClient);
 
         } catch (final IOException e) {
@@ -218,6 +215,10 @@ public class RyaConnectionCommands implements 
CommandMarker {
             @CliOption(key = {"instance"}, mandatory = true, help = "The name 
of the Rya instance the shell will interact with.")
             final String instance) {
         try {
+            // TODO When you are connected to mongo db, then connecting to an 
instance may require
+            //      a username/password. this is because each Database has its 
own credentials, so
+            //      every rya instance likewise has their own credentials.
+
             final InstanceExists instanceExists = 
sharedState.getShellState().getConnectedCommands().get().getInstanceExists();
 
             // TODO gracefully fail if that version doen't support it. maybe 
the list command should go ahead

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6bb7146e/extras/shell/src/test/java/org/apache/rya/shell/RyaPromptProviderTest.java
----------------------------------------------------------------------
diff --git 
a/extras/shell/src/test/java/org/apache/rya/shell/RyaPromptProviderTest.java 
b/extras/shell/src/test/java/org/apache/rya/shell/RyaPromptProviderTest.java
index 01502d2..559aae9 100644
--- a/extras/shell/src/test/java/org/apache/rya/shell/RyaPromptProviderTest.java
+++ b/extras/shell/src/test/java/org/apache/rya/shell/RyaPromptProviderTest.java
@@ -21,6 +21,8 @@ package org.apache.rya.shell;
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Mockito.mock;
 
+import java.util.Optional;
+
 import org.apache.rya.api.client.RyaClient;
 import org.apache.rya.api.client.accumulo.AccumuloConnectionDetails;
 import org.apache.rya.api.client.mongo.MongoConnectionDetails;
@@ -66,7 +68,8 @@ public class RyaPromptProviderTest {
         // Create a shared state that is connected to a storage, but not a rya 
instance.
         final SharedShellState sharedState = new SharedShellState();
 
-        final MongoConnectionDetails connectionDetails = new 
MongoConnectionDetails("username", new char[] {}, "testMongoHost", 999);
+        final MongoConnectionDetails connectionDetails =
+                new MongoConnectionDetails("testMongoHost", 999, 
Optional.of("username"), Optional.of(new char[] {}));
         sharedState.connectedToMongo(connectionDetails, mock(RyaClient.class));
 
         // Create a prompt.

Reply via email to