From 626e99c0dd711851487829f6755de47993fef6c5 Mon Sep 17 00:00:00 2001 From: Andrew Parmet Date: Fri, 22 Sep 2023 13:13:34 -0400 Subject: [PATCH] Add support for wrapper queries (#630) * add wrapperquery Signed-off-by: Andrew Parmet * add changelog entry Signed-off-by: Andrew Parmet * add test Signed-off-by: Andrew Parmet --------- Signed-off-by: Andrew Parmet --- CHANGELOG.md | 3 +- .../opensearch/_types/query_dsl/Query.java | 2 + .../_types/query_dsl/QueryBuilders.java | 8 + .../_types/query_dsl/WrapperQuery.java | 144 ++++++++++++++++++ .../opensearch/model/BehaviorsTest.java | 14 ++ 5 files changed, 170 insertions(+), 1 deletion(-) create mode 100644 java-client/src/main/java/org/opensearch/client/opensearch/_types/query_dsl/WrapperQuery.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f52cd35e9..c6bf44b5aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) ### Added - Document HTTP/2 support ([#330](https://github.com/opensearch-project/opensearch-java/pull/330)) - Added support for "cjk" analyzer ([#604](https://github.com/opensearch-project/opensearch-java/pull/604)) +- Added support for wrapper queries ([#630](https://github.com/opensearch-project/opensearch-java/pull/630)) ### Dependencies - Bumps `org.ajoberstar.grgit:grgit-gradle` from 5.0.0 to 5.2.0 @@ -191,4 +192,4 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) [2.5.0]: https://github.com/opensearch-project/opensearch-java/compare/v2.4.0...v2.5.0 [2.4.0]: https://github.com/opensearch-project/opensearch-java/compare/v2.3.0...v2.4.0 [2.3.0]: https://github.com/opensearch-project/opensearch-java/compare/v2.2.0...v2.3.0 -[2.2.0]: https://github.com/opensearch-project/opensearch-java/compare/v2.1.0...v2.2.0 \ No newline at end of file +[2.2.0]: https://github.com/opensearch-project/opensearch-java/compare/v2.1.0...v2.2.0 diff --git a/java-client/src/main/java/org/opensearch/client/opensearch/_types/query_dsl/Query.java b/java-client/src/main/java/org/opensearch/client/opensearch/_types/query_dsl/Query.java index abd141d078..280637acf7 100644 --- a/java-client/src/main/java/org/opensearch/client/opensearch/_types/query_dsl/Query.java +++ b/java-client/src/main/java/org/opensearch/client/opensearch/_types/query_dsl/Query.java @@ -169,6 +169,8 @@ public enum Kind implements JsonEnum { Wildcard("wildcard"), + Wrapper("wrapper"), + Type("type"), ; diff --git a/java-client/src/main/java/org/opensearch/client/opensearch/_types/query_dsl/QueryBuilders.java b/java-client/src/main/java/org/opensearch/client/opensearch/_types/query_dsl/QueryBuilders.java index 0deebb5343..90227a52cd 100644 --- a/java-client/src/main/java/org/opensearch/client/opensearch/_types/query_dsl/QueryBuilders.java +++ b/java-client/src/main/java/org/opensearch/client/opensearch/_types/query_dsl/QueryBuilders.java @@ -446,6 +446,14 @@ public static WildcardQuery.Builder wildcard() { return new WildcardQuery.Builder(); } + /** + * Creates a builder for the {@link WrapperQuery wrapper} {@code Query} + * variant. + */ + public static WrapperQuery.Builder wrapper() { + return new WrapperQuery.Builder(); + } + /** * Creates a builder for the {@link TypeQuery type} {@code Query} variant. */ diff --git a/java-client/src/main/java/org/opensearch/client/opensearch/_types/query_dsl/WrapperQuery.java b/java-client/src/main/java/org/opensearch/client/opensearch/_types/query_dsl/WrapperQuery.java new file mode 100644 index 0000000000..391278b080 --- /dev/null +++ b/java-client/src/main/java/org/opensearch/client/opensearch/_types/query_dsl/WrapperQuery.java @@ -0,0 +1,144 @@ +/* + * 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. + */ + +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/* + * Modifications Copyright OpenSearch Contributors. See + * GitHub history for details. + */ + +package org.opensearch.client.opensearch._types.query_dsl; + +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.util.ApiTypeHelper; +import org.opensearch.client.util.ObjectBuilder; +import jakarta.json.stream.JsonGenerator; +import java.lang.String; +import java.util.function.Function; + +// typedef: _types.query_dsl.WrapperQuery + + +@JsonpDeserializable +public class WrapperQuery extends QueryBase implements QueryVariant { + private final String query; + + // --------------------------------------------------------------------------------------------- + + private WrapperQuery(Builder builder) { + super(builder); + + this.query = ApiTypeHelper.requireNonNull(builder.query, this, "query"); + + } + + public static WrapperQuery of(Function> fn) { + return fn.apply(new Builder()).build(); + } + + /** + * Query variant kind. + */ + @Override + public Query.Kind _queryKind() { + return Query.Kind.Wrapper; + } + + /** + * Required - A base64 encoded query. The binary data format can be any of JSON, + * YAML, CBOR or SMILE encodings + *

+ * API name: {@code query} + */ + public final String query() { + return this.query; + } + + protected void serializeInternal(JsonGenerator generator, JsonpMapper mapper) { + + super.serializeInternal(generator, mapper); + generator.writeKey("query"); + generator.write(this.query); + + } + + // --------------------------------------------------------------------------------------------- + + /** + * Builder for {@link WrapperQuery}. + */ + + public static class Builder extends QueryBase.AbstractBuilder implements ObjectBuilder { + private String query; + + /** + * Required - A base64 encoded query. The binary data format can be any of JSON, + * YAML, CBOR or SMILE encodings + *

+ * API name: {@code query} + */ + public final Builder query(String value) { + this.query = value; + return this; + } + + @Override + protected Builder self() { + return this; + } + + /** + * Builds a {@link WrapperQuery}. + * + * @throws NullPointerException + * if some of the required fields are null. + */ + public WrapperQuery build() { + _checkSingleUse(); + + return new WrapperQuery(this); + } + } + + // --------------------------------------------------------------------------------------------- + + /** + * Json deserializer for {@link WrapperQuery} + */ + public static final JsonpDeserializer _DESERIALIZER = ObjectBuilderDeserializer.lazy(Builder::new, + WrapperQuery::setupWrapperQueryDeserializer); + + protected static void setupWrapperQueryDeserializer(ObjectDeserializer op) { + QueryBase.setupQueryBaseDeserializer(op); + op.add(Builder::query, JsonpDeserializer.stringDeserializer(), "query"); + + } + +} diff --git a/java-client/src/test/java/org/opensearch/client/opensearch/model/BehaviorsTest.java b/java-client/src/test/java/org/opensearch/client/opensearch/model/BehaviorsTest.java index d3fba08179..300eeef743 100644 --- a/java-client/src/test/java/org/opensearch/client/opensearch/model/BehaviorsTest.java +++ b/java-client/src/test/java/org/opensearch/client/opensearch/model/BehaviorsTest.java @@ -43,6 +43,7 @@ import org.opensearch.client.opensearch._types.query_dsl.ShapeQuery; import org.opensearch.client.opensearch._types.query_dsl.TermQuery; import org.opensearch.client.json.JsonData; +import org.opensearch.client.opensearch._types.query_dsl.WrapperQuery; import org.opensearch.client.util.MapBuilder; import org.junit.Test; @@ -84,6 +85,19 @@ public void testAdditionalPropertyOnClass() { System.out.println(toJson(q)); } + @Test + public void testWrapperQuery() { + WrapperQuery q = new WrapperQuery.Builder() + .query("encoded_query") + .build(); + + q = checkJsonRoundtrip(q, + "{\"query\":\"encoded_query\"}" + ); + + assertEquals("encoded_query", q.query()); + } + @Test public void testAdditionalPropertyOnContainer() { // Regular variant