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 362e49d..23dea6e 100644 --- a/src/main/java/org/gcube/portal/databook/server/DBCassandraAstyanaxImpl.java +++ b/src/main/java/org/gcube/portal/databook/server/DBCassandraAstyanaxImpl.java @@ -879,6 +879,38 @@ public final class DBCassandraAstyanaxImpl implements DatabookStore { * {@inheritDoc} */ @Override + public List getRangeNotificationsByUser(String userid,int from, int quantity) throws NotificationTypeNotFoundException, ColumnNameNotFoundException, NotificationIDNotFoundException { + if (from < 1) { + throw new IllegalArgumentException("From must be greather than 0"); + } + ArrayList toReturn = new ArrayList(); + ArrayList notificationsIDs = getUserNotificationsIds(userid); + + //if from is greater than feeds size return empty + if (from >= notificationsIDs.size()) { + _log.warn("The starting point of the range is greather than the total number of feeds for this timeline: " + from + " >= " + notificationsIDs.size()); + return new ArrayList(); + } + + int rangeStart = notificationsIDs.size()-from; + int rangeEnd = rangeStart-quantity; + + //check that you reached the end + if (rangeEnd<1) + rangeEnd = 0; + + _log.debug("BEFORE starting Point=" + rangeStart + " rangeEnd= " + rangeEnd); + //need them in reverse order + for (int i = rangeStart; i > rangeEnd; i--) { + Notification toAdd = readNotification(notificationsIDs.get(i)); + toReturn.add(toAdd); + } + return toReturn; + } + /** + * {@inheritDoc} + */ + @Override public boolean setAllNotificationReadByUser(String userid) throws NotificationIDNotFoundException, NotificationTypeNotFoundException, ColumnNameNotFoundException { ArrayList notificationsIDs = getUserNotificationsIds(userid); @@ -1625,4 +1657,5 @@ public final class DBCassandraAstyanaxImpl implements DatabookStore { + } diff --git a/src/main/java/org/gcube/portal/databook/server/DatabookCassandraTest.java b/src/main/java/org/gcube/portal/databook/server/DatabookCassandraTest.java index 1d8d6dc..3bf4681 100644 --- a/src/main/java/org/gcube/portal/databook/server/DatabookCassandraTest.java +++ b/src/main/java/org/gcube/portal/databook/server/DatabookCassandraTest.java @@ -39,352 +39,362 @@ public class DatabookCassandraTest { System.out.println("End"); } -// -// /** -// * use exclusively to add a new CF to a keyspace -// */ -// @Test -// public void addNotifPreferencesColumnFamily() { -// // ColumnFamily cf_UserNotificationsPreferences = new ColumnFamily( -// // DBCassandraAstyanaxImpl.USER_NOTIFICATIONS_PREFERENCES, // Column Family Name -// // StringSerializer.get(), // Key Serializer -// // StringSerializer.get()); // Column Serializer -// // -// // try { -// // new CassandraClusterConnection(false).getKeyspace().createColumnFamily(cf_UserNotificationsPreferences, ImmutableMap.builder() -// // .put("default_validation_class", "UTF8Type") -// // .put("key_validation_class", "UTF8Type") -// // .put("comparator_type", "UTF8Type") -// // .build()); -// // } catch (ConnectionException e) { -// // e.printStackTrace(); -// // } -// } -// -// @Test -// public void testFriendships() { -// assertTrue(store.requestFriendship("massimiliano.assante", "leonardo.candela")); -// assertTrue(store.requestFriendship("massimiliano.assante", "ermit")); -// assertTrue(store.requestFriendship("massimiliano.assante", "giorgino")); -// assertTrue(store.requestFriendship("barabba", "massimiliano.assante")); -// -// assertTrue(store.approveFriendship("leonardo.candela", "massimiliano.assante")); -// assertTrue(store.approveFriendship("ermit", "massimiliano.assante")); -// -// assertTrue(store.denyFriendship("giorgino", "massimiliano.assante")); -// System.out.println("Pending Connections for massimiliano.assante:"); -// for (String userid: store.getPendingFriendRequests("massimiliano.assante")) { -// System.out.println(userid); -// } -// -// System.out.println("Connections for massimiliano.assante:"); -// for (String userid: store.getFriends("massimiliano.assante")) { -// System.out.println(userid); -// } -// -// } -// @Test -// public void testLikedFeedsRetrieval() { -// try { -// for (Feed feed : store.getAllLikedFeedsByUser("luca.frosini", 10)) { -// System.out.println(feed); -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } -// -// -// @Test -// public void testSingleNotificationPreference() { -// try { -// for (NotificationChannelType channel : store.getUserNotificationChannels("massimiliano.assante", NotificationType.COMMENT)) { -// System.out.println(channel); -// } -// } catch (NotificationChannelTypeNotFoundException e) { -// e.printStackTrace(); -// } catch (NotificationTypeNotFoundException e) { -// e.printStackTrace(); -// }; -// HashMap toCreate = new HashMap(); -// for (int i = 0; i < NotificationType.values().length; i++) { -// if (i == 0) -// toCreate.put(NotificationType.values()[i], null); -// else if (i ==3) { -// NotificationChannelType[] nots = {NotificationChannelType.PORTAL}; -// toCreate.put(NotificationType.values()[i], nots); -// } -// else -// toCreate.put(NotificationType.values()[i], NotificationChannelType.values()); -// } -// store.setUserNotificationPreferences("antonio.gioia", toCreate); -// -// -// try { -// for (NotificationChannelType channel : store.getUserNotificationChannels("antonio.gioia", NotificationType.WP_FOLDER_RENAMED)) { //i == 3 -// System.out.println(channel); -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } -// -// @Test -// public void testSingleNotification() { -// Notification not = new Notification( -// UUID.randomUUID().toString(), -// NotificationType.LIKE, -// "leonardo.candela", -// "MESSAGEID", -// new Date(), -// "uri", -// "This is notification about a like", -// false, -// "leonardo.candela", "Leonardo Candela", -// "thumburl"); -// assertTrue(store.saveNotification(not)); -// -// not = new Notification( -// UUID.randomUUID().toString(), -// NotificationType.MESSAGE, -// "massimiliano.assante", -// "MESSAGEID", -// new Date(), -// "uri", -// "This is notification about a like", -// false, -// "antonio.gioia", "Antonio Gioia", -// "thumburl"); -// assertTrue(store.saveNotification(not)); -// System.out.println("Writing one Notification " + not); -// } -// -// @Test -// public void testNotifications() { -// Notification not = null; -// System.out.println("Writing 18 Notifications"); -// int count = 18; -// for (int i = 0; i < count; i++) { -// if (i % 2 != 0) { -// not = new Notification(UUID.randomUUID().toString(), NotificationType.JOB_COMPLETED_OK, -// "leonardo.candela", "TWEETID", new Date(), "uri", "This is notification about job completed OK #"+i, false, "pasquale.pagano", "Pasquale Pagano", "thumburl"); -// } else { -// not = new Notification(UUID.randomUUID().toString(), NotificationType.JOB_COMPLETED_NOK, -// "massimiliano.assante", "MESSAGEID", new Date(), "uri", "This is notification about completed NOK #"+i, false, "leonardo.candela", "Leonardo Candela", "thumburl"); -// } -// assertTrue(store.saveNotification(not)); -// try { -// Thread.sleep(150); -// } catch (InterruptedException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } -// } -// -// Notification rNot= null; -// try { -// -// //read -// rNot = store.readNotification(not.getKey().toString()); -// assertNotNull(rNot); -// System.out.println("Reading one Notification " + rNot.getKey() + ": " + rNot.getDescription() + " Type: " + rNot.getType()); -// -// //set Read -// assertTrue(store.setNotificationRead(rNot.getKey().toString())); -// -// System.out.println("Notification " + rNot.getKey() + " of Type: " + rNot.getType() + " was set to READ"); -// -// not = new Notification(UUID.randomUUID().toString(), NotificationType.LIKE, -// "leonardo.candela", "FEEDID", new Date(), "uri", "This is notification of a Liked Leo feed by Massi", false, "massimiliano.assante", "Massimiliano Assante", "thumburl"); -// assertTrue(store.saveNotification(not)); -// try { -// Thread.sleep(150); -// } catch (InterruptedException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } -// rNot = store.readNotification(not.getKey().toString()); -// System.out.println("Reading another Notification " + rNot.getKey() + " of Type: " + rNot.getType() + " Read:? " + rNot.isRead()); -// // //set Read -// // assertTrue(store.setNotificationRead(rNot.getKey().toString())); -// // System.out.println("Notification " + rNot.getKey() + " of Type: " + rNot.getType() + " was set to READ subject was this: " + rNot.getSubjectid()); -// // -// Random randomGenerator = new Random(); -// -// System.out.println("leonardo.candela Notifications: "); -// List recentNots = store.getAllNotificationByUser("leonardo.candela", randomGenerator.nextInt(50)); -// assertNotNull(recentNots); -// for (Notification notif :recentNots) -// System.out.println(notif); -// -// -// System.out.println("massimiliano.assante Notifications: "); -// recentNots = store.getUnreadNotificationsByUser("massimiliano.assante"); -// assertNotNull(recentNots); -// for (Notification notif :recentNots) -// System.out.println(notif); -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } -// -// + // + // /** + // * use exclusively to add a new CF to a keyspace + // */ + // @Test + // public void addNotifPreferencesColumnFamily() { + // // ColumnFamily cf_UserNotificationsPreferences = new ColumnFamily( + // // DBCassandraAstyanaxImpl.USER_NOTIFICATIONS_PREFERENCES, // Column Family Name + // // StringSerializer.get(), // Key Serializer + // // StringSerializer.get()); // Column Serializer + // // + // // try { + // // new CassandraClusterConnection(false).getKeyspace().createColumnFamily(cf_UserNotificationsPreferences, ImmutableMap.builder() + // // .put("default_validation_class", "UTF8Type") + // // .put("key_validation_class", "UTF8Type") + // // .put("comparator_type", "UTF8Type") + // // .build()); + // // } catch (ConnectionException e) { + // // e.printStackTrace(); + // // } + // } + // + // @Test + // public void testFriendships() { + // assertTrue(store.requestFriendship("massimiliano.assante", "leonardo.candela")); + // assertTrue(store.requestFriendship("massimiliano.assante", "ermit")); + // assertTrue(store.requestFriendship("massimiliano.assante", "giorgino")); + // assertTrue(store.requestFriendship("barabba", "massimiliano.assante")); + // + // assertTrue(store.approveFriendship("leonardo.candela", "massimiliano.assante")); + // assertTrue(store.approveFriendship("ermit", "massimiliano.assante")); + // + // assertTrue(store.denyFriendship("giorgino", "massimiliano.assante")); + // System.out.println("Pending Connections for massimiliano.assante:"); + // for (String userid: store.getPendingFriendRequests("massimiliano.assante")) { + // System.out.println(userid); + // } + // + // System.out.println("Connections for massimiliano.assante:"); + // for (String userid: store.getFriends("massimiliano.assante")) { + // System.out.println(userid); + // } + // + // } + // @Test + // public void testLikedFeedsRetrieval() { + // try { + // for (Feed feed : store.getAllLikedFeedsByUser("luca.frosini", 10)) { + // System.out.println(feed); + // } + // } catch (Exception e) { + // e.printStackTrace(); + // } + // } + // + // + // @Test + // public void testSingleNotificationPreference() { + // try { + // for (NotificationChannelType channel : store.getUserNotificationChannels("massimiliano.assante", NotificationType.COMMENT)) { + // System.out.println(channel); + // } + // } catch (NotificationChannelTypeNotFoundException e) { + // e.printStackTrace(); + // } catch (NotificationTypeNotFoundException e) { + // e.printStackTrace(); + // }; + // HashMap toCreate = new HashMap(); + // for (int i = 0; i < NotificationType.values().length; i++) { + // if (i == 0) + // toCreate.put(NotificationType.values()[i], null); + // else if (i ==3) { + // NotificationChannelType[] nots = {NotificationChannelType.PORTAL}; + // toCreate.put(NotificationType.values()[i], nots); + // } + // else + // toCreate.put(NotificationType.values()[i], NotificationChannelType.values()); + // } + // store.setUserNotificationPreferences("antonio.gioia", toCreate); + // + // + // try { + // for (NotificationChannelType channel : store.getUserNotificationChannels("antonio.gioia", NotificationType.WP_FOLDER_RENAMED)) { //i == 3 + // System.out.println(channel); + // } + // } catch (Exception e) { + // e.printStackTrace(); + // } + // } + // + // @Test + // public void testSingleNotification() { + // Notification not = new Notification( + // UUID.randomUUID().toString(), + // NotificationType.LIKE, + // "leonardo.candela", + // "MESSAGEID", + // new Date(), + // "uri", + // "This is notification about a like", + // false, + // "leonardo.candela", "Leonardo Candela", + // "thumburl"); + // assertTrue(store.saveNotification(not)); + // + // not = new Notification( + // UUID.randomUUID().toString(), + // NotificationType.MESSAGE, + // "massimiliano.assante", + // "MESSAGEID", + // new Date(), + // "uri", + // "This is notification about a like", + // false, + // "antonio.gioia", "Antonio Gioia", + // "thumburl"); + // assertTrue(store.saveNotification(not)); + // System.out.println("Writing one Notification " + not); + // } + // + // @Test + // public void testNotifications() { + // Notification not = null; + // System.out.println("Writing 18 Notifications"); + // int count = 18; + // for (int i = 0; i < count; i++) { + // if (i % 2 != 0) { + // not = new Notification(UUID.randomUUID().toString(), NotificationType.JOB_COMPLETED_OK, + // "leonardo.candela", "TWEETID", new Date(), "uri", "This is notification about job completed OK #"+i, false, "pasquale.pagano", "Pasquale Pagano", "thumburl"); + // } else { + // not = new Notification(UUID.randomUUID().toString(), NotificationType.JOB_COMPLETED_NOK, + // "massimiliano.assante", "MESSAGEID", new Date(), "uri", "This is notification about completed NOK #"+i, false, "leonardo.candela", "Leonardo Candela", "thumburl"); + // } + // assertTrue(store.saveNotification(not)); + // try { + // Thread.sleep(150); + // } catch (InterruptedException e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // } + // + // Notification rNot= null; + // try { + // + // //read + // rNot = store.readNotification(not.getKey().toString()); + // assertNotNull(rNot); + // System.out.println("Reading one Notification " + rNot.getKey() + ": " + rNot.getDescription() + " Type: " + rNot.getType()); + // + // //set Read + // assertTrue(store.setNotificationRead(rNot.getKey().toString())); + // + // System.out.println("Notification " + rNot.getKey() + " of Type: " + rNot.getType() + " was set to READ"); + // + // not = new Notification(UUID.randomUUID().toString(), NotificationType.LIKE, + // "leonardo.candela", "FEEDID", new Date(), "uri", "This is notification of a Liked Leo feed by Massi", false, "massimiliano.assante", "Massimiliano Assante", "thumburl"); + // assertTrue(store.saveNotification(not)); + // try { + // Thread.sleep(150); + // } catch (InterruptedException e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // rNot = store.readNotification(not.getKey().toString()); + // System.out.println("Reading another Notification " + rNot.getKey() + " of Type: " + rNot.getType() + " Read:? " + rNot.isRead()); + // // //set Read + // // assertTrue(store.setNotificationRead(rNot.getKey().toString())); + // // System.out.println("Notification " + rNot.getKey() + " of Type: " + rNot.getType() + " was set to READ subject was this: " + rNot.getSubjectid()); + // // + // Random randomGenerator = new Random(); + // + // System.out.println("leonardo.candela Notifications: "); + // List recentNots = store.getAllNotificationByUser("leonardo.candela", randomGenerator.nextInt(50)); + // assertNotNull(recentNots); + // for (Notification notif :recentNots) + // System.out.println(notif); + // + // + // System.out.println("massimiliano.assante Notifications: "); + // recentNots = store.getUnreadNotificationsByUser("massimiliano.assante"); + // assertNotNull(recentNots); + // for (Notification notif :recentNots) + // System.out.println(notif); + // } catch (Exception e) { + // e.printStackTrace(); + // } + // } + // + // @Test public void testFeeds() { -// int count = 18; -// Feed feed = null; -// for (int i = 0; i < count; i++) { -// if (i % 2 != 0) { -// feed = new Feed(UUID.randomUUID().toString(), FeedType.JOIN, "massimiliano.assante", new Date(), "/gcube/devsec/devVRE", -// "www.d4science.org/monitor", "thumbUri", "This is feed# "+ i, PrivacyLevel.VRES, "Massimiliano Assante", "massimiliano.assante@isti.cnr.it", "thumburl", "linkTitle", "linkDesc", "host"); -// } else { -// feed = new Feed(UUID.randomUUID().toString(), FeedType.TWEET, "leonardo.candela", new Date(), "", -// "www.d4science.org/web/guest", "thumbUri", "This is feed# "+ i, PrivacyLevel.PORTAL, "Leonardo Candela", "leonardo.candela@isti.cnr.it", "thumburl", "linkTitle", "linkDesc", "host"); -// } -// assertTrue(store.saveUserFeed(feed)); -// try { -// Thread.sleep(150); -// } catch (InterruptedException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } -// } -// -// Feed rFeed = null; -// try { -// rFeed = store.readFeed(feed.getKey().toString()); -// rFeed = store.readFeed(feed.getKey().toString()); -// rFeed = store.readFeed(feed.getKey().toString()); -// rFeed = store.readFeed(feed.getKey().toString()); -// assertNotNull(rFeed); -// -// String feedIdToDelete = UUID.randomUUID().toString(); -// feed = new Feed(feedIdToDelete, FeedType.PUBLISH, "massimiliano.assante", new Date(), "/gcube/devsec/devVRE", -// "www.d4science.org/monitor", "thumbUri", "This is feed to be deleted", PrivacyLevel.VRES, "Massimiliano Assante", "massimiliano.assante@isti.cnr.it", "thumburl", "linkTitle", "linkDesc", "host", false); -// assertTrue(store.saveUserFeed(feed)); -// try { -// Thread.sleep(250); -// } catch (InterruptedException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } -// System.out.println("Test Delete Feed "); -// assertTrue(store.deleteFeed(feedIdToDelete)); -// -// System.out.println("massimiliano.assante ALL FEEDS: "); -// for (Feed recFeed : store.getAllFeedsByUser("massimiliano.assante")) -// System.out.println(recFeed); -// -// Random randomGenerator = new Random(); -// -// System.out.println("leonardo.candela TIMELINE: "); -// List recentFeeds = store.getRecentFeedsByUser("leonardo.candela", randomGenerator.nextInt(50)); -// assertNotNull(recentFeeds); -// for (Feed recFeed :recentFeeds) -// System.out.println(recFeed); - + // int count = 18; + // Feed feed = null; + // for (int i = 0; i < count; i++) { + // if (i % 2 != 0) { + // feed = new Feed(UUID.randomUUID().toString(), FeedType.JOIN, "massimiliano.assante", new Date(), "/gcube/devsec/devVRE", + // "www.d4science.org/monitor", "thumbUri", "This is feed# "+ i, PrivacyLevel.VRES, "Massimiliano Assante", "massimiliano.assante@isti.cnr.it", "thumburl", "linkTitle", "linkDesc", "host"); + // } else { + // feed = new Feed(UUID.randomUUID().toString(), FeedType.TWEET, "leonardo.candela", new Date(), "", + // "www.d4science.org/web/guest", "thumbUri", "This is feed# "+ i, PrivacyLevel.PORTAL, "Leonardo Candela", "leonardo.candela@isti.cnr.it", "thumburl", "linkTitle", "linkDesc", "host"); + // } + // assertTrue(store.saveUserFeed(feed)); + // try { + // Thread.sleep(150); + // } catch (InterruptedException e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // } + // + // Feed rFeed = null; + // try { + // rFeed = store.readFeed(feed.getKey().toString()); + // rFeed = store.readFeed(feed.getKey().toString()); + // rFeed = store.readFeed(feed.getKey().toString()); + // rFeed = store.readFeed(feed.getKey().toString()); + // assertNotNull(rFeed); + // + // String feedIdToDelete = UUID.randomUUID().toString(); + // feed = new Feed(feedIdToDelete, FeedType.PUBLISH, "massimiliano.assante", new Date(), "/gcube/devsec/devVRE", + // "www.d4science.org/monitor", "thumbUri", "This is feed to be deleted", PrivacyLevel.VRES, "Massimiliano Assante", "massimiliano.assante@isti.cnr.it", "thumburl", "linkTitle", "linkDesc", "host", false); + // assertTrue(store.saveUserFeed(feed)); + // try { + // Thread.sleep(250); + // } catch (InterruptedException e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // System.out.println("Test Delete Feed "); + // assertTrue(store.deleteFeed(feedIdToDelete)); + // + // System.out.println("massimiliano.assante ALL FEEDS: "); + // for (Feed recFeed : store.getAllFeedsByUser("massimiliano.assante")) + // System.out.println(recFeed); + // + // Random randomGenerator = new Random(); + // + // System.out.println("leonardo.candela TIMELINE: "); + // List recentFeeds = store.getRecentFeedsByUser("leonardo.candela", randomGenerator.nextInt(50)); + // assertNotNull(recentFeeds); + // for (Feed recFeed :recentFeeds) + // System.out.println(recFeed); + try { //store.enableDeletedPosts(); - System.out.println("/gcube/devsec/devVRE TIMELINE: "); - int from = 1; + System.out.println("Notifications TIMELINE: "); + + int from = 0; for (int i = 0; i < 5; i++) { System.out.println("\nFROM="+from); - RangeFeeds range = store.getRecentFeedsByVREAndRange("/gcube/devsec/TestVREFolder2", from, 5); - List recentFeeds = range.getFeeds(); - assertNotNull(recentFeeds); - for (Feed recFeed :recentFeeds) - System.out.println("->"+recFeed.getDescription()); - from = range.getLastReturnedFeedTimelineIndex()-1; + List range = store.getRangeNotificationsByUser("massimiliano.assante", from, 50); + for (Notification notification : range) { + System.out.println(notification.getDescription()); + from = 1+i * 50; + } } - + // int from = 1; + // for (int i = 0; i < 5; i++) { + // System.out.println("\nFROM="+from); + // RangeFeeds range = store.getRecentFeedsByVREAndRange("/gcube/devsec/TestVREFolder2", from, 5); + // List recentFeeds = range.getFeeds(); + // assertNotNull(recentFeeds); + // for (Feed recFeed :recentFeeds) + // System.out.println("->"+recFeed.getDescription()); + // from = range.getLastReturnedFeedTimelineIndex()-1; + // } -// System.out.println("PORTAL TIMELINE: "); -// recentFeeds = store.getAllPortalPrivacyLevelFeeds(); -// assertNotNull(recentFeeds); -// for (Feed recFeed :recentFeeds) -// System.out.println(recFeed); + + // System.out.println("PORTAL TIMELINE: "); + // recentFeeds = store.getAllPortalPrivacyLevelFeeds(); + // assertNotNull(recentFeeds); + // for (Feed recFeed :recentFeeds) + // System.out.println(recFeed); } catch (Exception e) { e.printStackTrace(); } } -// -// // @Test -// // public void testNotifications() { -// // int count = 10; -// // Notification notf = null; -// // for (int i = 0; i < count; i++) { -// // notf = new Notification(UUID.randomUUID().toString(), NotificationType.MESSAGE, "massimiliano.assante", new Date(), "http://urir.com", "Desc #"+i, "Gino Camillo", false); -// // assertTrue(store.saveNotification(notf)); -// // } -// // try { -// // assertNotNull(store.getAllNotificationByUser("massimiliano.assante")); -// // } catch (Exception e) { -// // e.printStackTrace(); -// // } -// // } -// -// @Test -// public void testComments() { -// int count = 10; -// Feed feed = new Feed(UUID.randomUUID().toString(), FeedType.SHARE, "massimiliano.assante", new Date(), "/gcube/devsec/devVRE", -// "http://www.d4science.org/monitor", "thumbUri", "This is feed that is going to be commented ", PrivacyLevel.PUBLIC, "Massimiliano Assante", -// "massimiliano.assante@isti.cnr.it", "thumburl", "linkTitle", "linkDesc", "host", false); -// assertTrue(store.saveUserFeed(feed)); -// -// Comment toDelete = null; -// for (int i = 0; i < count; i++) { -// try { -// toDelete = new Comment(UUID.randomUUID().toString(),"leonardo.candela", -// new Date(), feed.getKey().toString(), "This comment #"+i, "Leonardo Candela", "thumbUrl"); -// assertTrue(store.addComment(toDelete)); -// -// } catch (FeedIDNotFoundException e) { -// System.out.println("Exception feed id not found"); -// } -// } -// System.out.println("GetAllCOmmentsByFeed "); -// for (Comment cm : store.getAllCommentByFeed(feed.getKey().toString())) { -// System.out.println(cm.getText()); -// }; -// -// try { -// assertTrue(store.deleteComment(toDelete.getKey(), toDelete.getFeedid())); -// } catch (Exception e) { -// System.out.println("Exception feed id not found"); -// } -// } -// -// @Test -// public void testLikes() { -// int count = 10; -// Feed feed = new Feed(UUID.randomUUID().toString(), FeedType.SHARE, "massimiliano.assante", new Date(), "/gcube/devsec/devVRE", -// "http://www.d4science.org/monitor", "thumbUri", "This feed is Liked ", PrivacyLevel.PUBLIC, -// "Massimiliano Assante", "massimiliano.assante@isti.cnr.it", "thumburl", "linkTitle", "linkDesc", "host", false); -// assertTrue(store.saveUserFeed(feed)); -// Like toUnlike = new Like(UUID.randomUUID().toString(),"massimiliano.assante", -// new Date(), feed.getKey().toString(), "Massi Pallino", "thumbUrl"); -// -// try { -// assertTrue(store.like(toUnlike)); -// for (int i = 0; i < count; i++) -// assertTrue(store.like(new Like(UUID.randomUUID().toString(),"massimiliano.assante", -// new Date(), feed.getKey().toString(), "Rino Pallino", "thumbUrl"))); -// -// System.out.println("massimiliano.assante liked the following feeds: "); -// for (String feedid : store.getAllLikedFeedIdsByUser("massimiliano.assante")) { -// System.out.println(feedid); -// } -// -// for (Like like : store.getAllLikesByFeed(feed.getKey().toString())) { -// System.out.println(like); -// } -// -// System.out.println("trying unlike"); -// assertTrue(store.unlike(toUnlike.getKey(), toUnlike.getFeedid())); -// -// } catch (Exception e) { -// System.out.println("Exception feed id not found"); -// } -// } + // + // // @Test + // // public void testNotifications() { + // // int count = 10; + // // Notification notf = null; + // // for (int i = 0; i < count; i++) { + // // notf = new Notification(UUID.randomUUID().toString(), NotificationType.MESSAGE, "massimiliano.assante", new Date(), "http://urir.com", "Desc #"+i, "Gino Camillo", false); + // // assertTrue(store.saveNotification(notf)); + // // } + // // try { + // // assertNotNull(store.getAllNotificationByUser("massimiliano.assante")); + // // } catch (Exception e) { + // // e.printStackTrace(); + // // } + // // } + // + // @Test + // public void testComments() { + // int count = 10; + // Feed feed = new Feed(UUID.randomUUID().toString(), FeedType.SHARE, "massimiliano.assante", new Date(), "/gcube/devsec/devVRE", + // "http://www.d4science.org/monitor", "thumbUri", "This is feed that is going to be commented ", PrivacyLevel.PUBLIC, "Massimiliano Assante", + // "massimiliano.assante@isti.cnr.it", "thumburl", "linkTitle", "linkDesc", "host", false); + // assertTrue(store.saveUserFeed(feed)); + // + // Comment toDelete = null; + // for (int i = 0; i < count; i++) { + // try { + // toDelete = new Comment(UUID.randomUUID().toString(),"leonardo.candela", + // new Date(), feed.getKey().toString(), "This comment #"+i, "Leonardo Candela", "thumbUrl"); + // assertTrue(store.addComment(toDelete)); + // + // } catch (FeedIDNotFoundException e) { + // System.out.println("Exception feed id not found"); + // } + // } + // System.out.println("GetAllCOmmentsByFeed "); + // for (Comment cm : store.getAllCommentByFeed(feed.getKey().toString())) { + // System.out.println(cm.getText()); + // }; + // + // try { + // assertTrue(store.deleteComment(toDelete.getKey(), toDelete.getFeedid())); + // } catch (Exception e) { + // System.out.println("Exception feed id not found"); + // } + // } + // + // @Test + // public void testLikes() { + // int count = 10; + // Feed feed = new Feed(UUID.randomUUID().toString(), FeedType.SHARE, "massimiliano.assante", new Date(), "/gcube/devsec/devVRE", + // "http://www.d4science.org/monitor", "thumbUri", "This feed is Liked ", PrivacyLevel.PUBLIC, + // "Massimiliano Assante", "massimiliano.assante@isti.cnr.it", "thumburl", "linkTitle", "linkDesc", "host", false); + // assertTrue(store.saveUserFeed(feed)); + // Like toUnlike = new Like(UUID.randomUUID().toString(),"massimiliano.assante", + // new Date(), feed.getKey().toString(), "Massi Pallino", "thumbUrl"); + // + // try { + // assertTrue(store.like(toUnlike)); + // for (int i = 0; i < count; i++) + // assertTrue(store.like(new Like(UUID.randomUUID().toString(),"massimiliano.assante", + // new Date(), feed.getKey().toString(), "Rino Pallino", "thumbUrl"))); + // + // System.out.println("massimiliano.assante liked the following feeds: "); + // for (String feedid : store.getAllLikedFeedIdsByUser("massimiliano.assante")) { + // System.out.println(feedid); + // } + // + // for (Like like : store.getAllLikesByFeed(feed.getKey().toString())) { + // System.out.println(like); + // } + // + // System.out.println("trying unlike"); + // assertTrue(store.unlike(toUnlike.getKey(), toUnlike.getFeedid())); + // + // } catch (Exception e) { + // System.out.println("Exception feed id not found"); + // } + // } } 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 2fc7cdc..b2c92e0 100644 --- a/src/main/java/org/gcube/portal/databook/server/DatabookStore.java +++ b/src/main/java/org/gcube/portal/databook/server/DatabookStore.java @@ -177,7 +177,17 @@ public interface DatabookStore { * @throws ColumnNameNotFoundException */ List getAllNotificationByUser(String userid, int limit) throws NotificationTypeNotFoundException, ColumnNameNotFoundException, NotificationIDNotFoundException; - + /** + * + * @param userid user identifier + * @param from the range start has to be greater than 0 + * @param quantity the number of most recent notifications for this user starting from "from" param + * @return all the notifications for the userid in the range requested + * @throws NotificationTypeNotFoundException + * @throws ColumnNameNotFoundException + * @throws NotificationIDNotFoundException + */ + List getRangeNotificationsByUser(String userid, int from, int quantity) throws NotificationTypeNotFoundException, ColumnNameNotFoundException, NotificationIDNotFoundException; /** * This is a fast way to set all notification to read quickly * @param userid