edu.cornell.mannlib.vitro.webapp.modelaccess.ontmodels.MaskingOntModelCache.java Source code

Java tutorial

Introduction

Here is the source code for edu.cornell.mannlib.vitro.webapp.modelaccess.ontmodels.MaskingOntModelCache.java

Source

/* $This file is distributed under the terms of the license in /doc/license.txt$ */

package edu.cornell.mannlib.vitro.webapp.modelaccess.ontmodels;

import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.hp.hpl.jena.ontology.OntModel;

import edu.cornell.mannlib.vitro.webapp.utils.logging.ToString;

/**
 * The named models in the masking cache will be used in preference to a model
 * of the same name in the base cache.
 * 
 * If a named model doesn't exist in the masking cache, a warning is written to
 * the log and the name will be ignored.
 * 
 * New models are created in the base cache only.
 */
public class MaskingOntModelCache implements OntModelCache {
    private static final Log log = LogFactory.getLog(MaskingOntModelCache.class);

    private final OntModelCache baseCache;
    private final OntModelCache maskingCache;
    private final Set<String> maskingNames;

    public MaskingOntModelCache(OntModelCache baseCache, OntModelCache maskingCache,
            Collection<String> maskingNames) {
        this.baseCache = baseCache;
        this.maskingCache = maskingCache;
        this.maskingNames = new HashSet<>(maskingNames);
        checkForMissingNamedModels();
    }

    private void checkForMissingNamedModels() {
        Set<String> missingModelNames = new HashSet<>(this.maskingNames);
        missingModelNames.removeAll(maskingCache.getModelNames());
        if (!missingModelNames.isEmpty()) {
            log.warn("Specifed models do not exist in the masking cache: " + missingModelNames);
            maskingNames.removeAll(missingModelNames);
        }
    }

    @Override
    public OntModel getOntModel(String name) {
        if (maskingNames.contains(name)) {
            return maskingCache.getOntModel(name);
        } else {
            return baseCache.getOntModel(name);
        }
    }

    /** The list of names in the baseCache may have changed. */
    @Override
    public SortedSet<String> getModelNames() {
        SortedSet<String> allNames = new TreeSet<>(baseCache.getModelNames());
        allNames.addAll(maskingNames);
        return allNames;
    }

    @Override
    public String toString() {
        return "MaskingOntModelCache[" + ToString.hashHex(this) + ", baseCache=" + baseCache + ", maskingCache="
                + maskingCache + ", maskingNames=" + maskingNames + "]";
    }

}