package com.lsm.testschema.model;
import java.util.ArrayList;
import java.util.List;
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.OntProperty;
import com.hp.hpl.jena.vocabulary.RDF;
import com.hp.hpl.jena.vocabulary.RDFS;
import com.hp.hpl.jena.vocabulary.XSD;
import com.lsm.testschema.model.ServiceStatus.State;
import lsm.schema.LSMSchema;
import lsm.server.LSMTripleStore;
public class WidgetAvailable
{
public static class Queries
{
public static ArrayList<WidgetAvailable> parseService(TupleQueryResult qres)
{
ArrayList<WidgetAvailable> widgetList = new ArrayList<WidgetAvailable>();
try
{
while (qres.hasNext())
{
BindingSet b = qres.next();
Set names = b.getBindingNames();
WidgetAvailable widget = new WidgetAvailable();
for (Object n : names)
{
if(((String) n).equalsIgnoreCase("widgetID"))
{
String str = (b.getValue((String) n)==null) ? null : b.getValue((String) n).stringValue();
widget.setId(str);
System.out.print("widget id: "+widget.getId()+" ");
}
else if(((String) n).equalsIgnoreCase("widgetDesc"))
{
String str = (b.getValue((String) n)==null) ? null : b.getValue((String) n).stringValue();
widget.setDescription(str);
System.out.print("widgetDesc: "+widget.getDescription()+" ");
}
else if(((String) n).equalsIgnoreCase("widgetName"))
{
String str = (b.getValue((String) n)==null) ? null : b.getValue((String) n).stringValue();
widget.setName(str);
System.out.print("widgetName: "+widget.getName()+" ");
}
else if(((String) n).equalsIgnoreCase("widgetLocation"))
{
String str = (b.getValue((String) n)==null) ? null : b.getValue((String) n).stringValue();
widget.setLocationURL(str);
System.out.print("widgetLocation: "+widget.getLocationURL()+" ");
}
else if(((String) n).equalsIgnoreCase("widgetType"))
{
String str = (b.getValue((String) n)==null) ? null : b.getValue((String) n).stringValue();
widget.setType(str);
System.out.print("widgetType: "+widget.getType()+" ");
}
}
widgetList.add(widget);
}//while
return widgetList;
}
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 selectWidgetAvailAll()
{
StringBuilder update = new StringBuilder();
update.append(getNamespaceDeclarations());
String str=("SELECT ?widgetID ?widgetDesc ?widgetName ?widgetLocation ?widgetType from <"+graph+"> "
+"WHERE "
+"{"
+"?widgetID <http://openiot.eu/ontology/ns/widgetType> ?widgetType . "
+"?widgetID <http://openiot.eu/ontology/ns/widgetDescription> ?widgetDesc . "
+"?widgetID <http://openiot.eu/ontology/ns/widgetName> ?widgetName . "
+"?widgetID <http://openiot.eu/ontology/ns/widgetLocation> ?widgetLocation . "
+"?widgetID rdf:type <http://openiot.eu/ontology/ns/Widget> . "
+"}");
update.append(str);
return update.toString();
}
public static String selectWidgetByName(String widgetName)
{
StringBuilder update = new StringBuilder();
update.append(getNamespaceDeclarations());
String str=("SELECT ?widgetID from <"+graph+"> "
+"WHERE "
+"{"
+"?widgetID <http://openiot.eu/ontology/ns/widgetName> ?name FILTER regex(?name, \"" +widgetName+ "\" ) . "
+"}");
update.append(str);
return update.toString();
}
public static String selectWidgetByDescription(String desc)
{
StringBuilder update = new StringBuilder();
update.append(getNamespaceDeclarations());
String str=("SELECT ?widgetID from <"+graph+"> "
+"WHERE "
+"{"
+"?widgetID <http://openiot.eu/ontology/ns/widgetDescription> ?desc FILTER regex(?desc, \"" +desc+ "\" ) . "
+"}");
update.append(str);
return update.toString();
}
public static String selectWidgetByLocation(String url)
{
StringBuilder update = new StringBuilder();
update.append(getNamespaceDeclarations());
String str=("SELECT ?widgetID from <"+graph+"> "
+"WHERE "
+"{"
+"?widgetID <http://openiot.eu/ontology/ns/widgetLocation> ?loc FILTER regex(?loc, \"" +url+ "\" ) . "
+"}");
update.append(str);
return update.toString();
}
// public static String selectWidgetBySrvc(Service service)//query returns list of widgets
// {
// StringBuilder update = new StringBuilder();
// update.append(getNamespaceDeclarations());
//
// String str=("SELECT ?widgetID from <"+graph+"> "
// +"WHERE "
// +"{"
// +"?widgetID <http://openiot.eu/ontology/ns/widgetOf> <"+service.getClassIndividual()+"> . "
// +"}");
//
// update.append(str);
// return update.toString();
// }
}//class
private LSMSchema myOnt;
private LSMSchema ontInstance;
private String graph;
private LSMTripleStore lsmStore;
private Individual widgetClassIdv;
private OntClass ontClsWidgetClass;
private OntProperty ontPwidgetDescription;
private OntProperty ontPwidgetName;
private OntProperty ontPwidgetLocation;
private OntProperty ontPwidgeType;
private OntProperty ontPwidgetOf;
////
////
private String id;
private String description;
private String name;
private String locationURL;
private String type;
// private Type type;
private WidgetPresentation widgetPre;
public WidgetAvailable()
{
}
public WidgetAvailable(LSMSchema myOnt,LSMSchema ontInstance,String graph,LSMTripleStore lsmStore)//,String type)//Type type)
{
this.myOnt=myOnt;
this.ontInstance=ontInstance;
this.graph = graph;
this.lsmStore=lsmStore;
this.type=type;
initOnt_Widget();
//createClassIdv();
}
public WidgetAvailable(String classIdvURL,LSMSchema myOnt,LSMSchema ontInstance,String graph,LSMTripleStore lsmStore)//,String type)//Type type)
{
this.myOnt=myOnt;
this.ontInstance=ontInstance;
this.graph = graph;
this.lsmStore=lsmStore;
this.type=type;
id=classIdvURL;
initOnt_Widget();
//createClassIdv();
}
// public enum Type
// {
// GAUGE("http://openiot.eu/ontology/ns/Gauge"),
// CHART("http://openiot.eu/ontology/ns/Chart"),
// BAR_CHART("http://openiot.eu/ontology/ns/Barchart"),
// PROGRESS_BAR("http://openiot.eu/ontology/ns/Progressbar");
//
// private String code;
//
// //constructor
// private Type(String c){
// code = c;
// }
//
// public String getCode() {
// return code;
// }
//
// public static Type toEnum(String str)
// {
// if(str.equals(Type.GAUGE.getCode()))
// return Type.GAUGE;
// else if(str.equals(Type.CHART.getCode()))
// return Type.CHART;
// else if(str.equals(Type.BAR_CHART.getCode()))
// return Type.BAR_CHART;
// else if(str.equals(Type.PROGRESS_BAR.getCode()))
// return Type.PROGRESS_BAR;
// else
// return null;
// }
// }//enum
private void initOnt_Widget()
{
ontClsWidgetClass = myOnt.createClass("http://openiot.eu/ontology/ns/Widget");
ontPwidgeType = myOnt.createProperty("http://openiot.eu/ontology/ns/widgetType");//RDF.type.getURI());
ontPwidgetDescription = myOnt.createProperty("http://openiot.eu/ontology/ns/widgetDescription");
ontPwidgetName = myOnt.createProperty("http://openiot.eu/ontology/ns/widgetName");
ontPwidgetLocation = myOnt.createProperty("http://openiot.eu/ontology/ns/widgetLocation");
ontPwidgetOf = myOnt.createProperty("http://openiot.eu/ontology/ns/widgetOf");
}
public void createClassIdv()
{
if(id==null)
widgetClassIdv = ontInstance.createIndividual(ontClsWidgetClass);
else
widgetClassIdv = ontInstance.createIndividual(id,ontClsWidgetClass);
}
public void createPtype()
{
if(type!=null)
widgetClassIdv.setPropertyValue(ontPwidgeType,ontInstance.getBase().createTypedLiteral(type));
}
public void createPdescription()
{
if(description!=null)
widgetClassIdv.setPropertyValue(ontPwidgetDescription, ontInstance.getBase().createTypedLiteral(description));
}
public void createPname()
{
if(name!=null)
widgetClassIdv.setPropertyValue(ontPwidgetName, ontInstance.getBase().createTypedLiteral(name));
}
public void createPlocationURL()
{
if(locationURL!=null)
widgetClassIdv.setPropertyValue(ontPwidgetLocation, ontInstance.getBase().createTypedLiteral(locationURL));
}
public void createPWidgetOf()
{
if(widgetPre!=null)
widgetClassIdv.addProperty(ontPwidgetOf, widgetPre.getClassIndividual());
}
////
public LSMSchema getOnt()
{
return myOnt;
}
public LSMSchema getOntInstance()
{
return ontInstance;
}
public Individual getClassIndividual()
{
return widgetClassIdv;
}
////
public String getId() {
return id;
}
public void setId(String id) {
this.id=id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLocationURL() {
return locationURL;
}
public void setLocationURL(String locationURL) {
this.locationURL = locationURL;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public WidgetPresentation getWidgetPre() {
return widgetPre;
}
public void setWidgetPre(WidgetPresentation widgetPre) {
this.widgetPre = widgetPre;
}
}//class