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 } }