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:14:01 UTC

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

commit a34ebea20cb5f9556e27cbb136adb638d75956de
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   | 48 ++++++++++++++--------
 .../provisioning/java/pushpull/InboundMatcher.java | 10 +++--
 2 files changed, 38 insertions(+), 20 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 d025ed9..6d9f610 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
@@ -972,27 +972,27 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
         }
     }
 
-    protected Remediation createRemediation(
+    protected void createRemediation(
             final AnyType anyType,
             final AnyCR anyCR,
             final PullTask pullTask,
             final ProvisioningReport result,
             final SyncDelta delta) {
 
-        return createRemediation(anyType, null, anyCR, null, pullTask, result, delta);
+        createRemediation(anyType, null, anyCR, null, pullTask, result, delta);
     }
 
-    protected Remediation createRemediation(
+    protected void createRemediation(
             final AnyType anyType,
             final AnyUR anyUR,
             final PullTask pullTask,
             final ProvisioningReport result,
             final SyncDelta delta) {
 
-        return createRemediation(anyType, null, null, anyUR, pullTask, result, delta);
+        createRemediation(anyType, null, null, anyUR, pullTask, result, delta);
     }
 
-    protected Remediation createRemediation(
+    protected void createRemediation(
             final AnyType anyType,
             final String anyKey,
             final AnyCR anyCR,
@@ -1001,22 +1001,36 @@ 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(anyUR == null ? ResourceOperation.CREATE : ResourceOperation.UPDATE);
+        remediation.setAnyType(anyType);
+        remediation.setOperation(anyUR == null ? ResourceOperation.CREATE : ResourceOperation.UPDATE);
         if (StringUtils.isNotBlank(anyKey)) {
-            entity.setPayload(anyKey);
+            remediation.setPayload(anyKey);
         } else if (anyCR != null) {
-            entity.setPayload(anyCR);
+            remediation.setPayload(anyCR);
         } else if (anyUR != null) {
-            entity.setPayload(anyUR);
+            remediation.setPayload(anyUR);
         }
-        entity.setError(result.getMessage());
-        entity.setInstant(OffsetDateTime.now());
-        entity.setRemoteName(delta.getObject().getName().getNameValue());
-        entity.setPullTask(pullTask);
-
-        return remediationDAO.save(entity);
+        remediation.setError(result.getMessage());
+        remediation.setInstant(OffsetDateTime.now());
+        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 (anyUR != null) {
+            remediationResult.setKey(anyUR.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 7ad2241..19026a2 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
@@ -331,9 +331,13 @@ public class InboundMatcher {
 
         List<PullMatch> result = new ArrayList<>();
 
-        result.addAll(anySearchDAO.search(rule.getSearchCond(syncDelta, provision), type).stream().
-                map(any -> rule.matching(any, syncDelta, provision)).
-                collect(Collectors.toList()));
+        try {
+            result.addAll(anySearchDAO.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);