Using a native SQL query to sort the Employees based on keywords in the statistics page.

This commit is contained in:
Tom Vahlman 2012-04-10 22:37:26 +02:00
parent 2066e433e9
commit eb9d2a52ce

@ -48,7 +48,6 @@ public class AdminSupervisorKeywordPanel extends Panel {
StringBuffer supervisorName = new StringBuffer(); StringBuffer supervisorName = new StringBuffer();
add(new FilterForm(tableContainer, supervisorField, supervisorName)); add(new FilterForm(tableContainer, supervisorField, supervisorName));
setUpTable(dialog, tableContainer, supervisorName); setUpTable(dialog, tableContainer, supervisorName);
} }
private void setUpDialog(Dialog dialog) { private void setUpDialog(Dialog dialog) {
@ -65,12 +64,12 @@ public class AdminSupervisorKeywordPanel extends Panel {
if(!supervisorName.toString().isEmpty()) { if(!supervisorName.toString().isEmpty()) {
String addToSearch = "true"; String addToSearch = "true";
} }
if ((sortDirection.toString().isEmpty() && !orderBy.equals("keywords.all.size")) || sortDirection.toString().equals("ASC")) { if ((sortDirection.toString().isEmpty() && !orderBy.equals("keywords.all.size")) || sortDirection.toString().equalsIgnoreCase("asc")) {
sortDirection.delete(0, sortDirection.length()); sortDirection.delete(0, sortDirection.length());
sortDirection.append("DESC"); sortDirection.append("desc");
} else { } else {
sortDirection.delete(0, sortDirection.length()); sortDirection.delete(0, sortDirection.length());
sortDirection.append("ASC"); sortDirection.append("asc");
} }
orderBy__.delete(0, orderBy__.length()); orderBy__.delete(0, orderBy__.length());
orderBy__.append(orderBy); orderBy__.append(orderBy);
@ -90,6 +89,29 @@ if(!supervisorName.toString().isEmpty()) {
return employeeList; return employeeList;
} }
private void loadEmployeeList(List<Employee> employeeList, StringBuffer orderBy, StringBuffer sortDirection) {
KeywordType keywordType = keywordTypeDao.findByType(KeywordTypeDao.TYPE.REGULAR);
if(orderBy.toString().equals("keywords.all.size")) {
keywordType = keywordTypeDao.findByType(KeywordTypeDao.TYPE.REGULAR);
} else if (orderBy.toString().equals("areas.all.size")) {
keywordType = keywordTypeDao.findByType(KeywordTypeDao.TYPE.RESEARCH_AREA);
}
if(sortDirection.toString().equalsIgnoreCase("asc")) {
for(Employee employee : supervisorService.findSupervisorBySQL(keywordType.getName(), "asc")) {
if(!employeeList.contains(employee)) {
employeeList.add(employee);
}
}
} else {
for(Employee employee : supervisorService.findSupervisorBySQL(keywordType.getName(), "desc")) {
if(!employeeList.contains(employee)) {
employeeList.add(employee);
}
}
}
}
private void setUpTable(final Dialog dialog, final WebMarkupContainer tableContainer, final StringBuffer supervisorName) { private void setUpTable(final Dialog dialog, final WebMarkupContainer tableContainer, final StringBuffer supervisorName) {
final StringBuffer sortDirection = new StringBuffer(); final StringBuffer sortDirection = new StringBuffer();
final StringBuffer orderBy = new StringBuffer(); final StringBuffer orderBy = new StringBuffer();
@ -100,38 +122,17 @@ if(!supervisorName.toString().isEmpty()) {
@Override @Override
protected List<Employee> load() { protected List<Employee> load() {
List<Employee> employeeList = new ArrayList<Employee>(); List<Employee> employeeList = new ArrayList<Employee>();
org.springframework.data.domain.Sort sorter;
if(!orderBy.toString().equals("areas.all.size") && !orderBy.toString().equals("keywords.all.size")) { if(!orderBy.toString().equals("areas.all.size") && !orderBy.toString().equals("keywords.all.size")) {
if (sortDirection.toString().isEmpty() || sortDirection.toString().equals("ASC")) { org.springframework.data.domain.Sort sorter;
if (sortDirection.toString().isEmpty() || sortDirection.toString().equalsIgnoreCase("asc")) {
sorter = new org.springframework.data.domain.Sort(org.springframework.data.domain.Sort.Direction.ASC, "user.lastName"); sorter = new org.springframework.data.domain.Sort(org.springframework.data.domain.Sort.Direction.ASC, "user.lastName");
employeeList.addAll(supervisorService.findAllEmployees(sorter)); employeeList.addAll(supervisorService.findAllEmployees(sorter));
} else { } else {
sorter = new org.springframework.data.domain.Sort(org.springframework.data.domain.Sort.Direction.DESC, "user.lastName"); sorter = new org.springframework.data.domain.Sort(org.springframework.data.domain.Sort.Direction.DESC, "user.lastName");
employeeList.addAll(supervisorService.findAllEmployees(sorter)); employeeList.addAll(supervisorService.findAllEmployees(sorter));
} }
} } else {
KeywordType keywordType = keywordTypeDao.findByType(KeywordTypeDao.TYPE.REGULAR); loadEmployeeList(employeeList, orderBy, sortDirection);
if(orderBy.toString().equals("keywords.all.size") || orderBy.toString().equals("areas.all.size")) {
if(orderBy.toString().equals("keywords.all.size")) {
keywordType = keywordTypeDao.findByType(KeywordTypeDao.TYPE.REGULAR);
} else if (orderBy.toString().equals("areas.all.size")) {
keywordType = keywordTypeDao.findByType(KeywordTypeDao.TYPE.RESEARCH_AREA);
}
if(sortDirection.toString().equals("ASC")) {
for(Employee employee : supervisorService.findSupervisorBySQL(keywordType.getName(), "asc")) {
if(!employeeList.contains(employee)) {
employeeList.add(employee);
}
}
} else {
for(Employee employee : supervisorService.findSupervisorBySQL(keywordType.getName(), "desc")) {
if(!employeeList.contains(employee)) {
employeeList.add(employee);
}
}
}
} }
if(supervisorName.toString().isEmpty()) { if(supervisorName.toString().isEmpty()) {
return employeeList; return employeeList;