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