controller.registerHandler(RestRequest.Method.POST, "/{index}", this);
}
@SuppressWarnings({"unchecked"})
@Override public void handleRequest(final RestRequest request, final RestChannel channel) {
CreateIndexRequest createIndexRequest = new CreateIndexRequest(request.param("index"));
if (request.hasContent()) {
XContentType xContentType = XContentFactory.xContentType(request.contentByteArray(), request.contentByteArrayOffset(), request.contentLength());
if (xContentType != null) {
try {
Map<String, Object> source = XContentFactory.xContent(xContentType)
.createParser(request.contentByteArray(), request.contentByteArrayOffset(), request.contentLength()).mapAndClose();
boolean found = false;
if (source.containsKey("settings")) {
createIndexRequest.settings((Map<String, Object>) source.get("settings"));
found = true;
}
if (source.containsKey("mappings")) {
found = true;
Map<String, Object> mappings = (Map<String, Object>) source.get("mappings");
for (Map.Entry<String, Object> entry : mappings.entrySet()) {
createIndexRequest.mapping(entry.getKey(), (Map<String, Object>) entry.getValue());
}
}
if (!found) {
// the top level are settings, use them
createIndexRequest.settings(source);
}
} catch (Exception e) {
try {
channel.sendResponse(new XContentThrowableRestResponse(request, e));
} catch (IOException e1) {
logger.warn("Failed to send response", e1);
return;
}
}
} else {
// its plain settings, parse and set them
try {
createIndexRequest.settings(request.contentAsString());
} catch (Exception e) {
try {
channel.sendResponse(new XContentThrowableRestResponse(request, BAD_REQUEST, new SettingsException("Failed to parse index settings", e)));
} catch (IOException e1) {
logger.warn("Failed to send response", e1);
return;
}
}
}
}
createIndexRequest.timeout(request.paramAsTime("timeout", timeValueSeconds(10)));
client.admin().indices().create(createIndexRequest, new ActionListener<CreateIndexResponse>() {
@Override public void onResponse(CreateIndexResponse response) {
try {
XContentBuilder builder = RestXContentBuilder.restContentBuilder(request);