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.Date; 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 ServiceStatus { public static class Queries { public static ArrayList<ServiceStatus> parseService(TupleQueryResult qres) { ArrayList<ServiceStatus> serviceStatusList = new ArrayList<ServiceStatus>(); try { while (qres.hasNext()) { BindingSet b = qres.next(); Set names = b.getBindingNames(); ServiceStatus srvcStatus = new ServiceStatus(); for (Object n : names) { if (((String) n).equalsIgnoreCase("srvcStatusID")) { String str = (b.getValue((String) n) == null) ? null : b.getValue((String) n) .stringValue(); srvcStatus.setId(str); logger.debug("srvcStatus id: " + srvcStatus.getId() + " "); } else if (((String) n).equalsIgnoreCase("srvcStatusTime")) { String str = (b.getValue((String) n) == null) ? null : b.getValue((String) n) .stringValue(); srvcStatus.setTime(str); logger.debug("srvcStatusTime : " + srvcStatus.getTime() + " "); } else if (((String) n).equalsIgnoreCase("srvcStatusStatus")) { String str = (b.getValue((String) n) == null) ? null : b.getValue((String) n) .stringValue(); srvcStatus.setStatus(ServiceStatus.State.toEnum(str)); logger.debug("srvcStatusStatus : " + srvcStatus.getStatus().getCode() + " "); } else if (((String) n).equalsIgnoreCase("srvcStatusOf")) { String str = (b.getValue((String) n) == null) ? null : b.getValue((String) n) .stringValue(); Service srvc = new Service(); srvc.setId(str); srvcStatus.setServiceOf(srvc); logger.debug("srvcStatusOf : " + srvcStatus.getServiceOf().getId() + " "); } } serviceStatusList.add(srvcStatus); }// while return serviceStatusList; } 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 selectAllSrvcStatus()//check it!!! // { // StringBuilder update = new StringBuilder(); // update.append(getNamespaceDeclarations()); // // String str=("SELECT ?srvcStatusID from <"+graph+"> " // +"WHERE " // +"{" // // +"?srvcStatusID rdf:type <"+ServiceStatus.State.INITIALIZING+"> . " // +"?srvcStatusID rdf:type <"+ServiceStatus.State.INITIALIZING+"> . " // +"?srvcStatusID rdf:type <"+ServiceStatus.State.INITIALIZING+"> . " // +"?srvcStatusID rdf:type <"+ServiceStatus.State.INITIALIZING+"> . " // +"}"); // // update.append(str); // return update.toString(); // } public static String selectAllSrvcStatusByStatus(String graph,ServiceStatus.State status) { StringBuilder update = new StringBuilder(); update.append(getNamespaceDeclarations()); String str = ("SELECT ?srvcStatusID from <" + graph + "> " + "WHERE " + "{" + "?srvcStatusID rdf:type <" + status.getCode() + "> . " + "}"); update.append(str); return update.toString(); } public static String selectSrvcStatusByStatuses(String graph,List<ServiceStatus.State> statusList) { StringBuilder update = new StringBuilder(); update.append(getNamespaceDeclarations()); update.append("SELECT ?srvcStatusID from <" + graph + "> " + "WHERE " + "{"); for (int i = 0; i < statusList.size(); i++) { update.append("?srvcStatusID rdf:type <" + statusList.get(i).getCode() + "> . "); } update.append("}"); return update.toString(); } public static String selectSrvcStatusByTime(String graph,String time)// check it { StringBuilder update = new StringBuilder(); update.append(getNamespaceDeclarations()); String str = ("SELECT ?srvcStatusID from <" + graph + "> " + "WHERE " + "{" + "?srvcStatusID <http://openiot.eu/ontology/ns/serviceStatusTime> ?desc FILTER regex(?desc, \"" + time + "\" ) . " + "}"); update.append(str); return update.toString(); } public static String selectSrvcStatusByService(String graph,Service service) { StringBuilder update = new StringBuilder(); update.append(getNamespaceDeclarations()); String str = ("SELECT ?srvcStatusID ?srvcStatusTime ?srvcStatusStatus ?srvcStatusOf <" + graph + "> " + "WHERE " + "{" + "?srvcStatusID <http://openiot.eu/ontology/ns/serviceStatusOf> ?srvcStatusOf . " + "?srvcStatusID rdf:type ?srvcStatusStatus . " + "?srvcStatusID <http://openiot.eu/ontology/ns/serviceStatusTime> ?srvcStatusTime . " + "?srvcStatusID <http://openiot.eu/ontology/ns/serviceStatusOf> <" + service.getId() + "> . " + "}"); update.append(str); return update.toString(); } }// class final static Logger logger = LoggerFactory.getLogger(ServiceStatus.class); private LSMSchema myOnt; private LSMSchema ontInstance; private String graph; private LSMTripleStore lsmStore; private Individual serviceStatusClassIdv; private OntClass ontClsserviceStatusClass; private OntProperty ontPsrvcStatusTime; private OntProperty ontPsrvcStatusOf; private String id; private String serviceStatusTime; private State status; private Service service; public ServiceStatus() { } public ServiceStatus(LSMSchema myOnt, LSMSchema ontInstance, String graph, LSMTripleStore lsmStore, State status)// String id,State status) { this.myOnt = myOnt; this.ontInstance = ontInstance; this.graph = graph; this.lsmStore = lsmStore; this.status = status; initOnt_ServiceStatus(); // createClassIdv(); } public ServiceStatus(String classIdvURL, LSMSchema myOnt, LSMSchema ontInstance, String graph, LSMTripleStore lsmStore, State status)// String id,State status) { this.myOnt = myOnt; this.ontInstance = ontInstance; this.graph = graph; this.lsmStore = lsmStore; this.status = status; this.id = classIdvURL; initOnt_ServiceStatus(); // createClassIdv(); } public enum State { INITIALIZING("http://openiot.eu/ontology/ns/Initializing"), ENABLED( "http://openiot.eu/ontology/ns/Enabled"), ERROR("http://openiot.eu/ontology/ns/Error"), IN_PROGRESS( "http://openiot.eu/ontology/ns/Inprogress"), SUSPENDED( "http://openiot.eu/ontology/ns/Suspended"), UNSATISFIED( "http://openiot.eu/ontology/ns/Unsatisfied"); private String code; // constructor private State(String c) { code = c; } public String getCode() { return code; } public static State toEnum(String str) { if (str.equals(State.INITIALIZING.getCode())) return State.INITIALIZING; else if (str.equals(State.ENABLED.getCode())) return State.ENABLED; else if (str.equals(State.ERROR.getCode())) return State.ERROR; else if (str.equals(State.IN_PROGRESS.getCode())) return State.IN_PROGRESS; else if (str.equals(State.SUSPENDED.getCode())) return State.SUSPENDED; else if (str.equals(State.UNSATISFIED.getCode())) return State.UNSATISFIED; else return null; } }// enum private void initOnt_ServiceStatus() { // serviceStatusClass = // myOnt.getClass("http://openiot.eu/ontology/ns/ServiceStatus"); // serviceStatusClass = // myOnt.getClass("http://openiot.eu/ontology/ns/Initializing"); ontClsserviceStatusClass = myOnt.createClass(status.getCode()); ontPsrvcStatusTime = myOnt.createProperty("http://openiot.eu/ontology/ns/serviceStatusTime"); ontPsrvcStatusOf = myOnt.createProperty("http://openiot.eu/ontology/ns/serviceStatusOf"); } public void createClassIdv() { if (id == null) serviceStatusClassIdv = ontInstance.createIndividual(ontClsserviceStatusClass); else serviceStatusClassIdv = ontInstance.createIndividual(id, ontClsserviceStatusClass); } // public void createOnt_ServiceStatus() // { // serviceStatusClassIdv = // ontInstance.createIndividual(status.getCode()+"#"+this.id, // serviceStatusClass); // serviceStatusClassIdv.setPropertyValue(srvcStatusTime, // ontInstance.getBase().createTypedLiteral(serviceStatusTime)); // serviceStatusClassIdv.addProperty(srvcOf, // serviceOf.getClassIndividual()); // } // public void createOnt_ServiceStatus2() // { // //serviceStatusClassIdv.addRDFType(myOnt.getIndividual(status.getCode())); // serviceStatusClassIdv.setPropertyValue(ontPsrvcStatusTime, // ontInstance.getBase().createTypedLiteral(serviceStatusTime)); // serviceStatusClassIdv.addProperty(ontPsrvcStatusOf, // service.getClassIndividual()); // } public void createPsrvcStatTime() { if (serviceStatusTime != null) serviceStatusClassIdv.setPropertyValue(ontPsrvcStatusTime, ontInstance.getBase() .createTypedLiteral(serviceStatusTime)); } public void createPsrvcStatOf() { if (service != null) serviceStatusClassIdv.addProperty(ontPsrvcStatusOf, service.getClassIndividual()); } // /// public LSMSchema getOnt() { return myOnt; } public LSMSchema getOntInstance() { return ontInstance; } public Individual getClassIndividual() { return serviceStatusClassIdv; } // /// public String getId() { return id; } public void setId(String id) { this.id = id; } public String getTime() { return serviceStatusTime; } public void setTime(String serviceStatusTime) { this.serviceStatusTime = serviceStatusTime; } public Service getServiceOf() { return service; } public void setServiceOf(Service serviceOf) { this.service = serviceOf; } public State getStatus() { return status; } public void setStatus(State status) { this.status = status; } }// class