All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jnosql.diana.mongodb.document.MongoDBDocumentConfiguration Maven / Gradle / Ivy

The newest version!
/*
 *  Copyright (c) 2017 Otávio Santana and others
 *   All rights reserved. This program and the accompanying materials
 *   are made available under the terms of the Eclipse Public License v1.0
 *   and Apache License v2.0 which accompanies this distribution.
 *   The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
 *   and the Apache License v2.0 is available at http://www.opensource.org/licenses/apache2.0.php.
 *
 *   You may elect to redistribute this code under either of these licenses.
 *
 *   Contributors:
 *
 *   Otavio Santana
 */

package org.jnosql.diana.mongodb.document;

import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.async.client.MongoClientSettings;
import com.mongodb.async.client.MongoClients;
import com.mongodb.connection.ClusterSettings;
import org.jnosql.diana.api.Configurations;
import org.jnosql.diana.api.Settings;
import org.jnosql.diana.api.SettingsBuilder;
import org.jnosql.diana.api.document.DocumentConfiguration;
import org.jnosql.diana.api.document.DocumentConfigurationAsync;
import org.jnosql.diana.driver.ConfigurationReader;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;

import static java.util.Objects.requireNonNull;


/**
 * The MongoDB implementation to both {@link DocumentConfiguration} and {@link DocumentConfigurationAsync}
 * that returns  {@link MongoDBDocumentCollectionManagerFactory} {@link MongoDBDocumentCollectionManagerAsyncFactory}.
 * It tries to read the diana-mongodb.properties file whose has the following properties
 * 

mongodb.server.host.: as prefix to add host client, eg: mongodb.server.host.1=host1, mongodb.server.host.2= host2

*/ public class MongoDBDocumentConfiguration implements DocumentConfiguration, DocumentConfigurationAsync { private static final String FILE_CONFIGURATION = "diana-mongodb.properties"; static final int DEFAULT_PORT = 27017; /** * Creates a {@link MongoDBDocumentCollectionManagerFactory} from map configurations * * @param configurations the configurations map * @return a MongoDBDocumentCollectionManagerFactory instance * @throws NullPointerException when the configurations is null */ public MongoDBDocumentCollectionManagerFactory get(Map configurations) throws NullPointerException { requireNonNull(configurations, "configurations is required"); SettingsBuilder builder = Settings.builder(); configurations.entrySet().forEach(e -> builder.put(e.getKey(), e.getValue())); return get(builder.build()); } /** * Creates a {@link MongoDBDocumentCollectionManagerFactory} from mongoClient * * @param mongoClient the mongo client {@link MongoClient} * @return a MongoDBDocumentCollectionManagerFactory instance * @throws NullPointerException when the mongoClient is null */ public MongoDBDocumentCollectionManagerFactory get(MongoClient mongoClient) throws NullPointerException { requireNonNull(mongoClient, "mongo client is required"); return new MongoDBDocumentCollectionManagerFactory(mongoClient); } private com.mongodb.async.client.MongoClient getAsyncMongoClient(List servers) { ClusterSettings clusterSettings = ClusterSettings.builder().hosts(servers).build(); MongoClientSettings settings = MongoClientSettings.builder().clusterSettings(clusterSettings).build(); return MongoClients.create(settings); } @Override public MongoDBDocumentCollectionManagerFactory get() { Map configuration = ConfigurationReader.from(FILE_CONFIGURATION); return get(configuration); } @Override public MongoDBDocumentCollectionManagerFactory get(Settings settings) throws NullPointerException { requireNonNull(settings, "settings is required"); List servers = settings .prefix(Arrays.asList(OldMongoDBDocumentConfigurations.HOST.get(), MongoDBDocumentConfigurations.HOST.get(), Configurations.HOST.get())) .stream() .map(Object::toString) .map(HostPortConfiguration::new) .map(HostPortConfiguration::toServerAddress) .collect(Collectors.toList()); if (servers.isEmpty()) { return new MongoDBDocumentCollectionManagerFactory(new MongoClient()); } Optional credential = MongoAuthentication.of(settings); MongoClient mongoClient = credential.map(c -> new MongoClient(servers, c, null)) .orElseGet(() -> new MongoClient(servers)); return new MongoDBDocumentCollectionManagerFactory(mongoClient); } public MongoDBDocumentCollectionManagerFactory get(String pathFileConfig) throws NullPointerException { requireNonNull(pathFileConfig, "settings is required"); Map configuration = ConfigurationReader.from(pathFileConfig); return get(configuration); } @Override public MongoDBDocumentCollectionManagerAsyncFactory getAsync() { Map configurations = ConfigurationReader.from(FILE_CONFIGURATION); return getAsync(configurations); } @Override public MongoDBDocumentCollectionManagerAsyncFactory getAsync(Settings settings) throws NullPointerException { requireNonNull(settings, "settings is required"); List servers = settings .prefix(Arrays.asList(OldMongoDBDocumentConfigurations.HOST.get(), MongoDBDocumentConfigurations.HOST.get(), Configurations.HOST.get())) .stream() .map(Object::toString) .map(HostPortConfiguration::new) .map(HostPortConfiguration::toServerAddress) .collect(Collectors.toList()); if (servers.isEmpty()) { return new MongoDBDocumentCollectionManagerAsyncFactory(MongoClients.create()); } return new MongoDBDocumentCollectionManagerAsyncFactory(getAsyncMongoClient(servers)); } /** * Creates a {@link MongoDBDocumentCollectionManagerAsyncFactory} from mongoClient * * @param mongoClient the mongo client {@link MongoClient} * @return a MongoDBDocumentCollectionManagerAsyncFactory instance * @throws NullPointerException when the mongoClient is null */ public MongoDBDocumentCollectionManagerAsyncFactory getAsync(com.mongodb.async.client.MongoClient mongoClient) throws NullPointerException { requireNonNull(mongoClient, "mongo client is required"); return new MongoDBDocumentCollectionManagerAsyncFactory(mongoClient); } private MongoDBDocumentCollectionManagerAsyncFactory getAsync(Map configurations) { Objects.requireNonNull(configurations, "configurations is required"); SettingsBuilder builder = Settings.builder(); configurations.entrySet().forEach(e -> builder.put(e.getKey(), e.getValue())); return getAsync(builder.build()); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy