From 00622a0dc808bc0177e8ffeb286638f19f1c04e4 Mon Sep 17 00:00:00 2001 From: Costantino Perciante Date: Tue, 16 May 2017 14:07:37 +0000 Subject: [PATCH] added code for support of hashtags in comments git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portal/social-networking-library@148718 82a268e6-3cf1-43bd-a215-b396298e98cf --- .gwt/.gwt-log | 0 META-INF/KeySpace Structure.xlsx | Bin 15536 -> 10851 bytes distro/changelog.xml | 6 +- pom.xml | 2 +- .../server/CassandraClusterConnection.java | 4 +- .../server/DBCassandraAstyanaxImpl.java | 100 ++++++++++++++++-- .../portal/databook/server/DatabookStore.java | 18 ++++ 7 files changed, 116 insertions(+), 14 deletions(-) create mode 100644 .gwt/.gwt-log diff --git a/.gwt/.gwt-log b/.gwt/.gwt-log new file mode 100644 index 0000000..e69de29 diff --git a/META-INF/KeySpace Structure.xlsx b/META-INF/KeySpace Structure.xlsx index 9a65883f90f2e20b4c73fc988c7cee158a66eeb5..6ee9994891dfcb02ad4cc028950a85022bdb7ad3 100644 GIT binary patch literal 10851 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 literal 15536 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 WH2Ax)0Rh3i|319SYXs-7yZ-@`Cb>lb diff --git a/distro/changelog.xml b/distro/changelog.xml index 5d9e105..ee25e78 100644 --- a/distro/changelog.xml +++ b/distro/changelog.xml @@ -1,8 +1,12 @@ + + Added support for hashtags in comments + Added support for job completion notifications - Improved exceptions handling + Improved exceptions handling diff --git a/pom.xml b/pom.xml index fd7f2d1..06a18f1 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ org.gcube.portal social-networking-library - 1.15.0-SNAPSHOT + 1.16.0-SNAPSHOT gCube Social Networking Library The gCube Social Networking Library is the 'bridge' between your gCube Applications and the social networking facilities. diff --git a/src/main/java/org/gcube/portal/databook/server/CassandraClusterConnection.java b/src/main/java/org/gcube/portal/databook/server/CassandraClusterConnection.java index b44b0f0..47c2386 100644 --- a/src/main/java/org/gcube/portal/databook/server/CassandraClusterConnection.java +++ b/src/main/java/org/gcube/portal/databook/server/CassandraClusterConnection.java @@ -271,6 +271,7 @@ public class CassandraClusterConnection { ColumnFamilyDefinition cfDefVREInvitesTimeline = getDynamicCFDef(DBCassandraAstyanaxImpl.VRE_INVITES); ColumnFamilyDefinition cfDefHashtagsCounter = getDynamicCFDef(DBCassandraAstyanaxImpl.HASHTAGS_COUNTER); ColumnFamilyDefinition cfDefHashtagTimeline = getDynamicCFDef(DBCassandraAstyanaxImpl.HASHTAGGED_FEEDS); + ColumnFamilyDefinition cfDefHashtagCommentsTimeline = getDynamicCFDef(DBCassandraAstyanaxImpl.HASHTAGGED_COMMENTS); ksDef.setName(keyspaceName) @@ -294,7 +295,8 @@ public class CassandraClusterConnection { .addColumnFamily(cfDefEmailInvitesTimeline) .addColumnFamily(cfDefVREInvitesTimeline) .addColumnFamily(cfDefHashtagsCounter) - .addColumnFamily(cfDefHashtagTimeline); + .addColumnFamily(cfDefHashtagTimeline) + .addColumnFamily(cfDefHashtagCommentsTimeline); cluster.addKeyspace(ksDef); } diff --git a/src/main/java/org/gcube/portal/databook/server/DBCassandraAstyanaxImpl.java b/src/main/java/org/gcube/portal/databook/server/DBCassandraAstyanaxImpl.java index 1892db9..f6b59da 100644 --- a/src/main/java/org/gcube/portal/databook/server/DBCassandraAstyanaxImpl.java +++ b/src/main/java/org/gcube/portal/databook/server/DBCassandraAstyanaxImpl.java @@ -85,6 +85,7 @@ public final class DBCassandraAstyanaxImpl implements DatabookStore { public static final String USER_NOTIFICATIONS_PREFERENCES = "USERNotificationsPreferences"; // preferences for notifications public static final String HASHTAGS_COUNTER = "HashtagsCounter"; // count the hashtags per group and type public static final String HASHTAGGED_FEEDS = "HashtaggedFeeds"; // contains hashtags per type associated with vre and feed + public static final String HASHTAGGED_COMMENTS = "HashtaggedComments"; // contains hashtags per type associated with vre and comment public static final String VRE_INVITES = "VREInvites"; //contains the emails that were invited per VRE public static final String EMAIL_INVITES = "EMAILInvites"; //contains the list of invitation per email public static final String ATTACHMENTS = "Attachments"; //contains the list of all the attachments in a feed @@ -154,11 +155,14 @@ public final class DBCassandraAstyanaxImpl implements DatabookStore { HASHTAGS_COUNTER, // Column Family Name StringSerializer.get(), // Key Serializer StringSerializer.get()); // Column Serializer - protected static ColumnFamily cf_HashtagTimeline = new ColumnFamily( + protected static ColumnFamily cf_HashtagTimelineFeed = new ColumnFamily( HASHTAGGED_FEEDS, // Column Family Name StringSerializer.get(), // Key Serializer StringSerializer.get()); // Column Serializer - + protected static ColumnFamily cf_HashtagTimelineComment = new ColumnFamily( + HASHTAGGED_COMMENTS, // Column Family Name + StringSerializer.get(), // Key Serializer + StringSerializer.get()); // Column Serializer private static ColumnFamily cf_VREInvites = new ColumnFamily( VRE_INVITES, // Column Family Name StringSerializer.get(), // Key Serializer @@ -1833,7 +1837,7 @@ public final class DBCassandraAstyanaxImpl implements DatabookStore { MutationBatch m = conn.getKeyspace().prepareMutationBatch(); for (String hashtag : noduplicatesHashtags) { String lowerCaseHashtag = hashtag.toLowerCase(); - m.withRow(cf_HashtagTimeline, lowerCaseHashtag).putColumn(feedid, vreid, null); + m.withRow(cf_HashtagTimelineFeed, lowerCaseHashtag).putColumn(feedid, vreid, null); boolean firstInsert = execute(m); boolean secondInsert = updateVREHashtagCount(vreid, lowerCaseHashtag, true); if (! (firstInsert && secondInsert)) { @@ -1856,7 +1860,7 @@ public final class DBCassandraAstyanaxImpl implements DatabookStore { MutationBatch m = conn.getKeyspace().prepareMutationBatch(); for (String hashtag : noduplicatesHashtags) { String lowerCaseHashtag = hashtag.toLowerCase(); - m.withRow(cf_HashtagTimeline, lowerCaseHashtag).deleteColumn(feedid); + m.withRow(cf_HashtagTimelineFeed, lowerCaseHashtag).deleteColumn(feedid); boolean firstDelete = execute(m); boolean secondInsert = updateVREHashtagCount(vreid, lowerCaseHashtag, false); if (! (firstDelete && secondInsert)) { @@ -1870,6 +1874,59 @@ public final class DBCassandraAstyanaxImpl implements DatabookStore { * {@inheritDoc} */ @Override + public boolean saveHashTagsComment(String commentId, String vreid, List hashtags) throws CommentIDNotFoundException { + Set noduplicatesHashtags = null; + if (hashtags != null && !hashtags.isEmpty()) { + noduplicatesHashtags = new HashSet(hashtags); + } + // Inserting datacommentIdcommentId + MutationBatch m = conn.getKeyspace().prepareMutationBatch(); + for (String hashtag : noduplicatesHashtags) { + String lowerCaseHashtag = hashtag.toLowerCase(); + m.withRow(cf_HashtagTimelineComment, lowerCaseHashtag).putColumn(commentId, vreid, null); + boolean firstInsert = execute(m); + boolean secondInsert = false; + if(firstInsert) + secondInsert = updateVREHashtagCount(vreid, lowerCaseHashtag, true); + if (! (firstInsert && secondInsert)) { + _log.error("saveHashTags: Could not save the hashtag(s)"); + return false; + } + } + return true; + } + /** + * {@inheritDoc} + */ + @Override + public boolean deleteHashTagsComment(String commentId, String vreid, List hashtags) throws CommentIDNotFoundException { + Set noduplicatesHashtags = null; + if (hashtags != null && !hashtags.isEmpty()) { + noduplicatesHashtags = new HashSet(hashtags); + } + // Inserting data + MutationBatch m = conn.getKeyspace().prepareMutationBatch(); + for (String hashtag : noduplicatesHashtags) { + String lowerCaseHashtag = hashtag.toLowerCase(); + m.withRow(cf_HashtagTimelineComment, lowerCaseHashtag).deleteColumn(commentId); + boolean firstDelete = execute(m); + if(firstDelete){ + boolean secondInsert = updateVREHashtagCount(vreid, lowerCaseHashtag, false); + if (!(firstDelete && secondInsert)) { + _log.error("deleteHashTags: Could not delete the hashtag(s)"); + return false; + } + }else{ + _log.error("deleteHashTags: Could not delete the hashtag(s)"); + return false; + } + } + return true; + } + /** + * {@inheritDoc} + */ + @Override public Map getVREHashtagsWithOccurrence(String vreid) { OperationResult> result = null; try { @@ -1951,23 +2008,44 @@ public final class DBCassandraAstyanaxImpl implements DatabookStore { @Override public List getVREFeedsByHashtag(String vreid, String hashtag) throws PrivacyLevelTypeNotFoundException, FeedTypeNotFoundException, FeedIDNotFoundException, ColumnNameNotFoundException { List toReturn = new ArrayList(); - OperationResult> result = null; + OperationResult> resultFeed = null; + OperationResult> resultComment = null; try { - result = conn.getKeyspace().prepareQuery(cf_HashtagTimeline) + resultFeed = conn.getKeyspace().prepareQuery(cf_HashtagTimelineFeed) .getKeySlice(hashtag) .execute(); } catch (ConnectionException e) { e.printStackTrace(); - } - ArrayList feedIds = new ArrayList(); - // Iterate rows and their columns - for (Row row : result.getResult()) { + } + try { + resultComment = conn.getKeyspace().prepareQuery(cf_HashtagTimelineComment) + .getKeySlice(hashtag) + .execute(); + } catch (ConnectionException e) { + e.printStackTrace(); + } + Set feedIds = new HashSet(); + // Iterate rows and their columns (feed) + for (Row row : resultFeed.getResult()) { for (Column column : row.getColumns()) { if (column.getStringValue().compareTo(vreid)==0) feedIds.add(column.getName()); } } - toReturn = getFeedsByIds(feedIds); + // Iterate rows and their columns (comments) + for (Row row : resultComment.getResult()) { + for (Column column : row.getColumns()) { + if (column.getStringValue().compareTo(vreid)==0){ + try { + Comment c = readCommentById(column.getName()); + feedIds.add(c.getFeedid()); + } catch (CommentIDNotFoundException e) { + _log.warn("Failed to fetch comment with id " + column.getName(), e); + } + } + } + } + toReturn = getFeedsByIds(new ArrayList(feedIds)); return toReturn; } /* diff --git a/src/main/java/org/gcube/portal/databook/server/DatabookStore.java b/src/main/java/org/gcube/portal/databook/server/DatabookStore.java index c41acbe..09c8531 100644 --- a/src/main/java/org/gcube/portal/databook/server/DatabookStore.java +++ b/src/main/java/org/gcube/portal/databook/server/DatabookStore.java @@ -372,6 +372,15 @@ public interface DatabookStore { * @throws FeedIDNotFoundException */ boolean saveHashTags(String feedid, String vreid, List hashtags) throws FeedIDNotFoundException; + /** + * + * @param hashtags the hashtag including the '#' + * @param commentId the commentId to which the hashtag is associated + * @param vreid VRE identifier + * @return true if success, false otherwise + * @throws CommentIDNotFoundException + */ + boolean saveHashTagsComment(String commentId, String vreid, List hashtags) throws CommentIDNotFoundException; /** * * @param hashtags the hashtag including the '#' @@ -381,6 +390,15 @@ public interface DatabookStore { * @throws FeedIDNotFoundException */ boolean deleteHashTags(String feedid, String vreid, List hashtags) throws FeedIDNotFoundException; + /** + * + * @param hashtags the hashtag including the '#' + * @param commentId the commentId to which the hashtag is associated + * @param vreid VRE identifier + * @return true if success, false otherwise + * @throws CommentIDNotFoundException + */ + boolean deleteHashTagsComment(String commentId, String vreid, List hashtags) throws CommentIDNotFoundException; /** * get a map of vre hashtags where the key is the hashtag and the value is the occurrence of the hashtag in the VRE * @param vreid vre identifier (scope)