From 63889d8d73ececc32fded26a6e4aaab7fa7a5479 Mon Sep 17 00:00:00 2001 From: "ci.datadog-api-spec" Date: Thu, 17 Sep 2026 14:40:46 +0000 Subject: [PATCH] Regenerate client from commit 4c68a55 of spec repo --- .generator/schemas/v2/openapi.yaml | 59 ++++- .../SearchCostRecommendations.java | 22 +- .../model/RecommendationsFilterRequest.java | 145 ++---------- .../RecommendationsFilterRequestData.java | 217 +++++++++++++++++ ...mendationsFilterRequestDataAttributes.java | 224 ++++++++++++++++++ .../RecommendationsFilterRequestDataType.java | 60 +++++ .../v2/api/cloud_cost_management.feature | 2 +- 7 files changed, 586 insertions(+), 143 deletions(-) create mode 100644 src/main/java/com/datadog/api/client/v2/model/RecommendationsFilterRequestData.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/RecommendationsFilterRequestDataAttributes.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/RecommendationsFilterRequestDataType.java diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index bfb67197915..3be505b2f7b 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -91830,16 +91830,40 @@ components: x-enum-varnames: - RECOMMENDATION RecommendationsFilterRequest: - description: Request body for filtering cost recommendations. + description: JSON:API request body for filtering cost recommendations. example: - filter: "@resource_table:aws_ec2_instance" - sort: - - expression: potential_daily_savings.amount - order: DESC + data: + attributes: + scope: ccm + sort: + - expression: potential_daily_savings.amount + order: DESC + id: "@resource_table:aws_ec2_instance" + type: recommendations_filter properties: - filter: - description: Filter expression applied to the recommendations. + data: + $ref: "#/components/schemas/RecommendationsFilterRequestData" + type: object + RecommendationsFilterRequestData: + description: |- + JSON:API resource containing the cost recommendations filter. This legacy search contract + uses the resource ID for the filter expression rather than as a persistent resource identifier. + properties: + attributes: + $ref: "#/components/schemas/RecommendationsFilterRequestDataAttributes" + id: + description: |- + Filter expression applied to the recommendations. The server treats an omitted ID as `*` + and returns all recommendations. type: string + type: + $ref: "#/components/schemas/RecommendationsFilterRequestDataType" + required: + - type + type: object + RecommendationsFilterRequestDataAttributes: + description: Attributes used to filter and sort cost recommendations. + properties: scope: $ref: "#/components/schemas/RecommendationsFilterRequestScope" sort: @@ -91851,6 +91875,15 @@ components: description: Active view name (for example, `active`, `dismissed`, `open`, `in-progress`, or `completed`). type: string type: object + RecommendationsFilterRequestDataType: + default: recommendations_filter + description: Legacy JSON:API resource type required by the cost recommendations search decoder. + enum: + - recommendations_filter + example: recommendations_filter + type: string + x-enum-varnames: + - RECOMMENDATIONS_FILTER RecommendationsFilterRequestScope: description: Recommendations scope. Defaults to `ccm`; use `experiment` for experimental recommendations or `*` for both. enum: @@ -145681,10 +145714,14 @@ paths: examples: default: value: - filter: "@resource_table:aws_ec2_instance" - sort: - - expression: potential_daily_savings.amount - order: DESC + data: + attributes: + scope: ccm + sort: + - expression: potential_daily_savings.amount + order: DESC + id: "@resource_table:aws_ec2_instance" + type: recommendations_filter schema: $ref: "#/components/schemas/RecommendationsFilterRequest" required: true diff --git a/examples/v2/cloud-cost-management/SearchCostRecommendations.java b/examples/v2/cloud-cost-management/SearchCostRecommendations.java index e0fa064af0e..b2cb06eb3e2 100644 --- a/examples/v2/cloud-cost-management/SearchCostRecommendations.java +++ b/examples/v2/cloud-cost-management/SearchCostRecommendations.java @@ -5,6 +5,10 @@ import com.datadog.api.client.v2.api.CloudCostManagementApi; import com.datadog.api.client.v2.model.CostRecommendationArray; import com.datadog.api.client.v2.model.RecommendationsFilterRequest; +import com.datadog.api.client.v2.model.RecommendationsFilterRequestData; +import com.datadog.api.client.v2.model.RecommendationsFilterRequestDataAttributes; +import com.datadog.api.client.v2.model.RecommendationsFilterRequestDataType; +import com.datadog.api.client.v2.model.RecommendationsFilterRequestScope; import com.datadog.api.client.v2.model.RecommendationsFilterRequestSortItems; import java.util.Collections; @@ -16,12 +20,18 @@ public static void main(String[] args) { RecommendationsFilterRequest body = new RecommendationsFilterRequest() - .filter("@resource_table:aws_ec2_instance") - .sort( - Collections.singletonList( - new RecommendationsFilterRequestSortItems() - .expression("potential_daily_savings.amount") - .order("DESC"))); + .data( + new RecommendationsFilterRequestData() + .attributes( + new RecommendationsFilterRequestDataAttributes() + .scope(RecommendationsFilterRequestScope.CCM) + .sort( + Collections.singletonList( + new RecommendationsFilterRequestSortItems() + .expression("potential_daily_savings.amount") + .order("DESC")))) + .id("@resource_table:aws_ec2_instance") + .type(RecommendationsFilterRequestDataType.RECOMMENDATIONS_FILTER)); try { CostRecommendationArray result = apiInstance.searchCostRecommendations(body); diff --git a/src/main/java/com/datadog/api/client/v2/model/RecommendationsFilterRequest.java b/src/main/java/com/datadog/api/client/v2/model/RecommendationsFilterRequest.java index 6015ec576f0..038abc2315e 100644 --- a/src/main/java/com/datadog/api/client/v2/model/RecommendationsFilterRequest.java +++ b/src/main/java/com/datadog/api/client/v2/model/RecommendationsFilterRequest.java @@ -12,142 +12,43 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.Objects; -/** Request body for filtering cost recommendations. */ -@JsonPropertyOrder({ - RecommendationsFilterRequest.JSON_PROPERTY_FILTER, - RecommendationsFilterRequest.JSON_PROPERTY_SCOPE, - RecommendationsFilterRequest.JSON_PROPERTY_SORT, - RecommendationsFilterRequest.JSON_PROPERTY_VIEW -}) +/** JSON:API request body for filtering cost recommendations. */ +@JsonPropertyOrder({RecommendationsFilterRequest.JSON_PROPERTY_DATA}) @jakarta.annotation.Generated( value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") public class RecommendationsFilterRequest { @JsonIgnore public boolean unparsed = false; - public static final String JSON_PROPERTY_FILTER = "filter"; - private String filter; + public static final String JSON_PROPERTY_DATA = "data"; + private RecommendationsFilterRequestData data; - public static final String JSON_PROPERTY_SCOPE = "scope"; - private RecommendationsFilterRequestScope scope; - - public static final String JSON_PROPERTY_SORT = "sort"; - private List sort = null; - - public static final String JSON_PROPERTY_VIEW = "view"; - private String view; - - public RecommendationsFilterRequest filter(String filter) { - this.filter = filter; + public RecommendationsFilterRequest data(RecommendationsFilterRequestData data) { + this.data = data; + this.unparsed |= data.unparsed; return this; } /** - * Filter expression applied to the recommendations. + * JSON:API resource containing the cost recommendations filter. This legacy search contract uses + * the resource ID for the filter expression rather than as a persistent resource identifier. * - * @return filter + * @return data */ @jakarta.annotation.Nullable - @JsonProperty(JSON_PROPERTY_FILTER) + @JsonProperty(JSON_PROPERTY_DATA) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public String getFilter() { - return filter; - } - - public void setFilter(String filter) { - this.filter = filter; - } - - public RecommendationsFilterRequest scope(RecommendationsFilterRequestScope scope) { - this.scope = scope; - this.unparsed |= !scope.isValid(); - return this; + public RecommendationsFilterRequestData getData() { + return data; } - /** - * Recommendations scope. Defaults to ccm; use experiment for - * experimental recommendations or * for both. - * - * @return scope - */ - @jakarta.annotation.Nullable - @JsonProperty(JSON_PROPERTY_SCOPE) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public RecommendationsFilterRequestScope getScope() { - return scope; - } - - public void setScope(RecommendationsFilterRequestScope scope) { - if (!scope.isValid()) { - this.unparsed = true; - } - this.scope = scope; - } - - public RecommendationsFilterRequest sort(List sort) { - this.sort = sort; - if (sort != null) { - for (RecommendationsFilterRequestSortItems item : sort) { - this.unparsed |= item.unparsed; - } + public void setData(RecommendationsFilterRequestData data) { + this.data = data; + if (data != null) { + this.unparsed |= data.unparsed; } - return this; - } - - public RecommendationsFilterRequest addSortItem(RecommendationsFilterRequestSortItems sortItem) { - if (this.sort == null) { - this.sort = new ArrayList<>(); - } - this.sort.add(sortItem); - this.unparsed |= sortItem.unparsed; - return this; - } - - /** - * Ordered list of sort clauses applied to the result set. - * - * @return sort - */ - @jakarta.annotation.Nullable - @JsonProperty(JSON_PROPERTY_SORT) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public List getSort() { - return sort; - } - - public void setSort(List sort) { - this.sort = sort; - if (sort != null) { - for (RecommendationsFilterRequestSortItems item : sort) { - this.unparsed |= item.unparsed; - } - } - } - - public RecommendationsFilterRequest view(String view) { - this.view = view; - return this; - } - - /** - * Active view name (for example, active, dismissed, open, - * in-progress, or completed). - * - * @return view - */ - @jakarta.annotation.Nullable - @JsonProperty(JSON_PROPERTY_VIEW) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public String getView() { - return view; - } - - public void setView(String view) { - this.view = view; } /** @@ -206,27 +107,21 @@ public boolean equals(Object o) { return false; } RecommendationsFilterRequest recommendationsFilterRequest = (RecommendationsFilterRequest) o; - return Objects.equals(this.filter, recommendationsFilterRequest.filter) - && Objects.equals(this.scope, recommendationsFilterRequest.scope) - && Objects.equals(this.sort, recommendationsFilterRequest.sort) - && Objects.equals(this.view, recommendationsFilterRequest.view) + return Objects.equals(this.data, recommendationsFilterRequest.data) && Objects.equals( this.additionalProperties, recommendationsFilterRequest.additionalProperties); } @Override public int hashCode() { - return Objects.hash(filter, scope, sort, view, additionalProperties); + return Objects.hash(data, additionalProperties); } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("class RecommendationsFilterRequest {\n"); - sb.append(" filter: ").append(toIndentedString(filter)).append("\n"); - sb.append(" scope: ").append(toIndentedString(scope)).append("\n"); - sb.append(" sort: ").append(toIndentedString(sort)).append("\n"); - sb.append(" view: ").append(toIndentedString(view)).append("\n"); + sb.append(" data: ").append(toIndentedString(data)).append("\n"); sb.append(" additionalProperties: ") .append(toIndentedString(additionalProperties)) .append("\n"); diff --git a/src/main/java/com/datadog/api/client/v2/model/RecommendationsFilterRequestData.java b/src/main/java/com/datadog/api/client/v2/model/RecommendationsFilterRequestData.java new file mode 100644 index 00000000000..3393d45a622 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/RecommendationsFilterRequestData.java @@ -0,0 +1,217 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2019-Present Datadog, Inc. + */ + +package com.datadog.api.client.v2.model; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +/** + * JSON:API resource containing the cost recommendations filter. This legacy search contract uses + * the resource ID for the filter expression rather than as a persistent resource identifier. + */ +@JsonPropertyOrder({ + RecommendationsFilterRequestData.JSON_PROPERTY_ATTRIBUTES, + RecommendationsFilterRequestData.JSON_PROPERTY_ID, + RecommendationsFilterRequestData.JSON_PROPERTY_TYPE +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class RecommendationsFilterRequestData { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_ATTRIBUTES = "attributes"; + private RecommendationsFilterRequestDataAttributes attributes; + + public static final String JSON_PROPERTY_ID = "id"; + private String id; + + public static final String JSON_PROPERTY_TYPE = "type"; + private RecommendationsFilterRequestDataType type = + RecommendationsFilterRequestDataType.RECOMMENDATIONS_FILTER; + + public RecommendationsFilterRequestData() {} + + @JsonCreator + public RecommendationsFilterRequestData( + @JsonProperty(required = true, value = JSON_PROPERTY_TYPE) + RecommendationsFilterRequestDataType type) { + this.type = type; + this.unparsed |= !type.isValid(); + } + + public RecommendationsFilterRequestData attributes( + RecommendationsFilterRequestDataAttributes attributes) { + this.attributes = attributes; + this.unparsed |= attributes.unparsed; + return this; + } + + /** + * Attributes used to filter and sort cost recommendations. + * + * @return attributes + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_ATTRIBUTES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public RecommendationsFilterRequestDataAttributes getAttributes() { + return attributes; + } + + public void setAttributes(RecommendationsFilterRequestDataAttributes attributes) { + this.attributes = attributes; + if (attributes != null) { + this.unparsed |= attributes.unparsed; + } + } + + public RecommendationsFilterRequestData id(String id) { + this.id = id; + return this; + } + + /** + * Filter expression applied to the recommendations. The server treats an omitted ID as * + * and returns all recommendations. + * + * @return id + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public RecommendationsFilterRequestData type(RecommendationsFilterRequestDataType type) { + this.type = type; + this.unparsed |= !type.isValid(); + return this; + } + + /** + * Legacy JSON:API resource type required by the cost recommendations search decoder. + * + * @return type + */ + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public RecommendationsFilterRequestDataType getType() { + return type; + } + + public void setType(RecommendationsFilterRequestDataType type) { + if (!type.isValid()) { + this.unparsed = true; + } + this.type = type; + } + + /** + * A container for additional, undeclared properties. This is a holder for any undeclared + * properties as specified with the 'additionalProperties' keyword in the OAS document. + */ + private Map additionalProperties; + + /** + * Set the additional (undeclared) property with the specified name and value. If the property + * does not already exist, create it otherwise replace it. + * + * @param key The arbitrary key to set + * @param value The associated value + * @return RecommendationsFilterRequestData + */ + @JsonAnySetter + public RecommendationsFilterRequestData putAdditionalProperty(String key, Object value) { + if (this.additionalProperties == null) { + this.additionalProperties = new HashMap(); + } + this.additionalProperties.put(key, value); + return this; + } + + /** + * Return the additional (undeclared) property. + * + * @return The additional properties + */ + @JsonAnyGetter + public Map getAdditionalProperties() { + return additionalProperties; + } + + /** + * Return the additional (undeclared) property with the specified name. + * + * @param key The arbitrary key to get + * @return The specific additional property for the given key + */ + public Object getAdditionalProperty(String key) { + if (this.additionalProperties == null) { + return null; + } + return this.additionalProperties.get(key); + } + + /** Return true if this RecommendationsFilterRequestData object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RecommendationsFilterRequestData recommendationsFilterRequestData = + (RecommendationsFilterRequestData) o; + return Objects.equals(this.attributes, recommendationsFilterRequestData.attributes) + && Objects.equals(this.id, recommendationsFilterRequestData.id) + && Objects.equals(this.type, recommendationsFilterRequestData.type) + && Objects.equals( + this.additionalProperties, recommendationsFilterRequestData.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(attributes, id, type, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class RecommendationsFilterRequestData {\n"); + sb.append(" attributes: ").append(toIndentedString(attributes)).append("\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" additionalProperties: ") + .append(toIndentedString(additionalProperties)) + .append("\n"); + sb.append('}'); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/RecommendationsFilterRequestDataAttributes.java b/src/main/java/com/datadog/api/client/v2/model/RecommendationsFilterRequestDataAttributes.java new file mode 100644 index 00000000000..7261efd426a --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/RecommendationsFilterRequestDataAttributes.java @@ -0,0 +1,224 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2019-Present Datadog, Inc. + */ + +package com.datadog.api.client.v2.model; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** Attributes used to filter and sort cost recommendations. */ +@JsonPropertyOrder({ + RecommendationsFilterRequestDataAttributes.JSON_PROPERTY_SCOPE, + RecommendationsFilterRequestDataAttributes.JSON_PROPERTY_SORT, + RecommendationsFilterRequestDataAttributes.JSON_PROPERTY_VIEW +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class RecommendationsFilterRequestDataAttributes { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_SCOPE = "scope"; + private RecommendationsFilterRequestScope scope; + + public static final String JSON_PROPERTY_SORT = "sort"; + private List sort = null; + + public static final String JSON_PROPERTY_VIEW = "view"; + private String view; + + public RecommendationsFilterRequestDataAttributes scope(RecommendationsFilterRequestScope scope) { + this.scope = scope; + this.unparsed |= !scope.isValid(); + return this; + } + + /** + * Recommendations scope. Defaults to ccm; use experiment for + * experimental recommendations or * for both. + * + * @return scope + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_SCOPE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public RecommendationsFilterRequestScope getScope() { + return scope; + } + + public void setScope(RecommendationsFilterRequestScope scope) { + if (!scope.isValid()) { + this.unparsed = true; + } + this.scope = scope; + } + + public RecommendationsFilterRequestDataAttributes sort( + List sort) { + this.sort = sort; + if (sort != null) { + for (RecommendationsFilterRequestSortItems item : sort) { + this.unparsed |= item.unparsed; + } + } + return this; + } + + public RecommendationsFilterRequestDataAttributes addSortItem( + RecommendationsFilterRequestSortItems sortItem) { + if (this.sort == null) { + this.sort = new ArrayList<>(); + } + this.sort.add(sortItem); + this.unparsed |= sortItem.unparsed; + return this; + } + + /** + * Ordered list of sort clauses applied to the result set. + * + * @return sort + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_SORT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getSort() { + return sort; + } + + public void setSort(List sort) { + this.sort = sort; + if (sort != null) { + for (RecommendationsFilterRequestSortItems item : sort) { + this.unparsed |= item.unparsed; + } + } + } + + public RecommendationsFilterRequestDataAttributes view(String view) { + this.view = view; + return this; + } + + /** + * Active view name (for example, active, dismissed, open, + * in-progress, or completed). + * + * @return view + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_VIEW) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getView() { + return view; + } + + public void setView(String view) { + this.view = view; + } + + /** + * A container for additional, undeclared properties. This is a holder for any undeclared + * properties as specified with the 'additionalProperties' keyword in the OAS document. + */ + private Map additionalProperties; + + /** + * Set the additional (undeclared) property with the specified name and value. If the property + * does not already exist, create it otherwise replace it. + * + * @param key The arbitrary key to set + * @param value The associated value + * @return RecommendationsFilterRequestDataAttributes + */ + @JsonAnySetter + public RecommendationsFilterRequestDataAttributes putAdditionalProperty( + String key, Object value) { + if (this.additionalProperties == null) { + this.additionalProperties = new HashMap(); + } + this.additionalProperties.put(key, value); + return this; + } + + /** + * Return the additional (undeclared) property. + * + * @return The additional properties + */ + @JsonAnyGetter + public Map getAdditionalProperties() { + return additionalProperties; + } + + /** + * Return the additional (undeclared) property with the specified name. + * + * @param key The arbitrary key to get + * @return The specific additional property for the given key + */ + public Object getAdditionalProperty(String key) { + if (this.additionalProperties == null) { + return null; + } + return this.additionalProperties.get(key); + } + + /** Return true if this RecommendationsFilterRequestDataAttributes object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RecommendationsFilterRequestDataAttributes recommendationsFilterRequestDataAttributes = + (RecommendationsFilterRequestDataAttributes) o; + return Objects.equals(this.scope, recommendationsFilterRequestDataAttributes.scope) + && Objects.equals(this.sort, recommendationsFilterRequestDataAttributes.sort) + && Objects.equals(this.view, recommendationsFilterRequestDataAttributes.view) + && Objects.equals( + this.additionalProperties, + recommendationsFilterRequestDataAttributes.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(scope, sort, view, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class RecommendationsFilterRequestDataAttributes {\n"); + sb.append(" scope: ").append(toIndentedString(scope)).append("\n"); + sb.append(" sort: ").append(toIndentedString(sort)).append("\n"); + sb.append(" view: ").append(toIndentedString(view)).append("\n"); + sb.append(" additionalProperties: ") + .append(toIndentedString(additionalProperties)) + .append("\n"); + sb.append('}'); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/RecommendationsFilterRequestDataType.java b/src/main/java/com/datadog/api/client/v2/model/RecommendationsFilterRequestDataType.java new file mode 100644 index 00000000000..6e3ece54e01 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/RecommendationsFilterRequestDataType.java @@ -0,0 +1,60 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2019-Present Datadog, Inc. + */ + +package com.datadog.api.client.v2.model; + +import com.datadog.api.client.ModelEnum; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +/** Legacy JSON:API resource type required by the cost recommendations search decoder. */ +@JsonSerialize( + using = + RecommendationsFilterRequestDataType.RecommendationsFilterRequestDataTypeSerializer.class) +public class RecommendationsFilterRequestDataType extends ModelEnum { + + private static final Set allowedValues = + new HashSet(Arrays.asList("recommendations_filter")); + + public static final RecommendationsFilterRequestDataType RECOMMENDATIONS_FILTER = + new RecommendationsFilterRequestDataType("recommendations_filter"); + + RecommendationsFilterRequestDataType(String value) { + super(value, allowedValues); + } + + public static class RecommendationsFilterRequestDataTypeSerializer + extends StdSerializer { + public RecommendationsFilterRequestDataTypeSerializer( + Class t) { + super(t); + } + + public RecommendationsFilterRequestDataTypeSerializer() { + this(null); + } + + @Override + public void serialize( + RecommendationsFilterRequestDataType value, JsonGenerator jgen, SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.value); + } + } + + @JsonCreator + public static RecommendationsFilterRequestDataType fromValue(String value) { + return new RecommendationsFilterRequestDataType(value); + } +} diff --git a/src/test/resources/com/datadog/api/client/v2/api/cloud_cost_management.feature b/src/test/resources/com/datadog/api/client/v2/api/cloud_cost_management.feature index 205054b8a53..f6298e74f22 100644 --- a/src/test/resources/com/datadog/api/client/v2/api/cloud_cost_management.feature +++ b/src/test/resources/com/datadog/api/client/v2/api/cloud_cost_management.feature @@ -974,7 +974,7 @@ Feature: Cloud Cost Management Scenario: Search cost recommendations returns "OK" response Given operation "SearchCostRecommendations" enabled And new "SearchCostRecommendations" request - And body with value {"filter": "@resource_table:aws_ec2_instance", "sort": [{"expression": "potential_daily_savings.amount", "order": "DESC"}]} + And body with value {"data": {"attributes": {"scope": "ccm", "sort": [{"expression": "potential_daily_savings.amount", "order": "DESC"}]}, "id": "@resource_table:aws_ec2_instance", "type": "recommendations_filter"}} When the request is sent Then the response status is 200 OK