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

edu.stanford.protege.webprotege.axiom.AxiomSubjectProvider Maven / Gradle / Ivy

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

import edu.stanford.protege.webprotege.object.OWLObjectSelector;
import org.semanticweb.owlapi.model.*;

import javax.annotation.Nonnull;
import javax.inject.Inject;
import java.util.Optional;

import static com.google.common.base.Preconditions.checkNotNull;

/**
 * Matthew Horridge
 * Stanford Center for Biomedical Informatics Research
 * 31/01/15
 */
public class AxiomSubjectProvider {

    private final SubjectProvider subjectProvider;

    /**
     * Constructs an AxiomSubjectProvider.
     * @param classExpressionSelector A selector for class expressions that chooses a class expression to be the
     *                                subject.  This is used for nary class axiomsSource, for example
     *                                {@link OWLEquivalentClassesAxiom} axiomsSource.  Not {@code null}.
     * @param objectPropertyExpressionSelector A selector for object properties that chooses an object property to be
     *                                         the subject.  This is used for nary property axiomsSource, for example,
     *                                         {@link OWLEquivalentObjectPropertiesAxiom}.  Not {@code null}.
     * @param dataPropertyExpressionSelector A selector for data properties that chooses a data property to be the
     *                                       subject.  This is used for nary property axiomsSource, for example
     *                                       {@link OWLEquivalentDataPropertiesAxiom} axiomsSource.  Not {@code null}.
     * @param individualSelector A selector for individuals that chooses an individual to be the subject.  This is used
     *                           for nary individual axiomsSource, for example {@link OWLSameIndividualAxiom} axiomsSource.
     * @param atomSelector A selector for SWRL atoms that chooses an atom to be the subject.  This is used to select
     *                     an atom that is in the head of a {@link SWRLRule} to be the subject. Not {@code null}.
     * @throws java.lang.NullPointerException if any parameters are {@code null}.
     */
    @Inject
    public AxiomSubjectProvider(OWLObjectSelector classExpressionSelector,
                                OWLObjectSelector objectPropertyExpressionSelector,
                                OWLObjectSelector dataPropertyExpressionSelector,
                                OWLObjectSelector individualSelector,
                                OWLObjectSelector atomSelector) {
        subjectProvider = new SubjectProvider(
                classExpressionSelector,
                objectPropertyExpressionSelector,
                dataPropertyExpressionSelector,
                individualSelector,
                atomSelector);
    }

    /**
     * Gets the subject of the specified axiom.
     * @param axiom The axiom.  Not {@code null}.
     * @return The (possibly absent) subject.  Not {@code null}.
     */
    public Optional getSubject(OWLAxiom axiom) {
        return checkNotNull(axiom).accept(subjectProvider);
    }




    private static class SubjectProvider implements OWLAxiomVisitorEx> {

        private final OWLObjectSelector classExpressionSelector;

        private final OWLObjectSelector objectPropertyExpressionSelector;

        private final OWLObjectSelector dataPropertyExpressionSelector;

        private final OWLObjectSelector individualSelector;

        private final OWLObjectSelector atomSelector;


        public SubjectProvider(OWLObjectSelector classExpressionSelector,
                               OWLObjectSelector objectPropertyExpressionSelector,
                               OWLObjectSelector dataPropertyExpressionSelector,
                               OWLObjectSelector individualSelector,
                               OWLObjectSelector atomSelector) {
            this.classExpressionSelector = checkNotNull(classExpressionSelector);
            this.objectPropertyExpressionSelector = checkNotNull(objectPropertyExpressionSelector);
            this.individualSelector = checkNotNull(individualSelector);
            this.dataPropertyExpressionSelector = checkNotNull(dataPropertyExpressionSelector);
            this.atomSelector = checkNotNull(atomSelector);
        }

        public static Optional wrap(OWLObject object) {
            return Optional.of(object);
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLSubClassOfAxiom axiom) {
            return wrap(axiom.getSubClass());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLNegativeObjectPropertyAssertionAxiom axiom) {
            return wrap(axiom.getSubject());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLAsymmetricObjectPropertyAxiom axiom) {
            return wrap(axiom.getProperty());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLReflexiveObjectPropertyAxiom axiom) {
            return wrap(axiom.getProperty());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLDisjointClassesAxiom axiom) {
            return classExpressionSelector.selectOne(axiom.getClassExpressions());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLDataPropertyDomainAxiom axiom) {
            return wrap(axiom.getProperty());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLObjectPropertyDomainAxiom axiom) {
            return wrap(axiom.getProperty());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLEquivalentObjectPropertiesAxiom axiom) {
            return objectPropertyExpressionSelector.selectOne(axiom.getProperties());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLNegativeDataPropertyAssertionAxiom axiom) {
            return wrap(axiom.getSubject());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLDifferentIndividualsAxiom axiom) {
            return individualSelector.selectOne(axiom.getIndividuals());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLDisjointDataPropertiesAxiom axiom) {
            return dataPropertyExpressionSelector.selectOne(axiom.getProperties());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLDisjointObjectPropertiesAxiom axiom) {
            return objectPropertyExpressionSelector.selectOne(axiom.getProperties());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLObjectPropertyRangeAxiom axiom) {
            return wrap(axiom.getProperty());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLObjectPropertyAssertionAxiom axiom) {
            return wrap(axiom.getSubject());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLFunctionalObjectPropertyAxiom axiom) {
            return wrap(axiom.getProperty());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLSubObjectPropertyOfAxiom axiom) {
            return wrap(axiom.getSubProperty());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLDisjointUnionAxiom axiom) {
            return wrap(axiom.getOWLClass());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLDeclarationAxiom axiom) {
            return wrap(axiom.getEntity());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLAnnotationAssertionAxiom axiom) {
            return wrap(axiom.getSubject());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLSymmetricObjectPropertyAxiom axiom) {
            return wrap(axiom.getProperty());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLDataPropertyRangeAxiom axiom) {
            return wrap(axiom.getProperty());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLFunctionalDataPropertyAxiom axiom) {
            return wrap(axiom.getProperty());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLEquivalentDataPropertiesAxiom axiom) {
            return dataPropertyExpressionSelector.selectOne(axiom.getProperties());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLClassAssertionAxiom axiom) {
            return wrap(axiom.getIndividual());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLEquivalentClassesAxiom axiom) {
            return classExpressionSelector.selectOne(axiom.getClassExpressions());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLDataPropertyAssertionAxiom axiom) {
            return wrap(axiom.getSubject());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLTransitiveObjectPropertyAxiom axiom) {
            return wrap(axiom.getProperty());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLIrreflexiveObjectPropertyAxiom axiom) {
            return wrap(axiom.getProperty());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLSubDataPropertyOfAxiom axiom) {
            return wrap(axiom.getSubProperty());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLInverseFunctionalObjectPropertyAxiom axiom) {
            return wrap(axiom.getProperty());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLSameIndividualAxiom axiom) {
            return individualSelector.selectOne(axiom.getIndividuals());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLSubPropertyChainOfAxiom axiom) {
            return wrap(axiom.getSuperProperty());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLInverseObjectPropertiesAxiom axiom) {
            return wrap(axiom.getFirstProperty());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLHasKeyAxiom axiom) {
            return wrap(axiom.getClassExpression());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLDatatypeDefinitionAxiom axiom) {
            return wrap(axiom.getDatatype());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull SWRLRule axiom) {
            return atomSelector.selectOne(axiom.getHead());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLSubAnnotationPropertyOfAxiom axiom) {
            return wrap(axiom.getSubProperty());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLAnnotationPropertyDomainAxiom axiom) {
            return wrap(axiom.getProperty());
        }

        @Nonnull
        @Override
        public Optional visit(@Nonnull OWLAnnotationPropertyRangeAxiom axiom) {
            return wrap(axiom.getProperty());
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy