package kr.ac.kaist.resl.lilliput.core; import java.io.IOException; import java.util.Collection; import java.util.GregorianCalendar; import java.util.Iterator; import java.util.List; 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 kr.ac.kaist.resl.lilliput.util.JSONHelper; import kr.ac.kaist.resl.lilliput.util.MongoHelper; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.restfb.Connection; import com.restfb.DefaultFacebookClient; import com.restfb.FacebookClient; import com.restfb.types.Account; import com.restfb.types.NamedFacebookType; import com.restfb.types.Page; import com.restfb.types.User; 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.OWLObjectProperty; import edu.stanford.smi.protegex.owl.model.RDFIndividual; /** * Servlet implementation class RenewAndDelete */ public class RenewAndDelete extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public RenewAndDelete() { 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 userAC = (String)request.getParameter("userAC"); String target = (String)request.getParameter("target"); String type = (String)request.getParameter("Type"); String value = (String)request.getParameter("rad_object"); String userEPC = (String)request.getParameter("userEPC"); String thingFID = null; String thingAC = null; @SuppressWarnings("unused") String thingName = null; String thingEPC = null; String result = null; if( value != null) { String[] thingValues = value.split("/"); thingFID = thingValues[0]; thingName = thingValues[1]; thingAC = thingValues[2]; thingEPC = thingValues[3]; } if( target.equals("human") && type.equals("Renew")) { result = doRenewHuman(userAC, userEPC); } else if( target.equals("human") && type.equals("Delete")) { result = doDeleteHuman(userAC, userEPC); } else if( target.equals("object") && type.equals("Renew")) { result = doRenewObject(userAC, userEPC, thingFID, thingEPC, thingAC); } else if( target.equals("object") && type.equals("Delete")) { result = doDeleteObject(userAC, userEPC, thingFID, thingEPC, thingAC); } else if( target.equals("place") && type.equals("Renew")) { result = doRenewPlace(userAC, userEPC, thingFID, thingEPC, thingAC); } else if( target.equals("place") && type.equals("Delete")) { result = doDeletePlace(userAC, userEPC, thingFID, thingEPC, thingAC); } request.setAttribute("result", result); RequestDispatcher dispatcher = request.getRequestDispatcher("ServiceResult.jsp"); dispatcher.forward(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } @SuppressWarnings("unchecked") public String doRenewHuman(String userAC, String userEPC) { RemoteProjectManager rpm = RemoteProjectManager.getInstance(); Project p = rpm.getProject("localhost:5100", "Lilliput", "1234", "IoTSocialGraph", true); OWLModel owlModel = (OWLModel)p.getKnowledgeBase(); MongoHelper mHelper = new MongoHelper(); try { //user�� fb���� �޾ƿ´�. //making facebookClient FacebookClient facebookClient = new DefaultFacebookClient(userAC); //fetch user User user = facebookClient.fetchObject("me", User.class); //creating json object of user JSONHelper jhelper = new JSONHelper(); JSONObject jsonUser = jhelper.getJSONFromUser(user); DatatypeFactory dataFactory = DatatypeFactory.newInstance(); XMLGregorianCalendar now = dataFactory.newXMLGregorianCalendar(new GregorianCalendar()); jsonUser.put("SyncTime", now.toString()); // //���� human�� ã�´�. JSONObject prev = mHelper.getInformationUsingFID("HumanInformation", user.getId()); //human������ �����Ѵ�. String oid = prev.getString("_id"); System.out.println(oid); String reDB = mHelper.updateInformationToDB("HumanInformation", oid, jsonUser); if( reDB == null ) { return " Unexpected Error Occured : DB update Failed " ; } RDFIndividual humanInd = owlModel.getRDFIndividual(userEPC); if( humanInd == null ) { return " Unexpected Error Occured : human is not in Ontology " ; } Connection<User> myFriendConnections = facebookClient.fetchConnection("me/friends", User.class); List<User> myFriends = myFriendConnections.getData(); System.out.println("my Friends"); OWLObjectProperty hasFriend = owlModel.getOWLObjectProperty("hasFriend"); OWLObjectProperty hasLover = owlModel.getOWLObjectProperty("hasLover"); //remove current connection Collection<RDFIndividual> friendsCol = humanInd.getPropertyValuesAs(hasFriend, RDFIndividual.class); Iterator<RDFIndividual> friendsIter = friendsCol.iterator(); while( friendsIter.hasNext() ) { RDFIndividual friendInd = friendsIter.next(); humanInd.removePropertyValue(hasFriend, friendInd); } Collection<RDFIndividual> loversCol = humanInd.getPropertyValuesAs(hasLover, RDFIndividual.class); Iterator<RDFIndividual> loversIter = loversCol.iterator(); while( loversIter.hasNext()) { RDFIndividual loverInd = loversIter.next(); humanInd.removePropertyValue(hasLover, loverInd); } //ģ���� DB�� �ִٸ� object ID�� ã�� ģ���� �����Ѵ�. for(int i = 0 ; i < myFriends.size() ; i ++ ) { String tfid = myFriends.get(i).getId(); String friendEPC = mHelper.isHumanSavedInDB(tfid); RDFIndividual friendInd = owlModel.getRDFIndividual(friendEPC); if(friendInd == null ) { System.out.println( " your friend " + myFriends.get(i).getName() + " is not a member of Lilliput, yet"); continue; } else { humanInd.addPropertyValue(hasFriend, friendInd); System.out.println( myFriends.get(i).getName() + " is now friend in Lilliput"); } } NamedFacebookType lover = user.getSignificantOther(); if( lover != null ) { String lover_fid = lover.getId(); String lover_EPC = mHelper.isHumanSavedInDB(lover_fid); RDFIndividual loverInd = owlModel.getRDFIndividual(lover_EPC); if(loverInd == null) { System.out.println( " your lover " + lover.getName() + " is not a memeber of Lilliput, yet "); } else { humanInd.addPropertyValue(hasLover, loverInd); System.out.println( lover.getName() + " is now lover in Lilliput"); } } p.dispose(); mHelper.close(); return "Success"; } catch (DatatypeConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } p.dispose(); mHelper.close(); return null; } public String doDeleteHuman(String userAC, String userEPC) { //individual�� ����� ���赵 ��������. //1. ������ DB���� �����. //2. ������ individual�� �����. //3. ownership�� �͵��� �����´�. //4. �װ͵��� ������ db���� �����. //5. �װ͵��� individual�� �����. //6. human individual�� �����. //1. ������ db���� �����. FacebookClient facebookClient = new DefaultFacebookClient(userAC); //fetch user User user = facebookClient.fetchObject("me", User.class); MongoHelper mHelper = new MongoHelper(); RemoteProjectManager rpm = RemoteProjectManager.getInstance(); Project p = rpm.getProject("localhost:5100", "Lilliput", "1234", "IoTSocialGraph", true); OWLModel owlModel = (OWLModel)p.getKnowledgeBase(); try { //���� �ڽ��� �͵��� Clear�ؾ��Ѵ� //fetch Pages Connection<Account> myPageConnections = facebookClient.fetchConnection("me/accounts", Account.class); List<Account> myPages = myPageConnections.getData(); JSONArray pages = new JSONArray(); for(int i = 0 ; i < myPages.size() ; i ++ ) { JSONObject pageJson = new JSONObject(); Account tempAcc = myPages.get(i); if( tempAcc.getCategory().equals("Application")) { continue; } String tname = tempAcc.getName(); String PageaccessToken = tempAcc.getAccessToken(); String id = tempAcc.getId(); pageJson.put("name", tname); pageJson.put("access_token", PageaccessToken); pageJson.put("id", id); pages.put(pageJson); } JSONArray registratedObject = new JSONArray(); JSONArray registratedPlace = new JSONArray(); for(int i = 0 ; i < pages.length() ; i++ ) { JSONObject tempPage = pages.getJSONObject(i); String uid = mHelper.isSavedInDB("EPCStorage", "fid", tempPage.getString("id")); if( uid != null ) { //urn:epc:id:sgtin: //urn:epc:id:sgln: String[] flags = uid.split(":"); if( flags.length < 4) { System.out.println( "Unexpected Error Occured : Abnormal EPC is stored in DB"); continue; } if( flags[3].equals("sgtin")) //object { JSONObject ret = mHelper.getInformationUsingFID("ObjectInformation", tempPage.getString("id")); if( ret.isNull("SyncTime") != true ) tempPage.put("SyncTime", ret.getString("SyncTime")); if( ret.isNull("epc") != true ) tempPage.put("epc", ret.getString("epc")); registratedObject.put(tempPage); } else if( flags[3].equals("sgln")) //place { JSONObject ret = mHelper.getInformationUsingFID("SpaceInformation", tempPage.getString("id")); if( ret.isNull("SyncTime") != true ) tempPage.put("SyncTime", ret.getString("SyncTime")); if( ret.isNull("epc") != true ) tempPage.put("epc", ret.getString("epc")); registratedPlace.put(tempPage); } } } //doDeleteObject(String userAC, String userEPC, String thingFID, String thingEPC, String thingAC ) //object�� ����� for( int i = 0 ; i < registratedObject.length() ; i ++ ) { JSONObject tempObject = registratedObject.getJSONObject(i); String thingFID = tempObject.getString("id"); String thingEPC = tempObject.getString("epc"); String thingAC = tempObject.getString("access_token"); doDeleteObject(userAC, userEPC, thingFID, thingEPC, thingAC); } for( int i = 0 ; i < registratedPlace.length() ; i ++ ) { JSONObject tempPlace = registratedPlace.getJSONObject(i); String thingFID = tempPlace.getString("id"); String thingEPC = tempPlace.getString("epc"); String thingAC = tempPlace.getString("access_token"); doDeletePlace(userAC, userEPC, thingFID, thingEPC, thingAC); } JSONObject ret = mHelper.getInformationUsingFID("HumanInformation", user.getId()); String oid = ret.getString("_id"); mHelper.deleteDocumentInDB("HumanInformation", userEPC); mHelper.deleteDocumentInDB("EPCStorage", userEPC); //2. ������ individual�� ����� //3. object individual�� ����� RDFIndividual ind = owlModel.getRDFIndividual(userEPC); RDFIndividual inf = owlModel.getRDFIndividual(oid); ind.delete(); inf.delete(); p.dispose(); mHelper.close(); return "success"; } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } //�׷� �ɵ� return null; } public String doRenewObject(String userAC, String userEPC, String thingFID, String thingEPC, String thingAC ) { try { //object������ fb���� �����´�. FacebookClient facebookClient = new DefaultFacebookClient(userAC); //getting object page Page objectPage = facebookClient.fetchObject(thingFID, Page.class); if( objectPage == null ) { return "object renew is failed"; } MongoHelper mHelper = new MongoHelper(); JSONHelper jhelper = new JSONHelper(); JSONObject jsonObject = jhelper.getJSONFromObject(objectPage, thingEPC); DatatypeFactory dataFactory = DatatypeFactory.newInstance(); XMLGregorianCalendar now = dataFactory.newXMLGregorianCalendar(new GregorianCalendar()); jsonObject.put("SyncTime", now.toString()); //���� object�� ã�´�. JSONObject prev = mHelper.getInformationUsingFID("ObjectInformation", thingFID); //object������ �����Ѵ�. String oid = prev.getString("_id"); System.out.println(oid); String reDB = mHelper.updateInformationToDB("ObjectInformation", oid, jsonObject); mHelper.close(); if( reDB == null ) { return " Unexpected Error Occured : DB update Failed " ; } else { return " Success " ; } } catch (DatatypeConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return " Unexpected Error Occured " ; } public String doDeleteObject(String userAC, String userEPC, String thingFID, String thingEPC, String thingAC ) { try { //1. ������ db���� �����. MongoHelper mHelper = new MongoHelper(); RemoteProjectManager rpm = RemoteProjectManager.getInstance(); Project p = rpm.getProject("localhost:5100", "Lilliput", "1234", "IoTSocialGraph", true); OWLModel owlModel = (OWLModel)p.getKnowledgeBase(); JSONObject ret = mHelper.getInformationUsingFID("ObjectInformation", thingFID); String oid = ret.getString("_id"); mHelper.deleteDocumentInDB("ObjectInformation", thingEPC); mHelper.deleteDocumentInDB("EPCStorage", thingEPC); //2. ������ individual�� ����� //3. object individual�� ����� RDFIndividual ind = owlModel.getRDFIndividual(thingEPC); RDFIndividual inf = owlModel.getRDFIndividual(oid); ind.delete(); inf.delete(); return "success"; } catch( JSONException e ) { return null; } } public String doRenewPlace(String userAC, String userEPC, String thingFID, String thingEPC, String thingAC ) { //place������ fb���� �����´�. //place������ �����. //place������ �����Ѵ�. try { //object������ fb���� �����´�. FacebookClient facebookClient = new DefaultFacebookClient(userAC); //getting object page Page placePage = facebookClient.fetchObject(thingFID, Page.class); if( placePage == null ) { return "place renew is failed"; } //object ������ �����. MongoHelper mHelper = new MongoHelper(); JSONHelper jhelper = new JSONHelper(); JSONObject jsonObject = jhelper.getJSONFromObject(placePage, thingEPC); DatatypeFactory dataFactory = DatatypeFactory.newInstance(); XMLGregorianCalendar now = dataFactory.newXMLGregorianCalendar(new GregorianCalendar()); jsonObject.put("SyncTime", now.toString()); //���� object�� ã�´�. JSONObject prev = mHelper.getInformationUsingFID("SpaceInformation", thingFID); //object������ �����Ѵ�. String oid = prev.getString("_id"); System.out.println(oid); String reDB = mHelper.updateInformationToDB("SpaceInformation", oid, jsonObject); mHelper.close(); if( reDB == null ) { return " Unexpected Error Occured : DB update Failed " ; } else { return " Success " ; } } catch (DatatypeConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return " Unexpected Error Occured " ; } public String doDeletePlace(String userAC, String userEPC, String thingFID, String thingEPC, String thingAC ) { try { //1. ������ db���� �����. MongoHelper mHelper = new MongoHelper(); RemoteProjectManager rpm = RemoteProjectManager.getInstance(); Project p = rpm.getProject("localhost:5100", "Lilliput", "1234", "IoTSocialGraph", true); OWLModel owlModel = (OWLModel)p.getKnowledgeBase(); JSONObject ret = mHelper.getInformationUsingFID("SpaceInformation", thingFID); String oid = ret.getString("_id"); mHelper.deleteDocumentInDB("SpaceInformation", thingEPC); mHelper.deleteDocumentInDB("EPCStorage", thingEPC); //2. ������ individual�� ����� //3. object individual�� ����� RDFIndividual ind = owlModel.getRDFIndividual(thingEPC); RDFIndividual inf = owlModel.getRDFIndividual(oid); ind.delete(); inf.delete(); return "success"; } catch( JSONException e ) { return null; } } }