package crate.elasticsearch.action.import_; import java.io.IOException; import org.elasticsearch.action.support.nodes.NodeOperationResponse; import org.elasticsearch.cluster.node.DiscoveryNode; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.xcontent.ToXContent; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentBuilderString; import crate.elasticsearch.import_.Importer; public class NodeImportResponse extends NodeOperationResponse implements ToXContent { private Importer.Result result; NodeImportResponse() { } public NodeImportResponse(DiscoveryNode discoveryNode, Importer.Result result) { super(discoveryNode); this.result = result; } @Override public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { builder.startObject(); builder.field(Fields.NODE_ID, this.getNode().id()); builder.field(Fields.TOOK, result.took); builder.startArray(Fields.IMPORTED_FILES); for (Importer.ImportCounts counts : result.importCounts) { builder.startObject(); builder.field(Fields.FILE_NAME, counts.fileName); builder.field(Fields.SUCCESSES, counts.successes); builder.field(Fields.FAILURES, counts.failures); if (counts.invalid > 0) { builder.field(Fields.INVALIDATED, counts.invalid); } builder.endObject(); } builder.endArray(); builder.endObject(); return builder; } @Override public void readFrom(StreamInput in) throws IOException { super.readFrom(in); result = new Importer.Result(); result.took = in.readLong(); int fileCount = in.readInt(); for (int i = 0; i < fileCount; i++) { Importer.ImportCounts counts = new Importer.ImportCounts(); counts.fileName = in.readString(); counts.successes = in.readInt(); counts.failures = in.readInt(); counts.invalid = in.readInt(); result.importCounts.add(counts); } } @Override public void writeTo(StreamOutput out) throws IOException { super.writeTo(out); out.writeLong(result.took); out.writeInt(result.importCounts.size()); for (Importer.ImportCounts counts : result.importCounts) { out.writeString(counts.fileName); out.writeInt(counts.successes); out.writeInt(counts.failures); out.writeInt(counts.invalid); } } public static NodeImportResponse readNew(StreamInput in) throws IOException { NodeImportResponse response = new NodeImportResponse(); response.readFrom(in); return response; } static final class Fields { static final XContentBuilderString NODE_ID = new XContentBuilderString("node_id"); static final XContentBuilderString TOOK = new XContentBuilderString("took"); static final XContentBuilderString IMPORTED_FILES = new XContentBuilderString("imported_files"); static final XContentBuilderString FILE_NAME = new XContentBuilderString("file_name"); static final XContentBuilderString SUCCESSES = new XContentBuilderString("successes"); static final XContentBuilderString FAILURES = new XContentBuilderString("failures"); static final XContentBuilderString INVALIDATED = new XContentBuilderString("invalidated"); } }