/*
* Created on Mar 11, 2006
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package org.mindswap.swoop.automation;
import java.io.BufferedReader;
import java.io.FileReader;
import java.net.URI;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;
import java.util.Vector;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import org.mindswap.swoop.SwoopFrame;
import org.mindswap.swoop.SwoopModel;
import org.mindswap.swoop.reasoner.SwoopToldReasoner;
import org.mindswap.swoop.utils.SwoopCache;
import org.semanticweb.owl.model.OWLEntity;
import org.semanticweb.owl.model.OWLOntology;
/**
* @author Dave Wang
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class OntologyObfuscator
{
public static SwoopFrame theFrame;
public void obfuscateConcepts( SwoopModel model, String uri, int startingNumber )
{
obfuscateConcepts( model, uri, startingNumber, false );
}
/*
* Loads an ontology and completely changes its concept names
*/
public void obfuscateConcepts( SwoopModel model, String uri, int startingNumber, boolean randomOrder )
{
try
{
Random random = new Random();
int counter = startingNumber;
Hashtable renamedConceptSets = new Hashtable();
OWLOntology ont = model.loadOntology( new URI(uri) );
model.setShowQNames( false );
model.setShowImportsWithThreadBlock( false );
model.setReasonerWithThreadBlock( new SwoopToldReasoner() );
model.setSelectedOntology( ont );
try
{ Thread.sleep( 7000 ); }
catch ( Exception e )
{ e.printStackTrace(); }
SwoopCache treeCache = model.getClassTreeCache();
JTree tree = model.myFrame.termDisplay.getCurrentTree();
//treeCache.getTree( ont, new SwoopToldReasoner() );
DefaultMutableTreeNode root = (DefaultMutableTreeNode)tree.getModel().getRoot();
Enumeration enum_ = root.preorderEnumeration();
while ( enum_.hasMoreElements() )
{
DefaultMutableTreeNode node = (DefaultMutableTreeNode)enum_.nextElement();
Set set = (Set)node.getUserObject();
if ( renamedConceptSets.containsKey( set ) )
continue;
else
{
renamedConceptSets.put(set, set );
int eleCount = 1;
for ( Iterator it = set.iterator(); it.hasNext(); )
{
OWLEntity ent = (OWLEntity)it.next();
//System.out.println( ent.getURI() );
if ( ent.getURI().toString().equals( "http://www.w3.org/2002/07/owl#Thing") )
continue;
String name = "C" + counter;
if ( randomOrder )
{
String d = random.nextDouble() + "";
d = d.substring(0, 5);
name = "C" + d + counter;
}
//model.setSelectedEntity( ent );
//System.out.println( ((OWLEntity)set.iterator().next()).toString() + " to C" + counter );
if ( eleCount == 1)
{
model.renameOWLEntity( ont, ent, name );
counter++;
}
else // equivalent classes
{
model.renameOWLEntity( ont, ent, name + "-" + eleCount);
}
//counter++;
eleCount++;
}
}
}
}
catch ( Exception e )
{ e.printStackTrace(); }
}
public static void main( String [] args )
{
// Create model
AutomatedSwoopModel model = new AutomatedSwoopModel();
// Create application frame.
theFrame = new SwoopFrame(model);
// Do Not show frame
theFrame.setVisible( false );
OntologyObfuscator obs = new OntologyObfuscator();
//String [] params = { "file:/C:/Documents%20and%20Settings/Dave%20Wang/Desktop/ontologies/koala.owl", "http://cvs.mygrid.org.uk/cgi-bin/viewcvs.cgi/mygrid/feta/etc/sampleData/service.rdfs?rev=1.2" };
//String [] params = { "http://protege.stanford.edu/plugins/owl/owl-library/koala.owl", "http://cvs.mygrid.org.uk/cgi-bin/viewcvs.cgi/mygrid/feta/etc/sampleData/service.rdfs?rev=1.2" };
//String ont = "http://protege.stanford.edu/plugins/owl/owl-library/koala.owl";
String ont = "http://www.mindswap.org/ontologies/debug-sweet-jpl.owl";
//String ont = "http://www.mindswap.org/~tw7/temp/testOnt.owl";
//String ont = "http://www.mindswap.org/ontologies/galen.owl";
//String ont = "http://protege.stanford.edu/plugins/owl/owl-library/not-galen.owl";
//String ont = "http://www.fruitfly.org/~cjm/obo-download/obo-all/event/event.owl";
try
{
obs.obfuscateConcepts( model, ont, 1, true );
Runtime.getRuntime().freeMemory();
Runtime.getRuntime().gc();
}
catch ( Exception e )
{ e.printStackTrace(); }
theFrame.setVisible( true );
//System.exit(0);
}
}