Skip to content

Commit

Permalink
support for withJson-618
Browse files Browse the repository at this point in the history
Signed-off-by: Jai2305 <[email protected]>
  • Loading branch information
Jai2305 committed Sep 2, 2024
1 parent 5a9ea74 commit 474438b
Show file tree
Hide file tree
Showing 7 changed files with 125 additions and 4 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ This section is for maintaining a changelog for all breaking changes for the cli
- Added `queryImage` (query_image) field to `NeuralQuery`, following definition in ([Neural Query](https://opensearch.org/docs/latest/query-dsl/specialized/neural/)) ([#1137](https://github.com/opensearch-project/opensearch-java/pull/1138))
- Added `cancelAfterTimeInterval` to `SearchRequest` and `MsearchRequest` ([#1147](https://github.com/opensearch-project/opensearch-java/pull/1147))
- Added the `ml` namespace operations ([#1158](https://github.com/opensearch-project/opensearch-java/pull/1158))
- Added `PlainDeserializable` with `withJson` method for streamlining deserialization ([#1148](https://github.com/opensearch-project/opensearch-java/pull/1148))

### Dependencies
- Bumps `commons-logging:commons-logging` from 1.3.3 to 1.3.4
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*
* 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.
*/

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> {

B self();

/** Updates object with newly provided JSON properties
@param parser the JsonParser parser
@param mapper the JsonpMapper mapper used to deserialize values
@return this object
**/

default B withJson(JsonParser parser, JsonpMapper mapper) {
JsonpDeserializer<?> deserializer = JsonpMapperBase.findDeserializer(this.getClass().getEnclosingClass());
@SuppressWarnings("unchecked")
ObjectDeserializer<B> objectDeserializer = (ObjectDeserializer<B>) DelegatingDeserializer.unwrap(deserializer);
assert objectDeserializer != null;
return objectDeserializer.deserialize(self(), 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) {
JsonpMapper defaultMapper = JsonpUtils.DEFAULT_JSONP_MAPPER;
JsonParser parser = defaultMapper.jsonProvider().createParser(inputStream);
return withJson(parser, 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;
JsonParser parser = defaultMapper.jsonProvider().createParser(reader);
return withJson(parser, defaultMapper);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
import org.opensearch.client.json.JsonpMapper;
import org.opensearch.client.json.ObjectBuilderDeserializer;
import org.opensearch.client.json.ObjectDeserializer;
import org.opensearch.client.json.PlainDeserializable;
import org.opensearch.client.json.PlainJsonSerializable;
import org.opensearch.client.util.ApiTypeHelper;
import org.opensearch.client.util.ObjectBuilder;
Expand Down Expand Up @@ -172,7 +173,7 @@ protected void serializeInternal(JsonGenerator generator, JsonpMapper mapper) {
* Builder for {@link SourceField}.
*/

public static class Builder extends ObjectBuilderBase implements ObjectBuilder<SourceField> {
public static class Builder extends ObjectBuilderBase implements ObjectBuilder<SourceField>, PlainDeserializable<Builder> {
@Nullable
private Boolean compress;

Expand Down Expand Up @@ -263,6 +264,11 @@ public SourceField build() {

return new SourceField(this);
}

@Override
public Builder self() {
return this;
}
}

// ---------------------------------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
import org.opensearch.client.json.JsonpMapper;
import org.opensearch.client.json.ObjectBuilderDeserializer;
import org.opensearch.client.json.ObjectDeserializer;
import org.opensearch.client.json.PlainDeserializable;
import org.opensearch.client.json.PlainJsonSerializable;
import org.opensearch.client.util.ApiTypeHelper;
import org.opensearch.client.util.ObjectBuilder;
Expand Down Expand Up @@ -363,7 +364,7 @@ protected void serializeInternal(JsonGenerator generator, JsonpMapper mapper) {
* Builder for {@link TypeMapping}.
*/

public static class Builder extends ObjectBuilderBase implements ObjectBuilder<TypeMapping> {
public static class Builder extends ObjectBuilderBase implements ObjectBuilder<TypeMapping>, PlainDeserializable<Builder> {
@Nullable
private AllField allField;

Expand Down Expand Up @@ -660,6 +661,11 @@ public TypeMapping build() {

return new TypeMapping(this);
}

@Override
public Builder self() {
return this;
}
}

// ---------------------------------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
import org.opensearch.client.json.JsonpMapper;
import org.opensearch.client.json.ObjectBuilderDeserializer;
import org.opensearch.client.json.ObjectDeserializer;
import org.opensearch.client.json.PlainDeserializable;
import org.opensearch.client.json.PlainJsonSerializable;
import org.opensearch.client.opensearch._types.Time;
import org.opensearch.client.util.ApiTypeHelper;
Expand Down Expand Up @@ -1108,7 +1109,7 @@ protected void serializeInternal(JsonGenerator generator, JsonpMapper mapper) {
* Builder for {@link IndexSettings}.
*/

public static class Builder extends ObjectBuilderBase implements ObjectBuilder<IndexSettings> {
public static class Builder extends ObjectBuilderBase implements ObjectBuilder<IndexSettings>, PlainDeserializable<Builder> {
@Nullable
private IndexSettings index;

Expand Down Expand Up @@ -1919,6 +1920,10 @@ public final Builder knnAlgoParamEfSearch(@Nullable Integer value) {
return this;
}

@Override
public Builder self() {
return this;
}
}

// ---------------------------------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
import org.opensearch.client.json.JsonpMapper;
import org.opensearch.client.json.ObjectBuilderDeserializer;
import org.opensearch.client.json.ObjectDeserializer;
import org.opensearch.client.json.PlainDeserializable;
import org.opensearch.client.json.PlainJsonSerializable;
import org.opensearch.client.opensearch._types.mapping.TypeMapping;
import org.opensearch.client.opensearch.indices.Alias;
Expand Down Expand Up @@ -139,7 +140,7 @@ protected void serializeInternal(JsonGenerator generator, JsonpMapper mapper) {
* Builder for {@link IndexTemplateMapping}.
*/

public static class Builder extends ObjectBuilderBase implements ObjectBuilder<IndexTemplateMapping> {
public static class Builder extends ObjectBuilderBase implements ObjectBuilder<IndexTemplateMapping>, PlainDeserializable<Builder> {
@Nullable
private Map<String, Alias> aliases;

Expand Down Expand Up @@ -219,6 +220,11 @@ public IndexTemplateMapping build() {

return new IndexTemplateMapping(this);
}

@Override
public Builder self() {
return this;
}
}

// ---------------------------------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/*
* 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.
*/

package org.opensearch.client.opensearch.json;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
import org.opensearch.client.opensearch.indices.PutIndexTemplateRequest;
import org.opensearch.client.opensearch.indices.put_index_template.IndexTemplateMapping;

public class PlainDeserializableTest {
@Test
public void testWithJsonPutIndexTemplateRequest() {

String stringTemplate =
"{\"mappings\":{\"properties\":{\"age\":{\"type\":\"integer\"}}},\"settings\":{\"number_of_shards\":\"2\",\"number_of_replicas\":\"1\"}}";
InputStream inputStream = new ByteArrayInputStream(stringTemplate.getBytes(StandardCharsets.UTF_8));

PutIndexTemplateRequest indexTemplateRequest = new PutIndexTemplateRequest.Builder().name("My index")
.indexPatterns("index_pattern1")
.template(new IndexTemplateMapping.Builder().withJson(inputStream).build())
.build();

String expectedName = "My index";
List<String> expectedIndexPatterns = Arrays.asList("index_pattern1");
String expectedNumberOfShards = "2";

assert expectedName.equals(indexTemplateRequest.name());
assert expectedIndexPatterns.equals(indexTemplateRequest.indexPatterns());
assert expectedNumberOfShards.equals(indexTemplateRequest.template().settings().numberOfShards());

}
}

0 comments on commit 474438b

Please sign in to comment.