Author: raminder
Date: Thu Jul  5 21:08:27 2012
New Revision: 1357920

URL: http://svn.apache.org/viewvc?rev=1357920&view=rev
Log:
Commit patch by Viknes for Friends with Friends. Rave-702 

Added:
    rave/trunk/rave-demo-gadgets/src/main/webapp/friendsWrapper.js
Modified:
    
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPersonRepository.java
    
rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/repository/impl/JpaPersonRepositoryTest.java
    rave/trunk/rave-components/rave-jpa/src/test/resources/test_data.sql
    rave/trunk/rave-demo-gadgets/src/main/webapp/friends.xml
    rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/db/initial_data.sql
    
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/DefaultPersonService.java

Modified: 
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPersonRepository.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPersonRepository.java?rev=1357920&r1=1357919&r2=1357920&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPersonRepository.java
 (original)
+++ 
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPersonRepository.java
 Thu Jul  5 21:08:27 2012
@@ -91,7 +91,17 @@ public class JpaPersonRepository impleme
 
     @Override
     public List<Person> findFriendsWithFriend(String username, String 
friendUsername) {
-        throw new NotSupportedException();
+       List<Person> friendsWithFriend = new ArrayList<Person>();
+       List<Person> userFriends = findFriends(username);
+       List<Person> friendFriends = findFriends(friendUsername);
+       for(Person userFriend : userFriends) {
+               for (Person friendFriend : friendFriends) {
+                       
if(userFriend.getUsername().equals(friendFriend.getUsername())) {
+                               friendsWithFriend.add(userFriend);
+                       }
+               }
+       }
+       return friendsWithFriend;
     }
 
     @Override

Modified: 
rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/repository/impl/JpaPersonRepositoryTest.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/repository/impl/JpaPersonRepositoryTest.java?rev=1357920&r1=1357919&r2=1357920&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/repository/impl/JpaPersonRepositoryTest.java
 (original)
+++ 
rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/repository/impl/JpaPersonRepositoryTest.java
 Thu Jul  5 21:08:27 2012
@@ -90,9 +90,10 @@ public class JpaPersonRepositoryTest {
     @Test
     public void findFriends_valid() {
         List<Person> connected = repository.findFriends(VALID_USER);
-        assertThat(connected.size(), is(equalTo(2)));
+        assertThat(connected.size(), is(equalTo(3)));
         assertThat(connected.get(0).getUsername(), is(equalTo(VALID_USER2)));
         assertThat(connected.get(1).getUsername(), is(equalTo(VALID_USER3)));
+        assertThat(connected.get(2).getUsername(), is(equalTo(VALID_USER4)));
     }
     @Test
     public void findFriends_invalid() {
@@ -103,10 +104,11 @@ public class JpaPersonRepositoryTest {
     @Test
     public void findConnected_valid() {
         List<Person> connected = repository.findAllConnectedPeople(VALID_USER);
-        assertThat(connected.size(), is(equalTo(3)));
+        assertThat(connected.size(), is(equalTo(4)));
         assertThat(connected.get(0).getUsername(), is(equalTo(VALID_USER2)));
         assertThat(connected.get(1).getUsername(), is(equalTo(VALID_USER3)));
-        assertThat(connected.get(2).getUsername(), is(equalTo(VALID_USER5)));
+        assertThat(connected.get(2).getUsername(), is(equalTo(VALID_USER4)));
+        assertThat(connected.get(3).getUsername(), is(equalTo(VALID_USER5)));
     }
 
     @Test
@@ -144,9 +146,18 @@ public class JpaPersonRepositoryTest {
         repository.findFriends("asdf", "asdf");
     }
 
-    @Test(expected = NotSupportedException.class)
-    public void findFriendsWithFriend() {
-        repository.findFriendsWithFriend("asdf", "asdf");
+    @Test
+    public void findFriendsWithFriend_valid() {
+        List<Person> friendsWithFriend = 
repository.findFriendsWithFriend(VALID_USER, VALID_USER2);
+        assertThat(friendsWithFriend.size(), is(equalTo(2)));
+        assertThat(friendsWithFriend.get(0).getUsername(), 
is(equalTo(VALID_USER3)));
+        assertThat(friendsWithFriend.get(1).getUsername(), 
is(equalTo(VALID_USER4)));
+    }
+
+    @Test
+    public void findFriendsWithFriend_invalid() {
+        List<Person> friendsWithFriend = 
repository.findFriends(INVALID_USERNAME);
+        assertThat(friendsWithFriend.isEmpty(), is(true));
     }
 
     @Test(expected = NotSupportedException.class)

Modified: rave/trunk/rave-components/rave-jpa/src/test/resources/test_data.sql
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-jpa/src/test/resources/test_data.sql?rev=1357920&r1=1357919&r2=1357920&view=diff
==============================================================================
--- rave/trunk/rave-components/rave-jpa/src/test/resources/test_data.sql 
(original)
+++ rave/trunk/rave-components/rave-jpa/src/test/resources/test_data.sql Thu 
Jul  5 21:08:27 2012
@@ -1226,9 +1226,24 @@ UPDATE RAVE_PORTAL_SEQUENCES SET seq_cou
 
 set @next_person_association = (SELECT seq_count FROM RAVE_PORTAL_SEQUENCES 
WHERE seq_name = @person_association_seq);
 INSERT INTO person_association(entity_id, follower_id, followed_id)
+VALUES (@next_person_association, @user_id_1, @user_id_4);
+UPDATE RAVE_PORTAL_SEQUENCES SET seq_count = (seq_count + 1) WHERE seq_name = 
@person_association_seq;
+
+set @next_person_association = (SELECT seq_count FROM RAVE_PORTAL_SEQUENCES 
WHERE seq_name = @person_association_seq);
+INSERT INTO person_association(entity_id, follower_id, followed_id)
+VALUES (@next_person_association, @user_id_2, @user_id_3);
+UPDATE RAVE_PORTAL_SEQUENCES SET seq_count = (seq_count + 1) WHERE seq_name = 
@person_association_seq;
+
+set @next_person_association = (SELECT seq_count FROM RAVE_PORTAL_SEQUENCES 
WHERE seq_name = @person_association_seq);
+INSERT INTO person_association(entity_id, follower_id, followed_id)
 VALUES (@next_person_association, @user_id_2, @user_id_4);
 UPDATE RAVE_PORTAL_SEQUENCES SET seq_count = (seq_count + 1) WHERE seq_name = 
@person_association_seq;
 
+set @next_person_association = (SELECT seq_count FROM RAVE_PORTAL_SEQUENCES 
WHERE seq_name = @person_association_seq);
+INSERT INTO person_association(entity_id, follower_id, followed_id)
+VALUES (@next_person_association, @user_id_2, @user_id_5);
+UPDATE RAVE_PORTAL_SEQUENCES SET seq_count = (seq_count + 1) WHERE seq_name = 
@person_association_seq;
+
 set @group_id_1 = (SELECT seq_count FROM RAVE_PORTAL_SEQUENCES WHERE seq_name 
= @groups_seq);
 INSERT INTO groups(entity_id, title, description)
 VALUES (@group_id_1, 'Party', 'Party Group');

Modified: rave/trunk/rave-demo-gadgets/src/main/webapp/friends.xml
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-demo-gadgets/src/main/webapp/friends.xml?rev=1357920&r1=1357919&r2=1357920&view=diff
==============================================================================
--- rave/trunk/rave-demo-gadgets/src/main/webapp/friends.xml (original)
+++ rave/trunk/rave-demo-gadgets/src/main/webapp/friends.xml Thu Jul  5 
21:08:27 2012
@@ -22,52 +22,22 @@
 <Module>
   <ModulePrefs title="Friends" author="Viknes Balasubramanee"
 description="This gadget display the list of friends for a particular user">
-    <Require feature="opensocial-0.9"/>
+    <Require feature="opensocial-2.5"/>
     <Require feature="dynamic-height" />
   </ModulePrefs>
   <Content type="html">
     <![CDATA[
-      <script type="text/javascript">
-        function loadFriends() {
-          var req = opensocial.newDataRequest();
-                                       
req.add(req.newFetchPersonRequest(opensocial.IdSpec.PersonId.VIEWER), 'viewer');
-                                       
req.add(req.newFetchPersonRequest(opensocial.IdSpec.PersonId.OWNER), 'owner');
-                                       var viewerFriends = 
opensocial.newIdSpec({ "userId" : "VIEWER", "groupId" : "FRIENDS" });
-                                       var ownerFriends = 
opensocial.newIdSpec({ "userId" : "OWNER", "groupId" : "FRIENDS" });
-                                       var opt_params = {};
-                                       
opt_params[opensocial.DataRequest.PeopleRequestFields.MAX] = 100;
-          req.add(req.newFetchPeopleRequest(viewerFriends, opt_params), 
'viewerFriends');
-          req.add(req.newFetchPeopleRequest(ownerFriends, opt_params), 
'ownerFriends');
+               <script type="text/javascript" src="friendsWrapper.js"></script>
+               <script type="text/javascript">
 
-          req.send(onLoadFriends);
-        }
+               function init() {
+                 social = new friendsWrapper();
+                 social.loadFriends();
+               }
+               gadgets.util.registerOnLoadHandler(init);
 
-        function onLoadFriends(data) {
-          var viewer = data.get('viewer').getData();
-          var viewerFriends = data.get('viewerFriends').getData();
-          var owner = data.get('viewer').getData();
-          var ownerFriends = data.get('ownerFriends').getData();
-
-          html = new Array();
-          html.push(owner.getDisplayName() + '\'s 
Friends('+ownerFriends.size()+') <br>');
-          html.push('<ul>');
-          ownerFriends.each(function(person) {
-            if (person.getId()) {
-              html.push('<li>', person.getDisplayName(), '</li>');
-            }
-          });
-          html.push('</ul>');
-          document.getElementById('friends').innerHTML = html.join('');
-          gadgets.window.adjustHeight();
-        }
-
-        function init() {
-          loadFriends();
-        }
-
-        gadgets.util.registerOnLoadHandler(init);
-      </script>
-      <div id='friends'/>
+       </script>
+       <div id='friends'/>
     ]]>
   </Content>
 </Module>

Added: rave/trunk/rave-demo-gadgets/src/main/webapp/friendsWrapper.js
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-demo-gadgets/src/main/webapp/friendsWrapper.js?rev=1357920&view=auto
==============================================================================
--- rave/trunk/rave-demo-gadgets/src/main/webapp/friendsWrapper.js (added)
+++ rave/trunk/rave-demo-gadgets/src/main/webapp/friendsWrapper.js Thu Jul  5 
21:08:27 2012
@@ -0,0 +1,77 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+
+function friendsWrapper() {
+/*
+ * Loads the owner, the viewer, the owner's friends, and the viewer's
+ * friends and mutual friends between owner and viewer.  Response data is put 
into the variables owner, viewer,
+ * ownerFriends, and viewerFriends, mutualFriends respectively.
+ *
+ *
+ */
+
+       this.loadFriends = function(){
+               var req = opensocial.newDataRequest();
+               
req.add(req.newFetchPersonRequest(opensocial.IdSpec.PersonId.VIEWER), 'viewer');
+               
req.add(req.newFetchPersonRequest(opensocial.IdSpec.PersonId.OWNER), 'owner');
+               var viewerFriends = opensocial.newIdSpec({ "userId" : "VIEWER", 
"groupId" : "FRIENDS" });
+               var ownerFriends = opensocial.newIdSpec({ "userId" : "OWNER", 
"groupId" : "FRIENDS" });
+               var opt_params = {};
+        opt_params[opensocial.DataRequest.PeopleRequestFields.MAX] = 100;
+        req.add(req.newFetchPeopleRequest(viewerFriends, opt_params), 
'viewerFriends');
+        req.add(req.newFetchPeopleRequest(ownerFriends, opt_params), 
'ownerFriends');
+               var params = {};
+        params[opensocial.DataRequest.PeopleRequestFields.MAX] = 100;
+        // Usage of isFriendsWith filter to get mutual friends. filterValue 
should be set to the friend with whom mutual friends is to be found.
+        params[opensocial.DataRequest.PeopleRequestFields.FILTER] = 
opensocial.DataRequest.FilterType.IS_FRIENDS_WITH;
+        params["filterValue"] = opensocial.IdSpec.PersonId.VIEWER;
+        req.add(req.newFetchPeopleRequest(ownerFriends, params), 
'mutualFriends');
+
+        req.send(displayFriends);
+       };
+
+    function displayFriends(data) {
+       var viewer = data.get('viewer').getData();
+       var viewerFriends = data.get('viewerFriends').getData();
+        var owner = data.get('owner').getData();
+        var ownerFriends = data.get('ownerFriends').getData();
+
+        html = new Array();
+        html.push(owner.getDisplayName() + '\'s 
Friends(',ownerFriends.size(),') <br>');
+        html.push('<ul>');
+        ownerFriends.each(function(person) {
+               if (person.getId()) {
+                       html.push('<li>', person.getDisplayName(), '</li>');
+               }
+        });
+        html.push('</ul>');
+        if(owner.getDisplayName()!=viewer.getDisplayName()) {
+               var mutualFriends = data.get('mutualFriends').getData();
+               html.push('Mutual Friends with 
',viewer.getDisplayName(),'(',mutualFriends.size(),') <br>');
+               html.push('<ul>');
+               mutualFriends.each(function(person) {
+               if (person.getId()) {
+                       html.push('<li>', person.getDisplayName(), '</li>');
+               }
+            });
+            html.push('</ul>');
+        }
+        document.getElementById('friends').innerHTML = html.join('');
+        gadgets.window.adjustHeight();
+    }
+}
\ No newline at end of file

Modified: 
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/db/initial_data.sql
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/db/initial_data.sql?rev=1357920&r1=1357919&r2=1357920&view=diff
==============================================================================
--- 
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/db/initial_data.sql 
(original)
+++ 
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/db/initial_data.sql 
Thu Jul  5 21:08:27 2012
@@ -200,9 +200,23 @@ UPDATE RAVE_PORTAL_SEQUENCES SET seq_cou
 
 set @next_person_association = (SELECT seq_count FROM RAVE_PORTAL_SEQUENCES 
WHERE seq_name = @person_association_seq);
 INSERT INTO person_association(entity_id, follower_id, followed_id)
+VALUES (@next_person_association, @user_id_1, @user_id_4);
+UPDATE RAVE_PORTAL_SEQUENCES SET seq_count = (seq_count + 1) WHERE seq_name = 
@person_association_seq;
+
+set @next_person_association = (SELECT seq_count FROM RAVE_PORTAL_SEQUENCES 
WHERE seq_name = @person_association_seq);
+INSERT INTO person_association(entity_id, follower_id, followed_id)
+VALUES (@next_person_association, @user_id_2, @user_id_3);
+UPDATE RAVE_PORTAL_SEQUENCES SET seq_count = (seq_count + 1) WHERE seq_name = 
@person_association_seq;
+
+set @next_person_association = (SELECT seq_count FROM RAVE_PORTAL_SEQUENCES 
WHERE seq_name = @person_association_seq);
+INSERT INTO person_association(entity_id, follower_id, followed_id)
 VALUES (@next_person_association, @user_id_2, @user_id_4);
 UPDATE RAVE_PORTAL_SEQUENCES SET seq_count = (seq_count + 1) WHERE seq_name = 
@person_association_seq;
 
+set @next_person_association = (SELECT seq_count FROM RAVE_PORTAL_SEQUENCES 
WHERE seq_name = @person_association_seq);
+INSERT INTO person_association(entity_id, follower_id, followed_id)
+VALUES (@next_person_association, @user_id_2, @user_id_5);
+UPDATE RAVE_PORTAL_SEQUENCES SET seq_count = (seq_count + 1) WHERE seq_name = 
@person_association_seq;
 -- end user association data --
 
 -- group data --

Modified: 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/DefaultPersonService.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/DefaultPersonService.java?rev=1357920&r1=1357919&r2=1357920&view=diff
==============================================================================
--- 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/DefaultPersonService.java
 (original)
+++ 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/DefaultPersonService.java
 Thu Jul  5 21:08:27 2012
@@ -23,6 +23,7 @@ import com.google.common.collect.Lists;
 import org.apache.rave.opensocial.repository.OpenSocialPersonRepository;
 import org.apache.rave.opensocial.service.SimplePersonService;
 import org.apache.rave.util.CollectionUtils;
+import org.apache.shindig.auth.AbstractSecurityToken;
 import org.apache.shindig.auth.SecurityToken;
 import org.apache.shindig.common.util.ImmediateFuture;
 import org.apache.shindig.protocol.ProtocolException;
@@ -61,6 +62,7 @@ public class DefaultPersonService implem
                                                        Set<String> fields,
                                                        SecurityToken token) 
throws ProtocolException {
 
+       collectionOptions = 
manipulateCollectionOptions(collectionOptions,token);
         List<org.apache.rave.portal.model.Person> people = getPeople(userIds, 
groupId, collectionOptions, token);
         return ImmediateFuture.newInstance(new 
RestfulCollection<Person>(convertPeople(people, fields)));
     }
@@ -212,4 +214,14 @@ public class DefaultPersonService implem
     private static Person convertPerson(org.apache.rave.portal.model.Person 
person, Set<String> fields) {
         return new FieldRestrictingPerson(person, fields);
     }
+
+    private CollectionOptions manipulateCollectionOptions(CollectionOptions 
options, SecurityToken token) {
+       if(options!=null && options.getFilterValue()!=null) {
+            
if(options.getFilterValue().equalsIgnoreCase(AbstractSecurityToken.Keys.OWNER.name()))
+               options.setFilterValue(token.getOwnerId());
+            else 
if(options.getFilterValue().equalsIgnoreCase(AbstractSecurityToken.Keys.VIEWER.name()))
+               options.setFilterValue(token.getViewerId());
+       }
+       return options;
+    }
 }


Reply via email to