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

com.apicatalog.cborld.encoder.EncoderContext Maven / Gradle / Ivy

package com.apicatalog.cborld.encoder;

import java.util.Collection;
import java.util.LinkedHashSet;

import com.apicatalog.cursor.ValueCursor;
import com.apicatalog.cursor.ArrayItemCursor;
import com.apicatalog.cursor.MapCursor;
import com.apicatalog.cursor.MapEntryCursor;
import com.apicatalog.jsonld.lang.Keywords;
import com.apicatalog.jsonld.uri.UriUtils;

public class EncoderContext {

    public final static Collection get(final MapCursor document) {
        return get(document, new LinkedHashSet<>());
    }

    static final Collection get(final MapCursor document, Collection contexts) {

        for (final MapEntryCursor entry : document) {
    
            if (Keywords.CONTEXT.equals(entry.mapKey())) {
                processContextValue(entry, contexts);

            } else if (entry.isMap()) {
                get(entry.asMap(), contexts);
            }
        }
        document.parent();    
        return contexts;
    }

    static final void processContextValue(final ValueCursor value, final Collection result) {
    
        if (value.isString()) {
            final String uri = value.stringValue();
    
            if (UriUtils.isAbsoluteUri(uri, true)) {
                result.add(uri);
                return;
            }
    
        } else if (value.isNonEmptyArray()) {
    
            for (final ArrayItemCursor item : value.asArray()) {
                processContextValue(item, result);                
            }            
            value.parent();
            return;
    
        } else if (value.isMap()) {
    
            if (value.asMap().size() == 1 && value.asMap().isString(Keywords.ID)) {
    
                final String id = value.asMap().stringValue(Keywords.ID);
        
                if (UriUtils.isAbsoluteUri(id, true)) {
                    result.add(id);
                    return;
                }
            }
        }
    
        throw new IllegalArgumentException("Non compress-able context detected.");
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy