package experiment.structure.nodes;

import experiment.ont.*;
import experiment.util.*;

import java.io.*;
import java.util.*;
import java.util.stream.*;
import org.semanticweb.owlapi.util.*;
import org.semanticweb.owlapi.model.OWLOntologyManager;
import org.semanticweb.owlapi.apibinding.OWLManager;
import org.semanticweb.owlapi.model.parameters.Imports;
import org.semanticweb.owlapi.model.parameters.*;
import org.semanticweb.owlapi.formats.OWLXMLDocumentFormat;
import org.semanticweb.owlapi.formats.RDFXMLDocumentFormat;
import org.semanticweb.owlapi.model.*;
import org.semanticweb.owlapi.reasoner.*;
import org.semanticweb.HermiT.ReasonerFactory;
import java.util.logging.Logger;
import java.util.logging.ConsoleHandler;
import java.util.logging.Level;
import java.util.logging.*;
import org.semanticweb.elk.owlapi.ElkReasonerFactory;
import org.semanticweb.owlapi.change.AxiomChangeData;
import org.semanticweb.owlapi.search.EntitySearcher; 

import org.jgrapht.*;
import org.jgrapht.graph.*;
import org.jgrapht.traverse.*;


import uk.ac.manchester.cs.owlapi.modularity.SyntacticLocalityModuleExtractor;
import uk.ac.manchester.cs.owlapi.modularity.ModuleType;

/**
 * Logical Axiom Visitor
 */
public class AxiomVisitor implements OWLAxiomVisitor {

    private SyntaxNode syntaxNode;

    public SyntaxNode getSyntaxNode(){
        return this.syntaxNode;
    }


    public void visit(OWLAsymmetricObjectPropertyAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLClassAssertionAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLDataPropertyAssertionAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLDataPropertyDomainAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLDataPropertyRangeAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLDifferentIndividualsAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLDisjointClassesAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLDisjointDataPropertiesAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLDisjointObjectPropertiesAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLDisjointUnionAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLEquivalentClassesAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLEquivalentDataPropertiesAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLEquivalentObjectPropertiesAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLFunctionalDataPropertyAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLFunctionalObjectPropertyAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLHasKeyAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLInverseFunctionalObjectPropertyAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLInverseObjectPropertiesAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLIrreflexiveObjectPropertyAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLNegativeDataPropertyAssertionAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLNegativeObjectPropertyAssertionAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLObjectPropertyAssertionAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLObjectPropertyDomainAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLObjectPropertyRangeAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLReflexiveObjectPropertyAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLSameIndividualAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLSubClassOfAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLSubDataPropertyOfAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLSubObjectPropertyOfAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLSubPropertyChainOfAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLSymmetricObjectPropertyAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLTransitiveObjectPropertyAxiom axiom) {
        this.syntaxNode = new AxiomNode(axiom);
    }


    public void visit(SWRLRule node){
        ;
    }
    public void doDefault(Object object){
        ;
    }
    public void getDefaultReturnValue(Object object){
        ;
    }
    public void handleDefault(Object c){
        ;
    }


    public void visit(OWLAnnotationAssertionAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLAnnotationPropertyDomainAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLAnnotationPropertyRangeAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }
    public void visit(OWLSubAnnotationPropertyOfAxiom axiom){
        this.syntaxNode = new AxiomNode(axiom);
    }

}
