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.eclipse.lsp4j.adapters.VersionedTextDocumentIdentifierTypeAdapter.java

License:Open Source License

public VersionedTextDocumentIdentifier read(final JsonReader in) throws IOException {
    JsonToken nextToken = in.peek();/*from  w ww. jav a2  s.  c om*/
    if (nextToken == JsonToken.NULL) {
        return null;
    }

    VersionedTextDocumentIdentifier result = new VersionedTextDocumentIdentifier();
    in.beginObject();
    while (in.hasNext()) {
        String name = in.nextName();
        switch (name) {
        case "version":
            result.setVersion(readVersion(in));
            break;
        case "uri":
            result.setUri(readUri(in));
            break;
        default:
            in.skipValue();
        }
    }
    in.endObject();
    return result;
}

From source file:org.eclipse.lsp4j.jsonrpc.debug.adapters.DebugMessageTypeAdapter.java

License:Open Source License

@Override
public Message read(JsonReader in) throws IOException {
    if (in.peek() == JsonToken.NULL) {
        in.nextNull();/* www. ja va  2s.c  o  m*/
        return null;
    }

    in.beginObject();
    String messageType = null, method = null, message = null;
    int seq = 0, request_seq = 0;
    Boolean rawSuccess = null;
    Object rawParams = null;
    Object rawBody = null;

    try {

        while (in.hasNext()) {
            String name = in.nextName();
            switch (name) {
            case "seq": {
                seq = in.nextInt();
                break;
            }
            case "request_seq": {
                // on responses we treat the request_seq as the id
                request_seq = in.nextInt();
                break;
            }
            case "type": {
                messageType = in.nextString();
                break;
            }
            case "success": {
                rawSuccess = in.nextBoolean();
                break;
            }
            case "command": {
                method = in.nextString();
                break;
            }
            case "event": {
                method = in.nextString();
                break;
            }
            case "message": {
                if (in.peek() == JsonToken.NULL) {
                    in.nextNull();
                } else {
                    message = in.nextString();
                }
                break;
            }
            case "arguments": {
                rawParams = parseParams(in, method);
                break;
            }
            case "body": {
                rawBody = parseBody(in, messageType, request_seq, method, rawSuccess);
                break;
            }
            default:
                in.skipValue();
            }
        }
        boolean success = rawSuccess != null ? rawSuccess : false;
        Object params = parseParams(rawParams, method);
        Object body = parseBody(rawBody, messageType, request_seq, method, success);

        in.endObject();
        return createMessage(messageType, seq, request_seq, method, success, message, params, body);

    } catch (JsonSyntaxException | MalformedJsonException | EOFException exception) {
        if ("request".equals(messageType) || "event".equals(messageType) || "response".equals(messageType)) {
            // Create a message and bundle it to an exception with an issue that wraps the original exception
            boolean success = rawSuccess != null ? rawSuccess : false;
            Message resultMessage = createMessage(messageType, seq, request_seq, method, success, message,
                    rawParams, rawBody);
            MessageIssue issue = new MessageIssue("Message could not be parsed.",
                    ResponseErrorCode.ParseError.getValue(), exception);
            throw new MessageIssueException(resultMessage, issue);
        } else {
            throw exception;
        }
    }
}

From source file:org.eclipse.lsp4j.jsonrpc.json.adapters.CollectionTypeAdapter.java

License:Open Source License

@Override
public Collection<E> read(JsonReader in) throws IOException {
    JsonToken peek = in.peek();//from ww  w. j  ava 2  s.com
    if (peek == JsonToken.NULL) {
        in.nextNull();
        return null;
    } else if (peek == JsonToken.BEGIN_ARRAY) {
        Collection<E> collection = constructor.get();
        in.beginArray();
        while (in.hasNext()) {
            E instance = elementTypeAdapter.read(in);
            collection.add(instance);
        }
        in.endArray();
        return collection;
    } else {
        Collection<E> collection = constructor.get();
        E instance = elementTypeAdapter.read(in);
        collection.add(instance);
        return collection;
    }
}

From source file:org.eclipse.lsp4j.jsonrpc.json.adapters.MessageTypeAdapter.java

License:Open Source License

@Override
public Message read(JsonReader in) throws IOException, JsonIOException, JsonSyntaxException {
    if (in.peek() == JsonToken.NULL) {
        in.nextNull();// w w w  . j  a va 2 s.co m
        return null;
    }

    in.beginObject();
    String jsonrpc = null, method = null;
    Either<String, Number> id = null;
    Object rawParams = null;
    Object rawResult = null;
    ResponseError responseError = null;
    try {

        while (in.hasNext()) {
            String name = in.nextName();
            switch (name) {
            case "jsonrpc": {
                jsonrpc = in.nextString();
                break;
            }
            case "id": {
                if (in.peek() == JsonToken.NUMBER)
                    id = Either.forRight(in.nextInt());
                else
                    id = Either.forLeft(in.nextString());
                break;
            }
            case "method": {
                method = in.nextString();
                break;
            }
            case "params": {
                rawParams = parseParams(in, method);
                break;
            }
            case "result": {
                rawResult = parseResult(in, id != null ? id.get().toString() : null);
                break;
            }
            case "error": {
                responseError = gson.fromJson(in, ResponseError.class);
                break;
            }
            default:
                in.skipValue();
            }
        }
        Object params = parseParams(rawParams, method);
        Object result = parseResult(rawResult, id != null ? id.get().toString() : null);

        in.endObject();
        return createMessage(jsonrpc, id, method, params, result, responseError);

    } catch (JsonSyntaxException | MalformedJsonException | EOFException exception) {
        if (id != null || method != null) {
            // Create a message and bundle it to an exception with an issue that wraps the original exception
            Message message = createMessage(jsonrpc, id, method, rawParams, rawResult, responseError);
            MessageIssue issue = new MessageIssue("Message could not be parsed.",
                    ResponseErrorCode.ParseError.getValue(), exception);
            throw new MessageIssueException(message, issue);
        } else {
            throw exception;
        }
    }
}

From source file:org.eclipse.lsp4j.jsonrpc.json.adapters.MessageTypeAdapter.java

License:Open Source License

/**
 * Convert the json input into the parameters object corresponding to the call
 * made by method.//  ww w . ja  va  2 s  .  c  om
 *
 * If the method is not known until after parsing, call
 * {@link #parseParams(Object, String)} on the return value of this call for a
 * second chance conversion.
 *
 * @param in
 *            json input to read from
 * @param method
 *            method name of request
 * @return correctly typed object if the correct expected type can be
 *         determined, or a JsonElement representing the parameters
 */
protected Object parseParams(JsonReader in, String method) throws IOException, JsonIOException {
    JsonToken next = in.peek();
    if (next == JsonToken.NULL) {
        in.nextNull();
        return null;
    }
    Type[] parameterTypes = getParameterTypes(method);
    if (parameterTypes.length == 1) {
        return fromJson(in, parameterTypes[0]);
    }
    if (parameterTypes.length > 1 && next == JsonToken.BEGIN_ARRAY) {
        List<Object> parameters = new ArrayList<Object>(parameterTypes.length);
        int index = 0;
        in.beginArray();
        while (in.hasNext()) {
            Type parameterType = index < parameterTypes.length ? parameterTypes[index] : null;
            Object parameter = fromJson(in, parameterType);
            parameters.add(parameter);
            index++;
        }
        in.endArray();
        while (index < parameterTypes.length) {
            parameters.add(null);
            index++;
        }
        return parameters;
    }
    return new JsonParser().parse(in);
}

From source file:org.eclipse.lsp4j.jsonrpc.json.adapters.ThrowableTypeAdapter.java

License:Open Source License

@SuppressWarnings("unchecked")
@Override/*ww  w  .ja  va 2s . c o m*/
public Throwable read(JsonReader in) throws IOException {
    if (in.peek() == JsonToken.NULL) {
        in.nextNull();
        return null;
    }

    in.beginObject();
    String message = null;
    Throwable cause = null;
    while (in.hasNext()) {
        String name = in.nextName();
        switch (name) {
        case "message": {
            message = in.nextString();
            break;
        }
        case "cause": {
            cause = read(in);
            break;
        }
        default:
            in.skipValue();
        }
    }
    in.endObject();

    try {
        Constructor<Throwable> constructor;
        if (message == null && cause == null) {
            constructor = (Constructor<Throwable>) typeToken.getRawType().getDeclaredConstructor();
            return constructor.newInstance();
        } else if (message == null) {
            constructor = (Constructor<Throwable>) typeToken.getRawType()
                    .getDeclaredConstructor(Throwable.class);
            return constructor.newInstance(cause);
        } else if (cause == null) {
            constructor = (Constructor<Throwable>) typeToken.getRawType().getDeclaredConstructor(String.class);
            return constructor.newInstance(message);
        } else {
            constructor = (Constructor<Throwable>) typeToken.getRawType().getDeclaredConstructor(String.class,
                    Throwable.class);
            return constructor.newInstance(message, cause);
        }
    } catch (NoSuchMethodException e) {
        if (message == null && cause == null)
            return new RuntimeException();
        else if (message == null)
            return new RuntimeException(cause);
        else if (cause == null)
            return new RuntimeException(message);
        else
            return new RuntimeException(message, cause);
    } catch (Exception e) {
        throw new JsonParseException(e);
    }
}

From source file:org.eclipse.packagedrone.repo.channel.apm.ChannelReader.java

License:Open Source License

public ModifyContextImpl read() throws IOException {
    this.numberOfBytes = 0;

    final Reader reader = new InputStreamReader(this.stream, StandardCharsets.UTF_8);

    final ChannelState.Builder state = new ChannelState.Builder();

    Boolean locked = null;//from  w ww. j a  va 2s .  com

    Map<MetaKey, CacheEntryInformation> cacheEntries = Collections.emptyMap();
    Map<String, ArtifactInformation> artifacts = Collections.emptyMap();
    Map<MetaKey, String> extractedMetaData = Collections.emptyMap();
    Map<MetaKey, String> providedMetaData = Collections.emptyMap();
    Map<String, String> aspects = new HashMap<>();

    final JsonReader jr = new JsonReader(reader);

    jr.beginObject();
    while (jr.hasNext()) {
        final String name = jr.nextName();
        switch (name) {
        case "locked":
            state.setLocked(locked = jr.nextBoolean());
            break;
        case "creationTimestamp":
            state.setCreationTimestamp(readTime(jr));
            break;
        case "modificationTimestamp":
            state.setModificationTimestamp(readTime(jr));
            break;
        case "cacheEntries":
            cacheEntries = readCacheEntries(jr);
            break;
        case "artifacts":
            artifacts = readArtifacts(jr);
            break;
        case "extractedMetaData":
            extractedMetaData = readMetadata(jr);
            break;
        case "providedMetaData":
            providedMetaData = readMetadata(jr);
            break;
        case "validationMessages":
            state.setValidationMessages(readValidationMessages(jr));
            break;
        case "aspects":
            aspects = readAspects(jr);
            break;
        default:
            jr.skipValue();
            break;
        }
    }
    jr.endObject();

    if (locked == null) {
        throw new IOException("Missing values for channel");
    }

    // transient information

    state.setNumberOfArtifacts(artifacts.size());
    state.setNumberOfBytes(this.numberOfBytes);

    // create result

    return new ModifyContextImpl(this.channelId, this.store, this.cacheStore, state.build(), aspects, artifacts,
            cacheEntries, extractedMetaData, providedMetaData);
}

From source file:org.eclipse.packagedrone.repo.channel.apm.ChannelReader.java

License:Open Source License

private Map<String, String> readAspects(final JsonReader jr) throws IOException {
    final Map<String, String> result = new HashMap<>();

    jr.beginObject();//from  w  w  w  . j a v a2s .co  m
    while (jr.hasNext()) {
        switch (jr.nextName()) {
        case "map":
            jr.beginObject();
            while (jr.hasNext()) {
                final String id = jr.nextName();
                String value = null;
                if (jr.peek() == JsonToken.STRING) {
                    value = jr.nextString();
                } else {
                    jr.skipValue();
                }
                result.put(id, value);
            }
            jr.endObject();
            break;
        }
    }
    jr.endObject();

    return result;
}

From source file:org.eclipse.packagedrone.repo.channel.apm.ChannelReader.java

License:Open Source License

private Map<String, ArtifactInformation> readArtifacts(final JsonReader jr) throws IOException {
    jr.beginObject();//from w w w .  ja va2  s  .  co m

    final Map<String, ArtifactInformation> result = new HashMap<>();

    while (jr.hasNext()) {
        final String id = jr.nextName();
        jr.beginObject();

        String name = null;
        Long size = null;
        Instant creationTimestamp = null;
        String parentId = null;
        Set<String> childIds = Collections.emptySet();
        Set<String> facets = Collections.emptySet();
        String virtualizerAspectId = null;
        List<ValidationMessage> validationMessages = Collections.emptyList();
        Map<MetaKey, String> extractedMetaData = Collections.emptyMap();
        Map<MetaKey, String> providedMetaData = Collections.emptyMap();

        while (jr.hasNext()) {
            final String ele = jr.nextName();
            switch (ele) {
            case "name":
                name = jr.nextString();
                break;
            case "size":
                size = jr.nextLong();
                break;
            case "date":
                creationTimestamp = readTime(jr);
                break;
            case "parentId":
                parentId = jr.nextString();
                break;
            case "childIds":
                childIds = readSet(jr);
                break;
            case "facets":
                facets = readSet(jr);
                break;
            case "virtualizerAspectId":
                virtualizerAspectId = jr.nextString();
                break;
            case "extractedMetaData":
                extractedMetaData = readMetadata(jr);
                break;
            case "providedMetaData":
                providedMetaData = readMetadata(jr);
                break;
            case "validationMessages":
                validationMessages = readValidationMessages(jr);
                break;
            default:
                jr.skipValue();
                break;
            }
        }
        jr.endObject();

        if (id == null || name == null || size == null || creationTimestamp == null) {
            throw new IOException("Missing values for artifact");
        }

        this.numberOfBytes += size;

        result.put(id, new ArtifactInformation(id, parentId, childIds, name, size, creationTimestamp, facets,
                validationMessages, providedMetaData, extractedMetaData, virtualizerAspectId));
    }

    jr.endObject();

    return result;
}

From source file:org.eclipse.packagedrone.repo.channel.apm.ChannelReader.java

License:Open Source License

private Map<MetaKey, String> readMetadata(final JsonReader jr) throws IOException {
    final Map<MetaKey, String> result = new HashMap<>();

    jr.beginObject();//from  w ww.j  a  v a 2  s.  c o m

    while (jr.hasNext()) {
        final String name = jr.nextName();
        if (jr.peek() == JsonToken.NULL) {
            jr.skipValue();
        } else {
            final String value = jr.nextString();
            result.put(MetaKey.fromString(name), value);
        }
    }

    jr.endObject();

    return result;
}