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

com.github.fge.jsonschema.jsonpointer.JsonPointer Maven / Gradle / Ivy

package com.github.fge.jsonschema.jsonpointer;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.MissingNode;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;

import java.util.List;

public final class JsonPointer
    extends TreePointer
{
    private static final JsonPointer EMPTY
        = new JsonPointer(ImmutableList.>of());

    public static JsonPointer empty()
    {
        return EMPTY;
    }

    public JsonPointer(final String input)
        throws JsonPointerException
    {
        this(fromString(input));
    }

    private JsonPointer(final List> tokenResolvers)
    {
        super(MissingNode.getInstance(), tokenResolvers);
    }

    public JsonPointer append(final String raw)
    {
        final ReferenceToken refToken = ReferenceToken.fromRaw(raw);
        final JsonNodeResolver resolver = new JsonNodeResolver(refToken);
        final List> newList
            = ImmutableList.>builder()
            .addAll(tokenResolvers).add(resolver).build();
        return new JsonPointer(newList);
    }

    public JsonPointer append(final int index)
    {
        return append(Integer.toString(index));
    }

    public JsonPointer append(final JsonPointer other)
    {
        final List> newList
            = ImmutableList.>builder()
            .addAll(tokenResolvers)
            .addAll(other.tokenResolvers).build();
        return new JsonPointer(newList);
    }

    private static List> fromString(final String input)
        throws JsonPointerException
    {
        final List> list = Lists.newArrayList();

        for (final ReferenceToken refToken: tokensFromInput(input))
            list.add(new JsonNodeResolver(refToken));

        return ImmutableList.copyOf(list);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy