
edu.stanford.protege.webprotege.usage.ReferencingAxiomVisitor Maven / Gradle / Ivy
The newest version!
package edu.stanford.protege.webprotege.usage;
import edu.stanford.protege.webprotege.index.EntitiesInProjectSignatureByIriIndex;
import edu.stanford.protege.webprotege.renderer.RenderingManager;
import org.semanticweb.owlapi.model.*;
import javax.annotation.Nonnull;
import javax.inject.Inject;
import java.util.Collection;
import java.util.Collections;
import java.util.Optional;
import java.util.Set;
import static com.google.common.base.Preconditions.checkNotNull;
import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toSet;
/**
* Author: Matthew Horridge
* Stanford University
* Bio-Medical Informatics Research Group
* Date: 11/07/2013
*/
public class ReferencingAxiomVisitor implements OWLAxiomVisitorEx> {
@Nonnull
private final OWLEntity usageOf;
@Nonnull
private final RenderingManager renderingManager;
@Nonnull
private final EntitiesInProjectSignatureByIriIndex entitiesInSignatureIndex;
@Inject
public ReferencingAxiomVisitor(@Nonnull OWLEntity usageOf,
@Nonnull RenderingManager renderingManager,
@Nonnull EntitiesInProjectSignatureByIriIndex entitiesInSignatureIndex) {
this.usageOf = checkNotNull(usageOf);
this.renderingManager = checkNotNull(renderingManager);
this.entitiesInSignatureIndex = checkNotNull(entitiesInSignatureIndex);
}
private Set translate(Collection extends OWLObject> subjects, OWLAxiom axiom) {
return subjects.stream()
.flatMap(subject -> translate(subject, axiom).stream())
.collect(toSet());
}
private Set translate(OWLObject subject, OWLAxiom axiom) {
Optional axiomSubject = Optional.empty();
if(subject instanceof OWLEntity) {
axiomSubject = Optional.of((OWLEntity) subject);
}
else if(subject instanceof IRI) {
if(subject.equals(usageOf.getIRI())) {
return translate(usageOf, axiom);
}
else {
var entities = entitiesInSignatureIndex
.getEntitiesInSignature((IRI) subject)
.collect(toList());
return translate(entities, axiom);
}
}
else if(subject instanceof SWRLAtom) {
var predicate = ((SWRLAtom) subject).getPredicate();
if (predicate instanceof OWLEntity) {
return translate((OWLEntity) predicate, axiom);
}
}
var useageOfBrowserText = renderingManager.getShortForm(usageOf);
var rendering = renderingManager.getHTMLBrowserText(axiom, Collections.singleton(useageOfBrowserText));
var subjectRendering = axiomSubject.map(renderingManager::getShortForm);
return Collections.singleton(new UsageReference(axiom.getAxiomType(), rendering, axiomSubject, subjectRendering));
}
@Nonnull
@Override
public Set visit(@Nonnull OWLSubClassOfAxiom axiom) {
return translate(axiom.getSubClass(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLNegativeObjectPropertyAssertionAxiom axiom) {
return translate(axiom.getSubject(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLAsymmetricObjectPropertyAxiom axiom) {
return translate(axiom.getProperty(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLReflexiveObjectPropertyAxiom axiom) {
return translate(axiom.getProperty(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLDisjointClassesAxiom axiom) {
return translate((OWLEntity) null, axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLDataPropertyDomainAxiom axiom) {
return translate(axiom.getProperty(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLObjectPropertyDomainAxiom axiom) {
return translate(axiom.getProperty(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLEquivalentObjectPropertiesAxiom axiom) {
return translate(axiom.getProperties(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLNegativeDataPropertyAssertionAxiom axiom) {
return translate(axiom.getSubject(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLDifferentIndividualsAxiom axiom) {
return translate((OWLEntity) null, axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLDisjointDataPropertiesAxiom axiom) {
return translate(axiom.getProperties(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLDisjointObjectPropertiesAxiom axiom) {
return translate(axiom.getProperties(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLObjectPropertyRangeAxiom axiom) {
return translate(axiom.getProperty(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLObjectPropertyAssertionAxiom axiom) {
return translate(axiom.getSubject(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLFunctionalObjectPropertyAxiom axiom) {
return translate(axiom.getProperty(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLSubObjectPropertyOfAxiom axiom) {
return translate(axiom.getSubProperty(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLDisjointUnionAxiom axiom) {
return translate(axiom.getOWLClass(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLDeclarationAxiom axiom) {
return translate(axiom.getEntity(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLAnnotationAssertionAxiom axiom) {
return translate(axiom.getSubject(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLSymmetricObjectPropertyAxiom axiom) {
return translate(axiom.getProperty(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLDataPropertyRangeAxiom axiom) {
return translate(axiom.getProperty(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLFunctionalDataPropertyAxiom axiom) {
return translate(axiom.getProperty(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLEquivalentDataPropertiesAxiom axiom) {
return translate(axiom.getProperties(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLClassAssertionAxiom axiom) {
return translate(axiom.getIndividual(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLEquivalentClassesAxiom axiom) {
if(axiom.containsNamedEquivalentClass()) {
return translate(axiom.getNamedClasses(), axiom);
}
else {
return translate(axiom.getClassExpressions().iterator().next(), axiom);
}
}
@Nonnull
@Override
public Set visit(@Nonnull OWLDataPropertyAssertionAxiom axiom) {
return translate(axiom.getSubject(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLTransitiveObjectPropertyAxiom axiom) {
return translate(axiom.getProperty(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLIrreflexiveObjectPropertyAxiom axiom) {
return translate(axiom.getProperty(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLSubDataPropertyOfAxiom axiom) {
return translate(axiom.getSubProperty(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLInverseFunctionalObjectPropertyAxiom axiom) {
return translate(axiom.getProperty(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLSameIndividualAxiom axiom) {
return translate(axiom.getIndividuals(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLSubPropertyChainOfAxiom axiom) {
return translate(axiom.getSuperProperty(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLInverseObjectPropertiesAxiom axiom) {
return translate(axiom.getProperties(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLHasKeyAxiom axiom) {
return translate(axiom.getClassExpression(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLDatatypeDefinitionAxiom axiom) {
return translate(axiom.getDatatype(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull SWRLRule rule) {
return translate(rule.getHead(), rule);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLSubAnnotationPropertyOfAxiom axiom) {
return translate(axiom.getSubProperty(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLAnnotationPropertyDomainAxiom axiom) {
return translate(axiom.getProperty(), axiom);
}
@Nonnull
@Override
public Set visit(@Nonnull OWLAnnotationPropertyRangeAxiom axiom) {
return translate(axiom.getProperty(), axiom);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy