/* * Created on Feb 23, 2005 * */ package org.mindswap.swoop.utils.ui; import java.net.URI; import java.util.Comparator; import org.mindswap.swoop.utils.owlapi.DefaultShortFormProvider; import org.semanticweb.owl.io.ShortFormProvider; import org.semanticweb.owl.model.OWLOntology; /** * @author Aditya */ public class OntologyComparator implements Comparator { // always sort using local names so we have more consistency private ShortFormProvider shortForms = new DefaultShortFormProvider(); public static OntologyComparator INSTANCE = new OntologyComparator(); public int compare(Object o1, Object o2) { try { int cmp = 0; // check if they are both URI's if (o1 instanceof URI && o2 instanceof URI) { // check the fragment identifier String frag1 = "", frag2 = ""; if (o1.toString().indexOf("#")>=0) frag1 = o1.toString().substring(o1.toString().indexOf("#")+1, o1.toString().length()); else frag1 = o1.toString().substring(o1.toString().lastIndexOf("/")+1, o1.toString().length()); if (o2.toString().indexOf("#")>=0) frag2 = o2.toString().substring(o2.toString().indexOf("#")+1, o2.toString().length()); else frag2 = o2.toString().substring(o2.toString().lastIndexOf("/")+1, o2.toString().length()); cmp = frag1.compareToIgnoreCase(frag2); if(cmp == 0) cmp = o1.toString().compareToIgnoreCase(o2.toString()); } else { // both are instances of OWLOntology URI uri1 = ((OWLOntology) o1).getURI(); URI uri2 = ((OWLOntology) o2).getURI(); String ontName1 = shortForms.shortForm(uri1); if (ontName1.indexOf(":")>=0) ontName1 = ontName1.substring(ontName1.indexOf(":")+1, ontName1.length()); String ontName2 = shortForms.shortForm(uri2); if (ontName2.indexOf(":")>=0) ontName1 = ontName2.substring(ontName2.indexOf(":")+1, ontName2.length()); cmp = ontName1.compareToIgnoreCase( ontName2); // if short forms are equal then just return the comparison of // whole URI if(cmp == 0) cmp = uri1.toString().compareToIgnoreCase(uri2.toString()); } return cmp; } catch (Exception ex) { // if something fails compare them as string return o1.toString().compareTo(o2.toString()); } } }