Merge branch 'allStudentIdeasFiltering' into develop

This commit is contained in:
Emil Siverhall 2012-09-28 11:29:14 +02:00
commit cb1a88da0e
4 changed files with 101 additions and 9 deletions

@ -31,6 +31,7 @@ import se.su.dsv.scipro.match.dataobject.Match;
import se.su.dsv.scipro.match.dataobject.ProjectIdea;
import se.su.dsv.scipro.match.dataobject.ProjectIdeaFirstMeeting;
import se.su.dsv.scipro.match.dataobject.QProjectIdea;
import se.su.dsv.scipro.match.dataobject.QSupervisorIdea;
import se.su.dsv.scipro.springdata.repos.ProjectIdeaRepo;
import se.su.dsv.scipro.springdata.services.ApplicationPeriodService;
import se.su.dsv.scipro.springdata.services.GeneralSystemSettingsService;
@ -224,6 +225,8 @@ public class ProjectIdeaServiceImpl extends AbstractQueryService<ProjectIdea, Lo
private BooleanBuilder fromParams(FilterParams params) {
BooleanBuilder bb = new BooleanBuilder();
if(params.getLevels()!=null)
bb.and(levelFilter(params.getLevels()));
if(params.getStatuses()!=null)
bb.and(statusFilter(params.getStatuses()));
if(params.getSupervisor()!=null)
@ -238,6 +241,7 @@ public class ProjectIdeaServiceImpl extends AbstractQueryService<ProjectIdea, Lo
bb.and(bySupervisorUnit(params.getUnit()));
if(params.isNoUnit())
bb.and(hasNoUnit());
System.out.println(bb.getArgs());
return bb;
}
@ -329,6 +333,20 @@ public class ProjectIdeaServiceImpl extends AbstractQueryService<ProjectIdea, Lo
return statusFilter(statusSet);
}
private BooleanBuilder levelFilter(Collection<ProjectClass> levels) {
BooleanBuilder e = new BooleanBuilder();
if(levels!=null && !levels.isEmpty()){
for (ProjectClass level : levels) {
e.or(isProjectClass(level));
}
return e;
}
else {
e.and(QProjectIdea.projectIdea.projectClass.isNull());
return e;
}
}
private BooleanExpression isMatchedTo(Employee employee){
return QProjectIdea.projectIdea.match.supervisor.eq(employee);
}

@ -57,6 +57,7 @@ public interface ProjectIdeaService extends GenericService<ProjectIdea,Long>, Qu
private ResearchArea researchArea;
private Unit unit;
private Collection<Match.Status> statuses;
private Collection<ProjectClass> levels;
private boolean noUnit;
public void setCreatedAfter(Date createdAfter) {
@ -107,6 +108,12 @@ public interface ProjectIdeaService extends GenericService<ProjectIdea,Long>, Qu
public Collection<Match.Status> getStatuses() {
return statuses;
}
public void setLevels(Collection<ProjectClass> levels) {
this.levels = levels;
}
public Collection<ProjectClass> getLevels() {
return levels;
}
}
}

@ -11,7 +11,13 @@
</div>
<!--<div class="prepend-top span-24">-->
<div>
<div class="prepend-top">
<form wicket:id="filterForm">
<div class="span-24">
<div class="span-6" wicket:id="levelFilter"></div>
<div class="span-10" wicket:id="areaFilter"></div>
</div>
</form>
<div wicket:id="dataPanel"></div>
</div>
</wicket:extend>

@ -1,12 +1,15 @@
package se.su.dsv.scipro.supervisor.pages;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import org.apache.wicket.PageParameters;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.panel.EmptyPanel;
import org.apache.wicket.model.IModel;
@ -18,17 +21,21 @@ import org.springframework.data.domain.PageRequest;
import se.su.dsv.scipro.SciProSession;
import se.su.dsv.scipro.components.menuhighlighting.MenuHighlightSupervisorProjectIdea;
import se.su.dsv.scipro.data.dataobjects.Employee;
import se.su.dsv.scipro.data.dataobjects.ProjectClass;
import se.su.dsv.scipro.data.dataobjects.ScheduleTemplate;
import se.su.dsv.scipro.datatables.ClickableTitleColumn;
import se.su.dsv.scipro.datatables.GenericDataPanel;
import se.su.dsv.scipro.match.dao.interfaces.MatchDao;
import se.su.dsv.scipro.match.dataobject.Match;
import se.su.dsv.scipro.match.dataobject.ProjectIdea;
import se.su.dsv.scipro.match.panel.FilterFormAreaPanel;
import se.su.dsv.scipro.match.panel.FilterFormCheckBoxPanel;
import se.su.dsv.scipro.reusable.SafeLongToIntService;
import se.su.dsv.scipro.security.auth.Authorization;
import se.su.dsv.scipro.security.auth.roles.Roles;
import se.su.dsv.scipro.springdata.services.EmployeeService;
import se.su.dsv.scipro.springdata.services.GenericService;
import se.su.dsv.scipro.springdata.services.ProjectClassService;
import se.su.dsv.scipro.springdata.services.ProjectIdeaService;
import se.su.dsv.scipro.supervisor.panels.WatsonInfoPanel;
@ -42,7 +49,10 @@ public class SupervisorAllStudentIdeasPage extends AbstractSupervisorProjectIdea
@SpringBean
private MatchDao matchDao;
@SpringBean
private SafeLongToIntService safeLongToIntService;
private ProjectClassService projectClassService;
private ProjectIdeaService.FilterParams params;
private GenericDataPanel<ProjectIdea> genericDataPanel;
private Dialog dialog;
public SupervisorAllStudentIdeasPage(final PageParameters pp) {
@ -58,10 +68,12 @@ public class SupervisorAllStudentIdeasPage extends AbstractSupervisorProjectIdea
dialog.add(new EmptyPanel("watson"));
dialog.add(new EmptyPanel("interestLink"));
add(dialog);
add(new FilterForm("filterForm"));
add(genericDataPanel = new GenericDataPanel<ProjectIdea>("dataPanel") {
private static final long serialVersionUID = 3608529853945788462L;
add(new GenericDataPanel<ProjectIdea>("dataPanel") {
@Override
public GenericService getService() {
@Override
public GenericService<ProjectIdea, Long> getService() {
return projectIdeaService;
}
@ -76,13 +88,17 @@ public class SupervisorAllStudentIdeasPage extends AbstractSupervisorProjectIdea
columns = new IColumn[5];
columns[0] = new PropertyColumn<ScheduleTemplate>(Model.of("Level"), "projectClass", "projectClass");
columns[1] = new ClickableTitleColumn<ProjectIdea>(Model.of("Title"), "title", "title") {
@Override
private static final long serialVersionUID = -1262998078334461130L;
@Override
protected void onClick(final IModel<ProjectIdea> clicked, AjaxRequestTarget target) {
dialog.replace(new WatsonInfoPanel("watson", clicked.getObject(), false));
AjaxLink<Void> interestLink;
dialog.replace(interestLink = new AjaxLink<Void>("interestLink") {
@Override
private static final long serialVersionUID = -4096126257468826185L;
@Override
public void onClick(AjaxRequestTarget target) {
Employee supervisor = employeeService.findByUser(getUser());
matchDao.confirmToSuperviseIdea(getUser(), supervisor, clicked.getObject().getMatch());
@ -107,16 +123,61 @@ public class SupervisorAllStudentIdeasPage extends AbstractSupervisorProjectIdea
@Override
public Iterator<ProjectIdea> getIterator() {
return projectIdeaService.find(Match.Status.UNMATCHED, new PageRequest(getTable().getCurrentPage(), getTable().getRowsPerPage(), getSort())).iterator();
//return projectIdeaService.find(Match.Status.UNMATCHED, new PageRequest(getTable().getCurrentPage(), getTable().getRowsPerPage(), getSort())).iterator();
return projectIdeaService.findAll(params, new PageRequest(getTable().getCurrentPage(), getTable().getRowsPerPage(), getSort())).iterator();
}
@Override
public int getSize() {
return safeLongToIntService.safeLongToInt(projectIdeaService.countProjectIdeaByMatchStatus(Match.Status.UNMATCHED));
return SafeLongToIntService.safeLongToInt(projectIdeaService.countAll(params));
}
});
}
private class FilterForm extends Form<Void> {
private static final long serialVersionUID = -5617866782172392049L;
public FilterForm(String id) {
super(id);
params = new ProjectIdeaService.FilterParams();
//ONLY TAKE UNMATCHED IDEAS IN PARAMS
List<Match.Status> unmatched = Arrays.asList(new Match.Status[]{Match.Status.UNMATCHED});
params.setStatuses(unmatched);
//PROJECT LEVEL FILTERING
final FilterFormCheckBoxPanel<ProjectClass> levelFilter = new FilterFormCheckBoxPanel<ProjectClass>("levelFilter", null, "level") {
private static final long serialVersionUID = -6477237173142198302L;
@Override
public void ajaxUpdate(AjaxRequestTarget target) {
if (!getSelection().isEmpty()) {
params.setLevels(getSelection());
}
target.addComponent(genericDataPanel.getWMC());
}
@Override
protected List<ProjectClass> choices() {
return projectClassService.findAllActive();
}
};
params.setLevels(levelFilter.getSelection());
add(levelFilter);
//RESEARCH AREA FILTERING
final FilterFormAreaPanel areaFilter = new FilterFormAreaPanel("areaFilter", false) {
private static final long serialVersionUID = 2213213403070359265L;
@Override
public void ajaxUpdate(AjaxRequestTarget target) {
params.setResearchArea(getArea());
target.addComponent(genericDataPanel.getWMC());
}
};
add(areaFilter);
}
}
}