First impl. of sorting on name with spring data api.

This commit is contained in:
Tom Vahlman 2012-04-02 11:47:12 +02:00
parent 5d95b54be6
commit 13428ff5ef
2 changed files with 74 additions and 14 deletions
src/main/java/se/su/dsv/scipro/admin/panels/match

@ -18,7 +18,11 @@
<table wicket:id="table" class="rounded-corner">
<thead>
<tr>
<th class="rounded-left-top"><a href="#" wicket:id="nameSortLink">Name</a></th><th>Research Areas</th><th class="rounded-right-top">Regular keywords</th>
<th class="rounded-left-top"><a href="#" wicket:id="nameSortLink">Name</a></th>
<th>Research Areas</th>
<th class="rounded-right-top">
<a href="#" wicket:id="numberOfRegularsSortLink">Regular keywords</a>
</th>
</tr>
</thead>
<tbody>

@ -1,7 +1,6 @@
package se.su.dsv.scipro.admin.panels.match;
import java.util.List;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
@ -9,21 +8,22 @@ import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
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.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.odlabs.wiquery.ui.dialog.Dialog;
import se.su.dsv.scipro.data.dao.interfaces.Dao.SortableParams.Sort;
import se.su.dsv.scipro.data.dataobjects.Employee;
import se.su.dsv.scipro.dataproviders.QueryableDataProvider;
import se.su.dsv.scipro.match.dao.interfaces.KeywordTypeDao;
import se.su.dsv.scipro.match.dao.interfaces.SupervisorDao;
import se.su.dsv.scipro.match.dao.interfaces.SupervisorDaoParams;
import se.su.dsv.scipro.match.dataobject.Keyword;
import se.su.dsv.scipro.springdata.services.SupervisorService;
public class AdminSupervisorKeywordPanel extends Panel {
@ -32,6 +32,9 @@ public class AdminSupervisorKeywordPanel extends Panel {
@SpringBean
private SupervisorDao supervisorDao;
@SpringBean
private SupervisorService supervisorService;
public AdminSupervisorKeywordPanel(String str) {
super(str);
Dialog dialog = new Dialog("detailsDialog");
@ -39,10 +42,12 @@ public class AdminSupervisorKeywordPanel extends Panel {
WebMarkupContainer tableContainer = new WebMarkupContainer("table");
SupervisorDaoParams params = new SupervisorDaoParams();
params.setSortOn("user.lastName", Sort.ASCENDING);
params.setSortOn("keywords.size()", Sort.ASCENDING);
TextField<String> supervisorField = new TextField<String>("supervisorField", new Model<String>());
setUpTable(dialog, tableContainer, params);
setUpFiltering(tableContainer, params, supervisorField);
}
//addSortLink("numberOfRegulars", "keywords.size()", tableContainer, params);
}
private void setUpFiltering(WebMarkupContainer tableContainer, SupervisorDaoParams params, TextField<String> supervisorField) {
FilterForm form = new FilterForm(tableContainer, params, supervisorField);
@ -58,15 +63,46 @@ public class AdminSupervisorKeywordPanel extends Panel {
dialog.add(new EmptyPanel("dialogContent"));
add(dialog.setOutputMarkupId(true));
}
private void addSortLink(String markup, final String sortField, final WebMarkupContainer allContainer, final SupervisorDaoParams params) {
final AjaxLink<Void> sortLink = new AjaxLink<Void>(markup + "SortLink") {
private static final long serialVersionUID = -8463105615994034854L;
@Override
public void onClick(AjaxRequestTarget target) {
if (params.getDirection().equals(Sort.ASCENDING)) {
params.setSortOn(sortField, Sort.DESCENDING);
} else {
params.setSortOn(sortField, Sort.ASCENDING);
}
target.addComponent(allContainer);
}
};
allContainer.add(sortLink);
}
private void setUpTable(final Dialog dialog, final WebMarkupContainer tableContainer, final SupervisorDaoParams params) {
QueryableDataProvider<Employee, SupervisorDaoParams> provider = new QueryableDataProvider<Employee, SupervisorDaoParams>(supervisorDao, params);
DataView<Employee> dataView = new DataView<Employee>("supervisorList", provider, 1000) {
final StringBuffer definedSortOrder = new StringBuffer();
definedSortOrder.append("user.firstName");
final StringBuffer definedSortDirection = new StringBuffer();
definedSortDirection.append("ASC");
final ListView<Employee> dataView = new ListView<Employee>("supervisorList", new LoadableDetachableModel<List<Employee>>() {
private static final long serialVersionUID = -2395796971679213814L;
@Override
protected List<Employee> load() {
return supervisorService.findAllEmployees(new org.springframework.data.domain.Sort(definedSortOrder.toString()));
}
}) {
private static final long serialVersionUID = 3572766096237883198L;
@Override
protected void populateItem(Item<Employee> item) {
protected void populateItem(ListItem<Employee> item) {
final Employee supervisor = item.getModelObject();
List<Keyword> areaKeywords = supervisor.getKeywords().getFiltered(KeywordTypeDao.TYPE.RESEARCH_AREA.toDbName());
List<Keyword> regularKeywords = supervisor.getKeywords().getFiltered(KeywordTypeDao.TYPE.REGULAR.toDbName());
@ -98,20 +134,40 @@ public class AdminSupervisorKeywordPanel extends Panel {
}
};
final AjaxLink<Void> nameSortLink = new AjaxLink<Void>("nameSortLink") {
private static final long serialVersionUID = -6459164267551936706L;
@Override
public void onClick(AjaxRequestTarget target) {
if(params.getDirection().equals(Sort.ASCENDING)) {
params.setSortOn("user.lastName", Sort.DESCENDING);
org.springframework.data.domain.Sort sortOrder;
if(definedSortDirection.toString().equals("ASC")) {
sortOrder = new org.springframework.data.domain.Sort(org.springframework.data.domain.Sort.Direction.DESC, "user.lastName");
definedSortDirection.delete(0, definedSortDirection.length()-1);
definedSortDirection.append("DESC");
} else {
params.setSortOn("user.lastName", Sort.ASCENDING);
sortOrder = new org.springframework.data.domain.Sort(org.springframework.data.domain.Sort.Direction.ASC, "user.lastName");
definedSortDirection.delete(0, definedSortDirection.length()-1);
definedSortDirection.append("ASC");
}
dataView.setDefaultModelObject(supervisorService.findAllEmployees(sortOrder));
target.addComponent(tableContainer);
}
};
tableContainer.add(nameSortLink);
final AjaxLink<Void> numberOfRegularsSortLink = new AjaxLink<Void>("numberOfRegularsSortLink") {
private static final long serialVersionUID = 5809993580126828318L;
@Override
public void onClick(AjaxRequestTarget target) {
if(params.getDirection().equals(Sort.ASCENDING)) {
params.setSortOn("keywords.size", Sort.DESCENDING);
} else {
params.setSortOn("keywords.size", Sort.ASCENDING);
}
target.addComponent(tableContainer);
}
};
tableContainer.add(numberOfRegularsSortLink);
tableContainer.add(dataView);
add(tableContainer.setOutputMarkupId(true));
}