Author: mfranklin
Date: Fri Feb 15 19:38:31 2013
New Revision: 1446740
URL: http://svn.apache.org/r1446740
Log:
Updated activity stream so that it populates user information from database
Modified:
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/DefaultActivityStreamsService.java
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/opensocial/service/DefaultActivityStreamsServiceTest.java
Modified:
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/DefaultActivityStreamsService.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/DefaultActivityStreamsService.java?rev=1446740&r1=1446739&r2=1446740&view=diff
==============================================================================
---
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/DefaultActivityStreamsService.java
(original)
+++
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/DefaultActivityStreamsService.java
Fri Feb 15 19:38:31 2013
@@ -21,11 +21,15 @@ package org.apache.rave.opensocial.servi
import com.google.common.collect.ImmutableSortedSet;
import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import org.apache.rave.portal.model.ActivityStreamsEntry;
+import org.apache.rave.portal.model.ActivityStreamsObject;
import org.apache.rave.portal.model.impl.ActivityStreamsEntryImpl;
+import org.apache.rave.portal.model.impl.ActivityStreamsMediaLinkImpl;
import org.apache.rave.portal.repository.ActivityStreamsRepository;
import org.apache.rave.util.ActivityConversionUtil;
+import org.apache.shindig.auth.BasicSecurityToken;
import org.apache.shindig.auth.SecurityToken;
import org.apache.shindig.common.util.ImmediateFuture;
import org.apache.shindig.protocol.ProtocolException;
@@ -47,6 +51,7 @@ import java.util.logging.Logger;
@Service
public class DefaultActivityStreamsService implements ActivityStreamService {
+ public static final String OBJECT_TYPE_PERSON = "person";
@Autowired
private ActivityStreamsRepository repository;
@@ -85,7 +90,6 @@ public class DefaultActivityStreamsServi
@Override
public Future<RestfulCollection<ActivityEntry>>
getActivityEntries(Set<UserId> userIds, GroupId groupId, String appId,
Set<String> fields, CollectionOptions options, SecurityToken token) {
List<ActivityEntry> result = getFromRepository(userIds, groupId,
appId, fields, options, token);
-
return ImmediateFuture.newInstance(new
RestfulCollection<ActivityEntry>(result));
}
@@ -110,19 +114,11 @@ public class DefaultActivityStreamsServi
*/
@Override
public Future<RestfulCollection<ActivityEntry>> getActivityEntries(UserId
userId, GroupId groupId, String appId, Set<String> fields, CollectionOptions
options, Set<String> activityIds, SecurityToken token) throws ProtocolException
{
-
- String uid = userId.getUserId(token);
-
List<ActivityEntry> entries = Lists.newLinkedList();
+ Map<String, Person> peopleById = Maps.newHashMap();
for (String id : activityIds) {
- ActivityStreamsEntry entry = repository.get(id);
-
- if (entry!=null){
- if (entry.getUserId().equalsIgnoreCase(uid)) {
- entries.add(filterFields(entry, fields));
- }
- }
+ entries.add(getActivity(fields, userId.getUserId(token),
peopleById, id));
}
return ImmediateFuture.newInstance(new
RestfulCollection<ActivityEntry>(entries));
@@ -146,21 +142,7 @@ public class DefaultActivityStreamsServi
*/
@Override
public Future<ActivityEntry> getActivityEntry(UserId userId, GroupId
groupId, String appId, Set<String> fields, String activityId, SecurityToken
token) throws ProtocolException {
-
- String uid = userId.getUserId(token);
-
- ActivityStreamsEntry entry = repository.get(activityId);
-
- if (entry!=null){
- if (entry.getUserId().equalsIgnoreCase(uid)) {
- ActivityEntry activityEntry = filterFields(entry, fields);
- return ImmediateFuture.newInstance(activityEntry);
- } else {
- //TODO: Throw an error?
- }
- }
-
- return null;
+ return ImmediateFuture.newInstance(getActivity(fields,
userId.getUserId(token), Maps.<String, Person>newHashMap(), activityId));
}
/**
@@ -321,6 +303,18 @@ public class DefaultActivityStreamsServi
return ids;
}
+ private ActivityEntry getActivity(Set<String> fields, String uid,
Map<String, Person> peopleById, String id) {
+ ActivityStreamsEntry entry = repository.get(id);
+
+ if (entry!=null){
+ if (entry.getUserId().equalsIgnoreCase(uid)) {
+ populatePersonObjects(entry, peopleById);
+ return filterFields(entry, fields);
+ }
+ }
+ return null;
+ }
+
//From JsonDbOpensocialService
private Set<String> getIdSet(UserId user, GroupId group, SecurityToken
token) {
String userId = user.getUserId(token);
@@ -370,18 +364,26 @@ public class DefaultActivityStreamsServi
private List<ActivityEntry> getFromRepository(Set<UserId> userIds, GroupId
groupId, String appId, Set<String> fields, CollectionOptions options,
SecurityToken token) {
List<ActivityStreamsEntry> result = Lists.newArrayList();
+ Map<String, Person> peopleById = Maps.newHashMap();
Set<String> idSet = getIdSet(userIds, groupId, token);
for (String id : idSet) {
List<ActivityStreamsEntry> entries = repository.getByUserId(id);
if (entries!=null){
- result.addAll(entries);
+ result.addAll(populateActivityEntries(entries, peopleById));
}
}
sortByPublished(result, options == null ? null :
options.getSortOrder());
return convert(result);
}
+ private List<ActivityStreamsEntry>
populateActivityEntries(List<ActivityStreamsEntry> entries, Map<String, Person>
peopleById) {
+ for(ActivityStreamsEntry entry : entries) {
+ populatePersonObjects(entry, peopleById);
+ }
+ return entries;
+ }
+
private void sortByPublished(List<ActivityStreamsEntry> result, final
SortOrder order) {
Collections.sort(result, new Comparator<ActivityStreamsEntry>() {
@Override
@@ -407,6 +409,40 @@ public class DefaultActivityStreamsServi
return converted;
}
+ private void populatePersonObjects(ActivityStreamsEntry entry, Map<String,
Person> peopleById) {
+ ActivityStreamsObject actor = entry.getActor();
+ if(OBJECT_TYPE_PERSON.equals(actor.getObjectType())) {
+ populatePerson(peopleById, actor);
+ }
+ if(OBJECT_TYPE_PERSON.equals(entry.getObject().getObjectType())) {
+ populatePerson(peopleById, entry.getObject());
+ }
+ }
+
+ private void populatePerson(Map<String, Person> peopleById,
ActivityStreamsObject actor) {
+ String id = actor.getId();
+ Person person = peopleById.containsKey(id) ? peopleById.get(id) :
getPerson(id);
+ if(person != null) {
+ peopleById.put(id, person);
+ actor.setUrl(person.getProfileUrl());
+ actor.setDisplayName(person.getDisplayName());
+ ActivityStreamsMediaLinkImpl image = new
ActivityStreamsMediaLinkImpl();
+ image.setUrl(person.getThumbnailUrl());
+ actor.setImage(image);
+ }
+ }
+
+ private Person getPerson(String id) {
+ Person person;
+ SecurityToken token = new BasicSecurityToken(null, id, null, null,
null, null, null, null, null);
+ try {
+ person = personService.getPerson(new UserId(UserId.Type.viewer,
id), null, token).get();
+ } catch (Exception e) {
+ throw new RuntimeException("Unable to retrieve person", e);
+ }
+ return person;
+ }
+
/**
* @return the repository
*/
Modified:
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/opensocial/service/DefaultActivityStreamsServiceTest.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/opensocial/service/DefaultActivityStreamsServiceTest.java?rev=1446740&r1=1446739&r2=1446740&view=diff
==============================================================================
---
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/opensocial/service/DefaultActivityStreamsServiceTest.java
(original)
+++
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/opensocial/service/DefaultActivityStreamsServiceTest.java
Fri Feb 15 19:38:31 2013
@@ -237,7 +237,7 @@ public class DefaultActivityStreamsServi
Future<ActivityEntry> activity =
service.getActivityEntry(id,groupId,APP_ID,fields,ACTIVITY_ID,token);
- assertThat(activity, is(nullValue()));
+ assertThat(activity.get(), is(nullValue()));
}