Added support for unlike feature
git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portlets/user/news-feed@94597 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
77258468d4
commit
aedf4cb81c
|
@ -1,7 +1,8 @@
|
|||
<ReleaseNotes>
|
||||
<Changeset component="org.gcube.portlets.user.NewsFeed.1-6-4"
|
||||
date="2014-04-03">
|
||||
date="2014-04-08">
|
||||
<Change>Implemented the automatic scroll back in time for feeds (in VRE scope)</Change>
|
||||
<Change>Added possibility to unlike alread liked posts</Change>
|
||||
<Change>Fixed double notifications for post owner who commented his post</Change>
|
||||
<Change>Fixed double notifications for post owner who liked his post</Change>
|
||||
<Change>Fixed user referral problem when post was deleted </Change>
|
||||
|
|
|
@ -29,6 +29,8 @@ public interface NewsService extends RemoteService {
|
|||
|
||||
boolean like(String feedid, String feedText, String feedOwnerId);
|
||||
|
||||
boolean unlike(String feedid, String feedText, String feedOwnerId);
|
||||
|
||||
boolean deleteComment(String commentid, String feedid);
|
||||
|
||||
boolean deleteFeed(String feedid);
|
||||
|
|
|
@ -51,4 +51,7 @@ public interface NewsServiceAsync {
|
|||
void getMoreFeeds(int from, int quantity,
|
||||
AsyncCallback<MoreFeedsBean> callback);
|
||||
|
||||
void unlike(String feedid, String feedText, String feedOwnerId,
|
||||
AsyncCallback<Boolean> callback);
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
package org.gcube.portlets.user.newsfeed.client.event;
|
||||
|
||||
import org.gcube.portlets.user.newsfeed.client.templates.TweetTemplate;
|
||||
|
||||
import com.google.gwt.event.shared.GwtEvent;
|
||||
|
||||
|
||||
|
||||
public class UnLikeEvent extends GwtEvent<UnLikeEventHandler> {
|
||||
public static Type<UnLikeEventHandler> TYPE = new Type<UnLikeEventHandler>();
|
||||
private TweetTemplate owner;
|
||||
private final String feedid;
|
||||
|
||||
|
||||
|
||||
public UnLikeEvent(TweetTemplate owner, String feedid) {
|
||||
this.feedid = feedid;
|
||||
this.owner = owner;
|
||||
}
|
||||
|
||||
public String getFeedId() {
|
||||
return feedid;
|
||||
}
|
||||
public TweetTemplate getOwner() {
|
||||
return owner;
|
||||
}
|
||||
@Override
|
||||
public Type<UnLikeEventHandler> getAssociatedType() {
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void dispatch(UnLikeEventHandler handler) {
|
||||
handler.onUnLike(this);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
package org.gcube.portlets.user.newsfeed.client.event;
|
||||
|
||||
import com.google.gwt.event.shared.EventHandler;
|
||||
|
||||
public interface UnLikeEventHandler extends EventHandler {
|
||||
void onUnLike(UnLikeEvent event);
|
||||
}
|
|
@ -35,6 +35,8 @@ import org.gcube.portlets.user.newsfeed.client.event.ShowMoreUpdatesEvent;
|
|||
import org.gcube.portlets.user.newsfeed.client.event.ShowMoreUpdatesEventHandler;
|
||||
import org.gcube.portlets.user.newsfeed.client.event.ShowNewUpdatesEvent;
|
||||
import org.gcube.portlets.user.newsfeed.client.event.ShowNewUpdatesEventHandler;
|
||||
import org.gcube.portlets.user.newsfeed.client.event.UnLikeEvent;
|
||||
import org.gcube.portlets.user.newsfeed.client.event.UnLikeEventHandler;
|
||||
import org.gcube.portlets.user.newsfeed.client.templates.FilterPanel;
|
||||
import org.gcube.portlets.user.newsfeed.client.templates.NewFeedsAvailable;
|
||||
import org.gcube.portlets.user.newsfeed.client.templates.ShowMoreFeeds;
|
||||
|
@ -42,6 +44,7 @@ import org.gcube.portlets.user.newsfeed.client.templates.SingleComment;
|
|||
import org.gcube.portlets.user.newsfeed.client.templates.TweetTemplate;
|
||||
import org.gcube.portlets.user.newsfeed.shared.EnhancedFeed;
|
||||
import org.gcube.portlets.user.newsfeed.shared.MoreFeedsBean;
|
||||
import org.gcube.portlets.user.newsfeed.shared.NewsConstants;
|
||||
import org.gcube.portlets.user.newsfeed.shared.UserSettings;
|
||||
import org.gcube.portlets.widgets.sessionchecker.client.CheckSession;
|
||||
import org.gcube.portlets.widgets.userselection.client.UserSelectionDialog;
|
||||
|
@ -114,7 +117,6 @@ public class NewsFeedPanel extends Composite {
|
|||
|
||||
private boolean isFirstTweet = false;
|
||||
|
||||
private static final int feedsNoPerCategory = 10;
|
||||
|
||||
private Image loadingImage;
|
||||
private UserInfo myUserInfo;
|
||||
|
@ -154,6 +156,13 @@ public class NewsFeedPanel extends Composite {
|
|||
}
|
||||
});
|
||||
|
||||
eventBus.addHandler(UnLikeEvent.TYPE, new UnLikeEventHandler() {
|
||||
@Override
|
||||
public void onUnLike(UnLikeEvent event) {
|
||||
doUnLike(event.getOwner(), event.getFeedId());
|
||||
}
|
||||
});
|
||||
|
||||
eventBus.addHandler(AddCommentEvent.TYPE, new AddCommentEventHandler() {
|
||||
@Override
|
||||
public void onAddComment(AddCommentEvent event) {
|
||||
|
@ -378,7 +387,7 @@ public class NewsFeedPanel extends Composite {
|
|||
* is open at infra level the first tab stops checking for updates
|
||||
*/
|
||||
if (result.getCurrentScope().compareTo(currentScope) == 0) {
|
||||
newsService.getAllUpdateUserFeeds(feedsNoPerCategory, new AsyncCallback<ArrayList<EnhancedFeed>>() {
|
||||
newsService.getAllUpdateUserFeeds(NewsConstants.FEEDS_NO_PER_CATEGORY, new AsyncCallback<ArrayList<EnhancedFeed>>() {
|
||||
@Override
|
||||
public void onSuccess(ArrayList<EnhancedFeed> feeds) {
|
||||
if (feeds != null && allUpdates.size() > 0) {
|
||||
|
@ -493,7 +502,7 @@ public class NewsFeedPanel extends Composite {
|
|||
*/
|
||||
public void showAllUpdatesFeeds() {
|
||||
showLoader();
|
||||
newsService.getAllUpdateUserFeeds(feedsNoPerCategory, new AsyncCallback<ArrayList<EnhancedFeed>>() {
|
||||
newsService.getAllUpdateUserFeeds(NewsConstants.FEEDS_NO_PER_CATEGORY, new AsyncCallback<ArrayList<EnhancedFeed>>() {
|
||||
@Override
|
||||
public void onSuccess(ArrayList<EnhancedFeed> feeds) {
|
||||
newsPanel.clear();
|
||||
|
@ -522,9 +531,9 @@ public class NewsFeedPanel extends Composite {
|
|||
if (feeds.size() < 5) {
|
||||
newsPanel.add(new Image(spacer));
|
||||
}
|
||||
//if you are showing more than feedsNoPerCategory*3-1 feeds there is probably more
|
||||
if (feeds.size() >= feedsNoPerCategory*3-1 && (!isInfrastructure)) {
|
||||
GWT.log("Show MORE " + feedsNoPerCategory);
|
||||
//if you are showing more than feedsMaxPerCategory-1 feeds there is probably more
|
||||
if (feeds.size() >= NewsConstants.FEEDS_MAX_PER_CATEGORY-1 && (!isInfrastructure)) {
|
||||
GWT.log("Show MORE " + NewsConstants.FEEDS_NO_PER_CATEGORY);
|
||||
showMoreUpdatesPanel.setHorizontalAlignment(HasAlignment.ALIGN_CENTER);
|
||||
showMoreWidget = new ShowMoreFeeds(eventBus);
|
||||
showMoreUpdatesPanel.add(showMoreWidget);
|
||||
|
@ -758,6 +767,16 @@ public class NewsFeedPanel extends Composite {
|
|||
});
|
||||
}
|
||||
|
||||
protected void doUnLike(TweetTemplate owner, String feedId) {
|
||||
newsService.unlike(feedId, owner.getMyFeedText(), owner.getMyFeedUserId(), new AsyncCallback<Boolean>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {}
|
||||
@Override
|
||||
public void onSuccess(Boolean result) { }
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private void doShowSessionExpired() {
|
||||
GWT.runAsync(UserSelectionDialog.class, new RunAsyncCallback() {
|
||||
@Override
|
||||
|
|
|
@ -16,6 +16,7 @@ import org.gcube.portlets.user.newsfeed.client.event.DeleteFeedEvent;
|
|||
import org.gcube.portlets.user.newsfeed.client.event.OpenFeedEvent;
|
||||
import org.gcube.portlets.user.newsfeed.client.event.SeeCommentsEvent;
|
||||
import org.gcube.portlets.user.newsfeed.client.event.SeeLikesEvent;
|
||||
import org.gcube.portlets.user.newsfeed.client.event.UnLikeEvent;
|
||||
import org.gcube.portlets.user.newsfeed.client.panels.NewsFeedPanel;
|
||||
import org.gcube.portlets.user.newsfeed.shared.EnhancedFeed;
|
||||
import org.gcube.portlets.widgets.wsmail.client.forms.MailForm;
|
||||
|
@ -137,13 +138,8 @@ public class TweetTemplate extends Composite {
|
|||
|
||||
openImage.setStyleName("openImage");
|
||||
openImage.setTitle("Open this feed separately");
|
||||
//show if the user has already liked this
|
||||
if (myFeed.isLiked()) {
|
||||
likeArea.setHTML(NewsFeedPanel.LIKED_LABEL);
|
||||
|
||||
}
|
||||
else
|
||||
likeArea.setHTML("<a>" + NewsFeedPanel.LIKE_LABEL + "</a>");
|
||||
//show if the user has already liked this or not
|
||||
setFavoritedUI(myFeed.isLiked());
|
||||
|
||||
commentArea.setHTML("<a>" + NewsFeedPanel.COMMENT_LABEL + "</a>");
|
||||
|
||||
|
@ -277,10 +273,21 @@ public class TweetTemplate extends Composite {
|
|||
seeMore.setHTML("");
|
||||
}
|
||||
|
||||
private void setFavoritedUI(boolean favorited) {
|
||||
if (favorited) {
|
||||
likeArea.setHTML("<a style=\"color:#6E8CCC;\">" + NewsFeedPanel.LIKED_LABEL + "</a>");
|
||||
likeArea.setTitle("Unfavorite this");
|
||||
}
|
||||
else {
|
||||
likeArea.setHTML("<a>" + NewsFeedPanel.LIKE_LABEL + "</a>");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@UiHandler("likeArea")
|
||||
void onLikeClick(ClickEvent e) {
|
||||
//if is not liked
|
||||
if (!likeArea.getText().equals(NewsFeedPanel.LIKED_LABEL)) {
|
||||
try {
|
||||
int cur = Integer.parseInt(myFeed.getFeed().getLikesNo());
|
||||
|
@ -295,11 +302,26 @@ public class TweetTemplate extends Composite {
|
|||
likesNo.setHTML(""+cur);
|
||||
}
|
||||
eventBus.fireEvent(new AddLikeEvent(this, myFeed.getFeed().getKey()));
|
||||
likeArea.setHTML(NewsFeedPanel.LIKED_LABEL);
|
||||
setFavoritedUI(true);
|
||||
}
|
||||
catch (NumberFormatException ex) {
|
||||
likeArea.setHTML("Error on the server");
|
||||
}
|
||||
} else {
|
||||
//it is liked
|
||||
int cur = Integer.parseInt(myFeed.getFeed().getLikesNo());
|
||||
cur--;
|
||||
if (cur == 0) {
|
||||
myFeed.getFeed().setLikesNo("0");
|
||||
likesNo.setHTML("");
|
||||
likesNo.removeStyleName("likes-number");
|
||||
likesNo.setTitle("");
|
||||
} else {
|
||||
myFeed.getFeed().setLikesNo(""+cur);
|
||||
likesNo.setHTML(""+cur);
|
||||
}
|
||||
eventBus.fireEvent(new UnLikeEvent(this, myFeed.getFeed().getKey()));
|
||||
setFavoritedUI(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -33,10 +33,12 @@ import org.gcube.portal.databook.shared.UserInfo;
|
|||
import org.gcube.portal.databook.shared.ex.ColumnNameNotFoundException;
|
||||
import org.gcube.portal.databook.shared.ex.FeedIDNotFoundException;
|
||||
import org.gcube.portal.databook.shared.ex.FeedTypeNotFoundException;
|
||||
import org.gcube.portal.databook.shared.ex.LikeIDNotFoundException;
|
||||
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.NewsConstants;
|
||||
import org.gcube.portlets.user.newsfeed.shared.UserSettings;
|
||||
import org.gcube.vomanagement.usermanagement.GroupManager;
|
||||
import org.gcube.vomanagement.usermanagement.impl.liferay.LiferayGroupManager;
|
||||
|
@ -223,7 +225,7 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService
|
|||
else {
|
||||
String vreid = getASLSession().getScopeName();
|
||||
_log.trace("News Feed in VRE, Reading feeds for VRE: " + vreid);
|
||||
ArrayList<Feed> OrganizationFeeds = (ArrayList<Feed>) store.getRecentFeedsByVRE(vreid, (feedsNoPerCategory*3));
|
||||
ArrayList<Feed> OrganizationFeeds = (ArrayList<Feed>) store.getRecentFeedsByVRE(vreid, (NewsConstants.FEEDS_MAX_PER_CATEGORY));
|
||||
for (Feed feed : OrganizationFeeds) {
|
||||
feedsMap.put(feed.getKey(), feed);
|
||||
}
|
||||
|
@ -270,13 +272,13 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService
|
|||
String userName = getASLSession().getUsername();
|
||||
try {
|
||||
if (! withinPortal) {
|
||||
return getEclipseResult(userName, 10, true);
|
||||
return getEclipseResult(userName, NewsConstants.FEEDS_NO_PER_CATEGORY, true);
|
||||
}
|
||||
else {
|
||||
//UserFriends Feeds
|
||||
ArrayList<String> userFriendsIds = (ArrayList<String>)store.getFriends(userName);
|
||||
for (String userid : userFriendsIds) {
|
||||
for (Feed feed : store.getRecentFeedsByUser(userid, 10)) {
|
||||
for (Feed feed : store.getRecentFeedsByUser(userid, NewsConstants.FEEDS_NO_PER_CATEGORY)) {
|
||||
feedsMap.put(feed.getKey(), feed);
|
||||
}
|
||||
}
|
||||
|
@ -463,6 +465,25 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService
|
|||
}
|
||||
return likeCommitResult;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean unlike(String feedid, String feedText, String feedOwnerId) {
|
||||
UserInfo user = getUserSettings().getUserInfo();
|
||||
try {
|
||||
for (Like like : store.getAllLikesByFeed(feedid)) {
|
||||
if (like.getUserid().compareTo(user.getUsername()) == 0) {
|
||||
_log.trace("Trying unlike of " + feedText + " for " + user.getFullName());
|
||||
store.unlike(user.getUsername(), like.getKey(), feedid);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} catch (FeedIDNotFoundException | PrivacyLevelTypeNotFoundException | FeedTypeNotFoundException | ColumnNameNotFoundException | LikeIDNotFoundException e) {
|
||||
_log.error("Either Feed or Like not Found " + e.getMessage());
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* @param feedid the id of the commented feed
|
||||
* @param commentText the comment text
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
package org.gcube.portlets.user.newsfeed.shared;
|
||||
|
||||
public class NewsConstants {
|
||||
/**
|
||||
* Feeds Number to who per VRE/Category
|
||||
*/
|
||||
public static final int FEEDS_NO_PER_CATEGORY = 10;
|
||||
|
||||
public static final int FEEDS_MAX_PER_CATEGORY = 30;
|
||||
}
|
Loading…
Reference in New Issue