Merge branch 'develop' of ssh://git.dsv.su.se/git/scipro/scipro into develop

This commit is contained in:
Fredrik Friis 2012-04-13 22:03:20 +09:00
commit 3ad8621ae9
6 changed files with 283 additions and 127 deletions
src
main/java/se/su/dsv/scipro
test/java/se/su/dsv/scipro/springdata

@ -10,10 +10,11 @@
This page contains a list of all supervisors with number of research areas and keywords attached to them.
You may filter the list by searching for name of supervisor. Click on the supervisors name to see which research areas and keywords that is attached.
</div>
<form wicket:id="filterForm">
<label for="supervisorField">Filter using supervisor name:</label><br />
<input style="width:300px;" wicket:id="supervisorField" type="text" />
<input type="submit" wicket:id="filterButton" value="Filter"/>
<label for="autoComplete">Filter using supervisor name:</label><br />
<input wicket:id="autoComplete" /><br />
<form wicket:id="showAllForm">
<div><button wicket:id="showAllButton">Show all</button></div>
</form>
<table wicket:id="table" class="rounded-corner">
<thead>

@ -9,21 +9,21 @@ import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.EmptyPanel;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.odlabs.wiquery.ui.dialog.Dialog;
import org.springframework.data.domain.Sort;
import se.su.dsv.scipro.data.dataobjects.Employee;
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;
import se.su.dsv.scipro.match.dataobject.KeywordType;
import se.su.dsv.scipro.reusable.EmployeeAutoComplete;
import se.su.dsv.scipro.springdata.services.SupervisorService;
public class AdminSupervisorKeywordPanel extends Panel {
@ -31,7 +31,7 @@ public class AdminSupervisorKeywordPanel extends Panel {
private static final long serialVersionUID = -6390936928562430893L;
@SpringBean
private SupervisorDao supervisorDao;
private SupervisorDao supervisorDao;
@SpringBean
private SupervisorService supervisorService;
@ -39,57 +39,60 @@ public class AdminSupervisorKeywordPanel extends Panel {
@SpringBean
private KeywordTypeDao keywordTypeDao;
public AdminSupervisorKeywordPanel(String str) {
super(str);
public AdminSupervisorKeywordPanel(String str) {
super(str);
Dialog dialog = new Dialog("detailsDialog");
setUpDialog(dialog);
WebMarkupContainer tableContainer = new WebMarkupContainer("table");
TextField<String> supervisorField = new TextField<String>("supervisorField", new Model<String>());
StringBuffer supervisorName = new StringBuffer();
add(new FilterForm(tableContainer, supervisorField, supervisorName));
setUpTable(dialog, tableContainer, supervisorName);
final WebMarkupContainer tableContainer = new WebMarkupContainer("table");
final EmployeeAutoComplete autoCompleteObjectField = createDsvAutocompleteComponent(tableContainer);
add(autoCompleteObjectField.setOutputMarkupId(true));
add(new Form<Void>("showAllForm").add(createShowAllButton(tableContainer, autoCompleteObjectField)));
setUpTable(dialog, tableContainer, autoCompleteObjectField);
}
private void setUpDialog(Dialog dialog) {
dialog.setModal(true);
dialog.setAutoOpen(false);
dialog.setWidth(500);
dialog.setHeight(400);
dialog.setTitle("Supervisor details");
dialog.add(new EmptyPanel("dialogContent"));
add(dialog.setOutputMarkupId(true));
}
private EmployeeAutoComplete createDsvAutocompleteComponent(final WebMarkupContainer tableContainer) {
return new EmployeeAutoComplete("autoComplete") {
private static final long serialVersionUID = 8758471618644888953L;
private void getSortOrder(StringBuffer sortDirection, StringBuffer orderBy__, String orderBy, final StringBuffer supervisorName) {
if(!supervisorName.toString().isEmpty()) {
String addToSearch = "true";
}
if ((sortDirection.toString().isEmpty() && !orderBy.equals("keywords.all.size")) || sortDirection.toString().equalsIgnoreCase("asc")) {
sortDirection.delete(0, sortDirection.length());
sortDirection.append("desc");
} else {
sortDirection.delete(0, sortDirection.length());
sortDirection.append("asc");
}
orderBy__.delete(0, orderBy__.length());
orderBy__.append(orderBy);
}
private List<Employee> addEmployeesToList(final StringBuffer supervisorName, List<Employee> employeeList) {
List<Employee> employeeListName = new ArrayList<Employee>();
for(Employee employee : employeeList) {
if(employee.getNameAsString().equals(supervisorName.toString())) {
employeeListName.add(employee);
@Override
public void action(AjaxRequestTarget pTarget, Employee newSelection) {
pTarget.addComponent(tableContainer);
}
}
if(!employeeListName.isEmpty()) {
return employeeListName;
}
return employeeList;
};
}
private void loadEmployeeList(List<Employee> employeeList, StringBuffer orderBy, StringBuffer sortDirection) {
private AjaxButton createShowAllButton(final WebMarkupContainer tableContainer, final EmployeeAutoComplete autoCompleteObjectField) {
return new AjaxButton("showAllButton") { //button to click for performing overriden method
private static final long serialVersionUID = 1L;
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
List<Employee> employeeList = new ArrayList<Employee>();
employeeList.addAll(supervisorService.findAllEmployees(new Sort(Sort.Direction.ASC, "user.lastName")));
tableContainer.get("supervisorList").setDefaultModelObject(employeeList);
autoCompleteObjectField.setDefaultModelObject(null);
autoCompleteObjectField.clearInput();
target.addComponent(tableContainer);
target.addComponent(autoCompleteObjectField);
}
};
}
private void setUpDialog(Dialog dialog) {
dialog.setModal(true);
dialog.setAutoOpen(false);
dialog.setWidth(500);
dialog.setHeight(400);
dialog.setTitle("Supervisor details");
dialog.add(new EmptyPanel("dialogContent"));
add(dialog.setOutputMarkupId(true));
}
private void changeOrderBy(StringBuffer orderBy, String newOrderBy) {
orderBy.delete(0, orderBy.length());
orderBy.append(newOrderBy);
}
private void loadEmployeeList(List<Employee> employeeList, StringBuffer orderBy, StringBuffer sortDirection, StringBuffer previousOrderBy) {
KeywordType keywordType = keywordTypeDao.findByType(KeywordTypeDao.TYPE.REGULAR);
if(orderBy.toString().equals("keywords.all.size")) {
keywordType = keywordTypeDao.findByType(KeywordTypeDao.TYPE.REGULAR);
@ -97,24 +100,46 @@ if(!supervisorName.toString().isEmpty()) {
keywordType = keywordTypeDao.findByType(KeywordTypeDao.TYPE.RESEARCH_AREA);
}
if(!orderBy.toString().equalsIgnoreCase(previousOrderBy.toString())) { // the direction should always be desc for numbers when there is a new sort term
sortDirection.delete(0, sortDirection.length());
sortDirection.append("desc");
}
if(sortDirection.toString().equalsIgnoreCase("asc")) {
for(Employee employee : supervisorService.findSupervisorDescDirection(keywordType.getName())) {
for(Employee employee : supervisorService.findSupervisorBySQL(keywordType.getName(), "asc")) {
if(!employeeList.contains(employee)) {
employeeList.add(employee);
}
}
} else {
for(Employee employee : supervisorService.findSupervisorDescDirection(keywordType.getName())) {
} else if(sortDirection.toString().equalsIgnoreCase("desc")) {
for(Employee employee : supervisorService.findSupervisorBySQL(keywordType.getName(), "desc")) {
if(!employeeList.contains(employee)) {
employeeList.add(employee);
}
}
}
changePreviousOrderBy(previousOrderBy, orderBy);
if(sortDirection.toString().equalsIgnoreCase("asc")) {
changeSortDirection(sortDirection, "desc");
} else if(sortDirection.toString().equalsIgnoreCase("desc")) {
changeSortDirection(sortDirection, "asc");
}
}
private void setUpTable(final Dialog dialog, final WebMarkupContainer tableContainer, final StringBuffer supervisorName) {
private void changeSortDirection(StringBuffer sortDirection, String direction) {
sortDirection.delete(0, sortDirection.length());
sortDirection.append(direction);
}
private void changePreviousOrderBy(StringBuffer previousOrderBy, StringBuffer orderBy) {
previousOrderBy.delete(0, previousOrderBy.length());
previousOrderBy.append(orderBy.toString());
}
private void setUpTable(final Dialog dialog, final WebMarkupContainer tableContainer, final EmployeeAutoComplete autoCompleteObjectField) {
final StringBuffer sortDirection = new StringBuffer();
final StringBuffer orderBy = new StringBuffer();
final StringBuffer previousOrderBy = new StringBuffer();
final ListView<Employee> dataView = new ListView<Employee>("supervisorList", new LoadableDetachableModel<List<Employee>>() {
private static final long serialVersionUID = -2395796971679213814L;
@ -122,25 +147,28 @@ if(!supervisorName.toString().isEmpty()) {
@Override
protected List<Employee> load() {
List<Employee> employeeList = new ArrayList<Employee>();
if(!orderBy.toString().equals("areas.all.size") && !orderBy.toString().equals("keywords.all.size")) {
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");
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));
}
} else {
loadEmployeeList(employeeList, orderBy, sortDirection);
}
if(supervisorName.toString().isEmpty()) {
if(autoCompleteObjectField.getDefaultModelObject() != null) {
employeeList.add((Employee) autoCompleteObjectField.getDefaultModelObject());
return employeeList;
} else if (orderBy.toString().isEmpty()) {
employeeList.addAll(supervisorService.findAllEmployees(new Sort(Sort.Direction.ASC, "user.lastName"))); // the direction should always be asc for characters when there is a new sort term
changeSortDirection(sortDirection, "desc");
previousOrderBy.append("user.lastName");
} else if (orderBy.toString().equals("user.lastName")) { // if there has been a previous search and the search term was different than the present search term or direction should be asc
if((!previousOrderBy.toString().isEmpty() && !previousOrderBy.toString().equals(orderBy.toString())) || sortDirection.toString().equalsIgnoreCase("asc")) {
employeeList.addAll(supervisorService.findAllEmployees(new Sort(Sort.Direction.ASC, "user.lastName")));
changeSortDirection(sortDirection, "desc");
} else if(sortDirection.toString().equalsIgnoreCase("desc")){
employeeList.addAll(supervisorService.findAllEmployees(new Sort(Sort.Direction.DESC, "user.lastName")));
changeSortDirection(sortDirection, "asc");
}
changePreviousOrderBy(previousOrderBy, orderBy);
} else {
loadEmployeeList(employeeList, orderBy, sortDirection, previousOrderBy);
}
return addEmployeesToList(supervisorName, employeeList);
return employeeList;
}
}) {
private static final long serialVersionUID = 3572766096237883198L;
@Override
@ -149,9 +177,7 @@ if(!supervisorName.toString().isEmpty()) {
List<Keyword> areaKeywords = supervisor.getKeywords().getFiltered(KeywordTypeDao.TYPE.RESEARCH_AREA.toDbName());
List<Keyword> regularKeywords = supervisor.getKeywords().getFiltered(KeywordTypeDao.TYPE.REGULAR.toDbName());
final AjaxLink<Void> detailsLink = new AjaxLink<Void>("detailsLink") {
private static final long serialVersionUID = 8902222410746133732L;
@Override
public void onClick(AjaxRequestTarget target) {
target.addComponent(dialog);
@ -172,15 +198,15 @@ if(!supervisorName.toString().isEmpty()) {
}
};
final AjaxLink<Void> nameSortLink = new AjaxLink<Void>("nameSortLink") {
private static final long serialVersionUID = -6459164267551936706L;
@Override
public void onClick(AjaxRequestTarget target) {
getSortOrder(sortDirection, orderBy, "user.lastName", supervisorName);
final AjaxLink<Void> nameSortLink = new AjaxLink<Void>("nameSortLink") {
private static final long serialVersionUID = -6459164267551936706L;
@Override
public void onClick(AjaxRequestTarget target) {
changeOrderBy(orderBy, "user.lastName");
target.addComponent(tableContainer);
}
};
tableContainer.add(nameSortLink);
}
};
tableContainer.add(nameSortLink);
final AjaxLink<Void> numberOfAreasSortLink = new AjaxLink<Void>("numberOfAreasSortLink") {
@ -188,7 +214,7 @@ if(!supervisorName.toString().isEmpty()) {
@Override
public void onClick(AjaxRequestTarget target) {
getSortOrder(sortDirection, orderBy, "areas.all.size", supervisorName);
changeOrderBy(orderBy, "areas.all.size");
target.addComponent(tableContainer);
}
};
@ -200,35 +226,12 @@ if(!supervisorName.toString().isEmpty()) {
@Override
public void onClick(AjaxRequestTarget target) {
getSortOrder(sortDirection, orderBy, "keywords.all.size", supervisorName);
changeOrderBy(orderBy, "keywords.all.size");
target.addComponent(tableContainer);
}
};
tableContainer.add(numberOfRegularsSortLink);
tableContainer.add(dataView);
add(tableContainer.setOutputMarkupId(true));
}
private class FilterForm extends Form<Void> {
private static final long serialVersionUID = 3488715734113880308L;
public FilterForm(final WebMarkupContainer tableContainer, final TextField<String> supervisorField, final StringBuffer supervisorName) {
super("filterForm");
AjaxButton filterButton = new AjaxButton("filterButton") {
private static final long serialVersionUID = -8216928567709372986L;
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
supervisorName.append(supervisorField.getModelObject());
target.addComponent(tableContainer);
}
};
add(supervisorField);
add(filterButton);
}
}
tableContainer.add(dataView);
add(tableContainer.setOutputMarkupId(true));
}
}

@ -1,5 +1,6 @@
package se.su.dsv.scipro.springdata.repos;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
@ -15,13 +16,49 @@ import java.util.List;
*/
@Transactional ( readOnly = true )
public interface SupervisorRepo extends JpaRepository<Employee, Long>, QueryDslPredicateExecutor<Employee> {
// select employeeFull from Employee employeeFull where employeeFull.id in (
@Query ("select employee.id " +
"from Employee employee " +
"join employee.keywords.keywords keywords " +
"where keywords.type.name = :keywordTypeName " +
"group by employee.id " +
"order by size(employee.keywords.keywords) desc ")
public List<Long> findSupervisorsOrderedByNumKeywordsDescending(
@Param("keywordTypeName")
String keywordTypeName);
@Query ( "select employee from Employee employee left outer join employee.keywords.keywords keywords " +
"where (size(employee.keywords.keywords) = 0 or (keywords.type.name = :keywordTypeName and keywords.deleted = false)) " +
"order by size(employee.keywords.keywords) desc, employee.user.lastName" )
public List<Employee> findSupervisorDescDirection(
@Param ( "keywordTypeName" )
String keywordTypeName);
// hämtar employees med keywords där typen är type name... men en employee kan ha keywords av flera olika type names
@Query ("select employee.id " +
"from Employee employee " +
"join employee.keywords.keywords keywords " +
"where keywords.type.name = :keywordTypeName " +
"group by employee.id " +
//"order by size(employee.keywords.keywords) asc ")
"order by size(employee.keywords.keywords) asc ")
// sum(keywords.type.name = :keywordTypeName)
/*@Query ("select employeeFull from Employee employeeFull where employeeFull.id in (" +
"select employee.id from Employee employee inner join employee.keywords.keywords keywords " +
"where keywords.type.name = :keywordTypeName " + //and keywords.deleted = false and employee.deleted = false)) " +
"group by employee.id " +
"order by size(employeeFull.keywords.keywords) asc)")*/
//"CASE ':ascending' WHEN 'true' THEN (size(employeeFull.keywords.keywords) asc " +
//"ELSE size(employeeFull.keywords.keywords) desc END" +
//"ELSE employeeFull.keywords.keywords.size desc " +
//"END"
public List<Long> findSupervisorsOrderedByNumKeywordsAscending(
@Param("keywordTypeName")
String keywordTypeName);
/* public List<Employee> findSupervisorsOrderedByNumKeywords(String keywordTypeName, Boolean asc) {
switch (asc) {
case Direction.ASC:
return findSupervisorsOrderedByNumKeywordsAscending(keywordTypeName);
case Direction.DESC:
default:
return findSupervisorsOrderedByNumKeywordsAscending(keywordTypeName);
}
return findSupervisorsOrderedByNumKeywordsAscending(keywordTypeName);
}*/
}

@ -2,6 +2,7 @@ package se.su.dsv.scipro.springdata.serviceimpls;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import se.su.dsv.scipro.data.dataobjects.Employee;
@ -37,17 +38,55 @@ public class SupervisorServiceImpl extends AbstractQueryService<Employee, Long>
@Override
public List<Employee> findAllEmployees(org.springframework.data.domain.Sort orders) {
return supervisorRepo.findAll(orders);
return supervisorRepo.findAll(orders); // 218 st
}
/* @Override
public List<Employee> findSupervisorsOrderedByNumKeywords(String keywordTypeName, Sort.Direction sortDirection) {
return supervisorRepo.findSupervisorsOrderedByNumKeywords(keywordTypeName, sortDirection);
}*/
@Override
public List<Employee> findSupervisorsOrderedByNumKeywordsDescending(String keywordTypeName) {
List<Long> employeeIDs = new ArrayList<Long>();
employeeIDs.addAll(supervisorRepo.findSupervisorsOrderedByNumKeywordsDescending(keywordTypeName));
return loadEmployeeList(employeeIDs);
}
@Override
public List<Employee> findSupervisorDescDirection(String keywordTypeName) {
return supervisorRepo.findSupervisorDescDirection(keywordTypeName);
public List<Employee> findSupervisorsOrderedByNumKeywordsAscending(String keywordTypeName) {
List<Long> employeeIDs = new ArrayList<Long>();
employeeIDs.addAll(supervisorRepo.findSupervisorsOrderedByNumKeywordsAscending(keywordTypeName));
return loadEmployeeList(employeeIDs);
}
private List<Employee> loadEmployeeList(List<Long> employeeIDs) {
List<Employee> employeeList = new ArrayList<Employee>();
for (Long employeeID : employeeIDs) {
Employee employee = (Employee) em.createQuery("from Employee employee where employee.id = " + employeeID).getResultList().get(0);
if(employee != null && !employeeList.contains(employee)) {
employeeList.add(employee);
}
}
return employeeList;
}
@Override
public List<Employee> findSupervisorBySQL(String keywordTypeName, String direction) {
List<Employee> employeeList = new ArrayList<Employee>();
if(direction.equalsIgnoreCase("desc")) {
employeeList.addAll(getEmployeesThatHaveKeywords(keywordTypeName, direction));
employeeList.addAll(getEmployeesWithoutKeywords());
} else {
employeeList.addAll(getEmployeesWithoutKeywords());
employeeList.addAll(getEmployeesThatHaveKeywords(keywordTypeName, direction));
}
return employeeList; // totalt 129 st för regular men 156 st för area och 218 för last name (vilken innehåller både keywords Area och Regular)
}
private List<Employee> getEmployeesThatHaveKeywords(String keywordTypeName, String direction) {
List<Employee> employeeList = new ArrayList<Employee>();
String nativeSQL = "select " +
"role.id " +
"from " +
@ -66,23 +105,41 @@ public class SupervisorServiceImpl extends AbstractQueryService<Employee, Long>
"role_id " +
"order by " +
"count(keywords_id) " + direction + ", user.lastName asc ";
return runQueryAddToList(employeeList, nativeSQL);
}
private List<Employee> getEmployeesWithoutKeywords() {
List<Employee> employeeList = new ArrayList<Employee>();
String nativeSQL = "select " +
"role.id " +
"from " +
"role role, " +
"user user " +
"where " +
"role.rolename = 'Employee' and " +
"user.id = role.user_id and not exists " +
"(select " +
"1 " +
"from " +
"Employee_Keyword ek " +
"where " +
"ek.role_id = role.id) " +
"order by " +
"user.lastName asc ";
return runQueryAddToList(employeeList, nativeSQL);
}
private List<Employee> runQueryAddToList(List<Employee> employeeList, final String nativeSQL) {
List<BigInteger> dBlist= new ArrayList<BigInteger>();
//noinspection unchecked
dBlist.addAll(em.createNativeQuery(nativeSQL).getResultList());
List<Long> employeeIDs = new ArrayList<Long>();
for (BigInteger number : dBlist) {
employeeIDs.add(number.longValue());
}
List<Employee> employeeList = new ArrayList<Employee>();
for(Long employeeID : employeeIDs) {
Employee employee = (Employee) em.createQuery("from Employee employee where employee.id = " + employeeID).getResultList().get(0);
Employee employee = (Employee) em.createQuery("from Employee employee where employee.id = " + number.longValue()).getResultList().get(0);
if(employee != null && !employeeList.contains(employee)) {
employeeList.add(employee);
}
}
return employeeList;
return employeeList; // 36 st + 93 st
}
}

@ -1,11 +1,13 @@
package se.su.dsv.scipro.springdata.services;
import org.springframework.data.domain.Sort;
import se.su.dsv.scipro.data.dataobjects.Employee;
import javax.persistence.EntityManager;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.springframework.data.domain.Sort.Direction;
/**
* fred-fri
@ -14,7 +16,11 @@ import java.util.List;
public interface SupervisorService extends CrudService<Employee,Long>, QueryService<Employee, Long> {
public List<Employee> findAllEmployees(org.springframework.data.domain.Sort orders);
public List<Employee> findSupervisorDescDirection(String keywordTypeName);
public List<Employee> findSupervisorsOrderedByNumKeywordsDescending(String keywordTypeName);
public List<Employee> findSupervisorsOrderedByNumKeywordsAscending(String keywordTypeName);
// public List<Employee> findSupervisorsOrderedByNumKeywords(String keywordTypeName, Sort.Direction sortDirection);
public List<Employee> findSupervisorBySQL(String keywordTypeName, String sortOrder);
}

@ -140,7 +140,7 @@ public class TestSupervisor {
createAndAddKeyword(larsson, keywordTypeArea, "Area2");
createAndAddKeyword(larsson, keywordTypeArea, "Area3");
for(Employee employee : supervisorService.findSupervisorDescDirection(keywordTypeArea.getName())) {
for(Employee employee : supervisorService.findSupervisorsOrderedByNumKeywordsDescending(keywordTypeArea.getName())) {
if(!employeeList.contains(employee)) {
employeeList.add(employee);
}
@ -186,4 +186,56 @@ public class TestSupervisor {
assertTrue(employeeList.get(0).equals(herder));
assertTrue(employeeList.get(1).equals(tholerus));*/
}
@Test
@Transactional
@Rollback
public void testFindSupervisorsOrderedByNumKeywordsDescending() {
Employee tholerus = getEmployee("Torgny", "Tholerus", "torgny@dsv.su.se");
Employee vahlman = getEmployee("Tom", "Vahlman", "tom@dsv.su.se");
Employee gomes = getEmployee("Anton", "Gomes", "anton@dsv.su.se");
createAndAddKeyword(vahlman, keywordTypeArea, "Information systems");
createAndAddKeyword(tholerus, keywordTypeArea, "IT for health");
createAndAddKeyword(tholerus, keywordTypeArea, "IT for learning");
createAndAddKeyword(gomes, keywordTypeWord, "Online gaming communities");
List<Employee> employeeList = supervisorService.findSupervisorsOrderedByNumKeywordsDescending(KeywordTypeDao.TYPE.RESEARCH_AREA.toDbName());
assertFalse(employeeList.isEmpty());
assertTrue(employeeList.size() == 2);
assertFalse(employeeList.contains(gomes));
assertTrue(employeeList.get(0).equals(tholerus));
createAndAddKeyword(vahlman, keywordTypeArea, "IT for health");
createAndAddKeyword(vahlman, keywordTypeArea, "Aprikoskärnor");
employeeList = supervisorService.findSupervisorsOrderedByNumKeywordsDescending(KeywordTypeDao.TYPE.RESEARCH_AREA.toDbName());
assertTrue(employeeList.get(0).equals(vahlman));
}
@Test
@Transactional
@Rollback
public void testFindSupervisorsOrderedByNumKeywordsAscending() {
Employee tholerus = getEmployee("Torgny", "Tholerus", "torgny@dsv.su.se");
Employee vahlman = getEmployee("Tom", "Vahlman", "tom@dsv.su.se");
Employee gomes = getEmployee("Anton", "Gomes", "anton@dsv.su.se");
createAndAddKeyword(vahlman, keywordTypeArea, "Information systems");
createAndAddKeyword(tholerus, keywordTypeArea, "IT for health");
createAndAddKeyword(tholerus, keywordTypeArea, "IT for learning");
createAndAddKeyword(gomes, keywordTypeWord, "Online gaming communities");
List<Employee> employeeList = supervisorService.findSupervisorsOrderedByNumKeywordsAscending(KeywordTypeDao.TYPE.RESEARCH_AREA.toDbName());
assertFalse(employeeList.isEmpty());
assertTrue(employeeList.size() == 2);
assertFalse(employeeList.contains(gomes));
assertTrue(employeeList.get(1).equals(tholerus));
createAndAddKeyword(vahlman, keywordTypeArea, "IT for health");
createAndAddKeyword(vahlman, keywordTypeArea, "Aprikoskärnor");
employeeList = supervisorService.findSupervisorsOrderedByNumKeywordsAscending(KeywordTypeDao.TYPE.RESEARCH_AREA.toDbName());
assertTrue(employeeList.get(0).equals(tholerus));
}
}