TSK-1378: now support combinedClassificationfilter in WorkbasketReport#listTaskIdsForSelectedItems
This commit is contained in:
parent
83feab0955
commit
51a2410afc
|
@ -304,10 +304,18 @@ public interface MonitorMapper {
|
|||
+ "<if test='customAttributeFilter != null'>"
|
||||
+ "AND (<foreach collection='customAttributeFilter.keys' item='key' separator=' AND '>(${key} = '${customAttributeFilter.get(key)}')</foreach>) "
|
||||
+ "</if>"
|
||||
+ "<if test=\"combinedClassificationFilter != null\">"
|
||||
+ "AND <foreach collection='combinedClassificationFilter' item='item' separator='OR'> "
|
||||
+ "T.CLASSIFICATION_ID = #{item.taskClassificationId} "
|
||||
+ "<if test=\"item.attachmentClassificationId != null\">"
|
||||
+ "AND A.CLASSIFICATION_ID = #{item.attachmentClassificationId} "
|
||||
+ "</if>"
|
||||
+ "</foreach>"
|
||||
+ "</if>"
|
||||
+ "AND T.${timestamp} IS NOT NULL AND ( "
|
||||
+ "<foreach collection='selectedItems' item='selectedItem' separator=' OR '>"
|
||||
+ "#{selectedItem.key} = T.${groupedBy} AND "
|
||||
+ "<if test=\"joinWithAttachments\">"
|
||||
+ "<if test=\"joinWithAttachments and combinedClassificationFilter == null\">"
|
||||
+ "<if test='selectedItem.subKey != null'>"
|
||||
+ "A.CLASSIFICATION_KEY = #{selectedItem.subKey} AND "
|
||||
+ "</if>"
|
||||
|
@ -336,6 +344,8 @@ public interface MonitorMapper {
|
|||
@Param("classificationIds") List<String> classificationIds,
|
||||
@Param("excludedClassificationIds") List<String> excludedClassificationIds,
|
||||
@Param("customAttributeFilter") Map<TaskCustomField, String> customAttributeFilter,
|
||||
@Param("combinedClassificationFilter")
|
||||
List<CombinedClassificationFilter> combinedClassificationFilter,
|
||||
@Param("groupedBy") String groupedBy,
|
||||
@Param("timestamp") TaskTimestamp timestamp,
|
||||
@Param("selectedItems") List<SelectedItem> selectedItems,
|
||||
|
|
|
@ -14,6 +14,7 @@ import pro.taskana.common.api.WorkingDaysToDaysConverter;
|
|||
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
||||
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
||||
import pro.taskana.monitor.api.CombinedClassificationFilter;
|
||||
import pro.taskana.monitor.api.SelectedItem;
|
||||
import pro.taskana.monitor.api.TaskTimestamp;
|
||||
import pro.taskana.monitor.api.reports.ClassificationReport;
|
||||
|
@ -138,6 +139,9 @@ abstract class TimeIntervalReportBuilderImpl<
|
|||
if (!(this instanceof ClassificationReport.Builder) && joinWithAttachments) {
|
||||
throw new InvalidArgumentException("SubKeys are supported for ClassificationReport only.");
|
||||
}
|
||||
List<CombinedClassificationFilter> combinedClassificationFilter =
|
||||
getCombinedClassificationFilter();
|
||||
joinWithAttachments |= combinedClassificationFilter != null;
|
||||
if (this.inWorkingDays) {
|
||||
selectedItems = convertWorkingDaysToDays(selectedItems, this.columnHeaders);
|
||||
}
|
||||
|
@ -149,6 +153,7 @@ abstract class TimeIntervalReportBuilderImpl<
|
|||
this.classificationIds,
|
||||
this.excludedClassificationIds,
|
||||
this.customAttributeFilter,
|
||||
combinedClassificationFilter,
|
||||
determineGroupedBy(),
|
||||
timestamp,
|
||||
selectedItems,
|
||||
|
@ -189,6 +194,13 @@ abstract class TimeIntervalReportBuilderImpl<
|
|||
|
||||
protected abstract String determineGroupedBy();
|
||||
|
||||
protected List<CombinedClassificationFilter> getCombinedClassificationFilter() {
|
||||
// we are currently aware that this is a code smell. Unfortunately the resolution of this would
|
||||
// cause havoc in our queries, since we do not have a concept for a user validation yet. As soon
|
||||
// as that is done we can resolve this code smell.
|
||||
return null;
|
||||
}
|
||||
|
||||
private List<SelectedItem> convertWorkingDaysToDays(
|
||||
List<SelectedItem> selectedItems, List<H> columnHeaders) throws InvalidArgumentException {
|
||||
WorkingDaysToDaysReportConverter instance =
|
||||
|
|
|
@ -101,4 +101,9 @@ public class WorkbasketReportBuilderImpl
|
|||
protected String determineGroupedBy() {
|
||||
return "WORKBASKET_KEY";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<CombinedClassificationFilter> getCombinedClassificationFilter() {
|
||||
return combinedClassificationFilter;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ import org.junit.jupiter.api.function.ThrowingConsumer;
|
|||
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
||||
import pro.taskana.common.internal.security.JaasExtension;
|
||||
import pro.taskana.common.internal.security.WithAccessId;
|
||||
import pro.taskana.monitor.api.CombinedClassificationFilter;
|
||||
import pro.taskana.monitor.api.MonitorService;
|
||||
import pro.taskana.monitor.api.SelectedItem;
|
||||
import pro.taskana.monitor.api.TaskTimestamp;
|
||||
|
@ -129,6 +130,40 @@ class GetTaskIdsOfWorkbasketReportAccTest extends AbstractReportAccTest {
|
|||
"TKI:000000000000000000000000000000000050");
|
||||
}
|
||||
|
||||
@WithAccessId(user = "monitor")
|
||||
@Test
|
||||
void should_ReturnTaskIdsOfWorkbasketReport_When_CombinedClassificationFilterIsUsed()
|
||||
throws Exception {
|
||||
final List<TimeIntervalColumnHeader> columnHeaders = getListOfColumnHeaders();
|
||||
final List<SelectedItem> selectedItems =
|
||||
Collections.singletonList(
|
||||
new SelectedItem("USER-1-1", null, Integer.MIN_VALUE, Integer.MAX_VALUE));
|
||||
final List<CombinedClassificationFilter> combinedClassificationFilters =
|
||||
Arrays.asList(
|
||||
new CombinedClassificationFilter(
|
||||
"CLI:000000000000000000000000000000000003",
|
||||
"CLI:000000000000000000000000000000000008"),
|
||||
new CombinedClassificationFilter(
|
||||
"CLI:000000000000000000000000000000000001",
|
||||
"CLI:000000000000000000000000000000000006"));
|
||||
|
||||
List<String> ids =
|
||||
MONITOR_SERVICE
|
||||
.createWorkbasketReportBuilder()
|
||||
.withColumnHeaders(columnHeaders)
|
||||
.inWorkingDays()
|
||||
.combinedClassificationFilterIn(combinedClassificationFilters)
|
||||
.listTaskIdsForSelectedItems(selectedItems, TaskTimestamp.DUE);
|
||||
|
||||
assertThat(ids)
|
||||
.containsExactlyInAnyOrder(
|
||||
"TKI:000000000000000000000000000000000001", // from second filter
|
||||
"TKI:000000000000000000000000000000000013", // from second filter
|
||||
"TKI:000000000000000000000000000000000025", // from first filter
|
||||
"TKI:000000000000000000000000000000000036", // from first filter
|
||||
"TKI:000000000000000000000000000000000044"); // from first filter
|
||||
}
|
||||
|
||||
private List<TimeIntervalColumnHeader> getListOfColumnHeaders() {
|
||||
List<TimeIntervalColumnHeader> columnHeaders = new ArrayList<>();
|
||||
columnHeaders.add(new TimeIntervalColumnHeader(Integer.MIN_VALUE, -11));
|
||||
|
|
|
@ -197,6 +197,7 @@ class ClassificationClassificationCategoryReportBuilderImplTest {
|
|||
classificationIds,
|
||||
excludedClassificationIds,
|
||||
customAttributeFilter,
|
||||
null,
|
||||
"CLASSIFICATION_CATEGORY",
|
||||
TaskTimestamp.DUE,
|
||||
selectedItems,
|
||||
|
@ -229,6 +230,7 @@ class ClassificationClassificationCategoryReportBuilderImplTest {
|
|||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
eq(TaskTimestamp.DUE),
|
||||
any(),
|
||||
eq(false));
|
||||
|
|
|
@ -367,6 +367,7 @@ class ClassificationReportBuilderImplTest {
|
|||
classificationIds,
|
||||
excludedClassificationIds,
|
||||
customAttributeFilter,
|
||||
null,
|
||||
"CLASSIFICATION_KEY",
|
||||
TaskTimestamp.DUE,
|
||||
selectedItems,
|
||||
|
@ -400,6 +401,7 @@ class ClassificationReportBuilderImplTest {
|
|||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
eq(TaskTimestamp.DUE),
|
||||
any(),
|
||||
eq(false));
|
||||
|
|
|
@ -213,6 +213,7 @@ class WorkbasketReportBuilderImplTest {
|
|||
classificationIds,
|
||||
excludedClassificationIds,
|
||||
customAttributeFilter,
|
||||
null,
|
||||
"WORKBASKET_KEY",
|
||||
TaskTimestamp.DUE,
|
||||
selectedItems,
|
||||
|
@ -245,6 +246,7 @@ class WorkbasketReportBuilderImplTest {
|
|||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
eq(TaskTimestamp.DUE),
|
||||
any(),
|
||||
eq(false));
|
||||
|
|
Loading…
Reference in New Issue