diff --git a/src/main/java/org/gcube/portlets/user/newsfeed/client/event/EditCommentEvent.java b/src/main/java/org/gcube/portlets/user/newsfeed/client/event/EditCommentEvent.java index be1322d..98b394d 100644 --- a/src/main/java/org/gcube/portlets/user/newsfeed/client/event/EditCommentEvent.java +++ b/src/main/java/org/gcube/portlets/user/newsfeed/client/event/EditCommentEvent.java @@ -4,6 +4,7 @@ import org.gcube.portal.databook.shared.Comment; import org.gcube.portlets.user.newsfeed.client.ui.TweetTemplate; import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.user.client.ui.HTMLPanel; @@ -12,6 +13,7 @@ public class EditCommentEvent extends GwtEvent { private TweetTemplate owner; private Comment edited; + private HTMLPanel commentPanel; public TweetTemplate getOwner() { return owner; @@ -19,9 +21,14 @@ public class EditCommentEvent extends GwtEvent { public Comment getCommentInstance() { return edited; } - public EditCommentEvent(TweetTemplate owner, Comment editedComment) { + + public HTMLPanel getCommentPanel() { + return commentPanel; + } + public EditCommentEvent(TweetTemplate owner, Comment editedComment, HTMLPanel commentPanel) { this.owner = owner; this.edited = editedComment; + this.commentPanel = commentPanel; } @Override 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 cfaadfe..8379f9b 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 @@ -70,6 +70,7 @@ import com.google.gwt.user.client.Window.ScrollHandler; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.HasAlignment; import com.google.gwt.user.client.ui.HasVerticalAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; @@ -180,7 +181,7 @@ public class NewsFeedPanel extends Composite { eventBus.addHandler(EditCommentEvent.TYPE, new EditCommentEventHandler() { @Override public void onEditComment(EditCommentEvent event) { - doEditComment(event.getOwner(), event.getCommentInstance()); + doEditComment(event.getOwner(), event.getCommentInstance(), event.getCommentPanel()); } }); @@ -933,7 +934,7 @@ public class NewsFeedPanel extends Composite { } else { Comment comment = (Comment) result.getObject(); - owner.addComment(new SingleComment(comment, owner, (comment.getUserid().equals(myUserInfo.getUsername()))), false); + owner.addComment(new SingleComment(comment, owner, (comment.getUserid().equals(myUserInfo.getUsername())))); owner.setCommentingDisabled(false); owner.updateCommentsNumberCount(); owner.showAddCommentForm(false); @@ -946,7 +947,7 @@ public class NewsFeedPanel extends Composite { }); } - private void doEditComment(final TweetTemplate owner, Comment edited) { + private void doEditComment(final TweetTemplate owner, Comment edited, final HTMLPanel commentPanel) { newsService.editComment(edited, new AsyncCallback() { @Override public void onFailure(Throwable caught) { @@ -961,7 +962,7 @@ public class NewsFeedPanel extends Composite { } else { Comment comment = (Comment) result.getObject(); - owner.addComment(new SingleComment(comment, owner, (comment.getUserid().equals(myUserInfo.getUsername()))), true); + owner.updateSingleComment(comment, commentPanel); owner.setCommentingDisabled(false); } } @@ -987,7 +988,7 @@ public class NewsFeedPanel extends Composite { public void onSuccess(ArrayList comments) { owner.clearComments(); for (Comment comment :comments) - owner.addComment(new SingleComment(comment, owner,(comment.getUserid().equals(myUserInfo.getUsername())) ), false); + owner.addComment(new SingleComment(comment, owner,(comment.getUserid().equals(myUserInfo.getUsername())))); owner.setCommentsFetched(true); if (commentForm2Add) owner.showAddCommentForm(false); diff --git a/src/main/java/org/gcube/portlets/user/newsfeed/client/ui/AddCommentTemplate.java b/src/main/java/org/gcube/portlets/user/newsfeed/client/ui/AddCommentTemplate.java index e73feba..35c288e 100644 --- a/src/main/java/org/gcube/portlets/user/newsfeed/client/ui/AddCommentTemplate.java +++ b/src/main/java/org/gcube/portlets/user/newsfeed/client/ui/AddCommentTemplate.java @@ -89,6 +89,7 @@ public class AddCommentTemplate extends Composite { mainPanel.removeStyleName("comment-hidden"); mainPanel.setStyleName("single-comment"); commentTextArea.addStyleName("comment-dark-color"); + submitButton.setText("Edit"); } /** Used by AddCommentTemplate to instantiate SuperPosedTextArea */ @@ -124,7 +125,7 @@ public class AddCommentTemplate extends Composite { } if (isEditing) { toEdit.setText(escapeHtml(commentTextArea.getText())); - eventBus.fireEvent(new EditCommentEvent(owner, toEdit)); + eventBus.fireEvent(new EditCommentEvent(owner, toEdit, commentPanel)); } else { //it is ok to add this comment eventBus.fireEvent(new AddCommentEvent(owner, escapeHtml(commentTextArea.getText()), commentTextArea.getMentionedUsers())); 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 41f35b8..47b647e 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 @@ -90,6 +90,10 @@ public class SingleComment extends Composite { Encoder.encode(GCubeSocialNetworking.USER_PROFILE_OID)+"="+ Encoder.encode(toShow.getUserid())+"\">"+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()) + ")"); + else timeArea.setHTML(DateTimeFormat.getFormat("MMMM dd, h:mm a").format(toShow.getTime())); if (isUsers) { closeImage.setStyleName("closeImage"); @@ -147,6 +151,10 @@ public class SingleComment extends Composite { editImage.removeStyleName("uiEditButton"); } } + + 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 22761cb..9b2586c 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.Iterator; import java.util.List; import org.gcube.portal.databook.client.GCubeSocialNetworking; @@ -242,7 +243,7 @@ public class TweetTemplate extends Composite { commentsNo.setTitle("Show all Comments"); } for (Comment comment : myFeed.getComments()) { - addComment(new SingleComment(comment, this, (comment.getUserid().equals(myUserInfo.getUsername()))), false); + addComment(new SingleComment(comment, this, (comment.getUserid().equals(myUserInfo.getUsername())))); } showAddCommentForm(false); } @@ -449,12 +450,36 @@ public class TweetTemplate extends Composite { mainHTML.remove(w); } - public void addComment(SingleComment comment, boolean isEdit) { - if (isEdit) - commentsPanel.insert(comment, commentsPanel.getWidgetCount()-1); - else - commentsPanel.add(comment); + public void addComment(SingleComment comment) { + + commentsPanel.add(comment); myComments.add(comment); + + } + + public void updateSingleComment(Comment edited, HTMLPanel commentPanel){ + + commentPanel.clear(); + SingleComment sc = new SingleComment(edited, this, true); + commentPanel.add(sc); + + // replace the new SingleComment in the list + int index = 0; + Iterator iterator = this.myComments.iterator(); + + for (;iterator.hasNext();) { + SingleComment singleComment = (SingleComment) iterator.next(); + + if(singleComment.getCommentKey().equals(edited.getKey())){ + + iterator.remove(); + this.myComments.add(index, sc); + break; + + } + index ++; + } + } public void clearComments() { 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 4308d86..3016383 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 @@ -82,7 +82,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"; - public static final String TEST_SCOPE = "/gcube/devsec/USTORE_VRE"; + public static final String TEST_SCOPE = "/gcube/devsec/devVRE"; private String APP_ID; @@ -678,14 +678,14 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService String escapedCommentText = Utils.escapeHtmlAndTransformUrl(toEdit.getText()); Comment edited = new Comment(toEdit.getKey(), toEdit.getUserid(), - new Date(), toEdit.getFeedid(), escapedCommentText, user.getFullName(), user.getAvatarId()); + toEdit.getTime(), toEdit.getFeedid(), escapedCommentText, user.getFullName(), user.getAvatarId(), true, new Date()); try { store.editComment(edited); } catch (Exception e) { e.printStackTrace(); return new OperationResult(false, "Exception on the server: " + e.getMessage(), null); } - return new OperationResult(true, "OK", toEdit); + return new OperationResult(true, "OK", edited); } /**