implemented and fixed the issues regarding FaceRecognition service and the front end scripts

git-svn-id: https://svn.apache.org/repos/asf/incubator/photark/trunk@1157030 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/photark-face-recognition/pom.xml b/photark-face-recognition/pom.xml
index 3ce7a75..b1fd596 100644
--- a/photark-face-recognition/pom.xml
+++ b/photark-face-recognition/pom.xml
@@ -123,6 +123,12 @@
             <version>1.5.3</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.restfb</groupId>
+            <artifactId>restfb</artifactId>
+            <version>1.6.4</version>
+        </dependency>
+
 	</dependencies>
 
 	<build>
diff --git a/photark-face-recognition/src/main/java/org/apache/photark/face/services/FaceRecognitionService.java b/photark-face-recognition/src/main/java/org/apache/photark/face/services/FaceRecognitionService.java
index a41264c..0d76bac 100644
--- a/photark-face-recognition/src/main/java/org/apache/photark/face/services/FaceRecognitionService.java
+++ b/photark-face-recognition/src/main/java/org/apache/photark/face/services/FaceRecognitionService.java
@@ -53,7 +53,7 @@
      * @throws FaceClientException
      * @throws FaceServerException
      */
-    public TrainResponse train(String uids) throws FaceClientException, FaceServerException;
+    public void train(String uids) throws FaceClientException, FaceServerException;
 
     /** Adds a manual tag for a Photo.But manual tags are not used to train the system. They are used for the purpose
      * of adding face tags for the Photos which were not detected by your program.
@@ -135,7 +135,7 @@
      * @throws FaceClientException
      * @throws FaceServerException
      */
-    public List<PhotarkPhoto> recognizeFromUrls(String urls, String uids) throws FaceClientException, FaceServerException ;
+    public PhotarkPhoto recognizeFromUrl(String urls, String uids) throws FaceClientException, FaceServerException ;
 
     /**  Gives tags of the detected faces of the given photo with multiple details of the Photo
      *
diff --git a/photark-face-recognition/src/main/java/org/apache/photark/face/services/FaceRecognitionServiceImpl.java b/photark-face-recognition/src/main/java/org/apache/photark/face/services/FaceRecognitionServiceImpl.java
index 9b60e5a..e82e04c 100644
--- a/photark-face-recognition/src/main/java/org/apache/photark/face/services/FaceRecognitionServiceImpl.java
+++ b/photark-face-recognition/src/main/java/org/apache/photark/face/services/FaceRecognitionServiceImpl.java
@@ -61,8 +61,8 @@
     /**
      * @see {@link FaceRecognitionService#train(String)}
      */
-    public TrainResponse train(String uids) throws FaceClientException, FaceServerException {
-        return defaultFaceClient.train(uids);
+    public void train(String uids) throws FaceClientException, FaceServerException {
+       defaultFaceClient.train(uids);
     }
 
     /**
@@ -102,14 +102,12 @@
     }
 
     /**
-     * @see {@link FaceRecognitionService#recognizeFromUrls(String,String)}
+     * @see {@link FaceRecognitionService#recognizeFromUrl(String,String)}
      */
-    public List<PhotarkPhoto> recognizeFromUrls(String urls, String uids) throws FaceClientException, FaceServerException {
-        List<PhotarkPhoto> photarkPhotoList = null;
-        for(Photo p : defaultFaceClient.recognize(urls, uids)) {
-        photarkPhotoList.add(BeanGeneratorUtil.createPhotarkPhoto(p));
-        }
-        return photarkPhotoList ;
+    public PhotarkPhoto recognizeFromUrl(String url, String uid) throws FaceClientException, FaceServerException {
+        Photo p = defaultFaceClient.recognize(url, uid).get(0);
+        return BeanGeneratorUtil.createPhotarkPhoto(p);
+
     }
 
     /**
diff --git a/photark-face-recognition/src/main/java/org/apache/photark/face/services/applications/facebook/FacebookFriendFinder.java b/photark-face-recognition/src/main/java/org/apache/photark/face/services/applications/facebook/FacebookFriendFinder.java
index 41dbc17..f6f9496 100644
--- a/photark-face-recognition/src/main/java/org/apache/photark/face/services/applications/facebook/FacebookFriendFinder.java
+++ b/photark-face-recognition/src/main/java/org/apache/photark/face/services/applications/facebook/FacebookFriendFinder.java
@@ -24,10 +24,12 @@
 @Remotable
 public interface FacebookFriendFinder {
 
-    public Entry<String, String>[] getAllMyFBFriendsFromPictureLocal(String pathToFile);
+    public Entry<String, String>[] getAllMyFBFriendsFromPictureLocal(String pathToFile,String photarkUid);
 
-    public Entry<String, String>[] getAllMyFBFriendsFromPictureUrl(String fileUrl);
+    public Entry<String, String>[] getAllMyFBFriendsFromPictureUrl(String fileUrl,String photarkUid);
 
     public void setFacebookAuth(String facebookId, String fbAccessToken);
 
+    public void storeFacebookAccessToken(String photarkUid, String accessToken);
+
 }
diff --git a/photark-face-recognition/src/main/java/org/apache/photark/face/services/applications/facebook/FacebookFriendFinderImpl.java b/photark-face-recognition/src/main/java/org/apache/photark/face/services/applications/facebook/FacebookFriendFinderImpl.java
index 7803109..36f7c62 100644
--- a/photark-face-recognition/src/main/java/org/apache/photark/face/services/applications/facebook/FacebookFriendFinderImpl.java
+++ b/photark-face-recognition/src/main/java/org/apache/photark/face/services/applications/facebook/FacebookFriendFinderImpl.java
@@ -18,12 +18,20 @@
  */
 package org.apache.photark.face.services.applications.facebook;
 
+import com.github.mhendred.face4j.DefaultFaceClient;
 import com.github.mhendred.face4j.exception.FaceClientException;
 import com.github.mhendred.face4j.exception.FaceServerException;
+import com.restfb.DefaultFacebookClient;
+import com.restfb.FacebookClient;
+import com.restfb.types.User;
 import org.apache.photark.face.services.FaceRecognitionService;
 import org.apache.photark.face.services.beans.PhotArkFace;
 import org.apache.photark.face.services.beans.PhotarkPhoto;
+import org.apache.photark.security.authorization.services.AccessManager;
+import org.apache.photark.security.authorization.services.SecurityServiceImpl;
+import org.apache.photark.security.utils.Constants;
 import org.apache.tuscany.sca.data.collection.Entry;
+import org.oasisopen.sca.annotation.Init;
 import org.oasisopen.sca.annotation.Reference;
 import org.oasisopen.sca.annotation.Scope;
 
@@ -37,38 +45,55 @@
     private FaceRecognitionService faceRecognitionService;
     private final String adamFBUserId = "";
     private final String adamAccessToken = "";
+    private AccessManager accessManager;
 
-
+       @Init
+    public void init() {
+           System.out.println("############## INIT..............############");
+    }
+    
     @Reference(name = "faceRecognitionService")
     protected void setFaceRecognitionService(FaceRecognitionService faceRecognitionService) {
         this.faceRecognitionService = faceRecognitionService;
     }
 
-    public Entry<String, String>[] getAllMyFBFriendsFromPictureLocal(String pathToFile) {
 
-        return processFBFriends(pathToFile, true);
+    @Reference(name = "accessmanager")
+    protected void setAccessService(AccessManager accessManager) {
+        this.accessManager = accessManager;
     }
 
-    public Entry<String, String>[] getAllMyFBFriendsFromPictureUrl(String fileUrl) {
+    public Entry<String, String>[] getAllMyFBFriendsFromPictureLocal(String pathToFile,String photarkUid) {
 
-        return processFBFriends(fileUrl, false);
+        return processFBFriends(pathToFile, true, photarkUid);
+    }
+
+    public Entry<String, String>[] getAllMyFBFriendsFromPictureUrl(String fileUrl, String photarkUid) {
+
+        return processFBFriends(fileUrl, false, photarkUid);
+    }
+
+    public void storeFacebookAccessToken(String photarkUid, String accessToken) {
+        faceRecognitionService.setFacebookOauth2(getMyFacebookUserId(accessToken), accessToken);
+        accessManager.setFacebookAccessTokenToUser(photarkUid,Constants.REGISTERED_USER_LIST,accessToken);
     }
 
     public void setFacebookAuth(String facebookId, String fbAccessToken) {
         faceRecognitionService.setFacebookOauth2(facebookId, fbAccessToken);
     }
 
-    private Entry<String, String>[] processFBFriends(String fileLocation, boolean isLocal) {
+
+    private Entry<String, String>[] processFBFriends(String fileLocation, boolean isLocal, String photarkUid) {
 
         PhotarkPhoto photo = null;
         List<Entry<String, String>> detectedFriends = new ArrayList<Entry<String, String>>();
-
+        String accessToken = accessManager.getUserFacebookAccessToken(photarkUid,Constants.REGISTERED_USER_LIST);
         try {
-            faceRecognitionService.setFacebookOauth2(adamFBUserId, adamAccessToken);
+            faceRecognitionService.setFacebookOauth2(getMyFacebookUserId(accessToken),accessToken);
             if (isLocal) {
                 photo = faceRecognitionService.recognizeFromFile(new File(fileLocation), "friends@facebook.com");
             } else {
-                photo = faceRecognitionService.recognizeFromUrls(fileLocation, "friends@facebook.com").get(0);
+                photo = faceRecognitionService.recognizeFromUrl(fileLocation, "friends@facebook.com");
             }
 
             for (PhotArkFace face : photo.getPhotArkFaces()) {
@@ -95,4 +120,10 @@
 
     }
 
+    private String getMyFacebookUserId(String accessToken) {
+       FacebookClient facebookClient = new DefaultFacebookClient(accessToken);
+       User user = facebookClient.fetchObject("me", User.class);
+     return user.getId();
+    }
+
 }
diff --git a/photark-face-recognition/src/test/java/org/apache/photark/face/facebook/test/GenericFaceRecognitionTestCase.java b/photark-face-recognition/src/test/java/org/apache/photark/face/facebook/test/GenericFaceRecognitionTestCase.java
index 4b57239..4edb31e 100644
--- a/photark-face-recognition/src/test/java/org/apache/photark/face/facebook/test/GenericFaceRecognitionTestCase.java
+++ b/photark-face-recognition/src/test/java/org/apache/photark/face/facebook/test/GenericFaceRecognitionTestCase.java
@@ -41,8 +41,8 @@
 public class GenericFaceRecognitionTestCase {
 
     private DefaultFaceClient defaultFaceClient;
-    private String apiKey = "5ae7a7ddcba07b5d4731930bfe06f4c7";
-    private String apiSecret = "6877f93df2c2bcef2a1ddb6ba26a0d6c";
+    private String apiKey = "";
+    private String apiSecret = "";
     private static Node node;
 
 
@@ -89,8 +89,8 @@
         defaultFaceClient.train("jenifer@photark.com");
         PhotarkPhoto p =
             defaultFaceClient
-                .recognizeFromUrls("https://lh3.googleusercontent.com/-4I_Yn56XwAw/Thi6LIZSutI/AAAAAAAAABo/jOjx2cGgHao/s128/110306_latinjlo_400X400.jpg",
-                                   "jenifer@photark.com").get(0);
+                .recognizeFromUrl("https://lh3.googleusercontent.com/-4I_Yn56XwAw/Thi6LIZSutI/AAAAAAAAABo/jOjx2cGgHao/s128/110306_latinjlo_400X400.jpg",
+                                   "jenifer@photark.com");
 
         for (PhotArkFace f : p.getPhotArkFaces()) {
             if (f.getGuess() == null) {
diff --git a/photark-jcr/src/main/java/org/apache/photark/jcr/security/authorization/JCRAccessManager.java b/photark-jcr/src/main/java/org/apache/photark/jcr/security/authorization/JCRAccessManager.java
index 2ba2888..42b58dd 100644
--- a/photark-jcr/src/main/java/org/apache/photark/jcr/security/authorization/JCRAccessManager.java
+++ b/photark-jcr/src/main/java/org/apache/photark/jcr/security/authorization/JCRAccessManager.java
@@ -1170,6 +1170,65 @@
 
     }
 
+    public void setFacebookAccessTokenToUser(String userId, String listName, String accesstoken) {
+
+           Session session;
+        try {
+
+            if(isUserStoredInList(userId,listName)) {
+
+                session = repositoryManager.getSession();
+
+                Node listNodeUsers = (Node)session.getItem("/" + USER_STORE + "/" + USER_LISTS + "/" + listName);
+                Node userNode = listNodeUsers.getNode(JCREncoder.toJCRFormat(userId));
+
+                if(!userNode.hasProperty("photark.facebook.accesstoken")) {
+                   userNode.setProperty("photark.facebook.accesstoken",accesstoken);
+                }
+                session.save();
+
+            }
+        } catch (LoginException e) {
+
+            e.printStackTrace();
+        } catch (RepositoryException e) {
+
+            e.printStackTrace();
+        }
+
+    }
+
+    public String getUserFacebookAccessToken(String userId, String listName) {
+
+        Session session;
+        String accessToken = "";
+     try {
+
+         if(isUserStoredInList(userId,listName)) {
+
+             session = repositoryManager.getSession();
+
+             Node listNodeUsers = (Node)session.getItem("/" + USER_STORE + "/" + USER_LISTS + "/" + listName);
+             Node userNode = listNodeUsers.getNode(JCREncoder.toJCRFormat(userId));
+
+             if(userNode.hasProperty("photark.facebook.accesstoken")) {
+              accessToken = userNode.getProperty("photark.facebook.accesstoken").getValue().getString();
+             }
+             session.save();
+
+         }
+     } catch (LoginException e) {
+
+         e.printStackTrace();
+     } catch (RepositoryException e) {
+
+         e.printStackTrace();
+     }
+
+
+        return accessToken;
+    }
+
     // save access list and token in the access token map
 
     public synchronized void putAccessListAndToken(AccessList accessList, String token) {
diff --git a/photark-security/src/main/java/org/apache/photark/security/authorization/services/AccessManager.java b/photark-security/src/main/java/org/apache/photark/security/authorization/services/AccessManager.java
index 6083dcc..2dc905a 100644
--- a/photark-security/src/main/java/org/apache/photark/security/authorization/services/AccessManager.java
+++ b/photark-security/src/main/java/org/apache/photark/security/authorization/services/AccessManager.java
@@ -157,4 +157,22 @@
      * @return The userID of the user
      */
     String getUserIdFromSecurityToken(String token);
+
+    /**
+     *
+     * @param userId  user id of the currrent user
+     * @param accesstoken  facebook access token
+     * @param listName - list name to retrieve the user
+     * @return
+     */
+    void setFacebookAccessTokenToUser(String userId, String listName, String accesstoken);
+
+    /**
+     *
+     * @param userId  user id of the currrent user
+     * @param listName list name to retrieve the user
+     * @return
+     */
+    String getUserFacebookAccessToken(String userId, String listName);
+
 }
diff --git a/photark-ui-admin/src/main/webapp/admin/face.html b/photark-ui-admin/src/main/webapp/admin/face.html
index d9a5358..c63f067 100644
--- a/photark-ui-admin/src/main/webapp/admin/face.html
+++ b/photark-ui-admin/src/main/webapp/admin/face.html
@@ -24,7 +24,7 @@
 
     <title>Apache PhotArk - Face Recognition</title>
 
-    <script type="text/javascript" src="js/constants.js"></script>
+    <script type="text/javascript" src="../js/constants.js"></script>
     <script type="text/javascript" src="../dojo/dojo.js"
             djConfig="isDebug:false, parseOnLoad: true, debugAtAllCosts:false"></script>
     <script type="text/javascript" src="js/face.js"></script>
diff --git a/photark-ui-admin/src/main/webapp/admin/js/admin.js b/photark-ui-admin/src/main/webapp/admin/js/admin.js
index 50f9165..04b441b 100644
--- a/photark-ui-admin/src/main/webapp/admin/js/admin.js
+++ b/photark-ui-admin/src/main/webapp/admin/js/admin.js
@@ -287,7 +287,7 @@
 }
 
 
-function populateUserInfo() {
+function populateUserInfo() {  
     dojo.xhrPost({
         url:"../security", //photark.constants.SecurityEndpoint,
         content:{request:"getUser"},
diff --git a/photark-ui-admin/src/main/webapp/admin/js/face.js b/photark-ui-admin/src/main/webapp/admin/js/face.js
index 003678a..bd44b0c 100644
--- a/photark-ui-admin/src/main/webapp/admin/js/face.js
+++ b/photark-ui-admin/src/main/webapp/admin/js/face.js
@@ -80,9 +80,8 @@
     var url = window.location.href;
     if (url != "http://localhost:8080/photark/admin/face.html") {
         var accesstoken = url.split("&")[0].split("=")[1];
-
-        alert(accesstoken);
-     
+        store_facebook_access_token(accesstoken) ;
+        
     }
 }
 
@@ -95,27 +94,44 @@
     window.location = url;
 }
 
-function trainUser() {
+function trainUser(user_name) {
     if (selectFaceApp.value == "General-Face-Recognition") {
         //TODO call train method in generic face app
 
     } else if (selectFaceApp.value == "FaceBook-Friend-Finder") {
-        faceService.train("1271543184@facebook.com").addCallback(facebook_ff_callback);
+        faceService.train(user_name).addCallback(facebook_ff_callback);
     }
 
 }
 
+function store_facebook_access_token(accessToken) {
+        dojo.xhrPost({
+        url:"../security", //photark.constants.SecurityEndpoint,
+        content:{request:"getUser"},
+        handleAs: "json",
+        load: function(response, ioArgs) {
+        facebookService.storeFacebookAccessToken(response.user.userId,accessToken).addCallback(facebook_ff_void_callback);
+        },
+        error: function(response, ioArgs) {
+
+        }
+    });
+}
+
 function face_callback(items, exception) {
     if (exception) {
         alert("Error");
     }
+
+    alert(items);
 }
 
-function facebook_ff_callback(items, exception) {
+function facebook_ff_void_callback(items, exception) {
     if (exception) {
         alert("Error");
+    }  else {
+//      alert("CAME");
     }
-    alert("AA");
 }
 
 
diff --git a/photark-ui/src/main/webapp/js/gallery.js b/photark-ui/src/main/webapp/js/gallery.js
index fe939b7..59e9b5e 100644
--- a/photark-ui/src/main/webapp/js/gallery.js
+++ b/photark-ui/src/main/webapp/js/gallery.js
@@ -276,10 +276,19 @@
 }
 
 function showFacebookFriends(){
- facebook_ff.getAllMyFBFriendsFromPictureLocal("/home/subash/IdeaProjects/pics/friends_2.jpg").addCallback(facebook_ff_callback);
+ var file_path =  document.getElementById("albumImage").src;
+    dojo.xhrPost({
+        url:"security", //photark.constants.SecurityEndpoint,
+        content:{request:"getUser"},
+        handleAs: "json",
+        load: function(response, ioArgs) {
+          facebook_ff.getAllMyFBFriendsFromPictureUrl(file_path,response.user.userId).addCallback(facebook_ff_callback);
+        },
+        error: function(response, ioArgs) {
 
-//facebook_ff.getAllMyFBFriendsFromPictureUrl("https://lh4.googleusercontent.com/-rb_m-GQcL00/Ti8sqThvrDI/AAAAAAAAAMY/kUBurbFKJ0A/s640/friends_2.jpg").addCallback(facebook_ff_callback);
-//facebook_ff.getTest("/home/subash/IdeaProjects/pics/friends_2.jpg").addCallback(facebook_ff_callback);
+        }
+    });
+
 }
 
 function face_callback(items, exception) {
diff --git a/photark-webapp/src/main/webapp/WEB-INF/web.composite b/photark-webapp/src/main/webapp/WEB-INF/web.composite
index 15b1557..c72d226 100644
--- a/photark-webapp/src/main/webapp/WEB-INF/web.composite
+++ b/photark-webapp/src/main/webapp/WEB-INF/web.composite
@@ -187,6 +187,8 @@
    			<tuscany:binding.jsonrpc uri="/FacebookFriendFinder"/>
    		</service>
         <reference name="faceRecognitionService" target="FaceRecognitionService"/>
+        <reference name="accessmanager" target="AccessManager"/>
+
 	</component>