package me.osm.gazetteer.web.api; import java.util.Map.Entry; import me.osm.gazetteer.web.ESNodeHolder; import me.osm.gazetteer.web.imp.IndexHolder; import org.elasticsearch.action.admin.indices.mapping.get.GetMappingsRequestBuilder; import org.elasticsearch.action.admin.indices.mapping.get.GetMappingsResponse; import org.elasticsearch.cluster.metadata.MappingMetaData; import org.elasticsearch.common.collect.ImmutableOpenMap; import org.elasticsearch.common.hppc.ObjectContainer; import org.elasticsearch.common.hppc.cursors.ObjectCursor; import org.json.JSONObject; import org.restexpress.Request; import org.restexpress.Response; public class IndexAPI { public JSONObject read(Request request, Response response) { boolean rebuild = "true".equals(request.getHeader("rebuild")); if(rebuild) { IndexHolder.dropIndex(); IndexHolder.createIndex(); JSONObject res = new JSONObject();; res.put("result", "done"); return res; } else { GetMappingsResponse mappingsResponse = new GetMappingsRequestBuilder( ESNodeHolder.getClient().admin().indices(), "gazetteer").get(); JSONObject result = new JSONObject(); ImmutableOpenMap<String, ImmutableOpenMap<String, MappingMetaData>> answer = mappingsResponse.getMappings(); ObjectContainer<MappingMetaData> mappings = answer.get("gazetteer").values(); for (ObjectCursor<MappingMetaData> objectCursor : mappings) { MappingMetaData mmeta = objectCursor.value; result.put(mmeta.type(), new JSONObject(mmeta.source().toString())); } return result; } } }