package kr.ac.kaist.resl.lilliput.rest;
import java.io.IOException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import org.bson.BasicBSONObject;
import org.bson.types.BasicBSONList;
import org.bson.types.ObjectId;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
import kr.ac.kaist.resl.lilliput.util.Util;
import edu.stanford.smi.protege.exception.OntologyLoadException;
import edu.stanford.smi.protege.model.Project;
import edu.stanford.smi.protege.server.RemoteProjectManager;
import edu.stanford.smi.protegex.owl.model.OWLModel;
import edu.stanford.smi.protegex.owl.model.OWLNamedClass;
import edu.stanford.smi.protegex.owl.model.OWLObjectProperty;
import edu.stanford.smi.protegex.owl.model.RDFIndividual;
import edu.stanford.smi.protegex.owl.model.query.QueryResults;
/**
* Servlet implementation class RestServices
*/
public class RestServices extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public RestServices() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String requestCode = (String)request.getParameter("code");
if( requestCode.equals("0" ))
{
//0 : user sparql
String query = (String)request.getParameter("SparqlQuery");
String queryResultJson = useSPARQL(query);
request.setAttribute("result", queryResultJson);
RequestDispatcher dispatcher = request.getRequestDispatcher("ServiceResult.jsp");
dispatcher.forward(request, response);
}
else if( requestCode.equals("1"))
{
//1: login 1/login/pw
//epc password
String epc = (String)request.getParameter("epc");
String password = (String)request.getParameter("password");
String result = logIn(epc, password);
request.setAttribute("result", result);
RequestDispatcher dispatcher = request.getRequestDispatcher("ServiceResult.jsp");
dispatcher.forward(request, response);
}
else if( requestCode.equals("2"))
{//2: logout 1/logout
request.setAttribute("result", "logout");
RequestDispatcher dispatcher = request.getRequestDispatcher("ServiceResult.jsp");
dispatcher.forward(request, response);
}
else if( requestCode.equals("3"))
{//3: Get all available Relationships
String result = getAvailableSocialRelationships();
request.setAttribute("result", result);
RequestDispatcher dispatcher = request.getRequestDispatcher("ServiceResult.jsp");
dispatcher.forward(request, response);
}
else if( requestCode.equals("4"))
{//4: get all individuals 1/allIndividuals
String epc = (String)request.getParameter("epc");
String result = getRelatedIndividuals(epc);
request.setAttribute("result", result);
RequestDispatcher dispatcher = request.getRequestDispatcher("ServiceResult.jsp");
dispatcher.forward(request, response);
}
else if( requestCode.equals("5"))
{//5: get all EPCS 1/allEPCs
String epc = (String)request.getParameter("epc");
String result = getRelatedEPCs(epc);
request.setAttribute("result", result);
RequestDispatcher dispatcher = request.getRequestDispatcher("ServiceResult.jsp");
dispatcher.forward(request, response);
}
else if( requestCode.equals("6"))
{//6: get my information 1/informations
String epc = (String)request.getParameter("epc");
String result = getMyInformation(epc);
request.setAttribute("result", result);
RequestDispatcher dispatcher = request.getRequestDispatcher("ServiceResult.jsp");
dispatcher.forward(request, response);
}
else if( requestCode.equals("7"))
{//7: get all sociallist and informations ( type ac social relationships ) 1/3
String source = (String)request.getParameter("sepc");
String dest = (String)request.getParameter("oepc");
String result = getSocialListAndInformation(source, dest);
request.setAttribute("result", result);
RequestDispatcher dispatcher = request.getRequestDispatcher("ServiceResult.jsp");
dispatcher.forward(request, response);
}
else if( requestCode.equals("8"))
{//8: on off the social relationships between them 1/3/relationshipname
try {
String source = (String)request.getParameter("sepc");
String dest = (String)request.getParameter("oepc");
String relationship = (String)request.getParameter("relationship");
String result;
result = toggleSocialRelationship(source, dest, relationship);
request.setAttribute("result", result);
RequestDispatcher dispatcher = request.getRequestDispatcher("ServiceResult.jsp");
dispatcher.forward(request, response);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
request.setAttribute("result", e.toString());
RequestDispatcher dispatcher = request.getRequestDispatcher("ServiceResult.jsp");
dispatcher.forward(request, response);
}
}
else if( requestCode.equals("9"))
{//9: get the place events 4/events
//epc = placeEpc
String epc = (String)request.getParameter("epc");
String result = getPlaceEvents(epc);
request.setAttribute("result", result);
RequestDispatcher dispatcher = request.getRequestDispatcher("ServiceResult.jsp");
dispatcher.forward(request, response);
}
else if( requestCode.equals("10"))
{//10: get the newest events 4/eventOne
//9: get the place events 4/events
//epc = placeEpc
String epc = (String)request.getParameter("epc");
String result = getPlaceNewestEvents(epc);
request.setAttribute("result", result);
RequestDispatcher dispatcher = request.getRequestDispatcher("ServiceResult.jsp");
dispatcher.forward(request, response);
}
else if( requestCode.equals("11"))
{//10: get the Presence List 4/presenceList
String epc = (String)request.getParameter("epc");
String result = getPresenceList(epc);
request.setAttribute("result", result);
RequestDispatcher dispatcher = request.getRequestDispatcher("ServiceResult.jsp");
dispatcher.forward(request, response);
}
}
private String getPresenceList(String epc) {
// TODO Auto-generated method stub
//Save Space to Ontology if it is not saved
JSONArray resultArr;
try {
resultArr = getIdentifiedObjects(epc);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
resultArr = getIdentifiedObjects(epc);
return resultArr.toString();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";
}
@SuppressWarnings("unchecked")
public JSONArray getIdentifiedObjects(String epc) throws Exception
{
RemoteProjectManager rpm = RemoteProjectManager.getInstance();
Project p = rpm.getProject("localhost:5100", "Lilliput", "1234", "IoTSocialGraph", true);
OWLModel owlModel = (OWLModel)p.getKnowledgeBase();
RDFIndividual indoorInd = owlModel.getRDFIndividual(epc);
if( indoorInd == null )
{
return null;
}
JSONArray resultJson = new JSONArray();
OWLObjectProperty isIdentifying = owlModel.getOWLObjectProperty("isIdentifying");
Collection<RDFIndividual> idenCol = indoorInd.getPropertyValuesAs(isIdentifying, RDFIndividual.class);
Iterator<RDFIndividual> idenIter = idenCol.iterator();
while( idenIter.hasNext())
{
JSONObject resultObj = new JSONObject();
RDFIndividual identified = idenIter.next();
resultObj.put("epc", identified.getBrowserText());
resultJson.put(resultObj);
}
p.dispose();
return resultJson;
}
//0: use sparql
@SuppressWarnings({ "unchecked", "rawtypes" })
public String useSPARQL(String query)
{
try {
//Save Space to Ontology if it is not saved
RemoteProjectManager rpm = RemoteProjectManager.getInstance();
Project p = rpm.getProject("localhost:5100", "Lilliput", "1234", "IoTSocialGraph", true);
OWLModel owlModel = (OWLModel)p.getKnowledgeBase();
QueryResults queryResults = owlModel.executeSPARQLQuery(query);
List<String> x = queryResults.getVariables();
JSONArray resultsJson = new JSONArray();
while( queryResults.hasNext())
{
Map y = queryResults.next();
JSONObject resultJson = new JSONObject();
for(int i = 0 ; i < x.size() ; i++ )
{
String vars = x.get(i);
String results = y.get(vars).toString();
results = Util.individualToBrowserText(results);
resultJson.put(vars, results);
}
resultsJson.put(resultJson);
}
p.dispose();
return resultsJson.toString();
//PREFIX iot: <http://www.owl-ontologies.com/Ontology1334066780.owl#>
// SELECT ?subject ?object
// WHERE { ?subject iot:hasSpaceEvent ?object }
}
catch (OntologyLoadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//1: login 1/login/pw
public String logIn(String epc, String password)
{
try {
Mongo m = new Mongo("143.248.106.26", 27017);
System.out.println("connect db");
DB db = m.getDB("Lilliput");
System.out.println("getting db");
DBCollection collection = db.getCollection("EPCStorage");
System.out.println("getting collection");
DBObject query = new BasicDBObject();
query.put("epc", epc);
DBObject queriedObject = collection.findOne(query);
if( !((String)queriedObject.get("password")).equals(password) )
{//password�� Ʋ����
m.close();
return "login failed : invalid password";
}
else
{
m.close();
return "success";
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MongoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//2: logout 1/logout
public String logOut(String epc)
{
return null;
}
//3: Get all available Relationships
@SuppressWarnings({ "unchecked", "rawtypes" })
public String getAvailableSocialRelationships()
{
try {
//Save Space to Ontology if it is not saved
RemoteProjectManager rpm = RemoteProjectManager.getInstance();
Project p = rpm.getProject("localhost:5100", "Lilliput", "1234", "IoTSocialGraph", true);
OWLModel owlModel = (OWLModel)p.getKnowledgeBase();
String query = "PREFIX iot: <http://www.owl-ontologies.com/Ontology1334066780.owl#> SELECT ?s WHERE { ?s rdfs:subPropertyOf iot:IoTSocialRelationship }";
QueryResults queryResults = owlModel.executeSPARQLQuery(query);
List<String> x = queryResults.getVariables();
JSONArray resultsJson = new JSONArray();
while( queryResults.hasNext())
{
Map y = queryResults.next();
JSONObject resultJson = new JSONObject();
for(int i = 0 ; i < x.size() ; i++ )
{
String vars = x.get(i);
String results = y.get(vars).toString();
results = Util.individualToBrowserText(results);
resultJson.put(vars, results);
}
resultsJson.put(resultJson);
}
p.dispose();
return resultsJson.toString();
//PREFIX iot: <http://www.owl-ontologies.com/Ontology1334066780.owl#>
//SELECT ?subject ?object
//WHERE { ?subject iot:hasSpaceEvent ?object }
}
catch (OntologyLoadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//3#: Get all available Relationships
@SuppressWarnings({ "unchecked", "rawtypes" })
public JSONArray getAvailableSocialRelationshipsAsJSONArray()
{
try {
//Save Space to Ontology if it is not saved
RemoteProjectManager rpm = RemoteProjectManager.getInstance();
Project p = rpm.getProject("localhost:5100", "Lilliput", "1234", "IoTSocialGraph", true);
OWLModel owlModel = (OWLModel)p.getKnowledgeBase();
String query = "PREFIX iot: <http://www.owl-ontologies.com/Ontology1334066780.owl#> SELECT ?s WHERE { ?s rdfs:subPropertyOf iot:IoTSocialRelationship }";
QueryResults queryResults = owlModel.executeSPARQLQuery(query);
List<String> x = queryResults.getVariables();
JSONArray resultsJson = new JSONArray();
while( queryResults.hasNext())
{
Map y = queryResults.next();
JSONObject resultJson = new JSONObject();
for(int i = 0 ; i < x.size() ; i++ )
{
String vars = x.get(i);
String results = y.get(vars).toString();
results = Util.individualToBrowserText(results);
resultJson.put(vars, results);
}
resultsJson.put(resultJson);
}
p.dispose();
return resultsJson;
//PREFIX iot: <http://www.owl-ontologies.com/Ontology1334066780.owl#>
// SELECT ?subject ?object
// WHERE { ?subject iot:hasSpaceEvent ?object }
}
catch (OntologyLoadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//4: get all individuals 1/allIndividuals
@SuppressWarnings("rawtypes")
public String getRelatedIndividuals(String epc)
{
try {
String type = null;
String ac = "pub";
//Save Space to Ontology if it is not saved
RemoteProjectManager rpm = RemoteProjectManager.getInstance();
Project p = rpm.getProject("localhost:5100", "Lilliput", "1234", "IoTSocialGraph", true);
OWLModel owlModel = (OWLModel)p.getKnowledgeBase();
RDFIndividual humanInd;
RDFIndividual objectInd;
RDFIndividual spaceInd;
String[] epcSplit = epc.split("\\.");
JSONArray resultArray = new JSONArray();
JSONObject resultObject;
JSONArray allProp = getAvailableSocialRelationshipsAsJSONArray();
if(epcSplit[1].equals("1"))
{
type = "Human";
humanInd = owlModel.getOWLIndividual(epc);
if( humanInd == null )
{
return "No Individual from EPC";
}
for(int i = 0 ; i < allProp.length() ; i ++ )
{
resultObject = new JSONObject();
JSONObject propJson = (JSONObject)allProp.get(i);
String propStr = propJson.getString("s");
OWLObjectProperty prop = owlModel.getOWLObjectProperty(propStr);
Collection destCollection = humanInd.getPropertyValues(prop);
Iterator destIter = destCollection.iterator();
while(destIter.hasNext())
{
RDFIndividual destInd = (RDFIndividual)destIter.next();
resultObject.put("epc",Util.individualToBrowserText(destInd.getBrowserText()));
resultObject.put("type", type);
resultObject.put("ac", ac);
resultObject.put("SocialRelationship", prop.getBrowserText());
resultArray.put(resultObject);
}
}
}
else if(epcSplit[1].equals("3"))
{
type = "Object";
objectInd = owlModel.getOWLIndividual(epc);
if( objectInd == null )
{
return "No Individual from EPC";
}
for(int i = 0 ; i < allProp.length() ; i ++ )
{
resultObject = new JSONObject();
JSONObject propJson = (JSONObject)allProp.get(i);
OWLObjectProperty prop = owlModel.getOWLObjectProperty(propJson.getString("s"));
Collection destCollection = objectInd.getPropertyValues(prop);
Iterator destIter = destCollection.iterator();
while(destIter.hasNext())
{
RDFIndividual destInd = (RDFIndividual)destIter.next();
resultObject.put("epc",Util.individualToBrowserText(destInd.getBrowserText()));
resultObject.put("type", type);
resultObject.put("ac", ac);
resultObject.put("SocialRelationship", prop.getBrowserText());
resultArray.put(resultObject);
}
}
}
else if(epcSplit[1].equals("2"))
{
type = "IndoorSpace";
spaceInd = owlModel.getOWLIndividual(epc);
if( spaceInd == null )
{
return "No Individual from EPC";
}
for(int i = 0 ; i < allProp.length() ; i ++ )
{
resultObject = new JSONObject();
JSONObject propJson = (JSONObject)allProp.get(i);
OWLObjectProperty prop = owlModel.getOWLObjectProperty(propJson.getString("s"));
Collection destCollection = spaceInd.getPropertyValues(prop);
Iterator destIter = destCollection.iterator();
while(destIter.hasNext())
{
RDFIndividual destInd = (RDFIndividual)destIter.next();
resultObject.put("epc",Util.individualToBrowserText(destInd.getBrowserText()));
resultObject.put("type", type);
resultObject.put("ac", ac);
resultObject.put("SocialRelationship", prop.getBrowserText());
resultArray.put(resultObject);
}
}
}
p.dispose();
return resultArray.toString();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//5: get all EPCS 1/allEPCs
@SuppressWarnings({ "unused", "rawtypes" })
public String getRelatedEPCs(String epc)
{
try {
String type = null;
String ac = "pub";
//Save Space to Ontology if it is not saved
RemoteProjectManager rpm = RemoteProjectManager.getInstance();
Project p = rpm.getProject("localhost:5100", "Lilliput", "1234", "IoTSocialGraph", true);
OWLModel owlModel = (OWLModel)p.getKnowledgeBase();
OWLNamedClass humanClass = owlModel.getOWLNamedClass("Human");
OWLNamedClass objectClass = owlModel.getOWLNamedClass("Object");
OWLNamedClass indoorSpaceClass = owlModel.getOWLNamedClass("IndoorSpace");
RDFIndividual humanInd;
RDFIndividual objectInd;
RDFIndividual spaceInd;
String[] epcSplit = epc.split("\\.");
JSONArray resultArray = new JSONArray();
JSONObject resultObject;
JSONArray allProp = getAvailableSocialRelationshipsAsJSONArray();
if(epcSplit[1].equals("1"))
{
type = "Human";
humanInd = owlModel.getOWLIndividual(epc);
if( humanInd == null )
{
return "No Individual from EPC";
}
for(int i = 0 ; i < allProp.length() ; i ++ )
{
resultObject = new JSONObject();
JSONObject propJson = (JSONObject)allProp.get(i);
String propStr = propJson.getString("s");
OWLObjectProperty prop = owlModel.getOWLObjectProperty(propStr);
Collection destCollection = humanInd.getPropertyValues(prop);
Iterator destIter = destCollection.iterator();
while(destIter.hasNext())
{
RDFIndividual destInd = (RDFIndividual)destIter.next();
resultObject.put("epc",Util.individualToBrowserText(destInd.getBrowserText()));
resultArray.put(resultObject);
}
}
}
else if(epcSplit[1].equals("3"))
{
type = "Object";
objectInd = owlModel.getOWLIndividual(epc);
if( objectInd == null )
{
return "No Individual from EPC";
}
for(int i = 0 ; i < allProp.length() ; i ++ )
{
resultObject = new JSONObject();
JSONObject propJson = (JSONObject)allProp.get(i);
OWLObjectProperty prop = owlModel.getOWLObjectProperty(propJson.getString("s"));
Collection destCollection = objectInd.getPropertyValues(prop);
Iterator destIter = destCollection.iterator();
while(destIter.hasNext())
{
RDFIndividual destInd = (RDFIndividual)destIter.next();
resultObject.put("epc",Util.individualToBrowserText(destInd.getBrowserText()));
resultArray.put(resultObject);
}
}
}
else if(epcSplit[1].equals("2"))
{
type = "IndoorSpace";
spaceInd = owlModel.getOWLIndividual(epc);
if( spaceInd == null )
{
return "No Individual from EPC";
}
for(int i = 0 ; i < allProp.length() ; i ++ )
{
resultObject = new JSONObject();
JSONObject propJson = (JSONObject)allProp.get(i);
OWLObjectProperty prop = owlModel.getOWLObjectProperty(propJson.getString("s"));
Collection destCollection = spaceInd.getPropertyValues(prop);
Iterator destIter = destCollection.iterator();
while(destIter.hasNext())
{
RDFIndividual destInd = (RDFIndividual)destIter.next();
resultObject.put("epc",Util.individualToBrowserText(destInd.getBrowserText()));
resultArray.put(resultObject);
}
}
}
p.dispose();
return resultArray.toString();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//6: get my information 1/informations
public String getMyInformation(String epc)
{
try {
//Save Space to Ontology if it is not saved
RemoteProjectManager rpm = RemoteProjectManager.getInstance();
Project p = rpm.getProject("localhost:5100", "Lilliput", "1234", "IoTSocialGraph", true);
OWLModel owlModel = (OWLModel)p.getKnowledgeBase();
RDFIndividual humanInd;
RDFIndividual objectInd;
RDFIndividual spaceInd;
String[] epcSplit = epc.split("\\.");
OWLObjectProperty prop ;
RDFIndividual informInd = null;
String dbCollection = null;
String objectID = null;
if(epcSplit[1].equals("1"))
{
humanInd = owlModel.getOWLIndividual(epc);
prop = owlModel.getOWLObjectProperty("hasHumanInformation");
informInd = (RDFIndividual)humanInd.getPropertyValue(prop);
dbCollection = "HumanInformation";
}
else if(epcSplit[1].equals("2"))
{
spaceInd = owlModel.getOWLIndividual(epc);
prop = owlModel.getOWLObjectProperty("hasSpaceInformation");
informInd = (RDFIndividual)spaceInd.getPropertyValue(prop);
dbCollection = "SpaceInformation";
}
else if(epcSplit[1].equals("3"))
{
objectInd = owlModel.getOWLIndividual(epc);
prop = owlModel.getOWLObjectProperty("hasObjectInformation");
informInd = (RDFIndividual)objectInd.getPropertyValue(prop);
dbCollection = "ObjectInformation";
}
objectID = Util.individualToBrowserText(informInd.getBrowserText());
Mongo m = new Mongo("143.248.106.26", 27017);
System.out.println("connect db");
DB db = m.getDB("Lilliput");
System.out.println("getting db");
DBCollection collection = db.getCollection(dbCollection);
System.out.println("getting collection");
DBObject query = new BasicDBObject();
query.put("_id",new ObjectId(objectID));
DBObject queriedObject = collection.findOne(query);
p.dispose();
if( queriedObject == null )
{
return "No Result";
}
else
{
return queriedObject.toString();
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MongoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//7: get all sociallist and informations ( type ac social relationships ) 1/3
@SuppressWarnings("rawtypes")
public String getSocialListAndInformation(String sourceEpc, String targetEpc)
{
try {
//Save Space to Ontology if it is not saved
RemoteProjectManager rpm = RemoteProjectManager.getInstance();
Project p = rpm.getProject("localhost:5100", "Lilliput", "1234", "IoTSocialGraph", true);
OWLModel owlModel = (OWLModel)p.getKnowledgeBase();
RDFIndividual sourceInd = owlModel.getOWLIndividual(sourceEpc);
RDFIndividual destInd = owlModel.getOWLIndividual(targetEpc);
JSONArray allProp = getAvailableSocialRelationshipsAsJSONArray();
JSONArray results = new JSONArray();
JSONObject result;
for(int i = 0 ; i < allProp.length(); i ++ )
{
result = new JSONObject();
JSONObject propJson = (JSONObject)allProp.get(i);
String propStr = propJson.getString("s");
OWLObjectProperty prop = owlModel.getOWLObjectProperty(propStr);
Collection destCollection = sourceInd.getPropertyValues(prop);
Iterator destIter = destCollection.iterator();
while(destIter.hasNext())
{
RDFIndividual destRDF = (RDFIndividual)destIter.next();
if( destRDF.getBrowserText().equals(destInd.getBrowserText()))
{
result.put("SocialRelationship", propStr);
results.put(result);
break;
}
}
}
p.dispose();
return results.toString();
} catch (MongoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//7#: get all sociallist and informations ( type ac social relationships ) 1/3 asJSONARRAY
@SuppressWarnings("rawtypes")
public JSONArray getSocialListAndInformationAsJSONArray(String sourceEpc, String targetEpc)
{
try {
//Save Space to Ontology if it is not saved
RemoteProjectManager rpm = RemoteProjectManager.getInstance();
Project p = rpm.getProject("localhost:5100", "Lilliput", "1234", "IoTSocialGraph", true);
OWLModel owlModel = (OWLModel)p.getKnowledgeBase();
RDFIndividual sourceInd = owlModel.getOWLIndividual(sourceEpc);
RDFIndividual destInd = owlModel.getOWLIndividual(targetEpc);
JSONArray allProp = getAvailableSocialRelationshipsAsJSONArray();
JSONArray results = new JSONArray();
JSONObject result;
for(int i = 0 ; i < allProp.length(); i ++ )
{
result = new JSONObject();
JSONObject propJson = (JSONObject)allProp.get(i);
String propStr = propJson.getString("s");
OWLObjectProperty prop = owlModel.getOWLObjectProperty(propStr);
Collection destCollection = sourceInd.getPropertyValues(prop);
Iterator destIter = destCollection.iterator();
while(destIter.hasNext())
{
RDFIndividual destRDF = (RDFIndividual)destIter.next();
if( destRDF.getBrowserText().equals(destInd.getBrowserText()))
{
result.put("SocialRelationship", propStr);
results.put(result);
break;
}
}
}
p.dispose();
return results;
} catch (MongoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//8: on off the social relationships between them 1/3/relationshipname
@SuppressWarnings("rawtypes")
public String toggleSocialRelationship(String sourceEpc, String targetEpc, String socialRelationship) throws JSONException
{
try {
//Save Space to Ontology if it is not saved
RemoteProjectManager rpm = RemoteProjectManager.getInstance();
Project p = rpm.getProject("localhost:5100", "Lilliput", "1234", "IoTSocialGraph", true);
OWLModel owlModel = (OWLModel)p.getKnowledgeBase();
RDFIndividual sourceInd = owlModel.getOWLIndividual(sourceEpc);
RDFIndividual destInd = owlModel.getOWLIndividual(targetEpc);
OWLObjectProperty prop = owlModel.getOWLObjectProperty(socialRelationship);
String sourceStr = sourceInd.getBrowserText();
String destStr = destInd.getBrowserText();
String propStr = prop.getBrowserText();
Collection propCol = sourceInd.getPropertyValues(prop);
Iterator propIter = propCol.iterator();
boolean isRelated=false;
while( propIter.hasNext() )
{
RDFIndividual tempInd = (RDFIndividual)propIter.next();
if(destInd.getBrowserText().equals(tempInd.getBrowserText()))
{
isRelated = true;
break;
}
System.out.println(tempInd.getBrowserText());
}
if ( isRelated == false )
{//������ �ȵǾ� �ִ�. �̾���
sourceInd.addPropertyValue(prop, destInd);
p.dispose();
return sourceStr + " and " + destStr + " is now " + propStr ;
}
else
{
sourceInd.removePropertyValue(prop, destInd);
p.dispose();
return sourceStr + " and " + destStr + " is now remove " + propStr ;
}
} catch (MongoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "error occured";
}
//9: get the place events 4/events
@SuppressWarnings("rawtypes")
public String getPlaceEvents(String epc)
{
try {
//Save Space to Ontology if it is not saved
RemoteProjectManager rpm = RemoteProjectManager.getInstance();
Project p = rpm.getProject("localhost:5100", "Lilliput", "1234", "IoTSocialGraph", true);
OWLModel owlModel = (OWLModel)p.getKnowledgeBase();
RDFIndividual spaceInd = owlModel.getOWLIndividual(epc);
OWLObjectProperty objectEventProp = owlModel.getOWLObjectProperty("hasObjectEventIn");
OWLObjectProperty spaceEventProp = owlModel.getOWLObjectProperty("hasSpaceEvent");
JSONObject returnJSON = new JSONObject();
List<String> objectEventIDs = new ArrayList<String>();
List<String> spaceEventIDs = new ArrayList<String>();
Collection oeCol = spaceInd.getPropertyValues(objectEventProp);
Iterator oeIter = oeCol.iterator();
Collection seCol = spaceInd.getPropertyValues(spaceEventProp);
Iterator seIter = seCol.iterator();
while( oeIter.hasNext() )
{
RDFIndividual tempInd = (RDFIndividual)oeIter.next();
objectEventIDs.add(Util.individualToBrowserText(tempInd.getBrowserText()));
System.out.println(tempInd.getBrowserText() + "is added to list");
}
while( seIter.hasNext() )
{
RDFIndividual tempInd = (RDFIndividual)seIter.next();
spaceEventIDs.add(Util.individualToBrowserText(tempInd.getBrowserText()));
System.out.println(tempInd.getBrowserText() + "is added to list");
}
Mongo m = new Mongo("143.248.106.26", 27017);
DB db = m.getDB("Lilliput");
//������ size �� 1��.
for(int i = 0 ; i < objectEventIDs.size(); i ++ )
{
DBCollection collection = db.getCollection("ObjectEvent");
DBObject query = new BasicDBObject();
query.put("_id",new ObjectId(objectEventIDs.get(i)));
DBObject queriedObject = collection.findOne(query);
Map queriedMap = queriedObject.toMap();
JSONObject queriedJson = new JSONObject(queriedMap);
returnJSON.put("ObjectEvent", queriedJson);
}
for(int i = 0 ; i < spaceEventIDs.size(); i ++ )
{
DBCollection collection = db.getCollection("SpaceEvent");
DBObject query = new BasicDBObject();
query.put("_id",new ObjectId(spaceEventIDs.get(i)));
DBObject queriedObject = collection.findOne(query);
Map queriedMap = queriedObject.toMap();
JSONObject queriedJson = new JSONObject(queriedMap);
returnJSON.put("SpaceEvent", queriedJson);
}
return returnJSON.toString();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MongoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//10: get the newest events 4/eventOne
@SuppressWarnings("rawtypes")
public String getPlaceNewestEvents(String epc)
{
try {
//Save Space to Ontology if it is not saved
RemoteProjectManager rpm = RemoteProjectManager.getInstance();
Project p = rpm.getProject("localhost:5100", "Lilliput", "1234", "IoTSocialGraph", true);
OWLModel owlModel = (OWLModel)p.getKnowledgeBase();
RDFIndividual spaceInd = owlModel.getOWLIndividual(epc);
OWLObjectProperty objectEventProp = owlModel.getOWLObjectProperty("hasObjectEventIn");
OWLObjectProperty spaceEventProp = owlModel.getOWLObjectProperty("hasSpaceEvent");
JSONObject returnJSON = new JSONObject();
List<String> objectEventIDs = new ArrayList<String>();
List<String> spaceEventIDs = new ArrayList<String>();
Collection oeCol = spaceInd.getPropertyValues(objectEventProp);
Iterator oeIter = oeCol.iterator();
Collection seCol = spaceInd.getPropertyValues(spaceEventProp);
Iterator seIter = seCol.iterator();
while( oeIter.hasNext() )
{
RDFIndividual tempInd = (RDFIndividual)oeIter.next();
objectEventIDs.add(Util.individualToBrowserText(tempInd.getBrowserText()));
System.out.println(tempInd.getBrowserText() + "is added to list");
}
while( seIter.hasNext() )
{
RDFIndividual tempInd = (RDFIndividual)seIter.next();
spaceEventIDs.add(Util.individualToBrowserText(tempInd.getBrowserText()));
System.out.println(tempInd.getBrowserText() + "is added to list");
}
Mongo m = new Mongo("143.248.106.26", 27017);
DB db = m.getDB("Lilliput");
//������ size �� 1��.
DatatypeFactory dataFactory = DatatypeFactory.newInstance();
XMLGregorianCalendar recentTime = dataFactory.newXMLGregorianCalendar(new GregorianCalendar());
recentTime.setYear(2000);
for(int i = 0 ; i < objectEventIDs.size(); i ++ )
{
DBCollection collection = db.getCollection("ObjectEvent");
DBObject query = new BasicDBObject();
query.put("_id",new ObjectId(objectEventIDs.get(i)));
DBObject queriedObject = collection.findOne(query);
BasicBSONList events = (BasicBSONList)queriedObject.get("Events");
BasicBSONObject recentEvent = null;
for(int j = 0 ; j < events.size() ; j++)
{
BasicBSONObject event = (BasicBSONObject)events.get(j);
String eventTime = (String)event.get("eventTime");
XMLGregorianCalendar eventTimeC = dataFactory.newXMLGregorianCalendar(eventTime);
if( eventTimeC.compare(recentTime) == 1 )
{
recentEvent = event;
}
}
Map recentOEMap = recentEvent.toMap();
JSONObject recentOEJson = new JSONObject(recentOEMap);
returnJSON.put("ObjectEvent", recentOEJson);
}
recentTime.setYear(2000);
for(int i = 0 ; i < spaceEventIDs.size(); i ++ )
{
DBCollection collection = db.getCollection("SpaceEvent");
DBObject query = new BasicDBObject();
query.put("_id",new ObjectId(spaceEventIDs.get(i)));
DBObject queriedObject = collection.findOne(query);
BasicBSONList events = (BasicBSONList)queriedObject.get("Events");
BasicBSONObject recentEvent = null;
for(int j = 0 ; j < events.size() ; j++)
{
BasicBSONObject event = (BasicBSONObject)events.get(j);
String eventTime = (String)event.get("EventTime");
XMLGregorianCalendar eventTimeC = dataFactory.newXMLGregorianCalendar(eventTime);
if( eventTimeC.compare(recentTime) == 1 )
{
recentEvent = event;
}
}
Map recentOEMap = recentEvent.toMap();
JSONObject recentOEJson = new JSONObject(recentOEMap);
returnJSON.put("SpaceEvent", recentOEJson);
}
return returnJSON.toString();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MongoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DatatypeConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//11: get the presence list 4/presenceList
public String getPlacePresence(String epc)
{
/* PREFIX grounding: "http://www.daml.org/services/owl-s/1.2/Grounding.owl"
SELECT ?x y?
WHERE
{
?x grounding:hasAtomicProcessGrounding ?apg .
?apg grounding:wsdlOperation ?op .
?op grounding:WsdlOperationRef ?or .
?or grounding:portType ?y .
}
*/
return null;
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}