summaryrefslogtreecommitdiff
path: root/core/src/main/java/org/elasticsearch/common/xcontent/support/AbstractXContentParser.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/java/org/elasticsearch/common/xcontent/support/AbstractXContentParser.java')
-rw-r--r--core/src/main/java/org/elasticsearch/common/xcontent/support/AbstractXContentParser.java46
1 files changed, 46 insertions, 0 deletions
diff --git a/core/src/main/java/org/elasticsearch/common/xcontent/support/AbstractXContentParser.java b/core/src/main/java/org/elasticsearch/common/xcontent/support/AbstractXContentParser.java
index c002549944..d13dcbd9c9 100644
--- a/core/src/main/java/org/elasticsearch/common/xcontent/support/AbstractXContentParser.java
+++ b/core/src/main/java/org/elasticsearch/common/xcontent/support/AbstractXContentParser.java
@@ -216,6 +216,16 @@ public abstract class AbstractXContentParser implements XContentParser {
}
@Override
+ public Map<String, String> mapStrings() throws IOException {
+ return readMapStrings(this);
+ }
+
+ @Override
+ public Map<String, String> mapStringsOrdered() throws IOException {
+ return readOrderedMapStrings(this);
+ }
+
+ @Override
public List<Object> list() throws IOException {
return readList(this);
}
@@ -229,10 +239,18 @@ public abstract class AbstractXContentParser implements XContentParser {
Map<String, Object> newMap();
}
+ interface MapStringsFactory {
+ Map<String, String> newMap();
+ }
+
static final MapFactory SIMPLE_MAP_FACTORY = HashMap::new;
static final MapFactory ORDERED_MAP_FACTORY = LinkedHashMap::new;
+ static final MapStringsFactory SIMPLE_MAP_STRINGS_FACTORY = HashMap::new;
+
+ static final MapStringsFactory ORDERED_MAP_STRINGS_FACTORY = LinkedHashMap::new;
+
static Map<String, Object> readMap(XContentParser parser) throws IOException {
return readMap(parser, SIMPLE_MAP_FACTORY);
}
@@ -241,6 +259,14 @@ public abstract class AbstractXContentParser implements XContentParser {
return readMap(parser, ORDERED_MAP_FACTORY);
}
+ static Map<String, String> readMapStrings(XContentParser parser) throws IOException {
+ return readMapStrings(parser, SIMPLE_MAP_STRINGS_FACTORY);
+ }
+
+ static Map<String, String> readOrderedMapStrings(XContentParser parser) throws IOException {
+ return readMapStrings(parser, ORDERED_MAP_STRINGS_FACTORY);
+ }
+
static List<Object> readList(XContentParser parser) throws IOException {
return readList(parser, SIMPLE_MAP_FACTORY);
}
@@ -269,6 +295,26 @@ public abstract class AbstractXContentParser implements XContentParser {
return map;
}
+ static Map<String, String> readMapStrings(XContentParser parser, MapStringsFactory mapStringsFactory) throws IOException {
+ Map<String, String> map = mapStringsFactory.newMap();
+ XContentParser.Token token = parser.currentToken();
+ if (token == null) {
+ token = parser.nextToken();
+ }
+ if (token == XContentParser.Token.START_OBJECT) {
+ token = parser.nextToken();
+ }
+ for (; token == XContentParser.Token.FIELD_NAME; token = parser.nextToken()) {
+ // Must point to field name
+ String fieldName = parser.currentName();
+ // And then the value...
+ parser.nextToken();
+ String value = parser.text();
+ map.put(fieldName, value);
+ }
+ return map;
+ }
+
static List<Object> readList(XContentParser parser, MapFactory mapFactory) throws IOException {
XContentParser.Token token = parser.currentToken();
if (token == null) {