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:
parent
d0e1e03bcd
commit
d0bbf6df64
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user