From 78de1cb3d363d84f80cecfa52bdf8ee6333b48be Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Tue, 27 Jun 2017 11:44:28 -0400 Subject: [PATCH] persist curator's review comments to database #3943 --- .../database/upgrades/upgrade_v4.7_to_v4.7.1.sql | 1 + .../edu/harvard/iq/dataverse/UserNotification.java | 13 ++++++++++++- .../iq/dataverse/UserNotificationServiceBean.java | 8 +++++++- .../java/edu/harvard/iq/dataverse/api/Datasets.java | 2 +- .../edu/harvard/iq/dataverse/api/Notifications.java | 4 ++++ .../iq/dataverse/api/InReviewWorkflowIT.java | 5 +++++ 6 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 scripts/database/upgrades/upgrade_v4.7_to_v4.7.1.sql diff --git a/scripts/database/upgrades/upgrade_v4.7_to_v4.7.1.sql b/scripts/database/upgrades/upgrade_v4.7_to_v4.7.1.sql new file mode 100644 index 00000000000..63e0a8ff6fe --- /dev/null +++ b/scripts/database/upgrades/upgrade_v4.7_to_v4.7.1.sql @@ -0,0 +1 @@ +ALTER TABLE usernotification ADD COLUMN text TEXT default NULL; diff --git a/src/main/java/edu/harvard/iq/dataverse/UserNotification.java b/src/main/java/edu/harvard/iq/dataverse/UserNotification.java index 3cb9eb7f9b1..d3041091862 100644 --- a/src/main/java/edu/harvard/iq/dataverse/UserNotification.java +++ b/src/main/java/edu/harvard/iq/dataverse/UserNotification.java @@ -50,7 +50,10 @@ public enum Type { @Transient String roleString; - + + @Column(columnDefinition = "TEXT", nullable = true) + private String text; + private boolean emailed; public Long getId() { @@ -121,6 +124,14 @@ public void setDisplayAsRead(boolean displayAsRead) { this.displayAsRead = displayAsRead; } + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + public boolean isEmailed() { return emailed; } diff --git a/src/main/java/edu/harvard/iq/dataverse/UserNotificationServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/UserNotificationServiceBean.java index 59b040ad3de..144f6f283b5 100644 --- a/src/main/java/edu/harvard/iq/dataverse/UserNotificationServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/UserNotificationServiceBean.java @@ -76,14 +76,20 @@ public UserNotification save(UserNotification userNotification) { public void delete(UserNotification userNotification) { em.remove(em.merge(userNotification)); } - + public void sendNotification(AuthenticatedUser dataverseUser, Timestamp sendDate, Type type, Long objectId) { + String noExtraTextOrComments = null; + sendNotification(dataverseUser, sendDate, type, objectId, noExtraTextOrComments); + } + + public void sendNotification(AuthenticatedUser dataverseUser, Timestamp sendDate, Type type, Long objectId, String text) { UserNotification userNotification = new UserNotification(); userNotification.setUser(dataverseUser); userNotification.setSendDate(sendDate); userNotification.setType(type); userNotification.setObjectId(objectId); + userNotification.setText(text); if (mailService.sendNotificationEmail(userNotification)) { logger.fine("email was sent"); userNotification.setEmailed(true); diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java b/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java index 3169646109d..282a38c21e2 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java @@ -663,7 +663,7 @@ public Response returnToAuthor(@PathParam("id") String idSupplied, String jsonBo editUsers.remove(au); } for (AuthenticatedUser au : editUsers) { - userNotificationSvc.sendNotification(au, new Timestamp(new Date().getTime()), UserNotification.Type.RETURNEDDS, dataset.getLatestVersion().getId()); + userNotificationSvc.sendNotification(au, new Timestamp(new Date().getTime()), UserNotification.Type.RETURNEDDS, dataset.getLatestVersion().getId(), json.getString("comments")); } JsonObjectBuilder result = Json.createObjectBuilder(); result.add("inReview", inReview); diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Notifications.java b/src/main/java/edu/harvard/iq/dataverse/api/Notifications.java index 916a13b3673..e4ec5a36651 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Notifications.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Notifications.java @@ -36,6 +36,10 @@ public Response getAllNotificationsForUser() { for (UserNotification notification : notifications) { JsonObjectBuilder notificationObjectBuilder = Json.createObjectBuilder(); notificationObjectBuilder.add("type", notification.getType().toString()); + String comments = notification.getText(); + if (comments != null) { + notificationObjectBuilder.add("comments", comments); + } jsonArrayBuilder.add(notificationObjectBuilder); } JsonObjectBuilder result = Json.createObjectBuilder().add("notifications", jsonArrayBuilder); diff --git a/src/test/java/edu/harvard/iq/dataverse/api/InReviewWorkflowIT.java b/src/test/java/edu/harvard/iq/dataverse/api/InReviewWorkflowIT.java index 4f9003e2e25..fae08d6f138 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/InReviewWorkflowIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/InReviewWorkflowIT.java @@ -112,9 +112,14 @@ public void testCuratorSendsCommentsToAuthor() { authorsChecksForCommentsAgain.prettyPrint(); authorsChecksForCommentsAgain.then().assertThat() .body("data.notifications[0].type", equalTo("RETURNEDDS")) + // The author thinks, "This why we have curators!" + .body("data.notifications[0].comments", equalTo("You forgot to upload your files.")) .body("data.notifications[1].type", equalTo("CREATEACC")) + .body("data.notifications[1].comments", equalTo(null)) .statusCode(OK.getStatusCode()); + // Author then makes corrections (uploads files, in this case), etc. + // These println's are here in case you want to log into the GUI to see what notifications look like. System.out.println("Curator username/password: " + curatorUsername); System.out.println("Author username/password: " + authorUsername);