TSK-1443: Implemented an option to order the result of the TaskQuery by the Workbasket-Name.
This commit is contained in:
parent
6133b66059
commit
0c084dc3d8
|
@ -848,6 +848,15 @@ public interface TaskQuery extends BaseQuery<TaskSummary, TaskQueryColumnName> {
|
|||
*/
|
||||
TaskQuery orderByWorkbasketId(SortDirection sortDirection);
|
||||
|
||||
/**
|
||||
* This method sorts the query result according to the workbasket-Name of the tasks.
|
||||
*
|
||||
* @param sortDirection Determines whether the result is sorted in ascending or descending order.
|
||||
* If sortDirection is null, the result is sorted in ascending order
|
||||
* @return the query
|
||||
*/
|
||||
TaskQuery orderByWorkbasketName(SortDirection sortDirection);
|
||||
|
||||
/**
|
||||
* This method sorts the query result according to the attachment classification key. (Should only
|
||||
* be used if there is one attachment per task in other case the result would be wrong.)
|
||||
|
|
|
@ -158,6 +158,7 @@ public class TaskQueryImpl implements TaskQuery {
|
|||
private boolean addAttachmentColumnsToSelectClauseForOrdering = false;
|
||||
private boolean addClassificationNameToSelectClauseForOrdering = false;
|
||||
private boolean addAttachmentClassificationNameToSelectClauseForOrdering = false;
|
||||
private boolean addWorkbasketNameForOrdering = false;
|
||||
|
||||
TaskQueryImpl(InternalTaskanaEngine taskanaEngine) {
|
||||
this.taskanaEngine = taskanaEngine;
|
||||
|
@ -851,6 +852,14 @@ public class TaskQueryImpl implements TaskQuery {
|
|||
return addOrderCriteria("WORKBASKET_ID", sortDirection);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TaskQuery orderByWorkbasketName(SortDirection sortDirection) {
|
||||
addWorkbasketNameForOrdering = true;
|
||||
return DB.DB2.dbProductId.equals(getDatabaseId())
|
||||
? addOrderCriteria("WNAME", sortDirection)
|
||||
: addOrderCriteria("w.NAME", sortDirection);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TaskQuery orderByAttachmentClassificationKey(SortDirection sortDirection) {
|
||||
joinWithAttachments = true;
|
||||
|
|
|
@ -27,6 +27,9 @@ public interface TaskQueryMapper {
|
|||
+ "<if test=\"addAttachmentClassificationNameToSelectClauseForOrdering\">"
|
||||
+ ", ac.NAME "
|
||||
+ "</if>"
|
||||
+ "<if test=\"addWorkbasketNameForOrdering\">"
|
||||
+ ", w.NAME "
|
||||
+ "</if>"
|
||||
+ "FROM TASK t "
|
||||
+ "<if test=\"joinWithAttachments\">"
|
||||
+ "LEFT JOIN ATTACHMENT AS a ON t.ID = a.TASK_ID "
|
||||
|
@ -37,6 +40,9 @@ public interface TaskQueryMapper {
|
|||
+ "<if test=\"joinWithAttachmentClassifications\">"
|
||||
+ "LEFT JOIN CLASSIFICATION AS ac ON a.CLASSIFICATION_ID = ac.ID "
|
||||
+ "</if>"
|
||||
+ "<if test=\"addWorkbasketNameForOrdering\">"
|
||||
+ "LEFT JOIN WORKBASKET AS w ON t.WORKBASKET_ID = w.ID "
|
||||
+ "</if>"
|
||||
+ "<where>"
|
||||
+ "<if test='accessIdIn != null'> "
|
||||
+ "AND t.WORKBASKET_ID IN ( "
|
||||
|
@ -217,6 +223,9 @@ public interface TaskQueryMapper {
|
|||
+ "<if test=\"addAttachmentClassificationNameToSelectClauseForOrdering\">"
|
||||
+ ", ACNAME "
|
||||
+ "</if>"
|
||||
+ "<if test=\"addWorkbasketNameForOrdering\">"
|
||||
+ ", WNAME "
|
||||
+ "</if>"
|
||||
+ " ) "
|
||||
+ " AS (SELECT <if test=\"useDistinctKeyword\">DISTINCT</if> t.ID, t.EXTERNAL_ID, t.CREATED, t.CLAIMED, t.COMPLETED, t.MODIFIED, t.PLANNED, t.DUE, t.NAME, t.CREATOR, t.DESCRIPTION, t.NOTE, t.PRIORITY, t.STATE, t.CLASSIFICATION_KEY, "
|
||||
+ " t.CLASSIFICATION_CATEGORY, t.CLASSIFICATION_ID, t.WORKBASKET_ID, t.DOMAIN, t.WORKBASKET_KEY, t.BUSINESS_PROCESS_ID, t.PARENT_BUSINESS_PROCESS_ID, t.OWNER, "
|
||||
|
@ -231,6 +240,9 @@ public interface TaskQueryMapper {
|
|||
+ "<if test=\"addAttachmentClassificationNameToSelectClauseForOrdering\">"
|
||||
+ ", ac.NAME "
|
||||
+ "</if>"
|
||||
+ "<if test=\"addWorkbasketNameForOrdering\">"
|
||||
+ ", w.NAME "
|
||||
+ "</if>"
|
||||
+ " FROM TASK t "
|
||||
+ "<if test=\"joinWithAttachments\">"
|
||||
+ "LEFT JOIN ATTACHMENT a ON t.ID = a.TASK_ID "
|
||||
|
@ -241,6 +253,9 @@ public interface TaskQueryMapper {
|
|||
+ "<if test=\"joinWithAttachmentClassifications\">"
|
||||
+ "LEFT JOIN CLASSIFICATION AS ac ON a.CLASSIFICATION_ID = ac.ID "
|
||||
+ "</if>"
|
||||
+ "<if test=\"addWorkbasketNameForOrdering\">"
|
||||
+ "LEFT JOIN WORKBASKET AS w ON t.WORKBASKET_ID = w.ID "
|
||||
+ "</if>"
|
||||
+ "<where> "
|
||||
+ "<if test='taskIds != null'>AND t.ID IN(<foreach item='item' collection='taskIds' separator=',' >#{item}</foreach>)</if> "
|
||||
+ "<if test='externalIdIn != null'>AND t.EXTERNAL_ID IN(<foreach item='item' collection='externalIdIn' separator=',' >#{item}</foreach>)</if> "
|
||||
|
@ -354,6 +369,9 @@ public interface TaskQueryMapper {
|
|||
+ "<if test=\"addAttachmentClassificationNameToSelectClauseForOrdering\">"
|
||||
+ ", ACNAME "
|
||||
+ "</if>"
|
||||
+ "<if test=\"addWorkbasketNameForOrdering\">"
|
||||
+ ", WNAME "
|
||||
+ "</if>"
|
||||
+ ", FLAG ) "
|
||||
+ "AS "
|
||||
+ "(SELECT ID, EXTERNAL_ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, CREATOR, DESCRIPTION, NOTE, PRIORITY, STATE, TCLASSIFICATION_KEY, "
|
||||
|
@ -369,6 +387,9 @@ public interface TaskQueryMapper {
|
|||
+ "<if test=\"addAttachmentClassificationNameToSelectClauseForOrdering\">"
|
||||
+ ", ACNAME "
|
||||
+ "</if>"
|
||||
+ "<if test=\"addWorkbasketNameForOrdering\">"
|
||||
+ ", WNAME "
|
||||
+ "</if>"
|
||||
+ ", (SELECT 1 FROM WORKBASKET_ACCESS_LIST s WHERE "
|
||||
+ "<if test='accessIdIn != null'> "
|
||||
+ "s.ACCESS_ID IN (<foreach item='item' collection='accessIdIn' separator=',' >#{item}</foreach>) and "
|
||||
|
@ -390,6 +411,9 @@ public interface TaskQueryMapper {
|
|||
+ "<if test=\"addAttachmentClassificationNameToSelectClauseForOrdering\">"
|
||||
+ ", ACNAME "
|
||||
+ "</if>"
|
||||
+ "<if test=\"addWorkbasketNameForOrdering\">"
|
||||
+ ", WNAME "
|
||||
+ "</if>"
|
||||
+ " FROM Y WHERE FLAG = 1 "
|
||||
+ "<if test='!orderBy.isEmpty()'>ORDER BY <foreach item='item' collection='orderBy' separator=',' >"
|
||||
+ "${item}"
|
||||
|
|
|
@ -98,6 +98,42 @@ class QueryTasksWithSortingAccTest extends AbstractAccTest {
|
|||
}
|
||||
}
|
||||
|
||||
@WithAccessId(user = "admin")
|
||||
@Test
|
||||
void testSortByWorkbasketName() {
|
||||
TaskService taskService = taskanaEngine.getTaskService();
|
||||
List<TaskSummary> results = taskService.createTaskQuery().orderByWorkbasketName(asc).list();
|
||||
|
||||
// test is only valid with at least 2 results
|
||||
assertThat(
|
||||
results.stream()
|
||||
.map(t -> t.getWorkbasketSummary().getName())
|
||||
.distinct()
|
||||
.collect(Collectors.toList()))
|
||||
.hasSizeGreaterThan(2);
|
||||
|
||||
List<String> idsAsc =
|
||||
results.stream()
|
||||
.map(t -> t.getWorkbasketSummary().getName())
|
||||
.sorted()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
for (int i = 0; i < results.size(); i++) {
|
||||
assertThat(results.get(i).getWorkbasketSummary().getName()).isEqualTo(idsAsc.get(i));
|
||||
}
|
||||
results = taskService.createTaskQuery().orderByWorkbasketName(desc).list();
|
||||
|
||||
List<String> idsDesc =
|
||||
results.stream()
|
||||
.map(t -> t.getWorkbasketSummary().getName())
|
||||
.sorted(Comparator.reverseOrder())
|
||||
.collect(Collectors.toList());
|
||||
|
||||
for (int i = 0; i < results.size(); i++) {
|
||||
assertThat(results.get(i).getWorkbasketSummary().getName()).isEqualTo(idsDesc.get(i));
|
||||
}
|
||||
}
|
||||
|
||||
@WithAccessId(user = "admin")
|
||||
@Test
|
||||
void testSortByDomainNameAndCreated() {
|
||||
|
|
Loading…
Reference in New Issue