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ò <ilgro...@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("au...@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