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/21 13:07:57 UTC

[syncope] branch 2_1_X updated: [SYNCOPE-1669] Ensuring to create pull results for remediations (#328)

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 c2006fe  [SYNCOPE-1669] Ensuring to create pull results for remediations (#328)
c2006fe is described below

commit c2006fec29cf1bcad4455480b9cae7aae72b36a7
Author: Francesco Chicchiriccò <il...@users.noreply.github.com>
AuthorDate: Mon Mar 21 14:07:50 2022 +0100

    [SYNCOPE-1669] Ensuring to create pull results for remediations (#328)
---
 .../java/pushpull/AbstractPullResultHandler.java   | 46 +++++++++++++++-------
 .../provisioning/java/pushpull/InboundMatcher.java | 10 +++--
 2 files changed, 38 insertions(+), 18 deletions(-)

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 bb77ef1..ab1e665 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
@@ -965,17 +965,17 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
         }
     }
 
-    protected Remediation createRemediation(
+    protected void createRemediation(
             final AnyType anyType,
             final AnyPatch anyPatch,
             final PullTask pullTask,
             final ProvisioningReport result,
             final SyncDelta delta) {
 
-        return createRemediation(anyType, null, null, anyPatch, pullTask, result, delta);
+        createRemediation(anyType, null, null, anyPatch, pullTask, result, delta);
     }
 
-    protected Remediation createRemediation(
+    protected void createRemediation(
             final AnyType anyType,
             final String anyKey,
             final AnyTO anyTO,
@@ -984,22 +984,38 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
             final ProvisioningReport result,
             final SyncDelta delta) {
 
-        Remediation entity = entityFactory.newEntity(Remediation.class);
+        Remediation remediation = entityFactory.newEntity(Remediation.class);
 
-        entity.setAnyType(anyType);
-        entity.setOperation(anyPatch == null ? ResourceOperation.CREATE : ResourceOperation.UPDATE);
+        remediation.setAnyType(anyType);
+        remediation.setOperation(anyPatch == null ? ResourceOperation.CREATE : ResourceOperation.UPDATE);
         if (StringUtils.isNotBlank(anyKey)) {
-            entity.setPayload(anyKey);
+            remediation.setPayload(anyKey);
         } else if (anyTO != null) {
-            entity.setPayload(anyTO);
+            remediation.setPayload(anyTO);
         } else if (anyPatch != null) {
-            entity.setPayload(anyPatch);
+            remediation.setPayload(anyPatch);
         }
-        entity.setError(result.getMessage());
-        entity.setInstant(new Date());
-        entity.setRemoteName(delta.getObject().getName().getNameValue());
-        entity.setPullTask(pullTask);
-
-        return remediationDAO.save(entity);
+        remediation.setError(result.getMessage());
+        remediation.setInstant(new Date());
+        remediation.setRemoteName(delta.getObject().getName().getNameValue());
+        remediation.setPullTask(pullTask);
+
+        remediation = remediationDAO.save(remediation);
+
+        ProvisioningReport remediationResult = new ProvisioningReport();
+        remediationResult.setOperation(remediation.getOperation());
+        remediationResult.setAnyType(anyType.getKey());
+        remediationResult.setStatus(ProvisioningReport.Status.FAILURE);
+        remediationResult.setMessage(remediation.getError());
+        if (StringUtils.isNotBlank(anyKey)) {
+            remediationResult.setKey(anyKey);
+        } else if (anyTO != null) {
+            remediationResult.setKey(anyTO.getKey());
+        } else if (anyPatch != null) {
+            remediationResult.setKey(anyPatch.getKey());
+        }
+        remediationResult.setUidValue(delta.getUid().getUidValue());
+        remediationResult.setName(remediation.getRemoteName());
+        profile.getResults().add(remediationResult);
     }
 }
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/InboundMatcher.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/InboundMatcher.java
index 055cf36..a0d4cc8 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/InboundMatcher.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/InboundMatcher.java
@@ -324,9 +324,13 @@ public class InboundMatcher {
 
         List<PullMatch> result = new ArrayList<>();
 
-        result.addAll(searchDAO.search(rule.getSearchCond(syncDelta, provision), type).stream().
-                map(any -> rule.matching(any, syncDelta, provision)).
-                collect(Collectors.toList()));
+        try {
+            result.addAll(searchDAO.search(rule.getSearchCond(syncDelta, provision), type).stream().
+                    map(any -> rule.matching(any, syncDelta, provision)).
+                    collect(Collectors.toList()));
+        } catch (Throwable t) {
+            LOG.error("While searching via {}", rule.getClass().getName(), t);
+        }
 
         if (result.isEmpty()) {
             rule.unmatching(syncDelta, provision).ifPresent(result::add);