/* * Copyright OpenSearch Contributors * SPDX-License-Identifier: Apache-2.0 */ package org.opensearch.search.asynchronous.response; import org.opensearch.action.ActionResponse; import org.opensearch.common.io.stream.StreamInput; import org.opensearch.common.io.stream.StreamOutput; import org.opensearch.common.xcontent.StatusToXContentObject; import org.opensearch.core.ParseField; import org.opensearch.core.xcontent.ConstructingObjectParser; import org.opensearch.core.xcontent.ObjectParser; import org.opensearch.core.xcontent.XContentBuilder; import org.opensearch.rest.RestStatus; import java.io.IOException; import java.util.Objects; import static org.opensearch.core.xcontent.ConstructingObjectParser.constructorArg; import static org.opensearch.rest.RestStatus.NOT_FOUND; import static org.opensearch.rest.RestStatus.OK; /** * A response that indicates that a request has been acknowledged */ public class AcknowledgedResponse extends ActionResponse implements StatusToXContentObject { private static final ParseField ACKNOWLEDGED = new ParseField("acknowledged"); protected boolean acknowledged; public AcknowledgedResponse(StreamInput in) throws IOException { super(in); acknowledged = in.readBoolean(); } public AcknowledgedResponse(StreamInput in, boolean readAcknowledged) throws IOException { super(in); if (readAcknowledged) { acknowledged = in.readBoolean(); } } public AcknowledgedResponse(boolean acknowledged) { this.acknowledged = acknowledged; } /** * Returns whether the response is acknowledged or not * * @return true if the response is acknowledged, false otherwise */ public final boolean isAcknowledged() { return acknowledged; } @Override public void writeTo(StreamOutput out) throws IOException { out.writeBoolean(acknowledged); } @Override public final XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { builder.startObject(); builder.field(ACKNOWLEDGED.getPreferredName(), isAcknowledged()); addCustomFields(builder, params); builder.endObject(); return builder; } protected void addCustomFields(XContentBuilder builder, Params params) throws IOException { } /** * A generic parser that simply parses the acknowledged flag */ private static final ConstructingObjectParser ACKNOWLEDGED_FLAG_PARSER = new ConstructingObjectParser<>( "acknowledged_flag", true, args -> (Boolean) args[0]); static { ACKNOWLEDGED_FLAG_PARSER.declareField(constructorArg(), (parser, context) -> parser.booleanValue(), ACKNOWLEDGED, ObjectParser.ValueType.BOOLEAN); } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } AcknowledgedResponse that = (AcknowledgedResponse) o; return isAcknowledged() == that.isAcknowledged(); } @Override public int hashCode() { return Objects.hash(isAcknowledged()); } @Override public RestStatus status() { return acknowledged ? OK : NOT_FOUND; } }