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