feeds) {
- if (feeds != null) {
+ public void onSuccess(MoreFeedsBean rangeFeeds) {
+ newsPanel.remove(showMoreUpdatesPanel);
+ if (rangeFeeds.getFeeds() != null) {
+ fromStartingPoint = rangeFeeds.getLastReturnedFeedTimelineIndex();
int c = 1;
- for (EnhancedFeed feed : feeds) {
- newsPanel.add(new TweetTemplate(false, showFeedTimelineSource, myUserInfo, feed, eventBus)); //in the view
- allUpdates.add(feed); //in the model
+ for (EnhancedFeed feed : rangeFeeds.getFeeds()) {
+ if (!isFeedPresent(feed)) { //avoid possible duplicates
+ newsPanel.add(new TweetTemplate(false, showFeedTimelineSource, myUserInfo, feed, eventBus)); //in the view
+ allUpdates.add(feed); //in the model
+ }
c++;
}
if (c >= quantity) { //there could be more feeds
GWT.log("there could be more feeds");
+ showMoreUpdatesPanel.clear();
+ showMoreUpdatesPanel.add(new ShowMoreFeeds(eventBus));
newsPanel.add(showMoreUpdatesPanel);
}
}
}
@Override
public void onFailure(Throwable caught) {
+ showMoreUpdatesPanel.clear();
newsPanel.add(new HTML("" +
"Ops! There were problems while retrieving your feeds!.
" +
"Please try again in a short while.
"));
}
});
}
+
+ private boolean isFeedPresent(EnhancedFeed toCheck) {
+ for (EnhancedFeed feed : allUpdates) {
+ if (feed.getFeed().getKey().compareTo(toCheck.getFeed().getKey()) == 0)
+ return true;
+ }
+ return false;
+ }
/**
* Only User Connections
*/
diff --git a/src/main/java/org/gcube/portlets/user/newsfeed/server/NewsServiceImpl.java b/src/main/java/org/gcube/portlets/user/newsfeed/server/NewsServiceImpl.java
index 5143235..89077be 100644
--- a/src/main/java/org/gcube/portlets/user/newsfeed/server/NewsServiceImpl.java
+++ b/src/main/java/org/gcube/portlets/user/newsfeed/server/NewsServiceImpl.java
@@ -28,6 +28,7 @@ import org.gcube.portal.databook.server.DatabookStore;
import org.gcube.portal.databook.shared.Comment;
import org.gcube.portal.databook.shared.Feed;
import org.gcube.portal.databook.shared.Like;
+import org.gcube.portal.databook.shared.RangeFeeds;
import org.gcube.portal.databook.shared.UserInfo;
import org.gcube.portal.databook.shared.ex.ColumnNameNotFoundException;
import org.gcube.portal.databook.shared.ex.FeedIDNotFoundException;
@@ -35,6 +36,7 @@ import org.gcube.portal.databook.shared.ex.FeedTypeNotFoundException;
import org.gcube.portal.databook.shared.ex.PrivacyLevelTypeNotFoundException;
import org.gcube.portlets.user.newsfeed.client.NewsService;
import org.gcube.portlets.user.newsfeed.shared.EnhancedFeed;
+import org.gcube.portlets.user.newsfeed.shared.MoreFeedsBean;
import org.gcube.portlets.user.newsfeed.shared.UserSettings;
import org.gcube.vomanagement.usermanagement.GroupManager;
import org.gcube.vomanagement.usermanagement.impl.liferay.LiferayGroupManager;
@@ -70,6 +72,7 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService
private static final String SESSION_ADMIN_ATTR = "SESSION_ADMIN_ATTR";
private static final String USER_SETTINGS_ATTR = "USER_SETTINGS_ATTR";
+
/**
*
*/
@@ -97,8 +100,8 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService
if (user == null) {
_log.warn("USER IS NULL setting testing user and Running OUTSIDE PORTAL");
user = "test.user";
- user = "massimiliano.assante";
- SessionManager.getInstance().getASLSession(sessionID, user).setScope("/gcube/devsec/devVRE");
+// user = "massimiliano.assante";
+// SessionManager.getInstance().getASLSession(sessionID, user).setScope("/gcube/devsec/TestVREFolder2");
}
else {
withinPortal = true;
@@ -309,20 +312,25 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService
return new EnhancedFeed();
}
/**
+ * MoreFeedsBean contains the timeline index of the last returned valid feed (because if you delete a feed is stays on in the timeline and is marked deleted)
+ * and contains the Feeds
* @param strat the range start (most recent feeds for this vre) has to be greater than 0
* @param quantity the number of most recent feeds for this vre starting from "start" param
*/
@Override
- public ArrayList getMoreFeeds(int start, int quantity) {
+ public MoreFeedsBean getMoreFeeds(int start, int quantity) {
ArrayList toMerge = new ArrayList();
HashMap feedsMap = new HashMap();
String vreid = getASLSession().getScope();
- _log.debug("Asking more feed for Timeline " + vreid + " from " + start + " get other " + quantity);
- ArrayList OrganizationFeeds;
+ _log.debug("\n\nAsking more feed for Timeline " + vreid + " from " + start + " get other " + quantity);
+ ArrayList organizationFeeds;
+ RangeFeeds rangeFeeds = null;
try {
- OrganizationFeeds = (ArrayList) store.getRecentFeedsByVREAndRange(vreid, start, quantity);
- for (Feed feed : OrganizationFeeds) {
- feedsMap.put(feed.getKey(), feed);
+ rangeFeeds = store.getRecentFeedsByVREAndRange(vreid, start, quantity);
+ organizationFeeds = rangeFeeds.getFeeds();
+ for (Feed feed : organizationFeeds) {
+ feedsMap.put(feed.getKey(), feed);
+ //System.out.println("->\n"+feed.getDescription());
}
}
catch (Exception e) {
@@ -335,8 +343,8 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService
}
//sort the feeds in reverse chronological order
Collections.sort(toMerge, Collections.reverseOrder());
-
- return enhanceFeeds(toMerge, 2);
+ ArrayList toReturn = enhanceFeeds(toMerge, 2);
+ return new MoreFeedsBean(rangeFeeds.getLastReturnedFeedTimelineIndex(), toReturn);
}
/**
* just for testing purposes
@@ -352,7 +360,7 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService
ArrayList toMerge = new ArrayList();
HashMap feedsMap = new HashMap();
- ArrayList OrganizationFeeds = (ArrayList) store.getRecentFeedsByVRE("/gcube/devsec/devVRE", 5);
+ ArrayList OrganizationFeeds = (ArrayList) store.getRecentFeedsByVRE(getASLSession().getScope(), 5);
for (Feed feed : OrganizationFeeds) {
feedsMap.put(feed.getKey(), feed);
_log.trace("Reading desc: " + feed.getDescription());
diff --git a/src/main/java/org/gcube/portlets/user/newsfeed/shared/MoreFeedsBean.java b/src/main/java/org/gcube/portlets/user/newsfeed/shared/MoreFeedsBean.java
new file mode 100644
index 0000000..bcae427
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/newsfeed/shared/MoreFeedsBean.java
@@ -0,0 +1,42 @@
+package org.gcube.portlets.user.newsfeed.shared;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+
+@SuppressWarnings("serial")
+public class MoreFeedsBean implements Serializable {
+ private int lastReturnedFeedTimelineIndex;
+ private ArrayList feeds;
+
+ public MoreFeedsBean() {
+ super();
+ }
+
+ public MoreFeedsBean(int lastReturnedFeedTimelineIndex,
+ ArrayList feeds) {
+ super();
+ this.lastReturnedFeedTimelineIndex = lastReturnedFeedTimelineIndex;
+ this.feeds = feeds;
+ }
+
+ public int getLastReturnedFeedTimelineIndex() {
+ return lastReturnedFeedTimelineIndex;
+ }
+ public void setLastReturnedFeedTimelineIndex(int lastReturnedFeedTimelineIndex) {
+ this.lastReturnedFeedTimelineIndex = lastReturnedFeedTimelineIndex;
+ }
+ public ArrayList getFeeds() {
+ return feeds;
+ }
+ public void setFeeds(ArrayList feeds) {
+ this.feeds = feeds;
+ }
+
+ @Override
+ public String toString() {
+ return "MoreFeedsBean [lastReturnedFeedTimelineIndex="
+ + lastReturnedFeedTimelineIndex + ", feeds=" + feeds + "]";
+ }
+
+
+}