Example usage for com.google.gson.stream JsonReader peek

List of usage examples for com.google.gson.stream JsonReader peek

Introduction

In this page you can find the example usage for com.google.gson.stream JsonReader peek.

Prototype

public JsonToken peek() throws IOException 

Source Link

Document

Returns the type of the next token without consuming it.

Usage

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();
}