From 97443641af2378568d191fd64a11a48df0771b99 Mon Sep 17 00:00:00 2001 From: Mustapha Zorgati <15628173+mustaphazorgati@users.noreply.github.com> Date: Tue, 21 Jul 2020 07:10:26 +0200 Subject: [PATCH] TSK-1267: All TimeIntervalReports are now based on any TaskTimestamp --- .../impl/TaskanaHistoryEngineImpl.java | 3 +- .../acceptance/query/QueryHistoryAccTest.java | 8 +- .../acceptance/security/JaasExtension.java | 15 +- ...storyEventControllerRestDocumentation.java | 4 +- .../api/WorkingDaysToDaysConverter.java | 2 +- .../internal/util/CheckedBiConsumer.java | 1 - .../taskana/monitor/api/MonitorService.java | 11 +- .../api/TaskTimestamp.java} | 4 +- ...java => ClassificationCategoryReport.java} | 15 +- .../api/reports/ClassificationReport.java | 8 + .../api/reports/CustomFieldValueReport.java | 5 + .../taskana/monitor/api/reports/Report.java | 6 +- .../reports/TimeIntervalReportBuilder.java | 12 +- .../monitor/api/reports/TimestampReport.java | 4 +- .../monitor/api/reports/WorkbasketReport.java | 11 +- .../api/reports/item/TimestampQueryItem.java | 4 +- .../monitor/internal/MonitorMapper.java | 145 ++++------ .../monitor/internal/MonitorServiceImpl.java | 8 +- ...ssificationCategoryReportBuilderImpl.java} | 30 ++- .../ClassificationReportBuilderImpl.java | 22 +- .../CustomFieldValueReportBuilderImpl.java | 12 +- .../TimeIntervalReportBuilderImpl.java | 10 +- .../reports/TimestampReportBuilderImpl.java | 31 ++- .../reports/WorkbasketReportBuilderImpl.java | 41 +-- .../history/internal/HistoryEventManager.java | 19 +- .../task/internal/TaskQueryMapper.java | 1 - .../report/AbstractReportAccTest.java | 5 +- ...fClassificationCategoryReportAccTest.java} | 4 +- ...askIdsOfCustomFieldValueReportAccTest.java | 2 +- ...eClassificationCategoryReportAccTest.java} | 240 ++++++----------- .../ProvideClassificationReportAccTest.java | 226 +++++----------- .../ProvideCustomFieldValueReportAccTest.java | 212 +++++---------- ...deDetailedClassificationReportAccTest.java | 248 +++++++----------- .../ProvideTaskStatusReportAccTest.java | 65 ----- .../report/ProvideTimestampReportAccTest.java | 6 +- .../ProvideWorkbasketReportAccTest.java | 222 +++++----------- .../internal/ClassificationQueryImplTest.java | 6 +- ...icationCategoryReportBuilderImplTest.java} | 35 +-- .../ClassificationReportBuilderImplTest.java | 27 +- ...CustomFieldValueReportBuilderImplTest.java | 15 +- .../WorkbasketReportBuilderImplTest.java | 25 +- .../ObjectReferenceQueryImplTest.java | 6 +- .../task/internal/TaskQueryImplTest.java | 6 +- .../TaskServiceImplIntAutocommitTest.java | 2 +- .../TaskServiceImplIntExplicitTest.java | 2 +- .../WorkbasketAccessItemQueryImplTest.java | 6 +- .../internal/WorkbasketQueryImplTest.java | 6 +- .../monitor/rest/MonitorController.java | 3 +- ...askCommentControllerRestDocumentation.java | 6 +- .../api/TaskControllerRestDocumentation.java | 2 +- 50 files changed, 648 insertions(+), 1161 deletions(-) rename lib/taskana-core/src/main/java/pro/taskana/{task/api/Timestamp.java => monitor/api/TaskTimestamp.java} (76%) rename lib/taskana-core/src/main/java/pro/taskana/monitor/api/reports/{CategoryReport.java => ClassificationCategoryReport.java} (66%) rename lib/taskana-core/src/main/java/pro/taskana/monitor/internal/reports/{CategoryReportBuilderImpl.java => ClassificationCategoryReportBuilderImpl.java} (65%) rename lib/taskana-core/src/test/java/acceptance/report/{GetTaskIdsOfCategoryReportAccTest.java => GetTaskIdsOfClassificationCategoryReportAccTest.java} (98%) rename lib/taskana-core/src/test/java/acceptance/report/{ProvideCategoryReportAccTest.java => ProvideClassificationCategoryReportAccTest.java} (61%) rename lib/taskana-core/src/test/java/pro/taskana/monitor/internal/{CategoryReportBuilderImplTest.java => ClassificationClassificationCategoryReportBuilderImplTest.java} (92%) diff --git a/history/taskana-simplehistory-provider/src/main/java/pro/taskana/simplehistory/impl/TaskanaHistoryEngineImpl.java b/history/taskana-simplehistory-provider/src/main/java/pro/taskana/simplehistory/impl/TaskanaHistoryEngineImpl.java index f4f3979d1..59fec61f4 100644 --- a/history/taskana-simplehistory-provider/src/main/java/pro/taskana/simplehistory/impl/TaskanaHistoryEngineImpl.java +++ b/history/taskana-simplehistory-provider/src/main/java/pro/taskana/simplehistory/impl/TaskanaHistoryEngineImpl.java @@ -70,8 +70,7 @@ public class TaskanaHistoryEngineImpl implements TaskanaHistoryEngine { .map(role -> getConfiguration().getRoleMap().get(role)) .collect(HashSet::new, Set::addAll, Set::addAll); - return CurrentUserContext.getAccessIds().stream() - .anyMatch(rolesMembers::contains); + return CurrentUserContext.getAccessIds().stream().anyMatch(rolesMembers::contains); } public void checkRoleMembership(TaskanaRole... roles) throws NotAuthorizedException { diff --git a/history/taskana-simplehistory-provider/src/test/java/acceptance/query/QueryHistoryAccTest.java b/history/taskana-simplehistory-provider/src/test/java/acceptance/query/QueryHistoryAccTest.java index a58fa6541..f9b62cabc 100644 --- a/history/taskana-simplehistory-provider/src/test/java/acceptance/query/QueryHistoryAccTest.java +++ b/history/taskana-simplehistory-provider/src/test/java/acceptance/query/QueryHistoryAccTest.java @@ -53,13 +53,9 @@ class QueryHistoryAccTest extends AbstractAccTest { .orderByCreated(SortDirection.DESCENDING); List results = query.list(); - assertThat(results) - .extracting(TaskanaHistoryEvent::getUserId) - .containsOnly("admin", "peter"); + assertThat(results).extracting(TaskanaHistoryEvent::getUserId).containsOnly("admin", "peter"); results = query.orderByUserId(SortDirection.DESCENDING).list(); - assertThat(results) - .extracting(TaskanaHistoryEvent::getUserId) - .containsOnly("admin", "peter"); + assertThat(results).extracting(TaskanaHistoryEvent::getUserId).containsOnly("admin", "peter"); assertThat(query.domainLike().count()).isEqualTo(13); } diff --git a/history/taskana-simplehistory-provider/src/test/java/acceptance/security/JaasExtension.java b/history/taskana-simplehistory-provider/src/test/java/acceptance/security/JaasExtension.java index 7a4ec81db..3413389d6 100644 --- a/history/taskana-simplehistory-provider/src/test/java/acceptance/security/JaasExtension.java +++ b/history/taskana-simplehistory-provider/src/test/java/acceptance/security/JaasExtension.java @@ -87,8 +87,7 @@ public class JaasExtension implements InvocationInterceptor, TestTemplateInvocat Invocation invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) { - WithAccessIds annotation = invocationContext.getExecutable().getAnnotation( - WithAccessIds.class); + WithAccessIds annotation = invocationContext.getExecutable().getAnnotation(WithAccessIds.class); if (annotation != null) { // our goal is to run each test returned from the test factory X times. X is the amount of // WithAccessId annotations. In order to achieve this we are wrapping the result from the @@ -236,8 +235,7 @@ public class JaasExtension implements InvocationInterceptor, TestTemplateInvocat private static T extractAccessIdAndPerformInvocation( Invocation invocation, AnnotatedElement executable) { - return performInvocationWithAccessId(invocation, executable.getAnnotation( - WithAccessId.class)); + return performInvocationWithAccessId(invocation, executable.getAnnotation(WithAccessId.class)); } private static T performInvocationWithAccessId( @@ -250,8 +248,7 @@ public class JaasExtension implements InvocationInterceptor, TestTemplateInvocat return Subject.doAs(subject, performInvocation); } - private static List getPrincipals( - WithAccessId withAccessId) { + private static List getPrincipals(WithAccessId withAccessId) { if (withAccessId != null) { return Stream.concat( Stream.of(withAccessId.user()).map(UserPrincipal::new), @@ -289,16 +286,14 @@ public class JaasExtension implements InvocationInterceptor, TestTemplateInvocat return context.getStore(Namespace.create(getClass(), context.getRequiredTestMethod())); } - private static String getDisplayNameForAccessId( - WithAccessId withAccessId) { + private static String getDisplayNameForAccessId(WithAccessId withAccessId) { return String.format("for user '%s'", withAccessId.user()); } private static class JaasExtensionInvocationContext implements TestTemplateInvocationContext { private final WithAccessId withAccessId; - private JaasExtensionInvocationContext( - WithAccessId withAccessId) { + private JaasExtensionInvocationContext(WithAccessId withAccessId) { this.withAccessId = withAccessId; } diff --git a/history/taskana-simplehistory-rest-spring/src/test/java/pro/taskana/doc/api/TaskHistoryEventControllerRestDocumentation.java b/history/taskana-simplehistory-rest-spring/src/test/java/pro/taskana/doc/api/TaskHistoryEventControllerRestDocumentation.java index 153d41db2..47ccc78c4 100644 --- a/history/taskana-simplehistory-rest-spring/src/test/java/pro/taskana/doc/api/TaskHistoryEventControllerRestDocumentation.java +++ b/history/taskana-simplehistory-rest-spring/src/test/java/pro/taskana/doc/api/TaskHistoryEventControllerRestDocumentation.java @@ -173,7 +173,9 @@ public class TaskHistoryEventControllerRestDocumentation { this.mockMvc .perform( RestDocumentationRequestBuilders.get( - "http://127.0.0.1:" + port + "/api/v1/task-history-event/HEI:000000000000000000000000000000000000") + "http://127.0.0.1:" + + port + + "/api/v1/task-history-event/HEI:000000000000000000000000000000000000") .accept("application/hal+json") .header("Authorization", "Basic dGVhbWxlYWRfMTp0ZWFtbGVhZF8x")) .andExpect(MockMvcResultMatchers.status().isOk()) diff --git a/lib/taskana-core/src/main/java/pro/taskana/common/api/WorkingDaysToDaysConverter.java b/lib/taskana-core/src/main/java/pro/taskana/common/api/WorkingDaysToDaysConverter.java index cd870386c..8f95c5d24 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/common/api/WorkingDaysToDaysConverter.java +++ b/lib/taskana-core/src/main/java/pro/taskana/common/api/WorkingDaysToDaysConverter.java @@ -22,7 +22,7 @@ import pro.taskana.common.api.exceptions.SystemException; * The WorkingDaysToDaysConverter provides a method to convert an age in working days into an age in * days. */ -public final class WorkingDaysToDaysConverter { +public class WorkingDaysToDaysConverter { // offset in days from easter sunday private static final long OFFSET_GOOD_FRIDAY = -2; // Good Friday diff --git a/lib/taskana-core/src/main/java/pro/taskana/common/internal/util/CheckedBiConsumer.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/util/CheckedBiConsumer.java index 095eca446..334c4ae12 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/common/internal/util/CheckedBiConsumer.java +++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/util/CheckedBiConsumer.java @@ -4,5 +4,4 @@ package pro.taskana.common.internal.util; public interface CheckedBiConsumer { void accept(T t, U u) throws E; - } diff --git a/lib/taskana-core/src/main/java/pro/taskana/monitor/api/MonitorService.java b/lib/taskana-core/src/main/java/pro/taskana/monitor/api/MonitorService.java index d8e411144..45428bb6e 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/monitor/api/MonitorService.java +++ b/lib/taskana-core/src/main/java/pro/taskana/monitor/api/MonitorService.java @@ -1,6 +1,6 @@ package pro.taskana.monitor.api; -import pro.taskana.monitor.api.reports.CategoryReport; +import pro.taskana.monitor.api.reports.ClassificationCategoryReport; import pro.taskana.monitor.api.reports.ClassificationReport; import pro.taskana.monitor.api.reports.CustomFieldValueReport; import pro.taskana.monitor.api.reports.TaskStatusReport; @@ -20,12 +20,13 @@ public interface MonitorService { WorkbasketReport.Builder createWorkbasketReportBuilder(); /** - * Provides a {@link CategoryReport.Builder} for creating a {@link CategoryReport}, list the task - * ids of this report and list the values of an entered custom attribute. + * Provides a {@link ClassificationCategoryReport.Builder} for creating a {@link + * ClassificationCategoryReport}, list the task ids of this report and list the values of an + * entered custom attribute. * - * @return a {@link CategoryReport.Builder} + * @return a {@link ClassificationCategoryReport.Builder} */ - CategoryReport.Builder createCategoryReportBuilder(); + ClassificationCategoryReport.Builder createCategoryReportBuilder(); /** * Provides a {@link ClassificationReport.Builder} for creating a {@link ClassificationReport} or diff --git a/lib/taskana-core/src/main/java/pro/taskana/task/api/Timestamp.java b/lib/taskana-core/src/main/java/pro/taskana/monitor/api/TaskTimestamp.java similarity index 76% rename from lib/taskana-core/src/main/java/pro/taskana/task/api/Timestamp.java rename to lib/taskana-core/src/main/java/pro/taskana/monitor/api/TaskTimestamp.java index 41639cef7..22df94953 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/task/api/Timestamp.java +++ b/lib/taskana-core/src/main/java/pro/taskana/monitor/api/TaskTimestamp.java @@ -1,9 +1,9 @@ -package pro.taskana.task.api; +package pro.taskana.monitor.api; import pro.taskana.task.api.models.Task; /** This enum contains all timestamps saved in the database table for a {@link Task}. */ -public enum Timestamp { +public enum TaskTimestamp { CREATED, CLAIMED, COMPLETED, diff --git a/lib/taskana-core/src/main/java/pro/taskana/monitor/api/reports/CategoryReport.java b/lib/taskana-core/src/main/java/pro/taskana/monitor/api/reports/ClassificationCategoryReport.java similarity index 66% rename from lib/taskana-core/src/main/java/pro/taskana/monitor/api/reports/CategoryReport.java rename to lib/taskana-core/src/main/java/pro/taskana/monitor/api/reports/ClassificationCategoryReport.java index 66d13e3c9..f98ed7ce3 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/monitor/api/reports/CategoryReport.java +++ b/lib/taskana-core/src/main/java/pro/taskana/monitor/api/reports/ClassificationCategoryReport.java @@ -4,6 +4,7 @@ import java.util.List; import pro.taskana.common.api.exceptions.InvalidArgumentException; import pro.taskana.common.api.exceptions.NotAuthorizedException; +import pro.taskana.monitor.api.TaskTimestamp; import pro.taskana.monitor.api.reports.header.TimeIntervalColumnHeader; import pro.taskana.monitor.api.reports.item.MonitorQueryItem; @@ -15,17 +16,23 @@ import pro.taskana.monitor.api.reports.item.MonitorQueryItem; * also the number of tasks of the respective cluster. The age of the tasks can be counted in days * or in working days. Tasks with Timestamp DUE = null are not considered. */ -public class CategoryReport extends Report { +public class ClassificationCategoryReport + extends Report { - public CategoryReport(List timeIntervalColumnHeaders) { + public ClassificationCategoryReport(List timeIntervalColumnHeaders) { super(timeIntervalColumnHeaders, new String[] {"CLASSIFICATION CATEGORIES"}); } - /** Builder for {@link CategoryReport}. */ + /** Builder for {@link ClassificationCategoryReport}. */ public interface Builder extends TimeIntervalReportBuilder { @Override - CategoryReport buildReport() throws NotAuthorizedException, InvalidArgumentException; + ClassificationCategoryReport buildReport() + throws NotAuthorizedException, InvalidArgumentException; + + @Override + ClassificationCategoryReport buildReport(TaskTimestamp timestamp) + throws NotAuthorizedException, InvalidArgumentException; } } diff --git a/lib/taskana-core/src/main/java/pro/taskana/monitor/api/reports/ClassificationReport.java b/lib/taskana-core/src/main/java/pro/taskana/monitor/api/reports/ClassificationReport.java index a8ce5e2d2..6726843d7 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/monitor/api/reports/ClassificationReport.java +++ b/lib/taskana-core/src/main/java/pro/taskana/monitor/api/reports/ClassificationReport.java @@ -4,6 +4,7 @@ import java.util.List; import pro.taskana.common.api.exceptions.InvalidArgumentException; import pro.taskana.common.api.exceptions.NotAuthorizedException; +import pro.taskana.monitor.api.TaskTimestamp; import pro.taskana.monitor.api.reports.header.TimeIntervalColumnHeader; import pro.taskana.monitor.api.reports.item.DetailedMonitorQueryItem; import pro.taskana.monitor.api.reports.item.MonitorQueryItem; @@ -28,6 +29,10 @@ public class ClassificationReport extends Report> { + private final Map> reportRows = new LinkedHashMap<>(); + private final Row sumRow; + private final String[] rowDesc; protected List columnHeaders; - private Map> reportRows = new LinkedHashMap<>(); - private Row sumRow; - private String[] rowDesc; protected Report(List columnHeaders, String[] rowDesc) { this.rowDesc = rowDesc; diff --git a/lib/taskana-core/src/main/java/pro/taskana/monitor/api/reports/TimeIntervalReportBuilder.java b/lib/taskana-core/src/main/java/pro/taskana/monitor/api/reports/TimeIntervalReportBuilder.java index cb8f79cb8..8a6ab74d8 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/monitor/api/reports/TimeIntervalReportBuilder.java +++ b/lib/taskana-core/src/main/java/pro/taskana/monitor/api/reports/TimeIntervalReportBuilder.java @@ -6,6 +6,7 @@ import java.util.Map; import pro.taskana.common.api.exceptions.InvalidArgumentException; import pro.taskana.common.api.exceptions.NotAuthorizedException; import pro.taskana.monitor.api.SelectedItem; +import pro.taskana.monitor.api.TaskTimestamp; import pro.taskana.monitor.api.reports.header.TimeIntervalColumnHeader; import pro.taskana.monitor.api.reports.item.AgeQueryItem; import pro.taskana.task.api.CustomField; @@ -59,13 +60,13 @@ public interface TimeIntervalReportBuilder< B stateIn(List states); /** - * Adds a list of categories to the builder. The created report contains only tasks with a - * category in this list. + * Adds a list of classificationCategories to the builder. The created report contains only tasks + * with a category in this list. * - * @param categories a list of categories + * @param classificationCategory a list of classificationCategories * @return the TimeIntervalReportBuilder */ - B categoryIn(List categories); + B classificationCategoryIn(List classificationCategory); /** * Adds a list of classificationIds to the builder. The created report contains only tasks with a @@ -123,4 +124,7 @@ public interface TimeIntervalReportBuilder< */ List listCustomAttributeValuesForCustomAttributeName(CustomField customField) throws NotAuthorizedException; + + Report buildReport(TaskTimestamp timestamp) + throws NotAuthorizedException, InvalidArgumentException; } diff --git a/lib/taskana-core/src/main/java/pro/taskana/monitor/api/reports/TimestampReport.java b/lib/taskana-core/src/main/java/pro/taskana/monitor/api/reports/TimestampReport.java index d00bbd423..41ba8e264 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/monitor/api/reports/TimestampReport.java +++ b/lib/taskana-core/src/main/java/pro/taskana/monitor/api/reports/TimestampReport.java @@ -4,10 +4,10 @@ import java.util.List; import pro.taskana.common.api.exceptions.InvalidArgumentException; import pro.taskana.common.api.exceptions.NotAuthorizedException; +import pro.taskana.monitor.api.TaskTimestamp; import pro.taskana.monitor.api.reports.header.TimeIntervalColumnHeader; import pro.taskana.monitor.api.reports.item.TimestampQueryItem; import pro.taskana.monitor.api.reports.row.TimestampRow; -import pro.taskana.task.api.Timestamp; /** A {@link TimestampReport} displays created and competed tasks for a specific dates. */ public class TimestampReport extends Report { @@ -35,6 +35,6 @@ public class TimestampReport extends Report statuses); + Builder withTimestamps(List statuses); } } diff --git a/lib/taskana-core/src/main/java/pro/taskana/monitor/api/reports/WorkbasketReport.java b/lib/taskana-core/src/main/java/pro/taskana/monitor/api/reports/WorkbasketReport.java index 031c1a418..e2936372b 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/monitor/api/reports/WorkbasketReport.java +++ b/lib/taskana-core/src/main/java/pro/taskana/monitor/api/reports/WorkbasketReport.java @@ -5,6 +5,7 @@ import java.util.List; import pro.taskana.common.api.exceptions.InvalidArgumentException; import pro.taskana.common.api.exceptions.NotAuthorizedException; import pro.taskana.monitor.api.CombinedClassificationFilter; +import pro.taskana.monitor.api.TaskTimestamp; import pro.taskana.monitor.api.reports.header.TimeIntervalColumnHeader; import pro.taskana.monitor.api.reports.item.MonitorQueryItem; @@ -30,14 +31,8 @@ public class WorkbasketReport extends Report" + "SELECT B.WORKBASKET_KEY, B.AGE_IN_DAYS, COUNT(B.AGE_IN_DAYS) AS NUMBER_OF_TASKS FROM (" - + "SELECT T.WORKBASKET_KEY, (DAYS(T.DUE) - DAYS(CURRENT_TIMESTAMP)) as AGE_IN_DAYS " - + "SELECT T.WORKBASKET_KEY, DATEDIFF('DAY', CURRENT_TIMESTAMP, T.DUE) as AGE_IN_DAYS " - + "SELECT T.WORKBASKET_KEY, DATE_PART('DAY', T.DUE - CURRENT_TIMESTAMP) as AGE_IN_DAYS " + + "SELECT T.WORKBASKET_KEY, (DAYS(T.${timestamp}) - DAYS(CURRENT_TIMESTAMP)) as AGE_IN_DAYS " + + "SELECT T.WORKBASKET_KEY, DATEDIFF('DAY', CURRENT_TIMESTAMP, T.${timestamp}) as AGE_IN_DAYS " + + "SELECT T.WORKBASKET_KEY, DATE_PART('DAY', T.${timestamp} - CURRENT_TIMESTAMP) as AGE_IN_DAYS " + "FROM TASK AS T LEFT JOIN ATTACHMENT AS A ON T.ID = A.TASK_ID " + "" + "" @@ -35,8 +35,8 @@ public interface MonitorMapper { + "" + "AND T.STATE IN (#{state}) " + "" - + "" - + "AND T.CLASSIFICATION_CATEGORY IN (#{category}) " + + "" + + "AND T.CLASSIFICATION_CATEGORY IN (#{category}) " + "" + "" + "AND T.DOMAIN IN (#{domain}) " @@ -69,66 +69,9 @@ public interface MonitorMapper { List getTaskCountOfWorkbaskets( @Param("workbasketIds") List workbasketIds, @Param("states") List states, - @Param("categories") List categories, - @Param("domains") List domains, - @Param("classificationIds") List classificationIds, - @Param("excludedClassificationIds") List excludedClassificationIds, - @Param("customAttributeFilter") Map customAttributeFilter, - @Param("combinedClassificationFilter") - List combinedClassificationFilter); - - @Select( - "") - @Results({ - @Result(column = "WORKBASKET_KEY", property = "key"), - @Result(column = "AGE_IN_DAYS", property = "ageInDays"), - @Result(column = "NUMBER_OF_TASKS", property = "numberOfTasks") - }) - List getTaskCountOfWorkbasketsBasedOnPlannedDate( - @Param("workbasketIds") List workbasketIds, - @Param("states") List states, - @Param("categories") List categories, + @Param("classificationCategories") List classificationCategories, @Param("domains") List domains, + @Param("timestamp") TaskTimestamp timestamp, @Param("classificationIds") List classificationIds, @Param("excludedClassificationIds") List excludedClassificationIds, @Param("customAttributeFilter") Map customAttributeFilter, @@ -138,9 +81,9 @@ public interface MonitorMapper { @Select( "