Author: mfranklin
Date: Tue Feb 12 21:24:16 2013
New Revision: 1445392

URL: http://svn.apache.org/r1445392
Log:
inverted sorting for streams RAVE-880

Modified:
    
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/DefaultActivityStreamsService.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=1445392&r1=1445391&r2=1445392&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
 Tue Feb 12 21:24:16 2013
@@ -30,6 +30,7 @@ import org.apache.shindig.auth.SecurityT
 import org.apache.shindig.common.util.ImmediateFuture;
 import org.apache.shindig.protocol.ProtocolException;
 import org.apache.shindig.protocol.RestfulCollection;
+import org.apache.shindig.protocol.model.SortOrder;
 import org.apache.shindig.social.core.model.ActivityEntryImpl;
 import org.apache.shindig.social.opensocial.model.ActivityEntry;
 import org.apache.shindig.social.opensocial.model.Person;
@@ -368,16 +369,42 @@ public class DefaultActivityStreamsServi
     }
 
     private List<ActivityEntry> getFromRepository(Set<UserId> userIds, GroupId 
groupId, String appId, Set<String> fields, CollectionOptions options, 
SecurityToken token) {
-        List<ActivityEntry> result = Lists.newArrayList();
+        List<ActivityStreamsEntry> result = Lists.newArrayList();
         Set<String> idSet = getIdSet(userIds, groupId, token);
         for (String id : idSet) {
-            Collection<? extends ActivityStreamsEntry> entries = 
repository.getByUserId(id);
+            List<ActivityStreamsEntry> entries = repository.getByUserId(id);
 
             if (entries!=null){
-                result.addAll(converter.convert(entries));
+                result.addAll(entries);
             }
         }
-        return result;
+        sortByPublished(result, options == null ? null : 
options.getSortOrder());
+        return convert(result);
+    }
+
+    private void sortByPublished(List<ActivityStreamsEntry> result, final 
SortOrder order) {
+        Collections.sort(result, new Comparator<ActivityStreamsEntry>() {
+            @Override
+            public int compare(ActivityStreamsEntry one, ActivityStreamsEntry 
two) {
+                Date publishedOne = one.getPublished();
+                Date publishedTwo = two.getPublished();
+                if (publishedOne == null) {
+                    return publishedTwo == null ? 0 : -1;
+                } else if (publishedTwo == null) {
+                    return 1;
+                } else {
+                    return order != null && order == SortOrder.descending ? 
publishedOne.compareTo(publishedTwo) : publishedTwo.compareTo(publishedOne);
+                }
+            }
+        });
+    }
+
+    private List<ActivityEntry> convert(List<ActivityStreamsEntry> result) {
+        List<ActivityEntry> converted = Lists.newArrayList();
+        for(ActivityStreamsEntry entry : result) {
+            converted.add(converter.convert(entry));
+        }
+        return converted;
     }
 
     /**


Reply via email to