diff --git a/src/main/java/org/gcube/portlet/user/userstatisticsportlet/server/UserStatisticsServiceImpl.java b/src/main/java/org/gcube/portlet/user/userstatisticsportlet/server/UserStatisticsServiceImpl.java index f2d3a53..f5c38f0 100644 --- a/src/main/java/org/gcube/portlet/user/userstatisticsportlet/server/UserStatisticsServiceImpl.java +++ b/src/main/java/org/gcube/portlet/user/userstatisticsportlet/server/UserStatisticsServiceImpl.java @@ -3,7 +3,9 @@ package org.gcube.portlet.user.userstatisticsportlet.server; import java.io.Serializable; import java.text.DecimalFormat; import java.util.Calendar; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.gcube.application.framework.core.session.ASLSession; import org.gcube.application.framework.core.session.SessionManager; @@ -14,6 +16,7 @@ import org.gcube.portal.custom.communitymanager.SiteManagerUtil; import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; import org.gcube.portal.databook.server.DBCassandraAstyanaxImpl; import org.gcube.portal.databook.server.DatabookStore; +import org.gcube.portal.databook.shared.Comment; import org.gcube.portal.databook.shared.Feed; import org.gcube.portlet.user.userstatisticsportlet.client.UserStatisticsService; import org.gcube.portlet.user.userstatisticsportlet.server.cache.UserInfrastructureSpaceCache; @@ -241,7 +244,7 @@ public class UserStatisticsServiceImpl extends RemoteServiceServlet implements U try{ long init = System.currentTimeMillis(); - + // check if the avatar is present boolean avatarPresent = (new LiferayUserManager().getUserAvatarBytes(statisticsOfUsername) != null); @@ -289,7 +292,7 @@ public class UserStatisticsServiceImpl extends RemoteServiceServlet implements U // the stastics to show will be of the userid statisticsOfUsername = userid; isProfileShowable = checkUserPrivacyOption(statisticsOfUsername); - + _log.info("Is profile showable for user " + userid + " " + isProfileShowable); } @@ -350,7 +353,7 @@ public class UserStatisticsServiceImpl extends RemoteServiceServlet implements U // set permission checker setPermissionChecker(); - + //needed to avoid cache use by liferay API CacheRegistryUtil.clear(); @@ -391,7 +394,7 @@ public class UserStatisticsServiceImpl extends RemoteServiceServlet implements U return null; } - long totalFeeds = 0, totalLikes = 0, totalComments = 0; + long feedsMade = 0, likesGot = 0, commentsGot = 0, commentsMade = 0, likesMade = 0; // check if the user is or not in a VRE boolean isInfrastructure = isInfrastructureScope(userid); @@ -405,8 +408,10 @@ public class UserStatisticsServiceImpl extends RemoteServiceServlet implements U try { long init = System.currentTimeMillis(); + _log.debug("Getting " + statisticsOfUsername + " feeds in the last year."); + // retrieve the most recent user's feeds List userFeeds = store.getRecentFeedsByUserAndDate(statisticsOfUsername, oneYearAgo.getTime().getTime()); _log.debug("Evaluating number of comments and likes of " + statisticsOfUsername + "'s feeds."); @@ -420,23 +425,59 @@ public class UserStatisticsServiceImpl extends RemoteServiceServlet implements U continue; // increment feeds number - totalFeeds ++; + feedsMade ++; //increment number of post replies and likes - totalComments += Integer.parseInt(feed.getCommentsNo()); - totalLikes += Integer.parseInt(feed.getLikesNo()); + commentsGot += Integer.parseInt(feed.getCommentsNo()); + likesGot += Integer.parseInt(feed.getLikesNo()); }catch(NumberFormatException e){ _log.error(e.toString()); } } + // retrieve the most recent user's liked feeds + List recentLikedFeeds = store.getRecentLikedFeedsByUserAndDate(statisticsOfUsername, oneYearAgo.getTime().getTime()); + + for (Feed feed : recentLikedFeeds) { + + // check if the user is in the root, if not check if the VRE of the feed is the current one + if(!isInfrastructure && !feed.getVreid().equals(session.getScope())) + continue; + + likesMade ++; // no further check is needed since the user can do like just one time per feed + } + + // retrieve the most recent user's comments + List recentComments = store.getRecentCommentsByUserAndDate(statisticsOfUsername, oneYearAgo.getTime().getTime()); + Map parentFeeds = new HashMap(); + + for (Comment comment : recentComments) { + + Feed parentFeed = null; + + if(!parentFeeds.containsKey(comment.getFeedid())){ + parentFeed = store.readFeed(comment.getFeedid()); + parentFeeds.put(comment.getFeedid(), parentFeed); + } + + parentFeed = parentFeeds.get(comment.getFeedid()); + + // check if the user is in the root, if not check if the VRE of the feed is the current one + if(!isInfrastructure && !parentFeed.getVreid().equals(session.getScope())) + continue; + + commentsMade ++; + } + long end = System.currentTimeMillis(); - _log.debug("[USER-STATISTICS] time taken to retrieve and filter user feeds, get likes and replies got is " + (end - init) + "ms"); - _log.debug("Total number of feeds (after time filtering) of " + statisticsOfUsername + " is " + totalFeeds); - _log.debug("Total number of likes (after time filtering) for " + statisticsOfUsername + " is " + totalLikes); - _log.debug("Total number of comments (after time filtering) for " + statisticsOfUsername + " is " + totalComments); + _log.debug("[USER-STATISTICS] time taken to retrieve statistics is " + (end - init) + " ms"); + _log.debug("Total number of feeds made (after time filtering) of " + statisticsOfUsername + " is " + feedsMade); + _log.debug("Total number of likes got (after time filtering) for " + statisticsOfUsername + " is " + likesGot); + _log.debug("Total number of comments got (after time filtering) for " + statisticsOfUsername + " is " + commentsGot); + _log.debug("Total number of likes made (after time filtering) for " + statisticsOfUsername + " is " + likesMade); + _log.debug("Total number of comments made (after time filtering) for " + statisticsOfUsername + " is " + commentsMade); }catch(Exception e){ _log.error(e.toString()); @@ -444,7 +485,7 @@ public class UserStatisticsServiceImpl extends RemoteServiceServlet implements U } // return the object - return new PostsStatsBean(totalFeeds, totalLikes, totalComments); + return new PostsStatsBean(feedsMade, likesGot, commentsGot, commentsMade, likesMade); } @Override @@ -467,7 +508,7 @@ public class UserStatisticsServiceImpl extends RemoteServiceServlet implements U // set permission checker setPermissionChecker(); - + //needed to avoid cache use by liferay API CacheRegistryUtil.clear(); diff --git a/src/main/java/org/gcube/portlet/user/userstatisticsportlet/shared/PostsStatsBean.java b/src/main/java/org/gcube/portlet/user/userstatisticsportlet/shared/PostsStatsBean.java index 436dd41..a298f49 100644 --- a/src/main/java/org/gcube/portlet/user/userstatisticsportlet/shared/PostsStatsBean.java +++ b/src/main/java/org/gcube/portlet/user/userstatisticsportlet/shared/PostsStatsBean.java @@ -13,27 +13,39 @@ public class PostsStatsBean implements Serializable{ * Generated serial version id */ private static final long serialVersionUID = 2043823499293477290L; - private long feeds; + private long feedsNumber; private long likesReceived; private long commentsReceived; + private long commentsMade; + private long likesMade; public PostsStatsBean(){ super(); } - public PostsStatsBean(long feeds, long likesReceived, long commentsReceived) { + /** + * @param feeds + * @param likesReceived + * @param commentsReceived + * @param commentsMade + * @param likesMade + */ + public PostsStatsBean(long feeds, long likesReceived, + long commentsReceived, long commentsMade, long likesMade) { super(); - this.feeds = feeds; + this.feedsNumber = feeds; this.likesReceived = likesReceived; this.commentsReceived = commentsReceived; + this.commentsMade = commentsMade; + this.likesMade = likesMade; } public long getFeedsNumber() { - return feeds; + return feedsNumber; } public void setFeedsNumber(long feeds) { - this.feeds = feeds; + this.feedsNumber = feeds; } public long getLikesReceived() { @@ -52,10 +64,27 @@ public class PostsStatsBean implements Serializable{ this.commentsReceived = commentsReceived; } + public long getCommentsMade() { + return commentsMade; + } + + public void setCommentsMade(long commentsMade) { + this.commentsMade = commentsMade; + } + + public long getLikesMade() { + return likesMade; + } + + public void setLikesMade(long likesMade) { + this.likesMade = likesMade; + } + @Override public String toString() { - return "FeedsInformation [feeds=" + feeds + ", likesReceived=" + return "PostsStatsBean [feeds=" + feedsNumber + ", likesReceived=" + likesReceived + ", commentsReceived=" + commentsReceived + + ", commentsMade=" + commentsMade + ", likesMade=" + likesMade + "]"; }