/** * Parse the JSON returned from splunkd describing this data model. * * This method writes the results into fields of this object. * * @param input a String containing JSON. */ private void parseDescription(String input) { objects = new HashMap<String, DataModelObject>(); JsonElement rootElement = jsonParser.parse(input); for (Entry<String, JsonElement> entry : rootElement.getAsJsonObject().entrySet()) { if (entry.getKey().equals(MODEL_NAME_LABEL)) { content.put(MODEL_NAME_LABEL, entry.getValue().getAsString()); } else if (entry.getKey().equals(DISPLAY_NAME_LABEL)) { content.put(DISPLAY_NAME_LABEL, entry.getValue().getAsString()); } else if (entry.getKey().equals(DESCRIPTION_LABEL)) { description = entry.getValue().getAsString(); } else if (entry.getKey().equals("objects")) { JsonArray objectArray = entry.getValue().getAsJsonArray(); for (JsonElement object : objectArray) { DataModelObject dmo = DataModelObject.parse(this, object); objects.put(dmo.getName(), dmo); } } else { // Allow new keys without complaining } } }
/** * Parses a {@code <dict>} content element and returns a {@code Record} * object containing the parsed values. * * @param reader The {@code <dict>} element to parse. * @return A {@code Record} object containing the parsed values. */ private Record parseDict(XMLStreamReader reader) { assert isStartElement(reader, "dict"); Record result = new Record(); scan(reader); while (isStartElement(reader, "key")) { String key = reader.getAttributeValue(null, "name"); Object value = parseValue(reader); // Null values, the result of empty elements, are parsed as though // they don't exist, making it easier for the client framework to // supply more meaningful default values. if (value != null) result.put(key, value); } if (!isEndElement(reader, "dict")) syntaxError(reader); scan(reader); // Consume </dict> return result; }