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.UserBean; import org.openiot.lsm.sdum.model.entities.OAMOEnt; import org.openiot.lsm.sdum.model.entities.UserEnt; public class OSDSpecEnt { public static class Queries { public static ArrayList<OSDSpecBean> parseUserData(TupleQueryResult qres) { ArrayList<OSDSpecBean> osdSpecList = new ArrayList<OSDSpecBean>(); try { while (qres.hasNext()) // iterates over all the tuples { BindingSet b = qres.next(); Set<String> names = b.getBindingNames(); boolean found =false; OSDSpecBean osdSpec = new OSDSpecBean(); for (Object n : names) // iterates over a tuple's elements { if(((String) n).equalsIgnoreCase("osdSepcID")) { String str = (b.getValue((String) n)==null) ? null : b.getValue((String) n).stringValue(); osdSpec.setId(str); System.out.println("user id: "+osdSpec.getId()+" "); } else if(((String) n).equalsIgnoreCase("oamoID")) { String str = (b.getValue((String) n)==null) ? null : b.getValue((String) n).stringValue(); for(OSDSpecBean object : osdSpecList) { if(object.getId().equals(osdSpec.getId())) { //grab already added osdpec and add oamo object.getOamoBeanList().add(new OAMOBean(str)); found = true; } else { //this spec doesnt exist in the list osdSpec.getOamoBeanList().add(new OAMOBean(str)); found = false; } } } }//for if(!found) osdSpecList.add(osdSpec); }//while return osdSpecList; } catch (QueryEvaluationException e) { e.printStackTrace(); return null; } catch (Exception e) { e.printStackTrace(); return null; } } // private static String graph = "http://lsm.deri.ie/OpenIoT/testSchema#"; // 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 selectOSDSpecByUser(String graph,UserBean user) { StringBuilder queryStr = new StringBuilder(); //queryStr.append(getNamespaceDeclarations()); queryStr.append("SELECT ?osdSepcID ?oamoID "); queryStr.append("from <"+graph+"> "); queryStr.append("WHERE "); queryStr.append("{"); queryStr.append("?osdSepcID rdf:type <http://openiot.eu/ontology/ns/OSDSPEC> . "); queryStr.append("?osdSepcID <http://openiot.eu/ontology/ns/osdspecOfUser> <"+user.getId()+"> "); queryStr.append("optional { ?osdSepcID <http://openiot.eu/ontology/ns/osdpsecHasOamo> ?oamoID. }"); queryStr.append("}"); return queryStr.toString(); } } private LSMSchema ontTemplate; private LSMSchema ontInstance; private Individual osdspecClassIdv; private OntClass ontClsOSDSpec; private OntProperty ontPosdpsecOfUser; private OntProperty ontPosdpsecHasOamo; private OSDSpecBean osdSpecBean; private UserEnt userEnt; private ArrayList<OAMOEnt> oamoEntList = new ArrayList<OAMOEnt>(); public OSDSpecEnt(OSDSpecBean osdSpecBean,UserEnt userEnt) { this.ontTemplate=new LSMSchema(); this.ontInstance=new LSMSchema(); initOnt_OSDSpecEnt(); setOSDSpecBean(osdSpecBean); setUserEnt(userEnt); } public OSDSpecEnt(String filePath,OSDSpecBean osdSpecBean,UserEnt userEnt) { this.ontTemplate=new LSMSchema(filePath, OntModelSpec.OWL_DL_MEM,"TURTLE"); this.ontInstance=new LSMSchema(); initOnt_OSDSpecEnt(); setOSDSpecBean(osdSpecBean); setUserEnt(userEnt); } private void initOnt_OSDSpecEnt() { ontClsOSDSpec = ontTemplate.createClass("http://openiot.eu/ontology/ns/OSDSPEC"); ontPosdpsecOfUser = ontTemplate.createProperty("http://openiot.eu/ontology/ns/osdspecOfUser"); ontPosdpsecHasOamo = ontTemplate.createProperty("http://openiot.eu/ontology/ns/osdpsecHasOamo"); } //// public Individual getClassIndividual() { return osdspecClassIdv; } //// public void createClassIdv() { if(osdSpecBean.getId()==null) osdspecClassIdv = ontInstance.createIndividual(ontClsOSDSpec); else osdspecClassIdv = ontInstance.createIndividual(osdSpecBean.getId(),ontClsOSDSpec); } public void createPosdpsecOfUser() { if(userEnt!=null) osdspecClassIdv.addProperty(ontPosdpsecOfUser, userEnt.getClassIndividual()); } public void createPosdpsecHasOamo() { for(int i=0; i<oamoEntList.size(); i++) { osdspecClassIdv.addProperty(ontPosdpsecHasOamo, oamoEntList.get(i).getClassIndividual()); } } public OSDSpecBean getOsdSpecBean() { return osdSpecBean; } public void setOSDSpecBean(OSDSpecBean osdSpecBean) { this.osdSpecBean = osdSpecBean; } public UserEnt getUserEnt() { return userEnt; } public void setUserEnt(UserEnt userEnt) { this.userEnt = userEnt; } public ArrayList<OAMOEnt> getOamoEntList() { return oamoEntList; } }//class