diff --git a/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/SupervisorServiceImpl.java b/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/SupervisorServiceImpl.java index a48645ec87..3bda1283f7 100644 --- a/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/SupervisorServiceImpl.java +++ b/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/SupervisorServiceImpl.java @@ -1,9 +1,7 @@ package se.su.dsv.scipro.springdata.serviceimpls; import com.mysema.query.jpa.impl.JPAQuery; -import com.mysema.query.types.OrderSpecifier; -import com.mysema.query.types.Predicate; -import com.mysema.query.types.Visitor; +import com.mysema.query.types.*; import com.mysema.query.types.expr.BooleanExpression; import org.hibernate.hql.ast.tree.OrderByClause; import org.springframework.beans.factory.annotation.Autowired; @@ -18,9 +16,8 @@ import se.su.dsv.scipro.springdata.services.SupervisorService; import javax.annotation.Resource; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; -import java.util.Date; -import java.util.List; +import java.util.*; @Service ( "supervisorService" ) @Transactional ( readOnly = true ) @@ -57,7 +54,22 @@ public class SupervisorServiceImpl extends AbstractQueryService<Employee, Long> BooleanExpression isNewEmployee = employee.user.dateCreated.eq(dateCreated); OrderSpecifier<?> order = employee.user.lastName.asc(); return queryDslPredicateExecutor.findAll((lastName).and(isNewEmployee), order); -//return new JPAQuery(em).from(employee).where((lastName).and(isNewEmployee)).orderBy(order).list(employee); } + @Override + public Iterator<Employee> findSupervisorKeywords() { + QEmployee employee = QEmployee.employee; + /* BooleanExpression lastName = employee.user.lastName.eq("Moattar") + .or(employee.user.lastName.eq("Herder") + .or(employee.user.lastName.eq("Larsson")) + .or(employee.user.lastName.eq("Friis")) + .or(employee.user.lastName.eq("Tholerus")) + .or(employee.user.lastName.eq("Hallberg"))); + */ + OrderSpecifier<?> orderBySize = employee.keywords.keywords.size().desc(); +// where(lastName). + BooleanExpression employeeExists = employee.isNotNull(); + return queryDslPredicateExecutor.findAll(employeeExists, orderBySize).iterator(); +//return new JPAQuery(em).from(employee).orderBy(orderBySize).list(employee); + } } diff --git a/src/main/java/se/su/dsv/scipro/springdata/services/SupervisorService.java b/src/main/java/se/su/dsv/scipro/springdata/services/SupervisorService.java index 06d3ef722c..d76bec5c4e 100644 --- a/src/main/java/se/su/dsv/scipro/springdata/services/SupervisorService.java +++ b/src/main/java/se/su/dsv/scipro/springdata/services/SupervisorService.java @@ -2,6 +2,7 @@ package se.su.dsv.scipro.springdata.services; import se.su.dsv.scipro.data.dataobjects.Employee; import java.util.Date; +import java.util.Iterator; import java.util.List; /** @@ -9,7 +10,10 @@ import java.util.List; * date: 2012 03 26 */ public interface SupervisorService extends CrudService<Employee,Long>, QueryService<Employee, Long> { - public List<Employee> findAllEmployees(org.springframework.data.domain.Sort orders); + public //List<Employee> + List<Employee> findAllEmployees(org.springframework.data.domain.Sort orders); public Iterable<Employee> findByUsersName(final Date dateCreated); + + public Iterator<Employee> findSupervisorKeywords(); } 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 230d9f3b80..3f3b762398 100644 --- a/src/test/java/se/su/dsv/scipro/springdata/TestSupervisor.java +++ b/src/test/java/se/su/dsv/scipro/springdata/TestSupervisor.java @@ -1,12 +1,9 @@ package se.su.dsv.scipro.springdata; - -import org.apache.commons.lang.builder.CompareToBuilder; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; import org.springframework.data.domain.Sort; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.ContextConfiguration; @@ -208,4 +205,42 @@ public class TestSupervisor { assertTrue(employeeList.get(0).equals(tholerus)); assertTrue(employeeList.get(1).equals(herder)); } + + + /** + * Test for implementing a supervisorService with Spring Data + */ + @Test + @Transactional + @Rollback + public void findNewSupervisorKeywords() { + List<Employee> employeeList = new ArrayList<Employee>(); + Employee larsson = getEmployee("Ken", "Larsson", "kenlars@dsv.su.se", null); + Employee hallberg = getEmployee("David", "Hallberg", "dhallb@dsv.su.se", null); + Employee tholerus = getEmployee("Torgny", "Tholerus", "torgny@dsv.su.se", null); + Employee herder = getEmployee("Niklas", "Herder", "herder@dsv.su.se", null); + Employee moattar = getEmployee("Golrokh", "Moattar", "goli@dsv.su.se", null); + Employee friis = getEmployee("Fredrik", "Friis", "fre-fri@dsv.su.se", null); + + Keyword keyword = createKeyword(keywordTypeWord, "JUnit", false); + herder.getKeywords().getAll().add(keyword); + keyword = createKeyword(keywordTypeWord, "Maven", false); + herder.getKeywords().getAll().add(keyword); + herder = supervisorService.save(herder); + + keyword = createKeyword(keywordTypeWord, "JUnit", false); + tholerus.getKeywords().getAll().add(keyword); + keyword = createKeyword(keywordTypeWord, "Maven", false); + tholerus.getKeywords().getAll().add(keyword); + keyword = createKeyword(keywordTypeWord, "Java", false); + tholerus.getKeywords().getAll().add(keyword); + tholerus = supervisorService.save(tholerus); + Iterator<Employee> employeeIterator = supervisorService.findSupervisorKeywords(); + while (employeeIterator.hasNext()) { + employeeList.add(employeeIterator.next()); + } + assertFalse(employeeList.isEmpty()); + assertTrue(employeeList.get(0).equals(tholerus)); + assertTrue(employeeList.get(1).equals(herder)); + } }