package cz.cuni.mff.d3s.been.objectrepository.mongo; import java.net.UnknownHostException; import java.util.Properties; import cz.cuni.mff.d3s.been.util.PropertyReader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.mongodb.MongoClientOptions; import cz.cuni.mff.d3s.been.storage.Storage; import cz.cuni.mff.d3s.been.storage.StorageBuilder; import cz.cuni.mff.d3s.been.storage.StorageBuilderFactory; import static cz.cuni.mff.d3s.been.objectrepository.mongo.MongoStorageConfiguration.*; /** * A {@link StorageBuilderFactory} that creates a connection to a Mongodb * {@link Storage}. Accepts these parameters in properties. * * @author darklight * */ public class MongoStorageBuilder implements StorageBuilder { /** slf4j logger for this builder */ private static final Logger log = LoggerFactory.getLogger(MongoStorageBuilder.class); private Properties properties = new Properties(); @Override public MongoStorageBuilder withProperties(Properties properties) { if (properties == null) { log.warn("Attempt to infer null Properties to {} will be ignored.", MongoStorageBuilder.class.getName()); return this; } this.properties = properties; return this; } @Override public Storage build() { final PropertyReader propertyReader = PropertyReader.on(properties); final String user = propertyReader.getString(MONGO_USERNAME, DEFAULT_MONGO_USERNAME); final String password = propertyReader.getString(MONGO_PASSWORD, DEFAULT_MONGO_PASSWORD); final String hostname = propertyReader.getString(MONGO_HOSTNAME, DEFAULT_MONGO_HOSTNAME); final String dbname = propertyReader.getString(MONGO_DBNAME, DEFAULT_MONGO_DBNAME); try { if (user != null && password != null) { // if authentication is configured, use it return MongoStorage.create(hostname, dbname, user, password, new MongoClientOptions.Builder().build()); } else { // otherwise don't use authentication return MongoStorage.create(hostname, dbname, new MongoClientOptions.Builder().build()); } } catch (UnknownHostException e) { return null; } } }