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

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 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