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;