diff --git a/src/main/java/se/su/dsv/scipro/opponent/panels/EditFinalSeminarFormPanel.java b/src/main/java/se/su/dsv/scipro/opponent/panels/EditFinalSeminarFormPanel.java index bb83c178f1..e402994bde 100644 --- a/src/main/java/se/su/dsv/scipro/opponent/panels/EditFinalSeminarFormPanel.java +++ b/src/main/java/se/su/dsv/scipro/opponent/panels/EditFinalSeminarFormPanel.java @@ -26,12 +26,14 @@ import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import org.odlabs.wiquery.ui.datepicker.DatePicker; +import se.su.dsv.scipro.admin.pages.AdminFinalSeminarPage; import se.su.dsv.scipro.components.autocomplete.AutoCompletionChoicesProvider; import se.su.dsv.scipro.components.autocomplete.MultiObjectAutoCompleteObjectConverter; import se.su.dsv.scipro.components.autocomplete.MultiObjectAutoCompleteRenderer; import se.su.dsv.scipro.components.autocomplete.UserProjectMultiObjectAutoCompleteBuilder; import se.su.dsv.scipro.components.autocomplete.UserProjectMultiObjectAutoCompleteField; import se.su.dsv.scipro.data.controllers.FinalSeminarUploadController; +import se.su.dsv.scipro.data.controllers.NotificationController; import se.su.dsv.scipro.data.dao.interfaces.FinalSeminarActiveParticipationDao; import se.su.dsv.scipro.data.dao.interfaces.FinalSeminarDao; import se.su.dsv.scipro.data.dao.interfaces.FinalSeminarOppositionDao; @@ -41,10 +43,14 @@ 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.FinalSeminarLanguages; +import se.su.dsv.scipro.data.enums.NotificationPriority; import se.su.dsv.scipro.opponent.models.OpponentModel; +import se.su.dsv.scipro.project.pages.ProjectOppositionPage; +import se.su.dsv.scipro.project.pages.ProjectStartPage; import se.su.dsv.scipro.supervisor.pages.SupervisorProjectsFinalSeminarPage; /** @@ -71,6 +77,9 @@ public class EditFinalSeminarFormPanel extends Panel { @SpringBean private FinalSeminarActiveParticipationDao finalSeminarActiveParticipationDao; + @SpringBean + private NotificationController notificationController; + private FeedbackPanel feedbackPanel; private FinalSeminar editSeminar; private DatePicker<Date> startDateField; @@ -81,16 +90,14 @@ public class EditFinalSeminarFormPanel extends Panel { private TextField<String> projectLabel; private DropDownChoice<FinalSeminarLanguages> presentationLanguage; private DropDownChoice<FinalSeminarLanguages> reportLanguage; + private boolean admin; - - - - - public EditFinalSeminarFormPanel(final String id, final FinalSeminar seminar) { + public EditFinalSeminarFormPanel(final String id, final FinalSeminar seminar, + final boolean admin) { super(id); - + this.admin = admin; add(new EditSeminarForm("editSeminarForm")); - + FinalSeminar seminar2 = finalSeminarDao.reLoad(seminar); editSeminar = seminar2; startDateField.setDefaultModelObject(seminar2.getStartDate()); @@ -159,7 +166,6 @@ public class EditFinalSeminarFormPanel extends Panel { super(name, new CompoundPropertyModel<OpponentModel>(new OpponentModel())); add(feedbackPanel = new FeedbackPanel("feedbackPanel")); feedbackPanel.setOutputMarkupId(true); - add(projectLabel = new TextField<String>("project")); projectLabel.setEnabled(false); @@ -231,7 +237,6 @@ public class EditFinalSeminarFormPanel extends Panel { @Override public Iterator<FinalSeminarActiveParticipation> getChoices(String input) { - // TODO Auto-generated method stub List<FinalSeminarActiveParticipation> active = new ArrayList<FinalSeminarActiveParticipation>(); for (User user : userDao.findUserQuery(input, 10)) { FinalSeminarActiveParticipation ac = new FinalSeminarActiveParticipation(); @@ -381,8 +386,48 @@ public class EditFinalSeminarFormPanel extends Panel { } } + editSeminar = finalSeminarDao.reLoad(editSeminar); - setResponsePage(SupervisorProjectsFinalSeminarPage.class); + for (ProjectFollower pf : editSeminar.getProject().getProjectFollowers()) { + notificationController.createNotificationForFinalSeminarEdited(pf + .getFollower().getUser(), editSeminar, + NotificationPriority.MEDIUM, SupervisorProjectsFinalSeminarPage + .getAbsoluteURL()); + + } + for (Student student : editSeminar.getProject().getProjectParticipants()) { + notificationController.createNotificationForFinalSeminarEdited(student + .getUser(), editSeminar, NotificationPriority.HIGH, + ProjectStartPage.getAbsoluteURL()); + + } + + //This may not work dependent on matched by in data object hasnt updated + for (FinalSeminarActiveParticipation pf : editSeminar + .getActiveParticipations()) { + notificationController.createNotificationForFinalSeminarEdited(pf + .getUser(), editSeminar, NotificationPriority.MEDIUM, + ProjectOppositionPage.getAbsoluteURL()); + } + + //This may not work dependent on matched by in data object hasnt updated + for (FinalSeminarOpposition pf : editSeminar.getOppositions()) { + notificationController.createNotificationForFinalSeminarEdited(pf + .getOpponent().getUser(), editSeminar, + NotificationPriority.MEDIUM, ProjectOppositionPage.getAbsoluteURL()); + } + + if (admin) { + if (editSeminar.getProject().getHeadSupervisor() != null) { + notificationController.createNotificationForFinalSeminarEdited( + editSeminar.getProject().getHeadSupervisor().getUser(), + editSeminar, NotificationPriority.HIGH, + SupervisorProjectsFinalSeminarPage.getAbsoluteURL()); + } + setResponsePage(AdminFinalSeminarPage.class); + } else { + setResponsePage(SupervisorProjectsFinalSeminarPage.class); + } } else if (!notSameProject && error) { error("Opponent/Active participant is an author in the final seminar"); error("Must select a Project for the Opponent/Active participant"); @@ -401,6 +446,5 @@ public class EditFinalSeminarFormPanel extends Panel { } } - } diff --git a/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.java b/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.java index 0fd5668934..2132c6d34b 100644 --- a/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.java +++ b/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.java @@ -249,7 +249,7 @@ public class OpponentListViewPanel extends Panel { public EditSeminarForm(String name) { super(name, new CompoundPropertyModel<OpponentModel>(new OpponentModel())); - editSeminarDialog.setTitle("Edit Seminar"); + editSeminarDialog.setTitle("Edit Final Seminar"); add(new EmptyPanel("editSeminarDetails")); } } @@ -272,7 +272,7 @@ public class OpponentListViewPanel extends Panel { protected void onSubmit(AjaxRequestTarget target, Form<?> form) { FinalSeminar seminar2 = finalSeminarDao.reLoad(seminar); editSeminarForm.removeAll(); - editSeminarForm.add(new EditFinalSeminarFormPanel("editSeminarDetails", seminar2)); + editSeminarForm.add(new EditFinalSeminarFormPanel("editSeminarDetails", seminar2, true)); target.addComponent(editSeminarForm); editSeminarDialog.open(target); } diff --git a/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentPanel.html b/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentPanel.html index 9ef1d8e49a..ff90708205 100644 --- a/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentPanel.html +++ b/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentPanel.html @@ -2,7 +2,7 @@ <html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> <body> <wicket:panel> -<p><a href="#" wicket:id="addSeminar">Create Seminar</a></p> +<p><a href="#" wicket:id="addSeminar">Create Final Seminar</a></p> <div wicket:id="dialog"> <div wicket:id="dialogContainer"> <form wicket:id="addSeminarForm"> diff --git a/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentPanel.java b/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentPanel.java index c2a3b5d437..fc62de0bc0 100644 --- a/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentPanel.java +++ b/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentPanel.java @@ -34,6 +34,7 @@ import se.su.dsv.scipro.components.autocomplete.MultiObjectAutoCompleteObjectCon import se.su.dsv.scipro.components.autocomplete.MultiObjectAutoCompleteRenderer; import se.su.dsv.scipro.components.autocomplete.UserProjectMultiObjectAutoCompleteBuilder; import se.su.dsv.scipro.components.autocomplete.UserProjectMultiObjectAutoCompleteField; +import se.su.dsv.scipro.data.controllers.NotificationController; import se.su.dsv.scipro.data.dao.interfaces.FinalSeminarDao; import se.su.dsv.scipro.data.dao.interfaces.FinalSeminarOppositionDao; import se.su.dsv.scipro.data.dao.interfaces.ProjectClassDao; @@ -45,10 +46,14 @@ 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.ProjectClass; +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.FinalSeminarLanguages; +import se.su.dsv.scipro.data.enums.NotificationPriority; import se.su.dsv.scipro.opponent.models.OpponentModel; +import se.su.dsv.scipro.project.pages.ProjectOppositionPage; +import se.su.dsv.scipro.project.pages.ProjectStartPage; import se.su.dsv.scipro.security.auth.MetaDataActionStrategy; import se.su.dsv.scipro.security.auth.roles.Roles; import se.su.dsv.scipro.supervisor.pages.SupervisorProjectsFinalSeminarPage; @@ -80,6 +85,9 @@ public class OpponentPanel extends Panel { @SpringBean private FinalSeminarOppositionDao finalSeminarOppositionDao; + @SpringBean + NotificationController notificationController; + private Project project; public OpponentPanel(String id, Project project) { @@ -96,13 +104,12 @@ public class OpponentPanel extends Panel { addSeminarDialogContainer.add(new AddSeminarForm("addSeminarForm")); AjaxLink<String> addSeminar; - add(addSeminar = new AjaxLink<String>("addSeminar", new Model<String>( - "Create Seminar")) { + add(addSeminar = new AjaxLink<String>("addSeminar", new Model<String>("Create Seminar")) { /** * */ - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; @Override public void onClick(AjaxRequestTarget target) { @@ -121,15 +128,14 @@ public class OpponentPanel extends Panel { private static final long serialVersionUID = 1L; public AddSeminarForm(String name) { - super(name, new CompoundPropertyModel<OpponentModel>( - new OpponentModel())); - final WebMarkupContainer feedbackContainer = new WebMarkupContainer( - "feedbackContainer"); + super(name, new CompoundPropertyModel<OpponentModel>(new OpponentModel())); + final WebMarkupContainer feedbackContainer = new WebMarkupContainer("feedbackContainer"); project = projectDao.reLoad(project); feedbackContainer.setOutputMarkupId(true); - - //ComponentFeedbackPanel fungerade inte - WebMarkupContainer feedbackPanel = new FormFeedbackPanel<OpponentModel>("feedbackPanel", this); + + // ComponentFeedbackPanel fungerade inte + WebMarkupContainer feedbackPanel = new FormFeedbackPanel<OpponentModel>( + "feedbackPanel", this); feedbackContainer.add(feedbackPanel); add(feedbackContainer); @@ -138,7 +144,7 @@ public class OpponentPanel extends Panel { add(projectLabel = new TextField<String>("project")); projectLabel.setEnabled(false); projectLabel.setDefaultModelObject(project.getTitle(30)); - + DatePicker<Date> startDateField = new DatePicker<Date>("date") { private static final long serialVersionUID = 1L; @@ -167,47 +173,49 @@ public class OpponentPanel extends Panel { add(room = new TextField<String>("room")); room.setRequired(true); add(startDateField); - - String[] hourArray = new String[] { "00", "01", "02", "03", "04", - "05", "06", "07", "08", "09", "10", "11", "12", - "13", "14", "15", "16", "17", "18", "19", "20", + + String[] hourArray = new String[] { "00", "01", "02", "03", "04", "05", "06", "07", + "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23" }; - - String[] minuteArray = new String[] { "00", "05", "10", - "15", "20", "25", "30", "35", "40", "45", "50", - "55" }; + + String[] minuteArray = new String[] { "00", "05", "10", "15", "20", "25", "30", "35", + "40", "45", "50", "55" }; DropDownChoice<String> hour = new DropDownChoice<String>("startHour", Arrays.asList(hourArray)); add(hour); hour.setRequired(false); - DropDownChoice<String> minute = new DropDownChoice<String>( - "startMinute", Arrays.asList(minuteArray)); + DropDownChoice<String> minute = new DropDownChoice<String>("startMinute", + Arrays.asList(minuteArray)); add(minute); minute.setRequired(false); - + DropDownChoice<String> endHour = new DropDownChoice<String>("endHour", Arrays.asList(hourArray)); add(endHour); endHour.setRequired(false); - DropDownChoice<String> endMinute = new DropDownChoice<String>( - "endMinute", Arrays.asList(minuteArray)); + DropDownChoice<String> endMinute = new DropDownChoice<String>("endMinute", + Arrays.asList(minuteArray)); add(endMinute); endMinute.setRequired(false); - - List<FinalSeminarLanguages> languageOptions = new ArrayList<FinalSeminarLanguages>( Arrays.asList(FinalSeminarLanguages.values()) ); + + List<FinalSeminarLanguages> languageOptions = new ArrayList<FinalSeminarLanguages>( + Arrays.asList(FinalSeminarLanguages.values())); FinalSeminarLanguages defaultValue = FinalSeminarLanguages.ENGLISH; - if(project.getProjectClass().getCode().equals(ProjectClass.BACHELOR)){ //Sorry for ugly hard-code, this had to be done and deployed in an afternoon + // Sorry for ugly hard-code, this had to be deployed in an afternoon + if (project.getProjectClass().getCode().equals(ProjectClass.BACHELOR)) { defaultValue = FinalSeminarLanguages.SWEDISH; } - - DropDownChoice<FinalSeminarLanguages> presentationLanguage = new DropDownChoice<FinalSeminarLanguages>("presentationLanguage", languageOptions ); + + DropDownChoice<FinalSeminarLanguages> presentationLanguage = new DropDownChoice<FinalSeminarLanguages>( + "presentationLanguage", languageOptions); add(presentationLanguage); presentationLanguage.setModelObject(defaultValue); presentationLanguage.setRequired(true); - - DropDownChoice<FinalSeminarLanguages> reportLanguage = new DropDownChoice<FinalSeminarLanguages>("reportLanguage", languageOptions ); + + DropDownChoice<FinalSeminarLanguages> reportLanguage = new DropDownChoice<FinalSeminarLanguages>( + "reportLanguage", languageOptions); add(reportLanguage); reportLanguage.setModelObject(defaultValue); reportLanguage.setRequired(true); @@ -243,8 +251,8 @@ public class OpponentPanel extends Panel { public String getTextValue(FinalSeminarActiveParticipation al) { User u = al.getUser(); - return u.getFirstName() + " " + u.getLastName() + " <" - + u.getEmailAddress() + ">"; + return u.getFirstName() + " " + u.getLastName() + " <" + u.getEmailAddress() + + ">"; } protected String getIdValue(FinalSeminarActiveParticipation al) { @@ -280,31 +288,26 @@ public class OpponentPanel extends Panel { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { - OpponentModel opponentModel = (OpponentModel) form - .getDefaultModelObject(); + OpponentModel opponentModel = (OpponentModel) form.getDefaultModelObject(); boolean notSameProject = true; boolean error = false; project = projectDao.reLoad(project); for (Student student : project.getProjectParticipants()) { if (!notSameProject) break; - for (FinalSeminarActiveParticipation al : opponentModel - .getOpponentList()) { - if (student.getUser().equals(al.getUser()) - && !al.isPreDeleted()) { + for (FinalSeminarActiveParticipation al : opponentModel.getOpponentList()) { + if (student.getUser().equals(al.getUser()) && !al.isPreDeleted()) { notSameProject = false; break; } } } if (project.getProjectClass().equals( - projectClassDao - .getProjectClass(ProjectClass.UNKNOWN))) { + projectClassDao.getProjectClass(ProjectClass.UNKNOWN))) { error = true; } for (FinalSeminarActiveParticipation al : opponentModel.getOpponentList()) { - if (al.getProject() == null - && !al.isPreDeleted()) { + if (al.getProject() == null && !al.isPreDeleted()) { error = true; break; } @@ -315,42 +318,54 @@ public class OpponentPanel extends Panel { Date date = opponentModel.getDate(); Calendar cal = Calendar.getInstance(); cal.setTime(date); - cal.set(Calendar.HOUR_OF_DAY, - Integer.valueOf(opponentModel.getStartHour())); - cal.set(Calendar.MINUTE, - Integer.valueOf(opponentModel.getStartMinute())); + cal.set(Calendar.HOUR_OF_DAY, Integer.valueOf(opponentModel.getStartHour())); + cal.set(Calendar.MINUTE, Integer.valueOf(opponentModel.getStartMinute())); seminar.setStartDate(cal.getTime()); - + Calendar endCal = Calendar.getInstance(); endCal.setTime(date); endCal.set(Calendar.HOUR_OF_DAY, Integer.valueOf(opponentModel.getEndHour())); - endCal.set(Calendar.MINUTE, - Integer.valueOf(opponentModel.getEndMinute())); + endCal.set(Calendar.MINUTE, Integer.valueOf(opponentModel.getEndMinute())); seminar.setEndDate(endCal.getTime()); - - + seminar.setProject(project); seminar.setRoom(opponentModel.getRoom()); - + seminar.setReportLanguage(opponentModel.getReportLanguage()); seminar.setPresentationLanguage(opponentModel.getPresentationLanguage()); seminar = finalSeminarDao.save(seminar); - - for (FinalSeminarActiveParticipation al : opponentModel - .getOpponentList()) { + + for (FinalSeminarActiveParticipation al : opponentModel.getOpponentList()) { if (!al.isPreDeleted()) { FinalSeminarOpposition opposition1 = new FinalSeminarOpposition(); - opposition1.setOpponent(roleDao.makeStudent(al - .getUser())); + opposition1.setOpponent(roleDao.makeStudent(al.getUser())); opposition1.setProject(al.getProject()); opposition1.setFinalSeminar(seminar); - opposition1 = finalSeminarOppositionDao - .save(opposition1); + opposition1 = finalSeminarOppositionDao.save(opposition1); } } + seminar = finalSeminarDao.reLoad(seminar); + for (Student student : project.getProjectParticipants()) { + notificationController.createNotificationForCreateFinalSeminar( + student.getUser(), seminar, NotificationPriority.HIGH, + ProjectStartPage.getAbsoluteURL(), false); + } + + for (ProjectFollower pf : project.getProjectFollowers()) { + notificationController.createNotificationForCreateFinalSeminar(pf + .getFollower().getUser(), seminar, NotificationPriority.HIGH, + SupervisorProjectsFinalSeminarPage.getAbsoluteURL(), false); + } + + // This doesn't load must reload seminar in som way to get it. + for (FinalSeminarOpposition pf : seminar.getOppositions()) { + notificationController.createNotificationForCreateFinalSeminar(pf + .getOpponent().getUser(), seminar, NotificationPriority.HIGH, + ProjectOppositionPage.getAbsoluteURL(), true); + } setResponsePage(SupervisorProjectsFinalSeminarPage.class); } else if (!notSameProject && error) { error("Opponent is an author in the final seminar"); @@ -358,18 +373,18 @@ public class OpponentPanel extends Panel { } else if (notSameProject && error) { error("Must choose a project group for opponent"); error("Unknown project class for the project and/or must select a Project for opponent"); - } else { + } else { error("Opponent is an author in the final seminar"); } } @Override - protected void onError(final AjaxRequestTarget target, - final Form<?> form) { + protected void onError(final AjaxRequestTarget target, final Form<?> form) { target.addComponent(feedbackContainer); } }); } } + } diff --git a/src/main/java/se/su/dsv/scipro/opponent/panels/ProjectFinalSeminarPanel.java b/src/main/java/se/su/dsv/scipro/opponent/panels/ProjectFinalSeminarPanel.java index da03218eb8..aaa19fdec7 100644 --- a/src/main/java/se/su/dsv/scipro/opponent/panels/ProjectFinalSeminarPanel.java +++ b/src/main/java/se/su/dsv/scipro/opponent/panels/ProjectFinalSeminarPanel.java @@ -404,7 +404,7 @@ public class ProjectFinalSeminarPanel extends Panel { public EditSeminarForm(String name) { super(name, new CompoundPropertyModel<OpponentModel>(new OpponentModel())); - editSeminarDialog.setTitle("Edit Seminar"); + editSeminarDialog.setTitle("Edit Final Seminar"); add(new EmptyPanel("editSeminarDetails")); } } @@ -419,7 +419,7 @@ public class ProjectFinalSeminarPanel extends Panel { public EditForm(String name, final FinalSeminar seminar) { super(name); - add(new AjaxButton("edit", new Model<String>("Edit Seminar")) { + add(new AjaxButton("edit", new Model<String>("Edit Final Seminar")) { private static final long serialVersionUID = 4575255075365450180L; @@ -427,7 +427,7 @@ public class ProjectFinalSeminarPanel extends Panel { protected void onSubmit(AjaxRequestTarget target, Form<?> form) { FinalSeminar seminar2 = finalSeminarDao.reLoad(seminar); editSeminarForm.removeAll(); - editSeminarForm.add(new EditFinalSeminarFormPanel("editSeminarDetails", seminar2)); + editSeminarForm.add(new EditFinalSeminarFormPanel("editSeminarDetails", seminar2, false)); target.addComponent(editSeminarForm); editSeminarDialog.open(target); }