List of usage examples for com.google.gson.stream JsonReader peek
public JsonToken peek() throws IOException
From source file:org.opendaylight.netconf.sal.rest.impl.JsonToPATCHBodyReader.java
License:Open Source License
private List<PATCHEntity> read(final JsonReader in, InstanceIdentifierContext path) throws IOException { boolean inEdit = false; boolean inValue = false; String operation = null;/*from ww w . j av a 2 s .com*/ String target = null; String editId = null; List<PATCHEntity> resultCollection = new ArrayList<>(); while (in.hasNext()) { switch (in.peek()) { case STRING: case NUMBER: in.nextString(); break; case BOOLEAN: Boolean.toString(in.nextBoolean()); break; case NULL: in.nextNull(); break; case BEGIN_ARRAY: in.beginArray(); break; case BEGIN_OBJECT: if (inEdit && operation != null & target != null & inValue) { //let's do the stuff - find out target node // StringInstanceIdentifierCodec codec = new StringInstanceIdentifierCodec(path // .getSchemaContext()); // if (path.getInstanceIdentifier().toString().equals("/")) { // final YangInstanceIdentifier deserialized = codec.deserialize(target); // } DataSchemaNode targetNode = ((DataNodeContainer) (path.getSchemaNode())) .getDataChildByName(target.replace("/", "")); if (targetNode == null) { LOG.debug("Target node {} not found in path {} ", target, path.getSchemaNode()); throw new RestconfDocumentedException("Error parsing input", ErrorType.PROTOCOL, ErrorTag.MALFORMED_MESSAGE); } else { final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter .from(resultHolder); //keep on parsing json from place where target points final JsonParserStream jsonParser = JsonParserStream.create(writer, path.getSchemaContext(), path.getSchemaNode()); jsonParser.parse(in); final YangInstanceIdentifier targetII = path.getInstanceIdentifier() .node(targetNode.getQName()); resultCollection .add(new PATCHEntity(editId, operation, targetII, resultHolder.getResult())); inValue = false; operation = null; target = null; } in.endObject(); } else { in.beginObject(); } break; case END_DOCUMENT: break; case NAME: final String name = in.nextName(); switch (name) { case "edit": inEdit = true; break; case "operation": operation = in.nextString(); break; case "target": target = in.nextString(); break; case "value": inValue = true; break; case "patch-id": patchId = in.nextString(); break; case "edit-id": editId = in.nextString(); break; } break; case END_OBJECT: in.endObject(); break; case END_ARRAY: in.endArray(); break; default: break; } } return ImmutableList.copyOf(resultCollection); }
From source file:org.opendaylight.restconf.jersey.providers.JsonToPATCHBodyReader.java
License:Open Source License
private List<PATCHEntity> read(final JsonReader in, final InstanceIdentifierContext path) throws IOException { final List<PATCHEntity> resultCollection = new ArrayList<>(); final StringModuleInstanceIdentifierCodec codec = new StringModuleInstanceIdentifierCodec( path.getSchemaContext());/*from w ww . jav a 2s . c om*/ final JsonToPATCHBodyReader.PatchEdit edit = new JsonToPATCHBodyReader.PatchEdit(); while (in.hasNext()) { switch (in.peek()) { case STRING: case NUMBER: in.nextString(); break; case BOOLEAN: Boolean.toString(in.nextBoolean()); break; case NULL: in.nextNull(); break; case BEGIN_ARRAY: in.beginArray(); break; case BEGIN_OBJECT: in.beginObject(); break; case END_DOCUMENT: break; case NAME: parseByName(in.nextName(), edit, in, path, codec, resultCollection); break; case END_OBJECT: in.endObject(); break; case END_ARRAY: in.endArray(); break; default: break; } } return ImmutableList.copyOf(resultCollection); }
From source file:org.opendaylight.restconf.jersey.providers.JsonToPATCHBodyReader.java
License:Open Source License
/** * Switch value of parsed JsonToken.NAME and read edit definition or patch id * @param name value of token/* w w w . j a v a2s . co m*/ * @param edit PatchEdit instance * @param in JsonReader reader * @param path InstanceIdentifierContext context * @param codec Draft11StringModuleInstanceIdentifierCodec codec * @param resultCollection collection of parsed edits * @throws IOException */ private void parseByName(@Nonnull final String name, @Nonnull final PatchEdit edit, @Nonnull final JsonReader in, @Nonnull final InstanceIdentifierContext path, @Nonnull final StringModuleInstanceIdentifierCodec codec, @Nonnull final List<PATCHEntity> resultCollection) throws IOException { switch (name) { case "edit": if (in.peek() == JsonToken.BEGIN_ARRAY) { in.beginArray(); while (in.hasNext()) { readEditDefinition(edit, in, path, codec); resultCollection.add(prepareEditOperation(edit)); edit.clear(); } in.endArray(); } else { readEditDefinition(edit, in, path, codec); resultCollection.add(prepareEditOperation(edit)); edit.clear(); } break; case "patch-id": this.patchId = in.nextString(); break; default: break; } }
From source file:org.opendaylight.restconf.jersey.providers.JsonToPATCHBodyReader.java
License:Open Source License
/** * Parse data defined in value node and saves it to buffer * @param value Buffer to read value node * @param in JsonReader reader/* w w w . jav a2s .c o m*/ * @throws IOException */ private void readValueNode(@Nonnull final StringBuffer value, @Nonnull final JsonReader in) throws IOException { in.beginObject(); value.append("{"); value.append("\"" + in.nextName() + "\"" + ":"); if (in.peek() == JsonToken.BEGIN_ARRAY) { in.beginArray(); value.append("["); while (in.hasNext()) { readValueObject(value, in); if (in.peek() != JsonToken.END_ARRAY) { value.append(","); } } in.endArray(); value.append("]"); } else { readValueObject(value, in); } in.endObject(); value.append("}"); }
From source file:org.opendaylight.restconf.jersey.providers.JsonToPATCHBodyReader.java
License:Open Source License
/** * Parse one value object of data and saves it to buffer * @param value Buffer to read value object * @param in JsonReader reader/*from w w w. jav a 2 s . co m*/ * @throws IOException */ private void readValueObject(@Nonnull final StringBuffer value, @Nonnull final JsonReader in) throws IOException { in.beginObject(); value.append("{"); while (in.hasNext()) { value.append("\"" + in.nextName() + "\""); value.append(":"); if (in.peek() == JsonToken.STRING) { value.append("\"" + in.nextString() + "\""); } else { if (in.peek() == JsonToken.BEGIN_ARRAY) { in.beginArray(); value.append("["); while (in.hasNext()) { readValueObject(value, in); if (in.peek() != JsonToken.END_ARRAY) { value.append(","); } } in.endArray(); value.append("]"); } else { readValueObject(value, in); } } if (in.peek() != JsonToken.END_OBJECT) { value.append(","); } } in.endObject(); value.append("}"); }
From source file:org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream.java
License:Open Source License
public JsonParserStream parse(final JsonReader reader) { // code copied from gson's JsonParser and Stream classes final boolean lenient = reader.isLenient(); reader.setLenient(true);/*from w ww . j a v a2 s . c o m*/ boolean isEmpty = true; try { reader.peek(); isEmpty = false; final CompositeNodeDataWithSchema compositeNodeDataWithSchema = new CompositeNodeDataWithSchema( parentNode); read(reader, compositeNodeDataWithSchema); compositeNodeDataWithSchema.write(writer); return this; } catch (final EOFException e) { if (isEmpty) { return this; } // The stream ended prematurely so it is likely a syntax error. throw new JsonSyntaxException(e); } catch (final MalformedJsonException | NumberFormatException e) { throw new JsonSyntaxException(e); } catch (final IOException e) { throw new JsonIOException(e); } catch (StackOverflowError | OutOfMemoryError e) { throw new JsonParseException("Failed parsing JSON source: " + reader + " to Json", e); } finally { reader.setLenient(lenient); } }
From source file:org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream.java
License:Open Source License
private void traverseAnyXmlValue(final JsonReader in, final Document doc, final Element parentElement) throws IOException { switch (in.peek()) { case STRING:// w w w . java 2 s .c o m case NUMBER: Text textNode = doc.createTextNode(in.nextString()); parentElement.appendChild(textNode); break; case BOOLEAN: textNode = doc.createTextNode(Boolean.toString(in.nextBoolean())); parentElement.appendChild(textNode); break; case NULL: in.nextNull(); textNode = doc.createTextNode("null"); parentElement.appendChild(textNode); break; case BEGIN_ARRAY: in.beginArray(); while (in.hasNext()) { final Element childElement = doc.createElement(ANYXML_ARRAY_ELEMENT_ID); parentElement.appendChild(childElement); traverseAnyXmlValue(in, doc, childElement); } in.endArray(); break; case BEGIN_OBJECT: in.beginObject(); while (in.hasNext()) { final Element childElement = doc.createElement(in.nextName()); parentElement.appendChild(childElement); traverseAnyXmlValue(in, doc, childElement); } in.endObject(); case END_DOCUMENT: case NAME: case END_OBJECT: case END_ARRAY: break; } }
From source file:org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream.java
License:Open Source License
public void read(final JsonReader in, AbstractNodeDataWithSchema parent) throws IOException { switch (in.peek()) { case STRING:// w ww .j a v a2s .co m case NUMBER: setValue(parent, in.nextString()); break; case BOOLEAN: setValue(parent, Boolean.toString(in.nextBoolean())); break; case NULL: in.nextNull(); setValue(parent, null); break; case BEGIN_ARRAY: in.beginArray(); while (in.hasNext()) { if (parent instanceof LeafNodeDataWithSchema) { read(in, parent); } else { final AbstractNodeDataWithSchema newChild = newArrayEntry(parent); read(in, newChild); } } in.endArray(); return; case BEGIN_OBJECT: final Set<String> namesakes = new HashSet<>(); in.beginObject(); /* * This allows parsing of incorrectly /as showcased/ * in testconf nesting of list items - eg. * lists with one value are sometimes serialized * without wrapping array. * */ if (isArray(parent)) { parent = newArrayEntry(parent); } while (in.hasNext()) { final String jsonElementName = in.nextName(); DataSchemaNode parentSchema = parent.getSchema(); if (parentSchema instanceof YangModeledAnyXmlSchemaNode) { parentSchema = ((YangModeledAnyXmlSchemaNode) parentSchema).getSchemaOfAnyXmlData(); } final NamespaceAndName namespaceAndName = resolveNamespace(jsonElementName, parentSchema); final String localName = namespaceAndName.getName(); addNamespace(namespaceAndName.getUri()); if (namesakes.contains(jsonElementName)) { throw new JsonSyntaxException("Duplicate name " + jsonElementName + " in JSON input."); } namesakes.add(jsonElementName); final Deque<DataSchemaNode> childDataSchemaNodes = ParserStreamUtils .findSchemaNodeByNameAndNamespace(parentSchema, localName, getCurrentNamespace()); if (childDataSchemaNodes.isEmpty()) { throw new IllegalStateException("Schema for node with name " + localName + " and namespace " + getCurrentNamespace() + " doesn't exist."); } final AbstractNodeDataWithSchema newChild = ((CompositeNodeDataWithSchema) parent) .addChild(childDataSchemaNodes); if (newChild instanceof AnyXmlNodeDataWithSchema) { readAnyXmlValue(in, (AnyXmlNodeDataWithSchema) newChild, jsonElementName); } else { read(in, newChild); } removeNamespace(); } in.endObject(); return; case END_DOCUMENT: case NAME: case END_OBJECT: case END_ARRAY: break; } }
From source file:org.openhab.core.automation.internal.parser.gson.RuleGSONParser.java
License:Open Source License
@Override public Set<Rule> parse(InputStreamReader reader) throws ParsingException { JsonReader jr = new JsonReader(reader); try {//from w ww . j ava 2 s .c om Set<Rule> rules = new HashSet<>(); if (jr.hasNext()) { JsonToken token = jr.peek(); if (JsonToken.BEGIN_ARRAY.equals(token)) { List<RuleDTO> ruleDtos = gson.fromJson(jr, new TypeToken<List<RuleDTO>>() { }.getType()); for (RuleDTO ruleDto : ruleDtos) { rules.add(RuleDTOMapper.map(ruleDto)); } } else { RuleDTO ruleDto = gson.fromJson(jr, RuleDTO.class); rules.add(RuleDTOMapper.map(ruleDto)); } return rules; } } catch (Exception e) { throw new ParsingException(new ParsingNestedException(ParsingNestedException.RULE, null, e)); } finally { try { jr.close(); } catch (IOException e) { } } return Collections.emptySet(); }
From source file:org.openhab.core.automation.internal.parser.gson.TemplateGSONParser.java
License:Open Source License
@Override public Set<Template> parse(InputStreamReader reader) throws ParsingException { JsonReader jr = new JsonReader(reader); try {// ww w.jav a 2s . com if (jr.hasNext()) { JsonToken token = jr.peek(); Set<Template> templates = new HashSet<>(); if (JsonToken.BEGIN_ARRAY.equals(token)) { List<RuleTemplateDTO> templateDtos = gson.fromJson(jr, new TypeToken<List<RuleTemplateDTO>>() { }.getType()); for (RuleTemplateDTO templateDto : templateDtos) { templates.add(RuleTemplateDTOMapper.map(templateDto)); } } else { RuleTemplateDTO template = gson.fromJson(jr, RuleTemplateDTO.class); templates.add(RuleTemplateDTOMapper.map(template)); } return templates; } } catch (Exception e) { throw new ParsingException(new ParsingNestedException(ParsingNestedException.TEMPLATE, null, e)); } finally { try { jr.close(); } catch (IOException e) { } } return Collections.emptySet(); }