From 51a2410afcd7346d0a8c94cc0e4f92d912d8a7ce Mon Sep 17 00:00:00 2001 From: Mustapha Zorgati <15628173+mustaphazorgati@users.noreply.github.com> Date: Mon, 14 Sep 2020 16:00:49 +0200 Subject: [PATCH] TSK-1378: now support combinedClassificationfilter in WorkbasketReport#listTaskIdsForSelectedItems --- .../monitor/internal/MonitorMapper.java | 12 ++++++- .../TimeIntervalReportBuilderImpl.java | 12 +++++++ .../reports/WorkbasketReportBuilderImpl.java | 5 +++ .../GetTaskIdsOfWorkbasketReportAccTest.java | 35 +++++++++++++++++++ ...ficationCategoryReportBuilderImplTest.java | 2 ++ .../ClassificationReportBuilderImplTest.java | 2 ++ .../WorkbasketReportBuilderImplTest.java | 2 ++ 7 files changed, 69 insertions(+), 1 deletion(-) diff --git a/lib/taskana-core/src/main/java/pro/taskana/monitor/internal/MonitorMapper.java b/lib/taskana-core/src/main/java/pro/taskana/monitor/internal/MonitorMapper.java index bf2bc75f1..e51588a23 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/monitor/internal/MonitorMapper.java +++ b/lib/taskana-core/src/main/java/pro/taskana/monitor/internal/MonitorMapper.java @@ -304,10 +304,18 @@ public interface MonitorMapper { + "" + "AND ((${key} = '${customAttributeFilter.get(key)}')) " + "" + + "" + + "AND " + + "T.CLASSIFICATION_ID = #{item.taskClassificationId} " + + "" + + "AND A.CLASSIFICATION_ID = #{item.attachmentClassificationId} " + + "" + + "" + + "" + "AND T.${timestamp} IS NOT NULL AND ( " + "" + "#{selectedItem.key} = T.${groupedBy} AND " - + "" + + "" + "" + "A.CLASSIFICATION_KEY = #{selectedItem.subKey} AND " + "" @@ -336,6 +344,8 @@ public interface MonitorMapper { @Param("classificationIds") List classificationIds, @Param("excludedClassificationIds") List excludedClassificationIds, @Param("customAttributeFilter") Map customAttributeFilter, + @Param("combinedClassificationFilter") + List combinedClassificationFilter, @Param("groupedBy") String groupedBy, @Param("timestamp") TaskTimestamp timestamp, @Param("selectedItems") List selectedItems, diff --git a/lib/taskana-core/src/main/java/pro/taskana/monitor/internal/reports/TimeIntervalReportBuilderImpl.java b/lib/taskana-core/src/main/java/pro/taskana/monitor/internal/reports/TimeIntervalReportBuilderImpl.java index 0b5bff67f..ca2b0e57e 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/monitor/internal/reports/TimeIntervalReportBuilderImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/monitor/internal/reports/TimeIntervalReportBuilderImpl.java @@ -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 = + 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 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 convertWorkingDaysToDays( List selectedItems, List columnHeaders) throws InvalidArgumentException { WorkingDaysToDaysReportConverter instance = diff --git a/lib/taskana-core/src/main/java/pro/taskana/monitor/internal/reports/WorkbasketReportBuilderImpl.java b/lib/taskana-core/src/main/java/pro/taskana/monitor/internal/reports/WorkbasketReportBuilderImpl.java index 35c05882b..453ec59d6 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/monitor/internal/reports/WorkbasketReportBuilderImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/monitor/internal/reports/WorkbasketReportBuilderImpl.java @@ -101,4 +101,9 @@ public class WorkbasketReportBuilderImpl protected String determineGroupedBy() { return "WORKBASKET_KEY"; } + + @Override + protected List getCombinedClassificationFilter() { + return combinedClassificationFilter; + } } diff --git a/lib/taskana-core/src/test/java/acceptance/report/GetTaskIdsOfWorkbasketReportAccTest.java b/lib/taskana-core/src/test/java/acceptance/report/GetTaskIdsOfWorkbasketReportAccTest.java index b81ca1609..b71c1c2ac 100644 --- a/lib/taskana-core/src/test/java/acceptance/report/GetTaskIdsOfWorkbasketReportAccTest.java +++ b/lib/taskana-core/src/test/java/acceptance/report/GetTaskIdsOfWorkbasketReportAccTest.java @@ -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 columnHeaders = getListOfColumnHeaders(); + final List selectedItems = + Collections.singletonList( + new SelectedItem("USER-1-1", null, Integer.MIN_VALUE, Integer.MAX_VALUE)); + final List combinedClassificationFilters = + Arrays.asList( + new CombinedClassificationFilter( + "CLI:000000000000000000000000000000000003", + "CLI:000000000000000000000000000000000008"), + new CombinedClassificationFilter( + "CLI:000000000000000000000000000000000001", + "CLI:000000000000000000000000000000000006")); + + List 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 getListOfColumnHeaders() { List columnHeaders = new ArrayList<>(); columnHeaders.add(new TimeIntervalColumnHeader(Integer.MIN_VALUE, -11)); diff --git a/lib/taskana-core/src/test/java/pro/taskana/monitor/internal/ClassificationClassificationCategoryReportBuilderImplTest.java b/lib/taskana-core/src/test/java/pro/taskana/monitor/internal/ClassificationClassificationCategoryReportBuilderImplTest.java index 01482ba04..4724e4305 100644 --- a/lib/taskana-core/src/test/java/pro/taskana/monitor/internal/ClassificationClassificationCategoryReportBuilderImplTest.java +++ b/lib/taskana-core/src/test/java/pro/taskana/monitor/internal/ClassificationClassificationCategoryReportBuilderImplTest.java @@ -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)); diff --git a/lib/taskana-core/src/test/java/pro/taskana/monitor/internal/ClassificationReportBuilderImplTest.java b/lib/taskana-core/src/test/java/pro/taskana/monitor/internal/ClassificationReportBuilderImplTest.java index f31d123f7..daa6511d7 100644 --- a/lib/taskana-core/src/test/java/pro/taskana/monitor/internal/ClassificationReportBuilderImplTest.java +++ b/lib/taskana-core/src/test/java/pro/taskana/monitor/internal/ClassificationReportBuilderImplTest.java @@ -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)); diff --git a/lib/taskana-core/src/test/java/pro/taskana/monitor/internal/WorkbasketReportBuilderImplTest.java b/lib/taskana-core/src/test/java/pro/taskana/monitor/internal/WorkbasketReportBuilderImplTest.java index d364ec7d1..1914c62a5 100644 --- a/lib/taskana-core/src/test/java/pro/taskana/monitor/internal/WorkbasketReportBuilderImplTest.java +++ b/lib/taskana-core/src/test/java/pro/taskana/monitor/internal/WorkbasketReportBuilderImplTest.java @@ -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));