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 13:08:37 UTC

[syncope] branch master 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 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 cc7f2f6  [SYNCOPE-1656] Cleanup and refactor (#327)
cc7f2f6 is described below

commit cc7f2f66b21479f76f632dc24eccc4c5d7c6868b
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  |  2 +
 .../core/persistence/jpa/PersistenceContext.java   |  4 +-
 .../core/persistence/jpa/dao/JPATaskDAO.java       | 10 +++++
 .../java/pushpull/AbstractPullResultHandler.java   | 47 +++++++++++++++++-----
 .../DefaultAnyObjectPullResultHandler.java         |  2 +
 .../pushpull/DefaultGroupPullResultHandler.java    |  2 +
 .../pushpull/DefaultUserPullResultHandler.java     |  9 ++---
 7 files changed, 59 insertions(+), 17 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 244084b..f4b3e74 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);
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/PersistenceContext.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/PersistenceContext.java
index 726a300..81edd76 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/PersistenceContext.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/PersistenceContext.java
@@ -204,9 +204,11 @@ public class PersistenceContext {
 
     @ConditionalOnMissingBean
     @Bean
-    public XMLContentLoader xmlContentLoader(final PersistenceProperties persistenceProperties,
+    public XMLContentLoader xmlContentLoader(
+            final PersistenceProperties persistenceProperties,
             final ResourceLoader resourceLoader,
             final Environment env) {
+
         return new XMLContentLoader(
                 resourceLoader.getResource(persistenceProperties.getViewsXML()),
                 resourceLoader.getResource(persistenceProperties.getIndexesXML()),
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 5701468..7e36c18 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
@@ -126,6 +126,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) {
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 02c12df..d025ed9 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
@@ -59,6 +59,7 @@ import org.apache.syncope.core.provisioning.api.cache.VirAttrCacheValue;
 import org.apache.syncope.core.provisioning.api.notification.NotificationManager;
 import org.apache.syncope.core.provisioning.api.pushpull.IgnoreProvisionException;
 import org.apache.syncope.common.lib.to.ProvisioningReport;
+import org.apache.syncope.common.lib.types.TaskType;
 import org.apache.syncope.core.provisioning.api.pushpull.PullActions;
 import org.apache.syncope.core.persistence.api.dao.PullMatch;
 import org.apache.syncope.core.persistence.api.dao.TaskDAO;
@@ -262,8 +263,11 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
                     resultStatus = Result.SUCCESS;
                     createRemediation(
                             provision.getAnyType(),
+                            null,
                             anyCR,
-                            taskDAO.find(profile.getTask().getKey()) != null ? profile.getTask() : null,
+                            null,
+                            taskDAO.exists(TaskType.PULL, profile.getTask().getKey())
+                            ? profile.getTask() : null,
                             result,
                             delta);
                 } else {
@@ -382,7 +386,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(), anyUR, profile.getTask(), result, delta);
+                            createRemediation(
+                                    provision.getAnyType(),
+                                    anyUR,
+                                    taskDAO.exists(TaskType.PULL, profile.getTask().getKey())
+                                    ? profile.getTask() : null,
+                                    result,
+                                    delta);
                         } else {
                             resultStatus = Result.FAILURE;
                         }
@@ -680,7 +690,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);
                         }
                     }
 
@@ -938,13 +955,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 void createRemediationIfNeeded(
+            final AnyUR anyUR,
+            final SyncDelta delta,
+            final ProvisioningReport result) {
+
+        if (ProvisioningReport.Status.FAILURE == result.getStatus() && profile.getTask().isRemediation()) {
+            createRemediation(
+                    anyTypeDAO.find(result.getAnyType()),
+                    null,
+                    null,
+                    anyUR,
+                    taskDAO.exists(TaskType.PULL, profile.getTask().getKey()) ? profile.getTask() : null,
+                    result,
+                    delta);
+        }
     }
 
     protected Remediation createRemediation(
@@ -953,6 +978,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
             final PullTask pullTask,
             final ProvisioningReport result,
             final SyncDelta delta) {
+
         return createRemediation(anyType, null, anyCR, null, pullTask, result, delta);
     }
 
@@ -962,6 +988,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
             final PullTask pullTask,
             final ProvisioningReport result,
             final SyncDelta delta) {
+
         return createRemediation(anyType, null, null, anyUR, pullTask, result, delta);
     }
 
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 e617ae5..ebb4e18 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
@@ -107,6 +107,8 @@ public class DefaultAnyObjectPullResultHandler extends AbstractPullResultHandler
                 profile.getExecutor(),
                 getContext());
 
+        createRemediationIfNeeded(req, 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 6d23fd9..f8e54d5 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
@@ -118,6 +118,8 @@ public class DefaultGroupPullResultHandler extends AbstractPullResultHandler imp
                 profile.getExecutor(),
                 getContext());
 
+        createRemediationIfNeeded(req, delta, result);
+
         String groupOwner = null;
         for (AttrPatch attrPatch : groupUR.getPlainAttrs()) {
             if (attrPatch.getOperation() == PatchOperation.ADD_REPLACE && attrPatch.getAttr() != null
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 238acdd..4c6f995 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
@@ -123,12 +123,12 @@ public class DefaultUserPullResultHandler extends AbstractPullResultHandler impl
     @Override
     protected AnyUR doUpdate(
             final AnyTO before,
-            final AnyUR anyUR,
+            final AnyUR req,
             final SyncDelta delta,
             final ProvisioningReport result) {
 
         Pair<UserUR, List<PropagationStatus>> updated = userProvisioningManager.update(
-                UserUR.class.cast(anyUR),
+                UserUR.class.cast(req),
                 result,
                 enabled(delta),
                 Set.of(profile.getTask().getResource().getKey()),
@@ -136,10 +136,7 @@ public class DefaultUserPullResultHandler extends AbstractPullResultHandler impl
                 profile.getExecutor(),
                 getContext());
 
-        if (ProvisioningReport.Status.FAILURE == result.getStatus() && profile.getTask().isRemediation()) {
-            createRemediation(anyTypeDAO.find(result.getAnyType()), anyUR, profile.getTask(), result,
-                    delta);
-        }
+        createRemediationIfNeeded(req, delta, result);
 
         return updated.getLeft();
     }