/* * Created on Oct 28, 2005 */ package org.mindswap.swoop.utils.owlapi; import java.io.Serializable; import java.net.URI; import java.util.Iterator; import java.util.Set; import org.mindswap.swoop.SwoopModel; import org.semanticweb.owl.io.ShortFormProvider; import org.semanticweb.owl.model.OWLAnnotationInstance; import org.semanticweb.owl.model.OWLDataValue; import org.semanticweb.owl.model.OWLNamedObject; import org.semanticweb.owl.model.OWLOntology; public class LabelShortFormProvider implements ShortFormProvider, Serializable{ SwoopModel swoopModel; String useLanguage = ""; public LabelShortFormProvider(SwoopModel swoopModel) { this.swoopModel = swoopModel; this.useLanguage = swoopModel.getUseLanguage(); } /* * This is just broken. It should not determine display string from URI, * but from the OWLNamedObject from which we can get URI, annotations etc */ public String shortForm(URI uri) { try { // here is Bijan code :) String sf = ""; OWLNamedObject ent = swoopModel.getEntity(swoopModel.getSelectedOntology(), uri, true ) ; if (ent!=null) { // try and guess what the ontology might be from entityURI if (swoopModel.getOntologyURIs().contains(uri)) ent = swoopModel.getOntology(uri); else if (uri.toString().indexOf("#")>=0) { String ontURI = uri.toString().substring(0, uri.toString().indexOf("#")); if (swoopModel.getOntologyURIs().contains(ontURI)) { OWLOntology ont = swoopModel.getOntology(new URI(ontURI)); ent = swoopModel.getEntity(ont, uri, true); } } else if (uri.toString().indexOf("/")>=0) { String ontURI = uri.toString().substring(0, uri.toString().lastIndexOf("/")); if (swoopModel.getOntologyURIs().contains(ontURI)) { OWLOntology ont = swoopModel.getOntology(new URI(ontURI)); ent = swoopModel.getEntity(ont, uri, true); } } } // now get rdfs:label on object if it exists if (ent!=null) { Set anns = ent.getAnnotations(); if (!anns.isEmpty()) { for (Iterator it = anns.iterator(); it.hasNext();) { OWLAnnotationInstance oai = (OWLAnnotationInstance) it.next(); if (oai.getProperty().getURI().toString() == "http://www.w3.org/2000/01/rdf-schema#label") { Object o = oai.getContent(); if (o instanceof OWLDataValue && !useLanguage.equals("")) { // check if lang attribute matches with useLanguage if (((OWLDataValue) o).getLang()!=null && ((OWLDataValue) o).getLang().equalsIgnoreCase(useLanguage)) { sf = ((OWLDataValue) o).getValue().toString(); break; // exit loop if match found } } else sf = o.toString(); } } } if (!sf.equals("")) return sf; } } catch (Exception ex) { ex.printStackTrace(); } // use DefaultShortFormProvider as a backup DefaultShortFormProvider shortForms = new DefaultShortFormProvider(); return shortForms.shortForm(uri); } }