Uses notifications on uploading thesis, oppoistions and editig final

seminar

Change-Id: I11b9787fb6f2bb11d471820d5a5f10d3f9fc3242
This commit is contained in:
joha-asc 2011-07-22 16:00:44 +02:00
parent fdd0e8b6aa
commit be51065103
5 changed files with 139 additions and 80 deletions

@ -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 {
}
}
}

@ -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);
}

@ -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">

@ -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);
}
});
}
}
}

@ -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);
}