001    package eu.lod2.nlp2rdf.schema.tools;
002    
003    import java.util.Map;
004    import java.util.HashMap;
005    
006    import com.hp.hpl.jena.ontology.Individual;
007    import com.hp.hpl.jena.ontology.OntModel;
008    import com.hp.hpl.jena.ontology.Ontology;
009    import com.hp.hpl.jena.ontology.OntDocumentManager;
010    
011    import org.apache.commons.logging.Log;
012    import org.apache.commons.logging.LogFactory;
013    
014    /**
015     * Factory
016     */
017    public class Factory {
018    
019            private static Log log = LogFactory.getLog(Factory.class);
020    
021            private static OntModel defaultModel = null;
022    
023            private static Map<java.lang.String, java.lang.String> uri2Type;
024    
025            static {
026                    uri2Type = new HashMap<java.lang.String, java.lang.String>();
027                    uri2Type.put("http://www.w3.org/2002/07/owl#Thing", "eu.lod2.nlp2rdf.schema.IThing");
028                    uri2Type.put("http://nlp2rdf.lod2.eu/schema/sso/StopWord", "eu.lod2.nlp2rdf.schema.sso.IStopWord");
029                    uri2Type.put("http://nlp2rdf.lod2.eu/schema/sso/Word", "eu.lod2.nlp2rdf.schema.sso.IWord");
030                    uri2Type.put("http://nlp2rdf.lod2.eu/schema/sso/Phrase", "eu.lod2.nlp2rdf.schema.sso.IPhrase");
031                    uri2Type.put("http://nlp2rdf.lod2.eu/schema/string/OffsetBasedString", "eu.lod2.nlp2rdf.schema.str.IOffsetBasedString");
032                    uri2Type.put("http://nlp2rdf.lod2.eu/schema/sso/Sentence", "eu.lod2.nlp2rdf.schema.sso.ISentence");
033                    uri2Type.put("http://nlp2rdf.lod2.eu/schema/string/Document", "eu.lod2.nlp2rdf.schema.str.IDocument");
034                    uri2Type.put("http://nlp2rdf.lod2.eu/schema/string/String", "eu.lod2.nlp2rdf.schema.str.IString");
035                    uri2Type.put("http://nlp2rdf.lod2.eu/schema/topic/Topic", "eu.lod2.nlp2rdf.schema.topic.ITopic");
036                    uri2Type.put("http://nlp2rdf.lod2.eu/schema/string/ContextHashBasedString", "eu.lod2.nlp2rdf.schema.str.IContextHashBasedString");
037            }
038    
039            /**
040             * Sets the default ontModel that may be used by ontology wrapper classes when no explicit ontModel argument is provided
041             */
042            public static void setDefaultModel(OntModel defaultModel) {
043                    Factory.defaultModel = defaultModel;
044            }
045    
046            /**
047             * Returns the default ontModel set with setDefaultModel()
048             */
049            public static OntModel getDefaultModel() {
050                    if (defaultModel == null) {
051                            throw new RuntimeException("No default OntModel was provided to eu.lod2.nlp2rdf.schema.tools.Factory");
052                    }
053                    return defaultModel;
054            }
055    
056            /**
057             * Returns the interface name for a given OWL Class
058             */
059            public static java.lang.String getJavaInterfaceName(java.lang.String uri) {
060                    return uri2Type.get(uri);
061            }
062    
063            /**
064             * Returns true if there is a java interface for the
065             * given OWL Class
066             */
067            public static boolean hasJavaType(java.lang.String uri) {
068                    return uri2Type.containsKey(uri);
069            }
070    
071            /**
072             * Deletes the individual with URI from the OntModel
073             */
074            public static boolean deleteInstance(java.lang.String uri, OntModel ontModel) {
075                    Individual individual = ontModel.getIndividual(uri);
076                    if (individual != null) {
077                            individual.remove();
078                            return true;
079                    }
080                    log.warn("Could not remove non existing instance " + uri + " from model");
081                    return false;
082            }
083    
084            /**
085             * Same as deleteInstance, but works with the default OntModel
086             * @see Factory#deleteInstance(java.lang.String, OntModel)
087             */
088            public static boolean deleteInstance(java.lang.String uri) {
089                    return deleteInstance(uri, getDefaultModel());
090            }
091    
092            /**
093             * Registers all custom classes with jena
094             */
095            public static void registerCustomClasses() {
096                    log.info("Registering custom classes with jena");
097                    eu.lod2.nlp2rdf.schema.Thing.register();
098                    eu.lod2.nlp2rdf.schema.sso.StopWord.register();
099                    eu.lod2.nlp2rdf.schema.sso.Word.register();
100                    eu.lod2.nlp2rdf.schema.sso.Phrase.register();
101                    eu.lod2.nlp2rdf.schema.str.OffsetBasedString.register();
102                    eu.lod2.nlp2rdf.schema.sso.Sentence.register();
103                    eu.lod2.nlp2rdf.schema.str.Document.register();
104                    eu.lod2.nlp2rdf.schema.str.String.register();
105                    eu.lod2.nlp2rdf.schema.topic.Topic.register();
106                    eu.lod2.nlp2rdf.schema.str.ContextHashBasedString.register();
107            }
108    
109            /**
110             * Adds imports statements to an ontology and adds
111             * imported subModels to a model.
112             *
113             * Currently, this uses the namespace URI without trailing '#' or ':'
114             * as location.
115             */
116            public static void registerImports(Ontology ontology, OntModel ontModel) {
117                    log.info("Adding import statements to the model");
118                    OntDocumentManager odm = OntDocumentManager.getInstance();
119                    log.debug("Adding import ../../core/nif/src/main/resources/eu/lod2/nlp2rdf/schema/string/string.ttl to the model");
120                    odm.loadImport(ontModel, "../../core/nif/src/main/resources/eu/lod2/nlp2rdf/schema/string/string.ttl");
121                    ontology.addImport(ontModel.createResource("../../core/nif/src/main/resources/eu/lod2/nlp2rdf/schema/string/string.ttl"));
122                    log.debug("Adding import http://nlp2rdf.lod2.eu/schema/string/ to the model");
123                    odm.loadImport(ontModel, "http://nlp2rdf.lod2.eu/schema/string/");
124                    ontology.addImport(ontModel.createResource("http://nlp2rdf.lod2.eu/schema/string/"));
125                    log.debug("Adding import ../../core/nif/src/main/resources/eu/lod2/nlp2rdf/schema/topic/topic.ttl to the model");
126                    odm.loadImport(ontModel, "../../core/nif/src/main/resources/eu/lod2/nlp2rdf/schema/topic/topic.ttl");
127                    ontology.addImport(ontModel.createResource("../../core/nif/src/main/resources/eu/lod2/nlp2rdf/schema/topic/topic.ttl"));
128                    log.debug("Adding import ../../core/nif/src/main/resources/eu/lod2/nlp2rdf/schema/sso/sso.ttl to the model");
129                    odm.loadImport(ontModel, "../../core/nif/src/main/resources/eu/lod2/nlp2rdf/schema/sso/sso.ttl");
130                    ontology.addImport(ontModel.createResource("../../core/nif/src/main/resources/eu/lod2/nlp2rdf/schema/sso/sso.ttl"));
131                    log.debug("Adding import http://nlp2rdf.lod2.eu/schema/sso/ to the model");
132                    odm.loadImport(ontModel, "http://nlp2rdf.lod2.eu/schema/sso/");
133                    ontology.addImport(ontModel.createResource("http://nlp2rdf.lod2.eu/schema/sso/"));
134                    log.debug("Adding import http://nlp2rdf.lod2.eu/schema/topic/ to the model");
135                    odm.loadImport(ontModel, "http://nlp2rdf.lod2.eu/schema/topic/");
136                    ontology.addImport(ontModel.createResource("http://nlp2rdf.lod2.eu/schema/topic/"));
137                    log.debug("Adding import http://ns.aksw.org/scms/ to the model");
138                    odm.loadImport(ontModel, "http://ns.aksw.org/scms/");
139                    ontology.addImport(ontModel.createResource("http://ns.aksw.org/scms/"));
140                    log.debug("Adding import http://www.w3.org/XML/1998/namespace to the model");
141                    odm.loadImport(ontModel, "http://www.w3.org/XML/1998/namespace");
142                    ontology.addImport(ontModel.createResource("http://www.w3.org/XML/1998/namespace"));
143            }
144    
145            /**
146             * Same as registerImports, but works with the default OntModel
147             * @see Factory#registerImports(Ontology, OntModel)
148             */
149            public void registerImports(Ontology ontology) {
150                    registerImports(ontology, getDefaultModel());
151            }
152    }