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

dev.harrel.jsonschema.providers.AbstractJsonNode Maven / Gradle / Ivy

There is a newer version: 1.7.3
Show newest version
package dev.harrel.jsonschema.providers;

import dev.harrel.jsonschema.JsonNode;
import dev.harrel.jsonschema.SimpleType;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Objects;

import static java.util.Collections.*;

abstract class AbstractJsonNode implements JsonNode {
    private final SimpleType nodeType;
    final T node;
    final String jsonPointer;

    private Map asObject;
    private List asArray;

    AbstractJsonNode(T node, String jsonPointer) {
        this.nodeType = computeNodeType(node);
        this.node = node;
        this.jsonPointer = Objects.requireNonNull(jsonPointer);
    }

    @Override
    public String getJsonPointer() {
        return jsonPointer;
    }

    @Override
    public SimpleType getNodeType() {
        return nodeType;
    }

    @Override
    public final List asArray() {
        if (this.asArray != null) {
            return asArray;
        }
        this.asArray = unmodifiableList(createArray());
        return asArray;
    }

    @Override
    public final Map asObject() {
        if (this.asObject != null) {
            return asObject;
        }
        this.asObject = unmodifiableMap(createObject());
        return asObject;
    }

    abstract List createArray();
    abstract Map createObject();
    abstract SimpleType computeNodeType(T node);

    static boolean canConvertToInteger(BigDecimal bigDecimal) {
        return bigDecimal.scale() <= 0 || bigDecimal.stripTrailingZeros().scale() <= 0;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy