TSK-634: Extend the TaskQuery with classificationKeyNotIn and stateNotIn

This commit is contained in:
BVier 2018-07-11 11:41:19 +02:00 committed by Holger Hagen
parent bc317b6c72
commit 0c5d540c56
4 changed files with 57 additions and 0 deletions

View File

@ -87,6 +87,15 @@ public interface TaskQuery extends BaseQuery<TaskSummary> {
*/
TaskQuery stateIn(TaskState... states);
/**
* Exclude these states from your query.
*
* @param states
* the states as {@link TaskState}
* @return the query
*/
TaskQuery stateNotIn(TaskState... states);
/**
* Add your classificationKey to your query.
*
@ -96,6 +105,15 @@ public interface TaskQuery extends BaseQuery<TaskSummary> {
*/
TaskQuery classificationKeyIn(String... classificationKeys);
/**
* Exlude these classificationKeys from your query.
*
* @param classificationKeys
* the classification key
* @return the query
*/
TaskQuery classificationKeyNotIn(String... classificationKeys);
/**
* Add your classificationKey for pattern matching to your query. It will be compared in SQL with the LIKE operator.
* You may use a wildcard like % to specify the pattern. If you specify multiple arguments they are combined with

View File

@ -55,6 +55,7 @@ public class TaskQueryImpl implements TaskQuery {
private String[] classificationIdIn;
private String[] classificationKeyIn;
private String[] classificationKeyLike;
private String[] classificationKeyNotIn;
private String[] classificationCategoryIn;
private String[] classificationCategoryLike;
private String[] ownerIn;
@ -258,6 +259,12 @@ public class TaskQueryImpl implements TaskQuery {
return this;
}
@Override
public TaskQuery classificationKeyNotIn(String... classificationKeys) {
this.classificationKeyNotIn = classificationKeys;
return this;
}
@Override
public TaskQuery classificationKeyLike(String... classificationKeys) {
this.classificationKeyLike = toUpperCopy(classificationKeys);
@ -396,6 +403,17 @@ public class TaskQueryImpl implements TaskQuery {
return this;
}
@Override
public TaskQuery stateNotIn(TaskState... states) {
// No benefit in introducing a new variable
List<TaskState> stateIn = Arrays.asList(TaskState.values());
for (TaskState state : states) {
stateIn.remove(state);
}
this.stateIn = stateIn.toArray(new TaskState[0]);
return this;
}
@Override
public TaskQuery customAttributeIn(String number, String... strings) throws InvalidArgumentException {
int num = 0;
@ -1179,6 +1197,10 @@ public class TaskQueryImpl implements TaskQuery {
return classificationKeyIn;
}
public String[] getClassificationKeyNotIn() {
return classificationKeyNotIn;
}
public String[] getClassificationKeyLike() {
return classificationKeyLike;
}
@ -1248,6 +1270,8 @@ public class TaskQueryImpl implements TaskQuery {
builder.append(Arrays.toString(classificationIdIn));
builder.append(", classificationKeyIn=");
builder.append(Arrays.toString(classificationKeyIn));
builder.append(", classificationKeyNotIn=");
builder.append(Arrays.toString(classificationKeyNotIn));
builder.append(", classificationKeyLike=");
builder.append(Arrays.toString(classificationKeyLike));
builder.append(", classificationCategoryIn=");

View File

@ -57,6 +57,7 @@ public interface QueryMapper {
+ "<if test='workbasketIdIn != null'>AND WORKBASKET_ID IN(<foreach item='item' collection='workbasketIdIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='workbasketKeyDomainIn != null'>AND (<foreach item='item' collection='workbasketKeyDomainIn' separator=' OR '>(WORKBASKET_KEY = #{item.key} AND DOMAIN = #{item.domain})</foreach>)</if> "
+ "<if test='classificationKeyIn != null'>AND CLASSIFICATION_KEY IN(<foreach item='item' collection='classificationKeyIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationKeyNotIn != null'>AND CLASSIFICATION_KEY NOT IN(<foreach item='item' collection='classificationKeyNotIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationKeyLike != null'>AND (<foreach item='item' collection='classificationKeyLike' separator=' OR '>UPPER(CLASSIFICATION_KEY) LIKE #{item}</foreach>)</if> "
+ "<if test='classificationIdIn != null'>AND CLASSIFICATION_ID IN(<foreach item='item' collection='classificationIdIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationCategoryIn != null'>AND CLASSIFICATION_CATEGORY IN(<foreach item='item' collection='classificationCategoryIn' separator=',' >#{item}</foreach>)</if> "
@ -165,6 +166,7 @@ public interface QueryMapper {
+ "<if test='workbasketIdIn != null'>AND t.WORKBASKET_ID IN(<foreach item='item' collection='workbasketIdIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='workbasketKeyDomainIn != null'>AND (<foreach item='item' collection='workbasketKeyDomainIn' separator=' OR '>(t.WORKBASKET_KEY = #{item.key} AND t.DOMAIN = #{item.domain})</foreach>)</if> "
+ "<if test='classificationKeyIn != null'>AND t.CLASSIFICATION_KEY IN(<foreach item='item' collection='classificationKeyIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationKeyNotIn != null'>AND t.CLASSIFICATION_KEY NOT IN(<foreach item='item' collection='classificationKeyNotIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationKeyLike != null'>AND (<foreach item='item' collection='classificationKeyLike' separator=' OR '>UPPER(t.CLASSIFICATION_KEY) LIKE #{item}</foreach>)</if> "
+ "<if test='classificationIdIn != null'>AND t.CLASSIFICATION_ID IN(<foreach item='item' collection='classificationIdIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationCategoryIn != null'>AND t.CLASSIFICATION_CATEGORY IN(<foreach item='item' collection='classificationCategoryIn' separator=',' >#{item}</foreach>)</if> "
@ -517,6 +519,7 @@ public interface QueryMapper {
+ "<if test='workbasketIdIn != null'>AND t.WORKBASKET_ID IN(<foreach item='item' collection='workbasketIdIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='workbasketKeyDomainIn != null'>AND (<foreach item='item' collection='workbasketKeyDomainIn' separator=' OR '>(t.WORKBASKET_KEY = #{item.key} AND t.DOMAIN = #{item.domain})</foreach>)</if> "
+ "<if test='classificationKeyIn != null'>AND t.CLASSIFICATION_KEY IN(<foreach item='item' collection='classificationKeyIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationKeyNotIn != null'>AND t.CLASSIFICATION_KEY NOT IN(<foreach item='item' collection='classificationKeyNotIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationKeyLike != null'>AND (<foreach item='item' collection='classificationKeyLike' separator=' OR '>UPPER(t.CLASSIFICATION_KEY) LIKE #{item}</foreach>)</if> "
+ "<if test='classificationIdIn != null'>AND t.CLASSIFICATION_ID IN(<foreach item='item' collection='classificationIdIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationCategoryIn != null'>AND t.CLASSIFICATION_CATEGORY IN(<foreach item='item' collection='classificationCategoryIn' separator=',' >#{item}</foreach>)</if> "
@ -611,6 +614,7 @@ public interface QueryMapper {
+ "<if test='workbasketIdIn != null'>AND t.WORKBASKET_ID IN(<foreach item='item' collection='workbasketIdIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='workbasketKeyDomainIn != null'>AND (<foreach item='item' collection='workbasketKeyDomainIn' separator=' OR '>(t.WORKBASKET_KEY = #{item.key} AND t.DOMAIN = #{item.domain})</foreach>)</if> "
+ "<if test='classificationKeyIn != null'>AND t.CLASSIFICATION_KEY IN(<foreach item='item' collection='classificationKeyIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationKeyNotIn != null'>AND t.CLASSIFICATION_KEY NOT IN(<foreach item='item' collection='classificationKeyNotIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationKeyLike != null'>AND (<foreach item='item' collection='classificationKeyLike' separator=' OR '>UPPER(t.CLASSIFICATION_KEY) LIKE #{item}</foreach>)</if> "
+ "<if test='classificationIdIn != null'>AND t.CLASSIFICATION_ID IN(<foreach item='item' collection='classificationIdIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationCategoryIn != null'>AND t.CLASSIFICATION_CATEGORY IN(<foreach item='item' collection='classificationCategoryIn' separator=',' >#{item}</foreach>)</if> "
@ -844,6 +848,7 @@ public interface QueryMapper {
+ "<if test='workbasketIdIn != null'>AND t.WORKBASKET_ID IN(<foreach item='item' collection='workbasketIdIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='workbasketKeyDomainIn != null'>AND (<foreach item='item' collection='workbasketKeyDomainIn' separator=' OR '>(t.WORKBASKET_KEY = #{item.key} AND t.DOMAIN = #{item.domain})</foreach>)</if> "
+ "<if test='classificationKeyIn != null'>AND t.CLASSIFICATION_KEY IN(<foreach item='item' collection='classificationKeyIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationKeyNotIn != null'>AND t.CLASSIFICATION_KEY NOT IN(<foreach item='item' collection='classificationKeyNotIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationKeyLike != null'>AND (<foreach item='item' collection='classificationKeyLike' separator=' OR '>UPPER(t.CLASSIFICATION_KEY) LIKE #{item}</foreach>)</if> "
+ "<if test='classificationIdIn != null'>AND t.CLASSIFICATION_ID IN(<foreach item='item' collection='classificationIdIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationCategoryIn != null'>AND t.CLASSIFICATION_CATEGORY IN(<foreach item='item' collection='classificationCategoryIn' separator=',' >#{item}</foreach>)</if> "

View File

@ -159,6 +159,16 @@ public class QueryTasksAccTest extends AbstractAccTest {
.classificationKeyIn(ids)
.list();
assertThat(result2.size(), equalTo(66));
List<TaskSummary> result3 = taskService.createTaskQuery()
.classificationKeyNotIn("T2100", "T2000")
.list();
assertThat(result3.size(), equalTo(70));
List<TaskSummary> result4 = taskService.createTaskQuery()
.classificationKeyNotIn("L1050", "L1060", "T2100")
.list();
assertThat(result4.size(), equalTo(6));
}
@WithAccessId(