diff --git a/src/main/java/se/su/dsv/scipro/data/controllers/NotificationController.java b/src/main/java/se/su/dsv/scipro/data/controllers/NotificationController.java index fb9d8ca595..f9aa382f22 100644 --- a/src/main/java/se/su/dsv/scipro/data/controllers/NotificationController.java +++ b/src/main/java/se/su/dsv/scipro/data/controllers/NotificationController.java @@ -2,8 +2,12 @@ package se.su.dsv.scipro.data.controllers; import se.su.dsv.scipro.data.dataobjects.FinalSeminar; import se.su.dsv.scipro.data.dataobjects.FinalSeminarOpposition; +import se.su.dsv.scipro.data.dataobjects.Project; +import se.su.dsv.scipro.data.dataobjects.Student; import se.su.dsv.scipro.data.dataobjects.User; import se.su.dsv.scipro.data.enums.NotificationPriority; +import se.su.dsv.scipro.peer.data.dataobjects.PeerRequest; +import se.su.dsv.scipro.peer.data.dataobjects.PeerReview; /** * @@ -12,32 +16,38 @@ import se.su.dsv.scipro.data.enums.NotificationPriority; */ public interface NotificationController { - public void createNotificationForPrivateMessage(final User user, final String message, + public void notifyPrivateMessage(final User user, final String message, final String url); - public void createNotificationForConference(final User user, final String message, + public void notifyConferencePost(final User user, final String message, final String messageboardTitle, final NotificationPriority notificationPriority, final String absolutePath); - public void createNotificationForComment(final User user, final String message, + public void notifyForComment(final User user, final String message, final NotificationPriority notificationPriority, final String title, final String classId, final String absolutePath); - public void createNotificationForReplyPrivateMessage(final User user, final String message, + public void notifyReplyPrivateMessage(final User user, final String message, final String url); - public void createNotificationForFinalSeminarEdited(final User user, + public void notifyFinalSeminarEdited(final User user, final FinalSeminar finalSeminar, final NotificationPriority notificationPriority, final String absolutePath); - public void createNotificationForCreateFinalSeminar(final User user, final FinalSeminar finalSemniar, + public void notifyCreateFinalSeminar(final User user, final FinalSeminar finalSemniar, final NotificationPriority notificationPriority, final String absolutePath, final boolean opponent); - public void createNotificationForThesisUploaded(final User user, + public void notifyThesisUploaded(final User user, final FinalSeminar finalSeminar, final NotificationPriority notificationPriority, final String absolutePath); - public void createNotificationForOppositionUploaded(final User user, + public void notifyOppositionUploaded(final User user, final FinalSeminarOpposition opposition, final NotificationPriority notificationPriority, final String absolutePath); + + public void notifyOfReviewRating(PeerReview review); + + public void notifyCompletionOfReview(PeerReview review); + + public void notifyAcceptOfReview(PeerRequest request, Student student, Project project); } diff --git a/src/main/java/se/su/dsv/scipro/data/controllers/impl/FinalSeminarUploadControllerImpl.java b/src/main/java/se/su/dsv/scipro/data/controllers/impl/FinalSeminarUploadControllerImpl.java index 5eb8e8f616..f8ba468932 100644 --- a/src/main/java/se/su/dsv/scipro/data/controllers/impl/FinalSeminarUploadControllerImpl.java +++ b/src/main/java/se/su/dsv/scipro/data/controllers/impl/FinalSeminarUploadControllerImpl.java @@ -168,21 +168,21 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr for (FinalSeminarActiveParticipation fa : seminar.getActiveParticipations()) { - notificationController.createNotificationForThesisUploaded(fa.getUser(), seminar, + notificationController.notifyThesisUploaded(fa.getUser(), seminar, NotificationPriority.HIGH, ProjectOppositionPage.getAbsoluteURL()); } for (FinalSeminarOpposition fo : seminar.getOppositions()) { - notificationController.createNotificationForThesisUploaded(fo.getOpponent().getUser(), seminar, + notificationController.notifyThesisUploaded(fo.getOpponent().getUser(), seminar, NotificationPriority.HIGH, ProjectOppositionPage.getAbsoluteURL()); } for (ProjectFollower pf : seminar.getProject().getProjectFollowers()) { - notificationController.createNotificationForThesisUploaded(pf.getFollower().getUser(), seminar, + notificationController.notifyThesisUploaded(pf.getFollower().getUser(), seminar, NotificationPriority.HIGH, SupervisorProjectsFinalSeminarPage.getAbsoluteURL()); } if (seminar.getProject().getHeadSupervisor() != null) { - notificationController.createNotificationForThesisUploaded(seminar.getProject().getHeadSupervisor() + notificationController.notifyThesisUploaded(seminar.getProject().getHeadSupervisor() .getUser(), seminar, NotificationPriority.HIGH, SupervisorProjectsFinalSeminarPage.getAbsoluteURL()); } @@ -219,15 +219,15 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr opposition = finalSeminarOppositionDao.save(opposition); for (Student student : opposition.getFinalSeminar().getProject().getProjectParticipants()) { - notificationController.createNotificationForOppositionUploaded(student.getUser(), opposition, + notificationController.notifyOppositionUploaded(student.getUser(), opposition, NotificationPriority.HIGH, ProjectStartPage.getAbsoluteURL()); } for (ProjectFollower pf : opposition.getFinalSeminar().getProject().getProjectFollowers()) { - notificationController.createNotificationForOppositionUploaded(pf.getFollower().getUser(), opposition, + notificationController.notifyOppositionUploaded(pf.getFollower().getUser(), opposition, NotificationPriority.HIGH, SupervisorProjectsFinalSeminarPage.getAbsoluteURL()); } if (opposition.getFinalSeminar().getProject().getHeadSupervisor() != null) { - notificationController.createNotificationForOppositionUploaded(opposition.getFinalSeminar().getProject().getHeadSupervisor() + notificationController.notifyOppositionUploaded(opposition.getFinalSeminar().getProject().getHeadSupervisor() .getUser(), opposition, NotificationPriority.HIGH, SupervisorProjectsFinalSeminarPage.getAbsoluteURL()); } diff --git a/src/main/java/se/su/dsv/scipro/data/controllers/impl/NotificationControllerImpl.java b/src/main/java/se/su/dsv/scipro/data/controllers/impl/NotificationControllerImpl.java index 4373fb64fb..fb11252c3f 100644 --- a/src/main/java/se/su/dsv/scipro/data/controllers/impl/NotificationControllerImpl.java +++ b/src/main/java/se/su/dsv/scipro/data/controllers/impl/NotificationControllerImpl.java @@ -4,6 +4,9 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Properties; +import org.apache.wicket.PageParameters; +import org.apache.wicket.RequestCycle; +import org.apache.wicket.protocol.http.RequestUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -18,10 +21,17 @@ import se.su.dsv.scipro.data.dataobjects.FinalSeminar; import se.su.dsv.scipro.data.dataobjects.FinalSeminarOpposition; import se.su.dsv.scipro.data.dataobjects.GeneralSystemSettings; import se.su.dsv.scipro.data.dataobjects.MailEvent; +import se.su.dsv.scipro.data.dataobjects.Project; +import se.su.dsv.scipro.data.dataobjects.Student; import se.su.dsv.scipro.data.dataobjects.User; import se.su.dsv.scipro.data.dataobjects.UserSettings; import se.su.dsv.scipro.data.dataobjects.WebNotification; import se.su.dsv.scipro.data.enums.NotificationPriority; +import se.su.dsv.scipro.peer.data.dataobjects.PeerRequest; +import se.su.dsv.scipro.peer.data.dataobjects.PeerReview; +import se.su.dsv.scipro.peer.pages.ProjectPeerReviewPage; +import se.su.dsv.scipro.peer.pages.ProjectPeerStatsPage; +import se.su.dsv.scipro.peer.pages.SupervisorPeerReviewPage; import se.su.dsv.scipro.util.PropsUtils; /** @@ -144,7 +154,7 @@ public class NotificationControllerImpl implements NotificationController { } @Override - public void createNotificationForPrivateMessage(final User user, final String message, + public void notifyPrivateMessage(final User user, final String message, final String url) { Properties props = null; try { @@ -167,7 +177,7 @@ public class NotificationControllerImpl implements NotificationController { } @Override - public void createNotificationForConference(final User user, final String message, + public void notifyConferencePost(final User user, final String message, final String messageboardTitle, final NotificationPriority notificationPriority, final String absolutePath) { @@ -193,7 +203,7 @@ public class NotificationControllerImpl implements NotificationController { } @Override - public void createNotificationForComment(final User user, final String message, + public void notifyForComment(final User user, final String message, final NotificationPriority notificationPriority, final String title, final String classId, final String absolutePath) { @@ -219,7 +229,7 @@ public class NotificationControllerImpl implements NotificationController { } @Override - public void createNotificationForReplyPrivateMessage(final User user, final String message, + public void notifyReplyPrivateMessage(final User user, final String message, final String absolutePath) { Properties props = null; try { @@ -239,9 +249,9 @@ public class NotificationControllerImpl implements NotificationController { mailSubject, mailMessage); processNotification(user, notificationMessage, absolutePath, NotificationPriority.MEDIUM); } - + @Override - public void createNotificationForFinalSeminarEdited(final User user, + public void notifyFinalSeminarEdited(final User user, final FinalSeminar finalSeminar, final NotificationPriority notificationPriority, final String absolutePath) { @@ -264,13 +274,13 @@ public class NotificationControllerImpl implements NotificationController { NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage, mailSubject, mailMessage); - processNotification(user, notificationMessage, absolutePath, - notificationPriority); + processNotification(user, notificationMessage, absolutePath, notificationPriority); } - + @Override - public void createNotificationForCreateFinalSeminar(final User user, final FinalSeminar finalSemniar, - final NotificationPriority notificationPriority, final String absolutePath, final boolean opponent) { + public void notifyCreateFinalSeminar(final User user, + final FinalSeminar finalSemniar, final NotificationPriority notificationPriority, + final String absolutePath, final boolean opponent) { Properties props = null; try { @@ -282,9 +292,9 @@ public class NotificationControllerImpl implements NotificationController { String created = props.getProperty("finalSeminarCreated"); String mailSubject = props.getProperty("mailSubject"); String project = ""; - if(!opponent){ + if (!opponent) { project = props.getProperty("finalSeminarProject"); - }else{ + } else { project = props.getProperty("finalSeminarProjectOpponnent"); } @@ -303,12 +313,11 @@ public class NotificationControllerImpl implements NotificationController { NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage, mailSubject, mailMessage); - processNotification(user, notificationMessage, absolutePath, - notificationPriority); + processNotification(user, notificationMessage, absolutePath, notificationPriority); } - + @Override - public void createNotificationForThesisUploaded(final User user, + public void notifyThesisUploaded(final User user, final FinalSeminar finalSeminar, final NotificationPriority notificationPriority, final String absolutePath) { @@ -329,12 +338,11 @@ public class NotificationControllerImpl implements NotificationController { NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage, mailSubject, mailMessage); - processNotification(user, notificationMessage, absolutePath, - notificationPriority); + processNotification(user, notificationMessage, absolutePath, notificationPriority); } - + @Override - public void createNotificationForOppositionUploaded(final User user, + public void notifyOppositionUploaded(final User user, final FinalSeminarOpposition opposition, final NotificationPriority notificationPriority, final String absolutePath) { @@ -362,7 +370,140 @@ public class NotificationControllerImpl implements NotificationController { NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage, mailSubject, mailMessage); - processNotification(user, notificationMessage, absolutePath, - notificationPriority); + processNotification(user, notificationMessage, absolutePath, notificationPriority); + } + + public void notifyAcceptOfReview(PeerRequest request, Student student, Project project) { + try { + Properties props = null; + + props = PropsUtils.load("notification.properties"); + + String mailSubject = props.getProperty("acceptPeerReviewSubject"); + String requestAccepted = props.getProperty("requestAccepted"); + String heShe = props.getProperty("heShe"); + String complete = props.getProperty("complete"); + + User requestingUser = request.getRequester().getUser(); + + String messageBody = requestAccepted + + student.getUser().toString() + + heShe + + project.getProjectClass().getProjectClassSettings() + .getNumDaysToSubmitPeerReview() + complete; + + String webNotificationMessage = requestAccepted + student.getUser().toString(); + + NotificationMessage notificationMessage = new NotificationMessage( + webNotificationMessage, mailSubject, messageBody); + + PageParameters pp = new PageParameters(); + + String peerStatsUrl = RequestUtils.toAbsolutePath(RequestCycle.get() + .urlFor(ProjectPeerStatsPage.class, pp).toString()); + + processNotification(requestingUser, notificationMessage, peerStatsUrl, + NotificationPriority.MEDIUM); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + public void notifyCompletionOfReview(PeerReview review) { + try { + + Properties props = null; + props = PropsUtils.load("notification.properties"); + String mailSubject = props.getProperty("completedReviewSubject"); + String requestReviewed = props.getProperty("requestReviewed"); + String supervisorMessageBody = props.getProperty("supervisorMessageBody"); + String supervisorMessageBody2 = props.getProperty("supervisorMessageBody2"); + String supervisorMessageBody3 = props.getProperty("supervisorMessageBody3"); + String commaWithLinebreak = props.getProperty("commaWithLinebreak"); + String inProject = props.getProperty("inProject"); + String hasPerformed = props.getProperty("hasPerformed"); + PeerRequest peerRequest = review.getPeerRequest(); + User requestingUser = peerRequest.getRequester().getUser(); + + PageParameters pp = new PageParameters(); + pp.add(PeerReview.PP_PEER_REVIEW_ID, review.getId().toString()); + + String reviewUrl = RequestUtils.toAbsolutePath(RequestCycle.get() + .urlFor(ProjectPeerReviewPage.class, pp).toString()); + String supervisorReviewUrl = RequestUtils.toAbsolutePath(RequestCycle.get() + .urlFor(SupervisorPeerReviewPage.class, pp).toString()); + + // Message for student when his/her review request is completed. + String messageBody = requestReviewed; + + NotificationMessage notificationMessage = new NotificationMessage(messageBody, + mailSubject, messageBody); + + processNotification(requestingUser, notificationMessage, reviewUrl, + NotificationPriority.MEDIUM); + + // Message for supervisor of the project with a completed review. + messageBody = supervisorMessageBody + peerRequest.getProject().getTitle() + + supervisorMessageBody2; + User requestSupervisor = peerRequest.getProject().getHeadSupervisor().getUser(); + + NotificationMessage notificationMessageSupervisorOfProject = new NotificationMessage( + messageBody, mailSubject, messageBody); + + processNotification(requestSupervisor, notificationMessageSupervisorOfProject, + supervisorReviewUrl, NotificationPriority.MEDIUM); + + // Message for supervisor of the reviewer that have made a review + // for another project. + + String webNotificationMessage = review.getReviewer().getUser().toString() + inProject + + review.getProject().getTitle() + hasPerformed; + + messageBody = supervisorMessageBody + review.getProject().getTitle() + + commaWithLinebreak + review.getReviewer().getUser().toString() + + supervisorMessageBody3; + + User reviewSupervisor = review.getProject().getHeadSupervisor().getUser(); + NotificationMessage notificationMessageSupervisorOfReviewer = new NotificationMessage( + webNotificationMessage, mailSubject, messageBody); + + processNotification(reviewSupervisor, notificationMessageSupervisorOfReviewer, + supervisorReviewUrl, NotificationPriority.MEDIUM); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * TODO Rewrite + * + * @param review + */ + public void notifyOfReviewRating(PeerReview review) { + try { + Properties props = null; + props = PropsUtils.load("notification.properties"); + String mailSubject = props.getProperty("reviewRatedSubject"); + String reviewRatedBody = props.getProperty("reviewRatedBody"); + User reviewingUser = review.getReviewer().getUser(); + + PageParameters pp = new PageParameters(); + pp.add(PeerReview.PP_PEER_REVIEW_ID, review.getId().toString()); + String projectReviewUrl = RequestUtils.toAbsolutePath(RequestCycle.get() + .urlFor(ProjectPeerReviewPage.class, pp).toString()); + + String messageBody = reviewRatedBody; + + NotificationMessage notificationMessage = new NotificationMessage(messageBody, + mailSubject, messageBody); + + processNotification(reviewingUser, notificationMessage, projectReviewUrl, + NotificationPriority.MEDIUM); + + } catch (Exception e) { + e.printStackTrace(); + } } }