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

Source Code of edu.stanford.bmir.protege.web.server.owlapi.WebProtegeBidirectionalShortFormProvider

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

import org.semanticweb.owlapi.model.*;
import org.semanticweb.owlapi.util.BidirectionalShortFormProvider;
import org.semanticweb.owlapi.util.BidirectionalShortFormProviderAdapter;
import org.semanticweb.owlapi.util.OWLAxiomVisitorAdapter;
import org.semanticweb.owlapi.vocab.DublinCoreVocabulary;
import org.semanticweb.owlapi.vocab.OWL2Datatype;
import org.semanticweb.owlapi.vocab.OWLRDFVocabulary;
import org.semanticweb.owlapi.vocab.SKOSVocabulary;

import java.util.HashSet;
import java.util.List;
import java.util.Set;
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: 13/05/2012
* <p>
* This class is thread safe.
* </p>
*/
public class WebProtegeBidirectionalShortFormProvider implements BidirectionalShortFormProvider {

    private OWLAPIProject project;

    private BidirectionalShortFormProviderAdapter delegate;

    private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();

    public WebProtegeBidirectionalShortFormProvider(OWLAPIProject project) {
        this.project = project;
        final Set<OWLOntology> importsClosure = project.getRootOntology().getImportsClosure();
        delegate = new BidirectionalShortFormProviderAdapter(importsClosure, new WebProtegeShortFormProvider(project)) {
            @Override
            public void remove(OWLEntity entity) {
                if (!entity.isBuiltIn()) {
                    super.remove(entity);
                }
            }
        };

        setupBuiltinObjectRenderings(project);

        OWLOntologyManager manager = project.getRootOntology().getOWLOntologyManager();
        manager.addOntologyChangeListener(new OWLOntologyChangeListener() {
            public void ontologiesChanged(List<? extends OWLOntologyChange> changes) throws OWLException {
                updateRenderings(changes);
            }
        });
    }

    private void setupBuiltinObjectRenderings(OWLAPIProject project) {
        OWLDataFactory df = project.getDataFactory();
        for(IRI iri : OWLRDFVocabulary.BUILT_IN_ANNOTATION_PROPERTY_IRIS) {
            delegate.add(df.getOWLAnnotationProperty(iri));
        }

        delegate.add(df.getOWLThing());
        delegate.add(df.getOWLNothing());

        delegate.add(df.getOWLTopObjectProperty());
        delegate.add(df.getOWLBottomObjectProperty());
        delegate.add(df.getOWLBottomDataProperty());
        delegate.add(df.getOWLBottomDataProperty());

        for(OWL2Datatype datatype : OWL2Datatype.values()) {
            delegate.add(df.getOWLDatatype(datatype.getIRI()));
        }

        for(DublinCoreVocabulary vocabulary : DublinCoreVocabulary.values()) {
            delegate.add(df.getOWLAnnotationProperty(vocabulary.getIRI()));
        }

        for(OWLAnnotationProperty annotationProperty : SKOSVocabulary.getAnnotationProperties(df)) {
            delegate.add(annotationProperty);
        }
    }

    public Set<OWLEntity> getEntities(String shortForm) {
        try {
            readWriteLock.readLock().lock();
            return delegate.getEntities(shortForm);
        }
        finally {
            readWriteLock.readLock().unlock();
        }
    }

    public OWLEntity getEntity(String shortForm) {
        try {
            readWriteLock.readLock().lock();
            return delegate.getEntity(shortForm);
        }
        finally {
            readWriteLock.readLock().unlock();
        }
    }

    public Set<String> getShortForms() {
        try {
            readWriteLock.readLock().lock();
            return delegate.getShortForms();
        }
        finally {
            readWriteLock.readLock().unlock();
        }
    }

    public String getShortForm(OWLEntity entity) {
        try {
            readWriteLock.readLock().lock();
            return delegate.getShortForm(entity);
        }
        finally {
            readWriteLock.readLock().unlock();
        }
    }

    public void dispose() {
    }


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    /// Change handling

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


    private void updateRenderings(List<? extends OWLOntologyChange> changes) {

        readWriteLock.writeLock().lock();
        try {
            for (OWLOntologyChange chg : changes) {

                final Set<OWLEntity> entities = chg.getSignature();
                Set<OWLEntity> processed = new HashSet<OWLEntity>(entities.size());
                if(chg.isAxiomChange()) {
                    chg.getAxiom().accept(new OWLAxiomVisitorAdapter() {
                        @Override
                        public void visit(OWLAnnotationAssertionAxiom axiom) {
                            if(axiom.getSubject() instanceof IRI) {
                                entities.addAll(project.getRootOntology().getEntitiesInSignature((IRI) axiom.getSubject(), true));
                            }
                        }
                    });
                }
                for (OWLEntity entity : entities) {
                    if (!processed.contains(entity)) {
                        processed.add(entity);
                        if (project.getRootOntology().containsEntityInSignature(entity, true)) {
                            delegate.add(entity);
                        }
                        else {
                            delegate.remove(entity);
                        }
                    }
                }

            }
        }
        finally {
            readWriteLock.writeLock().unlock();
        }
    }


}
TOP

Related Classes of edu.stanford.bmir.protege.web.server.owlapi.WebProtegeBidirectionalShortFormProvider

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.