/**
* Copyright (c) 2013, Caixa Magica Software Lda (CMS).
* The work has been developed in the TIMBUS Project and the above-mentioned are Members of the TIMBUS Consortium.
* TIMBUS is supported by the European Union under the 7th Framework Programme for research and technological
* development and demonstration activities (FP7/2007-2013) under grant agreement no. 269940.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at: http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including without
* limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTIBITLY, or FITNESS FOR A PARTICULAR
* PURPOSE. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise,
* unless required by applicable law or agreed to in writing, shall any Contributor be liable for damages, including
* any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this
* License or out of the use or inability to use the Work.
* See the License for the specific language governing permissions and limitation under the License.
*/
package net.timbusproject.populator.modules.windowssoftwareconverter;
import net.timbusproject.populator.modules.windowssoftwareconverter.axiom.ClassAxiom;
import net.timbusproject.populator.modules.windowssoftwareconverter.axiom.DataPropertyAxiom;
import org.apache.commons.io.IOUtils;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
import org.semanticweb.owlapi.apibinding.OWLManager;
import org.semanticweb.owlapi.io.StreamDocumentTarget;
import org.semanticweb.owlapi.model.OWLOntology;
import org.semanticweb.owlapi.model.OWLOntologyCreationException;
import org.semanticweb.owlapi.model.OWLOntologyManager;
import org.semanticweb.owlapi.model.OWLOntologyStorageException;
import java.io.*;
import java.util.UUID;
public class Engine {
public String run(String jsonString) throws JSONException, OWLOntologyCreationException, IOException, OWLOntologyStorageException {
OWLApi owlApi = new OWLApi("http://timbus.teco.edu/ontologies/DSOs/CUDFMapping.owl", OWLManager.createOWLOntologyManager());
//Read output file
//ReadJSON readJSON = new ReadJSON("output.json");
// JSONArray jsonArray = readJSON.getJsonObject();
// JSONObject newJsonObject = new JSONObject(jsonString).getJSONObject("extractor").getJSONObject("properties");
// String windowsVersion = newJsonObject.getJSONArray("property").getJSONObject(0).getString("content");
// owlApi.addProperty(new ClassAxiom("OS", windowsVersion));
JSONArray jsonArray = new JSONObject(jsonString).getJSONObject("extractor").getJSONArray("group");
for (int i = 0; i < jsonArray.length(); i++) {
JSONArray elementJSONArray = jsonArray.getJSONObject(i).getJSONArray("element");
for (int j = 0; j < elementJSONArray.length(); j++) {
JSONObject elementJsonObject = elementJSONArray.getJSONObject(j);
if (elementJsonObject.has("name")) {
String name = elementJsonObject.getString("name");
if (elementJsonObject.has("content")) {
String content = elementJsonObject.getString("content");
if (elementJsonObject.has("version")) {
String version = elementJsonObject.getString("version");
String individualContent = name + content + version;
owlApi.addProperty(
new ClassAxiom("Content", individualContent),
new DataPropertyAxiom<>("hasName", individualContent, name),
new DataPropertyAxiom<>("hasVersion", individualContent, version)
);
} else {
String individualContent = name + content;
owlApi.addProperty(
new ClassAxiom("Content", individualContent),
new DataPropertyAxiom<>("hasName", individualContent, name)
);
}
} else {
String individualContent = name;
owlApi.addProperty(
new ClassAxiom("Name", individualContent),
new DataPropertyAxiom<>("hasName", individualContent, name)
);
}
}
}
// String temp = jsonArray.getJSONObject(i).getJSONArray("Depends").toString();
// addField();
/*
if (!jsonArray.getJSONObject(i).isNull("Depends")) {
addField("Depends",
"hasDependency",
individualContent,
jsonObject,
owlApi
);
}
if (!jsonArray.getJSONObject(i).isNull("Conflicts")) {
addField("Conflicts",
"hasConflict",
individualPackage,
jsonObject,
owlApi
);
}
// String temp = jsonArray.getJSONObject(i).getJSONArray("Depends").toString();
*/
}
// owlApi.printOntology();
return getOntology(owlApi);
}
public String getOntology(OWLApi api) throws IOException, OWLOntologyStorageException {
OWLOntologyManager manager = api.getOntologyManager();
OWLOntology ontology = api.getOntology();
File file = File.createTempFile(UUID.randomUUID().toString(), ".tmp");
manager.saveOntology(ontology, new StreamDocumentTarget(new FileOutputStream(file)));
StringWriter writer = new StringWriter();
IOUtils.copy(new FileInputStream(file), writer);
//noinspection ResultOfMethodCallIgnored
file.delete();
return writer.toString();
}
private void addField(String key, String field, String individualPackage, JSONObject jsonObject, OWLApi owlApi) throws JSONException {
JSONArray jsonArray = jsonObject.getJSONArray(key);
for (int j = 0; j < jsonArray.length(); j++) {
// String str = (String) jsonArray.get(j);
JSONObject str = (JSONObject) jsonArray.get(j);
owlApi.addProperty(
new DataPropertyAxiom<>(field, individualPackage, str.toString())
);
}
}
}