This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit fae3ecee64473fdd77f12e20e92935c7db62a093 Author: Rene Cordier <[email protected]> AuthorDate: Tue Jun 9 15:37:43 2020 +0700 JAMES-3202 Add get document action to ElasticSearchIndexer --- .../james/backends/es/ElasticSearchIndexer.java | 14 ++++++++++++ .../backends/es/ReactorElasticSearchClient.java | 6 +++++ .../backends/es/ElasticSearchIndexerTest.java | 26 ++++++++++++++++++++++ 3 files changed, 46 insertions(+) diff --git a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchIndexer.java b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchIndexer.java index 3b5c8a2..049dcd5 100644 --- a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchIndexer.java +++ b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchIndexer.java @@ -24,6 +24,8 @@ import org.apache.commons.lang3.StringUtils; import org.elasticsearch.action.bulk.BulkRequest; import org.elasticsearch.action.bulk.BulkResponse; import org.elasticsearch.action.delete.DeleteRequest; +import org.elasticsearch.action.get.GetRequest; +import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.action.update.UpdateRequest; @@ -120,4 +122,16 @@ public class ElasticSearchIndexer { private void checkArgument(String content) { Preconditions.checkArgument(content != null, "content should be provided"); } + + public Mono<GetResponse> get(DocumentId id, RoutingKey routingKey) { + return Mono.fromRunnable(() -> { + Preconditions.checkNotNull(id); + Preconditions.checkNotNull(routingKey); + }) + .then(client.get(new GetRequest(aliasName.getValue()) + .type(NodeMappingFactory.DEFAULT_MAPPING_NAME) + .id(id.asString()) + .routing(routingKey.asString()), + RequestOptions.DEFAULT)); + } } diff --git a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ReactorElasticSearchClient.java b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ReactorElasticSearchClient.java index 1636df6..fc6d26e 100644 --- a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ReactorElasticSearchClient.java +++ b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ReactorElasticSearchClient.java @@ -37,6 +37,8 @@ import org.elasticsearch.action.explain.ExplainRequest; import org.elasticsearch.action.explain.ExplainResponse; import org.elasticsearch.action.fieldcaps.FieldCapabilitiesRequest; import org.elasticsearch.action.fieldcaps.FieldCapabilitiesResponse; +import org.elasticsearch.action.get.GetRequest; +import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.action.main.MainResponse; @@ -147,6 +149,10 @@ public class ReactorElasticSearchClient implements AutoCloseable { return toReactor(listener -> client.searchTemplateAsync(searchTemplateRequest, options, listener)); } + public Mono<GetResponse> get(GetRequest getRequest, RequestOptions options) { + return toReactor(listener -> client.getAsync(getRequest, options, listener)); + } + @Override public void close() throws IOException { client.close(); diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchIndexerTest.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchIndexerTest.java index ac320ca..f0c9f9d 100644 --- a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchIndexerTest.java +++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchIndexerTest.java @@ -30,6 +30,7 @@ import java.io.IOException; import org.awaitility.Awaitility; import org.awaitility.Duration; import org.awaitility.core.ConditionFactory; +import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RequestOptions; @@ -264,4 +265,29 @@ class ElasticSearchIndexerTest { assertThatCode(() -> testee.delete(ImmutableList.of(), ROUTING).block()) .doesNotThrowAnyException(); } + + @Test + void getShouldWork() { + DocumentId documentId = DocumentId.fromString("1"); + String content = "{\"message\":\"trying out Elasticsearch\"}"; + + testee.index(documentId, content, useDocumentId(documentId)).block(); + elasticSearch.awaitForElasticSearch(); + + GetResponse getResponse = testee.get(documentId, useDocumentId(documentId)).block(); + + assertThat(getResponse.getSourceAsString()).isEqualTo(content); + } + + @Test + void getShouldThrowWhenIdIsNull() { + assertThatThrownBy(() -> testee.get(null, ROUTING).block()) + .isInstanceOf(NullPointerException.class); + } + + @Test + void getShouldThrowWhenRoutingKeyIsNull() { + assertThatThrownBy(() -> testee.get(DOCUMENT_ID, null).block()) + .isInstanceOf(NullPointerException.class); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
