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/03/17 11:46:09 UTC
[syncope] branch 2_1_X updated: [SYNCOPE-1656] Cleanup and refactor (#327)
This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch 2_1_X
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/2_1_X by this push:
new 50e7533 [SYNCOPE-1656] Cleanup and refactor (#327)
50e7533 is described below
commit 50e75332800a63cd722e29f1422cbb449908a6e9
Author: Francesco Chicchiriccò <il...@users.noreply.github.com>
AuthorDate: Thu Mar 17 12:46:03 2022 +0100
[SYNCOPE-1656] Cleanup and refactor (#327)
---
.../syncope/core/persistence/api/dao/TaskDAO.java | 4 +-
.../core/persistence/jpa/dao/JPATaskDAO.java | 14 +++++-
.../java/pushpull/AbstractPullResultHandler.java | 57 ++++++++++++++--------
.../DefaultAnyObjectPullResultHandler.java | 4 +-
.../pushpull/DefaultGroupPullResultHandler.java | 3 +-
.../pushpull/DefaultUserPullResultHandler.java | 5 +-
6 files changed, 58 insertions(+), 29 deletions(-)
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/TaskDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/TaskDAO.java
index 8cd5f73..7486a64 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/TaskDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/TaskDAO.java
@@ -37,6 +37,8 @@ public interface TaskDAO extends DAO<Task> {
Class<? extends Task> getEntityReference(TaskType type);
+ boolean exists(TaskType type, String key);
+
<T extends Task> T find(String key);
List<SchedTask> findByDelegate(Implementation delegate);
@@ -77,7 +79,7 @@ public interface TaskDAO extends DAO<Task> {
void deleteAll(ExternalResource resource, TaskType type);
List<PropagationTaskTO> purgePropagations(
- Date since,
+ Date since,
List<ExecStatus> statuses,
List<ExternalResource> externalResources);
}
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java
index 78d97bb..c96b666 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java
@@ -127,6 +127,16 @@ public class JPATaskDAO extends AbstractDAO<Task> implements TaskDAO {
}
@Transactional(readOnly = true)
+ @Override
+ public boolean exists(final TaskType type, final String key) {
+ Query query = entityManager().createNativeQuery("SELECT id FROM Task WHERE id=? AND dtype=?");
+ query.setParameter(1, key);
+ query.setParameter(2, getEntityTableName(type));
+
+ return !query.getResultList().isEmpty();
+ }
+
+ @Transactional(readOnly = true)
@SuppressWarnings("unchecked")
@Override
public <T extends Task> T find(final String key) {
@@ -486,8 +496,8 @@ public class JPATaskDAO extends AbstractDAO<Task> implements TaskDAO {
@Override
public List<PropagationTaskTO> purgePropagations(
- final Date since,
- final List<ExecStatus> statuses,
+ final Date since,
+ final List<ExecStatus> statuses,
final List<ExternalResource> externalResources) {
StringBuilder queryString = new StringBuilder("SELECT t.task_id "
+ "FROM TaskExec t INNER JOIN Task z ON t.task_id=z.id AND z.dtype='PropagationTask' "
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
index 3416c3e..bb77ef1 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
@@ -72,6 +72,7 @@ import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
+import org.apache.syncope.common.lib.types.TaskType;
@Transactional(rollbackFor = Throwable.class)
public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHandler<PullTask, PullActions>
@@ -258,8 +259,11 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
resultStatus = Result.SUCCESS;
createRemediation(
provision.getAnyType(),
+ null,
anyTO,
- taskDAO.find(profile.getTask().getKey()) != null ? profile.getTask() : null,
+ null,
+ taskDAO.exists(TaskType.PULL, profile.getTask().getKey())
+ ? profile.getTask() : null,
result,
delta);
} else {
@@ -378,7 +382,13 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
if (profile.getTask().isRemediation()) {
// set to SUCCESS to let the incremental flow go on in case of errors
resultStatus = Result.SUCCESS;
- createRemediation(provision.getAnyType(), anyPatch, profile.getTask(), result, delta);
+ createRemediation(
+ provision.getAnyType(),
+ anyPatch,
+ taskDAO.exists(TaskType.PULL, profile.getTask().getKey())
+ ? profile.getTask() : null,
+ result,
+ delta);
} else {
resultStatus = Result.FAILURE;
}
@@ -673,7 +683,14 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
// set to SUCCESS to let the incremental flow go on in case of errors
resultStatus = Result.SUCCESS;
createRemediation(
- provision.getAnyType(), match.getAny().getKey(), profile.getTask(), result, delta);
+ provision.getAnyType(),
+ match.getAny().getKey(),
+ null,
+ null,
+ taskDAO.exists(TaskType.PULL, profile.getTask().getKey())
+ ? profile.getTask() : null,
+ result,
+ delta);
}
}
@@ -931,22 +948,21 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
furtherInput);
}
- protected Remediation createRemediation(
- final AnyType anyType,
- final String anyKey,
- final PullTask pullTask,
- final ProvisioningReport result,
- final SyncDelta delta) {
- return createRemediation(anyType, anyKey, null, null, pullTask, result, delta);
- }
-
- protected Remediation createRemediation(
- final AnyType anyType,
- final AnyTO anyTO,
- final PullTask pullTask,
- final ProvisioningReport result,
- final SyncDelta delta) {
- return createRemediation(anyType, null, anyTO, null, pullTask, result, delta);
+ protected void createRemediationIfNeeded(
+ final AnyPatch anyPatch,
+ final SyncDelta delta,
+ final ProvisioningReport result) {
+
+ if (ProvisioningReport.Status.FAILURE == result.getStatus() && profile.getTask().isRemediation()) {
+ createRemediation(
+ anyTypeDAO.find(result.getAnyType()),
+ null,
+ null,
+ anyPatch,
+ taskDAO.exists(TaskType.PULL, profile.getTask().getKey()) ? profile.getTask() : null,
+ result,
+ delta);
+ }
}
protected Remediation createRemediation(
@@ -955,6 +971,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
final PullTask pullTask,
final ProvisioningReport result,
final SyncDelta delta) {
+
return createRemediation(anyType, null, null, anyPatch, pullTask, result, delta);
}
@@ -966,6 +983,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
final PullTask pullTask,
final ProvisioningReport result,
final SyncDelta delta) {
+
Remediation entity = entityFactory.newEntity(Remediation.class);
entity.setAnyType(anyType);
@@ -984,5 +1002,4 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
return remediationDAO.save(entity);
}
-
}
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultAnyObjectPullResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultAnyObjectPullResultHandler.java
index 8948cc4..c857cff 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultAnyObjectPullResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultAnyObjectPullResultHandler.java
@@ -91,6 +91,8 @@ public class DefaultAnyObjectPullResultHandler extends AbstractPullResultHandler
Pair<AnyObjectPatch, List<PropagationStatus>> updated = anyObjectProvisioningManager.update(
anyObjectPatch, Collections.singleton(profile.getTask().getResource().getKey()), true);
- return anyPatch;
+ createRemediationIfNeeded(anyPatch, delta, result);
+
+ return updated.getLeft();
}
}
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultGroupPullResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultGroupPullResultHandler.java
index f5f3395..38bedf0 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultGroupPullResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultGroupPullResultHandler.java
@@ -104,6 +104,8 @@ public class DefaultGroupPullResultHandler extends AbstractPullResultHandler imp
Pair<GroupPatch, List<PropagationStatus>> updated = groupProvisioningManager.update(
groupPatch, Collections.singleton(profile.getTask().getResource().getKey()), true);
+ createRemediationIfNeeded(anyPatch, delta, result);
+
String groupOwner = null;
for (AttrPatch attrPatch : groupPatch.getPlainAttrs()) {
if (attrPatch.getOperation() == PatchOperation.ADD_REPLACE && attrPatch.getAttrTO() != null
@@ -118,5 +120,4 @@ public class DefaultGroupPullResultHandler extends AbstractPullResultHandler imp
return anyPatch;
}
-
}
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultUserPullResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultUserPullResultHandler.java
index 6194e28..d64c4a3 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultUserPullResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultUserPullResultHandler.java
@@ -125,10 +125,7 @@ public class DefaultUserPullResultHandler extends AbstractPullResultHandler impl
Collections.singleton(profile.getTask().getResource().getKey()),
true);
- if (ProvisioningReport.Status.FAILURE == result.getStatus() && profile.getTask().isRemediation()) {
- createRemediation(anyTypeDAO.find(result.getAnyType()), anyPatch, profile.getTask(), result,
- delta);
- }
+ createRemediationIfNeeded(anyPatch, delta, result);
return updated.getLeft();
}