package org.mindswap.swoop.renderer.ontology; /** * @author Dave * * Basically a copy of uk.ac.man.cs.img.owl.validation.SpeciesValidatorVisitor. * This is needed because 1) uk.ac.man.cs.img.owl.validation.SpeciesValidatorVisitor is not * extendable outside of its package * 2) SwoopSpeciesValidator requires a validatorVisitor * This class is fitted for SwoopSpeciesValidator. * */ import org.semanticweb.owl.model.helper.OWLObjectVisitorAdapter; import org.semanticweb.owl.model.OWLDataPropertyInstance; import org.semanticweb.owl.model.OWLDataPropertyRangeAxiom; import org.semanticweb.owl.model.OWLEquivalentClassesAxiom; import org.semanticweb.owl.model.OWLDisjointClassesAxiom; import org.semanticweb.owl.model.OWLFunctionalPropertyAxiom; import org.semanticweb.owl.model.OWLIndividualTypeAssertion; import org.semanticweb.owl.model.OWLInverseFunctionalPropertyAxiom; import org.semanticweb.owl.model.OWLInversePropertyAxiom; import org.semanticweb.owl.model.OWLObjectPropertyInstance; import org.semanticweb.owl.model.OWLObjectPropertyRangeAxiom; import org.semanticweb.owl.model.OWLPropertyDomainAxiom; import org.semanticweb.owl.model.OWLSubClassAxiom; import org.semanticweb.owl.model.OWLDescription; import org.semanticweb.owl.model.OWLObject; import org.semanticweb.owl.model.OWLSymmetricPropertyAxiom; import org.semanticweb.owl.model.OWLTransitivePropertyAxiom; import java.util.Iterator; import org.semanticweb.owl.model.OWLClass; import org.apache.log4j.Logger; import org.semanticweb.owl.model.OWLException; import org.semanticweb.owl.io.abstract_syntax.ObjectRenderer; import org.semanticweb.owl.io.RendererException; import org.semanticweb.owl.validation.OWLValidationConstants; import uk.ac.man.cs.img.owl.validation.ClassOrRestrictionIdentifier; public class SwoopSpeciesValidatorVisitor extends OWLObjectVisitorAdapter implements OWLValidationConstants { private int level; static Logger logger = Logger.getLogger(SwoopSpeciesValidatorVisitor.class); private SwoopSpeciesValidator parent; private ObjectRenderer objectRenderer; public int getLevel() { return level; } public SwoopSpeciesValidatorVisitor( SwoopSpeciesValidator parent, ObjectRenderer renderer ) { this.level = SwoopSpeciesValidator.LITE; this.parent = parent; this.objectRenderer = renderer; } public void visit( OWLDisjointClassesAxiom node ) { /* If a Disjoint Classes Axiom is used, we must be in at * least DL. */ logger.debug("Visiting DisjointClassesAxiom"); parent.explain( SwoopSpeciesValidator.DL, DISJOINT, "Disjoint Classes axiom found: " + renderNode( node ) ); level = level | SwoopSpeciesValidator.DL; } public void visit( OWLEquivalentClassesAxiom node ) { /* Depends on the format of the expressions. */ logger.debug("Visiting EquivalentClassesAxiom"); try { for ( Iterator it = node.getEquivalentClasses().iterator(); it.hasNext(); ) { OWLObject oo = (OWLObject) it.next(); logger.debug( "Object is: " + oo ); if ( !isClassOrSimpleRestriction( oo ) ) { parent.explain( SwoopSpeciesValidator.DL, EXPRESSIONINAXIOM, "Equivalent Classes axiom using expressions found: " + renderNode( node )); level = level | SwoopSpeciesValidator.DL; } } } catch ( OWLException ex ) { level = level | SwoopSpeciesValidator.OTHER; } } public void visit( OWLSubClassAxiom node ) { /* Depends on the format of the expressions. */ try { OWLDescription subClass = node.getSubClass(); if ( !isClass( subClass ) ) { parent.explain( SwoopSpeciesValidator.DL, EXPRESSIONINAXIOM, "SubClass axiom using expressions found: " + renderNode( node )); level = level | SwoopSpeciesValidator.DL; } OWLDescription superClass = node.getSuperClass(); if ( !isClassOrSimpleRestriction( superClass ) ) { parent.explain( SwoopSpeciesValidator.DL, EXPRESSIONINAXIOM, "SubClass axiom using expressions found: " + renderNode( node )); level = level | SwoopSpeciesValidator.DL; } } catch ( OWLException ex ) { level = level | SwoopSpeciesValidator.OTHER; } } public void visit( OWLClass node ) { /* Checks all the various things that have been said about the * class. */ } /* Check if the description is a Class */ private boolean isClass( OWLObject oo ) throws OWLException { ClassOrRestrictionIdentifier civ = new ClassOrRestrictionIdentifier(); oo.accept( civ ); return civ.isClass(); } private boolean isClassOrSimpleRestriction( OWLObject oo ) throws OWLException { ClassOrRestrictionIdentifier civ = new ClassOrRestrictionIdentifier(); oo.accept( civ ); return civ.isClassOrSimpleRestriction(); } private String renderNode( OWLObject node ) { try { return objectRenderer.renderObject( node ); } catch (RendererException ex) { return node.toString(); } } /* (non-Javadoc) * @see org.semanticweb.owl.model.OWLObjectVisitor#visit(org.semanticweb.owl.model.OWLFunctionalPropertyAxiom) */ public void visit(OWLFunctionalPropertyAxiom node) throws OWLException { // TODO Auto-generated method stub } /* (non-Javadoc) * @see org.semanticweb.owl.model.OWLObjectVisitor#visit(org.semanticweb.owl.model.OWLInverseFunctionalPropertyAxiom) */ public void visit(OWLInverseFunctionalPropertyAxiom node) throws OWLException { // TODO Auto-generated method stub } /* (non-Javadoc) * @see org.semanticweb.owl.model.OWLObjectVisitor#visit(org.semanticweb.owl.model.OWLTransitivePropertyAxiom) */ public void visit(OWLTransitivePropertyAxiom node) throws OWLException { // TODO Auto-generated method stub } /* (non-Javadoc) * @see org.semanticweb.owl.model.OWLObjectVisitor#visit(org.semanticweb.owl.model.OWLSymmetricPropertyAxiom) */ public void visit(OWLSymmetricPropertyAxiom node) throws OWLException { // TODO Auto-generated method stub } /* (non-Javadoc) * @see org.semanticweb.owl.model.OWLObjectVisitor#visit(org.semanticweb.owl.model.OWLInversePropertyAxiom) */ public void visit(OWLInversePropertyAxiom node) throws OWLException { // TODO Auto-generated method stub } /* (non-Javadoc) * @see org.semanticweb.owl.model.OWLObjectVisitor#visit(org.semanticweb.owl.model.OWLPropertyDomainAxiom) */ public void visit(OWLPropertyDomainAxiom node) throws OWLException { // TODO Auto-generated method stub } /* (non-Javadoc) * @see org.semanticweb.owl.model.OWLObjectVisitor#visit(org.semanticweb.owl.model.OWLObjectPropertyRangeAxiom) */ public void visit(OWLObjectPropertyRangeAxiom node) throws OWLException { // TODO Auto-generated method stub } /* (non-Javadoc) * @see org.semanticweb.owl.model.OWLObjectVisitor#visit(org.semanticweb.owl.model.OWLDataPropertyRangeAxiom) */ public void visit(OWLDataPropertyRangeAxiom node) throws OWLException { // TODO Auto-generated method stub } /* (non-Javadoc) * @see org.semanticweb.owl.model.OWLObjectVisitor#visit(org.semanticweb.owl.model.OWLObjectPropertyInstance) */ public void visit(OWLObjectPropertyInstance node) throws OWLException { // TODO Auto-generated method stub } /* (non-Javadoc) * @see org.semanticweb.owl.model.OWLObjectVisitor#visit(org.semanticweb.owl.model.OWLDataPropertyInstance) */ public void visit(OWLDataPropertyInstance node) throws OWLException { // TODO Auto-generated method stub } /* (non-Javadoc) * @see org.semanticweb.owl.model.OWLObjectVisitor#visit(org.semanticweb.owl.model.OWLIndividualTypeAssertion) */ public void visit(OWLIndividualTypeAssertion node) throws OWLException { // TODO Auto-generated method stub } } // SpeciesValidatorVisitor