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

io.openapiprocessor.jsonschema.schema.ResolverContext Maven / Gradle / Ivy

package io.openapiprocessor.jsonschema.schema;

import org.checkerframework.checker.nullness.qual.Nullable;

import java.net.URI;
import java.util.*;

public class ResolverContext {

    private final DocumentStore documents;
    private final DocumentLoader loader;


    Set processedDocuments = new HashSet<> ();

    public final References references = new References ();
    public final ReferenceRegistry registry;

    public ResolverContext (DocumentStore documents, DocumentLoader loader, ReferenceRegistry registry) {
        this.documents = documents;
        this.loader = loader;
        this.registry = registry;
    }

    public void addId (URI id, Map document) {
        if (documents.contains (id)) {
            return;
        }

        documents.addId (id, document);
    }

    public void addAnchor (URI anchor, Map document) {
        if (documents.contains (anchor)) {
            return;
        }

        documents.addAnchor (anchor, document);
    }

    public void addDynamicAnchor (URI anchor, Map document) {
        if (documents.contains (anchor)) {
            return;
        }

        documents.addDynamicAnchor (anchor, document);
    }

    public void addRef (Ref ref) {
        if (registry.hasReference (ref.getAbsoluteUri ())) {
            return;
        }

        if (references.contains (ref)) {
            return;
        }

        references.add (ref);
    }

    public void addRef (Ref ref, Map document) {
        if (registry.hasReference (ref.getAbsoluteUri ())) {
            return;
        }

        registry.addReference (ref, ref.getScope (), document);
    }

    public void addDynamicAnchorRef (Ref ref, Map document) {
        if (registry.hasDynamicReference (ref.getAbsoluteUri ())) {
            return;
        }

        registry.addDynamicReference (ref, ref.getScope (), document);
    }

    public void addRef (Ref ref, Scope scope, Object document) {
        if (registry.hasReference (ref.getAbsoluteUri ())) {
            return;
        }

        registry.addReference (ref, scope, document);
    }

    public @Nullable Object getDocument (URI documentUri) {
        return documents.get (documentUri);
    }

    public void addDocument (Scope scope, Object document) {
        documents.addId(scope.getBaseUri(), document);
        setProcessedDocument (scope.getBaseUri ());
    }

    public Object addDocument (URI documentUri, String source, String ref) {
        try {
            Object document;
            if (documentUri.getScheme () == null) {
                document = loader.loadDocument (documentUri.toString ());
            } else {
                document = loader.loadDocument (documentUri);
            }

            documents.addId (documentUri, document);
            return document;
        } catch (ResolverException ex) {
            throw new ResolverException (
                String.format ("failed to resolve '%s' $referenced from '%s'", ref, source), ex);
        }
    }

    public void setProcessedDocument (URI documentUri) {
        processedDocuments.add (documentUri);
    }

    public boolean isProcessedDocument (URI documentUri) {
        return processedDocuments.contains (documentUri);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy