package com.github.obourgain.elasticsearch.http.response.entity; import java.io.IOException; import java.util.Map; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.common.xcontent.XContentHelper; import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.common.xcontent.XContentType; import lombok.Getter; @Getter public class MappingMetaData { private String name; private byte[] source; public MappingMetaData parse(XContentParser parser) { try { XContentParser.Token token; while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) { if (token == XContentParser.Token.FIELD_NAME) { name = parser.currentName(); } else if (token == XContentParser.Token.START_OBJECT) { source = copySource(parser); } } return this; } catch (IOException e) { throw new RuntimeException(e); } } private byte[] copySource(XContentParser parser) { try(XContentBuilder docBuilder = XContentFactory.contentBuilder(XContentType.JSON)) { docBuilder.copyCurrentStructure(parser); return docBuilder.bytes().toBytes(); } catch (IOException e) { throw new RuntimeException(e); } } public Map<String, Object> getAsMap() { return XContentHelper.convertToMap(source, 0, source.length, true).v2(); } @Override public String toString() { // TODO this should be json to be easier to use ? return "MappingMetaData{" + "name='" + name + '\'' + ", source=" + new String(source) + '}'; } }