added project status filtering

This commit is contained in:
Fredrik Friis 2012-02-14 16:18:41 +09:00
parent f268a0ddc2
commit 7b04f29218
4 changed files with 223 additions and 57 deletions

@ -6,61 +6,75 @@
</head>
<body>
<wicket:panel>
<div class="span-22 last" wicket:id="settingsContainer">
<label>Title: </label>
<div wicket:id="filterStringPanel"></div>
<label>Created between: </label>
<div wicket:id="filterDatesPanel"></div>
<label>Level: </label>
<div wicket:id="filterProjectClassPanel"></div>
</div>
<div class="right"><button wicket:id="newLink">Create new project</button></div>
<div wicket:id="dialog">
<div wicket:id="panel"></div>
</div>
<div class="span-22 last" wicket:id="dataviewContainer">
<table class="rounded-corner" >
<thead>
<tr>
<th class="rounded-left-top"><a href="#" wicket:id="titleSort">Title</a></th>
<!-- <th>Title</th> -->
<th>Level</th>
<th>Author(s)</th>
<th>Supervisor</th>
<th>Reviewer</th>
<th>Status</th>
<th class="rounded-right-top">Edit</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="7" class="rounded-foot">&nbsp;</td>
</tr>
</tfoot>
<tbody wicket:id="dataview">
<tr>
<td wicket:id="projectTitle">Other role</td>
<td wicket:id="projectLevel">Other role</td>
<td wicket:id="authorsLabel">Other role</td>
<td wicket:id="headsupervisorLabel">Other role</td>
<td wicket:id="reviewerLabel">Other role</td>
<td wicket:id="statusLabel">Other role</td>
<!-- <td wicket:id="editLabel">Other role</td> -->
<td><a href="#" wicket:id="testLink">Edit</a></td>
</tr>
</tbody>
<tbody>
<tr>
<td wicket:id="emptyLabel" colspan="7"></td>
</tr>
</tbody>
</table>
<div wicket:id="nav"></div>
</div>
<div class="span-22 last" wicket:id="settingsContainer">
<label>Title: </label>
<div wicket:id="filterStringPanel"></div>
<label>Created between: </label>
<div wicket:id="filterDatesPanel"></div>
<div class="span-20">
<div class="span-4">
<label>Level: </label>
<div wicket:id="filterProjectClassPanel"></div>
</div>
<div class="span-4 last">
<label>Status: </label>
<div wicket:id="filterProjectStatusPanel"></div>
</div>
</div>
</div>
<div class="right">
<button wicket:id="newLink">Create new project</button>
</div>
<div wicket:id="dialog">
<div wicket:id="panel"></div>
</div>
<div class="span-22 last" wicket:id="dataviewContainer">
<table class="rounded-corner">
<thead>
<tr>
<th class="rounded-left-top"><a href="#"
wicket:id="titleSort">Title</a></th>
<!-- <th>Title</th> -->
<th>Level</th>
<th>Author(s)</th>
<th>Supervisor</th>
<th>Reviewer</th>
<th>Status</th>
<th class="rounded-right-top">Edit</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="7" class="rounded-foot">&nbsp;</td>
</tr>
</tfoot>
<tbody wicket:id="dataview">
<tr>
<td wicket:id="projectTitle">Other role</td>
<td wicket:id="projectLevel">Other role</td>
<td wicket:id="authorsLabel">Other role</td>
<td wicket:id="headsupervisorLabel">Other role</td>
<td wicket:id="reviewerLabel">Other role</td>
<td wicket:id="statusLabel">Other role</td>
<!-- <td wicket:id="editLabel">Other role</td> -->
<td><a href="#" wicket:id="testLink">Edit</a></td>
</tr>
</tbody>
<tbody>
<tr>
<td wicket:id="emptyLabel" colspan="7"></td>
</tr>
</tbody>
</table>
<div wicket:id="nav"></div>
</div>
</wicket:panel>
</body>
</html>

@ -13,18 +13,17 @@ import org.apache.wicket.markup.html.panel.EmptyPanel;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.odlabs.wiquery.ui.dialog.Dialog;
import se.su.dsv.scipro.admin.pages.ProjectManagementPage;
import se.su.dsv.scipro.admin.panels.NewEditProjectPanel;
import se.su.dsv.scipro.data.dao.interfaces.Dao.SortableParams.Sort;
import se.su.dsv.scipro.data.dao.interfaces.ProjectDao;
import se.su.dsv.scipro.data.dataobjects.Project;
import se.su.dsv.scipro.dataproviders.NewProjectDataProvider;
import se.su.dsv.scipro.reusable.DatesPanel;
import se.su.dsv.scipro.reusable.FilterProjectClassPanel;
import se.su.dsv.scipro.reusable.FilterProjectStatusPanel;
import se.su.dsv.scipro.reusable.FilterStringPanel;
public class ProjectManagementPanel extends Panel {
@ -181,6 +180,17 @@ public class ProjectManagementPanel extends Panel {
}
});
settingsContainer.add(new FilterProjectStatusPanel("filterProjectStatusPanel"){
private static final long serialVersionUID = 1L;
@Override
public void onUpdateFilter(AjaxRequestTarget target) {
params.setProjectStatuses(getSelectedProjectStatuses());
ajaxRefresh(target);
}
});
}
private void sortSetup(){

@ -0,0 +1,17 @@
<!DOCTYPE html>
<html
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:panel>
<form wicket:id="form">
<div wicket:id="list">
<div>
<span wicket:id="name"></span> <input wicket:id="check"
type="checkbox" />
</div>
</div>
</form>
</wicket:panel>
</body>
</html>

@ -0,0 +1,125 @@
package se.su.dsv.scipro.reusable;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.PropertyModel;
import se.su.dsv.scipro.data.enums.ProjectStatus;
public abstract class FilterProjectStatusPanel extends Panel {
private static final long serialVersionUID = 1L;
private ProjectStatusForm form;
public Collection<ProjectStatus> getSelectedProjectStatuses(){
return form.selectedProjectStatuses;
}
public FilterProjectStatusPanel(String id) {
super(id);
form = new ProjectStatusForm("form");
add(form);
}
/**
* Override this method to do something.
*/
public abstract void onUpdateFilter(AjaxRequestTarget target);
private class ProjectStatusForm extends Form{
private static final long serialVersionUID = 1L;
private Collection<ProjectStatus> selectedProjectStatuses;
public Collection<ProjectStatus> getSelectedProjectStatuses(){
return selectedProjectStatuses;
}
public ProjectStatusForm(String id) {
super(id);
ArrayList<Wrapper> wrapperCollection = new ArrayList<Wrapper>();
for (ProjectStatus ps : ProjectStatus.values()){
wrapperCollection.add(new Wrapper(ps));
}
selectedProjectStatuses = new HashSet<ProjectStatus>();
ListView<Wrapper> listView = new ListView<Wrapper>("list", wrapperCollection){
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(ListItem<Wrapper> item) {
final Wrapper wrapper = (Wrapper) item.getModelObject();
item.add(new Label("name", wrapper.getProjectStatus().toString()));
item.add(new AjaxCheckBox("check", new PropertyModel<Boolean>(wrapper, "selected")){
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
if (getModelObject() == true){
selectedProjectStatuses.add(wrapper.getProjectStatus());
onUpdateFilter(target);
}
else if (getModelObject() == false){
selectedProjectStatuses.remove(wrapper.getProjectStatus());
onUpdateFilter(target);
}
}
});
}
};
listView.setReuseItems(true);
add(listView);
}
}
private class Wrapper implements Serializable {
private final ProjectStatus projectStatus;
private Boolean selected = Boolean.FALSE;
public Wrapper(ProjectStatus projectStatus){
this.projectStatus = projectStatus;
}
public boolean getSelected(){
return selected;
}
public void setSelected(boolean selected){
this.selected = selected;
}
public ProjectStatus getProjectStatus(){
return projectStatus;
}
}
}