The sorting should preferably be done by the API instead of the application, though this version is not correct yet.

This commit is contained in:
Tom Vahlman 2012-04-09 17:39:30 +02:00
parent d0e1e03bcd
commit d0bbf6df64
2 changed files with 64 additions and 50 deletions
src
main/java/se/su/dsv/scipro/admin/panels/match
test/java/se/su/dsv/scipro/springdata

@ -4,6 +4,9 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import com.mysema.query.types.OrderSpecifier;
import com.mysema.query.types.expr.BooleanExpression;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
@ -21,6 +24,7 @@ import org.apache.wicket.spring.injection.annot.SpringBean;
import org.odlabs.wiquery.ui.dialog.Dialog;
import se.su.dsv.scipro.data.dataobjects.Employee;
import se.su.dsv.scipro.data.dataobjects.QEmployee;
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;
@ -37,6 +41,9 @@ public class AdminSupervisorKeywordPanel extends Panel {
@SpringBean
private SupervisorService supervisorService;
@SpringBean
private KeywordTypeDao keywordTypeDao;
public AdminSupervisorKeywordPanel(String str) {
super(str);
Dialog dialog = new Dialog("detailsDialog");
@ -88,39 +95,6 @@ if(!supervisorName.toString().isEmpty()) {
return 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().getFiltered(keywordType).size() > o2.getKeywords().getFiltered(keywordType).size()) {
return -1;
} else if (o2.getKeywords().getFiltered(keywordType).size() > o1.getKeywords().getFiltered(keywordType).size()) {
return 1;
} else {
return 0;
}
}
});
} else if (orderBy.toString().equals("keywords.all.size") && sortDirection.toString().equals("DESC")) {
Collections.sort(employeeList, new Comparator<Employee>() {
@Override
public int compare(Employee o1, Employee o2) {
if (o1.getKeywords().getFiltered(keywordType).size() > o2.getKeywords().getFiltered(keywordType).size()) {
return 1;
} else if (o2.getKeywords().getFiltered(keywordType).size() > o1.getKeywords().getFiltered(keywordType).size()) {
return -1;
} else {
return 0;
}
}
});
}
return employeeList;
}
private void setUpTable(final Dialog dialog, final WebMarkupContainer tableContainer, final StringBuffer supervisorName) {
final StringBuffer sortDirection = new StringBuffer();
final StringBuffer orderBy = new StringBuffer();
@ -130,21 +104,43 @@ if(!supervisorName.toString().isEmpty()) {
@Override
protected List<Employee> load() {
org.springframework.data.domain.Sort sorter;
if (sortDirection.toString().isEmpty() || sortDirection.toString().equals("ASC")) {
sorter = new org.springframework.data.domain.Sort(org.springframework.data.domain.Sort.Direction.ASC, "user.lastName");
} else {
sorter = new org.springframework.data.domain.Sort(org.springframework.data.domain.Sort.Direction.DESC, "user.lastName");
}
List<Employee> employeeList = new ArrayList<Employee>();
employeeList.addAll(supervisorService.findAllEmployees(sorter));
org.springframework.data.domain.Sort sorter;
if(orderBy.toString().equals("keywords.all.size")) {
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(!orderBy.toString().equals("areas.all.size") && !orderBy.toString().equals("keywords.all.size")) {
if (sortDirection.toString().isEmpty() || sortDirection.toString().equals("ASC")) {
sorter = new org.springframework.data.domain.Sort(org.springframework.data.domain.Sort.Direction.ASC, "user.lastName");
employeeList.addAll(supervisorService.findAllEmployees(sorter));
} else {
sorter = new org.springframework.data.domain.Sort(org.springframework.data.domain.Sort.Direction.DESC, "user.lastName");
employeeList.addAll(supervisorService.findAllEmployees(sorter));
}
}
QEmployee employee = QEmployee.employee;
OrderSpecifier<?> orderBySize = employee.keywords.keywords.size().asc();
KeywordType keywordType = keywordTypeDao.findByType(KeywordTypeDao.TYPE.REGULAR);
if(orderBy.toString().equals("keywords.all.size") || orderBy.toString().equals("areas.all.size")) {
if(sortDirection.toString().equals("ASC")) {
orderBySize = employee.keywords.keywords.size().asc();
} else {
orderBySize = employee.keywords.keywords.size().desc();
}
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);
}
// DETTA funkar inte den kollar om det finns något element i listan av den aktuella typen!!!!!!
BooleanExpression keywordsHasCorrectType = employee.isNotNull().and(employee.keywords.keywords.any().type.eq(keywordType));
for(Employee employee__ : supervisorService.findSupervisorQuery(keywordsHasCorrectType, orderBySize)) {
employeeList.add(employee__);
}
}
if(supervisorName.toString().isEmpty()) {
return employeeList;
}

@ -47,10 +47,12 @@ public class TestSupervisor {
private KeywordType keywordTypeWord;
private KeywordType keywordTypeArea;
@SuppressWarnings("EmptyMethod")
@Before
public void startTransaction() throws Exception {
KeywordType keywordTypeArea = keywordTypeDao.save(new KeywordType("Area"));
keywordTypeArea = keywordTypeDao.save(new KeywordType("Area"));
keywordTypeWord = keywordTypeDao.save(new KeywordType("Word"));
Weights weights = createWeights();
}
@ -251,16 +253,32 @@ public class TestSupervisor {
keyword = createKeyword(keywordTypeWord, "Java", false);
tholerus.getKeywords().getAll().add(keyword);
tholerus = supervisorService.save(tholerus);
keyword = createKeyword(keywordTypeArea, "Area1", false);
larsson.getKeywords().getAll().add(keyword);
keyword = createKeyword(keywordTypeArea, "Area2", false);
larsson.getKeywords().getAll().add(keyword);
larsson = supervisorService.save(larsson);
keyword = createKeyword(keywordTypeArea, "Area3", false);
larsson.getKeywords().getAll().add(keyword);
hallberg = supervisorService.save(hallberg);
QEmployee employee = QEmployee.employee;
OrderSpecifier<?> orderBySize = employee.keywords.keywords.size().desc();
BooleanExpression employeeExists = employee.isNotNull();
for(Employee employee__ : supervisorService.findSupervisorQuery(employeeExists, orderBySize)) {
KeywordType keywordType = keywordTypeDao.findByType(KeywordTypeDao.TYPE.RESEARCH_AREA);
BooleanExpression predicate = employee.isNotNull().and(employee.keywords.keywords.any().type.eq(keywordType));
for(Employee employee__ : supervisorService.findSupervisorQuery(predicate, orderBySize)) {
employeeList.add(employee__);
}
assertFalse(employeeList.isEmpty());
assertTrue(employeeList.get(0).equals(tholerus));
assertTrue(employeeList.get(1).equals(herder));
if(keywordType.equals(KeywordTypeDao.TYPE.REGULAR)) {
assertTrue(employeeList.get(0).equals(tholerus));
assertTrue(employeeList.get(1).equals(herder));
} else if(keywordType.equals(KeywordTypeDao.TYPE.RESEARCH_AREA)){
assertTrue(employeeList.get(0).equals(larsson));
assertTrue(employeeList.get(1).equals(hallberg));
}
}
}