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.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
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.AjaxRequestTarget;
|
||||||
import org.apache.wicket.ajax.markup.html.AjaxLink;
|
import org.apache.wicket.ajax.markup.html.AjaxLink;
|
||||||
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
|
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 org.odlabs.wiquery.ui.dialog.Dialog;
|
||||||
|
|
||||||
import se.su.dsv.scipro.data.dataobjects.Employee;
|
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.KeywordTypeDao;
|
||||||
import se.su.dsv.scipro.match.dao.interfaces.SupervisorDao;
|
import se.su.dsv.scipro.match.dao.interfaces.SupervisorDao;
|
||||||
import se.su.dsv.scipro.match.dataobject.Keyword;
|
import se.su.dsv.scipro.match.dataobject.Keyword;
|
||||||
@ -37,6 +41,9 @@ public class AdminSupervisorKeywordPanel extends Panel {
|
|||||||
@SpringBean
|
@SpringBean
|
||||||
private SupervisorService supervisorService;
|
private SupervisorService supervisorService;
|
||||||
|
|
||||||
|
@SpringBean
|
||||||
|
private KeywordTypeDao keywordTypeDao;
|
||||||
|
|
||||||
public AdminSupervisorKeywordPanel(String str) {
|
public AdminSupervisorKeywordPanel(String str) {
|
||||||
super(str);
|
super(str);
|
||||||
Dialog dialog = new Dialog("detailsDialog");
|
Dialog dialog = new Dialog("detailsDialog");
|
||||||
@ -88,39 +95,6 @@ if(!supervisorName.toString().isEmpty()) {
|
|||||||
return employeeList;
|
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) {
|
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();
|
||||||
@ -130,21 +104,43 @@ if(!supervisorName.toString().isEmpty()) {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected List<Employee> load() {
|
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>();
|
List<Employee> employeeList = new ArrayList<Employee>();
|
||||||
employeeList.addAll(supervisorService.findAllEmployees(sorter));
|
org.springframework.data.domain.Sort sorter;
|
||||||
|
|
||||||
if(orderBy.toString().equals("keywords.all.size")) {
|
if(!orderBy.toString().equals("areas.all.size") && !orderBy.toString().equals("keywords.all.size")) {
|
||||||
employeeList = sortEmployeeList(sortDirection, orderBy, employeeList, KeywordTypeDao.TYPE.REGULAR.toDbName());
|
if (sortDirection.toString().isEmpty() || sortDirection.toString().equals("ASC")) {
|
||||||
} else if (orderBy.toString().equals("areas.all.size")) {
|
sorter = new org.springframework.data.domain.Sort(org.springframework.data.domain.Sort.Direction.ASC, "user.lastName");
|
||||||
employeeList = sortEmployeeList(sortDirection, orderBy, employeeList, KeywordTypeDao.TYPE.RESEARCH_AREA.toDbName());
|
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()) {
|
if(supervisorName.toString().isEmpty()) {
|
||||||
return employeeList;
|
return employeeList;
|
||||||
}
|
}
|
||||||
|
@ -47,10 +47,12 @@ public class TestSupervisor {
|
|||||||
|
|
||||||
private KeywordType keywordTypeWord;
|
private KeywordType keywordTypeWord;
|
||||||
|
|
||||||
|
private KeywordType keywordTypeArea;
|
||||||
|
|
||||||
@SuppressWarnings("EmptyMethod")
|
@SuppressWarnings("EmptyMethod")
|
||||||
@Before
|
@Before
|
||||||
public void startTransaction() throws Exception {
|
public void startTransaction() throws Exception {
|
||||||
KeywordType keywordTypeArea = keywordTypeDao.save(new KeywordType("Area"));
|
keywordTypeArea = keywordTypeDao.save(new KeywordType("Area"));
|
||||||
keywordTypeWord = keywordTypeDao.save(new KeywordType("Word"));
|
keywordTypeWord = keywordTypeDao.save(new KeywordType("Word"));
|
||||||
Weights weights = createWeights();
|
Weights weights = createWeights();
|
||||||
}
|
}
|
||||||
@ -251,16 +253,32 @@ public class TestSupervisor {
|
|||||||
keyword = createKeyword(keywordTypeWord, "Java", false);
|
keyword = createKeyword(keywordTypeWord, "Java", false);
|
||||||
tholerus.getKeywords().getAll().add(keyword);
|
tholerus.getKeywords().getAll().add(keyword);
|
||||||
tholerus = supervisorService.save(tholerus);
|
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;
|
QEmployee employee = QEmployee.employee;
|
||||||
OrderSpecifier<?> orderBySize = employee.keywords.keywords.size().desc();
|
OrderSpecifier<?> orderBySize = employee.keywords.keywords.size().desc();
|
||||||
BooleanExpression employeeExists = employee.isNotNull();
|
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(employeeExists, orderBySize)) {
|
for(Employee employee__ : supervisorService.findSupervisorQuery(predicate, orderBySize)) {
|
||||||
employeeList.add(employee__);
|
employeeList.add(employee__);
|
||||||
}
|
}
|
||||||
|
|
||||||
assertFalse(employeeList.isEmpty());
|
assertFalse(employeeList.isEmpty());
|
||||||
assertTrue(employeeList.get(0).equals(tholerus));
|
if(keywordType.equals(KeywordTypeDao.TYPE.REGULAR)) {
|
||||||
assertTrue(employeeList.get(1).equals(herder));
|
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