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

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

Introduction

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

Prototype

public boolean hasNext() throws IOException 

Source Link

Document

Returns true if the current array or object has another element.

Usage

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  ww  w  . j  a v a2s  .com*/
 * @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

private void traverseAnyXmlValue(final JsonReader in, final Document doc, final Element parentElement)
        throws IOException {
    switch (in.peek()) {
    case STRING:/*  w  w w .  j  a  va  2 s .c  om*/
    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://from w w w  .  ja  v  a 2s .  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  w  w.j av  a 2 s.co  m
        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  . j a  v a  2s  .  c om
        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();
}

From source file:org.openstreetmap.josm.plugins.openstreetcam.service.photo.adapter.PhotoTypeAdapter.java

License:LGPL

@Override
public Photo read(final JsonReader reader) throws IOException {
    Double latitude = null;//from  w  w w  .j  a  v  a  2  s  .c om
    Double longitude = null;
    final PhotoBuilder builder = new PhotoBuilder();
    reader.beginObject();
    while (reader.hasNext()) {
        switch (reader.nextName()) {
        case PHOTO_ID:
            builder.id(ReaderUtil.readLong(reader));
            break;
        case PHOTO_SEQUENCE_ID:
            builder.sequenceId(ReaderUtil.readLong(reader));
            break;
        case PHOTO_SEQUENCE_IDX:
            builder.sequenceIndex(ReaderUtil.readInt(reader));
            break;
        case PHOTO_LATITUDE:
            latitude = ReaderUtil.readDouble(reader);
            break;
        case PHOTO_LONGITUDE:
            longitude = ReaderUtil.readDouble(reader);
            break;
        case PHOTO_NAME:
            builder.name(ReaderUtil.readString(reader));
            break;
        case PHOTO_LTH_NAME:
            builder.largeThumbnailName(ReaderUtil.readString(reader));
            break;
        case PHOTO_TH_NAME:
            builder.thumbnailName(ReaderUtil.readString(reader));
            break;
        case PHOTO_ORI_NAME:
            builder.oriName(ReaderUtil.readString(reader));
            break;
        case PHOTO_TIMESTAMP:
            builder.timestamp(ReaderUtil.readLong(reader));
            break;
        case PHOTO_HEADING:
            final String value = ReaderUtil.readString(reader);
            final Double heading = value != null && !value.isEmpty() ? Double.parseDouble(value) : null;
            builder.heading(heading);
            break;
        case PHOTO_USERNAME:
            builder.username(ReaderUtil.readString(reader));
            break;
        case WAY_ID:
            final String wayIdValue = ReaderUtil.readString(reader);
            final Long wayId = wayIdValue != null && !wayIdValue.isEmpty() ? Long.parseLong(wayIdValue) : null;
            builder.wayId(wayId);
            break;
        case PHOTO_SHOT_DATE:
            builder.shotDate(ReaderUtil.readString(reader));
            break;
        default:
            reader.skipValue();
            break;
        }
    }
    if (latitude != null && longitude != null) {
        builder.point(latitude, longitude);
    }
    reader.endObject();
    return builder.build();
}

From source file:org.openstreetmap.josm.plugins.openstreetcam.service.photo.adapter.ReaderUtil.java

License:LGPL

/**
 * Reads a geometry that has the following format: [[lat1,lon1], [lat2,lon2],...[latn,lonn]].
 *
 * @param reader a {@code JsonReader} object
 * @return a list of {@code LatLon} objects
 * @throws IOException if the read operation failed
 */// www.ja  va  2  s  . c  o m
static List<LatLon> readGeometry(final JsonReader reader) throws IOException {
    final List<LatLon> geometry = new ArrayList<>();
    if (reader.peek() == JsonToken.NULL) {
        reader.nextNull();
    } else {
        reader.beginArray();
        while (reader.hasNext()) {
            reader.beginArray();
            final Double lat = reader.nextDouble();
            final Double lon = reader.nextDouble();
            geometry.add(new LatLon(lat, lon));
            reader.endArray();
        }
        reader.endArray();
    }
    return geometry;
}

From source file:org.openstreetmap.josm.plugins.openstreetcam.service.photo.adapter.SegmentTypeAdapter.java

License:LGPL

@Override
public Segment read(final JsonReader reader) throws IOException {
    final SegmentBuilder builder = new SegmentBuilder();
    reader.beginObject();/*  w  w w  .  j  a  v  a 2  s. c  o m*/
    while (reader.hasNext()) {
        switch (reader.nextName()) {
        case SEGMENT_ID:
            builder.id(ReaderUtil.readString(reader));
            break;
        case SEGMENT_FROM:
            builder.from(ReaderUtil.readLong(reader));
            break;
        case SEGMENT_TO:
            builder.to(ReaderUtil.readLong(reader));
            break;
        case WAY_ID:
            builder.wayId(ReaderUtil.readLong(reader));
            break;
        case SEGMENT_COVERAGE:
            builder.coverage(ReaderUtil.readInt(reader));
            break;
        case SEGMENT_GEOMETRY:
            builder.geometry(ReaderUtil.readGeometry(reader));
            break;
        default:
            reader.skipValue();
            break;
        }
    }
    reader.endObject();
    return builder.build();
}

From source file:org.openstreetmap.josm.plugins.openstreetcam.service.PhotoTypeAdapter.java

License:Apache License

@Override
public Photo read(final JsonReader reader) throws IOException {
    Long id = null;//from  w  w  w .  ja  v  a2  s  . c  om
    Long sequenceId = null;
    Integer sequenceIdx = null;
    Double latitude = null;
    Double longitude = null;
    String name = null;
    String largeThumbnailName = null;
    String thumbnailName = null;
    Long timestamp = null;
    String headingVal = null;
    String username = null;
    reader.beginObject();

    while (reader.hasNext()) {
        switch (reader.nextName()) {
        case ID:
            id = readLong(reader);
            break;
        case SEQUENCE_ID:
            sequenceId = readLong(reader);
            break;
        case SEQUENCE_IDX:
            sequenceIdx = readInt(reader);
            break;
        case LATITUDE:
            latitude = readDouble(reader);
            break;
        case LONGITUDE:
            longitude = readDouble(reader);
            break;
        case NAME:
            name = readString(reader);
            break;
        case LTH_NAME:
            largeThumbnailName = readString(reader);
            break;
        case TH_NAME:
            thumbnailName = readString(reader);
            break;
        case TIMESTAMP:
            timestamp = readLong(reader);
            break;
        case HEADING:
            headingVal = readString(reader);
            break;
        case USERNAME:
            username = readString(reader);
            break;
        default:
            reader.skipValue();
            break;
        }
    }
    reader.endObject();
    final Double heading = headingVal != null && !headingVal.isEmpty() ? Double.parseDouble(headingVal) : null;
    return new Photo(id, sequenceId, sequenceIdx, latitude, longitude, name, largeThumbnailName, thumbnailName,
            timestamp, heading, username);
}

From source file:org.oscii.panlex.PanLexJSONParser.java

private <T> void parse(InputStream in, T record, Predicate<T> process) {
    int accepted = 0;
    Class type = record.getClass();
    String name = type.getSimpleName();
    Gson gson = new Gson();
    log.info(String.format("Parsing %s records", name));
    try {//from   www .  j av  a 2 s . c o m
        JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
        reader.beginArray();
        while (reader.hasNext()) {
            record = gson.fromJson(reader, type);
            if (process.test(record)) {
                accepted++;
            }
        }
        reader.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    log.info(String.format("Parsed %d %s records", accepted, name));
}