From d6b745c7b6b35e56b63e143fec2e62e41efe77f2 Mon Sep 17 00:00:00 2001 From: Tom Vahlman <tom@dsv.su.se> Date: Tue, 3 Apr 2012 17:04:01 +0200 Subject: [PATCH] implemented sorting Employees based on keyword counts for the Regular and Area columns in the Statistics panel. --- .../match/AdminSupervisorKeywordPanel.html | 4 ++- .../match/AdminSupervisorKeywordPanel.java | 30 +++++++++++++++---- 2 files changed, 27 insertions(+), 7 deletions(-) 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 2167576974..ac6e6dcaf6 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 @@ -19,7 +19,9 @@ <thead> <tr> <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="numberOfAreasSortLink">Research Areas</a> + </th> <th class="rounded-right-top"> <a href="#" wicket:id="numberOfRegularsSortLink">Regular keywords</a> </th> 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 eba03afc2d..e922dccb41 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 @@ -24,6 +24,7 @@ import se.su.dsv.scipro.data.dataobjects.Employee; import se.su.dsv.scipro.match.dao.interfaces.KeywordTypeDao; import se.su.dsv.scipro.match.dao.interfaces.SupervisorDao; import se.su.dsv.scipro.match.dataobject.Keyword; +import se.su.dsv.scipro.match.dataobject.KeywordType; import se.su.dsv.scipro.springdata.services.SupervisorService; public class AdminSupervisorKeywordPanel extends Panel { @@ -73,6 +74,7 @@ if(!supervisorName.toString().isEmpty()) { orderBy__.append(orderBy); } + private List<Employee> addEmployeesToList(final StringBuffer supervisorName, List<Employee> employeeList) { List<Employee> employeeListName = new ArrayList<Employee>(); for(Employee employee : employeeList) { @@ -87,14 +89,15 @@ if(!supervisorName.toString().isEmpty()) { } - private List<Employee> sortEmployeeList(final StringBuffer sortDirection, final StringBuffer orderBy, List<Employee> employeeList) { + + private List<Employee> sortEmployeeList(final StringBuffer sortDirection, final StringBuffer orderBy, List<Employee> employeeList, final String keywordType) { if(sortDirection.toString().equals("ASC")) { Collections.sort(employeeList, new Comparator<Employee>() { @Override public int compare(Employee o1, Employee o2) { - if (o1.getKeywords().getAll().size() > o2.getKeywords().getAll().size()) { + if (o1.getKeywords().getFiltered(keywordType).size() > o2.getKeywords().getFiltered(keywordType).size()) { return -1; - } else if (o2.getKeywords().getAll().size() > o1.getKeywords().getAll().size()) { + } else if (o2.getKeywords().getFiltered(keywordType).size() > o1.getKeywords().getFiltered(keywordType).size()) { return 1; } else { return 0; @@ -105,9 +108,9 @@ if(!supervisorName.toString().isEmpty()) { Collections.sort(employeeList, new Comparator<Employee>() { @Override public int compare(Employee o1, Employee o2) { - if (o1.getKeywords().getAll().size() > o2.getKeywords().getAll().size()) { + if (o1.getKeywords().getFiltered(keywordType).size() > o2.getKeywords().getFiltered(keywordType).size()) { return 1; - } else if (o2.getKeywords().getAll().size() > o1.getKeywords().getAll().size()) { + } else if (o2.getKeywords().getFiltered(keywordType).size() > o1.getKeywords().getFiltered(keywordType).size()) { return -1; } else { return 0; @@ -139,8 +142,11 @@ if(!supervisorName.toString().isEmpty()) { employeeList.addAll(supervisorService.findAllEmployees(sorter)); if(orderBy.toString().equals("keywords.all.size")) { - employeeList = sortEmployeeList(sortDirection, orderBy, employeeList); + employeeList = sortEmployeeList(sortDirection, orderBy, employeeList, KeywordTypeDao.TYPE.REGULAR.toDbName()); + } else if (orderBy.toString().equals("areas.all.size")) { + employeeList = sortEmployeeList(sortDirection, orderBy, employeeList, KeywordTypeDao.TYPE.RESEARCH_AREA.toDbName()); } + if(supervisorName.toString().isEmpty()) { return employeeList; } @@ -189,6 +195,18 @@ if(!supervisorName.toString().isEmpty()) { }; tableContainer.add(nameSortLink); + final AjaxLink<Void> numberOfAreasSortLink = new AjaxLink<Void>("numberOfAreasSortLink") { + + private static final long serialVersionUID = 5809993580126828318L; + + @Override + public void onClick(AjaxRequestTarget target) { + getSortOrder(sortDirection, orderBy, "areas.all.size", supervisorName); + target.addComponent(tableContainer); + } + }; + tableContainer.add(numberOfAreasSortLink); + final AjaxLink<Void> numberOfRegularsSortLink = new AjaxLink<Void>("numberOfRegularsSortLink") { private static final long serialVersionUID = 5809993580126828318L;