Merge branch 'mailProjectClass' into develop

* mailProjectClass:
  changed project class selection from dropbox to radio choice in the admin mail panel, so the user may pick more than one level
This commit is contained in:
Emil Siverhall 2012-03-27 22:16:59 +02:00
commit 5519782b05
3 changed files with 69 additions and 33 deletions
src/main/java/se/su/dsv/scipro

@ -9,7 +9,13 @@
<div class="span-10">
<div class="append-bottom">
<label for="projectClassSelection">Filter recipients by project level: </label><br />
<select id="projectClassSelection" wicket:id="projectClassSelection"></select><br />
<div wicket:id="checkGroup">
<label for="levelsListView">Level:</label>
<div wicket:id="levelsListView">
<input type="checkbox" wicket:id="levelCheckBox"></input> <span
wicket:id="levelName"></span>
</div>
</div>
</div>
<b>Filter recipients by project or project idea:</b>
<div class="append-bottom" wicket:id="mainChoice">

@ -11,21 +11,25 @@ import java.util.Set;
import org.apache.log4j.Logger;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
import org.apache.wicket.behavior.SimpleAttributeModifier;
import org.apache.wicket.feedback.ComponentFeedbackMessageFilter;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.CheckGroup;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.ListChoice;
import org.apache.wicket.markup.html.form.RadioChoice;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.ComponentFeedbackPanel;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.util.ListModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
@ -33,11 +37,11 @@ import org.apache.wicket.validation.validator.StringValidator;
import org.joda.time.DateTime;
import se.su.dsv.scipro.components.DatePickerPanel;
import se.su.dsv.scipro.components.ProjectClassSelector;
import se.su.dsv.scipro.components.ProjectIdeaMailChoice;
import se.su.dsv.scipro.components.ProjectMailChoice;
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.ProjectClassDao;
import se.su.dsv.scipro.data.dataobjects.GeneralSystemSettings;
import se.su.dsv.scipro.data.dataobjects.MailEvent;
import se.su.dsv.scipro.data.dataobjects.ProjectClass;
@ -56,6 +60,8 @@ public class AdminMailPanel extends Panel {
@SpringBean
private GeneralSystemSettingsDao generalSystemSettingsDao;
@SpringBean
private ProjectClassDao projectClassDao;
@SpringBean
private MailFacade mailFacade;
private Set<User> userSet;
@ -64,8 +70,7 @@ public class AdminMailPanel extends Panel {
private final String PROJECT_IDEAS = "Project ideas";
private AjaxLink<String> showList;
private ListChoice<String> emailList;
private ProjectClassSelector projectClassSelection;
private ProjectClass projectClassModel;
private Set<ProjectClass> projectClassList;
private ProjectIdeaMailChoice ideaChoice;
private ProjectMailChoice projectChoice;
private RadioChoice<String> choice;
@ -81,25 +86,50 @@ public class AdminMailPanel extends Panel {
setOutputMarkupId(true);
//Default value
selectedRecipientSet = ProjectMailChoice.THESIS_SUPPORT;
setUpClassSelection();
setUpProjectClassCheckboxes();
setUpDatePanel();
setUpRadioButtons();
setUpMailForm();
}
private void setUpClassSelection() {
projectClassSelection = new ProjectClassSelector("projectClassSelection");
add(projectClassSelection);
projectClassModel = projectClassSelection.getModelObject();
projectClassSelection.add(new AjaxFormComponentUpdatingBehavior("onchange") {
private void setUpProjectClassCheckboxes() {
final List<ProjectClass> levels = projectClassDao.findAll();
projectClassList = new HashSet<ProjectClass>(levels);
CompoundPropertyModel<List<ProjectClass>> levelModel = new CompoundPropertyModel<List<ProjectClass>>(levels);
CheckGroup<ProjectClass> checkGroup = new CheckGroup<ProjectClass>("checkGroup", new ArrayList<ProjectClass>());
ListView<ProjectClass> levelsListView = new ListView<ProjectClass>("levelsListView", levelModel) {
private static final long serialVersionUID = 1L;
private static final long serialVersionUID = -1107218480527526745L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
projectClassModel = projectClassSelection.getModelObject();
updateUserSet(target);
}
});
protected void populateItem(final ListItem<ProjectClass> item) {
AjaxCheckBox ajaxCheck = new AjaxCheckBox("levelCheckBox", new Model<Boolean>()) {
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
boolean selected = this.getModelObject();
if (selected) {
projectClassList.add(item.getModelObject());
updateUserSet(target);
} else {
if (projectClassList.contains(item.getModelObject()))
projectClassList.remove(item.getModelObject());
updateUserSet(target);
}
}
};
ajaxCheck.setDefaultModelObject(true);
item.add(ajaxCheck);
Label levelName = new Label("levelName", item.getModel().getObject().getName());
item.add(levelName);
}
};
checkGroup.add(levelsListView);
add(checkGroup);
}
private void setUpDatePanel() {
@ -135,7 +165,7 @@ public class AdminMailPanel extends Panel {
projectChoice = new ProjectMailChoice("projectChoices");
userSet = new HashSet<User>();
userSet = getRecipients(selectedRecipientSet, projectClassModel);
userSet = getRecipients(selectedRecipientSet, projectClassList);
ideaChoice.setVisible(false);
add(choice);
@ -235,7 +265,7 @@ public class AdminMailPanel extends Panel {
}
private void updateUserSet(AjaxRequestTarget target) {
userSet = getRecipients(selectedRecipientSet, projectClassModel);
userSet = getRecipients(selectedRecipientSet, projectClassList);
showRecipients();
target.addComponent(emailList);
}
@ -251,7 +281,7 @@ public class AdminMailPanel extends Panel {
}
private Set<User> getRecipients(String choiceInput, ProjectClass pc) {
private Set<User> getRecipients(String choiceInput, Set<ProjectClass> pc) {
Date startDate = dpp.getStartDate();
Date endDate = dpp.getEndDate();
Set<User> recipients = new HashSet<User>();
@ -336,7 +366,7 @@ public class AdminMailPanel extends Panel {
@Override
protected void onSubmit() {
userSet = getRecipients(selectedRecipientSet, projectClassModel);
userSet = getRecipients(selectedRecipientSet, projectClassList);
try {
if(userSet != null && !userSet.isEmpty()) {
MailEvent me = new MailEvent(mailSubjectField.getInput(), mailBodyField.getInput(), userSet, fromName, fromEmail);

@ -35,55 +35,55 @@ public class MailFacade {
private ProjectIdeaDao.Params projectIdeaParams;
private Set<User> recipients;
public Set<User> addProjectAuthors(ProjectStatus ps, ProjectClass pc, Date startDate, Date endDate) {
public Set<User> addProjectAuthors(ProjectStatus ps, Set<ProjectClass> pc, Date startDate, Date endDate) {
setProjectParams(ps, pc, startDate, endDate);
return authorsFromProjects();
}
public Set<User> addProjectSupervisors(ProjectStatus ps, ProjectClass pc, Date startDate, Date endDate) {
public Set<User> addProjectSupervisors(ProjectStatus ps, Set<ProjectClass> pc, Date startDate, Date endDate) {
setProjectParams(ps, pc, startDate, endDate);
return supervisorsFromProjects();
}
public Set<User> addProjectCoSupervisors(ProjectStatus ps, ProjectClass pc, Date startDate, Date endDate) {
public Set<User> addProjectCoSupervisors(ProjectStatus ps, Set<ProjectClass> pc, Date startDate, Date endDate) {
setProjectParams(ps, pc, startDate, endDate);
return coSupervisorsFromProjects();
}
public Set<User> addProjectReviewers(ProjectStatus ps, ProjectClass pc, Date startDate, Date endDate) {
public Set<User> addProjectReviewers(ProjectStatus ps, Set<ProjectClass> pc, Date startDate, Date endDate) {
setProjectParams(ps, pc, startDate, endDate);
return reviewersFromProjects();
}
public Set<User> addIdeaAuthors(Status status, ProjectClass pc, Date startDate, Date endDate) {
public Set<User> addIdeaAuthors(Status status, Set<ProjectClass> pc, Date startDate, Date endDate) {
setProjectIdeaParams(status, pc, startDate, endDate);
return authorsFromProjectIdeas();
}
public Set<User> addIdeaSupervisors(Status status, ProjectClass pc, Date startDate, Date endDate) {
public Set<User> addIdeaSupervisors(Status status, Set<ProjectClass> pc, Date startDate, Date endDate) {
setProjectIdeaParams(status, pc, startDate, endDate);
return supervisorsFromProjectIdeas();
}
private void setProjectIdeaParams(Status matchStatus, ProjectClass projectClass, Date startDate, Date endDate) {
private void setProjectIdeaParams(Status matchStatus, Set<ProjectClass> pc, Date startDate, Date endDate) {
projectIdeaParams = new ProjectIdeaDao.Params();
if(matchStatus != null)
projectIdeaParams.setStatuses(Arrays.asList(new Status[]{matchStatus}));
if(projectClass != null)
projectIdeaParams.setProjectClasses(Arrays.asList(new ProjectClass[]{projectClass}));
if(pc != null && !pc.isEmpty())
projectIdeaParams.setProjectClasses(pc);
if(startDate != null)
projectIdeaParams.setSubmittedAfter(startDate);
if(endDate != null)
projectIdeaParams.setSubmittedBefore(endDate);
}
private void setProjectParams(ProjectStatus status, ProjectClass projectClass, Date startDate, Date endDate) {
private void setProjectParams(ProjectStatus status, Set<ProjectClass> pc, Date startDate, Date endDate) {
projectParams = new ProjectDao.Params();
if (status != null)
projectParams.setProjectStatuses(Arrays.asList(new ProjectStatus[]{status}));
if (projectClass != null)
projectParams.setProjectClasses(Arrays.asList(new ProjectClass[]{projectClass}));
if (pc != null&&!pc.isEmpty())
projectParams.setProjectClasses(pc);
if(startDate != null)
projectParams.setStartedAfter(startDate);
if(endDate != null)