
org.jnosql.diana.elasticsearch.document.ElasticsearchDocumentConfiguration Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of elasticsearch-driver Show documentation
Show all versions of elasticsearch-driver Show documentation
The Eclipse JNoSQL communication layer, Diana, implementation to Eclasticsearch
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.elasticsearch.document;
import org.apache.http.Header;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.jnosql.diana.api.Configurations;
import org.jnosql.diana.api.Settings;
import org.jnosql.diana.api.SettingsBuilder;
import org.jnosql.diana.api.document.UnaryDocumentConfiguration;
import org.jnosql.diana.driver.ConfigurationReader;
import org.jnosql.diana.elasticsearch.ElasticsearchConfigurations;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import static java.util.Objects.requireNonNull;
/**
* The implementation of {@link UnaryDocumentConfiguration} that returns {@link ElasticsearchDocumentCollectionManagerFactory}.
* It tries to read the configuration properties from diana-elasticsearch.properties file. To get some information:
* elasticsearch.host.n: the host to client connection, if necessary to define a different port than default just
* use colon, ':' eg: elasticsearch-host-1=172.17.0.2:1234
* elasticsearch-maxRetryTimeoutMillis: maxRetry- the default value {@link RestClientBuilder#DEFAULT_MAX_RETRY_TIMEOUT_MILLIS}
*/
public class ElasticsearchDocumentConfiguration implements UnaryDocumentConfiguration {
private static final String FILE_CONFIGURATION = "diana-elasticsearch.properties";
private static final int DEFAULT_PORT = 9200;
private List httpHosts = new ArrayList<>();
private List headers = new ArrayList<>();
private int maxRetryTimoutMillis = RestClientBuilder.DEFAULT_MAX_RETRY_TIMEOUT_MILLIS;
public ElasticsearchDocumentConfiguration() {
Map configurations = ConfigurationReader.from(FILE_CONFIGURATION);
SettingsBuilder builder = Settings.builder();
configurations.entrySet().forEach(e -> builder.put(e.getKey(), e.getValue()));
Settings settings = builder.build();
String maxRetry = configurations.get(OldElasticsearchConfigurations.MAX_RETRY_TIMEOUT_MILLIS.get());
if (maxRetry != null) {
maxRetryTimoutMillis = Integer.valueOf(maxRetry);
}
if (configurations.isEmpty()) {
return;
}
settings.prefix(Arrays.asList(OldElasticsearchConfigurations.HOST.get(),
ElasticsearchConfigurations.HOST.get(), Configurations.HOST.get()))
.stream()
.map(Object::toString)
.map(h -> ElasticsearchAddress.of(h, DEFAULT_PORT))
.map(ElasticsearchAddress::toHttpHost)
.forEach(httpHosts::add);
}
/**
* Adds a host in the configuration
*
* @param host the host
* @throws NullPointerException when host is null
*/
public void add(HttpHost host) {
this.httpHosts.add(Objects.requireNonNull(host, "host is required"));
}
/**
* Adds a header in the configuration
*
* @param header the header
* @throws NullPointerException when header is null
*/
public void add(Header header) {
this.headers.add(Objects.requireNonNull(header, "header is required"));
}
@Override
public ElasticsearchDocumentCollectionManagerFactory get() throws UnsupportedOperationException {
return get(Settings.builder().build());
}
@Override
public ElasticsearchDocumentCollectionManagerFactory get(Settings settings) throws NullPointerException {
requireNonNull(settings, "settings is required");
settings.prefix(Arrays.asList(OldElasticsearchConfigurations.HOST.get(),
ElasticsearchConfigurations.HOST.get(), Configurations.HOST.get()))
.stream()
.map(Object::toString)
.map(h -> ElasticsearchAddress.of(h, DEFAULT_PORT))
.map(ElasticsearchAddress::toHttpHost)
.forEach(httpHosts::add);
RestClientBuilder builder = RestClient.builder(httpHosts.toArray(new HttpHost[httpHosts.size()]));
builder.setDefaultHeaders(headers.stream().toArray(Header[]::new));
String maxRetry = settings.get(Arrays.asList(OldElasticsearchConfigurations.MAX_RETRY_TIMEOUT_MILLIS.get(),
ElasticsearchConfigurations.MAX_RETRY_TIMEOUT_MILLIS.get())).map(Object::toString)
.orElse(null);
if (maxRetry != null) {
maxRetryTimoutMillis = Integer.valueOf(maxRetry);
}
builder.setMaxRetryTimeoutMillis(maxRetryTimoutMillis);
RestHighLevelClient client = new RestHighLevelClient(builder);
return new ElasticsearchDocumentCollectionManagerFactory(client);
}
@Override
public ElasticsearchDocumentCollectionManagerFactory getAsync() throws UnsupportedOperationException {
return get();
}
@Override
public ElasticsearchDocumentCollectionManagerFactory getAsync(org.jnosql.diana.api.Settings settings) throws NullPointerException {
return get(settings);
}
/**
* returns an {@link ElasticsearchDocumentCollectionManagerFactory} instance
*
* @param builder the builder {@link RestClientBuilder}
* @return a manager factory instance
* @throws NullPointerException when builder is null
*/
public ElasticsearchDocumentCollectionManagerFactory get(RestClientBuilder builder) {
Objects.requireNonNull(builder, "builder is required");
RestHighLevelClient client = new RestHighLevelClient(builder);
return new ElasticsearchDocumentCollectionManagerFactory(client);
}
/**
* returns an {@link ElasticsearchDocumentCollectionManagerFactory} instance
*
* @param client the client {@link RestHighLevelClient}
* @return a manager factory instance
* @throws NullPointerException when client is null
*/
public ElasticsearchDocumentCollectionManagerFactory get(RestHighLevelClient client) {
Objects.requireNonNull(client, "client is required");
return new ElasticsearchDocumentCollectionManagerFactory(client);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy