package org.openiot.lsm.sdum.model.entities;
import java.util.ArrayList;
import java.util.Date;
import java.util.Set;
import org.openrdf.query.BindingSet;
import org.openrdf.query.QueryEvaluationException;
import org.openrdf.query.TupleQueryResult;
import org.openiot.lsm.schema.LSMSchema;
import org.openiot.lsm.sdum.model.beans.DefaultGraphBean;
import org.openiot.lsm.sdum.model.beans.NamedGraphBean;
import org.openiot.lsm.sdum.model.beans.OSMOBean;
import org.openiot.lsm.sdum.model.beans.QueryControlsBean;
import org.openiot.lsm.sdum.model.beans.QueryRequestBean;
import org.openiot.lsm.sdum.model.beans.QueryScheduleBean;
import org.openiot.lsm.sdum.model.entities.OSMOEnt;
import org.openiot.lsm.sdum.model.entities.QueryScheduleEnt;
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;
public class QueryControlsEnt
{
public static class Queries
{
public static ArrayList<QueryControlsBean> parseQueryReqBean(TupleQueryResult qres)
{
ArrayList<QueryControlsBean> queryControlsBeanList = new ArrayList<QueryControlsBean>();
try
{
while (qres.hasNext())
{
BindingSet b = qres.next();
Set names = b.getBindingNames();
QueryControlsBean queryControlsBean = new QueryControlsBean();
for (Object n : names)
{
if(((String) n).equalsIgnoreCase("queryContrlsID"))
{
String str = (b.getValue((String) n)==null) ? null : b.getValue((String) n).stringValue();
queryControlsBean.setId(str);
System.out.println("queryControlsBean: "+queryControlsBean.getId()+" ");
}
else if(((String) n).equalsIgnoreCase("queryContrlsTrigger"))
{
String str = (b.getValue((String) n)==null) ? null : b.getValue((String) n).stringValue();
queryControlsBean.setTrigger(str);
System.out.println("queryContrlsTrigger : "+queryControlsBean.getTrigger()+" ");
}
else if(((String) n).equalsIgnoreCase("queryContrlsIfEmpty"))
{
String str = (b.getValue((String) n)==null) ? null : b.getValue((String) n).stringValue();
queryControlsBean.setReportIfEmpty(Boolean.parseBoolean(str));
System.out.println("queryContrlsTrigger : "+queryControlsBean.getReportIfEmpty()+" ");
}
else if(((String) n).equalsIgnoreCase("queryContrlsInitRecTime"))
{
String str = (b.getValue((String) n)==null) ? null : b.getValue((String) n).stringValue();
queryControlsBean.setInitialRecordTime(new Date(str));//TODO:check it
System.out.println("queryContrlsInitRecTime : "+queryControlsBean.getInitialRecordTime()+" ");
}
else if(((String) n).equalsIgnoreCase("queryContrlsQSched"))
{
String str = (b.getValue((String) n)==null) ? null : b.getValue((String) n).stringValue();
queryControlsBean.setQuerySchedBean(new QueryScheduleBean(str));
System.out.println("queryContrlsQSched : "+queryControlsBean.getQuerySchedBean().getId()+" ");
}
}//for
queryControlsBeanList.add(queryControlsBean);
}//while
return queryControlsBeanList;
}
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 selectQueryControlsByOSMO(String graph,OSMOBean osmoBean)
{
StringBuilder queryStr = new StringBuilder();
// update.append(getNamespaceDeclarations());
queryStr.append("SELECT ?queryContrlsID ?queryContrlsTrigger ?queryContrlsIfEmpty ?queryContrlsInitRecTime ?queryContrlsQSched ");
queryStr.append("from <"+graph+"> ");
queryStr.append("WHERE ");
queryStr.append("{");
queryStr.append("?queryContrlsID rdf:type <http://openiot.eu/ontology/ns/QueryControls> . ");
queryStr.append("?queryContrlsID <http://openiot.eu/ontology/ns/querycontrolsOfOSMO> <"+osmoBean.getId()+"> . ");
queryStr.append("?queryContrlsID <http://openiot.eu/ontology/ns/querycontrolsReportIfEmpty> ?queryContrlsIfEmpty . ");
queryStr.append("optional { ?queryContrlsID <http://openiot.eu/ontology/ns/querycontrolsTrigger> ?queryContrlsTrigger . }");
queryStr.append("optional { ?queryContrlsID <http://openiot.eu/ontology/ns/querycontrolsInitialRecTime> ?queryContrlsInitRecTime . }");
queryStr.append("optional { ?queryContrlsID <http://openiot.eu/ontology/ns/querycontrolsHasQuerySchedule> ?queryContrlsQSched . }");
queryStr.append("}");
return queryStr.toString();
}
}
private LSMSchema ontTemplate;
private LSMSchema ontInstance;
private Individual queryControlsClassIdv;
private OntClass ontClsQueryControls;
private OntProperty ontPquerycontrolsHasQuerySchedule;
private OntProperty ontPquerycontrolsTrigger;
private OntProperty ontPquerycontrolsReportIfEmpty;
private OntProperty ontPquerycontrolsInitialRecTime;
private OntProperty ontPquerycontrolsOfOSMO;
private QueryControlsBean queryControlsBean;
private QueryScheduleEnt queryScheduleEnt;
private OSMOEnt osmoEnt;
public QueryControlsEnt(QueryControlsBean qcBean,OSMOEnt osmoEnt)
{
this.ontTemplate=new LSMSchema();
this.ontInstance=new LSMSchema();
initOnt_QueryControls();
setQueryControlsBean(qcBean);
setOsmoEnt(osmoEnt);
}
public QueryControlsEnt(String filePath,QueryControlsBean qcBean,OSMOEnt osmoEnt)
{
this.ontTemplate=new LSMSchema(filePath, OntModelSpec.OWL_DL_MEM,"TURTLE");
this.ontInstance=new LSMSchema();
initOnt_QueryControls();
setQueryControlsBean(qcBean);
setOsmoEnt(osmoEnt);
}
private void initOnt_QueryControls()
{
ontClsQueryControls = ontTemplate.createClass("http://openiot.eu/ontology/ns/QueryControls");
ontPquerycontrolsHasQuerySchedule = ontTemplate.createProperty("http://openiot.eu/ontology/ns/querycontrolsHasQuerySchedule");
ontPquerycontrolsTrigger = ontTemplate.createProperty("http://openiot.eu/ontology/ns/querycontrolsTrigger");
ontPquerycontrolsReportIfEmpty = ontTemplate.createProperty("http://openiot.eu/ontology/ns/querycontrolsReportIfEmpty");
ontPquerycontrolsInitialRecTime = ontTemplate.createProperty("http://openiot.eu/ontology/ns/querycontrolsInitialRecTime");
ontPquerycontrolsOfOSMO = ontTemplate.createProperty("http://openiot.eu/ontology/ns/querycontrolsOfOSMO");
}
////
public Individual getClassIndividual()
{
return queryControlsClassIdv;
}
////
public void createClassIdv()
{
if(queryControlsBean.getId()==null)
queryControlsClassIdv = ontInstance.createIndividual(ontClsQueryControls);
else
queryControlsClassIdv = ontInstance.createIndividual(queryControlsBean.getId(),ontClsQueryControls);
}
public void createPquerycontrolsHasQuerySchedule()
{
if(queryScheduleEnt!=null)
queryControlsClassIdv.addProperty(ontPquerycontrolsHasQuerySchedule, queryScheduleEnt.getClassIndividual());
}
public void createPquerycontrolsTrigger()
{
if(queryControlsBean.getTrigger()!=null)
queryControlsClassIdv.setPropertyValue(ontPquerycontrolsTrigger, ontInstance.getBase().createTypedLiteral(queryControlsBean.getTrigger()));
}
public void createPquerycontrolsReportIfEmpty()
{
if(queryControlsBean.getReportIfEmpty()!=null)
queryControlsClassIdv.setPropertyValue(ontPquerycontrolsReportIfEmpty, ontInstance.getBase().createTypedLiteral(queryControlsBean.getReportIfEmpty().booleanValue()));
}
public void createPquerycontrolsInitialRecTime()
{
if(queryControlsBean.getInitialRecordTime()!=null)
queryControlsClassIdv.setPropertyValue(ontPquerycontrolsInitialRecTime, ontInstance.getBase().createTypedLiteral(queryControlsBean.getInitialRecordTime()));
}
public void createPquerycontrolsOfOSMO()
{
if(osmoEnt!=null)
queryControlsClassIdv.addProperty(ontPquerycontrolsOfOSMO, osmoEnt.getClassIndividual());
}
public QueryControlsBean getQueryControlsBean() {
return queryControlsBean;
}
public void setQueryControlsBean(QueryControlsBean queryControlsBean) {
this.queryControlsBean = queryControlsBean;
}
public OSMOEnt getOsmoEnt() {
return osmoEnt;
}
public void setOsmoEnt(OSMOEnt osmoEnt) {
this.osmoEnt = osmoEnt;
}
public QueryScheduleEnt getQueryScheduleEnt() {
return queryScheduleEnt;
}
public void setQueryScheduleEnt(QueryScheduleEnt queryScheduleEnt) {
this.queryScheduleEnt = queryScheduleEnt;
}
}