package com.github.obourgain.elasticsearch.http.response.entity; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.elasticsearch.common.xcontent.XContentParser; import lombok.Getter; @Getter public class Token { private String payload; private Integer position; private Integer startOffset; private Integer endOffset; public Token parse(XContentParser parser) { try { assert parser.currentToken() == XContentParser.Token.START_OBJECT : "expected a START_OBJECT token but was " + parser.currentToken(); XContentParser.Token token; String currentFieldName = null; while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) { if (token == XContentParser.Token.FIELD_NAME) { currentFieldName = parser.currentName(); } else if (token.isValue()) { if ("end_offset".equals(currentFieldName)) { endOffset = parser.intValue(); } else if ("payload".equals(currentFieldName)) { payload = parser.text(); } else if ("position".equals(currentFieldName)) { position = parser.intValue(); } else if ("start_offset".equals(currentFieldName)) { startOffset = parser.intValue(); } } } return this; } catch (IOException e) { throw new RuntimeException(e); } } public static List<Token> parseList(XContentParser parser) { try { assert parser.currentToken() == XContentParser.Token.START_ARRAY : "expected a START_ARRAY token but was " + parser.currentToken(); List<Token> tokens = new ArrayList<>(); XContentParser.Token token; String currentFieldName = null; while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { assert parser.currentToken() == XContentParser.Token.START_OBJECT : "expected a START_OBJECT token but was " + parser.currentToken(); Token parsed = new Token().parse(parser); tokens.add(parsed); } return tokens; } catch (IOException e) { throw new RuntimeException(e); } } }