From 946c5ffe665a6bfd3a52c1cf7778c0a50ccb13d0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 15 Mar 2024 14:17:31 +0000 Subject: [PATCH] Fix pattern replace by making flag optional as on api (#895) * Fix pattern replace by making flag optional as on api Signed-off-by: Grouh * Update changelog Signed-off-by: Grouh * Add unit test for pattern replace char filter analyzer Signed-off-by: Grouh * fix changelog Signed-off-by: Grouh * fix char pattern replace by making replcement optional Signed-off-by: Grouh * Add deserialze test with only pattern set Signed-off-by: Grouh --------- Signed-off-by: Grouh (cherry picked from commit e240b2734437d10699249bd81752dd16a9a56855) Signed-off-by: github-actions[bot] --- CHANGELOG.md | 1 + .../analysis/PatternReplaceCharFilter.java | 35 +++++---- .../PatternReplaceCharFilterTest.java | 71 +++++++++++++++++++ 3 files changed, 94 insertions(+), 13 deletions(-) create mode 100644 java-client/src/test/java/org/opensearch/client/opensearch/_types/analysis/PatternReplaceCharFilterTest.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e6c496a16..20c36a02c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) ### Fixed - Fix integer overflow for variables in indices stats response ([#877](https://github.com/opensearch-project/opensearch-java/pull/877)) - Support weight function in function score query ([#880](https://github.com/opensearch-project/opensearch-java/pull/880)) +- Fix pattern replace by making flag and replacement optional as on api ([#895](https://github.com/opensearch-project/opensearch-java/pull/895)) ### Security diff --git a/java-client/src/main/java/org/opensearch/client/opensearch/_types/analysis/PatternReplaceCharFilter.java b/java-client/src/main/java/org/opensearch/client/opensearch/_types/analysis/PatternReplaceCharFilter.java index af7112de91..287842be57 100644 --- a/java-client/src/main/java/org/opensearch/client/opensearch/_types/analysis/PatternReplaceCharFilter.java +++ b/java-client/src/main/java/org/opensearch/client/opensearch/_types/analysis/PatternReplaceCharFilter.java @@ -34,6 +34,7 @@ import jakarta.json.stream.JsonGenerator; 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; @@ -46,10 +47,12 @@ @JsonpDeserializable public class PatternReplaceCharFilter extends CharFilterBase implements CharFilterDefinitionVariant { + @Nullable private final String flags; private final String pattern; + @Nullable private final String replacement; // --------------------------------------------------------------------------------------------- @@ -57,10 +60,9 @@ public class PatternReplaceCharFilter extends CharFilterBase implements CharFilt private PatternReplaceCharFilter(Builder builder) { super(builder); - this.flags = ApiTypeHelper.requireNonNull(builder.flags, this, "flags"); + this.flags = builder.flags; this.pattern = ApiTypeHelper.requireNonNull(builder.pattern, this, "pattern"); - this.replacement = ApiTypeHelper.requireNonNull(builder.replacement, this, "replacement"); - + this.replacement = builder.replacement; } public static PatternReplaceCharFilter of(Function> fn) { @@ -76,8 +78,9 @@ public CharFilterDefinition.Kind _charFilterDefinitionKind() { } /** - * Required - API name: {@code flags} + * API name: {@code flags} */ + @Nullable public final String flags() { return this.flags; } @@ -90,7 +93,7 @@ public final String pattern() { } /** - * Required - API name: {@code replacement} + * API name: {@code replacement} */ public final String replacement() { return this.replacement; @@ -100,15 +103,19 @@ protected void serializeInternal(JsonGenerator generator, JsonpMapper mapper) { generator.write("type", "pattern_replace"); super.serializeInternal(generator, mapper); - generator.writeKey("flags"); - generator.write(this.flags); generator.writeKey("pattern"); generator.write(this.pattern); - generator.writeKey("replacement"); - generator.write(this.replacement); + if (this.replacement != null) { + generator.writeKey("replacement"); + generator.write(this.replacement); + } + if (this.flags != null) { + generator.writeKey("flags"); + generator.write(this.flags); + } } // --------------------------------------------------------------------------------------------- @@ -118,16 +125,18 @@ protected void serializeInternal(JsonGenerator generator, JsonpMapper mapper) { */ public static class Builder extends CharFilterBase.AbstractBuilder implements ObjectBuilder { + @Nullable private String flags; private String pattern; + @Nullable private String replacement; /** - * Required - API name: {@code flags} + * API name: {@code flags} */ - public final Builder flags(String value) { + public final Builder flags(@Nullable String value) { this.flags = value; return this; } @@ -141,9 +150,9 @@ public final Builder pattern(String value) { } /** - * Required - API name: {@code replacement} + * API name: {@code replacement} */ - public final Builder replacement(String value) { + public final Builder replacement(@Nullable String value) { this.replacement = value; return this; } diff --git a/java-client/src/test/java/org/opensearch/client/opensearch/_types/analysis/PatternReplaceCharFilterTest.java b/java-client/src/test/java/org/opensearch/client/opensearch/_types/analysis/PatternReplaceCharFilterTest.java new file mode 100644 index 0000000000..7a7d15f93a --- /dev/null +++ b/java-client/src/test/java/org/opensearch/client/opensearch/_types/analysis/PatternReplaceCharFilterTest.java @@ -0,0 +1,71 @@ +/* + * 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._types.analysis; + +import static org.junit.Assert.assertEquals; + +import jakarta.json.stream.JsonParser; +import java.io.StringReader; +import org.junit.Test; +import org.opensearch.client.json.jackson.JacksonJsonpMapper; + +public class PatternReplaceCharFilterTest { + @Test + public void testCreatePatternReplaceCharFilter() { + PatternReplaceCharFilter patternReplaceCharFilter = new PatternReplaceCharFilter.Builder().pattern("pattern").build(); + assertEquals("pattern", patternReplaceCharFilter.pattern()); + } + + @Test + public void testCreatePatternReplaceCharFilterWithReplacement() { + PatternReplaceCharFilter patternReplaceCharFilter = new PatternReplaceCharFilter.Builder().pattern("pattern") + .replacement("replacement") + .build(); + assertEquals("pattern", patternReplaceCharFilter.pattern()); + assertEquals("replacement", patternReplaceCharFilter.replacement()); + } + + @Test + public void testCreatePatternReplaceCharFilterWithFlags() { + PatternReplaceCharFilter patternReplaceCharFilter = new PatternReplaceCharFilter.Builder().pattern("pattern") + .replacement("replacement") + .flags("flags") + .build(); + assertEquals("pattern", patternReplaceCharFilter.pattern()); + assertEquals("replacement", patternReplaceCharFilter.replacement()); + assertEquals("flags", patternReplaceCharFilter.flags()); + } + + @Test + public void testDeserializePatternReplaceCharFilterWithAllFields() { + String jsonString = + "{\"type\": \"pattern_replace\", \"pattern\": \"pattern\", \"replacement\": \"replacement\", \"flags\": \"flags\"}"; + + StringReader reader = new StringReader(jsonString); + JacksonJsonpMapper mapper = new JacksonJsonpMapper(); + JsonParser parser = mapper.jsonProvider().createParser(reader); + + PatternReplaceCharFilter patternReplaceCharFilter = PatternReplaceCharFilter._DESERIALIZER.deserialize(parser, mapper); + assertEquals("pattern", patternReplaceCharFilter.pattern()); + assertEquals("replacement", patternReplaceCharFilter.replacement()); + assertEquals("flags", patternReplaceCharFilter.flags()); + } + + @Test + public void testDeserializePatternReplaceCharFilterWithPatternOnly() { + String jsonString = "{\"type\": \"pattern_replace\", \"pattern\": \"pattern\"}"; + + StringReader reader = new StringReader(jsonString); + JacksonJsonpMapper mapper = new JacksonJsonpMapper(); + JsonParser parser = mapper.jsonProvider().createParser(reader); + + PatternReplaceCharFilter patternReplaceCharFilter = PatternReplaceCharFilter._DESERIALIZER.deserialize(parser, mapper); + assertEquals("pattern", patternReplaceCharFilter.pattern()); + } +}