All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.yasson.internal.UserDeserializerParser Maven / Gradle / Ivy

/*
 * Copyright (c) 2016, 2020 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0,
 * or the Eclipse Distribution License v. 1.0 which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
 */

package org.eclipse.yasson.internal;

import java.math.BigDecimal;
import java.util.Map;
import java.util.stream.Stream;

import jakarta.json.JsonArray;
import jakarta.json.JsonObject;
import jakarta.json.JsonValue;
import jakarta.json.stream.JsonLocation;

/**
 * Decorator for JSONP parser. Adds some checks for parser cursor manipulation methods.
 */
public class UserDeserializerParser implements JsonbParser {

    private final JsonbParser jsonbParser;

    /**
     * Remembered parser level, which is applied to user deserializer structure.
     */
    private final JsonbRiParser.LevelContext level;

    /**
     * Constructs an instance with parser and context.
     *
     * @param parser jsonb parser to decorate
     */
    public UserDeserializerParser(JsonbParser parser) {
        this.jsonbParser = parser;
        level = jsonbParser.getCurrentLevel();
    }

    /**
     * JsonParser in JSONB runtime is shared with user components, if user lefts cursor half way in progress
     * it must be advanced artificially to the end of JSON structure representing deserialized object.
     */
    public void advanceParserToEnd() {
        while (!level.isParsed() && jsonbParser.hasNext()) {
            next();
        }
    }

    @Override
    public boolean hasNext() {
        return !level.isParsed() && jsonbParser.hasNext();
    }

    @Override
    public Event next() {
        if (level.isParsed()) {
            throw new IllegalStateException("Parser level data inconsistent.");
        }
        return jsonbParser.next();
    }

    @Override
    public String getString() {
        return jsonbParser.getString();
    }

    @Override
    public boolean isIntegralNumber() {
        return jsonbParser.isIntegralNumber();
    }

    @Override
    public int getInt() {
        return jsonbParser.getInt();
    }

    @Override
    public long getLong() {
        return jsonbParser.getLong();
    }

    @Override
    public BigDecimal getBigDecimal() {
        return jsonbParser.getBigDecimal();
    }

    @Override
    public JsonLocation getLocation() {
        return jsonbParser.getLocation();
    }

    @Override
    public void close() {
        throw new UnsupportedOperationException();
    }

    /**
     * Moves parser to required event, if current event is equal to required does nothing.
     *
     * @param event required event
     */
    @Override
    public void moveTo(Event event) {
        jsonbParser.moveTo(event);
    }

    /**
     * Moves parser cursor to any JSON value.
     */
    @Override
    public Event moveToValue() {
        return jsonbParser.moveToValue();
    }

    /**
     * Moves parser cursor to START_OBJECT or START_ARRAY.
     */
    @Override
    public Event moveToStartStructure() {
        return jsonbParser.moveToStartStructure();
    }

    /**
     * Current level of JsonbRiParser.
     *
     * @return current level
     */
    @Override
    public JsonbRiParser.LevelContext getCurrentLevel() {
        return jsonbParser.getCurrentLevel();
    }

    /**
     * Skips a value or a structure.
     * If current event is START_ARRAY or START_OBJECT, whole structure is skipped to end.
     */
    @Override
    public void skipJsonStructure() {
        jsonbParser.skipJsonStructure();
    }

    @Override
    public JsonObject getObject() {
        return jsonbParser.getObject();
    }

    @Override
    public JsonValue getValue() {
        return jsonbParser.getValue();
    }

    @Override
    public JsonArray getArray() {
        return jsonbParser.getArray();
    }

    @Override
    public Stream getArrayStream() {
        return jsonbParser.getArrayStream();
    }

    @Override
    public Stream> getObjectStream() {
        return jsonbParser.getObjectStream();
    }

    @Override
    public Stream getValueStream() {
        return jsonbParser.getValueStream();
    }

    @Override
    public void skipArray() {
        jsonbParser.skipArray();
    }

    @Override
    public void skipObject() {
        jsonbParser.skipObject();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy