package org.openiot.lsm.sdum.model.entities; import java.util.ArrayList; import java.util.Set; import org.openrdf.query.BindingSet; import org.openrdf.query.QueryEvaluationException; import org.openrdf.query.TupleQueryResult; import com.hp.hpl.jena.ontology.Individual; import com.hp.hpl.jena.ontology.OntClass; import com.hp.hpl.jena.ontology.OntModelSpec; import com.hp.hpl.jena.ontology.OntProperty; import com.hp.hpl.jena.vocabulary.RDF; import com.hp.hpl.jena.vocabulary.RDFS; import com.hp.hpl.jena.vocabulary.XSD; import org.openiot.lsm.schema.LSMSchema; import org.openiot.lsm.sdum.model.beans.OAMOBean; import org.openiot.lsm.sdum.model.beans.OSDSpecBean; import org.openiot.lsm.sdum.model.beans.OSMOBean; import org.openiot.lsm.sdum.model.beans.UserBean; import org.openiot.lsm.sdum.model.entities.OSDSpecEnt; import org.openiot.lsm.sdum.model.entities.OSMOEnt; public class OAMOEnt { public static class Queries { public static ArrayList<OAMOBean> parseOAMO(TupleQueryResult qres) { ArrayList<OAMOBean> oamoBeanList = new ArrayList<OAMOBean>(); try { while (qres.hasNext()) { BindingSet b = qres.next(); Set names = b.getBindingNames(); boolean found =false; OAMOBean oamoBean = new OAMOBean(); for (Object n : names) { if(((String) n).equalsIgnoreCase("oamoID")) { String str = (b.getValue((String) n)==null) ? null : b.getValue((String) n).stringValue(); oamoBean.setId(str); System.out.println("oamoID: "+oamoBean.getId()+" "); } else if(((String) n).equalsIgnoreCase("oamoName")) { String str = (b.getValue((String) n)==null) ? null : b.getValue((String) n).stringValue(); oamoBean.setName(str); System.out.println("oamoName : "+oamoBean.getName()+" "); } else if(((String) n).equalsIgnoreCase("oamoDesc")) { String str = (b.getValue((String) n)==null) ? null : b.getValue((String) n).stringValue(); oamoBean.setDescription(str); System.out.println("oamoDesc : "+oamoBean.getDescription()+" "); } else if(((String) n).equalsIgnoreCase("oamoGraphMeta")) { String str = (b.getValue((String) n)==null) ? null : b.getValue((String) n).stringValue(); oamoBean.setGraphMeta(str); System.out.println("oamoGraphMeta : "+oamoBean.getGraphMeta()+" "); } else if(((String) n).equalsIgnoreCase("osmoIDsOfOAMO")) { String str = (b.getValue((String) n)==null) ? null : b.getValue((String) n).stringValue(); for(OAMOBean object : oamoBeanList) { if(object.getId().equals(oamoBean.getId())) { //grab already added oamoBean and add osmo object.getOsmoBeanList().add(new OSMOBean(str)); found = true; } else { //this oamoBean doesnt exist in the list oamoBean.getOsmoBeanList().add(new OSMOBean(str)); found = false; } } } }//for if(!found) oamoBeanList.add(oamoBean); }//while return oamoBeanList; } catch (QueryEvaluationException e) { e.printStackTrace(); return null; } catch (Exception e) { e.printStackTrace(); return null; } } private static String getNamespaceDeclarations() { StringBuilder declarations = new StringBuilder(); declarations.append("PREFIX : <" + "http://openiot.eu/ontology/ns/" + "> \n"); //declarations.append("PREFIX spt: <" + "http://spitfire-project.eu/ontology/ns/" + "> \n"); declarations.append("PREFIX rdf: <" + RDF.getURI() + "> \n");//http://www.w3.org/1999/02/22-rdf-syntax-ns# declarations.append("PREFIX rdfs: <" + RDFS.getURI() + "> \n");//http://www.w3.org/2000/01/rdf-schema# declarations.append("PREFIX xsd: <" + XSD.getURI() + "> \n"); //declarations.append("PREFIX owl: <" + OWL.getURI() + "> \n"); //declarations.append("PREFIX ssn: <" + "http://purl.oclc.org/NET/ssnx/ssn#" + "> \n"); //declarations.append("PREFIX dul: <" + "http://www.ontologydesignpatterns.org/ont/dul/DUL.owl#" + "> \n"); //declarations.append("PREFIX oiot: <" + "http://openiot.eu/ontology/ns/" + "> \n"); //declarations.append("base oiot: <" + "http://openiot.eu/ontology/ns/clouddb" + "> \n"); declarations.append("\n"); return declarations.toString(); } public static String selectOAMOByOSDspec(String graph,OSDSpecBean osdSpec) { StringBuilder queryStr = new StringBuilder(); // update.append(getNamespaceDeclarations()); queryStr.append("SELECT ?oamoID ?oamoName ?oamoDesc ?oamoGraphMeta ?osmoIDsOfOAMO "); queryStr.append("from <"+graph+"> "); queryStr.append("WHERE "); queryStr.append("{"); queryStr.append("?oamoID rdf:type <http://openiot.eu/ontology/ns/OAMO> . "); queryStr.append("?oamoID <http://openiot.eu/ontology/ns/oamoOfOSDSpec> <"+osdSpec.getId()+"> . "); queryStr.append("optional {?oamoID <http://openiot.eu/ontology/ns/oamoName> ?oamoName . }"); queryStr.append("optional {?oamoID <http://openiot.eu/ontology/ns/oamoDescription> ?oamoDesc . }"); queryStr.append("optional {?oamoID <http://openiot.eu/ontology/ns/oamoGraphMeta> ?oamoGraphMeta . }"); queryStr.append("optional {?oamoID <http://openiot.eu/ontology/ns/oamoHasOSMO> ?osmoIDsOfOAMO . }"); queryStr.append("}"); return queryStr.toString(); } }//queries private LSMSchema ontTemplate; private LSMSchema ontInstance; private Individual oamoClassIdv; private OntClass ontClsOAMO; private OntProperty ontPoamoDescription; private OntProperty ontPoamoGraphMeta; private OntProperty ontPoamoName; private OntProperty ontPoamoOfOSDSpec; private OntProperty ontPoamoHasOSMO; private OAMOBean oamoBean; private OSDSpecEnt osdSpecEnt; private ArrayList<OSMOEnt> osmoList = new ArrayList<OSMOEnt>(); public OAMOEnt(OAMOBean oamoBean,OSDSpecEnt osdSpecEnt) { this.ontTemplate=new LSMSchema(); this.ontInstance=new LSMSchema(); initOnt_Oamo(); setOamoBean(oamoBean); setOsdSpecEnt(osdSpecEnt); } public OAMOEnt(String filePath, OAMOBean oamoBea,OSDSpecEnt osdSpecEnt) { this.ontTemplate=new LSMSchema(filePath, OntModelSpec.OWL_DL_MEM,"TURTLE"); this.ontInstance=new LSMSchema(); initOnt_Oamo(); setOamoBean(oamoBean); setOsdSpecEnt(osdSpecEnt); } private void initOnt_Oamo() { ontClsOAMO = ontTemplate.createClass("http://openiot.eu/ontology/ns/OAMO"); ontPoamoDescription = ontTemplate.createProperty("http://openiot.eu/ontology/ns/oamoDescription"); ontPoamoGraphMeta= ontTemplate.createProperty("http://openiot.eu/ontology/ns/oamoGraphMeta"); ontPoamoName = ontTemplate.createProperty("http://openiot.eu/ontology/ns/oamoName"); ontPoamoOfOSDSpec = ontTemplate.createProperty("http://openiot.eu/ontology/ns/oamoOfOSDSpec"); ontPoamoHasOSMO = ontTemplate.createProperty("http://openiot.eu/ontology/ns/oamoHasOSMO"); } //// public Individual getClassIndividual() { return oamoClassIdv; } //// public void createClassIdv() { if(oamoBean.getId()==null) oamoClassIdv = ontInstance.createIndividual(ontClsOAMO); else oamoClassIdv = ontInstance.createIndividual(oamoBean.getId(),ontClsOAMO); } public void createPoamoDescription() { if(oamoBean.getDescription()!=null) oamoClassIdv.setPropertyValue(ontPoamoDescription, ontInstance.getBase().createTypedLiteral(oamoBean.getDescription())); } public void createPoamoGraphMeta() { if(oamoBean.getGraphMeta()!=null) oamoClassIdv.setPropertyValue(ontPoamoGraphMeta, ontInstance.getBase().createTypedLiteral(oamoBean.getGraphMeta())); } public void createPoamoName() { if(oamoBean.getName()!=null) oamoClassIdv.setPropertyValue(ontPoamoName, ontInstance.getBase().createTypedLiteral(oamoBean.getName())); } public void createPoamoOfOSDSpec() { if(osdSpecEnt!=null) oamoClassIdv.addProperty(ontPoamoOfOSDSpec, osdSpecEnt.getClassIndividual()); } public void createPoamoHasOSMO() { for(int i=0; i<osmoList.size(); i++) { oamoClassIdv.addProperty(ontPoamoHasOSMO, osmoList.get(i).getClassIndividual()); } } public OAMOBean getOamoBean() { return oamoBean; } public void setOamoBean(OAMOBean oamoBean) { this.oamoBean = oamoBean; } public OSDSpecEnt getOsdSpecEnt() { return osdSpecEnt; } public void setOsdSpecEnt(OSDSpecEnt osdSpecEnt) { this.osdSpecEnt = osdSpecEnt; } public ArrayList<OSMOEnt> getOsmoList() { return osmoList; } public void setOsmoList(ArrayList<OSMOEnt> osmoList) { this.osmoList = osmoList; } }//class