From 4b3cd43ef4d03fa98bcb40af02abe8875b29da39 Mon Sep 17 00:00:00 2001 From: Costantino Perciante Date: Wed, 3 Aug 2016 14:29:59 +0000 Subject: [PATCH] added support to show feeds related to user's statistics fixed time for comments/posts: the year is now present if the comment/post was made before the current one git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portlets/user/news-feed@130961 82a268e6-3cf1-43bd-a215-b396298e98cf --- distro/changelog.xml | 9 + pom.xml | 2 +- .../user/newsfeed/client/NewsService.java | 3 + .../newsfeed/client/NewsServiceAsync.java | 4 + .../newsfeed/client/panels/NewsFeedPanel.java | 166 +++++++++++++++++- .../newsfeed/client/ui/SingleComment.java | 66 ++++--- .../newsfeed/client/ui/TweetTemplate.java | 20 ++- .../user/newsfeed/server/NewsServiceImpl.java | 94 +++++++++- 8 files changed, 320 insertions(+), 44 deletions(-) diff --git a/distro/changelog.xml b/distro/changelog.xml index f8997ea..6460456 100644 --- a/distro/changelog.xml +++ b/distro/changelog.xml @@ -1,4 +1,13 @@ + + Support to show feeds related to user's statistics added + + Fixed time for comments/posts: the year is present only if the + comment/post + was made before the current one + + Updated for Liferay 6.2.5 diff --git a/pom.xml b/pom.xml index 64f0411..515e55c 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ org.gcube.portlets.user news-feed war - 2.0.0-SNAPSHOT + 2.1.0-SNAPSHOT gCube News Feed Portlet diff --git a/src/main/java/org/gcube/portlets/user/newsfeed/client/NewsService.java b/src/main/java/org/gcube/portlets/user/newsfeed/client/NewsService.java index d75ef83..cf7252e 100644 --- a/src/main/java/org/gcube/portlets/user/newsfeed/client/NewsService.java +++ b/src/main/java/org/gcube/portlets/user/newsfeed/client/NewsService.java @@ -6,6 +6,7 @@ import java.util.HashSet; import org.gcube.portal.databook.shared.Comment; import org.gcube.portal.databook.shared.EnhancedFeed; import org.gcube.portal.databook.shared.Like; +import org.gcube.portal.databook.shared.ShowUserStatisticAction; import org.gcube.portlets.user.newsfeed.shared.MoreFeedsBean; import org.gcube.portlets.user.newsfeed.shared.OperationResult; import org.gcube.portlets.user.newsfeed.shared.UserSettings; @@ -31,6 +32,8 @@ public interface NewsService extends RemoteService { ArrayList getFeedsByQuery(String query, int from, int quantity); + ArrayList getFeedsRelatedToUserStatistics(ShowUserStatisticAction action, int from, int quantity); + MoreFeedsBean getMoreFeeds(int from, int quantity); boolean like(String feedid, String feedText, String feedOwnerId); diff --git a/src/main/java/org/gcube/portlets/user/newsfeed/client/NewsServiceAsync.java b/src/main/java/org/gcube/portlets/user/newsfeed/client/NewsServiceAsync.java index cd98017..39282dc 100644 --- a/src/main/java/org/gcube/portlets/user/newsfeed/client/NewsServiceAsync.java +++ b/src/main/java/org/gcube/portlets/user/newsfeed/client/NewsServiceAsync.java @@ -6,6 +6,7 @@ import java.util.HashSet; import org.gcube.portal.databook.shared.Comment; import org.gcube.portal.databook.shared.EnhancedFeed; import org.gcube.portal.databook.shared.Like; +import org.gcube.portal.databook.shared.ShowUserStatisticAction; import org.gcube.portlets.user.newsfeed.shared.MoreFeedsBean; import org.gcube.portlets.user.newsfeed.shared.OperationResult; import org.gcube.portlets.user.newsfeed.shared.UserSettings; @@ -66,5 +67,8 @@ public interface NewsServiceAsync { void getFeedsByQuery(String query, int from, int quantity, AsyncCallback> callback); + + void getFeedsRelatedToUserStatistics(ShowUserStatisticAction action, int from, int quantity, + AsyncCallback> callback); } diff --git a/src/main/java/org/gcube/portlets/user/newsfeed/client/panels/NewsFeedPanel.java b/src/main/java/org/gcube/portlets/user/newsfeed/client/panels/NewsFeedPanel.java index 90b4492..04ec325 100644 --- a/src/main/java/org/gcube/portlets/user/newsfeed/client/panels/NewsFeedPanel.java +++ b/src/main/java/org/gcube/portlets/user/newsfeed/client/panels/NewsFeedPanel.java @@ -17,6 +17,7 @@ import org.gcube.portal.databook.shared.Feed; import org.gcube.portal.databook.shared.FeedType; import org.gcube.portal.databook.shared.Like; import org.gcube.portal.databook.shared.PrivacyLevel; +import org.gcube.portal.databook.shared.ShowUserStatisticAction; import org.gcube.portal.databook.shared.UserInfo; import org.gcube.portlets.user.gcubewidgets.client.ClientScopeHelper; import org.gcube.portlets.user.newsfeed.client.FilterType; @@ -123,6 +124,7 @@ public class NewsFeedPanel extends Composite { public static final String COMMENT_LABEL = "Reply"; public static final String SHARE_FWD_LABEL = "Share"; private static final int SEARCHED_FEEDS_TO_SHOW = 10; + private static final int FEEDS_RELATED_TO_USER_STATISTICS_TO_SHOW = 10; private String vreLabel; @@ -141,6 +143,12 @@ public class NewsFeedPanel extends Composite { // the current query (if isSearch is true) protected String currentQuery; + // is the user seeing her statistics? + private boolean isFeedsRelatedToStatistics = false; + + // the feeds related to user statistics to show + protected ShowUserStatisticAction relatedFeedsToUserStatisticsToShow; + private LoadingText loadingIcon = new LoadingText(); private Image loadingImage; private UserInfo myUserInfo; @@ -271,6 +279,7 @@ public class NewsFeedPanel extends Composite { newsPanel.add(loadingIcon); CheckSession.getInstance().startPolling(); isSearch = false; + isFeedsRelatedToStatistics = false; newsService.getUserSettings(new AsyncCallback() { @Override @@ -322,7 +331,21 @@ public class NewsFeedPanel extends Composite { isSearch = true; showFeedsSearch(query, 0, SEARCHED_FEEDS_TO_SHOW); filterPanel.removeFilterSelected(); - } + }else if(getShowUserStatisticParam() != null){ + String action = ""; + try { + action = Encoder.decode(getShowUserStatisticParam()); + relatedFeedsToUserStatisticsToShow = ShowUserStatisticAction.valueOf(action); + } catch (Exception e) { + newsPanel.clear(); + newsPanel.add(new HTML("
" + + "We're sorry, it seems you used an invalid character
")); + return; + } + isFeedsRelatedToStatistics = true; + showUserStatisticsRelatedFeeds(relatedFeedsToUserStatisticsToShow, 0, FEEDS_RELATED_TO_USER_STATISTICS_TO_SHOW); + filterPanel.removeFilterSelected(); + } else { showAllUpdatesFeeds(); } @@ -334,8 +357,8 @@ public class NewsFeedPanel extends Composite { showFeedTimelineSource = result.isShowTimelineSourceLabel(); isInfrastructure = true; } -// else -// mainPanel.addStyleName("framed"); + // else + // mainPanel.addStyleName("framed"); } }); @@ -399,6 +422,14 @@ public class NewsFeedPanel extends Composite { return Window.Location.getParameter(Encoder.encode(GCubeSocialNetworking.HASHTAG_OID)); } + /** + * Check if some user statistic related feeds must be shown + * @return + */ + private String getShowUserStatisticParam(){ + return Window.Location.getParameter(Encoder.encode(GCubeSocialNetworking.SHOW_STATISTICS_ACTION_OID)); + } + /** * check if it has to show the feeds given a query * @return @@ -568,6 +599,85 @@ public class NewsFeedPanel extends Composite { }); } + /** + * Called when a user wants to show some feeds related to her statistics + */ + private void showUserStatisticsRelatedFeeds(final ShowUserStatisticAction relatedFeedsToUserStatisticsToShow, final int from, final int to) { + + // show loader while waiting + showLoader(); + + // stop asking for feeds + doStopFeedsTimer(); + + final String actionToPrint = relatedFeedsToUserStatisticsToShow.getHumanFriendlyAction(); + + newsService.getUserSettings(new AsyncCallback() { + @Override + public void onFailure(Throwable caught) { + } + @Override + public void onSuccess(UserSettings result) { + if (result.getUserInfo().getUsername().equals(NewsConstants.TEST_USER)) { + doShowSessionExpired(); + } else { + /** + * this check avoids the 2 tabs open in 2 different scope, if the previous tab was open at VRE Level and then antoher + * is open at infra level the first tab stops checking for updates + */ + if (result.getCurrentScope().compareTo(currentScope) == 0) { + newsService.getFeedsRelatedToUserStatistics(relatedFeedsToUserStatisticsToShow, from, to, new AsyncCallback>() { + + @Override + public void onSuccess(ArrayList feeds) { + + filterPanelWrapper.setVisible(false); + newsPanel.clear(); + if (feeds != null) { + + GWT.log("Retrieved " + feeds.size() + " hits for search."); + if (feeds.size() == 0) { + newsPanel.add(new ResultsFor("Results for ", actionToPrint)); + newsPanel.add(new HTML("
" + + "Sorry, looks like we found no match for action : " + actionToPrint +"
")); + } + else { + newsPanel.setHeight(""); + newsPanel.setHorizontalAlignment(HasAlignment.ALIGN_LEFT); + newsPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_TOP); + newsPanel.add(new ResultsFor("Results for ", actionToPrint)); + for (EnhancedFeed feed : feeds) { + newsPanel.add(new TweetTemplate(false, showFeedTimelineSource, myUserInfo, feed, eventBus)); //in the view + // save them (they will be used when asking more feeds) + allUpdates.add(feed); + } + if (feeds.size() < 5) { + newsPanel.add(new Image(spacer)); + } + + // add widget to lookup more feeds: if the size of the returned data is less + // than the required disable this feature. + if(feeds.size() == FEEDS_RELATED_TO_USER_STATISTICS_TO_SHOW){ + showMoreWidget = new ShowMoreFeeds(eventBus); + showMoreUpdatesPanel.add(showMoreWidget); + newsPanel.add(showMoreUpdatesPanel); + } + } + } else { + showProblems(); + } + } + @Override + public void onFailure(Throwable caught) { + showProblems(); + } + }); + } + } + } + }); + } + /** * Called when a user search something */ @@ -578,7 +688,7 @@ public class NewsFeedPanel extends Composite { // stop asking for feeds doStopFeedsTimer(); - + newsService.getUserSettings(new AsyncCallback() { @Override public void onFailure(Throwable caught) { @@ -784,7 +894,7 @@ public class NewsFeedPanel extends Composite { newsPanel.setHeight(""); newsPanel.setHorizontalAlignment(HasAlignment.ALIGN_LEFT); newsPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_TOP); - + for (EnhancedFeed feed : feeds) { newsPanel.add(new TweetTemplate(false, showFeedTimelineSource, myUserInfo, feed, eventBus)); //in the view allUpdates.add(feed); //in the model @@ -850,7 +960,7 @@ public class NewsFeedPanel extends Composite { // clear panel showMoreUpdatesPanel.clear(); - + // check if we can ask for other data if(feeds.size() == SEARCHED_FEEDS_TO_SHOW){ GWT.log("It seems there are no more feeds for this query. Stop asking further"); @@ -870,6 +980,50 @@ public class NewsFeedPanel extends Composite { "Please try again in a short while.
")); } }); + }else if(isFeedsRelatedToStatistics){ + GWT.log("Going to request more feeds for this user's statisics"); + + // start position + int start = allUpdates.size(); + + GWT.log("StartingPoint = " + start); + newsService.getFeedsRelatedToUserStatistics(relatedFeedsToUserStatisticsToShow, start, FEEDS_RELATED_TO_USER_STATISTICS_TO_SHOW , new AsyncCallback>() { + @Override + public void onSuccess(ArrayList feeds){ + newsPanel.remove(showMoreUpdatesPanel); + if (feeds != null) { + GWT.log("There are " + feeds.size() + " more feeds"); + + for (EnhancedFeed feed : feeds) { + // avoid to insert same data + if(!isFeedPresent(feed)){ + newsPanel.add(new TweetTemplate(false, showFeedTimelineSource, myUserInfo, feed, eventBus)); //in the view + allUpdates.add(feed); + } + } + + // clear panel + showMoreUpdatesPanel.clear(); + + // check if we can ask for other data + if(feeds.size() == FEEDS_RELATED_TO_USER_STATISTICS_TO_SHOW){ + GWT.log("It seems there are no more feeds for this query. Stop asking further"); + showMoreWidget = new ShowMoreFeeds(eventBus); + showMoreUpdatesPanel.add(showMoreWidget); + newsPanel.add(showMoreUpdatesPanel); + }else{ + showMoreWidget = null; + } + } + } + @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.
")); + } + }); } else{ diff --git a/src/main/java/org/gcube/portlets/user/newsfeed/client/ui/SingleComment.java b/src/main/java/org/gcube/portlets/user/newsfeed/client/ui/SingleComment.java index f6c8481..5dd7b4c 100644 --- a/src/main/java/org/gcube/portlets/user/newsfeed/client/ui/SingleComment.java +++ b/src/main/java/org/gcube/portlets/user/newsfeed/client/ui/SingleComment.java @@ -1,7 +1,8 @@ package org.gcube.portlets.user.newsfeed.client.ui; +import java.util.Date; + import org.gcube.common.portal.GCubePortalConstants; -import org.gcube.common.portal.PortalContext; import org.gcube.portal.databook.client.GCubeSocialNetworking; import org.gcube.portal.databook.client.util.Encoder; import org.gcube.portal.databook.shared.Comment; @@ -32,7 +33,7 @@ public class SingleComment extends Composite { interface SingleCommentUiBinder extends UiBinder { } private static final int MAX_SHOWTEXT_LENGTH = 450; - + private boolean isUsers = false; private TweetTemplate owner; private String myCommentid; @@ -56,7 +57,7 @@ public class SingleComment extends Composite { myCommentid = toShow.getKey(); avatarImage.setPixelSize(30, 30); avatarImage.setUrl(toShow.getThumbnailURL()); - + //check if the user has his own avatar if (toShow.getThumbnailURL().endsWith("img_id=0") || !toShow.getThumbnailURL().contains("?")) { //it means no avatar is set avatarImage.setVisible(false); @@ -75,15 +76,15 @@ public class SingleComment extends Composite { avatarReplacement.setInitials(toShow.getUserid(), f, s); avatarReplacement.setVisible(true); } - + String commentToShow = toShow.getText(); - + //replace the < & and > commentToShow = commentToShow.replaceAll("<","<").replaceAll(">",">"); commentToShow = commentToShow.replaceAll("&","&"); - - + + if (commentToShow.length() > MAX_SHOWTEXT_LENGTH) { final int TEXT_TO_SHOW_LENGHT = (commentToShow.length() < 700) ? (commentToShow.length() - (commentToShow.length() / 3)) : 700; commentToShow = commentToShow.substring(0, TEXT_TO_SHOW_LENGHT) + "..."; @@ -92,14 +93,33 @@ public class SingleComment extends Composite { final String profilePageURL = GCubePortalConstants.PREFIX_GROUP_URL + ClientScopeHelper.extractOrgFriendlyURL(Location.getHref()) +GCubePortalConstants.USER_PROFILE_FRIENDLY_URL; commentText.setHTML(""+toShow.getFullName()+ - " " + commentToShow); - if(toShow.isEdit()) - timeArea.setHTML(DateTimeFormat.getFormat("MMMM dd, h:mm a").format(toShow.getTime()) + - " (Last edit on " + DateTimeFormat.getFormat("MMMM dd, h:mm a").format(toShow.getLastEditTime()) + ")"); + Encoder.encode(GCubeSocialNetworking.USER_PROFILE_OID)+"="+ + Encoder.encode(toShow.getUserid())+"\">"+toShow.getFullName()+ + " " + commentToShow); + + // Comment's data + Date now = new Date(); + String formattedTime; + String formattedTimeEdit = null; + + if(now.getYear() != toShow.getTime().getYear()) + formattedTime = DateTimeFormat.getFormat("MMMM dd yyyy, h:mm a").format(toShow.getTime()); else - timeArea.setHTML(DateTimeFormat.getFormat("MMMM dd, h:mm a").format(toShow.getTime())); + formattedTime = DateTimeFormat.getFormat("MMMM dd, h:mm a").format(toShow.getTime()); + + if(toShow.isEdit()){ + if(now.getYear() != toShow.getLastEditTime().getYear()) + formattedTimeEdit = DateTimeFormat.getFormat("MMMM dd yyyy, h:mm a").format(toShow.getLastEditTime()); + else + formattedTimeEdit = DateTimeFormat.getFormat("MMMM dd, h:mm a").format(toShow.getLastEditTime()); + } + + if(toShow.isEdit()) + timeArea.setHTML(formattedTime + + " (Last edit on " + formattedTimeEdit + ")"); + else + timeArea.setHTML(formattedTime); + if (isUsers) { closeImage.setStyleName("closeImage"); closeImage.setTitle("Delete"); @@ -107,24 +127,24 @@ public class SingleComment extends Composite { editImage.setTitle("Edit"); } } - + @UiHandler("seeMore") void onSeeMoreClick(ClickEvent e) { String commentToShow = myComment.getText(); //replace the < & and > commentToShow = commentToShow.replaceAll("<","<").replaceAll(">",">"); commentToShow = commentToShow.replaceAll("&","&"); - + final String profilePageURL = GCubePortalConstants.PREFIX_GROUP_URL + ClientScopeHelper.extractOrgFriendlyURL(Location.getHref()) +GCubePortalConstants.USER_PROFILE_FRIENDLY_URL; commentText.setHTML(""+ - myComment.getFullName()+" " + commentToShow); + Encoder.encode(GCubeSocialNetworking.USER_PROFILE_OID)+"="+ + Encoder.encode(myComment.getUserid())+"\">"+ + myComment.getFullName()+" " + commentToShow); seeMore.setHTML(""); } - - + + @UiHandler("closeImage") void onDeleteCommentClick(ClickEvent e) { @@ -161,6 +181,6 @@ public class SingleComment extends Composite { public String getCommentKey() { return myCommentid; } - - + + } diff --git a/src/main/java/org/gcube/portlets/user/newsfeed/client/ui/TweetTemplate.java b/src/main/java/org/gcube/portlets/user/newsfeed/client/ui/TweetTemplate.java index 319cae8..56c7f16 100644 --- a/src/main/java/org/gcube/portlets/user/newsfeed/client/ui/TweetTemplate.java +++ b/src/main/java/org/gcube/portlets/user/newsfeed/client/ui/TweetTemplate.java @@ -4,6 +4,7 @@ package org.gcube.portlets.user.newsfeed.client.ui; import java.util.ArrayList; +import java.util.Date; import java.util.Iterator; import java.util.List; @@ -304,11 +305,11 @@ public class TweetTemplate extends Composite { //replace the < & and > feedText = feedText.replaceAll("<","<").replaceAll(">",">"); feedText = feedText.replaceAll("&","&"); - + final String profilePageURL = GCubePortalConstants.PREFIX_GROUP_URL + ClientScopeHelper.extractOrgFriendlyURL(Location.getHref()) +GCubePortalConstants.USER_PROFILE_FRIENDLY_URL; - + if (! isAppFeed) { -// sharePostArea.setHTML("" + NewsFeedPanel.SHARE_FWD_LABEL + ""); + // sharePostArea.setHTML("" + NewsFeedPanel.SHARE_FWD_LABEL + ""); contentArea.setHTML(" feedText = feedText.replaceAll("<","<").replaceAll(">",">"); feedText = feedText.replaceAll("&","&"); - + final String profilePageURL = GCubePortalConstants.PREFIX_GROUP_URL + ClientScopeHelper.extractOrgFriendlyURL(Location.getHref()) +GCubePortalConstants.USER_PROFILE_FRIENDLY_URL; - + contentArea.setHTML(""+ 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 a6087e3..7daab0a 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 @@ -4,6 +4,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; +import java.util.Calendar; import java.util.Collections; import java.util.Date; import java.util.HashMap; @@ -11,10 +12,10 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Properties; import java.util.Set; import java.util.UUID; -import java.util.Map.Entry; import javax.servlet.ServletContext; @@ -37,6 +38,7 @@ import org.gcube.portal.databook.shared.EnhancedFeed; 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.ShowUserStatisticAction; import org.gcube.portal.databook.shared.UserInfo; import org.gcube.portal.databook.shared.ex.ColumnNameNotFoundException; import org.gcube.portal.databook.shared.ex.FeedIDNotFoundException; @@ -101,7 +103,7 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService /** * Elasticsearch client */ - private ElasticSearchClientInterface el; + private ElasticSearchClientInterface escl; private final static int MAX_FEEDS_NO = 45; @@ -109,10 +111,10 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService store = new DBCassandraAstyanaxImpl(); try { - el = new ElasticSearchClientImpl(null); + escl = new ElasticSearchClientImpl(null); _log.info("Elasticsearch connection created"); } catch (Exception e) { - el = null; + escl = null; _log.error("Unable to create elasticsearch client connection!!!", e); } @@ -404,7 +406,7 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService public ArrayList getFeedsByQuery(String query, int from, int quantity) { // TODO : check this error better - if(el == null){ + if(escl == null){ _log.debug("There is no connection to elasticsearch, sorry."); return null; @@ -442,7 +444,7 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService } // query elastic search - List enhancedFeeds = el.searchInEnhancedFeeds(query, vres, from, quantity); + List enhancedFeeds = escl.searchInEnhancedFeeds(query, vres, from, quantity); // retrieve the ids of liked feeds by the user List likedFeeds = store.getAllLikedFeedIdsByUser(userName); @@ -841,8 +843,8 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService ArrayList toReturn = new ArrayList(); ASLSession session = getASLSession(); String username = session.getUsername(); - - + + //patch needed for maintaining mention link backward compatibility (they point to /group/data-e-infrastructure-gateway/profile) final String LINK_TO_REPLACE = "data-e-infrastructure-gateway"; String siteLandinPagePath = PortalContext.getConfiguration().getSiteLandingPagePath(getThreadLocalRequest()); @@ -1128,4 +1130,80 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService return toReturn; } + + @Override + public ArrayList getFeedsRelatedToUserStatistics( + ShowUserStatisticAction action, int from, int quantity) { + + String userid = getASLSession().getUsername(); + + if(userid == NewsConstants.TEST_USER) + return null; + + try{ + + ArrayList toReturn = new ArrayList(); + + // get reference time + Calendar oneYearAgo = Calendar.getInstance(); + oneYearAgo.set(Calendar.YEAR, oneYearAgo.get(Calendar.YEAR) - 1); + + ArrayList feeds = null; + + switch(action){ + case POSTS_MADE_BY_USER: + feeds = (ArrayList) store.getRecentFeedsByUserAndDate(userid, oneYearAgo.getTimeInMillis()); + break; + case LIKES_MADE_BY_USER: + feeds = (ArrayList) store.getRecentLikedFeedsByUserAndDate(userid, oneYearAgo.getTimeInMillis()); + break; + case COMMENTS_MADE_BY_USER: + feeds = (ArrayList) store.getRecentCommentedFeedsByUserAndDate(userid, oneYearAgo.getTimeInMillis()); + break; + case LIKES_GOT_BY_USER: + feeds = (ArrayList) store.getRecentFeedsByUserAndDate(userid, oneYearAgo.getTimeInMillis()); + Iterator feedsIteratorLikes = feeds.iterator(); + while (feedsIteratorLikes.hasNext()) { + Feed feed = (Feed) feedsIteratorLikes.next(); + if(Integer.parseInt(feed.getLikesNo()) == 0) + feedsIteratorLikes.remove(); + } + break; + case COMMENTS_GOT_BY_USER: + feeds = (ArrayList) store.getRecentFeedsByUserAndDate(userid, oneYearAgo.getTimeInMillis()); + Iterator feedsIteratorComments = feeds.iterator(); + while (feedsIteratorComments.hasNext()) { + Feed feed = (Feed) feedsIteratorComments.next(); + if(Integer.parseInt(feed.getCommentsNo()) == 0) + feedsIteratorComments.remove(); + } + break; + default : return toReturn; + } + + // filter the feeds according the current context + Iterator iteratorScope = feeds.iterator(); + + if(!isInfrastructureScope()){ + + String currentScope = getASLSession().getScope(); + + while (iteratorScope.hasNext()) { + Feed feed = (Feed) iteratorScope.next(); + if(!feed.getVreid().equals(currentScope)) + iteratorScope.remove(); + } + + } + + // enhance retrieved feeds + Collections.sort(feeds, Collections.reverseOrder()); + return enhanceFeeds(feeds, -1); + + }catch(Exception e){ + _log.error("Error while retrieving feeds for user " + userid + " and action " + action.toString(), e); + } + + return null; + } }