blob: b48bb9f997a90b9f92f611932ab81374c6fd328b [file] [log] [blame]
/**
* 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 java.util.Optional;
import org.apache.rya.indexing.accumulo.ConfigUtils;
import org.apache.rya.mongodb.MongoDBRdfConfiguration;
import edu.umd.cs.findbugs.annotations.DefaultAnnotation;
import edu.umd.cs.findbugs.annotations.NonNull;
/**
* The information the shell used to connect to Mongo server, not the DB or collections.
*/
@DefaultAnnotation(NonNull.class)
public class MongoConnectionDetails {
private final Optional<String> username;
private final Optional<char[]> password;
private final String hostname;
private final int port;
/**
* Constructs an instance of {@link MongoConnectionDetails}.
*
* @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 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 hostname of the Mongo DB that was connected to.
*/
public String getHostname() {
return hostname;
}
/**
* @return The port of the Mongo DB that was connected to.
*/
public int getPort() {
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. (not null)
* @return Constructs a new {@link MongoDBRdfConfiguration} object with values from this object.
*/
public MongoDBRdfConfiguration build(final String ryaInstanceName) {
// 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.
final MongoDBRdfConfiguration conf = new MongoDBRdfConfiguration();
conf.setBoolean(ConfigUtils.USE_MONGO, true);
conf.setMongoHostname(hostname);
conf.setMongoPort("" + port);
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 conf;
}
}