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 extends OWLEntity> getRelatedWatchedEntities(OWLEntity entity) {
return entity.accept(new OWLEntityVisitorEx<>() {
@Nonnull
@Override
public Collection extends OWLEntity> visit(@Nonnull OWLClass desc) {
return classAncestorsProvider.getAncestors(desc);
}
@Nonnull
@Override
public Collection extends OWLEntity> visit(@Nonnull OWLDataProperty property) {
return dataPropertyAncestorsProvider.getAncestors(property);
}
@Nonnull
@Override
public Collection extends OWLEntity> visit(@Nonnull OWLObjectProperty property) {
return objectAncestorsProvider.getAncestors(property);
}
@Nonnull
@Override
public Collection extends OWLEntity> 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 extends OWLEntity> visit(@Nonnull OWLDatatype owlDatatype) {
return Collections.singleton(owlDatatype);
}
@Nonnull
@Override
public Collection extends OWLEntity> visit(@Nonnull OWLAnnotationProperty owlAnnotationProperty) {
return annotationPropertyAncestorsProvider.getAncestors(owlAnnotationProperty);
}
});
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy