package kr.ac.kaist.resl.lilliput.core; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import kr.ac.kaist.resl.lilliput.util.MongoHelper; import org.apache.commons.io.IOUtils; 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.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 FacebookCallback */ public class FacebookCallback extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public FacebookCallback() { 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 System.out.println(); PrintWriter out = response.getWriter(); //String mode = (String)request.getParameter("hub.mode"); String challenge = (String)request.getParameter("hub.challenge"); String verify_token = (String)request.getParameter("hub.verify_token"); if( verify_token.equals("123")) { out.print(challenge); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub System.out.println(); try{ StringBuilder sb = new StringBuilder(); String s; while ((s = request.getReader().readLine()) != null) { sb.append(s); } System.out.println(sb.toString()); JSONObject reqObj = new JSONObject(sb.toString()); keepConsistencyWithFacebook(reqObj); }catch(Exception e) { } } public void keepConsistencyWithFacebook(JSONObject fbObj) { try{ @SuppressWarnings("unused") String object = fbObj.getString("object"); JSONArray entries = fbObj.getJSONArray("entry"); for(int i = 0 ; i < entries.length() ; i ++ ) { JSONObject entry = entries.getJSONObject(i); String uid = entry.getString("uid"); changeFriendship(uid); } }catch( JSONException e ) { } } public void changeFriendship(String uid) { String appAC = getAppAC(); //making facebookClient FacebookClient facebookClient = new DefaultFacebookClient(appAC); Connection<User> myFriendConnections = facebookClient.fetchConnection(uid+"/friends", User.class); List<User> myFriends = myFriendConnections.getData(); System.out.println("my Friends"); //Ontology�� �ҷ��� RemoteProjectManager rpm = RemoteProjectManager.getInstance(); Project p = rpm.getProject("localhost:5100", "Lilliput", "1234", "IoTSocialGraph", true); OWLModel owlModel = (OWLModel)p.getKnowledgeBase(); OWLObjectProperty hasFriend = owlModel.getOWLObjectProperty("hasFriend"); MongoHelper mHelper = new MongoHelper(); //���� ������ String myEpc = mHelper.isHumanSavedInDB(uid); RDFIndividual myInd = owlModel.getRDFIndividual(myEpc); if( myInd == null ) { return ; } //������ Graph������ ���� @SuppressWarnings("rawtypes") Collection friendCol = myInd.getPropertyValues(hasFriend); @SuppressWarnings("rawtypes") Iterator friendIter = friendCol.iterator(); List<String> prevConnect = new ArrayList<String>(); while( friendIter.hasNext()) { RDFIndividual friendRDF = (RDFIndividual)friendIter.next(); prevConnect.add(friendRDF.getBrowserText()); } //���� ����� epc�Ϸ� //�ֽ� ����� �͵��� ������ List<String> currConnect = new ArrayList<String>(); for(int i = 0 ; i < myFriends.size() ; i++ ) { String tfid = myFriends.get(i).getId(); String friendEPC = mHelper.isHumanSavedInDB(tfid); if(friendEPC != null ) { currConnect.add(friendEPC); } } for(int i = 0 ; i < currConnect.size() ; i++) { String currStr = currConnect.get(i); if( prevConnect.contains(currStr)) { continue; } else { //���� ����Ǿ� �ϴµ� �������� ���ٸ� ���Ӱ� ������� �־�� �Ѵ�. RDFIndividual friendInd = owlModel.getRDFIndividual(currStr); myInd.addPropertyValue(hasFriend, friendInd); } } for(int i = 0 ; i < prevConnect.size() ; i++) { String prevStr = prevConnect.get(i); if( currConnect.contains(prevStr)) { continue; } else { //������ ����Ǿ� �־�����, ���翡 ���ٸ� �������� RDFIndividual friendInd = owlModel.getRDFIndividual(prevStr); myInd.removePropertyValue(hasFriend, friendInd); } } } public String getAppAC() { try { URL url; url = new URL("https://graph.facebook.com/oauth/access_token?client_id=136511403124173&client_secret=6d2d602142b59b0df5738c7a151c66cf&grant_type=client_credentials"); URLConnection con = url.openConnection(); InputStream in = con.getInputStream(); String encoding = con.getContentEncoding(); encoding = encoding == null ? "UTF-8" : encoding; String body = IOUtils.toString(in, encoding); String[] tokens = body.split("="); return tokens[1]; } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } }