package org.dvcama.lodview.bean; import java.io.File; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletContext; import org.apache.commons.lang3.StringEscapeUtils; import org.springframework.web.context.ServletContextAware; import com.hp.hpl.jena.rdf.model.Literal; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; import com.hp.hpl.jena.rdf.model.NodeIterator; import com.hp.hpl.jena.rdf.model.RDFNode; import com.hp.hpl.jena.rdf.model.Resource; import com.hp.hpl.jena.util.FileManager; public class OntologyBean implements ServletContextAware { private String ontoDir; private ServletContext context; private Model model; public void init() { File ontoDirFile = new File(ontoDir); if (!ontoDirFile.isAbsolute()) { ontoDirFile = new File(context.getRealPath("/") + "/WEB-INF/" + ontoDir); } model = ModelFactory.createDefaultModel(); if (ontoDirFile.exists()) { System.out.println("ontologies dir founded!"); File[] list = ontoDirFile.listFiles(); for (File file : list) { if (!file.isDirectory()) { try { System.out.println("loading " + file.getCanonicalPath()); FileManager.get().readModel(model, file.getAbsolutePath()); System.out.println("read successfully!"); } catch (Exception e) { System.err.println("error loading " + e.getMessage()); // e.printStackTrace(); } } } } else { System.out.println("no ontologies founded " + ontoDirFile.getAbsolutePath()); } // System.out.println("------------------- " + getHashResult("en", // "http://dati.camera.it/ocd/parentCountry")); // System.out.println("------------------- " + getHashResult("it", // "http://dati.camera.it/ocd/parentCountry")); } @Override public void setServletContext(ServletContext arg0) { this.context = arg0; try { init(); } catch (Exception e) { e.printStackTrace(); } } public String getOntoDir() { return ontoDir; } public void setOntoDir(String ontoDir) { this.ontoDir = ontoDir; } public String getValue(String what, String preferredLanguage, String IRI) { Resource IRIresource = model.createResource(IRI); return getSingleValue(preferredLanguage, IRIresource, "http://www.w3.org/2000/01/rdf-schema#" + what, ""); } public String getEscapedValue(String what, String preferredLanguage, String IRI) { return StringEscapeUtils.escapeHtml4(getValue(what, preferredLanguage, IRI)); } public Map<String, String> getHashResult(String preferredLanguage, String IRI) { Map<String, String> result = new HashMap<String, String>(); Resource IRIresource = model.createResource(IRI); result.put("label", getSingleValue(preferredLanguage, IRIresource, "http://www.w3.org/2000/01/rdf-schema#label", "")); result.put("comment", getSingleValue(preferredLanguage, IRIresource, "http://www.w3.org/2000/01/rdf-schema#comment", "")); return result; } private String getSingleValue(String preferredLanguage, Resource IRI, String prop, String defaultValue) { NodeIterator iter = model.listObjectsOfProperty(IRI, model.createProperty(prop)); String result = defaultValue; boolean betterTitleMatch = false; while (iter.hasNext()) { RDFNode node = iter.nextNode(); Literal l = node.asLiteral(); //System.out.println(IRI + " " + preferredLanguage + " --> " + l.getLanguage() + " --> " + l.getLexicalForm()); if (!betterTitleMatch && (result.equals(defaultValue) || l.getLanguage().equals("en") || l.getLanguage().equals(preferredLanguage))) { if (preferredLanguage.equals(l.getLanguage())) { betterTitleMatch = true; } result = l.getLexicalForm(); } } return result; } public Model getModel() { return model; } public void setModel(Model model) { this.model = model; } }