package com.github.obourgain.elasticsearch.http.response.entity; import static org.elasticsearch.common.xcontent.XContentParser.Token.END_ARRAY; import static org.elasticsearch.common.xcontent.XContentParser.Token.FIELD_NAME; import static org.elasticsearch.common.xcontent.XContentParser.Token.START_OBJECT; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.elasticsearch.common.xcontent.XContentParser; import lombok.Getter; @Getter public class Highlight { private String name; private List<String> values = new ArrayList<>(); public String getValue() { if (values == null || values.isEmpty()) { return null; } return values.get(0); } public Highlight parse(XContentParser parser) throws IOException { assert parser.currentToken() == FIELD_NAME : "expected a FIELD_NAME token but was " + parser.currentToken(); name = parser.text(); XContentParser.Token token; while ((token = parser.nextToken()) != END_ARRAY) { if (token.isValue()) { values.add(parser.text()); } } return this; } public static Map<String, Highlight> parseHighlights(XContentParser parser) { try { assert parser.currentToken() == START_OBJECT : "expected a START_OBJECT token but was " + parser.currentToken(); assert parser.currentName().equals("highlight") : "expected a current name to be 'highlight' but was " + parser.currentName(); Map<String, Highlight> result = new HashMap<>(); while (parser.nextToken() != XContentParser.Token.END_OBJECT) { Highlight highlight = new Highlight().parse(parser); result.put(highlight.getName(), highlight); } return result; } catch (IOException e) { throw new RuntimeException(e); } } @Override public String toString() { return "Highlight{" + "name='" + name + '\'' + ", values=" + values + '}'; } }