}
}
@SuppressWarnings({"unchecked"})
@Override public void handleRequest(final RestRequest request, final RestChannel channel) {
PutIndexTemplateRequest putRequest = new PutIndexTemplateRequest(request.param("name"));
try {
putRequest.create(request.paramAsBoolean("create", false));
putRequest.cause(request.param("cause", ""));
putRequest.timeout(request.paramAsTime("timeout", timeValueSeconds(10)));
// parse the parameters
Map<String, Object> source = XContentFactory.xContent(request.contentByteArray(), request.contentByteArrayOffset(), request.contentLength())
.createParser(request.contentByteArray(), request.contentByteArrayOffset(), request.contentLength()).mapAndClose();
if (source.containsKey("template")) {
putRequest.template(source.get("template").toString());
}
if (source.containsKey("order")) {
putRequest.order(XContentMapValues.nodeIntegerValue(source.get("order"), putRequest.order()));
}
if (source.containsKey("settings")) {
if (!(source.get("settings") instanceof Map)) {
throw new ElasticSearchIllegalArgumentException("Malformed settings section, should include an inner object");
}
putRequest.settings((Map<String, Object>) source.get("settings"));
}
if (source.containsKey("mappings")) {
Map<String, Object> mappings = (Map<String, Object>) source.get("mappings");
for (Map.Entry<String, Object> entry : mappings.entrySet()) {
if (!(entry.getValue() instanceof Map)) {
throw new ElasticSearchIllegalArgumentException("Malformed mappings section for type [" + entry.getKey() + "], should include an inner object describing the mapping");
}
putRequest.mapping(entry.getKey(), (Map<String, Object>) entry.getValue());
}
}
} catch (Exception e) {
try {
channel.sendResponse(new XContentThrowableRestResponse(request, e));
} catch (IOException e1) {
logger.warn("Failed to send response", e1);
}
return;
}
putRequest.template(request.param("template", putRequest.template()));
putRequest.order(request.paramAsInt("order", putRequest.order()));
client.admin().indices().putTemplate(putRequest, new ActionListener<PutIndexTemplateResponse>() {
@Override public void onResponse(PutIndexTemplateResponse response) {
try {
XContentBuilder builder = RestXContentBuilder.restContentBuilder(request);