diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/match/AdminSupervisorKeywordPanel.html b/src/main/java/se/su/dsv/scipro/admin/panels/match/AdminSupervisorKeywordPanel.html index 68e12de8a0..2167576974 100644 --- a/src/main/java/se/su/dsv/scipro/admin/panels/match/AdminSupervisorKeywordPanel.html +++ b/src/main/java/se/su/dsv/scipro/admin/panels/match/AdminSupervisorKeywordPanel.html @@ -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> diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/match/AdminSupervisorKeywordPanel.java b/src/main/java/se/su/dsv/scipro/admin/panels/match/AdminSupervisorKeywordPanel.java index ef005486bf..51ad32555a 100644 --- a/src/main/java/se/su/dsv/scipro/admin/panels/match/AdminSupervisorKeywordPanel.java +++ b/src/main/java/se/su/dsv/scipro/admin/panels/match/AdminSupervisorKeywordPanel.java @@ -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)); }