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();
     }