Package edu.stanford.bmir.protege.web.server.obo

Source Code of edu.stanford.bmir.protege.web.server.obo.OBONamespaceCache

package edu.stanford.bmir.protege.web.server.obo;

import edu.stanford.bmir.protege.web.server.owlapi.OWLAPIProject;
import edu.stanford.bmir.protege.web.shared.obo.OBONamespace;
import org.obolibrary.obo2owl.Obo2OWLConstants;
import org.semanticweb.owlapi.model.*;

import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

/**
* Author: Matthew Horridge<br>
* Stanford University<br>
* Bio-Medical Informatics Research Group<br>
* Date: 20/05/2012
*/
public class OBONamespaceCache {

    public static final IRI OBO_NAMESPACE_IRI = Obo2OWLConstants.Obo2OWLVocabulary.IRI_OIO_hasOboNamespace.getIRI();

    private Set<OBONamespace> namespaceCache = new HashSet<OBONamespace>();

    private ReadWriteLock READ_WRITE_LOCK = new ReentrantReadWriteLock();

    private Lock READ_LOCK = READ_WRITE_LOCK.readLock();

    private Lock WRITE_LOCK = READ_WRITE_LOCK.writeLock();

    private OWLAPIProject project;


    public static OBONamespaceCache createCache(OWLAPIProject project) {
        return new OBONamespaceCache(project);
    }

    private OBONamespaceCache(OWLAPIProject project) {
        this.project = project;
        rebuildNamespaceCache();
    }

    private void rebuildNamespaceCache() {
        Set<OBONamespace> namespaces = new HashSet<OBONamespace>();
        for(OWLAnnotation anno : project.getRootOntology().getAnnotations()) {
            if(isNamespaceAnnotation(anno)) {
                if(anno.getValue() instanceof OWLLiteral) {
                    OWLLiteral lit = (OWLLiteral) anno.getValue();
                    namespaces.add(new OBONamespace(lit.getLiteral()));
                }
            }
        }
        for(OWLClass cls : project.getRootOntology().getClassesInSignature(true)) {
            for(OWLAnnotationAssertionAxiom ax : cls.getAnnotationAssertionAxioms(project.getRootOntology())) {
                if(isNamespaceAnnotationProperty(ax)) {
                    if(ax.getValue() instanceof OWLLiteral) {
                        OWLLiteral lit = (OWLLiteral) ax.getValue();
                        namespaces.add(new OBONamespace(lit.getLiteral()));
                    }
                }
            }
        }
        try {
            WRITE_LOCK.lock();
            namespaceCache.clear();
            namespaceCache.addAll(namespaces);
        }
        finally {
            WRITE_LOCK.unlock();
        }
    }

    private boolean isNamespaceAnnotationProperty(OWLAnnotationAssertionAxiom ax) {
        return ax.getProperty().getIRI().equals(OBO_NAMESPACE_IRI);
    }

    private boolean isNamespaceAnnotation(OWLAnnotation annotation) {
        return annotation.getProperty().getIRI().equals(OBO_NAMESPACE_IRI) || annotation.getProperty().getIRI().equals(OBO_NAMESPACE_IRI);
    }

    public Set<OBONamespace> getNamespaces() {
        try {
            READ_LOCK.lock();
            return new HashSet<OBONamespace>(namespaceCache);
        }
        finally {
            READ_LOCK.unlock();
        }
    }

}
TOP

Related Classes of edu.stanford.bmir.protege.web.server.obo.OBONamespaceCache

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.