package org.openiot.scheduler.core.utils.lsmpa.entities;
/**
* Copyright (c) 2011-2014, OpenIoT
*
* This file is part of OpenIoT.
*
* OpenIoT is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, version 3 of the License.
*
* OpenIoT is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with OpenIoT. If not, see <http://www.gnu.org/licenses/>.
*
* Contact: OpenIoT mailto: info@openiot.eu
*/
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.openiot.commons.util.PropertyManagement;
import org.openrdf.query.BindingSet;
import org.openrdf.query.QueryEvaluationException;
import org.openrdf.query.TupleQueryResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.openiot.lsm.schema.LSMSchema;
import org.openiot.lsm.server.LSMTripleStore;
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 Service {
public static class Queries {
public static ArrayList<Service> parseService(TupleQueryResult qres) {
ArrayList<Service> serviceList = new ArrayList<Service>();
try {
while (qres.hasNext()) {
BindingSet b = qres.next();
Set names = b.getBindingNames();
Service srvc = new Service();
for (Object n : names) {
if (((String) n).equalsIgnoreCase("serviceID")) {
String str = (b.getValue((String) n) == null) ? null : b.getValue((String) n)
.stringValue();
srvc.setId(str);
logger.debug("srvc id: " + srvc.getId() + " ");
} else if (((String) n).equalsIgnoreCase("srvcName")) {
String str = (b.getValue((String) n) == null) ? null : b.getValue((String) n)
.stringValue();
srvc.setName(str);
logger.debug("srvcName : " + srvc.getName() + " ");
} else if (((String) n).equalsIgnoreCase("srvcDesc")) {
String str = (b.getValue((String) n) == null) ? null : b.getValue((String) n)
.stringValue();
srvc.setDescription(str);
logger.debug("srvcDesc : " + srvc.getDescription() + " ");
} else if (((String) n).equalsIgnoreCase("srvcQstring")) {
String str = (b.getValue((String) n) == null) ? null : b.getValue((String) n)
.stringValue();
Query qString = new Query();
qString.setqString(str);
srvc.addQueryString(qString);
logger.debug("srvcQstring : " + srvc.getQueryString() + " ");
} else if (((String) n).equalsIgnoreCase("oamo")) {
String str = (b.getValue((String) n) == null) ? null : b.getValue((String) n)
.stringValue();
OAMO oamo = new OAMO();
oamo.setId(str);
srvc.setOAMO(oamo);
logger.debug("oamo : " + srvc.getOAMO().getId() + " ");
}
}
serviceList.add(srvc);
}// while
return serviceList;
} 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 selectAllServices()
// {
// StringBuilder update = new StringBuilder();
// update.append(getNamespaceDeclarations());
//
// String str=("SELECT ?serviceID from <"+graph+"> "
// +"WHERE "
// +"{"
//
// +"?serviceID rdf:type <http://openiot.eu/ontology/ns/Service> . "
// +"}");
//
// update.append(str);
// return update.toString();
// }
// public static String selectServiceByName(String srvcName)
// {
// StringBuilder update = new StringBuilder();
// update.append(getNamespaceDeclarations());
//
// String str=("SELECT ?serviceID from <"+graph+"> "
// +"WHERE "
// +"{"
// +"?serviceID <http://openiot.eu/ontology/ns/serviceName> ?name FILTER regex(?name, \""
// +srvcName+ "\" ) . "
// +"}");
//
// update.append(str);
// return update.toString();
// }
// public static String selectServiceByDescription(String desc)
// {
// StringBuilder update = new StringBuilder();
// update.append(getNamespaceDeclarations());
//
// String str=("SELECT ?serviceID from <"+graph+"> "
// +"WHERE "
// +"{"
// +"?serviceID <http://openiot.eu/ontology/ns/serviceDescription> ?desc FILTER regex(?desc, \""
// +desc+ "\" ) . "
// +"}");
//
// update.append(str);
// return update.toString();
// }
// public static String selectSrvcByQString(String qString)
// {
// StringBuilder update = new StringBuilder();
// update.append(getNamespaceDeclarations());
//
// String str=("SELECT ?serviceID from <"+graph+"> "
// +"WHERE "
// +"{"
// +"?serviceID <http://openiot.eu/ontology/ns/queryString> ?email FILTER regex(?email, \""
// +qString+ "\" ) . "
// +"}");
//
// update.append(str);
// return update.toString();
// }
public static String selectSrvcByUser(String graph,OAMO oamo) {
StringBuilder update = new StringBuilder();
update.append(getNamespaceDeclarations());
String str = ("SELECT ?serviceID ?srvcName ?srvcDesc ?srvcQstring ?oamo from <" + graph + "> "
+ "WHERE " + "{" + "?serviceID <http://openiot.eu/ontology/ns/oamo> ?oamo . "
+ "?serviceID <http://openiot.eu/ontology/ns/serviceName> ?srvcName . "
+ "?serviceID <http://openiot.eu/ontology/ns/serviceDescription> ?srvcDesc . "
+ "?serviceID <http://openiot.eu/ontology/ns/query> ?srvcQstring . "
+ "?serviceID <http://openiot.eu/ontology/ns/oamo> <" + oamo.getId() + "> . " + "}");
update.append(str);
return update.toString();
}
// public static String selectSrvcBySrvcStatus(ArrayList<ServiceStatus>
// serviceStatusList)
// {
// StringBuilder update = new StringBuilder();
// update.append(getNamespaceDeclarations());
//
// update.append("SELECT ?serviceID from <"+graph+"> "
// +"WHERE "
// +"{");
// for(int i=0; i<serviceStatusList.size(); i++)
// {
// update.append("?serviceID <http://openiot.eu/ontology/ns/serviceStatus> <"+serviceStatusList.get(i).getId()+"> ) . ");
// }
// update.append("}");
//
// return update.toString();
// }
}// class
final static Logger logger = LoggerFactory.getLogger(Service.class);
private LSMSchema myOnt;
private LSMSchema ontInstance;
private String graph;
private LSMTripleStore lsmStore;
private Individual serviceClassIdv;
private OntClass ontClsServiceClass;
private OntProperty ontPserviceName;
private OntProperty ontPserviceDescription;
// private OntProperty lExecuted;
private OntProperty ontPquery;
private OntProperty ontPserviceStatus;
private OntProperty ontPoamo;
private OntProperty ontPwidgePres;
private String id;
private String name;
private String description;
// private String lastExecuted;
private List<Query> queryString = new ArrayList<Query>();
private List<ServiceStatus> serviceStatusList = new ArrayList<ServiceStatus>();
private OAMO oamo;
private List<WidgetPresentation> widgetPresList = new ArrayList<WidgetPresentation>();
public Service() {
}
public Service(LSMSchema myOnt, LSMSchema ontInstance, String graph, LSMTripleStore lsmStore) {
this.myOnt = myOnt;
this.ontInstance = ontInstance;
this.graph = graph;
this.lsmStore = lsmStore;
initOnt_Service();
// createClassIdv();
}
public Service(String classIdvURL, LSMSchema myOnt, LSMSchema ontInstance, String graph,
LSMTripleStore lsmStore) {
this.myOnt = myOnt;
this.ontInstance = ontInstance;
this.graph = graph;
this.lsmStore = lsmStore;
this.id = classIdvURL;
initOnt_Service();
// createClassIdv();
}
private void initOnt_Service() {
ontClsServiceClass = myOnt.getClass("http://openiot.eu/ontology/ns/Service");
ontPserviceName = myOnt.createProperty("http://openiot.eu/ontology/ns/serviceName");
ontPserviceDescription = myOnt.createProperty("http://openiot.eu/ontology/ns/serviceDescription");
// lExecuted =
// myOnt.getProperty("http://openiot.eu/ontology/ns/lastExecuted");
ontPquery = myOnt.createProperty("http://openiot.eu/ontology/ns/query");
ontPserviceStatus = myOnt.getProperty("http://openiot.eu/ontology/ns/serviceStatus");
ontPoamo = myOnt.createProperty("http://openiot.eu/ontology/ns/oamo");
ontPwidgePres = myOnt.createProperty("http://openiot.eu/ontology/ns/widgetPres");
}
public void createClassIdv() {
if (id == null)
serviceClassIdv = ontInstance.createIndividual(ontClsServiceClass);
else
serviceClassIdv = ontInstance.createIndividual(id, ontClsServiceClass);
}
public void createPserviceName() {
if (name != null)
serviceClassIdv.setPropertyValue(ontPserviceName, ontInstance.getBase().createTypedLiteral(name));
}
public void createPserviceDescription() {
if (description != null)
serviceClassIdv.setPropertyValue(ontPserviceDescription, ontInstance.getBase()
.createTypedLiteral(description));
}
public void createPqString() {
for (int i = 0; i < queryString.size(); i++) {
// serviceClassIdv.setPropertyValue(ontPqString,
// ontInstance.getBase().createTypedLiteral(queryString));
serviceClassIdv.addProperty(ontPquery, queryString.get(i).getClassIndividual());
}
}
public void createPOAMO() {
if (oamo != null)
serviceClassIdv.addProperty(ontPoamo, oamo.getClassIndividual());
}
public void createPserviceStatus() {
for (int i = 0; i < serviceStatusList.size(); i++) {
serviceClassIdv.addProperty(ontPserviceStatus, serviceStatusList.get(i).getClassIndividual());
}
}
public void createPwidgetPres() {
for (int i = 0; i < widgetPresList.size(); i++) {
serviceClassIdv.addProperty(ontPwidgePres, widgetPresList.get(i).getClassIndividual());
}
}
public void createOnt_Service() {
createClassIdv();
createPserviceName();
createPserviceDescription();
// serviceClassIdv.setPropertyValue(lExecuted,
// ontInstance.getBase().createTypedLiteral(lastExecuted));
createPqString();
createPOAMO();
createPserviceStatus();
createPwidgetPres();
}
// //
public LSMSchema getOnt() {
return myOnt;
}
public LSMSchema getOntInstance() {
return ontInstance;
}
public Individual getClassIndividual() {
return serviceClassIdv;
}
// //
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
// public String getLastExecuted()
// {
// return lastExecuted;
// }
// public void setLastExecuted(String lastExecuted)
// {
// this.lastExecuted = lastExecuted;
// }
public List<Query> getQueryString() {
return queryString;
}
public void setQueryString(List<Query> queryString) {
this.queryString = queryString;
}
public void addQueryString(Query queryString) {
this.queryString.add(queryString);
}
public List<ServiceStatus> getServiceStatusList() {
return serviceStatusList;
}
public void setServiceStatus(List<ServiceStatus> serviceStatusList) {
this.serviceStatusList = serviceStatusList;
}
public void addServiceStatus(ServiceStatus serviceStatus) {
this.serviceStatusList.add(serviceStatus);
}
public OAMO getOAMO() {
return oamo;
}
public void setOAMO(OAMO oamo) {
this.oamo = oamo;
}
public List<WidgetPresentation> getWidgetPresList() {
return widgetPresList;
}
public void setWidgetPresList(List<WidgetPresentation> widgetPresList) {
this.widgetPresList = widgetPresList;
}
public void addWidgetPresentation(WidgetPresentation widgetPres) {
this.widgetPresList.add(widgetPres);
}
}// class