/*
* Created on Aug 28, 2005
*
* To change the template for this generated file go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
package org.mindswap.swoop.utils.graph.hierarchy.popup;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
import java.util.Vector;
import org.mindswap.swoop.SwoopModel;
import org.mindswap.swoop.reasoner.SwoopReasoner;
import org.mindswap.swoop.renderer.entity.ConciseFormatEntityRenderer;
import org.mindswap.swoop.utils.graph.hierarchy.OntologyGraphNode;
import org.mindswap.swoop.utils.graph.hierarchy.OntologyWithClassHierarchyGraph;
import org.mindswap.swoop.utils.graph.hierarchy.SwoopOntologyVertex;
import org.mindswap.swoop.utils.owlapi.OWLDescriptionFinder;
import org.semanticweb.owl.impl.model.OWLDataFactoryImpl;
import org.semanticweb.owl.impl.model.OWLSubClassAxiomImpl;
import org.semanticweb.owl.model.OWLClass;
import org.semanticweb.owl.model.OWLDescription;
import org.semanticweb.owl.model.OWLException;
import org.semanticweb.owl.model.OWLOntology;
import edu.uci.ics.jung.graph.Vertex;
/**
* @author Dave
*
* To change the template for this generated type comment go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
public class OntologyGraphAxiomWalker
{
private Set myVertexSet = null;
private SwoopModel myModel = null;
private SwoopReasoner myReasoner = null;
private ConciseFormatEntityRenderer myShortform = null;
private OntologyWithClassHierarchyGraph myGraph = null;
public OntologyGraphAxiomWalker( Vertex v, SwoopModel model )
{
myVertexSet = new HashSet();
myVertexSet.add( v );
init( model );
}
public OntologyGraphAxiomWalker( Set selectedVertices, SwoopModel model )
{
myVertexSet = selectedVertices;
init( model );
}
private void init( SwoopModel model )
{
myModel = model;
myReasoner = myModel.getReasoner();
myShortform = new ConciseFormatEntityRenderer();
myShortform.setSwoopModel( myModel );
}
public Vector getSubclassAxioms()
{
// use a sorted set
Set subclassAxioms = new TreeSet( SubclassAxiomContainerComparator.getInstance() );
try
{
for (Iterator it = myVertexSet.iterator(); it.hasNext(); )
{
SwoopOntologyVertex vertex = (SwoopOntologyVertex)it.next();
OWLOntology ont = ((OntologyGraphNode)vertex.getUserDatum( OntologyWithClassHierarchyGraph.DATA )).getOntology();
//System.out.println("walking on " + ont.getURI());
myReasoner.setOntology(ont);
OWLClass owlThing = ont.getOWLDataFactory().getOWLThing();
OWLDataFactoryImpl factory = (OWLDataFactoryImpl)ont.getOWLDataFactory();
Set classSet = ont.getClasses();
for (Iterator iter = classSet.iterator(); iter.hasNext(); )
{
OWLClass clazz = (OWLClass)iter.next();
Set supers = OWLDescriptionFinder.getSuperClasses(clazz, Collections.singleton(ont));
if(myReasoner.isConsistent(clazz))
{
// remove all the named classes because reasoner will eventually add them
Iterator iterator = supers.iterator();
while(iterator.hasNext())
if(iterator.next() instanceof OWLClass)
iterator.remove();
// add all the named superclasses (including inferred)
supers.addAll(myReasoner.superClassesOf(clazz));
// remove owl:Thing from the superclass set
iterator = supers.iterator();
while(iterator.hasNext())
{
Object o = iterator.next();
if(o instanceof Set && ((Set)o).contains(owlThing))
iterator.remove();
else
{
OWLDescription desc = null;
if ( o instanceof Set)
{
desc = (OWLDescription)((Set)o).iterator().next();
}
else
desc = (OWLDescription)o;
subclassAxioms.add( new ClassAxiomContainer(
new OWLSubClassAxiomImpl( factory, (OWLDescription)clazz, desc),
myShortform, myModel ));
}
}
}
}
}
// return the sorted Vector
return new Vector( subclassAxioms );
}
catch (OWLException ex)
{
ex.printStackTrace();
}
return null;
}
public Vector getDomainAxioms()
{
// use a sorted set
/*
Set subclassAxioms = new TreeSet( DomainAxiomContainerComparator.getInstance() );
try
{
for (Iterator it = myVertexSet.iterator(); it.hasNext(); )
{
SwoopOntologyVertex vertex = (SwoopOntologyVertex)it.next();
OWLOntology ont = ((OntologyGraphNode)vertex.getUserDatum( OntologyWithClassHierarchyGraph.DATA )).getOntology();
//System.out.println("walking on " + ont.getURI());
myReasoner.setOntology(ont);
OWLClass owlThing = ont.getOWLDataFactory().getOWLThing();
OWLDataFactoryImpl factory = (OWLDataFactoryImpl)ont.getOWLDataFactory();
Set classSet = ont.getClasses();
for (Iterator iter = classSet.iterator(); iter.hasNext(); )
{
OWLClass clazz = (OWLClass)iter.next();
//System.out.println(" looking at " + clazz.getURI() );
Set supers = OWLDescriptionFinder.getSuperClasses(clazz, Collections.singleton(ont));
//System.out.println(" supers has " + supers.size() + " elements.");
if(myReasoner.isConsistent(clazz))
{
// remove all the named classes because reasoner will eventually add them
Iterator iterator = supers.iterator();
while(iterator.hasNext())
if(iterator.next() instanceof OWLClass)
iterator.remove();
// add all the named superclasses (including inferred)
supers.addAll(myReasoner.superClassesOf(clazz));
//System.out.println(" supers has " + supers.size() + " elements (after remove/add)");
// remove owl:Thing from the superclass set
iterator = supers.iterator();
while(iterator.hasNext())
{
Object o = iterator.next();
if(o instanceof Set && ((Set)o).contains(owlThing))
iterator.remove();
else
{
OWLDescription desc = null;
if ( o instanceof Set)
{
desc = (OWLDescription)((Set)o).iterator().next();
}
else
desc = (OWLDescription)o;
subclassAxioms.add( new SubclassAxiomContainer(
new OWLSubClassAxiomImpl( factory, (OWLDescription)clazz, desc),
myShortform, myModel ));
}
}
}
}
}
// return the sorted Vector
return new Vector( subclassAxioms );
}
catch (OWLException ex)
{
ex.printStackTrace();
}
*/
//for (Iterator it = myVertexSet.iterator(); it.hasNext(); )
//{
// SwoopOntologyVertex vertex = (SwoopOntologyVertex)it.next();
// OWLOntology ont = ((OntologyGraphNode)vertex.getUserDatum( OntologyWithClassHierarchyGraph.DATA )).getOntology();
//}
return null;
}
public Vector getRangeAxioms()
{
for (Iterator it = myVertexSet.iterator(); it.hasNext(); )
{
SwoopOntologyVertex vertex = (SwoopOntologyVertex)it.next();
OWLOntology ont = ((OntologyGraphNode)vertex.getUserDatum( OntologyWithClassHierarchyGraph.DATA )).getOntology();
}
return null;
}
public Vector getIndividualAxioms()
{
for (Iterator it = myVertexSet.iterator(); it.hasNext(); )
{
SwoopOntologyVertex vertex = (SwoopOntologyVertex)it.next();
OWLOntology ont = ((OntologyGraphNode)vertex.getUserDatum( OntologyWithClassHierarchyGraph.DATA )).getOntology();
}
return null;
}
}