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 + -
显示快捷键?