added filtering on project level on author - project idea datatable and made some refactoring to put table in a panel instead of the page.
This commit is contained in:
parent
13807ad06b
commit
b2c5cfc491
src
main/java/se/su/dsv/scipro
project
pages
panels
springdata
supervisor/panels
test/java/se/su/dsv/scipro/springdata
@ -4,10 +4,11 @@
|
||||
<wicket:extend>
|
||||
<div class="prepend-top span-24 last">
|
||||
<div wicket:id="feedback"></div>
|
||||
<div wicket:id="dialog">
|
||||
<div wicket:id="dialogPanel"></div>
|
||||
</div>
|
||||
<div class="prepend-top" wicket:id="dataPanel"></div>
|
||||
<div class="info-box rounded-box last">
|
||||
Application period is open from 2012-01-01 to 2013-01-01 and the
|
||||
course start for the application period is 2014-05-01. (dummy data)
|
||||
</div>
|
||||
<div wicket:id="ideaOverview"></div>
|
||||
</div>
|
||||
</wicket:extend>
|
||||
</body>
|
||||
|
@ -1,165 +1,25 @@
|
||||
package se.su.dsv.scipro.project.pages;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.wicket.PageParameters;
|
||||
import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
|
||||
import org.apache.wicket.ajax.AjaxRequestTarget;
|
||||
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.panel.EmptyPanel;
|
||||
import org.apache.wicket.markup.html.panel.FeedbackPanel;
|
||||
import org.apache.wicket.model.IModel;
|
||||
import org.apache.wicket.model.Model;
|
||||
import org.apache.wicket.spring.injection.annot.SpringBean;
|
||||
import org.apache.wicket.util.time.Duration;
|
||||
import org.odlabs.wiquery.ui.dialog.Dialog;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
|
||||
import se.su.dsv.scipro.data.dataobjects.Student;
|
||||
import se.su.dsv.scipro.datatables.ClickableTitleColumn;
|
||||
import se.su.dsv.scipro.datatables.project.GenericDataPanel;
|
||||
import se.su.dsv.scipro.match.dataobject.Idea.IdeaStatus;
|
||||
import se.su.dsv.scipro.match.dataobject.SupervisorIdea;
|
||||
import se.su.dsv.scipro.project.panels.AcceptIdeaDialogPanel;
|
||||
import se.su.dsv.scipro.project.panels.CompleteIdeaDialogPanel;
|
||||
import se.su.dsv.scipro.project.panels.ProjectIdeaOverviewPanel;
|
||||
import se.su.dsv.scipro.security.auth.Authorization;
|
||||
import se.su.dsv.scipro.security.auth.roles.Roles;
|
||||
import se.su.dsv.scipro.springdata.services.GenericService;
|
||||
import se.su.dsv.scipro.springdata.services.StudentService;
|
||||
import se.su.dsv.scipro.springdata.services.SupervisorIdeaService;
|
||||
|
||||
@Authorization(authorizedRoles={Roles.SYSADMIN})
|
||||
public class ProjectIdeaStartPage extends AbstractProjectIdeaPage {
|
||||
|
||||
@SpringBean
|
||||
private SupervisorIdeaService ideaService;
|
||||
@SpringBean
|
||||
private StudentService studentService;
|
||||
private Dialog dialog;
|
||||
private FeedbackPanel feedbackPanel;
|
||||
private GenericDataPanel<SupervisorIdea> genericDataPanel;
|
||||
|
||||
public ProjectIdeaStartPage(PageParameters pp) {
|
||||
super(pp);
|
||||
addFeedback();
|
||||
addDialog();
|
||||
addDataTable();
|
||||
checkForUnconfirmedIdeas();
|
||||
add(new ProjectIdeaOverviewPanel("ideaOverview", getUser()));
|
||||
}
|
||||
|
||||
private void addFeedback() {
|
||||
add(feedbackPanel = new FeedbackPanel("feedback"));
|
||||
feedbackPanel.setOutputMarkupId(true);
|
||||
}
|
||||
|
||||
private void checkForUnconfirmedIdeas() {
|
||||
boolean hasUnconfirmed = ideaService.hasTakenIdeas(getUser(), false);
|
||||
if(hasUnconfirmed) {
|
||||
Student author = studentService.findByUser(getUser());
|
||||
final List<SupervisorIdea> ideas = ideaService.findIdeas(IdeaStatus.TAKEN, author, false);
|
||||
if(ideas.size()>1)
|
||||
System.out.println("More than one unconfirmed idea");
|
||||
else {
|
||||
add(new AbstractAjaxTimerBehavior(Duration.milliseconds(1)) {
|
||||
private static final long serialVersionUID = 8249890924500999472L;
|
||||
|
||||
@Override
|
||||
protected void onTimer(AjaxRequestTarget target) {
|
||||
dialog.replace(new AcceptIdeaDialogPanel("dialogPanel",Model.of(ideas.get(0)), getUser(), true));
|
||||
dialog.setTitle("Supervisor project idea");
|
||||
target.addComponent(dialog);
|
||||
dialog.open(target);
|
||||
stop();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
else {
|
||||
checkForConfirmedIdeas();
|
||||
}
|
||||
}
|
||||
|
||||
private void checkForConfirmedIdeas() {
|
||||
boolean hasConfirmed = ideaService.hasTakenIdeas(getUser(), true);
|
||||
if(hasConfirmed){
|
||||
Student author = studentService.findByUser(getUser());
|
||||
final List<SupervisorIdea> ideas = ideaService.findIdeas(IdeaStatus.TAKEN, author, true);
|
||||
add(new AbstractAjaxTimerBehavior(Duration.milliseconds(1)) {
|
||||
private static final long serialVersionUID = 8249890924500999472L;
|
||||
|
||||
@Override
|
||||
protected void onTimer(AjaxRequestTarget target) {
|
||||
dialog.replace(new CompleteIdeaDialogPanel("dialogPanel",Model.of(ideas.get(0))));
|
||||
dialog.setWidth(550);
|
||||
dialog.setHeight(700);
|
||||
dialog.setTitle("Selected supervisor project idea");
|
||||
target.addComponent(dialog);
|
||||
dialog.open(target);
|
||||
stop();
|
||||
}
|
||||
});
|
||||
} else
|
||||
System.out.println("No confirmed ideas");
|
||||
}
|
||||
|
||||
private void addDialog() {
|
||||
dialog = new Dialog("dialog");
|
||||
dialog.setModal(true);
|
||||
dialog.setAutoOpen(false);
|
||||
dialog.setWidth(500);
|
||||
dialog.setHeight(600);
|
||||
dialog.add(new EmptyPanel("dialogPanel"));
|
||||
add(dialog);
|
||||
}
|
||||
|
||||
private void addDataTable() {
|
||||
add(genericDataPanel = new GenericDataPanel<SupervisorIdea>("dataPanel") {
|
||||
|
||||
private static final long serialVersionUID = -4539188306454725307L;
|
||||
|
||||
@Override
|
||||
public GenericService<SupervisorIdea, Long> getService() {
|
||||
return ideaService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSortString() {
|
||||
return "title";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterator<SupervisorIdea> getIterator() {
|
||||
return ideaService.findByStatus(IdeaStatus.WAITING, new PageRequest(getTable().getCurrentPage(),getTable().getRowsPerPage(), getSort())).iterator();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public IColumn[] getColumns() {
|
||||
IColumn[] columns = new IColumn[3];
|
||||
columns[0] = new PropertyColumn<SupervisorIdea>(Model.of("Date"), "dateCreated", "dateCreated");
|
||||
columns[1] = new PropertyColumn<SupervisorIdea>(Model.of("Level"), "projectClass", "projectClass");
|
||||
columns[2] = new ClickableTitleColumn<SupervisorIdea>(Model.of("Title"), "title", "title") {
|
||||
private static final long serialVersionUID = -5826739548812884588L;
|
||||
|
||||
@Override
|
||||
protected void onClick(IModel<SupervisorIdea> ideaModel,
|
||||
AjaxRequestTarget pTarget) {
|
||||
dialog.replace(new AcceptIdeaDialogPanel("dialogPanel", ideaModel, getUser(), false));
|
||||
dialog.setTitle("Supervisor project idea");
|
||||
pTarget.addComponent(dialog);
|
||||
dialog.open(pTarget);
|
||||
|
||||
}
|
||||
};
|
||||
return columns;
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,18 @@
|
||||
<!DOCTYPE html>
|
||||
<html
|
||||
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
|
||||
<head>
|
||||
<meta http-equiv="Content-type" content="text/html;charset=UTF-8"/>
|
||||
</head>
|
||||
<body>
|
||||
<wicket:panel>
|
||||
<div wicket:id="dialog">
|
||||
<div wicket:id="dialogPanel"></div>
|
||||
</div>
|
||||
<form wicket:id="form">
|
||||
<div class="span-5" wicket:id="levelFilter"></div>
|
||||
</form>
|
||||
<div class="span-24 prepend-top" wicket:id="dataPanel"></div>
|
||||
</wicket:panel>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,183 @@
|
||||
package se.su.dsv.scipro.project.panels;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
|
||||
import org.apache.wicket.ajax.AjaxRequestTarget;
|
||||
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.panel.EmptyPanel;
|
||||
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.apache.wicket.util.time.Duration;
|
||||
import org.odlabs.wiquery.ui.dialog.Dialog;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
|
||||
import se.su.dsv.scipro.data.dataobjects.Student;
|
||||
import se.su.dsv.scipro.data.dataobjects.User;
|
||||
import se.su.dsv.scipro.datatables.ClickableTitleColumn;
|
||||
import se.su.dsv.scipro.datatables.project.GenericDataPanel;
|
||||
import se.su.dsv.scipro.match.dataobject.Idea.IdeaStatus;
|
||||
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.StudentService;
|
||||
import se.su.dsv.scipro.springdata.services.SupervisorIdeaService;
|
||||
|
||||
public class ProjectIdeaOverviewPanel extends Panel {
|
||||
|
||||
private static final long serialVersionUID = 3494993579137804821L;
|
||||
|
||||
@SpringBean
|
||||
private SupervisorIdeaService ideaService;
|
||||
@SpringBean
|
||||
private StudentService studentService;
|
||||
private SupervisorIdeaService.FilterParams params;
|
||||
private GenericDataPanel<SupervisorIdea> genericDataPanel;
|
||||
private Dialog dialog;
|
||||
|
||||
public ProjectIdeaOverviewPanel(String id, User currentUser) {
|
||||
super(id);
|
||||
addDialog();
|
||||
addDataTable(currentUser);
|
||||
checkForUnconfirmedIdeas(currentUser);
|
||||
add(new FilterForm("form"));
|
||||
}
|
||||
|
||||
private void addDialog() {
|
||||
dialog = new Dialog("dialog");
|
||||
dialog.setModal(true);
|
||||
dialog.setAutoOpen(false);
|
||||
dialog.setWidth(500);
|
||||
dialog.setHeight(600);
|
||||
dialog.add(new EmptyPanel("dialogPanel"));
|
||||
add(dialog);
|
||||
}
|
||||
|
||||
private void addDataTable(final User currentUser) {
|
||||
add(genericDataPanel = new GenericDataPanel<SupervisorIdea>("dataPanel") {
|
||||
|
||||
private static final long serialVersionUID = -4539188306454725307L;
|
||||
|
||||
@Override
|
||||
public GenericService<SupervisorIdea, Long> getService() {
|
||||
return ideaService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSortString() {
|
||||
return "title";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterator<SupervisorIdea> getIterator() {
|
||||
return ideaService.findByStatusAndParams(IdeaStatus.WAITING, params, new PageRequest(getTable().getCurrentPage(), getTable().getRowsPerPage(), getSort())).iterator();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IColumn[] getColumns() {
|
||||
IColumn[] columns = new IColumn[3];
|
||||
columns[0] = new PropertyColumn<SupervisorIdea>(Model.of("Date"), "dateCreated", "dateCreated");
|
||||
columns[1] = new PropertyColumn<SupervisorIdea>(Model.of("Level"), "projectClass", "projectClass");
|
||||
columns[2] = new ClickableTitleColumn<SupervisorIdea>(Model.of("Title"), "title", "title") {
|
||||
private static final long serialVersionUID = -5826739548812884588L;
|
||||
|
||||
@Override
|
||||
protected void onClick(IModel<SupervisorIdea> ideaModel,
|
||||
AjaxRequestTarget pTarget) {
|
||||
dialog.replace(new AcceptIdeaDialogPanel("dialogPanel", ideaModel, currentUser, false));
|
||||
dialog.setTitle("Supervisor project idea");
|
||||
pTarget.addComponent(dialog);
|
||||
dialog.open(pTarget);
|
||||
|
||||
}
|
||||
};
|
||||
return columns;
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private void checkForUnconfirmedIdeas(final User currentUser) {
|
||||
boolean hasUnconfirmed = ideaService.hasTakenIdeas(currentUser, false);
|
||||
if(hasUnconfirmed) {
|
||||
Student author = studentService.findByUser(currentUser);
|
||||
final List<SupervisorIdea> ideas = ideaService.findIdeas(IdeaStatus.TAKEN, author, false);
|
||||
if(ideas.size()>1)
|
||||
System.out.println("More than one unconfirmed idea");
|
||||
else {
|
||||
add(new AbstractAjaxTimerBehavior(Duration.milliseconds(1)) {
|
||||
private static final long serialVersionUID = 8249890924500999472L;
|
||||
|
||||
@Override
|
||||
protected void onTimer(AjaxRequestTarget target) {
|
||||
dialog.replace(new AcceptIdeaDialogPanel("dialogPanel",Model.of(ideas.get(0)), currentUser, true));
|
||||
dialog.setTitle("Supervisor project idea");
|
||||
target.addComponent(dialog);
|
||||
dialog.open(target);
|
||||
stop();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
else {
|
||||
checkForConfirmedIdeas(currentUser);
|
||||
}
|
||||
}
|
||||
|
||||
private void checkForConfirmedIdeas(final User currentUser) {
|
||||
boolean hasConfirmed = ideaService.hasTakenIdeas(currentUser, true);
|
||||
if(hasConfirmed){
|
||||
Student author = studentService.findByUser(currentUser);
|
||||
final List<SupervisorIdea> ideas = ideaService.findIdeas(IdeaStatus.TAKEN, author, true);
|
||||
add(new AbstractAjaxTimerBehavior(Duration.milliseconds(1)) {
|
||||
private static final long serialVersionUID = 8249890924500999472L;
|
||||
|
||||
@Override
|
||||
protected void onTimer(AjaxRequestTarget target) {
|
||||
dialog.replace(new CompleteIdeaDialogPanel("dialogPanel",Model.of(ideas.get(0))));
|
||||
dialog.setWidth(550);
|
||||
dialog.setHeight(700);
|
||||
dialog.setTitle("Selected supervisor project idea");
|
||||
target.addComponent(dialog);
|
||||
dialog.open(target);
|
||||
stop();
|
||||
}
|
||||
});
|
||||
} else
|
||||
System.out.println("No confirmed ideas");
|
||||
}
|
||||
|
||||
private class FilterForm extends Form<Void> {
|
||||
private static final long serialVersionUID = -5646495880236201368L;
|
||||
|
||||
public FilterForm(String id) {
|
||||
super(id);
|
||||
params = new SupervisorIdeaService.FilterParams();
|
||||
|
||||
//FILTERING ON PROJECT CLASS:
|
||||
final FilterFormProjectClass levelFilter = new FilterFormProjectClass("levelFilter") {
|
||||
private static final long serialVersionUID = -7758850229259608443L;
|
||||
|
||||
@Override
|
||||
public void ajaxUpdate(AjaxRequestTarget target) {
|
||||
if(!getProjectClasses().isEmpty()){
|
||||
params.setLevels(getProjectClasses());
|
||||
}
|
||||
target.addComponent(genericDataPanel.getWMC());
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
params.setLevels(levelFilter.getProjectClasses());
|
||||
add(levelFilter);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
@ -192,6 +192,12 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
|
||||
return supervisorIdeaRepo.findAll(byStatus(status), pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<SupervisorIdea> findByStatusAndParams(IdeaStatus status, FilterParams params, Pageable pageable) {
|
||||
return supervisorIdeaRepo.findAll(byStatus(status).and(levelFilter(params.getLevels())), pageable);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<SupervisorIdea> findByStatusAndAuthor(IdeaStatus status, Student author) {
|
||||
List<SupervisorIdea> ideas = supervisorIdeaRepo.findIdeasByAuthorAndStatus(author, status);
|
||||
@ -207,7 +213,7 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
|
||||
private Predicate predicateFromParams(FilterParams params) {
|
||||
return levelFilter(params.getLevels()).and(bySupervisor(params.getSupervisor()));
|
||||
}
|
||||
|
||||
|
||||
private BooleanBuilder levelFilter(Collection<ProjectClass> levels){
|
||||
BooleanBuilder e = new BooleanBuilder();
|
||||
if(levels!=null && !levels.isEmpty()){
|
||||
|
@ -20,6 +20,7 @@ public interface SupervisorIdeaService extends GenericService<SupervisorIdea, Lo
|
||||
|
||||
Page<SupervisorIdea> findAll(FilterParams params, Pageable pageable);
|
||||
Page<SupervisorIdea> findByStatus(IdeaStatus status, Pageable pageable);
|
||||
Page<SupervisorIdea> findByStatusAndParams(IdeaStatus status, FilterParams params, Pageable pageable);
|
||||
List<SupervisorIdea> findByStatusAndAuthor(IdeaStatus status, Student author);
|
||||
List<SupervisorIdea> findIdeas(IdeaStatus status, Student author, boolean confirmed);
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
<input type="checkbox" wicket:id="supervisorCheckBox" />
|
||||
</div>
|
||||
</form>
|
||||
<div class="span-22 prepend-top" wicket:id="dataPanel"></div>
|
||||
<div class="span-24 prepend-top" wicket:id="dataPanel"></div>
|
||||
</wicket:panel>
|
||||
</body>
|
||||
</html>
|
@ -39,6 +39,7 @@ import se.su.dsv.scipro.match.facade.ApplicationPeriodFacade;
|
||||
import se.su.dsv.scipro.springdata.services.ProjectClassService;
|
||||
import se.su.dsv.scipro.springdata.services.RoleService;
|
||||
import se.su.dsv.scipro.springdata.services.SupervisorIdeaService;
|
||||
import se.su.dsv.scipro.springdata.services.SupervisorIdeaService.FilterParams;
|
||||
import se.su.dsv.scipro.springdata.services.UserService;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ -126,6 +127,27 @@ public class TestSupervisorIdea {
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@Transactional
|
||||
@Rollback
|
||||
public void testFindIdeasByStatusAndParamsFiltering() {
|
||||
Set<ProjectClass> levelSet = new HashSet<ProjectClass>();
|
||||
levelSet.add(bachelor);
|
||||
FilterParams params = new FilterParams();
|
||||
params.setLevels(levelSet);
|
||||
|
||||
Page<SupervisorIdea> waitingBachelors = ideaService.findByStatusAndParams(IdeaStatus.WAITING, params, new PageRequest(0, 10));
|
||||
List<SupervisorIdea> waitingIdeasList = waitingBachelors.getContent();
|
||||
Assert.assertEquals(Arrays.asList(new SupervisorIdea[]{waitingBachelorIdea}), waitingIdeasList);
|
||||
|
||||
levelSet.add(master);
|
||||
params.setLevels(levelSet);
|
||||
|
||||
Page<SupervisorIdea> waitingBachelorAndMasters = ideaService.findByStatusAndParams(IdeaStatus.WAITING, params, new PageRequest(0, 10));
|
||||
List<SupervisorIdea> waitingIdeas = waitingBachelorAndMasters.getContent();
|
||||
Assert.assertEquals(Arrays.asList(new SupervisorIdea[]{waitingBachelorIdea, waitingMasterIdea}), waitingIdeas);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Transactional
|
||||
@Rollback
|
||||
|
Loading…
x
Reference in New Issue
Block a user