001 package nl.tudelft.tbm.eeni.owl2java;
002
003 import com.hp.hpl.jena.ontology.OntDocumentManager;
004 import com.hp.hpl.jena.ontology.OntModel;
005 import com.hp.hpl.jena.ontology.OntModelSpec;
006 import com.hp.hpl.jena.rdf.model.ModelFactory;
007 import nl.tudelft.tbm.eeni.owl2java.generator.JavaWriter;
008 import nl.tudelft.tbm.eeni.owl2java.generator.ModelPreparation;
009 import nl.tudelft.tbm.eeni.owl2java.generator.OwlReader;
010 import nl.tudelft.tbm.eeni.owl2java.model.jmodel.JModel;
011 import org.apache.commons.logging.Log;
012 import org.apache.commons.logging.LogFactory;
013
014 import java.util.*;
015
016
017 public class JenaGenerator {
018
019 @SuppressWarnings("unused")
020 private static Log log = LogFactory.getLog(JenaGenerator.class);
021
022 // config options
023 private String vocabularyName = "Vocabulary";
024 private String factoryName = "Factory";
025 private String testClassName = "Test";
026
027 private boolean createTestClass = true;
028
029 String toolsPackage = "tools";
030
031 Date startAll;
032
033 Date startJModedlCreation;
034
035 Date startPreparation;
036
037 Date startToDisk;
038
039 Date stopAll;
040
041 OntModel model;
042
043 private Map<String, String> mappings = new HashMap<String, String>();
044
045 JModel jmodel;
046
047 protected boolean reasignDomainlessProperties = true;
048
049 protected boolean enableCodeFormatting = true;
050
051 protected Properties codeFormatterOptions = null;
052
053 public void generate(String uri, String altLocation, String baseDir, String basePackage) {
054 startAll = new Date();
055
056 OntModel owlModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM);
057 OntDocumentManager owlDocMgr = owlModel.getDocumentManager();
058 owlDocMgr.setProcessImports(true);
059 owlDocMgr.addAltEntry(uri, altLocation);
060 addMappings(owlDocMgr, uri);
061 owlModel.read(uri);
062
063 generate(owlModel, baseDir, basePackage);
064 }
065
066 public void generate(String uri, String baseDir, String basePackage) {
067 startAll = new Date();
068
069 OntModel owlModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM);
070 OntDocumentManager owlDocMgr = owlModel.getDocumentManager();
071 owlDocMgr.setProcessImports(true);
072 addMappings(owlDocMgr, uri);
073 owlModel.read(uri);
074
075 generate(owlModel, baseDir, basePackage);
076 }
077
078 public void generate(OntModel model, String baseDir, String basePackage) {
079 // Note: model needs to be OWL_DL_MEM !!!
080 this.model = model;
081
082 startJModedlCreation = new Date();
083 if (startAll == null) {
084 startAll = startJModedlCreation;
085 }
086 // read the model
087 OwlReader mReader = new OwlReader();
088 mReader.setBasePackage(basePackage);
089 mReader.addForbiddenPrefix(toolsPackage);
090 this.jmodel = mReader.generateJModel(model);
091
092 // prepare the model
093 startPreparation = new Date();
094 ModelPreparation mPrep = new ModelPreparation();
095 mPrep.setReasignDomainlessProperties(reasignDomainlessProperties);
096 this.jmodel = mPrep.prepareModel(jmodel);
097
098 // write the model
099 startToDisk = new Date();
100 JavaWriter mWriter = new JavaWriter();
101 mWriter.setVocabularyName(vocabularyName);
102 mWriter.setToolsPackage(toolsPackage);
103 mWriter.setFactoryName(factoryName);
104 mWriter.setCreateTestClass(createTestClass);
105 mWriter.setTestClassName(testClassName);
106 mWriter.setEnableCodeFormatting(enableCodeFormatting);
107 mWriter.setCodeFormatterOptions(codeFormatterOptions);
108 mWriter.generate(this.jmodel, baseDir, basePackage);
109
110 stopAll = new Date();
111 }
112
113 public void setVocabularyName(String vocabularyName) {
114 this.vocabularyName = vocabularyName;
115 }
116
117
118 public void setFactoryName(String factoryName) {
119 this.factoryName = factoryName;
120 }
121
122 public void setCreateTestClass(boolean createTestClass) {
123 this.createTestClass = createTestClass;
124 }
125
126 public void setTestcaseName(String testcaseName) {
127 this.testClassName = testcaseName;
128 }
129
130 public boolean addMappings(String uri, String altLocation) {
131 if (uri == null || altLocation == null) {
132 return false;
133 }
134 if (mappings == null) {
135 mappings = new HashMap<String, String>();
136 }
137 if (mappings.containsKey(uri)) {
138 return false;
139 }
140 mappings.put(uri, altLocation);
141 return true;
142 }
143
144 protected void addMappings(OntDocumentManager owlDocMgr, String top_uri) {
145 if (mappings != null && !mappings.isEmpty()) {
146 int lastSlash = top_uri == null ? 0 : top_uri.lastIndexOf('/');
147 String baseuri = lastSlash >= 0 ? top_uri.substring(0, lastSlash) : top_uri;
148 for (int i = 0; i < mappings.size(); i++) {
149 Iterator<String> itr = mappings.keySet().iterator();
150 while (itr.hasNext()) {
151 String uri = itr.next();
152 String altloc = baseuri + "/" + mappings.get(uri);
153 owlDocMgr.addAltEntry(uri, altloc);
154 System.out.println("uri=" + uri + "; altloc=" + altloc);
155 }
156 }
157 }
158 }
159
160 public String getStatistics() {
161 String str = new String();
162 if (this.jmodel != null)
163 str += jmodel.getStatistics() + "\n";
164 str += "Total Time: " + (stopAll.getTime() - startAll.getTime()) + " ms\n";
165 str += "Reading the Owl Model: " + (startJModedlCreation.getTime() - startAll.getTime()) + " ms\n";
166 str += "Creating the JModel: " + (startPreparation.getTime() - startJModedlCreation.getTime()) + " ms\n";
167 str += "Preparing the JModel: " + (startToDisk.getTime() - startPreparation.getTime()) + " ms\n";
168 str += "Writting the classes: " + (stopAll.getTime() - startToDisk.getTime()) + " ms\n";
169
170 return str;
171 }
172
173 public String getJModelReport() {
174 if (this.jmodel != null)
175 return jmodel.getJModelReport();
176 return new String();
177 }
178
179 public OntModel getOntModel() {
180 return model;
181 }
182
183 public JModel getJModel() {
184 return jmodel;
185 }
186
187 public void setToolsPackage(String toolsPackage) {
188 this.toolsPackage = toolsPackage;
189 }
190
191 public void setReasignDomainlessProperties(boolean reasignDomainlessProperties) {
192 this.reasignDomainlessProperties = reasignDomainlessProperties;
193 }
194
195 public void setEnableCodeFormating(boolean enableCodeFormatting) {
196 this.enableCodeFormatting = enableCodeFormatting;
197 }
198
199 public void setCodeFormatterOptions(Properties codeFormatterOptions) {
200 this.codeFormatterOptions = codeFormatterOptions;
201 }
202
203 }