filtering on project class now works at supervisor - project idea datatable

This commit is contained in:
Emil Siverhall 2012-07-19 16:08:58 +02:00
parent 5339de38d2
commit 0e854ff7f1
3 changed files with 75 additions and 1 deletions
src/main/java/se/su/dsv/scipro

@ -1,6 +1,7 @@
package se.su.dsv.scipro.springdata.serviceimpls;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.SortedSet;
@ -17,6 +18,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import se.su.dsv.scipro.data.dataobjects.Employee;
import se.su.dsv.scipro.data.dataobjects.ProjectClass;
import se.su.dsv.scipro.data.dataobjects.Student;
import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.match.dataobject.Idea.IdeaStatus;
@ -26,6 +28,8 @@ import se.su.dsv.scipro.springdata.repos.SupervisorIdeaRepo;
import se.su.dsv.scipro.springdata.services.StudentService;
import se.su.dsv.scipro.springdata.services.SupervisorIdeaService;
import com.mysema.query.BooleanBuilder;
import com.mysema.query.types.Predicate;
import com.mysema.query.types.expr.BooleanExpression;
@Service ( "supervisorIdeaService" )
@ -113,6 +117,15 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
return model.getObject().getIdeaStatus().equals(IdeaStatus.WAITING)&&model.getObject().getCreator().getUser().equals(currentUser);
}
@Override
public Page<SupervisorIdea> findAll(FilterParams params, Pageable pageable) {
if(params!=null)
return supervisorIdeaRepo.findAll(predicateFromParams(params), pageable);
else
return supervisorIdeaRepo.findAll(pageable);
}
@Override
public Page<SupervisorIdea> findByStatus(IdeaStatus status, Pageable pageable) {
return supervisorIdeaRepo.findAll(byStatus(status), pageable);
@ -124,6 +137,29 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
return constructList(ideas);
}
private Predicate predicateFromParams(FilterParams params) {
return levelFilter(params.getLevels());
}
private BooleanBuilder levelFilter(Collection<ProjectClass> levels){
BooleanBuilder e = new BooleanBuilder();
if(levels!=null && !levels.isEmpty()){
for (ProjectClass level : levels) {
e.or(byLevel(level));
}
return e;
}
else {
e.and(QSupervisorIdea.supervisorIdea.projectClass.isNull());
return e;
}
}
private BooleanExpression byLevel(ProjectClass pc){
return QSupervisorIdea.supervisorIdea.projectClass.eq(pc);
}
private BooleanExpression byStatus(IdeaStatus status){
return QSupervisorIdea.supervisorIdea.ideaStatus.eq(status);
}

@ -1,5 +1,7 @@
package se.su.dsv.scipro.springdata.services;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.SortedSet;
@ -8,6 +10,7 @@ import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import se.su.dsv.scipro.data.dataobjects.Employee;
import se.su.dsv.scipro.data.dataobjects.ProjectClass;
import se.su.dsv.scipro.data.dataobjects.Student;
import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.match.dataobject.Idea.IdeaStatus;
@ -15,6 +18,7 @@ import se.su.dsv.scipro.match.dataobject.SupervisorIdea;
public interface SupervisorIdeaService extends GenericService<SupervisorIdea, Long>, QueryService<SupervisorIdea, Long> {
Page<SupervisorIdea> findAll(FilterParams params, Pageable pageable);
Page<SupervisorIdea> findByStatus(IdeaStatus status, Pageable pageable);
List<SupervisorIdea> findByStatusAndAuthor(IdeaStatus status, Student author);
@ -26,4 +30,19 @@ public interface SupervisorIdeaService extends GenericService<SupervisorIdea, Lo
boolean acceptIdea(IModel<SupervisorIdea> model, User mainAuthor, SortedSet<Student> sortedSet);
boolean hasUnconfirmedIdea(User authorUser);
boolean isIdeaEditable(IModel<SupervisorIdea> model, User currentUser);
public static class FilterParams implements Serializable {
private static final long serialVersionUID = 4981420721152104292L;
private Collection<ProjectClass> levels;
public void setLevels(Collection<ProjectClass> levels) {
this.levels = levels;
}
public Collection<ProjectClass> getLevels() {
return levels;
}
}
}

@ -1,5 +1,7 @@
package se.su.dsv.scipro.supervisor.panels;
import java.util.Iterator;
import org.apache.wicket.PageParameters;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
@ -9,7 +11,9 @@ import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.springframework.data.domain.PageRequest;
import se.su.dsv.scipro.data.dataobjects.Project;
import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.datatables.ClickableIconColumn;
import se.su.dsv.scipro.datatables.project.GenericDataPanel;
@ -18,6 +22,7 @@ import se.su.dsv.scipro.match.dataobject.SupervisorIdea;
import se.su.dsv.scipro.match.panel.FilterFormProjectClass;
import se.su.dsv.scipro.springdata.services.GenericService;
import se.su.dsv.scipro.springdata.services.SupervisorIdeaService;
import se.su.dsv.scipro.springdata.services.SupervisorIdeaService.FilterParams;
import se.su.dsv.scipro.supervisor.pages.SupervisorIdeaSubmissionPage;
public class SupervisorProjectIdeaOverviewPanel extends Panel {
@ -25,6 +30,7 @@ public class SupervisorProjectIdeaOverviewPanel extends Panel {
@SpringBean
private SupervisorIdeaService ideaService;
private GenericDataPanel<SupervisorIdea> genericDataPanel;
private SupervisorIdeaService.FilterParams params;
private static final long serialVersionUID = -9010467449322120267L;
@ -39,6 +45,11 @@ public class SupervisorProjectIdeaOverviewPanel extends Panel {
private static final long serialVersionUID = -4539188306454725307L;
@Override
public Iterator<SupervisorIdea> getIterator() {
return ideaService.findAll(params, new PageRequest(getTable().getCurrentPage(), getTable().getRowsPerPage(), getSort())).iterator();
}
@Override
public GenericService<SupervisorIdea, Long> getService() {
return ideaService;
@ -98,16 +109,24 @@ public class SupervisorProjectIdeaOverviewPanel extends Panel {
public FilterForm(String id) {
super(id);
params = new SupervisorIdeaService.FilterParams();
final FilterFormProjectClass levelFilter = new FilterFormProjectClass("levelFilter") {
private static final long serialVersionUID = -7758850229259608443L;
@Override
public void ajaxUpdate(AjaxRequestTarget target) {
System.out.println(getProjectClasses());
if(!getProjectClasses().isEmpty()){
params.setLevels(getProjectClasses());
}
target.addComponent(genericDataPanel.getWMC());
}
};
params.setLevels(levelFilter.getProjectClasses());
add(levelFilter);
}
}
}