added filtering on project level, project or project idea and date of submission. some more work is needed on date pickers to make them update on change

This commit is contained in:
Emil Siverhall 2012-01-31 15:23:24 +01:00
parent 14e5b00533
commit b6ea126fb6
8 changed files with 544 additions and 145 deletions

@ -7,11 +7,28 @@
<div wicket:id="feedbackPanel"></div>
<div class="span-22">
<div class="span-10">
<b>Recipients:</b>
<div class="append-bottom" wicket:id="radioChoices">
<div class="append-bottom">
<label for="projectClassSelection">Filter recipients by project level: </label><br />
<select id="projectClassSelection" wicket:id="projectClassSelection"></select><br />
</div>
<b>Filter recipients by project or project idea:</b>
<div class="append-bottom" wicket:id="mainChoice">
<input type="radio"/>
</div>
<div wicket:id="datePanel"></div>
<div wicket:id="choiceContainer">
<b>Available recipients:</b>
<wicket:enclosure child="ideaChoices">
<div class="append-bottom" wicket:id="ideaChoices">
<input type="radio"/>
</div>
</wicket:enclosure>
<wicket:enclosure child="projectChoices">
<div class="append-bottom" wicket:id="projectChoices">
<input type="radio"/>
</div>
</wicket:enclosure>
</div>
<a wicket:id="showList">Show/Hide recipients</a><br />
<select multiple wicket:id="emailList" size="15" class="span-8">
<option>Adam Adamsson (aaa@email)</option>

@ -3,6 +3,7 @@ package se.su.dsv.scipro.admin.panels;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@ -10,9 +11,11 @@ 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.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.Form;
@ -28,10 +31,14 @@ import org.apache.wicket.model.util.ListModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.apache.wicket.validation.validator.StringValidator;
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.dataobjects.GeneralSystemSettings;
import se.su.dsv.scipro.data.dataobjects.MailEvent;
import se.su.dsv.scipro.data.dataobjects.ProjectClass;
import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.data.facade.MailFacade;
@ -49,36 +56,216 @@ public class AdminMailPanel extends Panel {
private Set<User> userSet;
private static final Logger logger = Logger.getLogger(AdminMailPanel.class);
private final String AUTHORS_ACTIVE_PROJECT = "All authors with active projects";
private final String AUTHORS_ACTIVE_BACHELOR = "Authors with active bachelor projects";
private final String AUTHORS_ACTIVE_MASTER = "Authors with active master projects";
private final String AUTHORS_CONFIRMED = "Authors with confirmed project ideas";
private final String AUTHORS_UNCONFIRMED = "Authors with project ideas waiting to be confirmed";
private final String AUTHORS_REFUSED = "Authors with refused project ideas";
private final String SUPERVISOR_ALL = "All supervisors";
private final String SUPERVISOR_ALL_ACTIVE = "All supervisors with active projects";
private final String SUPERVISOR_CONFIRMED = "Supervisors with confirmed project ideas";
private final String SUPERVISOR_UNCONFIRMED = "Supervisors with project ideas waiting to be confirmed";
private final String ACTIVE_CO_SUPERVISORS = "Co-supervisors with active projects";
private final String ACTIVE_REVIEWERS = "Reviewers of active projects";
private final String NONE = "None";
private final String PROJECTS = "Projects";
private final String PROJECT_IDEAS = "Project ideas";
private AjaxLink<String> showList;
private ListChoice<String> emailList;
private ProjectClassSelector projectClassSelection;
private ProjectClass projectClassModel;
private ProjectIdeaMailChoice ideaChoice;
private ProjectMailChoice projectChoice;
private RadioChoice<String> choice;
private WebMarkupContainer choiceContainer;
private String selectedRecipientSet;
private DatePickerPanel dpp;
private static final long serialVersionUID = 1L;
public AdminMailPanel(String id) {
super(id);
setOutputMarkupId(true);
selectedRecipientSet = ProjectMailChoice.AUTHORS_ACTIVE_PROJECT;
setUpClassSelection();
setUpDatePanel();
setUpRadioButtons();
setUpMailForm();
}
private void setUpClassSelection() {
projectClassSelection = new ProjectClassSelector("projectClassSelection");
add(projectClassSelection);
projectClassModel = projectClassSelection.getModelObject();
projectClassSelection.add(new AjaxFormComponentUpdatingBehavior("onchange") {
private static final long serialVersionUID = -1107218480527526745L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
projectClassModel = projectClassSelection.getModelObject();
updateUserSet(target);
}
});
}
private void setUpDatePanel() {
dpp = new DatePickerPanel("datePanel");
add(dpp);
}
private void setUpMailForm() {
MailForm mailForm = new MailForm("mailForm");
add(mailForm);
add(new FeedbackPanel("feedbackPanel", new ComponentFeedbackMessageFilter(mailForm)));
}
private void setUpRadioButtons() {
List<String> options = Arrays.asList(new String[]{PROJECTS, PROJECT_IDEAS});
choice = new RadioChoice<String>("mainChoice",Model.of(PROJECTS), options);
choiceContainer = new WebMarkupContainer("choiceContainer");
choiceContainer.setOutputMarkupId(true);
ideaChoice = new ProjectIdeaMailChoice("ideaChoices");
projectChoice = new ProjectMailChoice("projectChoices");
//Default values, taken from RadioChoice constructor above (Model.of(your choice)).
userSet = new HashSet<User>();
userSet = getRecipients(selectedRecipientSet, projectClassModel);
ideaChoice.setVisible(false);
add(choice);
choiceContainer.add(ideaChoice);
choiceContainer.add(projectChoice);
add(choiceContainer);
addChoiceBehaviors();
emailList = new ListChoice<String>("emailList", new ListModel<String>(new ArrayList<String>())) {
private static final long serialVersionUID = -6361728706320841994L;
@Override
protected CharSequence getDefaultChoice(Object selected) {
return "";
}
};
emailList.setOutputMarkupId(true);
emailList.setOutputMarkupPlaceholderTag(true);
emailList.setVisible(false);
add(emailList);
showList = new AjaxLink<String>("showList"){
private static final long serialVersionUID = 1231753648699117745L;
@Override
public void onClick(AjaxRequestTarget target) {
showRecipients();
emailList.setVisible(!emailList.isVisible());
target.addComponent(showList);
target.addComponent(emailList);
}
};
showList.setOutputMarkupId(true);
showList.setOutputMarkupPlaceholderTag(true);
add(showList);
}
private void addChoiceBehaviors() {
AjaxFormChoiceComponentUpdatingBehavior projectChoiceBehavior = new AjaxFormChoiceComponentUpdatingBehavior() {
private static final long serialVersionUID = -143604824137895783L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
selectedRecipientSet = projectChoice.getModelObject();
updateUserSet(target);
}
};
AjaxFormChoiceComponentUpdatingBehavior ideaChoiceBehavior = new AjaxFormChoiceComponentUpdatingBehavior() {
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
selectedRecipientSet = ideaChoice.getModelObject();
updateUserSet(target);
}
};
AjaxFormChoiceComponentUpdatingBehavior mainChoiceBehavior = new AjaxFormChoiceComponentUpdatingBehavior() {
private static final long serialVersionUID = -4104455092491774388L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
if(choice.getModelObject().equals(PROJECTS)) {
selectedRecipientSet = projectChoice.getModelObject();
ideaChoice.setVisible(false);
projectChoice.setVisible(true);
}
else {
selectedRecipientSet = ideaChoice.getModelObject();
projectChoice.setVisible(false);
ideaChoice.setVisible(true);
}
target.addComponent(choiceContainer);
updateUserSet(target);
}
};
ideaChoice.add(ideaChoiceBehavior);
projectChoice.add(projectChoiceBehavior);
choice.add(mainChoiceBehavior);
}
private void updateUserSet(AjaxRequestTarget target) {
userSet = getRecipients(selectedRecipientSet, projectClassModel);
showRecipients();
target.addComponent(emailList);
}
private void showRecipients(){
ArrayList<String> mailList = new ArrayList<String>();
for(User u : userSet){
mailList.add(u.toString() + " (" + u.getEmailAddress() +")");
}
Collections.sort(mailList);
emailList.setChoices(mailList);
}
private Set<User> getRecipients(String choiceInput, ProjectClass pc) {
Date startDate = dpp.getStartDate();
Date endDate = dpp.getEndDate();
System.out.println("Start date: " + startDate + " and end date: " + endDate);
Set<User> recipients = new HashSet<User>();
if(choiceInput.equals(ProjectMailChoice.AUTHORS_ACTIVE_PROJECT)){
recipients = mailFacade.addActiveAuthors(pc);
}
else if(choiceInput.equals(ProjectIdeaMailChoice.AUTHORS_CONFIRMED)){
recipients = mailFacade.addAuthorsWithConfirmedIdeas(pc, startDate, endDate);
}
else if(choiceInput.equals(ProjectIdeaMailChoice.AUTHORS_UNCONFIRMED)){
recipients = mailFacade.addAuthorsWithUnconfirmedIdeas(pc);
}
else if(choiceInput.equals(ProjectIdeaMailChoice.AUTHORS_REFUSED)){
recipients = mailFacade.addAuthorsWithRefusedIdeas(pc);
}
else if(choiceInput.equals(SUPERVISOR_ALL)){
recipients = mailFacade.addAllSupervisors();
}
else if(choiceInput.equals(ProjectMailChoice.SUPERVISOR_ALL_ACTIVE)){
recipients = mailFacade.addSupervisorsWithActiveProjects(pc);
}
else if(choiceInput.equals(ProjectIdeaMailChoice.SUPERVISOR_CONFIRMED)){
recipients = mailFacade.addSupervisorsWithConfirmedIdeas(pc);
}
else if(choiceInput.equals(ProjectIdeaMailChoice.SUPERVISOR_UNCONFIRMED)){
recipients = mailFacade.addSupervisorsWithUnconfirmedIdeas(pc);
}
else if(choiceInput.equals(ProjectMailChoice.ACTIVE_REVIEWERS)){
recipients = mailFacade.addActiveReviewers();
}
else if(choiceInput.equals(ProjectMailChoice.ACTIVE_CO_SUPERVISORS)){
recipients = mailFacade.addActiveCoSupervisors();
}
return recipients;
}
public class MailForm extends Form<Void> {
private TextField<String> mailSubjectField;
private TextArea<String> mailBodyField;
@ -124,8 +311,8 @@ public class AdminMailPanel extends Panel {
if(userSet != null && !userSet.isEmpty()) {
/*MailEvent me = new MailEvent(mailSubjectField.getInput(), mailBodyField.getInput(), userSet, fromName, fromEmail);
me = mailEventDao.save(me);
info("E-mail sent successfully to the selected recipients");*/
me = mailEventDao.save(me);*/
info("E-mail sent successfully to the selected recipients");
}
else {
error("You need to specify recipients for your e-mail.");
@ -136,110 +323,5 @@ public class AdminMailPanel extends Panel {
}
}
private void setUpRadioButtons() {
List<String> options = Arrays.asList(new String[]{NONE,AUTHORS_ACTIVE_PROJECT,AUTHORS_ACTIVE_BACHELOR,AUTHORS_ACTIVE_MASTER,AUTHORS_CONFIRMED,AUTHORS_UNCONFIRMED,AUTHORS_REFUSED,SUPERVISOR_ALL,SUPERVISOR_ALL_ACTIVE,SUPERVISOR_CONFIRMED, SUPERVISOR_UNCONFIRMED, ACTIVE_CO_SUPERVISORS, ACTIVE_REVIEWERS});
final RadioChoice<String> choice = new RadioChoice<String>("radioChoices",Model.of("None"), options);
//Default values, taken from RadioChoice constructor above (Model.of(your choice)).
userSet = new HashSet<User>();
userSet = getRecipients(choice.getModelObject());
AjaxFormChoiceComponentUpdatingBehavior behavior = new AjaxFormChoiceComponentUpdatingBehavior() {
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
userSet = new HashSet<User>();
userSet = getRecipients(choice.getModelObject());
showRecipients();
target.addComponent(emailList);
}
};
choice.add(behavior);
add(choice);
emailList = new ListChoice<String>("emailList", new ListModel<String>(new ArrayList<String>())) {
private static final long serialVersionUID = -6361728706320841994L;
@Override
protected CharSequence getDefaultChoice(Object selected) {
return "";
}
};
emailList.setOutputMarkupId(true);
emailList.setOutputMarkupPlaceholderTag(true);
emailList.setVisible(false);
add(emailList);
showList = new AjaxLink<String>("showList"){
private static final long serialVersionUID = 1231753648699117745L;
@Override
public void onClick(AjaxRequestTarget target) {
showRecipients();
emailList.setVisible(!emailList.isVisible());
target.addComponent(showList);
target.addComponent(emailList);
}
};
showList.setOutputMarkupId(true);
showList.setOutputMarkupPlaceholderTag(true);
add(showList);
}
private void showRecipients(){
ArrayList<String> mailList = new ArrayList<String>();
for(User u : userSet){
mailList.add(u.toString() + " (" + u.getEmailAddress() +")");
}
Collections.sort(mailList);
emailList.setChoices(mailList);
}
private Set<User> getRecipients(String choiceInput) {
Set<User> recipients = new HashSet<User>();
if(choiceInput.equals(AUTHORS_ACTIVE_PROJECT)){
recipients = mailFacade.addActiveAuthors();
}
else if(choiceInput.equals(AUTHORS_ACTIVE_BACHELOR)){
recipients = mailFacade.addActiveBachelorAuthors();
}
else if(choiceInput.equals(AUTHORS_ACTIVE_MASTER)){
recipients = mailFacade.addActiveMasterAuthors();
}
else if(choiceInput.equals(AUTHORS_CONFIRMED)){
recipients = mailFacade.addAuthorsWithConfirmedIdeas();
}
else if(choiceInput.equals(AUTHORS_UNCONFIRMED)){
recipients = mailFacade.addAuthorsWithUnconfirmedIdeas();
}
else if(choiceInput.equals(AUTHORS_REFUSED)){
recipients = mailFacade.addAuthorsWithRefusedIdeas();
}
else if(choiceInput.equals(SUPERVISOR_ALL)){
recipients = mailFacade.addAllSupervisors();
}
else if(choiceInput.equals(SUPERVISOR_ALL_ACTIVE)){
recipients = mailFacade.addSupervisorsWithActiveProjects();
}
else if(choiceInput.equals(SUPERVISOR_CONFIRMED)){
recipients = mailFacade.addSupervisorsWithConfirmedIdeas();
}
else if(choiceInput.equals(SUPERVISOR_UNCONFIRMED)){
recipients = mailFacade.addSupervisorsWithUnconfirmedIdeas();
}
else if(choiceInput.equals(ACTIVE_REVIEWERS)){
recipients = mailFacade.addActiveReviewers();
}
else if(choiceInput.equals(ACTIVE_CO_SUPERVISORS)){
recipients = mailFacade.addActiveCoSupervisors();
}
return recipients;
}
}

@ -0,0 +1,70 @@
package se.su.dsv.scipro.components;
import java.util.Date;
import org.apache.wicket.IClusterable;
import org.joda.time.DateTime;
public class DatePickerModel implements IClusterable {
private static final long serialVersionUID = -2608932987467648773L;
private Date startDate;
private Date endDate;
/**
* Creates a DatePickerModel
* @param startDate the startDate in the DatePickerModel
* @param endDate the endDate in the DatepickerModel
*/
public DatePickerModel(Date startDate, Date endDate){
if(startDate == null){
startDate = new Date();
}
if(endDate == null){
endDate = new Date();
}
setStartDate(startDate);
setEndDate(endDate);
}
/**
* Creates A DatePickerModel with todays date in start and end.
*/
public DatePickerModel(){
this(null,null);
}
public void setStartDate(Date startDate) {
if(startDate != null){
DateTime tmp = new DateTime(startDate);
this.startDate = tmp.toDateMidnight().toDate();
}
else{
this.startDate = null;
}
}
public Date getStartDate() {
return startDate;
}
public void setEndDate(Date endDate) {
if(endDate != null){
DateTime tmp = new DateTime(endDate);
tmp = tmp.toDateMidnight().toDateTime();
tmp = tmp.minusSeconds(1);
tmp = tmp.plusDays(1);
this.endDate = tmp.toDate();
}
else{
this.endDate = null;
}
}
public Date getEndDate() {
return endDate;
}
}

@ -0,0 +1,16 @@
<!DOCTYPE html>
<html
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:panel>
<div class="append-bottom">
<form wicket:id="dateForm">
Created between: <br />
<input wicket:id="startDate"/> <br />
and <br />
<input wicket:id="endDate"/>
</form>
</div>
</wicket:panel>
</body>
</html>

@ -0,0 +1,131 @@
package se.su.dsv.scipro.components;
import java.util.Date;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
import org.apache.wicket.extensions.markup.html.form.DateTextField;
import org.apache.wicket.extensions.yui.calendar.DatePicker;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.Model;
public class DatePickerPanel extends Panel{
private static final long serialVersionUID = -5607127520132313062L;
private DateTextField startDtf;
private DateTextField endDtf;
private CompoundPropertyModel<DatePickerModel> model;
private DatePickerModel dpm;
public Date getStartDate(){
return dpm.getStartDate();
}
public Date getEndDate(){
return dpm.getEndDate();
}
/**
* Creates A DatePickerPanel with todays date as start and end date.
* @param id the wicket markup id
*/
public DatePickerPanel(String id){
this(id, null, null);
}
/**
* Creates a DatePickerPanel with startDate as start date and endDate as endDate.
* @param id the wicket markup id
* @param startDate the start date to be set
* @param endDate the end date to be set
*/
public DatePickerPanel(String id, Date startDate, Date endDate) {
super(id);
dpm = new DatePickerModel(startDate, endDate);
model = new CompoundPropertyModel<DatePickerModel>(dpm);
Form<Date> dateForm = new Form<Date>("dateForm") {
private static final long serialVersionUID = -8526635121696735963L;
@Override
protected void onSubmit() {
model.getObject().setStartDate(startDtf.getModelObject());
model.getObject().setEndDate(endDtf.getModelObject());
}
};
startDtf = new DateTextField("startDate", new Model<Date>(model.getObject().getStartDate()), "yyyy-MM-dd");
endDtf = new DateTextField("endDate", new Model<Date>(model.getObject().getEndDate()), "yyyy-MM-dd");
OnChangeAjaxBehavior startDtfOnChange = new OnChangeAjaxBehavior() {
private static final long serialVersionUID = -6267372515046138786L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
setStartDate(startDtf.getModelObject());
}
};
OnChangeAjaxBehavior endDtfOnChangeAjaxBehavior = new OnChangeAjaxBehavior() {
private static final long serialVersionUID = -1131099635803805983L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
setEndDate(endDtf.getModelObject());
}
};
startDtf.add(startDtfOnChange);
endDtf.add(endDtfOnChangeAjaxBehavior);
DatePicker startDatePicker = new DatePicker();
startDatePicker.setShowOnFieldClick(true);
startDtf.add(startDatePicker);
dateForm.add(startDtf);
DatePicker endDatePicker = new DatePicker();
endDatePicker.setShowOnFieldClick(true);
endDtf.add(endDatePicker);
dateForm.add(endDtf);
add(dateForm);
}
public void startDateSetEnabled(boolean enabled){
startDtf.setEnabled(enabled);
}
public void endDateSetEnabled(boolean enabled){
endDtf.setEnabled(enabled);
}
public void setStartDate(Date startDate){
dpm.setStartDate(startDate);
model.getObject().setStartDate(dpm.getStartDate());
startDtf.setModelObject(dpm.getStartDate());
}
public void setEndDate(Date endDate){
dpm.setEndDate(endDate);
//model.getObject().setEndDate(dpm.getEndDate());
endDtf.setModelObject(dpm.getEndDate());
}
}

@ -0,0 +1,38 @@
package se.su.dsv.scipro.components;
import java.util.Arrays;
import java.util.List;
import org.apache.wicket.markup.html.form.RadioChoice;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
public class ProjectIdeaMailChoice extends RadioChoice<String> {
private static final long serialVersionUID = 2266943297142066435L;
public final static String AUTHORS_CONFIRMED = "Authors with confirmed project ideas";
public final static String AUTHORS_UNCONFIRMED = "Authors with project ideas waiting to be confirmed";
public final static String AUTHORS_REFUSED = "Authors with refused project ideas";
public final static String SUPERVISOR_CONFIRMED = "Supervisors with confirmed project ideas";
public final static String SUPERVISOR_UNCONFIRMED = "Supervisors with project ideas waiting to be confirmed";
public ProjectIdeaMailChoice(String id) {
super(id);
initChoices();
setModel(Model.of(AUTHORS_CONFIRMED));
}
public ProjectIdeaMailChoice(String id, IModel<String> model) {
super(id);
initChoices();
setModel(model);
}
private void initChoices() {
List<String> options = Arrays.asList(new String[]{AUTHORS_CONFIRMED,AUTHORS_UNCONFIRMED,AUTHORS_REFUSED,SUPERVISOR_CONFIRMED, SUPERVISOR_UNCONFIRMED});
setChoices(options);
}
}

@ -0,0 +1,37 @@
package se.su.dsv.scipro.components;
import java.util.Arrays;
import java.util.List;
import org.apache.wicket.markup.html.form.RadioChoice;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
public class ProjectMailChoice extends RadioChoice<String> {
private static final long serialVersionUID = 2266943297142066435L;
public final static String AUTHORS_ACTIVE_PROJECT = "Authors with active projects on selected project level";
public final static String SUPERVISOR_ALL_ACTIVE = "All supervisors with active projects";
public final static String ACTIVE_CO_SUPERVISORS = "Co-supervisors with active projects";
public final static String ACTIVE_REVIEWERS = "Reviewers of active projects";
public ProjectMailChoice(String id) {
super(id);
initChoices();
setModel(Model.of(AUTHORS_ACTIVE_PROJECT));
}
public ProjectMailChoice(String id, IModel<String> model) {
super(id);
initChoices();
setModel(model);
}
private void initChoices() {
List<String> options = Arrays.asList(new String[]{AUTHORS_ACTIVE_PROJECT,SUPERVISOR_ALL_ACTIVE,ACTIVE_CO_SUPERVISORS,ACTIVE_REVIEWERS});
setChoices(options);
}
}

@ -1,6 +1,7 @@
package se.su.dsv.scipro.data.facade;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@ -39,33 +40,34 @@ public class MailFacade {
private ProjectIdeaDao.Params projectIdeaParams;
private Set<User> recipients;
public Set<User> addActiveAuthors() {
setProjectParams(ProjectStatus.ACTIVE, null);
public Set<User> addActiveAuthors(ProjectClass pc) {
setProjectParams(ProjectStatus.ACTIVE, pc);
System.out.println(projectParams.getProjectClasses());
return authorsFromProjects();
}
public Set<User> addActiveBachelorAuthors() {
setProjectParams(ProjectStatus.ACTIVE, ProjectClass.BACHELOR);
public Set<User> addActiveBachelorAuthors(ProjectClass pc) {
setProjectParams(ProjectStatus.ACTIVE, pc);
return authorsFromProjects();
}
public Set<User> addActiveMasterAuthors() {
setProjectParams(ProjectStatus.ACTIVE, ProjectClass.MASTER);
public Set<User> addActiveMasterAuthors(ProjectClass pc) {
setProjectParams(ProjectStatus.ACTIVE, pc);
return authorsFromProjects();
}
public Set<User> addAuthorsWithRefusedIdeas() {
setProjectIdeaParams(Match.Status.REFUSED);
public Set<User> addAuthorsWithRefusedIdeas(ProjectClass pc) {
setProjectIdeaParams(Match.Status.REFUSED, pc, null, null);
return authorsFromProjectIdeas();
}
public Set<User> addAuthorsWithConfirmedIdeas() {
setProjectIdeaParams(Match.Status.CONFIRMED);
public Set<User> addAuthorsWithConfirmedIdeas(ProjectClass pc, Date startDate, Date endDate) {
setProjectIdeaParams(Match.Status.CONFIRMED, pc, startDate, endDate);
return authorsFromProjectIdeas();
}
public Set<User> addAuthorsWithUnconfirmedIdeas() {
setProjectIdeaParams(Match.Status.PUBLISHED);
public Set<User> addAuthorsWithUnconfirmedIdeas(ProjectClass pc) {
setProjectIdeaParams(Match.Status.PUBLISHED, pc, null, null);
return authorsFromProjectIdeas();
}
@ -78,18 +80,18 @@ public class MailFacade {
return recipients;
}
public Set<User> addSupervisorsWithActiveProjects() {
setProjectParams(ProjectStatus.ACTIVE, null);
public Set<User> addSupervisorsWithActiveProjects(ProjectClass pc) {
setProjectParams(ProjectStatus.ACTIVE, pc);
return supervisorsFromProjects();
}
public Set<User> addSupervisorsWithUnconfirmedIdeas() {
setProjectIdeaParams(Match.Status.PUBLISHED);
public Set<User> addSupervisorsWithUnconfirmedIdeas(ProjectClass pc) {
setProjectIdeaParams(Match.Status.PUBLISHED, pc, null, null);
return supervisorsFromProjectIdeas();
}
public Set<User> addSupervisorsWithConfirmedIdeas() {
setProjectIdeaParams(Match.Status.CONFIRMED);
public Set<User> addSupervisorsWithConfirmedIdeas(ProjectClass pc) {
setProjectIdeaParams(Match.Status.CONFIRMED, pc, null, null);
return supervisorsFromProjectIdeas();
}
@ -103,18 +105,24 @@ public class MailFacade {
return reviewersFromProjects();
}
private void setProjectIdeaParams(Status matchStatus) {
private void setProjectIdeaParams(Status matchStatus, ProjectClass projectClass, 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(startDate != null)
projectIdeaParams.setSubmittedAfter(startDate);
if(endDate != null)
projectIdeaParams.setSubmittedBefore(endDate);
}
private void setProjectParams(ProjectStatus status, String projectClass) {
private void setProjectParams(ProjectStatus status, ProjectClass projectClass) {
projectParams = new ProjectDao.Params();
if (status != null)
projectParams.setProjectStatuses(Arrays.asList(new ProjectStatus[]{status}));
if (projectClass != null)
projectParams.setProjectClasses(Arrays.asList(new ProjectClass[]{projectClassDao.getProjectClass(projectClass)}));
projectParams.setProjectClasses(Arrays.asList(new ProjectClass[]{projectClass}));
}
private Set<User> authorsFromProjectIdeas() {