diff --git a/src/main/java/se/su/dsv/scipro/data/controllers/FinalSeminarUploadController.java b/src/main/java/se/su/dsv/scipro/data/controllers/FinalSeminarUploadController.java index 89ecc8ad9e..0c03a098ff 100644 --- a/src/main/java/se/su/dsv/scipro/data/controllers/FinalSeminarUploadController.java +++ b/src/main/java/se/su/dsv/scipro/data/controllers/FinalSeminarUploadController.java @@ -24,5 +24,4 @@ public interface FinalSeminarUploadController extends IClusterable { void storeSeminarDocument(FileUpload upload, User uploader, FinalSeminar seminar) throws Exception; void storeOpposition(FileUpload upload, User uploader, FinalSeminarOpposition opposition) throws Exception; - } 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 ba1bf5019a..cc6dd04594 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 @@ -1,5 +1,7 @@ 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.User; import se.su.dsv.scipro.data.enums.NotificationPriority; @@ -10,5 +12,32 @@ import se.su.dsv.scipro.data.enums.NotificationPriority; */ public interface NotificationController { - public void processNotification(User usertoNotify, NotificationMessage notificationMessage, String absoluteUrl, NotificationPriority notificationPriority); + public void processNotification(User usertoNotify, NotificationMessage notificationMessage, + String absoluteUrl, NotificationPriority notificationPriority); + + public void createNotificationForPrivateMessage(final User user, final String message, + final String url); + + public void createNotificationForConference(final User user, final String message, + final String messageboardTitle, final NotificationPriority notificationPriority, + final String absolutePath); + + public void createNotificationForComment(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, + final String url); + + public void createNotificationForFinalSeminarEdited(final User user, + final FinalSeminar finalSeminar, final NotificationPriority notificationPriority, + final String absolutePath); + public void createNotificationForCreateFinalSeminar(final User user, final FinalSeminar finalSemniar, + final NotificationPriority notificationPriority, final String absolutePath, final boolean opponent); + public void createNotificationForThesisUploaded(final User user, + final FinalSeminar finalSeminar, final NotificationPriority notificationPriority, + final String absolutePath); + public void createNotificationForOppositionUploaded(final User user, + final FinalSeminarOpposition opposition, + final NotificationPriority notificationPriority, final String absolutePath); } 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 b0622c61a8..5eb8e8f616 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 @@ -3,16 +3,23 @@ package se.su.dsv.scipro.data.controllers.impl; import java.io.IOException; import java.util.Date; import java.util.List; +import java.util.Properties; import javax.persistence.PersistenceException; import org.apache.log4j.Level; import org.apache.log4j.Logger; +import org.apache.wicket.PageParameters; +import org.apache.wicket.RequestCycle; import org.apache.wicket.markup.html.form.upload.FileUpload; +import org.apache.wicket.protocol.http.RequestUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import se.su.dsv.scipro.SciProSession; import se.su.dsv.scipro.data.controllers.FinalSeminarUploadController; +import se.su.dsv.scipro.data.controllers.NotificationController; +import se.su.dsv.scipro.data.controllers.NotificationMessage; import se.su.dsv.scipro.data.dao.interfaces.CheckPlagiarismEventDao; import se.su.dsv.scipro.data.dao.interfaces.FileDescriptionDao; import se.su.dsv.scipro.data.dao.interfaces.FinalSeminarDao; @@ -22,12 +29,20 @@ import se.su.dsv.scipro.data.dao.interfaces.ProjectDao; import se.su.dsv.scipro.data.dataobjects.CheckPlagiarismEvent; import se.su.dsv.scipro.data.dataobjects.FileDescription; import se.su.dsv.scipro.data.dataobjects.FinalSeminar; +import se.su.dsv.scipro.data.dataobjects.FinalSeminarActiveParticipation; import se.su.dsv.scipro.data.dataobjects.FinalSeminarOpposition; import se.su.dsv.scipro.data.dataobjects.Project; +import se.su.dsv.scipro.data.dataobjects.ProjectFollower; 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.project.pages.ProjectOppositionPage; +import se.su.dsv.scipro.project.pages.ProjectStartPage; import se.su.dsv.scipro.repository.FileRepository; import se.su.dsv.scipro.repository.util.FileStorageException; +import se.su.dsv.scipro.supervisor.pages.SupervisorProjectsFinalSeminarPage; +import se.su.dsv.scipro.supervisor.pages.SupervisorStartPage; +import se.su.dsv.scipro.util.PropsUtils; @Controller("seminarUploadController") public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadController { @@ -57,6 +72,9 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr @Autowired private CheckPlagiarismEventDao checkPlagiarismEventDao; + @Autowired + private NotificationController notificationController; + private FileDescription store(FileUpload upload, String storeToPath) throws IOException { fileRepository.storeFile(upload, storeToPath); List<FileDescription> fds = fileRepository.searchFiles(storeToPath); @@ -148,6 +166,27 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr checkPlagiarismEventDao.save(checkPlagiarismEvent); } + for (FinalSeminarActiveParticipation fa : seminar.getActiveParticipations()) { + + notificationController.createNotificationForThesisUploaded(fa.getUser(), seminar, + NotificationPriority.HIGH, ProjectOppositionPage.getAbsoluteURL()); + } + + for (FinalSeminarOpposition fo : seminar.getOppositions()) { + notificationController.createNotificationForThesisUploaded(fo.getOpponent().getUser(), seminar, + NotificationPriority.HIGH, ProjectOppositionPage.getAbsoluteURL()); + } + + for (ProjectFollower pf : seminar.getProject().getProjectFollowers()) { + notificationController.createNotificationForThesisUploaded(pf.getFollower().getUser(), seminar, + NotificationPriority.HIGH, SupervisorProjectsFinalSeminarPage.getAbsoluteURL()); + } + if (seminar.getProject().getHeadSupervisor() != null) { + notificationController.createNotificationForThesisUploaded(seminar.getProject().getHeadSupervisor() + .getUser(), seminar, NotificationPriority.HIGH, + SupervisorProjectsFinalSeminarPage.getAbsoluteURL()); + } + } catch (IOException e) { Logger.getRootLogger().log(Level.ERROR, "Error while storing seminardocument: " + e.getMessage()); @@ -178,6 +217,20 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr opposition.setOpponentReport(fd); opposition.setDateReported(new Date()); opposition = finalSeminarOppositionDao.save(opposition); + + for (Student student : opposition.getFinalSeminar().getProject().getProjectParticipants()) { + notificationController.createNotificationForOppositionUploaded(student.getUser(), opposition, + NotificationPriority.HIGH, ProjectStartPage.getAbsoluteURL()); + } + for (ProjectFollower pf : opposition.getFinalSeminar().getProject().getProjectFollowers()) { + notificationController.createNotificationForOppositionUploaded(pf.getFollower().getUser(), opposition, + NotificationPriority.HIGH, SupervisorProjectsFinalSeminarPage.getAbsoluteURL()); + } + if (opposition.getFinalSeminar().getProject().getHeadSupervisor() != null) { + notificationController.createNotificationForOppositionUploaded(opposition.getFinalSeminar().getProject().getHeadSupervisor() + .getUser(), opposition, NotificationPriority.HIGH, + SupervisorProjectsFinalSeminarPage.getAbsoluteURL()); + } } catch (IOException e) { Logger.getRootLogger().log(Level.ERROR, "Error while storing opposition report: " + e.getMessage()); @@ -205,4 +258,10 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr + String.valueOf(o.getId()) + "/"; } + + + + + + } 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 3159af89f5..9047e1d33e 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 @@ -1,16 +1,21 @@ package se.su.dsv.scipro.data.controllers.impl; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.Properties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import se.su.dsv.scipro.SciProSession; import se.su.dsv.scipro.data.controllers.NotificationController; import se.su.dsv.scipro.data.controllers.NotificationMessage; import se.su.dsv.scipro.data.dao.interfaces.GeneralSystemSettingsDao; import se.su.dsv.scipro.data.dao.interfaces.MailEventDao; import se.su.dsv.scipro.data.dao.interfaces.UserSettingsDao; import se.su.dsv.scipro.data.dao.interfaces.WebNotificationDao; +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.User; @@ -138,4 +143,227 @@ public class NotificationControllerImpl implements NotificationController { return message; } + + @Override + public void createNotificationForPrivateMessage(final User user, final String message, + final String url) { + Properties props = null; + try { + props = PropsUtils.load("notification.properties"); + } catch (Exception e) { + e.printStackTrace(); + } + String mailSubject = props.getProperty("mailSubject"); + String privateMessageNotification = props.getProperty("privateMessageNotification"); + String twoNewLines = props.getProperty("twoNewLines"); + + String webNotificationMessage = SciProSession.get().getUser() + privateMessageNotification; + + String mailMessage = webNotificationMessage + twoNewLines + message; + + NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage, + mailSubject, mailMessage); + processNotification(user, notificationMessage, url, NotificationPriority.MEDIUM); + + } + + @Override + public void createNotificationForConference(final User user, final String message, + final String messageboardTitle, final NotificationPriority notificationPriority, + final String absolutePath) { + + Properties props = null; + try { + props = PropsUtils.load("notification.properties"); + } catch (Exception e) { + e.printStackTrace(); + } + String mailSubject = props.getProperty("mailSubject"); + String conferenceNotification = props.getProperty("conferenceNotification"); + String twoNewLines = props.getProperty("twoNewLines"); + String quote = props.getProperty("quote"); + + String webNotificationMessage = SciProSession.get().getUser() + conferenceNotification + + quote + messageboardTitle + quote; + + String mailMessage = webNotificationMessage + twoNewLines + message; + + NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage, + mailSubject, mailMessage); + processNotification(user, notificationMessage, absolutePath, notificationPriority); + } + + @Override + public void createNotificationForComment(final User user, final String message, + final NotificationPriority notificationPriority, final String title, + final String classId, final String absolutePath) { + + Properties props = null; + try { + props = PropsUtils.load("notification.properties"); + } catch (Exception e) { + e.printStackTrace(); + } + String mailSubject = props.getProperty("mailSubject"); + String conferenceNotification = props.getProperty("conferenceNotificationComment"); + String twoNewLines = props.getProperty("twoNewLines"); + + String webNotificationMessage = SciProSession.get().getUser() + conferenceNotification + + title; + + String mailMessage = webNotificationMessage + twoNewLines + message; + + NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage, + mailSubject, mailMessage); + processNotification(user, notificationMessage, absolutePath + "&" + classId, + notificationPriority); + } + + @Override + public void createNotificationForReplyPrivateMessage(final User user, final String message, + final String absolutePath) { + Properties props = null; + try { + props = PropsUtils.load("notification.properties"); + } catch (Exception e) { + e.printStackTrace(); + } + String mailSubject = props.getProperty("mailSubject"); + String privateMessageNotification = props.getProperty("privateMessageReplyNotification"); + String twoNewLines = props.getProperty("twoNewLines"); + + String webNotificationMessage = SciProSession.get().getUser() + privateMessageNotification; + + String mailMessage = webNotificationMessage + twoNewLines + message; + + NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage, + mailSubject, mailMessage); + processNotification(user, notificationMessage, absolutePath, NotificationPriority.MEDIUM); + } + + @Override + public void createNotificationForFinalSeminarEdited(final User user, + final FinalSeminar finalSeminar, final NotificationPriority notificationPriority, + final String absolutePath) { + + Properties props = null; + try { + props = PropsUtils.load("notification.properties"); + } catch (Exception e) { + e.printStackTrace(); + } + String mailSubject = props.getProperty("mailSubject"); + String finalSeminarReportEdited = props.getProperty("finalSeminarOppositionReportEdited"); + String finalSeminarOppositionReportBeenEdited = props + .getProperty("finalSeminarOppositionReportBeenEdited"); + String quote = props.getProperty("quote"); + + String webNotificationMessage = finalSeminarReportEdited + quote + + finalSeminar.getProject().getTitle() + quote + + finalSeminarOppositionReportBeenEdited; + String mailMessage = webNotificationMessage; + + NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage, + mailSubject, mailMessage); + processNotification(user, notificationMessage, absolutePath, + notificationPriority); + } + + @Override + public void createNotificationForCreateFinalSeminar(final User user, final FinalSeminar finalSemniar, + final NotificationPriority notificationPriority, final String absolutePath, final boolean opponent) { + + Properties props = null; + try { + props = PropsUtils.load("notification.properties"); + } catch (Exception e) { + e.printStackTrace(); + } + + String created = props.getProperty("finalSeminarCreated"); + String mailSubject = props.getProperty("mailSubject"); + String project = ""; + if(!opponent){ + project = props.getProperty("finalSeminarProject"); + }else{ + project = props.getProperty("finalSeminarProjectOpponnent"); + } + + String comma = props.getProperty("comma"); + String space = props.getProperty("space"); + String quote = props.getProperty("quote"); + + DateFormat dfFrom = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + DateFormat dfTo = new SimpleDateFormat("-HH:mm"); + String webNotificationMessage = created + quote + finalSemniar.getProject().getTitle() + + quote + project + finalSemniar.getRoom() + comma + space + + dfFrom.format(finalSemniar.getStartDate()) + + dfTo.format(finalSemniar.getEndDate()); + + String mailMessage = webNotificationMessage; + + NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage, + mailSubject, mailMessage); + processNotification(user, notificationMessage, absolutePath, + notificationPriority); + } + + @Override + public void createNotificationForThesisUploaded(final User user, + final FinalSeminar finalSeminar, final NotificationPriority notificationPriority, + final String absolutePath) { + + Properties props = null; + try { + props = PropsUtils.load("notification.properties"); + } catch (Exception e) { + e.printStackTrace(); + } + String mailSubject = props.getProperty("mailSubject"); + String finalSeminarReportUploaded = props.getProperty("finalSeminarReportUploaded"); + String finalSeminarReportBeenUploaded = props.getProperty("finalSeminarReportBeenUploaded"); + String quote = props.getProperty("quote"); + + String webNotificationMessage = finalSeminarReportUploaded + quote + + finalSeminar.getProject().getTitle() + quote + finalSeminarReportBeenUploaded; + String mailMessage = webNotificationMessage; + + NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage, + mailSubject, mailMessage); + processNotification(user, notificationMessage, absolutePath, + notificationPriority); + } + + @Override + public void createNotificationForOppositionUploaded(final User user, + final FinalSeminarOpposition opposition, + final NotificationPriority notificationPriority, final String absolutePath) { + + Properties props = null; + try { + props = PropsUtils.load("notification.properties"); + } catch (Exception e) { + e.printStackTrace(); + } + String mailSubject = props.getProperty("mailSubject"); + String finalSeminarOppositionReportUploaded = props + .getProperty("finalSeminarOppositionReportUploaded"); + String finalSeminarOppositionReportBeenUploaded = props + .getProperty("finalSeminarOppositionReportBeenUploaded"); + String dot = props.getProperty("dot"); + String quote = props.getProperty("quote"); + String space = props.getProperty("space"); + + String webNotificationMessage = finalSeminarOppositionReportUploaded + quote + + opposition.getFinalSeminar().getProject().getTitle() + quote + + finalSeminarOppositionReportBeenUploaded + + opposition.getOpponent().getUser().getFirstName() + space + + opposition.getOpponent().getUser().getLastName() + dot; + String mailMessage = webNotificationMessage; + + NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage, + mailSubject, mailMessage); + processNotification(user, notificationMessage, absolutePath, + notificationPriority); + } }