diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component
index 18ea1db..3fad16f 100644
--- a/.settings/org.eclipse.wst.common.component
+++ b/.settings/org.eclipse.wst.common.component
@@ -5,9 +5,6 @@
-
- uses
-
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 6284ae3..2014df8 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
@@ -36,6 +36,7 @@ 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.CommentIDNotFoundException;
import org.gcube.portal.databook.shared.ex.FeedIDNotFoundException;
import org.gcube.portal.databook.shared.ex.FeedTypeNotFoundException;
import org.gcube.portal.databook.shared.ex.LikeIDNotFoundException;
@@ -106,7 +107,6 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService
public void init() {
store = new DBCassandraAstyanaxImpl();
-
try {
escl = new ElasticSearchClientImpl(null);
_log.info("Elasticsearch connection created");
@@ -347,10 +347,8 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService
// TODO : check this error better
if(escl == null){
-
_log.warn("There is no connection to elasticsearch, sorry.");
return null;
-
}
PortalContext pContext = PortalContext.getConfiguration();
@@ -616,6 +614,11 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService
String escapedCommentText = Utils.escapeHtmlAndTransformUrl(commentText);
+ // get hashtags
+ List hashtags = Utils.getHashTags(escapedCommentText);
+ if (hashtags != null && !hashtags.isEmpty())
+ escapedCommentText = Utils.convertHashtagsAnchorHTML(escapedCommentText, hashtags);
+
//copy the set into a list
ArrayList mentionedUserFullNamesList = new ArrayList();
mentionedUserFullNamesList.addAll(mentionedUserFullNames);
@@ -636,6 +639,17 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService
e.printStackTrace();
return new OperationResult(false, "Related post not found for this comment", comment);
}
+
+ try {
+ if (hashtags != null && !hashtags.isEmpty())
+ store.saveHashTagsComment(comment.getKey(), store.readFeed(comment.getFeedid()).getVreid(), hashtags);
+ } catch (CommentIDNotFoundException
+ | PrivacyLevelTypeNotFoundException
+ | FeedTypeNotFoundException | FeedIDNotFoundException
+ | ColumnNameNotFoundException e1) {
+ _log.error("Unable to save hashtags for this comment " + e1.getMessage());
+ }
+
//if the comment was correctly delivered && is not an app feed notify users involved
if (commentCommitResult && isWithinPortal()) {
PortalContext pContext = PortalContext.getConfiguration();
@@ -715,17 +729,38 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService
@Override
public OperationResult editComment(Comment toEdit) {
- UserInfo user = getUserSettings().getUserInfo();
- if (user.getUsername().compareTo(NewsConstants.TEST_USER) == 0) {
- return new OperationResult(false, "Session Expired", null);
- }
-
- String escapedCommentText = Utils.escapeHtmlAndTransformUrl(toEdit.getText());
-
- Comment edited = new Comment(toEdit.getKey(), toEdit.getUserid(),
- toEdit.getTime(), toEdit.getFeedid(), escapedCommentText, user.getFullName(), user.getAvatarId(), true, new Date());
+ Comment edited = null;
try {
+ UserInfo user = getUserSettings().getUserInfo();
+ if (user.getUsername().compareTo(NewsConstants.TEST_USER) == 0) {
+ return new OperationResult(false, "Session Expired", null);
+ }
+
+ String vreIdFeed = store.readFeed(toEdit.getFeedid()).getVreid();
+
+ // get old hashtags and delete them
+ String oldText = store.readCommentById(toEdit.getKey()).getText();
+ _log.debug("Old text for this comment is " + oldText);
+ List oldHashtags = Utils.getHashTags(Utils.removeHTMLFromText(oldText));
+ if (oldHashtags != null && !oldHashtags.isEmpty()) {
+ _log.debug("The comment has hashtags, attempting to delete them ... " + oldHashtags.toString());
+ boolean deletedHashtag = store.deleteHashTagsComment(toEdit.getKey(), vreIdFeed, oldHashtags);
+ _log.debug("deletedHashtag? " + deletedHashtag);
+ }
+
+ // get new hashtags
+ String escapedCommentText = Utils.escapeHtmlAndTransformUrl(toEdit.getText());
+ List newHashtags = Utils.getHashTags(escapedCommentText);
+ if (newHashtags != null && !newHashtags.isEmpty())
+ escapedCommentText = Utils.convertHashtagsAnchorHTML(escapedCommentText, newHashtags);
+
+ edited = new Comment(toEdit.getKey(), toEdit.getUserid(),
+ toEdit.getTime(), toEdit.getFeedid(), escapedCommentText, user.getFullName(), user.getAvatarId(), true, new Date());
+
store.editComment(edited);
+
+ if (newHashtags != null && !newHashtags.isEmpty())
+ store.saveHashTagsComment(edited.getKey(), vreIdFeed, newHashtags);
} catch (Exception e) {
e.printStackTrace();
return new OperationResult(false, "Exception on the server: " + e.getMessage(), null);
@@ -869,6 +904,16 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService
public boolean deleteComment(String commentid, String feedid) {
_log.trace("Attempting to delete comment " + commentid);
try {
+ // get hashtags, if any, and delete them
+ Comment toDelete = store.readCommentById(commentid);
+ String vreIdFeed = store.readFeed(toDelete.getFeedid()).getVreid();
+ List hashtags = Utils.getHashTags(Utils.removeHTMLFromText(toDelete.getText()));
+ if (hashtags != null && !hashtags.isEmpty()) {
+ _log.debug("The comment has hashtags, attempting to delete them ... " + hashtags.toString());
+ boolean deletedHashtag = store.deleteHashTagsComment(toDelete.getKey(), vreIdFeed, hashtags);
+ _log.debug("deletedHashtag? " + deletedHashtag);
+ }
+ _log.debug("Attempting to delete comment " + commentid);
return store.deleteComment(commentid, feedid);
} catch (Exception e) {
e.printStackTrace();
@@ -877,16 +922,28 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService
}
@Override
public boolean deleteFeed(String feedid) {
- _log.trace("Called delete feed " + feedid);
+ _log.debug("Called delete feed " + feedid);
try {
Feed toDelete = store.readFeed(feedid);
- List hashtags = Utils.getHashTags(toDelete.getDescription());
- if (hashtags != null && !hashtags.isEmpty()) {
- _log.trace("The feed has hashtags, attempting to delete them ... " + hashtags.toString());
- boolean deletedHashtag = store.deleteHashTags(feedid, toDelete.getVreid(), hashtags);
- _log.trace("deletedHashtag? " + deletedHashtag);
+
+ // delete comments and hastags as well
+ boolean hasComments = Integer.parseInt(toDelete.getCommentsNo()) > 0;
+
+ if(hasComments){
+ _log.debug("Deleting feed's comments and their hashtags");
+ List comments = store.getAllCommentByFeed(feedid);
+ for (Comment comment : comments) {
+ deleteComment(comment.getKey(), feedid);
+ }
}
- _log.trace("Attempting to delete feed " + feedid);
+
+ List hashtags = Utils.getHashTags(Utils.removeHTMLFromText(toDelete.getDescription()));
+ if (hashtags != null && !hashtags.isEmpty()) {
+ _log.debug("The feed has hashtags, attempting to delete them ... " + hashtags.toString());
+ boolean deletedHashtag = store.deleteHashTags(feedid, toDelete.getVreid(), hashtags);
+ _log.debug("deletedHashtag? " + deletedHashtag);
+ }
+ _log.debug("Attempting to delete feed " + feedid);
return store.deleteFeed(feedid);
} catch (Exception e) {