overlaygraph.java
来自「Semantic Web Ontology Editor」· Java 代码 · 共 481 行 · 第 1/2 页
JAVA
481 行
{
// check to see if it has been passed in as an argument to this method
boolean isInserted = myIndexNodes.add(node);
// if not, we insert it to myNodes, and grow edges out of it
if ( isInserted )
{
myNodes.add( node );
addEdges( node );
}
}
private void addEdges( ClassTreeNode node )
{
try
{
node.setIsOverlayed( true );
//myModel.setSelectedOntology( node.getOntologyNode().getOntology() );
Set relatedClasses = (Set)myCompleteRelations.get( node ); // get from precomputed relations
if ( relatedClasses == null)
return;
for ( Iterator it = relatedClasses.iterator(); it.hasNext(); )
{
Object obj = it.next();
OWLClass cls = (OWLClass)obj;
//System.out.println( cls.getURI().toString() );
}
Set parentVertices = parentGraph.getVertices();
// walk through all ontologies to see if it contains any of the related classes
// once found, put them into the 'myNodes' set
// note that duplicate circles will be entered in duplications
for (Iterator iter = parentVertices.iterator(); iter.hasNext(); )
{
SwoopOntologyVertex vertex = (SwoopOntologyVertex)iter.next();
Object obj = vertex.getUserDatum( OntologyWithClassHierarchyGraph.DATA );
//System.out.println( obj.getClass().getName() );
OntologyGraphNode ontoNode = (OntologyGraphNode)obj;
for (Iterator it = relatedClasses.iterator(); it.hasNext(); )
{
OWLClass concept = (OWLClass)it.next();
Set classTreeNodes = ontoNode.findNodesBy( concept.getURI() );
if ( classTreeNodes != null )
{
myNodes.addAll( classTreeNodes );
for (Iterator i = classTreeNodes.iterator(); i.hasNext(); )
{
ClassTreeNode neighbor = (ClassTreeNode)i.next();
neighbor.setIsOverlayed( true );
//System.out.println("For " + myModel.shortForm( node.getURI()) + " - adding " + myModel.shortForm( neighbor.getURI() ) );
HashSet edgeSet = (HashSet)myEdges.get( node );
if ( edgeSet == null )
edgeSet = new HashSet();
edgeSet.add( new OverlayEdge(node, neighbor) );
myEdges.put( node, edgeSet );
}
}
}
}
}
catch (OWLException e)
{ e.printStackTrace(); }
}
// code lifted from org.mindswap.swoop.TermsDisplay
/* Need to do 3 things.
* - look into subclass/equivalent axioms of this class for restrictions (arrows pointing out)
* - look into properties for domains/ranges that relate this class to another one (arrows pointing in/out)
* - look into show ref to see if other classes relate to this class (arrows pointing in)
*
*/
/*
public Set findRefs( OWLEntity entity )
{
try
{
Set claSet = new HashSet();
//Set propSet = new HashSet();
//Set indSet = new HashSet();
Set vertices = parentGraph.getVertices();
for ( Iterator iterator = vertices.iterator(); iterator.hasNext(); )
{
SwoopOntologyVertex vertex = (SwoopOntologyVertex)iterator.next();
OntologyGraphNode node = (OntologyGraphNode)vertex.getUserDatum( OntologyWithClassHierarchyGraph.DATA );
OWLOntology ontology = node.getOntology();
Set references = OntologyHelper.entityUsage(ontology, entity);
for (Iterator iter = references.iterator(); iter.hasNext(); )
{
Object obj = iter.next();
if (obj instanceof OWLClass) claSet.add(obj);
//else if (obj instanceof OWLProperty) propSet.add(obj);
//else if (obj instanceof OWLIndividual) indSet.add(obj);
}
}
for (Iterator it = claSet.iterator(); it.hasNext(); )
System.out.println( it.next() );
return claSet;
}
catch (OWLException e) {
e.printStackTrace();
}
return null;
}
*/
// returns a set of OWL classes that is related to clazz via restrictions/property domains/ranges
protected Set findRelatedClasses( OWLClass clazz )
{
try
{
HashSet relatedClasses = new HashSet();
SwoopReasoner reasoner = myModel.getReasoner();
OWLClass owlThing = reasoner.getOntology().getOWLDataFactory().getOWLThing();
ClassByRestrictionFinder finder = new ClassByRestrictionFinder( myModel );
// walk the INTERSECTIONs equivalent to this class
Iterator it = OWLDescriptionFinder.getIntersections(clazz, reasoner.getOntologies()).iterator();
while(it.hasNext())
{
OWLAnd intersection = (OWLAnd) it.next();
intersection.accept( finder );
if ( finder.found() )
relatedClasses.addAll( finder.getResult() );
finder.reset();
}
// walk the UNIONs equivalent to this class
it = OWLDescriptionFinder.getUnions(clazz, reasoner.getOntologies()).iterator();
while(it.hasNext())
{
OWLOr union = (OWLOr) it.next();
union.accept( finder );
if ( finder.found() )
relatedClasses.addAll( finder.getResult() );
finder.reset();
}
// walk ENUMERATIONs of classes that are equivalent to this class
it = OWLDescriptionFinder.getEnumerations(clazz, reasoner.getOntologies()).iterator();
while(it.hasNext())
{
OWLEnumeration oneOf = (OWLEnumeration) it.next();
oneOf.accept( finder );
if ( finder.found() )
relatedClasses.addAll( finder.getResult() );
finder.reset();
}
// print EQUIVALENT classes
Set eqs = OWLDescriptionFinder.getEquivalentClasses(clazz, reasoner.getOntologies());
it = eqs.iterator();
// removing the ones from above (and, or, oneof) and named classes
while(it.hasNext())
{
OWLDescription desc = (OWLDescription) it.next();
if(!(desc instanceof OWLRestriction))
it.remove();
}
it = eqs.iterator();
while (it.hasNext())
{
OWLDescription eq = (OWLDescription)it.next();
eq.accept( finder );
if ( finder.found() )
relatedClasses.addAll( finder.getResult() );
finder.reset();
}
// SUBCLASS OF
// acquiring all non-inferred super classes (named or anon)
Set supers = OWLDescriptionFinder.getSuperClasses(clazz, reasoner.getOntologies());
Set ontos = reasoner.getOntologies();
//System.out.println( " SUPER SET = " + supers.size() );
if(reasoner.isConsistent(clazz))
{
// remove all the named classes
it = supers.iterator();
while(it.hasNext())
if(it.next() instanceof OWLClass)
it.remove();
// remove owl:Thing from the superclass set
it = supers.iterator();
while(it.hasNext()) {
Object o = it.next();
if(o instanceof Set && ((Set)o).contains(owlThing))
it.remove();
}
}
for (it = supers.iterator(); it.hasNext(); )
{
Object obj = (Object)it.next();
// if there is more than one element for this line
// we only print the first one. rest are either
// equivalent classes (or properties)
if(obj instanceof Collection)
obj = ((Collection)obj).iterator().next();
OWLDescription desc = (OWLDescription)obj;
desc.accept( finder );
if ( finder.found() )
relatedClasses.addAll( finder.getResult() );
finder.reset();
}
return relatedClasses;
}
catch ( OWLException e)
{ e.printStackTrace(); }
return null;
}
public void paint( Graphics g )
{
Graphics2D g2d = (Graphics2D)g;
Set keys = myEdges.keySet();
for ( Iterator it = keys.iterator(); it.hasNext(); )
{
ClassTreeNode node = (ClassTreeNode)it.next();
HashSet edges = (HashSet)myEdges.get( node );
for (Iterator iter = edges.iterator(); iter.hasNext(); )
{
OverlayEdge edge = (OverlayEdge)iter.next();
edge.paint( g2d );
}
}
}
// whether this Paintable uses its own transformation. (no)
public boolean useTransform()
{
return false;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?