From cbc5d01199806e11175c54d25e5aef1e89e48290 Mon Sep 17 00:00:00 2001 From: Jai2305 Date: Tue, 20 Aug 2024 16:37:46 +0530 Subject: [PATCH] support for withJson-618 --- .../client/json/PlainDeserializable.java | 66 +++++++++++++++++++ .../client/opensearch/core/ScrollRequest.java | 21 +++--- .../client/opensearch/core/SearchRequest.java | 46 +++++-------- .../core/SearchTemplateRequest.java | 34 +++++----- .../indices/CreateIndexRequest.java | 23 +++---- .../indices/PutIndexTemplateRequest.java | 26 ++++---- .../json/PlainDeserializableTest.java | 33 ++++++++++ 7 files changed, 166 insertions(+), 83 deletions(-) create mode 100644 java-client/src/main/java/org/opensearch/client/json/PlainDeserializable.java create mode 100644 java-client/src/test/java/org/opensearch/client/opensearch/json/PlainDeserializableTest.java diff --git a/java-client/src/main/java/org/opensearch/client/json/PlainDeserializable.java b/java-client/src/main/java/org/opensearch/client/json/PlainDeserializable.java new file mode 100644 index 0000000000..20dd875758 --- /dev/null +++ b/java-client/src/main/java/org/opensearch/client/json/PlainDeserializable.java @@ -0,0 +1,66 @@ + +/* + * SPDX-License-Identifier: Apache-2.0 + * + * The OpenSearch Contributors require contributions made to + * this file be licensed under the Apache-2.0 license or a + * compatible open source license. + */ + +/* + * Modifications Copyright OpenSearch Contributors. See + * GitHub history for details. + */ + +package org.opensearch.client.json; + +import jakarta.json.stream.JsonParser; + +import java.io.InputStream; +import java.io.Reader; + +/** Base interface to set JSON properties **/ + +public interface PlainDeserializable { + + B get(); + + /** Updates object with newly provided JSON properties + @param parser the JsonParser parser + @param mapper the JsonpMapper mapper used to deserialize values + @return object + **/ + + default B withJson(JsonParser parser, JsonpMapper mapper) { + JsonpDeserializer deserializer = JsonpMapperBase.findDeserializer(this.getClass().getEnclosingClass()); + @SuppressWarnings("unchecked") + ObjectDeserializer objectDeserializer = (ObjectDeserializer) DelegatingDeserializer.unwrap(deserializer); + assert objectDeserializer != null; + return objectDeserializer.deserialize(get(), parser, mapper, parser.next()); + } + + /** Updates object with newly provided JSON properties + @param inputStream the stream to read from + @return this object + * **/ + default B withJson(InputStream inputStream) { + + //JsonbJsonpMapper mapper = new JsonbJsonpMapper(); + JsonpMapper defaultMapper = JsonpUtils.DEFAULT_JSONP_MAPPER; + return withJson(defaultMapper.jsonProvider().createParser(inputStream), defaultMapper); + } + + /** Updates object with newly provided JSON properties + @param reader the stream to read from + @return this object + * **/ + default B withJson(Reader reader) { + JsonpMapper defaultMapper = JsonpUtils.DEFAULT_JSONP_MAPPER; + // JsonbJsonpMapper mapper = new JsonbJsonpMapper(); + JsonParser parser = defaultMapper.jsonProvider().createParser(reader); + return withJson(parser, defaultMapper); + } + +} + + diff --git a/java-client/src/main/java/org/opensearch/client/opensearch/core/ScrollRequest.java b/java-client/src/main/java/org/opensearch/client/opensearch/core/ScrollRequest.java index af79875890..1acbd92591 100644 --- a/java-client/src/main/java/org/opensearch/client/opensearch/core/ScrollRequest.java +++ b/java-client/src/main/java/org/opensearch/client/opensearch/core/ScrollRequest.java @@ -33,15 +33,7 @@ package org.opensearch.client.opensearch.core; import jakarta.json.stream.JsonGenerator; -import java.util.Collections; -import java.util.function.Function; -import javax.annotation.Nullable; -import org.opensearch.client.json.JsonpDeserializable; -import org.opensearch.client.json.JsonpDeserializer; -import org.opensearch.client.json.JsonpMapper; -import org.opensearch.client.json.ObjectBuilderDeserializer; -import org.opensearch.client.json.ObjectDeserializer; -import org.opensearch.client.json.PlainJsonSerializable; +import org.opensearch.client.json.*; import org.opensearch.client.opensearch._types.ErrorResponse; import org.opensearch.client.opensearch._types.RequestBase; import org.opensearch.client.opensearch._types.Time; @@ -51,6 +43,10 @@ import org.opensearch.client.util.ObjectBuilder; import org.opensearch.client.util.ObjectBuilderBase; +import javax.annotation.Nullable; +import java.util.Collections; +import java.util.function.Function; + // typedef: _global.scroll.Request /** @@ -127,7 +123,7 @@ public Builder toBuilder() { * Builder for {@link ScrollRequest}. */ - public static class Builder extends ObjectBuilderBase implements ObjectBuilder { + public static class Builder extends ObjectBuilderBase implements ObjectBuilder, PlainDeserializable { @Nullable private Time scroll; @@ -173,6 +169,11 @@ public ScrollRequest build() { return new ScrollRequest(this); } + + @Override + public Builder get() { + return this; + } } // --------------------------------------------------------------------------------------------- diff --git a/java-client/src/main/java/org/opensearch/client/opensearch/core/SearchRequest.java b/java-client/src/main/java/org/opensearch/client/opensearch/core/SearchRequest.java index 3b7166c1fc..c3cc852a12 100644 --- a/java-client/src/main/java/org/opensearch/client/opensearch/core/SearchRequest.java +++ b/java-client/src/main/java/org/opensearch/client/opensearch/core/SearchRequest.java @@ -33,46 +33,27 @@ package org.opensearch.client.opensearch.core; import jakarta.json.stream.JsonGenerator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; -import javax.annotation.Nullable; -import org.opensearch.client.json.JsonData; -import org.opensearch.client.json.JsonpDeserializable; -import org.opensearch.client.json.JsonpDeserializer; -import org.opensearch.client.json.JsonpMapper; -import org.opensearch.client.json.ObjectBuilderDeserializer; -import org.opensearch.client.json.ObjectDeserializer; -import org.opensearch.client.json.PlainJsonSerializable; -import org.opensearch.client.opensearch._types.ErrorResponse; -import org.opensearch.client.opensearch._types.ExpandWildcard; -import org.opensearch.client.opensearch._types.FieldValue; -import org.opensearch.client.opensearch._types.RequestBase; -import org.opensearch.client.opensearch._types.ScriptField; -import org.opensearch.client.opensearch._types.SearchType; -import org.opensearch.client.opensearch._types.SlicedScroll; -import org.opensearch.client.opensearch._types.SortOptions; -import org.opensearch.client.opensearch._types.Time; +import org.opensearch.client.json.*; +import org.opensearch.client.opensearch._types.*; import org.opensearch.client.opensearch._types.aggregations.Aggregation; import org.opensearch.client.opensearch._types.mapping.RuntimeField; import org.opensearch.client.opensearch._types.query_dsl.FieldAndFormat; import org.opensearch.client.opensearch._types.query_dsl.Operator; import org.opensearch.client.opensearch._types.query_dsl.Query; -import org.opensearch.client.opensearch.core.search.FieldCollapse; -import org.opensearch.client.opensearch.core.search.Highlight; -import org.opensearch.client.opensearch.core.search.Pit; -import org.opensearch.client.opensearch.core.search.Rescore; -import org.opensearch.client.opensearch.core.search.SourceConfig; -import org.opensearch.client.opensearch.core.search.Suggester; -import org.opensearch.client.opensearch.core.search.TrackHits; +import org.opensearch.client.opensearch.core.search.*; import org.opensearch.client.transport.Endpoint; import org.opensearch.client.transport.endpoints.SimpleEndpoint; import org.opensearch.client.util.ApiTypeHelper; import org.opensearch.client.util.ObjectBuilder; import org.opensearch.client.util.ObjectBuilderBase; +import javax.annotation.Nullable; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + // typedef: _global.search.Request /** @@ -1167,7 +1148,7 @@ public Builder toBuilder() { * Builder for {@link SearchRequest}. */ - public static class Builder extends ObjectBuilderBase implements ObjectBuilder { + public static class Builder extends ObjectBuilderBase implements ObjectBuilder, PlainDeserializable { @Nullable private SourceConfig source; @@ -2267,6 +2248,11 @@ public SearchRequest build() { return new SearchRequest(this); } + + @Override + public Builder get() { + return this; + } } // --------------------------------------------------------------------------------------------- diff --git a/java-client/src/main/java/org/opensearch/client/opensearch/core/SearchTemplateRequest.java b/java-client/src/main/java/org/opensearch/client/opensearch/core/SearchTemplateRequest.java index a3a828794c..7cd1159586 100644 --- a/java-client/src/main/java/org/opensearch/client/opensearch/core/SearchTemplateRequest.java +++ b/java-client/src/main/java/org/opensearch/client/opensearch/core/SearchTemplateRequest.java @@ -33,30 +33,21 @@ package org.opensearch.client.opensearch.core; import jakarta.json.stream.JsonGenerator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; -import javax.annotation.Nullable; -import org.opensearch.client.json.JsonData; -import org.opensearch.client.json.JsonpDeserializable; -import org.opensearch.client.json.JsonpDeserializer; -import org.opensearch.client.json.JsonpMapper; -import org.opensearch.client.json.ObjectBuilderDeserializer; -import org.opensearch.client.json.ObjectDeserializer; -import org.opensearch.client.json.PlainJsonSerializable; -import org.opensearch.client.opensearch._types.ErrorResponse; -import org.opensearch.client.opensearch._types.ExpandWildcard; -import org.opensearch.client.opensearch._types.RequestBase; -import org.opensearch.client.opensearch._types.SearchType; -import org.opensearch.client.opensearch._types.Time; +import org.opensearch.client.json.*; +import org.opensearch.client.opensearch._types.*; import org.opensearch.client.transport.Endpoint; import org.opensearch.client.transport.endpoints.SimpleEndpoint; import org.opensearch.client.util.ApiTypeHelper; import org.opensearch.client.util.ObjectBuilder; import org.opensearch.client.util.ObjectBuilderBase; +import javax.annotation.Nullable; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + // typedef: _global.search_template.Request /** @@ -386,7 +377,7 @@ public Builder toBuilder() { * Builder for {@link SearchTemplateRequest}. */ - public static class Builder extends ObjectBuilderBase implements ObjectBuilder { + public static class Builder extends ObjectBuilderBase implements ObjectBuilder, PlainDeserializable { @Nullable private Boolean allowNoIndices; @@ -678,6 +669,11 @@ public SearchTemplateRequest build() { return new SearchTemplateRequest(this); } + + @Override + public Builder get() { + return this; + } } // --------------------------------------------------------------------------------------------- diff --git a/java-client/src/main/java/org/opensearch/client/opensearch/indices/CreateIndexRequest.java b/java-client/src/main/java/org/opensearch/client/opensearch/indices/CreateIndexRequest.java index 236d52d700..3643e1a780 100644 --- a/java-client/src/main/java/org/opensearch/client/opensearch/indices/CreateIndexRequest.java +++ b/java-client/src/main/java/org/opensearch/client/opensearch/indices/CreateIndexRequest.java @@ -33,16 +33,7 @@ package org.opensearch.client.opensearch.indices; import jakarta.json.stream.JsonGenerator; -import java.util.HashMap; -import java.util.Map; -import java.util.function.Function; -import javax.annotation.Nullable; -import org.opensearch.client.json.JsonpDeserializable; -import org.opensearch.client.json.JsonpDeserializer; -import org.opensearch.client.json.JsonpMapper; -import org.opensearch.client.json.ObjectBuilderDeserializer; -import org.opensearch.client.json.ObjectDeserializer; -import org.opensearch.client.json.PlainJsonSerializable; +import org.opensearch.client.json.*; import org.opensearch.client.opensearch._types.ErrorResponse; import org.opensearch.client.opensearch._types.RequestBase; import org.opensearch.client.opensearch._types.Time; @@ -54,6 +45,11 @@ import org.opensearch.client.util.ObjectBuilder; import org.opensearch.client.util.ObjectBuilderBase; +import javax.annotation.Nullable; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + // typedef: indices.create.Request /** @@ -225,7 +221,7 @@ protected void serializeInternal(JsonGenerator generator, JsonpMapper mapper) { * Builder for {@link CreateIndexRequest}. */ - public static class Builder extends ObjectBuilderBase implements ObjectBuilder { + public static class Builder extends ObjectBuilderBase implements ObjectBuilder, PlainDeserializable { @Nullable private Map aliases; @@ -422,6 +418,11 @@ public CreateIndexRequest build() { return new CreateIndexRequest(this); } + + @Override + public Builder get() { + return this; + } } // --------------------------------------------------------------------------------------------- diff --git a/java-client/src/main/java/org/opensearch/client/opensearch/indices/PutIndexTemplateRequest.java b/java-client/src/main/java/org/opensearch/client/opensearch/indices/PutIndexTemplateRequest.java index b67132db45..de1d576452 100644 --- a/java-client/src/main/java/org/opensearch/client/opensearch/indices/PutIndexTemplateRequest.java +++ b/java-client/src/main/java/org/opensearch/client/opensearch/indices/PutIndexTemplateRequest.java @@ -33,18 +33,7 @@ package org.opensearch.client.opensearch.indices; import jakarta.json.stream.JsonGenerator; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.function.Function; -import javax.annotation.Nullable; -import org.opensearch.client.json.JsonData; -import org.opensearch.client.json.JsonpDeserializable; -import org.opensearch.client.json.JsonpDeserializer; -import org.opensearch.client.json.JsonpMapper; -import org.opensearch.client.json.ObjectBuilderDeserializer; -import org.opensearch.client.json.ObjectDeserializer; -import org.opensearch.client.json.PlainJsonSerializable; +import org.opensearch.client.json.*; import org.opensearch.client.opensearch._types.ErrorResponse; import org.opensearch.client.opensearch._types.RequestBase; import org.opensearch.client.opensearch.indices.put_index_template.IndexTemplateMapping; @@ -54,6 +43,12 @@ import org.opensearch.client.util.ObjectBuilder; import org.opensearch.client.util.ObjectBuilderBase; +import javax.annotation.Nullable; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.function.Function; + // typedef: indices.put_index_template.Request /** @@ -234,7 +229,7 @@ protected void serializeInternal(JsonGenerator generator, JsonpMapper mapper) { * Builder for {@link PutIndexTemplateRequest}. */ - public static class Builder extends ObjectBuilderBase implements ObjectBuilder { + public static class Builder extends ObjectBuilderBase implements ObjectBuilder, PlainDeserializable { @Nullable private Map meta; @@ -385,6 +380,11 @@ public PutIndexTemplateRequest build() { return new PutIndexTemplateRequest(this); } + + @Override + public Builder get() { + return this; + } } // --------------------------------------------------------------------------------------------- diff --git a/java-client/src/test/java/org/opensearch/client/opensearch/json/PlainDeserializableTest.java b/java-client/src/test/java/org/opensearch/client/opensearch/json/PlainDeserializableTest.java new file mode 100644 index 0000000000..08eb79f6b1 --- /dev/null +++ b/java-client/src/test/java/org/opensearch/client/opensearch/json/PlainDeserializableTest.java @@ -0,0 +1,33 @@ +package org.opensearch.client.opensearch.json; + +import org.junit.Test; +import org.opensearch.client.opensearch.indices.PutIndexTemplateRequest; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.List; + +public class PlainDeserializableTest { + + @Test + public void testWithJsonPutIndexTemplateRequest() { + + String stringTemplate = "{\"name\":\"My index\",\"composed_of\":[\"component1\",\"component2\"],\"index_patterns\":[\"index_pattern1\"]}"; + InputStream inputStream = new ByteArrayInputStream(stringTemplate.getBytes(StandardCharsets.UTF_8)); + + PutIndexTemplateRequest indexTemplateRequest = new PutIndexTemplateRequest.Builder() + .name("Invalid") + .indexPatterns("index_pattern3") + .withJson(inputStream).build(); + + String expectedName = "My index"; // Invalid will be replaced by My index from inputStream + List expectedIndexPatterns = List.of("index_pattern3","index_pattern1"); + List expectedComponents = List.of("component1","component2"); + + assert expectedName.equals(indexTemplateRequest.name()); + assert expectedIndexPatterns.equals(indexTemplateRequest.indexPatterns()); + assert expectedComponents.equals(indexTemplateRequest.composedOf()); + + } +}