org.elasticsearch.action.admin.cluster.storedscripts.GetScriptContextResponse Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of elasticsearch Show documentation
Show all versions of elasticsearch Show documentation
Elasticsearch subproject :server
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
package org.elasticsearch.action.admin.cluster.storedscripts;
import org.elasticsearch.action.ActionResponse;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.io.stream.StreamOutput;
import org.elasticsearch.common.util.Maps;
import org.elasticsearch.common.xcontent.StatusToXContentObject;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.script.ScriptContextInfo;
import org.elasticsearch.xcontent.ConstructingObjectParser;
import org.elasticsearch.xcontent.ParseField;
import org.elasticsearch.xcontent.XContentBuilder;
import org.elasticsearch.xcontent.XContentParser;
import java.io.IOException;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
public class GetScriptContextResponse extends ActionResponse implements StatusToXContentObject {
private static final ParseField CONTEXTS = new ParseField("contexts");
final Map contexts;
@SuppressWarnings("unchecked")
public static final ConstructingObjectParser PARSER = new ConstructingObjectParser<>(
"get_script_context",
true,
(a) -> {
Map contexts = ((List) a[0]).stream()
.collect(Collectors.toMap(ScriptContextInfo::getName, c -> c));
return new GetScriptContextResponse(contexts);
}
);
static {
PARSER.declareObjectArray(
ConstructingObjectParser.constructorArg(),
(parser, ctx) -> ScriptContextInfo.PARSER.apply(parser, ctx),
CONTEXTS
);
}
GetScriptContextResponse(StreamInput in) throws IOException {
super(in);
int size = in.readInt();
Map contexts = Maps.newMapWithExpectedSize(size);
for (int i = 0; i < size; i++) {
ScriptContextInfo info = new ScriptContextInfo(in);
contexts.put(info.name, info);
}
this.contexts = Collections.unmodifiableMap(contexts);
}
// TransportAction constructor
GetScriptContextResponse(Set contexts) {
this.contexts = Map.copyOf(contexts.stream().collect(Collectors.toMap(ScriptContextInfo::getName, Function.identity())));
}
// Parser constructor
private GetScriptContextResponse(Map contexts) {
this.contexts = Map.copyOf(contexts);
}
private List byName() {
return contexts.values().stream().sorted(Comparator.comparing(ScriptContextInfo::getName)).toList();
}
@Override
public void writeTo(StreamOutput out) throws IOException {
out.writeInt(contexts.size());
for (ScriptContextInfo context : contexts.values()) {
context.writeTo(out);
}
}
@Override
public RestStatus status() {
return RestStatus.OK;
}
@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject().startArray(CONTEXTS.getPreferredName());
for (ScriptContextInfo context : byName()) {
context.toXContent(builder, params);
}
builder.endArray().endObject(); // CONTEXTS
return builder;
}
public static GetScriptContextResponse fromXContent(XContentParser parser) throws IOException {
return PARSER.apply(parser, null);
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
GetScriptContextResponse that = (GetScriptContextResponse) o;
return contexts.equals(that.contexts);
}
@Override
public int hashCode() {
return Objects.hash(contexts);
}
}