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

edu.stanford.protege.webprotege.watches.IndirectlyWatchedEntitiesFinder Maven / Gradle / Ivy

The newest version!
package edu.stanford.protege.webprotege.watches;

import edu.stanford.protege.webprotege.hierarchy.HasGetAncestors;
import edu.stanford.protege.webprotege.index.ProjectClassAssertionAxiomsByIndividualIndex;
import org.semanticweb.owlapi.model.*;

import javax.annotation.Nonnull;
import javax.inject.Inject;
import java.util.Collection;
import java.util.Collections;

import static com.google.common.collect.ImmutableSet.toImmutableSet;

/**
 * Matthew Horridge
 * Stanford Center for Biomedical Informatics Research
 * 04/03/15
 */
public class IndirectlyWatchedEntitiesFinder {

    @Nonnull
    private final HasGetAncestors classAncestorsProvider;

    @Nonnull
    private final HasGetAncestors objectAncestorsProvider;

    @Nonnull
    private final HasGetAncestors dataPropertyAncestorsProvider;

    @Nonnull
    private final HasGetAncestors annotationPropertyAncestorsProvider;

    @Nonnull
    private final ProjectClassAssertionAxiomsByIndividualIndex classAssertionAxiomsIndex;


    @Inject
    public IndirectlyWatchedEntitiesFinder(@Nonnull HasGetAncestors classAncestorsProvider,
                                           @Nonnull HasGetAncestors objectAncestorsProvider,
                                           @Nonnull HasGetAncestors dataPropertyAncestorsProvider,
                                           @Nonnull HasGetAncestors annotationPropertyAncestorsProvider,
                                           @Nonnull ProjectClassAssertionAxiomsByIndividualIndex classAssertionAxiomsIndex) {

        this.classAncestorsProvider = classAncestorsProvider;
        this.objectAncestorsProvider = objectAncestorsProvider;
        this.dataPropertyAncestorsProvider = dataPropertyAncestorsProvider;
        this.annotationPropertyAncestorsProvider = annotationPropertyAncestorsProvider;
        this.classAssertionAxiomsIndex = classAssertionAxiomsIndex;
    }

    public Collection getRelatedWatchedEntities(OWLEntity entity) {
        return entity.accept(new OWLEntityVisitorEx<>() {

            @Nonnull
            @Override
            public Collection visit(@Nonnull OWLClass desc) {
                return classAncestorsProvider.getAncestors(desc);
            }

            @Nonnull
            @Override
            public Collection visit(@Nonnull OWLDataProperty property) {
                return dataPropertyAncestorsProvider.getAncestors(property);
            }

            @Nonnull
            @Override
            public Collection visit(@Nonnull OWLObjectProperty property) {
                return objectAncestorsProvider.getAncestors(property);
            }

            @Nonnull
            @Override
            public Collection visit(@Nonnull OWLNamedIndividual individual) {
                return classAssertionAxiomsIndex.getClassAssertionAxioms(individual)
                                                .map(OWLClassAssertionAxiom::getClassExpression)
                                                .filter(OWLClassExpression::isNamed)
                                                .map(OWLClassExpression::asOWLClass)
                                                .flatMap(cls -> classAncestorsProvider.getAncestors(cls).stream())
                                                .collect(toImmutableSet());
            }

            @Nonnull
            @Override
            public Collection visit(@Nonnull OWLDatatype owlDatatype) {
                return Collections.singleton(owlDatatype);
            }

            @Nonnull
            @Override
            public Collection visit(@Nonnull OWLAnnotationProperty owlAnnotationProperty) {
                return annotationPropertyAncestorsProvider.getAncestors(owlAnnotationProperty);
            }
        });
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy