package org.xbib.elasticsearch.action.ingest.replica;
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.action.ActionRequest;
import org.elasticsearch.action.ActionRequestValidationException;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.support.IndicesOptions;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.io.stream.StreamOutput;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.shard.ShardId;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import static org.elasticsearch.action.ValidateActions.addValidationError;
public class IngestReplicaShardRequest extends ActionRequest<IngestReplicaShardRequest> {
public static final TimeValue DEFAULT_TIMEOUT = new TimeValue(1, TimeUnit.MINUTES);
private TimeValue timeout = DEFAULT_TIMEOUT;
private String index;
private boolean threadedOperation = true;
private long ingestId;
private ShardId shardId;
private List<ActionRequest<?>> actionRequests = new LinkedList<>();
public IngestReplicaShardRequest() {
}
public IngestReplicaShardRequest(long ingestId, ShardId shardId, List<ActionRequest<?>> actionRequests) {
this.index = shardId.index().name();
this.ingestId = ingestId;
this.shardId = shardId;
this.actionRequests = actionRequests;
}
public long ingestId() {
return ingestId;
}
public ShardId shardId() {
return shardId;
}
public List<ActionRequest<?>> actionRequests() {
return actionRequests;
}
public final boolean operationThreaded() {
return threadedOperation;
}
@SuppressWarnings("unchecked")
public final IngestReplicaShardRequest operationThreaded(boolean threadedOperation) {
this.threadedOperation = threadedOperation;
return this;
}
@SuppressWarnings("unchecked")
public final IngestReplicaShardRequest timeout(TimeValue timeout) {
this.timeout = timeout;
return this;
}
public TimeValue timeout() {
return timeout;
}
public String index() {
return index;
}
@SuppressWarnings("unchecked")
public final IngestReplicaShardRequest index(String index) {
this.index = index;
return this;
}
public String[] indices() {
return new String[]{index};
}
public IndicesOptions indicesOptions() {
return IndicesOptions.strictSingleIndexNoExpandForbidClosed();
}
@Override
public ActionRequestValidationException validate() {
ActionRequestValidationException validationException = null;
if (index == null) {
validationException = addValidationError("index is missing", null);
}
return validationException;
}
@Override
public void writeTo(StreamOutput out) throws IOException {
super.writeTo(out);
out.writeString(index);
timeout.writeTo(out);
out.writeLong(ingestId);
shardId.writeTo(out);
out.writeVInt(actionRequests.size());
for (ActionRequest<?> actionRequest : actionRequests) {
if (actionRequest == null) {
out.writeBoolean(false);
continue;
}
out.writeBoolean(true);
if (actionRequest instanceof IndexRequest) {
out.writeBoolean(true);
} else if (actionRequest instanceof DeleteRequest) {
out.writeBoolean(false);
} else {
throw new ElasticsearchException("action request not supported: " + actionRequest.getClass().getName());
}
actionRequest.writeTo(out);
}
}
@Override
public void readFrom(StreamInput in) throws IOException {
super.readFrom(in);
index = in.readString();
timeout = TimeValue.readTimeValue(in);
ingestId = in.readLong();
shardId = ShardId.readShardId(in);
int size = in.readVInt();
actionRequests = new LinkedList<>();
for (int i = 0; i < size; i++) {
boolean exists = in.readBoolean();
if (exists) {
boolean b = in.readBoolean();
if (b) {
IndexRequest indexRequest = new IndexRequest();
indexRequest.readFrom(in);
actionRequests.add(indexRequest);
} else {
DeleteRequest deleteRequest = new DeleteRequest();
deleteRequest.readFrom(in);
actionRequests.add(deleteRequest);
}
} else {
actionRequests.add(null);
}
}
}
}