TSK-774: set Flags for listValues()

This commit is contained in:
BVier 2019-01-28 12:42:50 +01:00 committed by Holger Hagen
parent 6c67e8c88d
commit 797d9f58e2
4 changed files with 57 additions and 13 deletions

View File

@ -7,7 +7,7 @@ package pro.taskana;
*/
public enum TaskQueryColumnName implements QueryColumnName {
ID("t.id"),
EXTERNAL_ID("t.externalId"),
EXTERNAL_ID("t.external_id"),
CREATED("t.created"),
CLAIMED("t.claimed"),
COMPLETED("t.completed"),
@ -37,8 +37,6 @@ public enum TaskQueryColumnName implements QueryColumnName {
POR_VALUE("t.por_value"),
IS_READ("t.is_read"),
IS_TRANSFERRED("t.is_transferred"),
CALLBACK_INFO("t.callback_info"),
CUSTOM_ATTRIBUTES("t.custom_attributes"),
CUSTOM_1("t.custom_1"),
CUSTOM_2("t.custom_2"),
CUSTOM_3("t.custom_3"),

View File

@ -1014,14 +1014,16 @@ public class TaskQueryImpl implements TaskQuery {
this.addOrderCriteria(columnName.toString(), sortDirection);
checkOpenAndReadPermissionForSpecifiedWorkbaskets();
setupAccessIds();
if (columnName.equals(TaskQueryColumnName.CLASSIFICATION_NAME)) {
joinWithClassifications = true;
addClassificationNameToSelectClauseForOrdering = true;
}
if (columnName.equals(TaskQueryColumnName.A_CLASSIFICATION_NAME)) {
joinWithAttachments = true;
List<TaskQueryColumnName> attachmentColumns = Arrays.asList(
TaskQueryColumnName.A_CLASSIFICATION_ID, TaskQueryColumnName.A_CLASSIFICATION_KEY,
TaskQueryColumnName.A_CLASSIFICATION_NAME, TaskQueryColumnName.A_CHANNEL,
TaskQueryColumnName.A_REF_VALUE);
if (attachmentColumns.contains(columnName)) {
joinWithAttachmentClassifications = true;
addAttachmentClassificationNameToSelectClauseForOrdering = true;
}
setupJoinAndOrderParameters();

View File

@ -672,8 +672,8 @@ public interface QueryMapper {
+ "group by WORKBASKET_ID ) AS f where max_read = 1 ) "
+ "</if> "
+ "<if test='taskIds != null'>AND t.ID IN(<foreach item='item' collection='taskIds' separator=',' >#{item}</foreach>)</if> "
+ "<if test='externalIdIn != null'>AND a.EXTERNAL_ID IN(<foreach item='item' collection='externalIdIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='externalIdLike != null'>AND (<foreach item='item' collection='externalIdLike' separator=' OR '>UPPER(a.EXTERNAL_ID) LIKE #{item}</foreach>)</if> "
+ "<if test='externalIdIn != null'>AND t.EXTERNAL_ID IN(<foreach item='item' collection='externalIdIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='externalIdLike != null'>AND (<foreach item='item' collection='externalIdLike' separator=' OR '>UPPER(t.EXTERNAL_ID) LIKE #{item}</foreach>)</if> "
+ "<if test='createdIn !=null'> AND ( <foreach item='item' collection='createdIn' separator=' OR ' > ( <if test='item.begin!=null'> t.CREATED &gt;= #{item.begin} </if> <if test='item.begin!=null and item.end!=null'> AND </if><if test='item.end!=null'> t.CREATED &lt;=#{item.end} </if>)</foreach>)</if> "
+ "<if test='claimedIn !=null'> AND ( <foreach item='item' collection='claimedIn' separator=' OR ' > ( <if test='item.begin!=null'> t.CLAIMED &gt;= #{item.begin} </if> <if test='item.begin!=null and item.end!=null'> AND </if><if test='item.end!=null'> t.CLAIMED &lt;=#{item.end} </if>)</foreach>)</if> "
+ "<if test='completedIn !=null'> AND ( <foreach item='item' collection='completedIn' separator=' OR ' > ( <if test='item.begin!=null'> t.COMPLETED &gt;= #{item.begin} </if> <if test='item.begin!=null and item.end!=null'> AND </if><if test='item.end!=null'> t.COMPLETED &lt;=#{item.end} </if>)</foreach>)</if> "
@ -776,8 +776,8 @@ public interface QueryMapper {
+ "</if>"
+ "<where> "
+ "<if test='taskIds != null'>AND t.ID IN(<foreach item='item' collection='taskIds' separator=',' >#{item}</foreach>)</if> "
+ "<if test='externalIdIn != null'>AND a.EXTERNAL_ID IN(<foreach item='item' collection='externalIdIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='externalIdLike != null'>AND (<foreach item='item' collection='externalIdLike' separator=' OR '>UPPER(a.EXTERNAL_ID) LIKE #{item}</foreach>)</if> "
+ "<if test='externalIdIn != null'>AND t.EXTERNAL_ID IN(<foreach item='item' collection='externalIdIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='externalIdLike != null'>AND (<foreach item='item' collection='externalIdLike' separator=' OR '>UPPER(t.EXTERNAL_ID) LIKE #{item}</foreach>)</if> "
+ "<if test='createdIn !=null'> AND ( <foreach item='item' collection='createdIn' separator=' OR ' > ( <if test='item.begin!=null'> t.CREATED &gt;= #{item.begin} </if> <if test='item.begin!=null and item.end!=null'> AND </if><if test='item.end!=null'> t.CREATED &lt;=#{item.end} </if>)</foreach>)</if> "
+ "<if test='claimedIn !=null'> AND ( <foreach item='item' collection='claimedIn' separator=' OR ' > ( <if test='item.begin!=null'> t.CLAIMED &gt;= #{item.begin} </if> <if test='item.begin!=null and item.end!=null'> AND </if><if test='item.end!=null'> t.CLAIMED &lt;=#{item.end} </if>)</foreach>)</if> "
+ "<if test='completedIn !=null'> AND ( <foreach item='item' collection='completedIn' separator=' OR ' > ( <if test='item.begin!=null'> t.COMPLETED &gt;= #{item.begin} </if> <if test='item.begin!=null and item.end!=null'> AND </if><if test='item.end!=null'> t.COMPLETED &lt;=#{item.end} </if>)</foreach>)</if> "
@ -1042,8 +1042,8 @@ public interface QueryMapper {
+ "group by WORKBASKET_ID ) where max_read = 1 ) "
+ "</if> "
+ "<if test='taskIds != null'>AND t.ID IN(<foreach item='item' collection='taskIds' separator=',' >#{item}</foreach>)</if> "
+ "<if test='externalIdIn != null'>AND a.EXTERNAL_ID IN(<foreach item='item' collection='externalIdIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='externalIdLike != null'>AND (<foreach item='item' collection='externalIdLike' separator=' OR '>UPPER(a.EXTERNAL_ID) LIKE #{item}</foreach>)</if> "
+ "<if test='externalIdIn != null'>AND t.EXTERNAL_ID IN(<foreach item='item' collection='externalIdIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='externalIdLike != null'>AND (<foreach item='item' collection='externalIdLike' separator=' OR '>UPPER(t.EXTERNAL_ID) LIKE #{item}</foreach>)</if> "
+ "<if test='createdIn !=null'> AND ( <foreach item='item' collection='createdIn' separator=' OR ' > ( <if test='item.begin!=null'> t.CREATED &gt;= #{item.begin} </if> <if test='item.begin!=null and item.end!=null'> AND </if><if test='item.end!=null'> t.CREATED &lt;=#{item.end} </if>)</foreach>)</if> "
+ "<if test='claimedIn !=null'> AND ( <foreach item='item' collection='claimedIn' separator=' OR ' > ( <if test='item.begin!=null'> t.CLAIMED &gt;= #{item.begin} </if> <if test='item.begin!=null and item.end!=null'> AND </if><if test='item.end!=null'> t.CLAIMED &lt;=#{item.end} </if>)</foreach>)</if> "
+ "<if test='completedIn !=null'> AND ( <foreach item='item' collection='completedIn' separator=' OR ' > ( <if test='item.begin!=null'> t.COMPLETED &gt;= #{item.begin} </if> <if test='item.begin!=null and item.end!=null'> AND </if><if test='item.end!=null'> t.COMPLETED &lt;=#{item.end} </if>)</foreach>)</if> "

View File

@ -13,10 +13,12 @@ import static pro.taskana.TaskQueryColumnName.A_REF_VALUE;
import static pro.taskana.TaskQueryColumnName.A_CLASSIFICATION_ID;
import static pro.taskana.TaskQueryColumnName.CLASSIFICATION_KEY;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.ibatis.exceptions.PersistenceException;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.junit.Assert;
@ -28,6 +30,7 @@ import pro.taskana.Attachment;
import pro.taskana.BaseQuery.SortDirection;
import pro.taskana.Task;
import pro.taskana.TaskQuery;
import pro.taskana.TaskQueryColumnName;
import pro.taskana.TaskService;
import pro.taskana.TaskSummary;
import pro.taskana.TimeInterval;
@ -59,6 +62,23 @@ public class QueryTasksAccTest extends AbstractAccTest {
super();
}
@WithAccessId(
userName = "teamlead_1",
groupNames = {"admin"})
@Test
public void testQueryTaskValuesForEveryColumn() {
TaskService taskService = taskanaEngine.getTaskService();
List<String> notWorkingColumns = new ArrayList<>();
for (TaskQueryColumnName columnName : TaskQueryColumnName.values()) {
try {
taskService.createTaskQuery().listValues(columnName, asc);
} catch (PersistenceException p) {
notWorkingColumns.add(columnName.toString());
}
}
assertEquals(new ArrayList<>(), notWorkingColumns);
}
@WithAccessId(
userName = "teamlead_1",
groupNames = {"admin"})
@ -239,6 +259,30 @@ public class QueryTasksAccTest extends AbstractAccTest {
assertNotNull(results.get(0).getAttachmentSummaries().get(0));
}
@WithAccessId(
userName = "teamlead_1",
groupNames = {"admin"})
@Test
public void testQueryForExternalId() {
TaskService taskService = taskanaEngine.getTaskService();
List<TaskSummary> results = taskService.createTaskQuery()
.externalIdIn("EID:000000000000000000000000000000000000", "EID:000000000000000000000000000000000001")
.list();
assertThat(results.size(), equalTo(2));
List<String> resultValues = taskService.createTaskQuery()
.externalIdLike("EID:000000000000000000000000000000%")
.listValues(TaskQueryColumnName.EXTERNAL_ID, desc);
assertThat(resultValues.size(), equalTo(70));
long countAllExternalIds = taskService.createTaskQuery()
.externalIdLike("EID:%")
.count();
long countAllIds = taskService.createTaskQuery().count();
assertEquals(countAllIds, countAllExternalIds);
}
@WithAccessId(
userName = "teamlead_1",
groupNames = {"group_1"})