add command IN and NOT_IN for a filter to the dashboard

This commit is contained in:
Ivan Panakhno 2021-09-06 16:56:48 +03:00
parent 45c5703f2f
commit 58f4c7420d
4 changed files with 35 additions and 5 deletions

View File

@ -38,6 +38,8 @@ public class StringFilterPredicate implements SimpleKeyFilterPredicate<String> {
STARTS_WITH,
ENDS_WITH,
CONTAINS,
NOT_CONTAINS
NOT_CONTAINS,
IN,
NOT_IN
}
}

View File

@ -537,6 +537,7 @@ public class EntityKeyMapping {
value = value.toLowerCase();
operationField = String.format("lower(%s)", operationField);
}
List<String> values = new ArrayList<>();
switch (stringFilterPredicate.getOperation()) {
case EQUAL:
stringOperationQuery = String.format("%s = :%s)", operationField, paramName);
@ -560,8 +561,29 @@ public class EntityKeyMapping {
value = "%" + value + "%";
stringOperationQuery = String.format("%s not like :%s or %s is null)", operationField, paramName, operationField);
break;
case IN:
value = value.replaceAll("'","").replaceAll("\"", "");
values = List.of(value.trim().split("\\s*,\\s*"));
System.out.println(value);
stringOperationQuery = String.format("%s in (:%s))", operationField, paramName);
break;
case NOT_IN:
value = value.replaceAll("'","").replaceAll("\"", "");
values = List.of(value.trim().split("\\s*,\\s*"));
System.out.println(value);
stringOperationQuery = String.format("%s not in (:%s))", operationField, paramName);
}
switch (stringFilterPredicate.getOperation()) {
case IN:
case NOT_IN:
for (String str : values) {
System.out.println(str);
}
ctx.addStringListParameter(paramName, values);
break;
default:
ctx.addStringParameter(paramName, value);
}
return String.format("((%s is not null and %s)", field, stringOperationQuery);
}

View File

@ -226,7 +226,9 @@ export enum StringOperation {
STARTS_WITH = 'STARTS_WITH',
ENDS_WITH = 'ENDS_WITH',
CONTAINS = 'CONTAINS',
NOT_CONTAINS = 'NOT_CONTAINS'
NOT_CONTAINS = 'NOT_CONTAINS',
IN = 'CONTAINS',
NOT_IN = 'NOT_CONTAINS'
}
export const stringOperationTranslationMap = new Map<StringOperation, string>(
@ -236,7 +238,9 @@ export const stringOperationTranslationMap = new Map<StringOperation, string>(
[StringOperation.STARTS_WITH, 'filter.operation.starts-with'],
[StringOperation.ENDS_WITH, 'filter.operation.ends-with'],
[StringOperation.CONTAINS, 'filter.operation.contains'],
[StringOperation.NOT_CONTAINS, 'filter.operation.not-contains']
[StringOperation.NOT_CONTAINS, 'filter.operation.not-contains'],
[StringOperation.IN, 'filter.operation.in'],
[StringOperation.NOT_IN, 'filter.operation.not-in']
]
);

View File

@ -2003,7 +2003,9 @@
"greater-or-equal": "greater or equal",
"less-or-equal": "less or equal",
"and": "and",
"or": "or"
"or": "or",
"in": "in",
"not-in": "not in"
},
"ignore-case": "ignore case",
"value": "Value",