Author: raminder
Date: Mon Jul 23 17:25:58 2012
New Revision: 1364726

URL: http://svn.apache.org/viewvc?rev=1364726&view=rev
Log:
Applying patch from Viknes. RAVE-725

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-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
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPersonRepository.java?rev=1364726&r1=1364725&r2=1364726&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
 Mon Jul 23 17:25:58 2012
@@ -19,25 +19,31 @@
 
 package org.apache.rave.portal.repository.impl;
 
+import static org.apache.rave.persistence.jpa.util.JpaUtil.getSingleResult;
+import static org.apache.rave.persistence.jpa.util.JpaUtil.saveOrUpdate;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.commons.lang.StringUtils;
 import org.apache.rave.exception.NotSupportedException;
 import org.apache.rave.portal.model.JpaGroup;
 import org.apache.rave.portal.model.JpaPerson;
+import org.apache.rave.portal.model.JpaUser;
+import org.apache.rave.portal.model.JpaWidget;
 import org.apache.rave.portal.model.Person;
+import org.apache.rave.portal.model.User;
+import org.apache.rave.portal.model.Widget;
 import org.apache.rave.portal.model.conversion.JpaPersonConverter;
 import org.apache.rave.portal.repository.PersonRepository;
 import org.apache.rave.util.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import javax.persistence.TypedQuery;
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.apache.rave.persistence.jpa.util.JpaUtil.getSingleResult;
-import static org.apache.rave.persistence.jpa.util.JpaUtil.saveOrUpdate;
-
 /**
  *
  */
@@ -84,9 +90,30 @@ public class JpaPersonRepository impleme
         return 
CollectionUtils.<Person>toBaseTypedList(friends.getResultList());
     }
 
-    @Override
+
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+       @Override
     public List<Person> findFriends(String username, String appId) {
-        throw new NotSupportedException();
+       List<Person> friendsUsingWidget = new ArrayList<Person>();
+
+       TypedQuery query = 
manager.createNamedQuery(JpaWidget.WIDGET_GET_BY_URL, JpaWidget.class);
+       query.setParameter(JpaWidget.PARAM_URL, appId);
+               final List<JpaWidget> resultList = query.getResultList();
+        Widget widget = getSingleResult(resultList);
+
+        query = 
manager.createNamedQuery(JpaUser.USER_GET_ALL_FOR_ADDED_WIDGET, JpaUser.class);
+        query.setParameter(JpaUser.PARAM_WIDGET_ID, widget.getId());
+        List<User> widgetUsers = query.getResultList();
+
+        List<Person> userFriends = findFriends(username);
+        for(Person userFriend : userFriends) {
+               for (User widgetUser : widgetUsers) {
+                       
if(userFriend.getUsername().equals(widgetUser.getUsername())) {
+                               friendsUsingWidget.add(userFriend);
+                       }
+               }
+       }
+        return friendsUsingWidget;
     }
 
     @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=1364726&r1=1364725&r2=1364726&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
 Mon Jul 23 17:25:58 2012
@@ -57,6 +57,7 @@ public class JpaPersonRepositoryTest {
     private static final String VALID_USER5 = "mario.rossi";
     private static final String INVALID_USERNAME = "INVALID_USERNAME";
     private static final String FEMALE = "female";
+    private static final String NYTIMES_GADGET_APPID = 
"http://widgets.nytimes.com/packages/html/igoogle/topstories.xml";;
 
     @PersistenceContext
     private EntityManager manager;
@@ -142,9 +143,17 @@ public class JpaPersonRepositoryTest {
         repository.findAllConnectedPeopleWithFriend("asdf", "asdf");
     }
 
-    @Test(expected = NotSupportedException.class)
-    public void findFriends() {
-        repository.findFriends("asdf", "asdf");
+    @Test
+    public void findFriendsUsingApp_valid() {
+       List<Person> friendsUsingApp = repository.findFriends(VALID_USER, 
NYTIMES_GADGET_APPID);
+        assertThat(friendsUsingApp.size(), is(equalTo(1)));
+        assertThat(friendsUsingApp.get(0).getUsername(), 
is(equalTo(VALID_USER2)));
+    }
+
+    @Test
+    public void findFriendsUsingApp_invalid() {
+       List<Person> friendsUsingApp = repository.findFriends(INVALID_USERNAME, 
NYTIMES_GADGET_APPID);
+       assertThat(friendsUsingApp.isEmpty(), is(true));
     }
 
     @Test
@@ -225,11 +234,11 @@ public class JpaPersonRepositoryTest {
         person = repository.get(VALID_ID);
         assertThat(person, is(nullValue()));
     }
-    
+
     @Test
     public void read_properties() {
         Person person = repository.get(VALID_ID);
-       assertThat(person.getProperties().size(), is(1)); 
+       assertThat(person.getProperties().size(), is(1));
     }
 
 }

Modified: 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=1364726&r1=1364725&r2=1364726&view=diff
==============================================================================
--- rave/trunk/rave-demo-gadgets/src/main/webapp/friendsWrapper.js (original)
+++ rave/trunk/rave-demo-gadgets/src/main/webapp/friendsWrapper.js Mon Jul 23 
17:25:58 2012
@@ -41,6 +41,11 @@ function friendsWrapper() {
         params[opensocial.DataRequest.PeopleRequestFields.FILTER] = 
opensocial.DataRequest.FilterType.IS_FRIENDS_WITH;
         params["filterValue"] = opensocial.IdSpec.PersonId.VIEWER;
         req.add(req.newFetchPeopleRequest(ownerFriends, params), 
'mutualFriends');
+        var app_params = {};
+        app_params[opensocial.DataRequest.PeopleRequestFields.MAX] = 100;
+        // Usage of hasApp filter to get list of friends who use this app.
+        app_params[opensocial.DataRequest.PeopleRequestFields.FILTER] = 
opensocial.DataRequest.FilterType.HAS_APP;
+        req.add(req.newFetchPeopleRequest(ownerFriends, app_params), 
'friendsUsingApp');
 
         req.send(displayFriends);
        };
@@ -71,6 +76,15 @@ function friendsWrapper() {
             });
             html.push('</ul>');
         }
+        var friendsUsingApp = data.get('friendsUsingApp').getData();
+       html.push('Friends using this Widget (',friendsUsingApp.size(),') 
<br>');
+       html.push('<ul>');
+       friendsUsingApp.each(function(person) {
+               if (person.getId()) {
+                       html.push('<li>', person.getDisplayName(), '</li>');
+               }
+        });
+        html.push('</ul>');
         document.getElementById('friends').innerHTML = html.join('');
         gadgets.window.adjustHeight();
     }


Reply via email to