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 e43d5626a0..486b0e2a09 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 @@ -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; } diff --git a/src/test/java/se/su/dsv/scipro/springdata/TestSupervisor.java b/src/test/java/se/su/dsv/scipro/springdata/TestSupervisor.java index de3303dc3f..1101bf9d40 100644 --- a/src/test/java/se/su/dsv/scipro/springdata/TestSupervisor.java +++ b/src/test/java/se/su/dsv/scipro/springdata/TestSupervisor.java @@ -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)); + } } }