
software.amazon.awssdk.services.honeycode.model.ResultSet Maven / Gradle / Ivy
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with
* the License. A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file 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.
*/
package software.amazon.awssdk.services.honeycode.model;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import software.amazon.awssdk.annotations.Generated;
import software.amazon.awssdk.core.SdkField;
import software.amazon.awssdk.core.SdkPojo;
import software.amazon.awssdk.core.protocol.MarshallLocation;
import software.amazon.awssdk.core.protocol.MarshallingType;
import software.amazon.awssdk.core.traits.ListTrait;
import software.amazon.awssdk.core.traits.LocationTrait;
import software.amazon.awssdk.core.util.DefaultSdkAutoConstructList;
import software.amazon.awssdk.core.util.SdkAutoConstructList;
import software.amazon.awssdk.utils.ToString;
import software.amazon.awssdk.utils.builder.CopyableBuilder;
import software.amazon.awssdk.utils.builder.ToCopyableBuilder;
/**
*
* ResultSet contains the results of the request for a single block or list defined on the screen.
*
*/
@Generated("software.amazon.awssdk:codegen")
public final class ResultSet implements SdkPojo, Serializable, ToCopyableBuilder {
private static final SdkField> HEADERS_FIELD = SdkField
.> builder(MarshallingType.LIST)
.memberName("headers")
.getter(getter(ResultSet::headers))
.setter(setter(Builder::headers))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("headers").build(),
ListTrait
.builder()
.memberLocationName(null)
.memberFieldInfo(
SdkField. builder(MarshallingType.SDK_POJO)
.constructor(ColumnMetadata::builder)
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD)
.locationName("member").build()).build()).build()).build();
private static final SdkField> ROWS_FIELD = SdkField
.> builder(MarshallingType.LIST)
.memberName("rows")
.getter(getter(ResultSet::rows))
.setter(setter(Builder::rows))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("rows").build(),
ListTrait
.builder()
.memberLocationName(null)
.memberFieldInfo(
SdkField. builder(MarshallingType.SDK_POJO)
.constructor(ResultRow::builder)
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD)
.locationName("member").build()).build()).build()).build();
private static final List> SDK_FIELDS = Collections.unmodifiableList(Arrays.asList(HEADERS_FIELD, ROWS_FIELD));
private static final long serialVersionUID = 1L;
private final List headers;
private final List rows;
private ResultSet(BuilderImpl builder) {
this.headers = builder.headers;
this.rows = builder.rows;
}
/**
* For responses, this returns true if the service returned a value for the Headers property. This DOES NOT check
* that the value is non-empty (for which, you should check the {@code isEmpty()} method on the property). This is
* useful because the SDK will never return a null collection or map, but you may need to differentiate between the
* service returning nothing (or null) and the service returning an empty collection or map. For requests, this
* returns true if a value for the property was specified in the request builder, and false if a value was not
* specified.
*/
public final boolean hasHeaders() {
return headers != null && !(headers instanceof SdkAutoConstructList);
}
/**
*
* List of headers for all the data cells in the block. The header identifies the name and default format of the
* data cell. Data cells appear in the same order in all rows as defined in the header. The names and formats are
* not repeated in the rows. If a particular row does not have a value for a data cell, a blank value is used.
*
*
* For example, a task list that displays the task name, due date and assigned person might have headers [ { "name":
* "Task Name"}, {"name": "Due Date", "format": "DATE"}, {"name": "Assigned", "format": "CONTACT"} ]. Every row in
* the result will have the task name as the first item, due date as the second item and assigned person as the
* third item. If a particular task does not have a due date, that row will still have a blank value in the second
* element and the assigned person will still be in the third element.
*
*
* Attempts to modify the collection returned by this method will result in an UnsupportedOperationException.
*
*
* This method will never return null. If you would like to know whether the service returned this field (so that
* you can differentiate between null and empty), you can use the {@link #hasHeaders} method.
*
*
* @return List of headers for all the data cells in the block. The header identifies the name and default format of
* the data cell. Data cells appear in the same order in all rows as defined in the header. The names and
* formats are not repeated in the rows. If a particular row does not have a value for a data cell, a blank
* value is used.
*
* For example, a task list that displays the task name, due date and assigned person might have headers [ {
* "name": "Task Name"}, {"name": "Due Date", "format": "DATE"}, {"name": "Assigned", "format": "CONTACT"}
* ]. Every row in the result will have the task name as the first item, due date as the second item and
* assigned person as the third item. If a particular task does not have a due date, that row will still
* have a blank value in the second element and the assigned person will still be in the third element.
*/
public final List headers() {
return headers;
}
/**
* For responses, this returns true if the service returned a value for the Rows property. This DOES NOT check that
* the value is non-empty (for which, you should check the {@code isEmpty()} method on the property). This is useful
* because the SDK will never return a null collection or map, but you may need to differentiate between the service
* returning nothing (or null) and the service returning an empty collection or map. For requests, this returns true
* if a value for the property was specified in the request builder, and false if a value was not specified.
*/
public final boolean hasRows() {
return rows != null && !(rows instanceof SdkAutoConstructList);
}
/**
*
* List of rows returned by the request. Each row has a row Id and a list of data cells in that row. The data cells
* will be present in the same order as they are defined in the header.
*
*
* Attempts to modify the collection returned by this method will result in an UnsupportedOperationException.
*
*
* This method will never return null. If you would like to know whether the service returned this field (so that
* you can differentiate between null and empty), you can use the {@link #hasRows} method.
*
*
* @return List of rows returned by the request. Each row has a row Id and a list of data cells in that row. The
* data cells will be present in the same order as they are defined in the header.
*/
public final List rows() {
return rows;
}
@Override
public Builder toBuilder() {
return new BuilderImpl(this);
}
public static Builder builder() {
return new BuilderImpl();
}
public static Class extends Builder> serializableBuilderClass() {
return BuilderImpl.class;
}
@Override
public final int hashCode() {
int hashCode = 1;
hashCode = 31 * hashCode + Objects.hashCode(hasHeaders() ? headers() : null);
hashCode = 31 * hashCode + Objects.hashCode(hasRows() ? rows() : null);
return hashCode;
}
@Override
public final boolean equals(Object obj) {
return equalsBySdkFields(obj);
}
@Override
public final boolean equalsBySdkFields(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof ResultSet)) {
return false;
}
ResultSet other = (ResultSet) obj;
return hasHeaders() == other.hasHeaders() && Objects.equals(headers(), other.headers()) && hasRows() == other.hasRows()
&& Objects.equals(rows(), other.rows());
}
/**
* Returns a string representation of this object. This is useful for testing and debugging. Sensitive data will be
* redacted from this string using a placeholder value.
*/
@Override
public final String toString() {
return ToString.builder("ResultSet").add("Headers", hasHeaders() ? headers() : null)
.add("Rows", hasRows() ? rows() : null).build();
}
public final Optional getValueForField(String fieldName, Class clazz) {
switch (fieldName) {
case "headers":
return Optional.ofNullable(clazz.cast(headers()));
case "rows":
return Optional.ofNullable(clazz.cast(rows()));
default:
return Optional.empty();
}
}
@Override
public final List> sdkFields() {
return SDK_FIELDS;
}
private static Function
*
* For example, a task list that displays the task name, due date and assigned person might have headers
* [ { "name": "Task Name"}, {"name": "Due Date", "format": "DATE"}, {"name": "Assigned", "format":
* "CONTACT"} ]. Every row in the result will have the task name as the first item, due date as the
* second item and assigned person as the third item. If a particular task does not have a due date, that
* row will still have a blank value in the second element and the assigned person will still be in the
* third element.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder headers(Collection headers);
/**
*
* List of headers for all the data cells in the block. The header identifies the name and default format of the
* data cell. Data cells appear in the same order in all rows as defined in the header. The names and formats
* are not repeated in the rows. If a particular row does not have a value for a data cell, a blank value is
* used.
*
*
* For example, a task list that displays the task name, due date and assigned person might have headers [ {
* "name": "Task Name"}, {"name": "Due Date", "format": "DATE"}, {"name": "Assigned", "format": "CONTACT"} ].
* Every row in the result will have the task name as the first item, due date as the second item and assigned
* person as the third item. If a particular task does not have a due date, that row will still have a blank
* value in the second element and the assigned person will still be in the third element.
*
*
* @param headers
* List of headers for all the data cells in the block. The header identifies the name and default format
* of the data cell. Data cells appear in the same order in all rows as defined in the header. The names
* and formats are not repeated in the rows. If a particular row does not have a value for a data cell, a
* blank value is used.
*
* For example, a task list that displays the task name, due date and assigned person might have headers
* [ { "name": "Task Name"}, {"name": "Due Date", "format": "DATE"}, {"name": "Assigned", "format":
* "CONTACT"} ]. Every row in the result will have the task name as the first item, due date as the
* second item and assigned person as the third item. If a particular task does not have a due date, that
* row will still have a blank value in the second element and the assigned person will still be in the
* third element.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder headers(ColumnMetadata... headers);
/**
*
* List of headers for all the data cells in the block. The header identifies the name and default format of the
* data cell. Data cells appear in the same order in all rows as defined in the header. The names and formats
* are not repeated in the rows. If a particular row does not have a value for a data cell, a blank value is
* used.
*
*
* For example, a task list that displays the task name, due date and assigned person might have headers [ {
* "name": "Task Name"}, {"name": "Due Date", "format": "DATE"}, {"name": "Assigned", "format": "CONTACT"} ].
* Every row in the result will have the task name as the first item, due date as the second item and assigned
* person as the third item. If a particular task does not have a due date, that row will still have a blank
* value in the second element and the assigned person will still be in the third element.
*
* This is a convenience method that creates an instance of the
* {@link software.amazon.awssdk.services.honeycode.model.ColumnMetadata.Builder} avoiding the need to create
* one manually via {@link software.amazon.awssdk.services.honeycode.model.ColumnMetadata#builder()}.
*
*
* When the {@link Consumer} completes,
* {@link software.amazon.awssdk.services.honeycode.model.ColumnMetadata.Builder#build()} is called immediately
* and its result is passed to {@link #headers(List)}.
*
* @param headers
* a consumer that will call methods on
* {@link software.amazon.awssdk.services.honeycode.model.ColumnMetadata.Builder}
* @return Returns a reference to this object so that method calls can be chained together.
* @see #headers(java.util.Collection)
*/
Builder headers(Consumer... headers);
/**
*
* List of rows returned by the request. Each row has a row Id and a list of data cells in that row. The data
* cells will be present in the same order as they are defined in the header.
*
*
* @param rows
* List of rows returned by the request. Each row has a row Id and a list of data cells in that row. The
* data cells will be present in the same order as they are defined in the header.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder rows(Collection rows);
/**
*
* List of rows returned by the request. Each row has a row Id and a list of data cells in that row. The data
* cells will be present in the same order as they are defined in the header.
*
*
* @param rows
* List of rows returned by the request. Each row has a row Id and a list of data cells in that row. The
* data cells will be present in the same order as they are defined in the header.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder rows(ResultRow... rows);
/**
*
* List of rows returned by the request. Each row has a row Id and a list of data cells in that row. The data
* cells will be present in the same order as they are defined in the header.
*
* This is a convenience method that creates an instance of the
* {@link software.amazon.awssdk.services.honeycode.model.ResultRow.Builder} avoiding the need to create one
* manually via {@link software.amazon.awssdk.services.honeycode.model.ResultRow#builder()}.
*
*
* When the {@link Consumer} completes,
* {@link software.amazon.awssdk.services.honeycode.model.ResultRow.Builder#build()} is called immediately and
* its result is passed to {@link #rows(List)}.
*
* @param rows
* a consumer that will call methods on
* {@link software.amazon.awssdk.services.honeycode.model.ResultRow.Builder}
* @return Returns a reference to this object so that method calls can be chained together.
* @see #rows(java.util.Collection)
*/
Builder rows(Consumer... rows);
}
static final class BuilderImpl implements Builder {
private List headers = DefaultSdkAutoConstructList.getInstance();
private List rows = DefaultSdkAutoConstructList.getInstance();
private BuilderImpl() {
}
private BuilderImpl(ResultSet model) {
headers(model.headers);
rows(model.rows);
}
public final List getHeaders() {
List result = ResultHeaderCopier.copyToBuilder(this.headers);
if (result instanceof SdkAutoConstructList) {
return null;
}
return result;
}
public final void setHeaders(Collection headers) {
this.headers = ResultHeaderCopier.copyFromBuilder(headers);
}
@Override
public final Builder headers(Collection headers) {
this.headers = ResultHeaderCopier.copy(headers);
return this;
}
@Override
@SafeVarargs
public final Builder headers(ColumnMetadata... headers) {
headers(Arrays.asList(headers));
return this;
}
@Override
@SafeVarargs
public final Builder headers(Consumer... headers) {
headers(Stream.of(headers).map(c -> ColumnMetadata.builder().applyMutation(c).build()).collect(Collectors.toList()));
return this;
}
public final List getRows() {
List result = ResultRowsCopier.copyToBuilder(this.rows);
if (result instanceof SdkAutoConstructList) {
return null;
}
return result;
}
public final void setRows(Collection rows) {
this.rows = ResultRowsCopier.copyFromBuilder(rows);
}
@Override
public final Builder rows(Collection rows) {
this.rows = ResultRowsCopier.copy(rows);
return this;
}
@Override
@SafeVarargs
public final Builder rows(ResultRow... rows) {
rows(Arrays.asList(rows));
return this;
}
@Override
@SafeVarargs
public final Builder rows(Consumer... rows) {
rows(Stream.of(rows).map(c -> ResultRow.builder().applyMutation(c).build()).collect(Collectors.toList()));
return this;
}
@Override
public ResultSet build() {
return new ResultSet(this);
}
@Override
public List> sdkFields() {
return SDK_FIELDS;
}
}
}