You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2022/11/18 14:59:55 UTC
[syncope] branch master updated: [SYNCOPE-1713] Adding after and before parameter to Audit, Task, Report and Remediation queries (#392)
This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/master by this push:
new c17d1a0a17 [SYNCOPE-1713] Adding after and before parameter to Audit, Task, Report and Remediation queries (#392)
c17d1a0a17 is described below
commit c17d1a0a179a6b7c696b39f1bf429ecdc16725a3
Author: Francesco Chicchiriccò <il...@users.noreply.github.com>
AuthorDate: Fri Nov 18 15:59:50 2022 +0100
[SYNCOPE-1713] Adding after and before parameter to Audit, Task, Report and Remediation queries (#392)
---
.../client/console/rest/ReportRestClient.java | 6 +-
.../client/console/rest/TaskRestClient.java | 6 +-
.../rest/api/beans/AbstractTimeframeQuery.java | 107 ++++++++++++++++++
.../common/rest/api/beans/AccessTokenQuery.java | 1 -
.../syncope/common/rest/api/beans/AuditQuery.java | 4 +-
.../common/rest/api/beans/ExecDeleteQuery.java | 120 ---------------------
.../beans/{ExecListQuery.java => ExecQuery.java} | 10 +-
.../common/rest/api/beans/RemediationQuery.java | 4 +-
.../common/rest/api/service/ExecutableService.java | 7 +-
.../syncope/core/logic/RemediationLogic.java | 5 +-
.../rest/cxf/service/RemediationServiceImpl.java | 6 +-
.../core/logic/AbstractExecutableLogic.java | 13 ++-
.../org/apache/syncope/core/logic/AuditLogic.java | 7 +-
.../org/apache/syncope/core/logic/ReportLogic.java | 33 +++---
.../org/apache/syncope/core/logic/TaskLogic.java | 19 ++--
.../cxf/service/AbstractExecutableService.java | 15 ++-
.../core/rest/cxf/service/AuditServiceImpl.java | 2 +
.../core/persistence/api/dao/AuditConfDAO.java | 9 +-
.../core/persistence/api/dao/RemediationDAO.java | 8 +-
.../core/persistence/api/dao/ReportExecDAO.java | 13 ++-
.../core/persistence/api/dao/TaskExecDAO.java | 13 ++-
.../persistence/jpa/dao/MyJPAJSONAuditConfDAO.java | 18 ++--
.../persistence/jpa/dao/OJPAJSONAuditConfDAO.java | 30 +++---
.../persistence/jpa/dao/PGJPAJSONAuditConfDAO.java | 18 ++--
.../core/persistence/jpa/dao/JPAAuditConfDAO.java | 51 ++++++++-
.../persistence/jpa/dao/JPARemediationDAO.java | 18 +++-
.../core/persistence/jpa/dao/JPAReportExecDAO.java | 110 +++++++++----------
.../core/persistence/jpa/dao/JPATaskExecDAO.java | 90 +++++++---------
.../persistence/jpa/inner/RemediationTest.java | 2 +-
.../core/persistence/jpa/inner/TaskExecTest.java | 2 +-
.../syncope/core/starter/SelfKeymasterContext.java | 8 +-
.../jpa/dao/ElasticsearchAuditConfDAO.java | 30 +++++-
.../org/apache/syncope/fit/core/AuditITCase.java | 10 +-
.../syncope/fit/core/PropagationTaskITCase.java | 7 +-
.../apache/syncope/fit/core/PullTaskITCase.java | 4 +-
.../org/apache/syncope/fit/core/ReportITCase.java | 4 +-
.../apache/syncope/fit/core/SchedTaskITCase.java | 4 +-
37 files changed, 447 insertions(+), 367 deletions(-)
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
index a7af135ba0..c189b2dd76 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
@@ -40,7 +40,7 @@ import org.apache.syncope.common.lib.types.ReportExecExportFormat;
import org.apache.syncope.common.lib.types.ReportTemplateFormat;
import org.apache.syncope.common.rest.api.batch.BatchRequestItem;
import org.apache.syncope.common.rest.api.batch.BatchResponseItem;
-import org.apache.syncope.common.rest.api.beans.ExecListQuery;
+import org.apache.syncope.common.rest.api.beans.ExecQuery;
import org.apache.syncope.common.rest.api.beans.ExecSpecs;
import org.apache.syncope.common.rest.api.service.ReportService;
import org.apache.syncope.common.rest.api.service.ReportTemplateService;
@@ -112,14 +112,14 @@ public class ReportRestClient extends BaseRestClient
public List<ExecTO> listExecutions(
final String taskKey, final int page, final int size, final SortParam<String> sort) {
- return getService(ReportService.class).listExecutions(new ExecListQuery.Builder().
+ return getService(ReportService.class).listExecutions(new ExecQuery.Builder().
key(taskKey).page(page).size(size).orderBy(toOrderBy(sort)).build()).getResult();
}
@Override
public int countExecutions(final String taskKey) {
return getService(ReportService.class).
- listExecutions(new ExecListQuery.Builder().key(taskKey).page(1).size(0).build()).getTotalCount();
+ listExecutions(new ExecQuery.Builder().key(taskKey).page(1).size(0).build()).getTotalCount();
}
@Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java
index 604954da7e..97caaaba70 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java
@@ -39,7 +39,7 @@ import org.apache.syncope.common.lib.types.JobAction;
import org.apache.syncope.common.lib.types.TaskType;
import org.apache.syncope.common.rest.api.batch.BatchRequestItem;
import org.apache.syncope.common.rest.api.batch.BatchResponseItem;
-import org.apache.syncope.common.rest.api.beans.ExecListQuery;
+import org.apache.syncope.common.rest.api.beans.ExecQuery;
import org.apache.syncope.common.rest.api.beans.ExecSpecs;
import org.apache.syncope.common.rest.api.beans.TaskQuery;
import org.apache.syncope.common.rest.api.service.TaskService;
@@ -90,7 +90,7 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
@Override
public int countExecutions(final String taskKey) {
return getService(TaskService.class).
- listExecutions(new ExecListQuery.Builder().key(taskKey).page(1).size(0).build()).getTotalCount();
+ listExecutions(new ExecQuery.Builder().key(taskKey).page(1).size(0).build()).getTotalCount();
}
public static List<PropagationTaskTO> listPropagationTasks(
@@ -176,7 +176,7 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
final String taskKey, final int page, final int size, final SortParam<String> sort) {
return getService(TaskService.class).
- listExecutions(new ExecListQuery.Builder().key(taskKey).page(page).size(size).
+ listExecutions(new ExecQuery.Builder().key(taskKey).page(page).size(size).
orderBy(toOrderBy(sort)).build()).getResult();
}
diff --git a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AbstractTimeframeQuery.java b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AbstractTimeframeQuery.java
new file mode 100644
index 0000000000..3e88e4e3d6
--- /dev/null
+++ b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AbstractTimeframeQuery.java
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.common.rest.api.beans;
+
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.enums.ParameterIn;
+import io.swagger.v3.oas.annotations.media.Schema;
+import java.time.OffsetDateTime;
+import javax.ws.rs.QueryParam;
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+
+public abstract class AbstractTimeframeQuery extends AbstractQuery {
+
+ private static final long serialVersionUID = -6858655425207486223L;
+
+ protected abstract static class Builder<Q extends AbstractTimeframeQuery, B extends Builder<Q, B>>
+ extends AbstractQuery.Builder<Q, B> {
+
+ @Override
+ protected Q getInstance() {
+ return super.getInstance();
+ }
+
+ @SuppressWarnings("unchecked")
+ public B before(final OffsetDateTime before) {
+ getInstance().setBefore(before);
+ return (B) this;
+ }
+
+ @SuppressWarnings("unchecked")
+ public B after(final OffsetDateTime after) {
+ getInstance().setAfter(after);
+ return (B) this;
+ }
+ }
+
+ private OffsetDateTime before;
+
+ private OffsetDateTime after;
+
+ @Parameter(name = "before", in = ParameterIn.QUERY, schema =
+ @Schema(implementation = OffsetDateTime.class))
+ public OffsetDateTime getBefore() {
+ return before;
+ }
+
+ @QueryParam("before")
+ public void setBefore(final OffsetDateTime before) {
+ this.before = before;
+ }
+
+ @Parameter(name = "after", in = ParameterIn.QUERY, schema =
+ @Schema(implementation = OffsetDateTime.class))
+ public OffsetDateTime getAfter() {
+ return after;
+ }
+
+ @QueryParam("after")
+ public void setAfter(final OffsetDateTime after) {
+ this.after = after;
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ AbstractTimeframeQuery other = (AbstractTimeframeQuery) obj;
+ return new EqualsBuilder().
+ appendSuper(super.equals(obj)).
+ append(before, other.before).
+ append(after, other.after).
+ build();
+ }
+
+ @Override
+ public int hashCode() {
+ return new HashCodeBuilder().
+ appendSuper(super.hashCode()).
+ append(before).
+ append(after).
+ build();
+ }
+}
diff --git a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AccessTokenQuery.java b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AccessTokenQuery.java
index abdea3f897..e7e8ce3bbd 100644
--- a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AccessTokenQuery.java
+++ b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AccessTokenQuery.java
@@ -29,5 +29,4 @@ public class AccessTokenQuery extends AbstractQuery {
return new AccessTokenQuery();
}
}
-
}
diff --git a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AuditQuery.java b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AuditQuery.java
index f9f9402e4b..bb0852c883 100644
--- a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AuditQuery.java
+++ b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AuditQuery.java
@@ -27,11 +27,11 @@ import javax.ws.rs.QueryParam;
import org.apache.syncope.common.lib.types.AuditElements;
import org.apache.syncope.common.rest.api.service.JAXRSService;
-public class AuditQuery extends AbstractQuery {
+public class AuditQuery extends AbstractTimeframeQuery {
private static final long serialVersionUID = -2863334226169614417L;
- public static class Builder extends AbstractQuery.Builder<AuditQuery, Builder> {
+ public static class Builder extends AbstractTimeframeQuery.Builder<AuditQuery, Builder> {
@Override
protected AuditQuery newInstance() {
diff --git a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/ExecDeleteQuery.java b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/ExecDeleteQuery.java
deleted file mode 100644
index a3e6f0eef5..0000000000
--- a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/ExecDeleteQuery.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.common.rest.api.beans;
-
-import java.io.Serializable;
-import java.time.OffsetDateTime;
-import javax.validation.constraints.NotNull;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.QueryParam;
-
-public class ExecDeleteQuery implements Serializable {
-
- private static final long serialVersionUID = 3846547401120638351L;
-
- public static class Builder {
-
- private final ExecDeleteQuery instance = new ExecDeleteQuery();
-
- public Builder key(final String key) {
- instance.setKey(key);
- return this;
- }
-
- public Builder startedBefore(final OffsetDateTime date) {
- instance.setStartedBefore(date);
- return this;
- }
-
- public Builder startedAfter(final OffsetDateTime date) {
- instance.setStartedAfter(date);
- return this;
- }
-
- public Builder endedBefore(final OffsetDateTime date) {
- instance.setEndedBefore(date);
- return this;
- }
-
- public Builder endedAfter(final OffsetDateTime date) {
- instance.setEndedAfter(date);
- return this;
- }
-
- public ExecDeleteQuery build() {
- return instance;
- }
- }
-
- private String key;
-
- private OffsetDateTime startedBefore;
-
- private OffsetDateTime startedAfter;
-
- private OffsetDateTime endedBefore;
-
- private OffsetDateTime endedAfter;
-
- public String getKey() {
- return key;
- }
-
- @NotNull
- @PathParam("key")
- public void setKey(final String key) {
- this.key = key;
- }
-
- public OffsetDateTime getStartedBefore() {
- return startedBefore;
- }
-
- @QueryParam("startedBefore")
- public void setStartedBefore(final OffsetDateTime startedBefore) {
- this.startedBefore = startedBefore;
- }
-
- public OffsetDateTime getStartedAfter() {
- return startedAfter;
- }
-
- @QueryParam("startedAfter")
- public void setStartedAfter(final OffsetDateTime startedAfter) {
- this.startedAfter = startedAfter;
- }
-
- public OffsetDateTime getEndedBefore() {
- return endedBefore;
- }
-
- @QueryParam("endedBefore")
- public void setEndedBefore(final OffsetDateTime endedBefore) {
- this.endedBefore = endedBefore;
- }
-
- public OffsetDateTime getEndedAfter() {
- return endedAfter;
- }
-
- @QueryParam("endedAfter")
- public void setEndedAfter(final OffsetDateTime endedAfter) {
- this.endedAfter = endedAfter;
- }
-}
diff --git a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/ExecListQuery.java b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/ExecQuery.java
similarity index 88%
rename from common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/ExecListQuery.java
rename to common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/ExecQuery.java
index 9176691eae..abf444541d 100644
--- a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/ExecListQuery.java
+++ b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/ExecQuery.java
@@ -23,15 +23,15 @@ import javax.ws.rs.PathParam;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
-public class ExecListQuery extends AbstractQuery {
+public class ExecQuery extends AbstractTimeframeQuery {
private static final long serialVersionUID = -8792519310029596796L;
- public static class Builder extends AbstractQuery.Builder<ExecListQuery, Builder> {
+ public static class Builder extends AbstractTimeframeQuery.Builder<ExecQuery, Builder> {
@Override
- protected ExecListQuery newInstance() {
- return new ExecListQuery();
+ protected ExecQuery newInstance() {
+ return new ExecQuery();
}
public Builder key(final String key) {
@@ -63,7 +63,7 @@ public class ExecListQuery extends AbstractQuery {
if (getClass() != obj.getClass()) {
return false;
}
- ExecListQuery other = (ExecListQuery) obj;
+ ExecQuery other = (ExecQuery) obj;
return new EqualsBuilder().
appendSuper(super.equals(obj)).
append(key, other.key).
diff --git a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/RemediationQuery.java b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/RemediationQuery.java
index f70858c3eb..d237c49c9f 100644
--- a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/RemediationQuery.java
+++ b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/RemediationQuery.java
@@ -18,11 +18,11 @@
*/
package org.apache.syncope.common.rest.api.beans;
-public class RemediationQuery extends AbstractQuery {
+public class RemediationQuery extends AbstractTimeframeQuery {
private static final long serialVersionUID = 4000880445378096031L;
- public static class Builder extends AbstractQuery.Builder<RemediationQuery, Builder> {
+ public static class Builder extends AbstractTimeframeQuery.Builder<RemediationQuery, Builder> {
@Override
protected RemediationQuery newInstance() {
diff --git a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ExecutableService.java b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ExecutableService.java
index f242d56e19..7deec908cb 100644
--- a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ExecutableService.java
+++ b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ExecutableService.java
@@ -39,8 +39,7 @@ import org.apache.syncope.common.lib.to.JobTO;
import org.apache.syncope.common.lib.to.PagedResult;
import org.apache.syncope.common.lib.types.JobAction;
import org.apache.syncope.common.rest.api.RESTHeaders;
-import org.apache.syncope.common.rest.api.beans.ExecDeleteQuery;
-import org.apache.syncope.common.rest.api.beans.ExecListQuery;
+import org.apache.syncope.common.rest.api.beans.ExecQuery;
import org.apache.syncope.common.rest.api.beans.ExecSpecs;
public interface ExecutableService extends JAXRSService {
@@ -54,7 +53,7 @@ public interface ExecutableService extends JAXRSService {
@GET
@Path("{key}/executions")
@Produces({ MediaType.APPLICATION_JSON, RESTHeaders.APPLICATION_YAML, MediaType.APPLICATION_XML })
- PagedResult<ExecTO> listExecutions(@BeanParam ExecListQuery query);
+ PagedResult<ExecTO> listExecutions(@BeanParam ExecQuery query);
/**
* Returns the list of recently completed executions, ordered by end date descendent.
@@ -91,7 +90,7 @@ public interface ExecutableService extends JAXRSService {
description = "Batch results available, returned as Response entity"))
@Path("{key}/executions")
@Produces(RESTHeaders.MULTIPART_MIXED)
- Response deleteExecutions(@BeanParam ExecDeleteQuery query);
+ Response deleteExecutions(@BeanParam ExecQuery query);
/**
* Executes the executable matching the given specs.
diff --git a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/RemediationLogic.java b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/RemediationLogic.java
index 274a90e670..e366c1f031 100644
--- a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/RemediationLogic.java
+++ b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/RemediationLogic.java
@@ -19,6 +19,7 @@
package org.apache.syncope.core.logic;
import java.lang.reflect.Method;
+import java.time.OffsetDateTime;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@@ -73,13 +74,15 @@ public class RemediationLogic extends AbstractLogic<RemediationTO> {
@PreAuthorize("hasRole('" + IdMEntitlement.REMEDIATION_LIST + "')")
@Transactional(readOnly = true)
public Pair<Integer, List<RemediationTO>> list(
+ final OffsetDateTime before,
+ final OffsetDateTime after,
final int page,
final int size,
final List<OrderByClause> orderByClauses) {
int count = remediationDAO.count();
- List<RemediationTO> result = remediationDAO.findAll(page, size, orderByClauses).stream().
+ List<RemediationTO> result = remediationDAO.findAll(before, after, page, size, orderByClauses).stream().
map(binder::getRemediationTO).collect(Collectors.toList());
return Pair.of(count, result);
diff --git a/core/idm/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/RemediationServiceImpl.java b/core/idm/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/RemediationServiceImpl.java
index d226519281..971ac896f8 100644
--- a/core/idm/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/RemediationServiceImpl.java
+++ b/core/idm/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/RemediationServiceImpl.java
@@ -63,7 +63,11 @@ public class RemediationServiceImpl extends AbstractService implements Remediati
@Override
public PagedResult<RemediationTO> list(final RemediationQuery query) {
Pair<Integer, List<RemediationTO>> result = logic.list(
- query.getPage(), query.getSize(), getOrderByClauses(query.getOrderBy()));
+ query.getBefore(),
+ query.getAfter(),
+ query.getPage(),
+ query.getSize(),
+ getOrderByClauses(query.getOrderBy()));
return buildPagedResult(result.getRight(), query.getPage(), query.getSize(), result.getLeft());
}
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AbstractExecutableLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AbstractExecutableLogic.java
index 406ae4abe0..7f323c0704 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AbstractExecutableLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AbstractExecutableLogic.java
@@ -44,7 +44,12 @@ public abstract class AbstractExecutableLogic<T extends EntityTO> extends Abstra
public abstract ExecTO execute(String key, OffsetDateTime startAt, boolean dryRun);
public abstract Pair<Integer, List<ExecTO>> listExecutions(
- String key, int page, int size, List<OrderByClause> orderByClauses);
+ String key,
+ OffsetDateTime before,
+ OffsetDateTime after,
+ int page,
+ int size,
+ List<OrderByClause> orderByClauses);
public abstract List<ExecTO> listRecentExecutions(int max);
@@ -52,10 +57,8 @@ public abstract class AbstractExecutableLogic<T extends EntityTO> extends Abstra
public abstract List<BatchResponseItem> deleteExecutions(
String key,
- OffsetDateTime startedBefore,
- OffsetDateTime startedAfter,
- OffsetDateTime endedBefore,
- OffsetDateTime endedAfter);
+ OffsetDateTime before,
+ OffsetDateTime after);
public abstract JobTO getJob(String key);
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AuditLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AuditLogic.java
index 38d054e81d..98794a55bc 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AuditLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AuditLogic.java
@@ -20,6 +20,7 @@ package org.apache.syncope.core.logic;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
+import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
@@ -272,11 +273,13 @@ public class AuditLogic extends AbstractTransactionalLogic<AuditConfTO> {
final String subcategory,
final List<String> events,
final AuditElements.Result result,
+ final OffsetDateTime before,
+ final OffsetDateTime after,
final List<OrderByClause> orderBy) {
- int count = auditConfDAO.countEntries(entityKey, type, category, subcategory, events, result);
+ int count = auditConfDAO.countEntries(entityKey, type, category, subcategory, events, result, before, after);
List<AuditEntry> matching = auditConfDAO.searchEntries(
- entityKey, page, size, type, category, subcategory, events, result, orderBy);
+ entityKey, page, size, type, category, subcategory, events, result, before, after, orderBy);
return Pair.of(count, matching);
}
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
index 83565a2bc4..6d97d0abe5 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
@@ -275,7 +275,7 @@ public class ReportLogic extends AbstractExecutableLogic<ReportTO> {
// streaming SAX handler from a compressed byte array stream
try (ByteArrayInputStream bais = new ByteArrayInputStream(reportExec.getExecResult());
- ZipInputStream zis = new ZipInputStream(bais)) {
+ ZipInputStream zis = new ZipInputStream(bais)) {
// a single ZipEntry in the ZipInputStream (see ReportJob)
zis.getNextEntry();
@@ -348,16 +348,19 @@ public class ReportLogic extends AbstractExecutableLogic<ReportTO> {
@PreAuthorize("hasRole('" + IdRepoEntitlement.REPORT_READ + "')")
@Override
public Pair<Integer, List<ExecTO>> listExecutions(
- final String key, final int page, final int size, final List<OrderByClause> orderByClauses) {
+ final String key,
+ final OffsetDateTime before,
+ final OffsetDateTime after,
+ final int page,
+ final int size,
+ final List<OrderByClause> orderByClauses) {
- Report report = reportDAO.find(key);
- if (report == null) {
- throw new NotFoundException("Report " + key);
- }
+ Report report = Optional.ofNullable(reportDAO.find(key)).
+ orElseThrow(() -> new NotFoundException("Report " + key));
- Integer count = reportExecDAO.count(key);
+ Integer count = reportExecDAO.count(report, before, after);
- List<ExecTO> result = reportExecDAO.findAll(report, page, size, orderByClauses).stream().
+ List<ExecTO> result = reportExecDAO.findAll(report, before, after, page, size, orderByClauses).stream().
map(reportExec -> binder.getExecTO(reportExec)).collect(Collectors.toList());
return Pair.of(count, result);
@@ -387,19 +390,15 @@ public class ReportLogic extends AbstractExecutableLogic<ReportTO> {
@Override
public List<BatchResponseItem> deleteExecutions(
final String key,
- final OffsetDateTime startedBefore,
- final OffsetDateTime startedAfter,
- final OffsetDateTime endedBefore,
- final OffsetDateTime endedAfter) {
+ final OffsetDateTime before,
+ final OffsetDateTime after) {
- Report report = reportDAO.find(key);
- if (report == null) {
- throw new NotFoundException("Report " + key);
- }
+ Report report = Optional.ofNullable(reportDAO.find(key)).
+ orElseThrow(() -> new NotFoundException("Report " + key));
List<BatchResponseItem> batchResponseItems = new ArrayList<>();
- reportExecDAO.findAll(report, startedBefore, startedAfter, endedBefore, endedAfter).forEach(exec -> {
+ reportExecDAO.findAll(report, before, after, -1, -1, List.of()).forEach(exec -> {
BatchResponseItem item = new BatchResponseItem();
item.getHeaders().put(RESTHeaders.RESOURCE_KEY, List.of(exec.getKey()));
batchResponseItems.add(item);
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
index 73b1a2c302..df4838b745 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
@@ -410,7 +410,12 @@ public class TaskLogic extends AbstractExecutableLogic<TaskTO> {
@PreAuthorize("hasRole('" + IdRepoEntitlement.TASK_READ + "')")
@Override
public Pair<Integer, List<ExecTO>> listExecutions(
- final String key, final int page, final int size, final List<OrderByClause> orderByClauses) {
+ final String key,
+ final OffsetDateTime before,
+ final OffsetDateTime after,
+ final int page,
+ final int size,
+ final List<OrderByClause> orderByClauses) {
Task<?> task = taskDAO.find(key).orElseThrow(() -> new NotFoundException("Task " + key));
@@ -418,9 +423,9 @@ public class TaskLogic extends AbstractExecutableLogic<TaskTO> {
securityChecks(IdRepoEntitlement.TASK_READ, ((MacroTask) task).getRealm().getFullPath());
}
- Integer count = taskExecDAO.count(task);
+ Integer count = taskExecDAO.count(task, before, after);
- List<ExecTO> result = taskExecDAO.findAll(task, page, size, orderByClauses).stream().
+ List<ExecTO> result = taskExecDAO.findAll(task, before, after, page, size, orderByClauses).stream().
map(exec -> binder.getExecTO(exec)).collect(Collectors.toList());
return Pair.of(count, result);
@@ -466,16 +471,14 @@ public class TaskLogic extends AbstractExecutableLogic<TaskTO> {
@Override
public List<BatchResponseItem> deleteExecutions(
final String key,
- final OffsetDateTime startedBefore,
- final OffsetDateTime startedAfter,
- final OffsetDateTime endedBefore,
- final OffsetDateTime endedAfter) {
+ final OffsetDateTime before,
+ final OffsetDateTime after) {
Task<?> task = taskDAO.find(key).orElseThrow(() -> new NotFoundException("Task " + key));
List<BatchResponseItem> batchResponseItems = new ArrayList<>();
- taskExecDAO.findAll(task, startedBefore, startedAfter, endedBefore, endedAfter).forEach(exec -> {
+ taskExecDAO.findAll(task, before, after, -1, -1, List.of()).forEach(exec -> {
BatchResponseItem item = new BatchResponseItem();
item.getHeaders().put(RESTHeaders.RESOURCE_KEY, List.of(exec.getKey()));
batchResponseItems.add(item);
diff --git a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractExecutableService.java b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractExecutableService.java
index 5a71598fad..03e059b61e 100644
--- a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractExecutableService.java
+++ b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractExecutableService.java
@@ -28,8 +28,7 @@ import org.apache.syncope.common.lib.types.JobAction;
import org.apache.syncope.common.rest.api.RESTHeaders;
import org.apache.syncope.common.rest.api.batch.BatchPayloadGenerator;
import org.apache.syncope.common.rest.api.batch.BatchResponseItem;
-import org.apache.syncope.common.rest.api.beans.ExecDeleteQuery;
-import org.apache.syncope.common.rest.api.beans.ExecListQuery;
+import org.apache.syncope.common.rest.api.beans.ExecQuery;
import org.apache.syncope.common.rest.api.beans.ExecSpecs;
import org.apache.syncope.common.rest.api.service.ExecutableService;
import org.apache.syncope.common.rest.api.service.JAXRSService;
@@ -41,9 +40,11 @@ public abstract class AbstractExecutableService extends AbstractService implemen
protected abstract AbstractExecutableLogic<?> getExecutableLogic();
@Override
- public PagedResult<ExecTO> listExecutions(final ExecListQuery query) {
+ public PagedResult<ExecTO> listExecutions(final ExecQuery query) {
Pair<Integer, List<ExecTO>> result = getExecutableLogic().listExecutions(
query.getKey(),
+ query.getBefore(),
+ query.getAfter(),
query.getPage(),
query.getSize(),
getOrderByClauses(query.getOrderBy()));
@@ -61,13 +62,11 @@ public abstract class AbstractExecutableService extends AbstractService implemen
}
@Override
- public Response deleteExecutions(final ExecDeleteQuery query) {
+ public Response deleteExecutions(final ExecQuery query) {
List<BatchResponseItem> batchResponseItems = getExecutableLogic().deleteExecutions(
query.getKey(),
- query.getStartedBefore(),
- query.getStartedAfter(),
- query.getEndedBefore(),
- query.getEndedAfter());
+ query.getBefore(),
+ query.getAfter());
String boundary = "deleteExecutions_" + SecureRandomUtils.generateRandomUUID().toString();
return Response.ok(BatchPayloadGenerator.generate(
diff --git a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AuditServiceImpl.java b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AuditServiceImpl.java
index d2a382919e..70adf9cd78 100644
--- a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AuditServiceImpl.java
+++ b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AuditServiceImpl.java
@@ -79,6 +79,8 @@ public class AuditServiceImpl extends AbstractService implements AuditService {
auditQuery.getSubcategory(),
auditQuery.getEvents(),
auditQuery.getResult(),
+ auditQuery.getBefore(),
+ auditQuery.getAfter(),
getOrderByClauses(auditQuery.getOrderBy()));
return buildPagedResult(result.getRight(), auditQuery.getPage(), auditQuery.getSize(), result.getLeft());
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AuditConfDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AuditConfDAO.java
index 4e060e5499..9e569e71fe 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AuditConfDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AuditConfDAO.java
@@ -18,6 +18,7 @@
*/
package org.apache.syncope.core.persistence.api.dao;
+import java.time.OffsetDateTime;
import java.util.List;
import org.apache.syncope.common.lib.audit.AuditEntry;
import org.apache.syncope.common.lib.types.AuditElements;
@@ -30,6 +31,8 @@ public interface AuditConfDAO extends DAO<AuditConf> {
String AUDIT_ENTRY_MESSAGE_COLUMN = "MESSAGE";
+ String AUDIT_ENTRY_EVENT_DATE_COLUMN = "EVENT_DATE";
+
AuditConf find(String key);
List<AuditConf> findAll();
@@ -44,7 +47,9 @@ public interface AuditConfDAO extends DAO<AuditConf> {
String category,
String subcategory,
List<String> events,
- AuditElements.Result result);
+ AuditElements.Result result,
+ OffsetDateTime before,
+ OffsetDateTime after);
List<AuditEntry> searchEntries(
String entityKey,
@@ -55,5 +60,7 @@ public interface AuditConfDAO extends DAO<AuditConf> {
String subcategory,
List<String> events,
AuditElements.Result result,
+ OffsetDateTime before,
+ OffsetDateTime after,
List<OrderByClause> orderBy);
}
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RemediationDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RemediationDAO.java
index 5fd3d49737..62cefea481 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RemediationDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RemediationDAO.java
@@ -18,6 +18,7 @@
*/
package org.apache.syncope.core.persistence.api.dao;
+import java.time.OffsetDateTime;
import java.util.List;
import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
import org.apache.syncope.core.persistence.api.entity.AnyType;
@@ -34,7 +35,12 @@ public interface RemediationDAO extends DAO<Remediation> {
int count();
- List<Remediation> findAll(int page, int itemsPerPage, List<OrderByClause> orderByClauses);
+ List<Remediation> findAll(
+ OffsetDateTime before,
+ OffsetDateTime after,
+ int page,
+ int itemsPerPage,
+ List<OrderByClause> orderByClauses);
Remediation save(Remediation remediation);
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ReportExecDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ReportExecDAO.java
index 7fda0cd593..63e3cbf4cc 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ReportExecDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ReportExecDAO.java
@@ -34,16 +34,15 @@ public interface ReportExecDAO extends DAO<ReportExec> {
ReportExec findLatestEnded(Report report);
- int count(String reportKey);
-
- List<ReportExec> findAll(Report report, int page, int itemsPerPage, List<OrderByClause> orderByClauses);
+ int count(Report report, OffsetDateTime before, OffsetDateTime after);
List<ReportExec> findAll(
Report report,
- OffsetDateTime startedBefore,
- OffsetDateTime startedAfter,
- OffsetDateTime endedBefore,
- OffsetDateTime endedAfter);
+ OffsetDateTime before,
+ OffsetDateTime after,
+ int page,
+ int itemsPerPage,
+ List<OrderByClause> orderByClauses);
ReportExec save(ReportExec execution);
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/TaskExecDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/TaskExecDAO.java
index 55edbc6c17..5b77e1aa30 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/TaskExecDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/TaskExecDAO.java
@@ -38,16 +38,15 @@ public interface TaskExecDAO extends DAO<TaskExec<?>> {
TaskExec<?> findLatestEnded(TaskType type, Task<?> task);
- int count(Task<?> task);
-
- List<TaskExec<?>> findAll(Task<?> task, int page, int itemsPerPage, List<OrderByClause> orderByClauses);
+ int count(Task<?> task, OffsetDateTime before, OffsetDateTime after);
List<TaskExec<?>> findAll(
Task<?> task,
- OffsetDateTime startedBefore,
- OffsetDateTime startedAfter,
- OffsetDateTime endedBefore,
- OffsetDateTime endedAfter);
+ OffsetDateTime before,
+ OffsetDateTime after,
+ int page,
+ int itemsPerPage,
+ List<OrderByClause> orderByClauses);
<T extends Task<T>> TaskExec<T> save(TaskExec<T> execution);
diff --git a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONAuditConfDAO.java b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONAuditConfDAO.java
index 453fc152e1..0de9861b7a 100644
--- a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONAuditConfDAO.java
+++ b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONAuditConfDAO.java
@@ -30,7 +30,7 @@ public class MyJPAJSONAuditConfDAO extends AbstractJPAJSONLoggerDAO {
@Override
protected String doBuild(final List<ObjectNode> containers) {
if (entityKey != null) {
- query.append('(').
+ query.append(andIfNeeded()).append('(').
append(AUDIT_ENTRY_MESSAGE_COLUMN).append("->'$.before' LIKE '%").append(entityKey).
append("%' OR ").
append(AUDIT_ENTRY_MESSAGE_COLUMN).append("->'$.input' LIKE '%").append(entityKey).
@@ -40,16 +40,12 @@ public class MyJPAJSONAuditConfDAO extends AbstractJPAJSONLoggerDAO {
}
if (!containers.isEmpty()) {
- if (entityKey != null) {
- query.append(" AND (");
- }
- query.append(containers.stream().
- map(container -> "JSON_CONTAINS(" + AUDIT_ENTRY_MESSAGE_COLUMN + ", '"
- + POJOHelper.serialize(container).replace("'", "''")
- + "')").collect(Collectors.joining(" OR ")));
- if (entityKey != null) {
- query.append(')');
- }
+ query.append(andIfNeeded()).append('(').
+ append(containers.stream().
+ map(container -> "JSON_CONTAINS(" + AUDIT_ENTRY_MESSAGE_COLUMN + ", '"
+ + POJOHelper.serialize(container).replace("'", "''")
+ + "')").collect(Collectors.joining(" OR "))).
+ append(')');
}
return query.toString();
diff --git a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/OJPAJSONAuditConfDAO.java b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/OJPAJSONAuditConfDAO.java
index 6afc9a9ed8..3491c4666c 100644
--- a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/OJPAJSONAuditConfDAO.java
+++ b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/OJPAJSONAuditConfDAO.java
@@ -39,7 +39,7 @@ public class OJPAJSONAuditConfDAO extends AbstractJPAJSONLoggerDAO {
@Override
protected String doBuild(final List<ObjectNode> containers) {
if (entityKey != null) {
- query.append('(').
+ query.append(andIfNeeded()).append('(').
append("JSON_VALUE(").append(AUDIT_ENTRY_MESSAGE_COLUMN).
append(", '$.before' RETURNING VARCHAR2(32767)) LIKE '%").
append(entityKey).append("%' OR ").
@@ -52,24 +52,20 @@ public class OJPAJSONAuditConfDAO extends AbstractJPAJSONLoggerDAO {
}
if (!containers.isEmpty()) {
- if (entityKey != null) {
- query.append(" AND (");
- }
- query.append(containers.stream().filter(container -> container.has("logger")).map(container -> {
- JsonNode logger = container.get("logger");
+ query.append(andIfNeeded()).append('(').
+ append(containers.stream().filter(container -> container.has("logger")).map(container -> {
+ JsonNode logger = container.get("logger");
- List<String> clauses = new ArrayList<>();
- jsonExprItem(logger, "type").ifPresent(clauses::add);
- jsonExprItem(logger, "category").ifPresent(clauses::add);
- jsonExprItem(logger, "subcategory").ifPresent(clauses::add);
- jsonExprItem(logger, "result").ifPresent(clauses::add);
- jsonExprItem(logger, "event").ifPresent(clauses::add);
+ List<String> clauses = new ArrayList<>();
+ jsonExprItem(logger, "type").ifPresent(clauses::add);
+ jsonExprItem(logger, "category").ifPresent(clauses::add);
+ jsonExprItem(logger, "subcategory").ifPresent(clauses::add);
+ jsonExprItem(logger, "result").ifPresent(clauses::add);
+ jsonExprItem(logger, "event").ifPresent(clauses::add);
- return "JSON_EXISTS(MESSAGE, '$[*]?(" + String.join(" && ", clauses) + ")')";
- }).filter(Objects::nonNull).collect(Collectors.joining(" OR ")));
- if (entityKey != null) {
- query.append(')');
- }
+ return "JSON_EXISTS(MESSAGE, '$[*]?(" + String.join(" && ", clauses) + ")')";
+ }).filter(Objects::nonNull).collect(Collectors.joining(" OR "))).
+ append(')');
}
return query.toString();
diff --git a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAuditConfDAO.java b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAuditConfDAO.java
index c797b7d052..1892017374 100644
--- a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAuditConfDAO.java
+++ b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAuditConfDAO.java
@@ -31,7 +31,7 @@ public class PGJPAJSONAuditConfDAO extends AbstractJPAJSONLoggerDAO {
@Override
protected String doBuild(final List<ObjectNode> containers) {
if (entityKey != null) {
- query.append('(').
+ query.append(andIfNeeded()).append('(').
append(AUDIT_ENTRY_MESSAGE_COLUMN).append(" ->> 'before' LIKE '%").append(entityKey).
append("%' OR ").
append(AUDIT_ENTRY_MESSAGE_COLUMN).append(" ->> 'input' LIKE '%").append(entityKey).
@@ -41,16 +41,12 @@ public class PGJPAJSONAuditConfDAO extends AbstractJPAJSONLoggerDAO {
}
if (!containers.isEmpty()) {
- if (entityKey != null) {
- query.append(" AND (");
- }
- query.append(containers.stream().
- map(container -> AUDIT_ENTRY_MESSAGE_COLUMN + "::jsonb @> '"
- + POJOHelper.serialize(container).replace("'", "''")
- + "'::jsonb").collect(Collectors.joining(" OR ")));
- if (entityKey != null) {
- query.append(')');
- }
+ query.append(andIfNeeded()).append('(').
+ append(containers.stream().
+ map(container -> AUDIT_ENTRY_MESSAGE_COLUMN + "::jsonb @> '"
+ + POJOHelper.serialize(container).replace("'", "''")
+ + "'::jsonb").collect(Collectors.joining(" OR "))).
+ append(')');
}
return query.toString();
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAuditConfDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAuditConfDAO.java
index 2f68b4cf2d..ff8430a2c0 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAuditConfDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAuditConfDAO.java
@@ -20,6 +20,8 @@ package org.apache.syncope.core.persistence.jpa.dao;
import java.sql.Clob;
import java.sql.SQLException;
+import java.time.OffsetDateTime;
+import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@@ -45,6 +47,11 @@ public class JPAAuditConfDAO extends AbstractDAO<AuditConf> implements AuditConf
return query.length() == 0 ? " " : " AND ";
}
+ protected int setParameter(final List<Object> parameters, final Object parameter) {
+ parameters.add(parameter);
+ return parameters.size();
+ }
+
protected MessageCriteriaBuilder entityKey(final String entityKey) {
if (entityKey != null) {
query.append(andIfNeeded()).append(AUDIT_ENTRY_MESSAGE_COLUMN).
@@ -96,6 +103,22 @@ public class JPAAuditConfDAO extends AbstractDAO<AuditConf> implements AuditConf
return this;
}
+ public MessageCriteriaBuilder before(final OffsetDateTime before, final List<Object> parameters) {
+ if (before != null) {
+ query.append(andIfNeeded()).append(AUDIT_ENTRY_EVENT_DATE_COLUMN).
+ append(" <= ?").append(setParameter(parameters, before));
+ }
+ return this;
+ }
+
+ public MessageCriteriaBuilder after(final OffsetDateTime after, final List<Object> parameters) {
+ if (after != null) {
+ query.append(andIfNeeded()).append(AUDIT_ENTRY_EVENT_DATE_COLUMN).
+ append(" >= ?").append(setParameter(parameters, after));
+ }
+ return this;
+ }
+
public String build() {
return query.toString();
}
@@ -127,6 +150,16 @@ public class JPAAuditConfDAO extends AbstractDAO<AuditConf> implements AuditConf
return new MessageCriteriaBuilder().entityKey(entityKey);
}
+ protected void fillWithParameters(final Query query, final List<Object> parameters) {
+ for (int i = 0; i < parameters.size(); i++) {
+ if (parameters.get(i) instanceof Boolean) {
+ query.setParameter(i + 1, ((Boolean) parameters.get(i)) ? 1 : 0);
+ } else {
+ query.setParameter(i + 1, parameters.get(i));
+ }
+ }
+ }
+
@Override
public int countEntries(
final String entityKey,
@@ -134,8 +167,11 @@ public class JPAAuditConfDAO extends AbstractDAO<AuditConf> implements AuditConf
final String category,
final String subcategory,
final List<String> events,
- final AuditElements.Result result) {
+ final AuditElements.Result result,
+ final OffsetDateTime before,
+ final OffsetDateTime after) {
+ List<Object> parameters = new ArrayList<>();
String queryString = "SELECT COUNT(0)"
+ " FROM " + AUDIT_ENTRY_TABLE
+ " WHERE " + messageCriteriaBuilder(entityKey).
@@ -144,10 +180,13 @@ public class JPAAuditConfDAO extends AbstractDAO<AuditConf> implements AuditConf
subcategory(subcategory).
result(result).
events(events).
+ before(before, parameters).
+ after(after, parameters).
build();
- Query countQuery = entityManager().createNativeQuery(queryString);
+ Query query = entityManager().createNativeQuery(queryString);
+ fillWithParameters(query, parameters);
- return ((Number) countQuery.getSingleResult()).intValue();
+ return ((Number) query.getSingleResult()).intValue();
}
protected String select() {
@@ -165,8 +204,11 @@ public class JPAAuditConfDAO extends AbstractDAO<AuditConf> implements AuditConf
final String subcategory,
final List<String> events,
final AuditElements.Result result,
+ final OffsetDateTime before,
+ final OffsetDateTime after,
final List<OrderByClause> orderBy) {
+ List<Object> parameters = new ArrayList<>();
String queryString = "SELECT " + select()
+ " FROM " + AUDIT_ENTRY_TABLE
+ " WHERE " + messageCriteriaBuilder(entityKey).
@@ -175,6 +217,8 @@ public class JPAAuditConfDAO extends AbstractDAO<AuditConf> implements AuditConf
subcategory(subcategory).
result(result).
events(events).
+ before(before, parameters).
+ after(after, parameters).
build();
if (!orderBy.isEmpty()) {
queryString += " ORDER BY " + orderBy.stream().
@@ -183,6 +227,7 @@ public class JPAAuditConfDAO extends AbstractDAO<AuditConf> implements AuditConf
}
Query query = entityManager().createNativeQuery(queryString);
+ fillWithParameters(query, parameters);
query.setFirstResult(itemsPerPage * (page <= 0 ? 0 : page - 1));
if (itemsPerPage >= 0) {
query.setMaxResults(itemsPerPage);
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARemediationDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARemediationDAO.java
index 9eb10f6597..dbca9f6073 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARemediationDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARemediationDAO.java
@@ -19,6 +19,7 @@
package org.apache.syncope.core.persistence.jpa.dao;
import java.lang.reflect.Field;
+import java.time.OffsetDateTime;
import java.util.List;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
@@ -65,12 +66,20 @@ public class JPARemediationDAO extends AbstractDAO<Remediation> implements Remed
@Override
public List<Remediation> findAll(
+ final OffsetDateTime before,
+ final OffsetDateTime after,
final int page,
final int itemsPerPage,
final List<OrderByClause> orderByClauses) {
StringBuilder queryString = new StringBuilder(
- "SELECT e FROM " + JPARemediation.class.getSimpleName() + " e");
+ "SELECT e FROM " + JPARemediation.class.getSimpleName() + " e WHERE 1=1 ");
+ if (before != null) {
+ queryString.append(" AND e.instant <= :before");
+ }
+ if (after != null) {
+ queryString.append(" AND e.instant >= :after");
+ }
if (!orderByClauses.isEmpty()) {
queryString.append(" ORDER BY ");
@@ -102,7 +111,12 @@ public class JPARemediationDAO extends AbstractDAO<Remediation> implements Remed
}
TypedQuery<Remediation> query = entityManager().createQuery(queryString.toString(), Remediation.class);
-
+ if (before != null) {
+ query.setParameter("before", before);
+ }
+ if (after != null) {
+ query.setParameter("after", after);
+ }
query.setFirstResult(itemsPerPage * (page <= 0 ? 0 : page - 1));
if (itemsPerPage > 0) {
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportExecDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportExecDAO.java
index 4d49c67eef..1b4d7ac751 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportExecDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportExecDAO.java
@@ -47,7 +47,7 @@ public class JPAReportExecDAO extends AbstractDAO<ReportExec> implements ReportE
return query.getResultList();
}
- private ReportExec findLatest(final Report report, final String field) {
+ protected ReportExec findLatest(final Report report, final String field) {
TypedQuery<ReportExec> query = entityManager().createQuery(
"SELECT e FROM " + JPAReportExec.class.getSimpleName() + " e "
+ "WHERE e.report=:report ORDER BY e." + field + " DESC", ReportExec.class);
@@ -70,16 +70,44 @@ public class JPAReportExecDAO extends AbstractDAO<ReportExec> implements ReportE
return findLatest(report, "end");
}
+ protected StringBuilder query(
+ final StringBuilder select,
+ final OffsetDateTime before,
+ final OffsetDateTime after) {
+
+ StringBuilder query = select.
+ append(JPAReportExec.class.getSimpleName()).
+ append(" e WHERE e.report=:report ");
+ if (before != null) {
+ query.append("AND e.start <= :before ");
+ }
+ if (after != null) {
+ query.append("AND e.start >= :after ");
+ }
+ return query;
+ }
+
@Override
- public int count(final String reportKey) {
- Query countQuery = entityManager().createNativeQuery(
- "SELECT COUNT(e.id) FROM " + JPAReportExec.TABLE + " e WHERE e.report_id=?1");
- countQuery.setParameter(1, reportKey);
+ public int count(
+ final Report report,
+ final OffsetDateTime before,
+ final OffsetDateTime after) {
+
+ StringBuilder queryString = query(new StringBuilder("SELECT COUNT(e) FROM "), before, after);
- return ((Number) countQuery.getSingleResult()).intValue();
+ Query query = entityManager().createQuery(queryString.toString());
+ query.setParameter("report", report);
+ if (before != null) {
+ query.setParameter("before", before);
+ }
+ if (after != null) {
+ query.setParameter("after", after);
+ }
+
+ return ((Number) query.getSingleResult()).intValue();
}
- private static String toOrderByStatement(final List<OrderByClause> orderByClauses) {
+ protected String toOrderByStatement(final List<OrderByClause> orderByClauses) {
StringBuilder statement = new StringBuilder();
for (OrderByClause clause : orderByClauses) {
@@ -90,23 +118,33 @@ public class JPAReportExecDAO extends AbstractDAO<ReportExec> implements ReportE
}
if (statement.length() == 0) {
- statement.append("ORDER BY e.id DESC");
+ statement.append(" ORDER BY e.id DESC");
} else {
- statement.insert(0, "ORDER BY ");
+ statement.insert(0, " ORDER BY ");
}
return statement.toString();
}
@Override
- public List<ReportExec> findAll(final Report report,
- final int page, final int itemsPerPage, final List<OrderByClause> orderByClauses) {
+ public List<ReportExec> findAll(
+ final Report report,
+ final OffsetDateTime before,
+ final OffsetDateTime after,
+ final int page,
+ final int itemsPerPage,
+ final List<OrderByClause> orderByClauses) {
- String queryString =
- "SELECT e FROM " + JPAReportExec.class.getSimpleName() + " e WHERE e.report=:report "
- + toOrderByStatement(orderByClauses);
+ StringBuilder queryString = query(new StringBuilder("SELECT e FROM "), before, after).
+ append(toOrderByStatement(orderByClauses));
- TypedQuery<ReportExec> query = entityManager().createQuery(queryString, ReportExec.class);
+ TypedQuery<ReportExec> query = entityManager().createQuery(queryString.toString(), ReportExec.class);
query.setParameter("report", report);
+ if (before != null) {
+ query.setParameter("before", before);
+ }
+ if (after != null) {
+ query.setParameter("after", after);
+ }
// page starts from 1, while setFirtResult() starts from 0
query.setFirstResult(itemsPerPage * (page <= 0 ? 0 : page - 1));
@@ -118,48 +156,6 @@ public class JPAReportExecDAO extends AbstractDAO<ReportExec> implements ReportE
return query.getResultList();
}
- @Override
- public List<ReportExec> findAll(
- final Report report,
- final OffsetDateTime startedBefore,
- final OffsetDateTime startedAfter,
- final OffsetDateTime endedBefore,
- final OffsetDateTime endedAfter) {
-
- StringBuilder queryString = new StringBuilder("SELECT e FROM ").append(JPAReportExec.class.getSimpleName()).
- append(" e WHERE e.report=:report ");
-
- if (startedBefore != null) {
- queryString.append(" AND e.start < :startedBefore");
- }
- if (startedAfter != null) {
- queryString.append(" AND e.start > :startedAfter");
- }
- if (endedBefore != null) {
- queryString.append(" AND e.end < :endedBefore");
- }
- if (endedAfter != null) {
- queryString.append(" AND e.end > :endedAfter");
- }
-
- TypedQuery<ReportExec> query = entityManager().createQuery(queryString.toString(), ReportExec.class);
- query.setParameter("report", report);
- if (startedBefore != null) {
- query.setParameter("startedBefore", startedBefore);
- }
- if (startedAfter != null) {
- query.setParameter("startedAfter", startedAfter);
- }
- if (endedBefore != null) {
- query.setParameter("endedBefore", endedBefore);
- }
- if (endedAfter != null) {
- query.setParameter("endedAfter", endedAfter);
- }
-
- return query.getResultList();
- }
-
@Transactional(rollbackFor = Throwable.class)
@Override
public ReportExec save(final ReportExec execution) {
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java
index e6f08ab786..867b979c2f 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java
@@ -124,59 +124,42 @@ public class JPATaskExecDAO extends AbstractDAO<TaskExec<?>> implements TaskExec
return findLatest(type, task, "end");
}
- @SuppressWarnings("unchecked")
- @Override
- public List<TaskExec<?>> findAll(
+ protected StringBuilder query(
+ final StringBuilder select,
final Task<?> task,
- final OffsetDateTime startedBefore,
- final OffsetDateTime startedAfter,
- final OffsetDateTime endedBefore,
- final OffsetDateTime endedAfter) {
+ final OffsetDateTime before,
+ final OffsetDateTime after) {
- StringBuilder queryString = new StringBuilder("SELECT e FROM ").
+ StringBuilder query = select.
append(taskUtilsFactory.getInstance(task).getTaskExecEntity().getSimpleName()).
append(" e WHERE e.task=:task ");
-
- if (startedBefore != null) {
- queryString.append(" AND e.start < :startedBefore");
- }
- if (startedAfter != null) {
- queryString.append(" AND e.start > :startedAfter");
- }
- if (endedBefore != null) {
- queryString.append(" AND e.end < :endedBefore");
+ if (before != null) {
+ query.append("AND e.start <= :before ");
}
- if (endedAfter != null) {
- queryString.append(" AND e.end > :endedAfter");
+ if (after != null) {
+ query.append("AND e.start >= :after ");
}
+ return query;
+ }
+
+ @Override
+ public int count(
+ final Task<?> task,
+ final OffsetDateTime before,
+ final OffsetDateTime after) {
+
+ StringBuilder queryString = query(new StringBuilder("SELECT COUNT(e) FROM "), task, before, after);
Query query = entityManager().createQuery(queryString.toString());
query.setParameter("task", task);
- if (startedBefore != null) {
- query.setParameter("startedBefore", startedBefore);
- }
- if (startedAfter != null) {
- query.setParameter("startedAfter", startedAfter);
+ if (before != null) {
+ query.setParameter("before", before);
}
- if (endedBefore != null) {
- query.setParameter("endedBefore", endedBefore);
- }
- if (endedAfter != null) {
- query.setParameter("endedAfter", endedAfter);
+ if (after != null) {
+ query.setParameter("after", after);
}
- List<Object> result = query.getResultList();
- return result.stream().map(e -> (TaskExec<?>) e).collect(Collectors.toList());
- }
-
- @Override
- public int count(final Task<?> task) {
- Query countQuery = entityManager().createNativeQuery(
- "SELECT COUNT(e.id) FROM " + taskUtilsFactory.getInstance(task).getTaskExecTable() + " e "
- + "WHERE e.task_id=?1");
- countQuery.setParameter(1, task.getKey());
-
- return ((Number) countQuery.getSingleResult()).intValue();
+ return ((Number) query.getSingleResult()).intValue();
}
protected String toOrderByStatement(final List<OrderByClause> orderByClauses) {
@@ -190,9 +173,9 @@ public class JPATaskExecDAO extends AbstractDAO<TaskExec<?>> implements TaskExec
});
if (statement.length() == 0) {
- statement.append("ORDER BY e.id DESC");
+ statement.append(" ORDER BY e.id DESC");
} else {
- statement.insert(0, "ORDER BY ");
+ statement.insert(0, " ORDER BY ");
}
return statement.toString();
}
@@ -200,15 +183,24 @@ public class JPATaskExecDAO extends AbstractDAO<TaskExec<?>> implements TaskExec
@SuppressWarnings("unchecked")
@Override
public List<TaskExec<?>> findAll(
- final Task<?> task, final int page, final int itemsPerPage, final List<OrderByClause> orderByClauses) {
+ final Task<?> task,
+ final OffsetDateTime before,
+ final OffsetDateTime after,
+ final int page,
+ final int itemsPerPage,
+ final List<OrderByClause> orderByClauses) {
- String queryString = "SELECT e "
- + "FROM " + taskUtilsFactory.getInstance(task).getTaskExecEntity().getSimpleName() + " e "
- + "WHERE e.task=:task "
- + toOrderByStatement(orderByClauses);
+ StringBuilder queryString = query(new StringBuilder("SELECT e FROM "), task, before, after).
+ append(toOrderByStatement(orderByClauses));
- Query query = entityManager().createQuery(queryString);
+ Query query = entityManager().createQuery(queryString.toString());
query.setParameter("task", task);
+ if (before != null) {
+ query.setParameter("before", before);
+ }
+ if (after != null) {
+ query.setParameter("after", after);
+ }
// page starts from 1, while setFirtResult() starts from 0
query.setFirstResult(itemsPerPage * (page <= 0 ? 0 : page - 1));
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RemediationTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RemediationTest.java
index fef219960e..8199d16df0 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RemediationTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RemediationTest.java
@@ -56,7 +56,7 @@ public class RemediationTest extends AbstractTest {
@Test
public void findAll() {
- List<Remediation> remediations = remediationDAO.findAll(1, 1, List.of());
+ List<Remediation> remediations = remediationDAO.findAll(null, null, 1, 1, List.of());
assertTrue(remediations.isEmpty());
}
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskExecTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskExecTest.java
index 2474fd01ce..43e7bcbbee 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskExecTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskExecTest.java
@@ -55,7 +55,7 @@ public class TaskExecTest extends AbstractTest {
OffsetDateTime startedBefore = OffsetDateTime.of(2015, 12, 18, 0, 0, 0, 0, FormatUtils.DEFAULT_OFFSET);
- List<TaskExec<?>> execs = taskExecDAO.findAll(task, startedBefore, null, null, null);
+ List<TaskExec<?>> execs = taskExecDAO.findAll(task, startedBefore, null, -1, -1, List.of());
assertNotNull(execs);
assertEquals(1, execs.size());
}
diff --git a/core/self-keymaster-starter/src/main/java/org/apache/syncope/core/starter/SelfKeymasterContext.java b/core/self-keymaster-starter/src/main/java/org/apache/syncope/core/starter/SelfKeymasterContext.java
index 7bfabca130..557b68cfe0 100644
--- a/core/self-keymaster-starter/src/main/java/org/apache/syncope/core/starter/SelfKeymasterContext.java
+++ b/core/self-keymaster-starter/src/main/java/org/apache/syncope/core/starter/SelfKeymasterContext.java
@@ -93,9 +93,11 @@ public class SelfKeymasterContext {
@Conditional(SelfKeymasterCondition.class)
@Bean
- public Server selfKeymasterContainer(final JacksonJsonProvider jsonProvider,
- final ApplicationContext ctx,
- final Bus bus) {
+ public Server selfKeymasterContainer(
+ final JacksonJsonProvider jsonProvider,
+ final ApplicationContext ctx,
+ final Bus bus) {
+
SpringJAXRSServerFactoryBean selfKeymasterContainer = new SpringJAXRSServerFactoryBean();
selfKeymasterContainer.setBus(bus);
selfKeymasterContainer.setAddress("/keymaster");
diff --git a/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAuditConfDAO.java b/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAuditConfDAO.java
index 4746205ae2..bbe3a8537a 100644
--- a/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAuditConfDAO.java
+++ b/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAuditConfDAO.java
@@ -28,7 +28,9 @@ import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
import co.elastic.clients.elasticsearch.core.CountRequest;
import co.elastic.clients.elasticsearch.core.SearchRequest;
import co.elastic.clients.elasticsearch.core.search.Hit;
+import co.elastic.clients.json.JsonData;
import java.io.IOException;
+import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -60,7 +62,9 @@ public class ElasticsearchAuditConfDAO extends JPAAuditConfDAO {
final String category,
final String subcategory,
final List<String> events,
- final AuditElements.Result result) {
+ final AuditElements.Result result,
+ final OffsetDateTime before,
+ final OffsetDateTime after) {
List<Query> queries = new ArrayList<>();
@@ -103,6 +107,20 @@ public class ElasticsearchAuditConfDAO extends JPAAuditConfDAO {
build());
}
+ if (before != null) {
+ queries.add(new Query.Builder().
+ range(QueryBuilders.range().
+ field("instant").lte(JsonData.of(before.toInstant().toEpochMilli())).build()).
+ build());
+ }
+
+ if (after != null) {
+ queries.add(new Query.Builder().
+ range(QueryBuilders.range().
+ field("instant").gte(JsonData.of(after.toInstant().toEpochMilli())).build()).
+ build());
+ }
+
return new Query.Builder().bool(QueryBuilders.bool().must(queries).build()).build();
}
@@ -113,11 +131,13 @@ public class ElasticsearchAuditConfDAO extends JPAAuditConfDAO {
final String category,
final String subcategory,
final List<String> events,
- final AuditElements.Result result) {
+ final AuditElements.Result result,
+ final OffsetDateTime before,
+ final OffsetDateTime after) {
CountRequest request = new CountRequest.Builder().
index(ElasticsearchUtils.getAuditIndex(AuthContextUtils.getDomain())).
- query(getQuery(entityKey, type, category, subcategory, events, result)).
+ query(getQuery(entityKey, type, category, subcategory, events, result, before, after)).
build();
try {
return (int) client.count(request).count();
@@ -154,12 +174,14 @@ public class ElasticsearchAuditConfDAO extends JPAAuditConfDAO {
final String subcategory,
final List<String> events,
final AuditElements.Result result,
+ final OffsetDateTime before,
+ final OffsetDateTime after,
final List<OrderByClause> orderBy) {
SearchRequest request = new SearchRequest.Builder().
index(ElasticsearchUtils.getAuditIndex(AuthContextUtils.getDomain())).
searchType(SearchType.QueryThenFetch).
- query(getQuery(entityKey, type, category, subcategory, events, result)).
+ query(getQuery(entityKey, type, category, subcategory, events, result, before, after)).
from(itemsPerPage * (page <= 0 ? 0 : page - 1)).
size(itemsPerPage < 0 ? indexMaxResultWindow : itemsPerPage).
sort(sortBuilders(orderBy)).
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuditITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuditITCase.java
index 27b9e07771..c1ad22e173 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuditITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuditITCase.java
@@ -127,8 +127,13 @@ public class AuditITCase extends AbstractITCase {
UserTO userTO = createUser(UserITCase.getUniqueSample("audit@syncope.org")).getEntity();
assertNotNull(userTO.getKey());
- AuditQuery query = new AuditQuery.Builder().entityKey(userTO.getKey()).orderBy("event_date desc").
- page(1).size(1).build();
+ AuditQuery query = new AuditQuery.Builder().
+ entityKey(userTO.getKey()).
+ before(OffsetDateTime.now().plusSeconds(30)).
+ page(1).
+ size(1).
+ orderBy("event_date desc").
+ build();
AuditEntry entry = queryWithFailure(query, MAX_WAIT_SECONDS);
assertNotNull(entry);
USER_SERVICE.delete(userTO.getKey());
@@ -148,6 +153,7 @@ public class AuditITCase extends AbstractITCase {
category(UserLogic.class.getSimpleName()).
event("create").
result(AuditElements.Result.SUCCESS).
+ after(OffsetDateTime.now().minusSeconds(30)).
build();
AuditEntry entry = queryWithFailure(query, MAX_WAIT_SECONDS);
assertNotNull(entry);
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java
index e94150f692..4210840e1d 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java
@@ -91,7 +91,7 @@ import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.common.lib.types.SchemaType;
import org.apache.syncope.common.lib.types.TaskType;
import org.apache.syncope.common.rest.api.RESTHeaders;
-import org.apache.syncope.common.rest.api.beans.ExecListQuery;
+import org.apache.syncope.common.rest.api.beans.ExecQuery;
import org.apache.syncope.common.rest.api.beans.ExecSpecs;
import org.apache.syncope.common.rest.api.beans.ReconQuery;
import org.apache.syncope.common.rest.api.beans.TaskQuery;
@@ -605,8 +605,9 @@ public class PropagationTaskITCase extends AbstractTaskITCase {
assertFalse(task.getExecutions().isEmpty());
// check list executions
- PagedResult<ExecTO> execs = TASK_SERVICE.listExecutions(new ExecListQuery.Builder().key(
- "1e697572-b896-484c-ae7f-0c8f63fcbc6c").
+ PagedResult<ExecTO> execs = TASK_SERVICE.listExecutions(new ExecQuery.Builder().
+ key("1e697572-b896-484c-ae7f-0c8f63fcbc6c").
+ before(OffsetDateTime.now().plusSeconds(30)).
page(1).size(2).build());
assertTrue(execs.getTotalCount() >= execs.getResult().size());
}
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
index 98aef995e4..46c17e39b5 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
@@ -34,6 +34,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
+import java.time.OffsetDateTime;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
@@ -859,7 +860,8 @@ public class PullTaskITCase extends AbstractTaskITCase {
assertEquals(ClientExceptionType.Reconciliation, sce.getType());
}
Optional<RemediationTO> remediation = REMEDIATION_SERVICE.list(
- new RemediationQuery.Builder().page(1).size(1000).build()).getResult().stream().
+ new RemediationQuery.Builder().after(OffsetDateTime.now().minusSeconds(30)).
+ page(1).size(1000).build()).getResult().stream().
filter(r -> "uid=pullFromLDAP,ou=People,o=isp".equalsIgnoreCase(r.getRemoteName())).
findFirst();
assertTrue(remediation.isPresent());
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java
index 12a7f66611..0e359c9e89 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java
@@ -52,7 +52,7 @@ import org.apache.syncope.common.lib.types.ReportExecExportFormat;
import org.apache.syncope.common.lib.types.ReportExecStatus;
import org.apache.syncope.common.rest.api.RESTHeaders;
import org.apache.syncope.common.rest.api.batch.BatchResponseItem;
-import org.apache.syncope.common.rest.api.beans.ExecDeleteQuery;
+import org.apache.syncope.common.rest.api.beans.ExecQuery;
import org.apache.syncope.common.rest.api.beans.ExecSpecs;
import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
import org.apache.syncope.fit.AbstractITCase;
@@ -284,7 +284,7 @@ public class ReportITCase extends AbstractITCase {
OffsetDateTime end = OffsetDateTime.now();
Response response = REPORT_SERVICE.deleteExecutions(
- new ExecDeleteQuery.Builder().key(reportTO.getKey()).startedAfter(start).endedBefore(end).build());
+ new ExecQuery.Builder().key(reportTO.getKey()).after(start).before(end).build());
List<BatchResponseItem> batchResponseItems = parseBatchResponse(response);
assertEquals(1, batchResponseItems.size());
assertEquals(execKey, batchResponseItems.get(0).getHeaders().get(RESTHeaders.RESOURCE_KEY).get(0));
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SchedTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SchedTaskITCase.java
index c8964780c7..8ed3ff73e4 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SchedTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SchedTaskITCase.java
@@ -44,7 +44,7 @@ import org.apache.syncope.common.lib.to.TaskTO;
import org.apache.syncope.common.lib.types.IdRepoImplementationType;
import org.apache.syncope.common.lib.types.JobAction;
import org.apache.syncope.common.lib.types.TaskType;
-import org.apache.syncope.common.rest.api.beans.ExecListQuery;
+import org.apache.syncope.common.rest.api.beans.ExecQuery;
import org.apache.syncope.common.rest.api.beans.ExecSpecs;
import org.apache.syncope.common.rest.api.beans.TaskQuery;
import org.apache.syncope.common.rest.api.service.TaskService;
@@ -123,7 +123,7 @@ public class SchedTaskITCase extends AbstractTaskITCase {
});
PagedResult<ExecTO> execs =
- TASK_SERVICE.listExecutions(new ExecListQuery.Builder().key(task.getKey()).build());
+ TASK_SERVICE.listExecutions(new ExecQuery.Builder().key(task.getKey()).build());
assertEquals(1, execs.getTotalCount());
assertTrue(execs.getResult().get(0).getStart().isAfter(initial));
// round 1 sec for safety