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 2018/12/07 16:35:52 UTC
[syncope] branch 2_0_X updated: [SYNCOPE-1409] Avoid double read
either before and afterwards
This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch 2_0_X
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/2_0_X by this push:
new 3145d6e [SYNCOPE-1409] Avoid double read either before and afterwards
3145d6e is described below
commit 3145d6e1ab4d7f370e6a9cf5b919e894ece65308
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Fri Dec 7 16:50:55 2018 +0100
[SYNCOPE-1409] Avoid double read either before and afterwards
---
.../org/apache/syncope/core/logic/RealmLogic.java | 14 ++--
.../org/apache/syncope/core/logic/TaskLogic.java | 16 ++++-
.../syncope/core/logic/UserWorkflowLogic.java | 10 +--
.../api/propagation/PropagationManager.java | 15 ++--
.../api/propagation/PropagationReporter.java | 9 ++-
.../api/propagation/PropagationTaskCallable.java | 3 +-
.../api/propagation/PropagationTaskExecutor.java | 12 ++--
...nTaskCallable.java => PropagationTaskInfo.java} | 27 ++++++--
.../java/DefaultAnyObjectProvisioningManager.java | 22 +++---
.../java/DefaultGroupProvisioningManager.java | 27 ++++----
.../java/DefaultUserProvisioningManager.java | 38 +++++-----
.../AbstractPropagationTaskExecutor.java | 65 +++++++++--------
.../propagation/DefaultPropagationReporter.java | 21 +++---
.../DefaultPropagationTaskCallable.java | 14 ++--
.../PriorityPropagationTaskExecutor.java | 45 ++++++------
.../java/propagation/PropagationManagerImpl.java | 36 +++++-----
.../java/pushpull/AbstractPushResultHandler.java | 81 ++++++++++++++--------
.../pushpull/DefaultRealmPullResultHandler.java | 14 ++--
.../pushpull/DefaultRealmPushResultHandler.java | 66 +++++++++++-------
.../producer/ConfirmPasswordResetProducer.java | 7 +-
.../camel/producer/CreateProducer.java | 22 +++---
.../camel/producer/DeleteProducer.java | 24 +++----
.../camel/producer/DeprovisionProducer.java | 18 +++--
.../camel/producer/ProvisionProducer.java | 18 +++--
.../camel/producer/StatusProducer.java | 9 ++-
.../camel/producer/SuspendProducer.java | 7 +-
.../camel/producer/UpdateProducer.java | 23 +++---
27 files changed, 363 insertions(+), 300 deletions(-)
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
index dcb5494..092d44d 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
@@ -28,7 +28,6 @@ import org.apache.commons.collections4.Transformer;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.common.lib.SyncopeClientException;
-import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.common.lib.to.ProvisioningResult;
import org.apache.syncope.common.lib.to.RealmTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
@@ -48,6 +47,7 @@ import org.apache.syncope.core.provisioning.api.data.RealmDataBinder;
import org.apache.syncope.core.provisioning.api.propagation.PropagationManager;
import org.apache.syncope.core.provisioning.api.propagation.PropagationReporter;
import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskExecutor;
+import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
import org.apache.syncope.core.spring.security.AuthContextUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -128,8 +128,8 @@ public class RealmLogic extends AbstractTransactionalLogic<RealmTO> {
PropagationByResource propByRes = new PropagationByResource();
propByRes.addAll(ResourceOperation.CREATE, realm.getResourceKeys());
- List<PropagationTaskTO> tasks = propagationManager.createTasks(realm, propByRes, null);
- PropagationReporter propagationReporter = taskExecutor.execute(tasks, false);
+ List<PropagationTaskInfo> taskInfos = propagationManager.createTasks(realm, propByRes, null);
+ PropagationReporter propagationReporter = taskExecutor.execute(taskInfos, false);
ProvisioningResult<RealmTO> result = new ProvisioningResult<>();
result.setEntity(binder.getRealmTO(realm, true));
@@ -150,8 +150,8 @@ public class RealmLogic extends AbstractTransactionalLogic<RealmTO> {
PropagationByResource propByRes = binder.update(realm, realmTO);
realm = realmDAO.save(realm);
- List<PropagationTaskTO> tasks = propagationManager.createTasks(realm, propByRes, null);
- PropagationReporter propagationReporter = taskExecutor.execute(tasks, false);
+ List<PropagationTaskInfo> taskInfos = propagationManager.createTasks(realm, propByRes, null);
+ PropagationReporter propagationReporter = taskExecutor.execute(taskInfos, false);
ProvisioningResult<RealmTO> result = new ProvisioningResult<>();
result.setEntity(binder.getRealmTO(realm, true));
@@ -191,8 +191,8 @@ public class RealmLogic extends AbstractTransactionalLogic<RealmTO> {
PropagationByResource propByRes = new PropagationByResource();
propByRes.addAll(ResourceOperation.DELETE, realm.getResourceKeys());
- List<PropagationTaskTO> tasks = propagationManager.createTasks(realm, propByRes, null);
- PropagationReporter propagationReporter = taskExecutor.execute(tasks, false);
+ List<PropagationTaskInfo> taskInfos = propagationManager.createTasks(realm, propByRes, null);
+ PropagationReporter propagationReporter = taskExecutor.execute(taskInfos, false);
ProvisioningResult<RealmTO> result = new ProvisioningResult<>();
result.setEntity(binder.getRealmTO(realm, true));
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
index 6d2edbf..8e0bda9 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
@@ -58,6 +58,7 @@ import org.apache.syncope.core.persistence.api.dao.ConfDAO;
import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
import org.apache.syncope.core.persistence.api.dao.NotificationDAO;
import org.apache.syncope.core.provisioning.api.notification.NotificationJobDelegate;
+import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
import org.apache.syncope.core.provisioning.java.job.TaskJob;
import org.quartz.JobDataMap;
import org.quartz.JobKey;
@@ -234,7 +235,20 @@ public class TaskLogic extends AbstractExecutableLogic<TaskTO> {
ExecTO result = null;
switch (taskUtil.getType()) {
case PROPAGATION:
- TaskExec propExec = taskExecutor.execute(binder.<PropagationTaskTO>getTaskTO(task, taskUtil, false));
+ PropagationTaskTO taskTO = binder.<PropagationTaskTO>getTaskTO(task, taskUtil, false);
+ PropagationTaskInfo taskInfo = new PropagationTaskInfo();
+ taskInfo.setKey(taskTO.getKey());
+ taskInfo.setOperation(taskTO.getOperation());
+ taskInfo.setConnObjectKey(taskTO.getConnObjectKey());
+ taskInfo.setOldConnObjectKey(taskTO.getOldConnObjectKey());
+ taskInfo.setAttributes(taskTO.getAttributes());
+ taskInfo.setResource(taskTO.getResource());
+ taskInfo.setObjectClassName(taskTO.getObjectClassName());
+ taskInfo.setAnyTypeKind(taskTO.getAnyTypeKind());
+ taskInfo.setAnyType(taskTO.getAnyType());
+ taskInfo.setEntityKey(taskTO.getEntityKey());
+
+ TaskExec propExec = taskExecutor.execute(taskInfo);
result = binder.getExecTO(propExec);
break;
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/UserWorkflowLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/UserWorkflowLogic.java
index 4fb0c64..3c33887 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/UserWorkflowLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/UserWorkflowLogic.java
@@ -23,7 +23,6 @@ import java.util.List;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.common.lib.patch.AnyPatch;
import org.apache.syncope.common.lib.patch.UserPatch;
-import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.common.lib.to.UserTO;
import org.apache.syncope.common.lib.to.WorkflowFormTO;
import org.apache.syncope.common.lib.to.WorkflowTaskTO;
@@ -36,6 +35,7 @@ import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskExecu
import org.apache.syncope.core.workflow.api.UserWorkflowAdapter;
import org.apache.syncope.core.provisioning.api.WorkflowResult;
import org.apache.syncope.core.provisioning.api.data.UserDataBinder;
+import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Component;
@@ -76,12 +76,12 @@ public class UserWorkflowLogic extends AbstractTransactionalLogic<WorkflowFormTO
UserPatch userPatch = new UserPatch();
userPatch.setKey(userTO.getKey());
- List<PropagationTaskTO> tasks = propagationManager.getUserUpdateTasks(
+ List<PropagationTaskInfo> taskInfos = propagationManager.getUserUpdateTasks(
new WorkflowResult<>(
Pair.<UserPatch, Boolean>of(userPatch, null),
updated.getPropByRes(), updated.getPerformedTasks()));
- taskExecutor.execute(tasks, false);
+ taskExecutor.execute(taskInfos, false);
return binder.getUserTO(updated.getResult());
}
@@ -120,13 +120,13 @@ public class UserWorkflowLogic extends AbstractTransactionalLogic<WorkflowFormTO
if (updated.getResult() instanceof UserPatch
&& updated.getPropByRes() != null && !updated.getPropByRes().isEmpty()) {
- List<PropagationTaskTO> tasks = propagationManager.getUserUpdateTasks(
+ List<PropagationTaskInfo> taskInfos = propagationManager.getUserUpdateTasks(
new WorkflowResult<>(
Pair.of((UserPatch) updated.getResult(), Boolean.TRUE),
updated.getPropByRes(),
updated.getPerformedTasks()));
- taskExecutor.execute(tasks, false);
+ taskExecutor.execute(taskInfos, false);
}
return binder.getUserTO(updated.getResult().getKey());
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java
index 00c311b..3ca159d 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java
@@ -23,7 +23,6 @@ import java.util.List;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.common.lib.patch.UserPatch;
import org.apache.syncope.common.lib.to.AttrTO;
-import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.core.persistence.api.entity.Realm;
@@ -42,7 +41,7 @@ public interface PropagationManager {
* @param noPropResourceKeys external resources performing not to be considered for propagation
* @return list of propagation tasks
*/
- List<PropagationTaskTO> getCreateTasks(
+ List<PropagationTaskInfo> getCreateTasks(
AnyTypeKind kind,
String key,
Boolean enable,
@@ -61,7 +60,7 @@ public interface PropagationManager {
* @param noPropResourceKeys external resources not to be considered for propagation
* @return list of propagation tasks
*/
- List<PropagationTaskTO> getUserCreateTasks(
+ List<PropagationTaskInfo> getUserCreateTasks(
String key,
String password,
Boolean enable,
@@ -81,7 +80,7 @@ public interface PropagationManager {
* @param noPropResourceKeys external resource keys not to be considered for propagation
* @return list of propagation tasks
*/
- List<PropagationTaskTO> getUpdateTasks(
+ List<PropagationTaskInfo> getUpdateTasks(
AnyTypeKind kind,
String key,
boolean changePwd,
@@ -98,7 +97,7 @@ public interface PropagationManager {
* @param noPropResourceKeys external resources not to be considered for propagation
* @return list of propagation tasks
*/
- List<PropagationTaskTO> getUserUpdateTasks(
+ List<PropagationTaskInfo> getUserUpdateTasks(
WorkflowResult<Pair<UserPatch, Boolean>> wfResult,
boolean changePwd,
Collection<String> noPropResourceKeys);
@@ -110,7 +109,7 @@ public interface PropagationManager {
* @param wfResult user to be propagated (and info associated), as per result from workflow
* @return list of propagation tasks
*/
- List<PropagationTaskTO> getUserUpdateTasks(WorkflowResult<Pair<UserPatch, Boolean>> wfResult);
+ List<PropagationTaskInfo> getUserUpdateTasks(WorkflowResult<Pair<UserPatch, Boolean>> wfResult);
/**
* Create the delete tasks for the any object from each resource associated, unless in {@code noPropResourceKeys}.
@@ -121,7 +120,7 @@ public interface PropagationManager {
* @param noPropResourceKeys external resource keys not to be considered for propagation
* @return list of propagation tasks
*/
- List<PropagationTaskTO> getDeleteTasks(
+ List<PropagationTaskInfo> getDeleteTasks(
AnyTypeKind kind,
String key,
PropagationByResource propByRes,
@@ -135,7 +134,7 @@ public interface PropagationManager {
* @param noPropResourceKeys external resource keys not to be considered for propagation
* @return list of propagation tasks
*/
- List<PropagationTaskTO> createTasks(
+ List<PropagationTaskInfo> createTasks(
Realm realm,
PropagationByResource propByRes,
Collection<String> noPropResourceKeys);
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationReporter.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationReporter.java
index a27f02a..9b33c1f 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationReporter.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationReporter.java
@@ -21,7 +21,6 @@ package org.apache.syncope.core.provisioning.api.propagation;
import java.util.Collection;
import java.util.List;
import org.apache.syncope.common.lib.to.PropagationStatus;
-import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.common.lib.types.PropagationTaskExecStatus;
import org.identityconnectors.framework.common.objects.ConnectorObject;
@@ -34,22 +33,22 @@ public interface PropagationReporter {
* Report propagation status after executions in case blocking failure (e.g. on priority resources).
*
* @param failingResource failing resource name
- * @param tasks propagation tasks performed before failure
+ * @param taskInfos propagation tasks performed before failure
*/
- void onPriorityResourceFailure(String failingResource, Collection<PropagationTaskTO> tasks);
+ void onPriorityResourceFailure(String failingResource, Collection<PropagationTaskInfo> taskInfos);
/**
* Report propagation status after executions in case of success or non-blocking failure
* (e.g. on non-priority resources).
*
- * @param propagationTask propagation task
+ * @param taskInfo propagation task
* @param execStatus propagation execution status
* @param failureReason propagation execution failure message
* @param beforeObj retrieved connector object before operation execution
* @param afterObj retrieved connector object after operation execution
*/
void onSuccessOrNonPriorityResourceFailures(
- PropagationTaskTO propagationTask,
+ PropagationTaskInfo taskInfo,
PropagationTaskExecStatus execStatus,
String failureReason,
ConnectorObject beforeObj,
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationTaskCallable.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationTaskCallable.java
index 9c4f107..6dd3de8 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationTaskCallable.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationTaskCallable.java
@@ -19,12 +19,11 @@
package org.apache.syncope.core.provisioning.api.propagation;
import java.util.concurrent.Callable;
-import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.core.persistence.api.entity.task.TaskExec;
public interface PropagationTaskCallable extends Callable<TaskExec> {
- void setTaskTO(PropagationTaskTO taskTO);
+ void setTaskInfo(PropagationTaskInfo taskInfo);
void setReporter(PropagationReporter reporter);
}
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationTaskExecutor.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationTaskExecutor.java
index e331aa7..a000d78 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationTaskExecutor.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationTaskExecutor.java
@@ -44,28 +44,28 @@ public interface PropagationTaskExecutor {
/**
* Execute the given PropagationTask and returns the generated {@link TaskExec}.
*
- * @param task to be executed
+ * @param taskInfo to be executed
* @return the generated TaskExec
*/
- TaskExec execute(PropagationTaskTO task);
+ TaskExec execute(PropagationTaskInfo taskInfo);
/**
* Execute the given PropagationTask and returns the generated {@link TaskExec}.
*
- * @param task to be executed
+ * @param taskInfo to be executed
* @param reporter to report propagation execution status
* @return the generated TaskExec
*/
- TaskExec execute(PropagationTaskTO task, PropagationReporter reporter);
+ TaskExec execute(PropagationTaskInfo taskInfo, PropagationReporter reporter);
/**
* Execute a collection of PropagationTask objects.
* The process is interrupted as soon as the result of the communication with a resource with non-null priority is
* in error.
*
- * @param tasks to be execute, in given order
+ * @param taskInfos to be execute, in given order
* @param nullPriorityAsync asynchronously executes tasks related to resources with no priority
* @return reporter to report propagation execution status
*/
- PropagationReporter execute(Collection<PropagationTaskTO> tasks, boolean nullPriorityAsync);
+ PropagationReporter execute(Collection<PropagationTaskInfo> taskInfos, boolean nullPriorityAsync);
}
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationTaskCallable.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationTaskInfo.java
similarity index 61%
copy from core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationTaskCallable.java
copy to core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationTaskInfo.java
index 9c4f107..4f18a50 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationTaskCallable.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationTaskInfo.java
@@ -18,13 +18,30 @@
*/
package org.apache.syncope.core.provisioning.api.propagation;
-import java.util.concurrent.Callable;
import org.apache.syncope.common.lib.to.PropagationTaskTO;
-import org.apache.syncope.core.persistence.api.entity.task.TaskExec;
+import org.identityconnectors.framework.common.objects.ConnectorObject;
-public interface PropagationTaskCallable extends Callable<TaskExec> {
+public class PropagationTaskInfo extends PropagationTaskTO {
- void setTaskTO(PropagationTaskTO taskTO);
+ private static final long serialVersionUID = -2879861567335503099L;
- void setReporter(PropagationReporter reporter);
+ private boolean read;
+
+ private ConnectorObject beforeObj;
+
+ public boolean isRead() {
+ return read;
+ }
+
+ public void setRead(final boolean read) {
+ this.read = read;
+ }
+
+ public ConnectorObject getBeforeObj() {
+ return beforeObj;
+ }
+
+ public void setBeforeObj(final ConnectorObject beforeObj) {
+ this.beforeObj = beforeObj;
+ }
}
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAnyObjectProvisioningManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAnyObjectProvisioningManager.java
index a1b8b3f..917b8d7 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAnyObjectProvisioningManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAnyObjectProvisioningManager.java
@@ -27,7 +27,6 @@ import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.common.lib.patch.AnyObjectPatch;
import org.apache.syncope.common.lib.to.PropagationStatus;
import org.apache.syncope.common.lib.to.AnyObjectTO;
-import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
@@ -39,6 +38,7 @@ import org.apache.syncope.core.provisioning.api.propagation.PropagationReporter;
import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskExecutor;
import org.apache.syncope.core.provisioning.api.VirAttrHandler;
import org.apache.syncope.core.provisioning.api.propagation.PropagationException;
+import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
import org.apache.syncope.core.workflow.api.AnyObjectWorkflowAdapter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Propagation;
@@ -75,14 +75,14 @@ public class DefaultAnyObjectProvisioningManager implements AnyObjectProvisionin
WorkflowResult<String> created = awfAdapter.create(anyObjectTO);
- List<PropagationTaskTO> tasks = propagationManager.getCreateTasks(
+ List<PropagationTaskInfo> taskInfos = propagationManager.getCreateTasks(
AnyTypeKind.ANY_OBJECT,
created.getResult(),
null,
created.getPropByRes(),
anyObjectTO.getVirAttrs(),
excludedResources);
- PropagationReporter propagationReporter = taskExecutor.execute(tasks, nullPriorityAsync);
+ PropagationReporter propagationReporter = taskExecutor.execute(taskInfos, nullPriorityAsync);
return Pair.of(created.getResult(), propagationReporter.getStatuses());
}
@@ -101,7 +101,7 @@ public class DefaultAnyObjectProvisioningManager implements AnyObjectProvisionin
WorkflowResult<AnyObjectPatch> updated = awfAdapter.update(anyObjectPatch);
- List<PropagationTaskTO> tasks = propagationManager.getUpdateTasks(
+ List<PropagationTaskInfo> taskInfos = propagationManager.getUpdateTasks(
AnyTypeKind.ANY_OBJECT,
updated.getResult().getKey(),
false,
@@ -109,7 +109,7 @@ public class DefaultAnyObjectProvisioningManager implements AnyObjectProvisionin
updated.getPropByRes(),
anyObjectPatch.getVirAttrs(),
excludedResources);
- PropagationReporter propagationReporter = taskExecutor.execute(tasks, nullPriorityAsync);
+ PropagationReporter propagationReporter = taskExecutor.execute(taskInfos, nullPriorityAsync);
return Pair.of(updated.getResult(), propagationReporter.getStatuses());
}
@@ -132,12 +132,12 @@ public class DefaultAnyObjectProvisioningManager implements AnyObjectProvisionin
// information could only be available after awfAdapter.delete(), which
// will also effectively remove user from db, thus making virtually
// impossible by NotificationManager to fetch required user information
- List<PropagationTaskTO> tasks = propagationManager.getDeleteTasks(
+ List<PropagationTaskInfo> taskInfos = propagationManager.getDeleteTasks(
AnyTypeKind.ANY_OBJECT,
key,
propByRes,
excludedResources);
- PropagationReporter propagationReporter = taskExecutor.execute(tasks, nullPriorityAsync);
+ PropagationReporter propagationReporter = taskExecutor.execute(taskInfos, nullPriorityAsync);
try {
awfAdapter.delete(key);
@@ -165,7 +165,7 @@ public class DefaultAnyObjectProvisioningManager implements AnyObjectProvisionin
PropagationByResource propByRes = new PropagationByResource();
propByRes.addAll(ResourceOperation.UPDATE, resources);
- List<PropagationTaskTO> tasks = propagationManager.getUpdateTasks(
+ List<PropagationTaskInfo> taskInfos = propagationManager.getUpdateTasks(
AnyTypeKind.ANY_OBJECT,
key,
false,
@@ -173,7 +173,7 @@ public class DefaultAnyObjectProvisioningManager implements AnyObjectProvisionin
propByRes,
null,
null);
- PropagationReporter propagationReporter = taskExecutor.execute(tasks, nullPriorityAsync);
+ PropagationReporter propagationReporter = taskExecutor.execute(taskInfos, nullPriorityAsync);
return propagationReporter.getStatuses();
}
@@ -185,12 +185,12 @@ public class DefaultAnyObjectProvisioningManager implements AnyObjectProvisionin
PropagationByResource propByRes = new PropagationByResource();
propByRes.addAll(ResourceOperation.DELETE, resources);
- List<PropagationTaskTO> tasks = propagationManager.getDeleteTasks(
+ List<PropagationTaskInfo> taskInfos = propagationManager.getDeleteTasks(
AnyTypeKind.ANY_OBJECT,
key,
propByRes,
CollectionUtils.removeAll(anyObjectDAO.findAllResourceKeys(key), resources));
- PropagationReporter propagationReporter = taskExecutor.execute(tasks, nullPriorityAsync);
+ PropagationReporter propagationReporter = taskExecutor.execute(taskInfos, nullPriorityAsync);
return propagationReporter.getStatuses();
}
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java
index 941b588..fd6218e 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java
@@ -32,7 +32,6 @@ import org.apache.syncope.common.lib.patch.GroupPatch;
import org.apache.syncope.common.lib.to.AttrTO;
import org.apache.syncope.common.lib.to.PropagationStatus;
import org.apache.syncope.common.lib.to.GroupTO;
-import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.persistence.api.dao.GroupDAO;
@@ -44,6 +43,7 @@ import org.apache.syncope.core.provisioning.api.propagation.PropagationReporter;
import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskExecutor;
import org.apache.syncope.core.provisioning.api.VirAttrHandler;
import org.apache.syncope.core.provisioning.api.data.GroupDataBinder;
+import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
import org.apache.syncope.core.workflow.api.GroupWorkflowAdapter;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@@ -72,7 +72,7 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager
public Pair<String, List<PropagationStatus>> create(final GroupTO groupTO, final boolean nullPriorityAsync) {
WorkflowResult<String> created = gwfAdapter.create(groupTO);
- List<PropagationTaskTO> tasks = propagationManager.getCreateTasks(
+ List<PropagationTaskInfo> tasks = propagationManager.getCreateTasks(
AnyTypeKind.GROUP,
created.getResult(),
null,
@@ -100,7 +100,7 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager
groupOwnerMap.put(created.getResult(), groupOwner.getValues().iterator().next());
}
- List<PropagationTaskTO> tasks = propagationManager.getCreateTasks(
+ List<PropagationTaskInfo> tasks = propagationManager.getCreateTasks(
AnyTypeKind.GROUP,
created.getResult(),
null,
@@ -126,7 +126,7 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager
WorkflowResult<GroupPatch> updated = gwfAdapter.update(groupPatch);
- List<PropagationTaskTO> tasks = propagationManager.getUpdateTasks(
+ List<PropagationTaskInfo> tasks = propagationManager.getUpdateTasks(
AnyTypeKind.GROUP,
updated.getResult().getKey(),
false,
@@ -149,14 +149,14 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager
public List<PropagationStatus> delete(
final String key, final Set<String> excludedResources, final boolean nullPriorityAsync) {
- List<PropagationTaskTO> tasks = new ArrayList<>();
+ List<PropagationTaskInfo> taskInfos = new ArrayList<>();
// Generate propagation tasks for deleting users and any objects from group resources,
// if they are on those resources only because of the reason being deleted (see SYNCOPE-357)
for (Map.Entry<String, PropagationByResource> entry
: groupDataBinder.findUsersWithTransitiveResources(key).entrySet()) {
- tasks.addAll(propagationManager.getDeleteTasks(
+ taskInfos.addAll(propagationManager.getDeleteTasks(
AnyTypeKind.USER,
entry.getKey(),
entry.getValue(),
@@ -165,7 +165,7 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager
for (Map.Entry<String, PropagationByResource> entry
: groupDataBinder.findAnyObjectsWithTransitiveResources(key).entrySet()) {
- tasks.addAll(propagationManager.getDeleteTasks(
+ taskInfos.addAll(propagationManager.getDeleteTasks(
AnyTypeKind.ANY_OBJECT,
entry.getKey(),
entry.getValue(),
@@ -173,13 +173,13 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager
}
// Generate propagation tasks for deleting this group from resources
- tasks.addAll(propagationManager.getDeleteTasks(
+ taskInfos.addAll(propagationManager.getDeleteTasks(
AnyTypeKind.GROUP,
key,
null,
null));
- PropagationReporter propagationReporter = taskExecutor.execute(tasks, nullPriorityAsync);
+ PropagationReporter propagationReporter = taskExecutor.execute(taskInfos, nullPriorityAsync);
gwfAdapter.delete(key);
@@ -198,7 +198,7 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager
PropagationByResource propByRes = new PropagationByResource();
propByRes.addAll(ResourceOperation.UPDATE, resources);
- List<PropagationTaskTO> tasks = propagationManager.getUpdateTasks(
+ List<PropagationTaskInfo> taskInfos = propagationManager.getUpdateTasks(
AnyTypeKind.GROUP,
key,
false,
@@ -206,7 +206,7 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager
propByRes,
null,
null);
- PropagationReporter propagationReporter = taskExecutor.execute(tasks, nullPriorityAsync);
+ PropagationReporter propagationReporter = taskExecutor.execute(taskInfos, nullPriorityAsync);
return propagationReporter.getStatuses();
}
@@ -218,12 +218,12 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager
PropagationByResource propByRes = new PropagationByResource();
propByRes.addAll(ResourceOperation.DELETE, resources);
- List<PropagationTaskTO> tasks = propagationManager.getDeleteTasks(
+ List<PropagationTaskInfo> taskInfos = propagationManager.getDeleteTasks(
AnyTypeKind.GROUP,
key,
propByRes,
CollectionUtils.removeAll(groupDAO.findAllResourceKeys(key), resources));
- PropagationReporter propagationReporter = taskExecutor.execute(tasks, nullPriorityAsync);
+ PropagationReporter propagationReporter = taskExecutor.execute(taskInfos, nullPriorityAsync);
return propagationReporter.getStatuses();
}
@@ -232,5 +232,4 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager
public String link(final GroupPatch groupPatch) {
return gwfAdapter.update(groupPatch).getResult().getKey();
}
-
}
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
index 802ccfb..7bb1a6a 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
@@ -32,7 +32,6 @@ import org.apache.syncope.common.lib.patch.StatusPatch;
import org.apache.syncope.common.lib.patch.StringPatchItem;
import org.apache.syncope.common.lib.patch.UserPatch;
import org.apache.syncope.common.lib.to.PropagationStatus;
-import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.common.lib.to.UserTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.PatchOperation;
@@ -48,6 +47,7 @@ import org.apache.syncope.core.provisioning.api.propagation.PropagationManager;
import org.apache.syncope.core.provisioning.api.propagation.PropagationReporter;
import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskExecutor;
import org.apache.syncope.core.provisioning.api.VirAttrHandler;
+import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
import org.apache.syncope.core.provisioning.api.pushpull.ProvisioningReport;
import org.apache.syncope.core.workflow.api.UserWorkflowAdapter;
import org.slf4j.Logger;
@@ -100,14 +100,14 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
WorkflowResult<Pair<String, Boolean>> created =
uwfAdapter.create(userTO, disablePwdPolicyCheck, enabled, storePassword);
- List<PropagationTaskTO> tasks = propagationManager.getUserCreateTasks(
+ List<PropagationTaskInfo> taskInfos = propagationManager.getUserCreateTasks(
created.getResult().getLeft(),
userTO.getPassword(),
created.getResult().getRight(),
created.getPropByRes(),
userTO.getVirAttrs(),
excludedResources);
- PropagationReporter propagationReporter = taskExecutor.execute(tasks, nullPriorityAsync);
+ PropagationReporter propagationReporter = taskExecutor.execute(taskInfos, nullPriorityAsync);
return Pair.of(created.getResult().getLeft(), propagationReporter.getStatuses());
}
@@ -116,8 +116,8 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
public Pair<UserPatch, List<PropagationStatus>> update(final UserPatch userPatch, final boolean nullPriorityAsync) {
WorkflowResult<Pair<UserPatch, Boolean>> updated = uwfAdapter.update(userPatch);
- List<PropagationTaskTO> tasks = propagationManager.getUserUpdateTasks(updated);
- PropagationReporter propagationReporter = taskExecutor.execute(tasks, nullPriorityAsync);
+ List<PropagationTaskInfo> taskInfos = propagationManager.getUserUpdateTasks(updated);
+ PropagationReporter propagationReporter = taskExecutor.execute(taskInfos, nullPriorityAsync);
return Pair.of(updated.getResult().getLeft(), propagationReporter.getStatuses());
}
@@ -174,9 +174,9 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
}
}
- List<PropagationTaskTO> tasks = propagationManager.getUserUpdateTasks(
+ List<PropagationTaskInfo> taskInfos = propagationManager.getUserUpdateTasks(
updated, updated.getResult().getLeft().getPassword() != null, excludedResources);
- PropagationReporter propagationReporter = taskExecutor.execute(tasks, nullPriorityAsync);
+ PropagationReporter propagationReporter = taskExecutor.execute(taskInfos, nullPriorityAsync);
return Pair.of(updated.getResult().getLeft(), propagationReporter.getStatuses());
}
@@ -199,12 +199,12 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
// information could only be available after uwfAdapter.delete(), which
// will also effectively remove user from db, thus making virtually
// impossible by NotificationManager to fetch required user information
- List<PropagationTaskTO> tasks = propagationManager.getDeleteTasks(
+ List<PropagationTaskInfo> taskInfos = propagationManager.getDeleteTasks(
AnyTypeKind.USER,
key,
propByRes,
excludedResources);
- PropagationReporter propagationReporter = taskExecutor.execute(tasks, nullPriorityAsync);
+ PropagationReporter propagationReporter = taskExecutor.execute(taskInfos, nullPriorityAsync);
try {
uwfAdapter.delete(key);
@@ -264,7 +264,7 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
PropagationByResource propByRes = new PropagationByResource();
propByRes.addAll(ResourceOperation.UPDATE, statusPatch.getResources());
- List<PropagationTaskTO> tasks = propagationManager.getUpdateTasks(
+ List<PropagationTaskInfo> taskInfos = propagationManager.getUpdateTasks(
AnyTypeKind.USER,
statusPatch.getKey(),
false,
@@ -272,7 +272,7 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
propByRes,
null,
null);
- PropagationReporter propagationReporter = taskExecutor.execute(tasks, nullPriorityAsync);
+ PropagationReporter propagationReporter = taskExecutor.execute(taskInfos, nullPriorityAsync);
return propagationReporter.getStatuses();
}
@@ -286,11 +286,11 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
UserPatch userPatch = new UserPatch();
userPatch.setKey(updated.getLeft().getResult());
- List<PropagationTaskTO> tasks = propagationManager.getUserUpdateTasks(
+ List<PropagationTaskInfo> taskInfos = propagationManager.getUserUpdateTasks(
new WorkflowResult<Pair<UserPatch, Boolean>>(
Pair.of(userPatch, Boolean.FALSE),
updated.getLeft().getPropByRes(), updated.getLeft().getPerformedTasks()));
- taskExecutor.execute(tasks, false);
+ taskExecutor.execute(taskInfos, false);
}
}
@@ -327,8 +327,8 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
WorkflowResult<Pair<UserPatch, Boolean>> wfResult = new WorkflowResult<Pair<UserPatch, Boolean>>(
ImmutablePair.of(userPatch, (Boolean) null), propByRes, "update");
- List<PropagationTaskTO> tasks = propagationManager.getUserUpdateTasks(wfResult, changePwd, null);
- PropagationReporter propagationReporter = taskExecutor.execute(tasks, nullPriorityAsync);
+ List<PropagationTaskInfo> taskInfos = propagationManager.getUserUpdateTasks(wfResult, changePwd, null);
+ PropagationReporter propagationReporter = taskExecutor.execute(taskInfos, nullPriorityAsync);
return propagationReporter.getStatuses();
}
@@ -340,12 +340,12 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
PropagationByResource propByRes = new PropagationByResource();
propByRes.set(ResourceOperation.DELETE, resources);
- List<PropagationTaskTO> tasks = propagationManager.getDeleteTasks(
+ List<PropagationTaskInfo> taskInfos = propagationManager.getDeleteTasks(
AnyTypeKind.USER,
key,
propByRes,
CollectionUtils.removeAll(userDAO.findAllResourceKeys(key), resources));
- PropagationReporter propagationReporter = taskExecutor.execute(tasks, nullPriorityAsync);
+ PropagationReporter propagationReporter = taskExecutor.execute(taskInfos, nullPriorityAsync);
return propagationReporter.getStatuses();
}
@@ -359,8 +359,8 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
public void confirmPasswordReset(final String key, final String token, final String password) {
WorkflowResult<Pair<UserPatch, Boolean>> updated = uwfAdapter.confirmPasswordReset(key, token, password);
- List<PropagationTaskTO> tasks = propagationManager.getUserUpdateTasks(updated);
+ List<PropagationTaskInfo> taskInfos = propagationManager.getUserUpdateTasks(updated);
- taskExecutor.execute(tasks, false);
+ taskExecutor.execute(taskInfos, false);
}
}
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java
index 64d3f10..8facc39 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java
@@ -32,7 +32,6 @@ import java.util.concurrent.atomic.AtomicReference;
import org.apache.commons.collections4.IteratorUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.common.lib.to.ExecTO;
-import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.common.lib.types.AuditElements;
import org.apache.syncope.common.lib.types.AuditElements.Result;
import org.apache.syncope.common.lib.types.PropagationTaskExecStatus;
@@ -69,6 +68,7 @@ import org.apache.syncope.core.provisioning.api.cache.VirAttrCacheValue;
import org.apache.syncope.core.provisioning.api.data.TaskDataBinder;
import org.apache.syncope.core.provisioning.api.notification.NotificationManager;
import org.apache.syncope.core.provisioning.api.propagation.PropagationException;
+import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
import org.apache.syncope.core.provisioning.java.utils.MappingUtils;
import org.apache.syncope.core.spring.security.AuthContextUtils;
@@ -362,29 +362,29 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
}
@Override
- public TaskExec execute(final PropagationTaskTO task) {
- return execute(task, null);
+ public TaskExec execute(final PropagationTaskInfo taskInfo) {
+ return execute(taskInfo, null);
}
@Override
- public TaskExec execute(final PropagationTaskTO taskTO, final PropagationReporter reporter) {
+ public TaskExec execute(final PropagationTaskInfo taskInfo, final PropagationReporter reporter) {
PropagationTask task;
- if (taskTO.getKey() == null) {
+ if (taskInfo.getKey() == null) {
task = entityFactory.newEntity(PropagationTask.class);
- task.setResource(resourceDAO.find(taskTO.getResource()));
- task.setObjectClassName(taskTO.getObjectClassName());
- task.setAnyTypeKind(taskTO.getAnyTypeKind());
- task.setAnyType(taskTO.getAnyType());
- task.setEntityKey(taskTO.getEntityKey());
- task.setOperation(taskTO.getOperation());
- task.setConnObjectKey(taskTO.getConnObjectKey());
- task.setOldConnObjectKey(taskTO.getOldConnObjectKey());
+ task.setResource(resourceDAO.find(taskInfo.getResource()));
+ task.setObjectClassName(taskInfo.getObjectClassName());
+ task.setAnyTypeKind(taskInfo.getAnyTypeKind());
+ task.setAnyType(taskInfo.getAnyType());
+ task.setEntityKey(taskInfo.getEntityKey());
+ task.setOperation(taskInfo.getOperation());
+ task.setConnObjectKey(taskInfo.getConnObjectKey());
+ task.setOldConnObjectKey(taskInfo.getOldConnObjectKey());
} else {
- task = taskDAO.find(taskTO.getKey());
+ task = taskDAO.find(taskInfo.getKey());
}
Set<Attribute> attributes = new HashSet<>();
- if (StringUtils.isNotBlank(taskTO.getAttributes())) {
- attributes.addAll(Arrays.asList(POJOHelper.deserialize(taskTO.getAttributes(), Attribute[].class)));
+ if (StringUtils.isNotBlank(taskInfo.getAttributes())) {
+ attributes.addAll(Arrays.asList(POJOHelper.deserialize(taskInfo.getAttributes(), Attribute[].class)));
}
task.setAttributes(attributes);
@@ -416,12 +416,16 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
orgUnit = task.getResource().getOrgUnit();
connector = connFactory.getConnector(task.getResource());
- // Try to read remote object BEFORE any actual operation
- beforeObj = provision == null && orgUnit == null
- ? null
- : orgUnit == null
- ? getRemoteObject(task, connector, provision, false)
- : getRemoteObject(task, connector, orgUnit, false);
+ if (!taskInfo.isRead()) {
+ // Try to read remote object BEFORE any actual operation
+ beforeObj = provision == null && orgUnit == null
+ ? null
+ : orgUnit == null
+ ? getRemoteObject(task, connector, provision, false)
+ : getRemoteObject(task, connector, orgUnit, false);
+ } else {
+ beforeObj = taskInfo.getBeforeObj();
+ }
for (PropagationActions action : actions) {
action.before(task, beforeObj);
@@ -522,7 +526,7 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
if (reporter != null) {
reporter.onSuccessOrNonPriorityResourceFailures(
- taskTO,
+ taskInfo,
PropagationTaskExecStatus.valueOf(execution.getStatus()),
failureReason,
beforeObj,
@@ -552,7 +556,7 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
result,
beforeObj,
new Object[] { execTO, afterObj },
- taskTO);
+ taskInfo);
auditManager.audit(
AuthContextUtils.getUsername(),
@@ -563,23 +567,26 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
result,
beforeObj,
new Object[] { execTO, afterObj },
- taskTO);
+ taskInfo);
}
return execution;
}
protected abstract void doExecute(
- Collection<PropagationTaskTO> tasks, PropagationReporter reporter, boolean nullPriorityAsync);
+ Collection<PropagationTaskInfo> taskInfos, PropagationReporter reporter, boolean nullPriorityAsync);
@Override
- public PropagationReporter execute(final Collection<PropagationTaskTO> tasks, final boolean nullPriorityAsync) {
+ public PropagationReporter execute(
+ final Collection<PropagationTaskInfo> taskInfos,
+ final boolean nullPriorityAsync) {
+
PropagationReporter reporter = new DefaultPropagationReporter();
try {
- doExecute(tasks, reporter, nullPriorityAsync);
+ doExecute(taskInfos, reporter, nullPriorityAsync);
} catch (PropagationException e) {
LOG.error("Error propagation priority resource", e);
- reporter.onPriorityResourceFailure(e.getResourceName(), tasks);
+ reporter.onPriorityResourceFailure(e.getResourceName(), taskInfos);
}
return reporter;
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DefaultPropagationReporter.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DefaultPropagationReporter.java
index 28adcc1..3d10139 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DefaultPropagationReporter.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DefaultPropagationReporter.java
@@ -25,10 +25,10 @@ import java.util.List;
import org.apache.commons.collections4.IterableUtils;
import org.apache.commons.collections4.Predicate;
import org.apache.syncope.common.lib.to.PropagationStatus;
-import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.common.lib.types.PropagationTaskExecStatus;
import org.apache.syncope.core.persistence.api.entity.task.PropagationTask;
import org.apache.syncope.core.provisioning.api.propagation.PropagationReporter;
+import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
import org.apache.syncope.core.provisioning.java.utils.ConnObjectUtils;
import org.identityconnectors.framework.common.objects.ConnectorObject;
import org.slf4j.Logger;
@@ -54,14 +54,14 @@ public class DefaultPropagationReporter implements PropagationReporter {
@Override
public void onSuccessOrNonPriorityResourceFailures(
- final PropagationTaskTO taskTO,
+ final PropagationTaskInfo taskInfo,
final PropagationTaskExecStatus executionStatus,
final String failureReason,
final ConnectorObject beforeObj,
final ConnectorObject afterObj) {
PropagationStatus status = new PropagationStatus();
- status.setResource(taskTO.getResource());
+ status.setResource(taskInfo.getResource());
status.setStatus(executionStatus);
status.setFailureReason(failureReason);
@@ -77,22 +77,25 @@ public class DefaultPropagationReporter implements PropagationReporter {
}
@Override
- public void onPriorityResourceFailure(final String failingResource, final Collection<PropagationTaskTO> tasks) {
+ public void onPriorityResourceFailure(
+ final String failingResource,
+ final Collection<PropagationTaskInfo> taskInfos) {
+
LOG.debug("Propagation error: {} priority resource failed to propagate", failingResource);
- final PropagationTaskTO taskTO = IterableUtils.find(tasks, new Predicate<PropagationTaskTO>() {
+ final PropagationTaskInfo taskInfo = IterableUtils.find(taskInfos, new Predicate<PropagationTaskInfo>() {
@Override
- public boolean evaluate(final PropagationTaskTO taskTO) {
- return taskTO.getResource().equals(failingResource);
+ public boolean evaluate(final PropagationTaskInfo taskInfo) {
+ return taskInfo.getResource().equals(failingResource);
}
});
- if (taskTO == null) {
+ if (taskInfo == null) {
LOG.error("Could not find {} for {}", PropagationTask.class.getName(), failingResource);
} else {
PropagationStatus status = new PropagationStatus();
- status.setResource(taskTO.getResource());
+ status.setResource(taskInfo.getResource());
status.setStatus(PropagationTaskExecStatus.FAILURE);
status.setFailureReason(
"Propagation error: " + failingResource + " priority resource failed to propagate.");
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DefaultPropagationTaskCallable.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DefaultPropagationTaskCallable.java
index 9f7aff4..da9b97a 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DefaultPropagationTaskCallable.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DefaultPropagationTaskCallable.java
@@ -19,13 +19,13 @@
package org.apache.syncope.core.provisioning.java.propagation;
import java.util.Collection;
-import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.core.spring.security.AuthContextUtils;
import org.apache.syncope.core.spring.security.SyncopeAuthenticationDetails;
import org.apache.syncope.core.persistence.api.entity.task.TaskExec;
import org.apache.syncope.core.provisioning.api.propagation.PropagationReporter;
import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskCallable;
import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskExecutor;
+import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -48,7 +48,7 @@ public class DefaultPropagationTaskCallable implements PropagationTaskCallable {
protected final Collection<? extends GrantedAuthority> authorities;
- protected PropagationTaskTO taskTO;
+ protected PropagationTaskInfo taskInfo;
protected PropagationReporter reporter;
@@ -60,8 +60,8 @@ public class DefaultPropagationTaskCallable implements PropagationTaskCallable {
}
@Override
- public void setTaskTO(final PropagationTaskTO taskTO) {
- this.taskTO = taskTO;
+ public void setTaskInfo(final PropagationTaskInfo taskInfo) {
+ this.taskInfo = taskInfo;
}
@Override
@@ -77,11 +77,11 @@ public class DefaultPropagationTaskCallable implements PropagationTaskCallable {
auth.setDetails(new SyncopeAuthenticationDetails(domain));
SecurityContextHolder.getContext().setAuthentication(auth);
- LOG.debug("Execution started for {}", taskTO);
+ LOG.debug("Execution started for {}", taskInfo);
- TaskExec execution = taskExecutor.execute(taskTO, reporter);
+ TaskExec execution = taskExecutor.execute(taskInfo, reporter);
- LOG.debug("Execution completed for {}, {}", taskTO, execution);
+ LOG.debug("Execution completed for {}, {}", taskInfo, execution);
return execution;
}
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PriorityPropagationTaskExecutor.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PriorityPropagationTaskExecutor.java
index 9fc95ca..7a7d47c 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PriorityPropagationTaskExecutor.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PriorityPropagationTaskExecutor.java
@@ -34,7 +34,6 @@ import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import javax.annotation.Resource;
import org.apache.commons.collections4.CollectionUtils;
-import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.common.lib.types.PropagationTaskExecStatus;
import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
import org.apache.syncope.core.spring.ApplicationContextProvider;
@@ -42,6 +41,7 @@ import org.apache.syncope.core.persistence.api.entity.task.TaskExec;
import org.apache.syncope.core.provisioning.api.propagation.PropagationException;
import org.apache.syncope.core.provisioning.api.propagation.PropagationReporter;
import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskCallable;
+import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
@@ -61,17 +61,17 @@ public class PriorityPropagationTaskExecutor extends AbstractPropagationTaskExec
* Creates new instances of {@link PropagationTaskCallable} for usage with
* {@link java.util.concurrent.CompletionService}.
*
- * @param taskTO to be executed
+ * @param taskInfo to be executed
* @param reporter to report propagation execution status
* @return new {@link PropagationTaskCallable} instance for usage with
* {@link java.util.concurrent.CompletionService}
*/
protected PropagationTaskCallable newPropagationTaskCallable(
- final PropagationTaskTO taskTO, final PropagationReporter reporter) {
+ final PropagationTaskInfo taskInfo, final PropagationReporter reporter) {
PropagationTaskCallable callable = (PropagationTaskCallable) ApplicationContextProvider.getBeanFactory().
createBean(DefaultPropagationTaskCallable.class, AbstractBeanDefinition.AUTOWIRE_BY_TYPE, false);
- callable.setTaskTO(taskTO);
+ callable.setTaskInfo(taskInfo);
callable.setReporter(reporter);
return callable;
@@ -79,19 +79,19 @@ public class PriorityPropagationTaskExecutor extends AbstractPropagationTaskExec
@Override
protected void doExecute(
- final Collection<PropagationTaskTO> tasks,
+ final Collection<PropagationTaskInfo> taskInfos,
final PropagationReporter reporter,
final boolean nullPriorityAsync) {
- final Map<PropagationTaskTO, ExternalResource> taskToResource = new HashMap<>(tasks.size());
- List<PropagationTaskTO> prioritizedTasks = new ArrayList<>();
+ final Map<PropagationTaskInfo, ExternalResource> taskToResource = new HashMap<>(taskInfos.size());
+ List<PropagationTaskInfo> prioritizedTasks = new ArrayList<>();
int connRequestTimeout = 60;
- for (PropagationTaskTO task : tasks) {
- ExternalResource resource = resourceDAO.find(task.getResource());
- taskToResource.put(task, resource);
+ for (PropagationTaskInfo taskInfo : taskInfos) {
+ ExternalResource resource = resourceDAO.find(taskInfo.getResource());
+ taskToResource.put(taskInfo, resource);
if (resource.getPropagationPriority() != null) {
- prioritizedTasks.add(task);
+ prioritizedTasks.add(taskInfo);
if (resource.getConnector().getConnRequestTimeout() != null
&& connRequestTimeout < resource.getConnector().getConnRequestTimeout()) {
@@ -104,11 +104,11 @@ public class PriorityPropagationTaskExecutor extends AbstractPropagationTaskExec
Collections.sort(prioritizedTasks, new PriorityComparator(taskToResource));
LOG.debug("Propagation tasks sorted by priority, for serial execution: {}", prioritizedTasks);
- Collection<PropagationTaskTO> concurrentTasks = CollectionUtils.subtract(tasks, prioritizedTasks);
+ Collection<PropagationTaskInfo> concurrentTasks = CollectionUtils.subtract(taskInfos, prioritizedTasks);
LOG.debug("Propagation tasks for concurrent execution: {}", concurrentTasks);
// first process priority resources sequentially and fail as soon as any propagation failure is reported
- for (PropagationTaskTO task : prioritizedTasks) {
+ for (PropagationTaskInfo task : prioritizedTasks) {
TaskExec execution = null;
PropagationTaskExecStatus execStatus;
try {
@@ -125,12 +125,12 @@ public class PriorityPropagationTaskExecutor extends AbstractPropagationTaskExec
// then process non-priority resources concurrently...
final CompletionService<TaskExec> completionService = new ExecutorCompletionService<>(executor);
- Map<PropagationTaskTO, Future<TaskExec>> nullPriority = new HashMap<>(concurrentTasks.size());
- for (PropagationTaskTO task : concurrentTasks) {
+ Map<PropagationTaskInfo, Future<TaskExec>> nullPriority = new HashMap<>(concurrentTasks.size());
+ for (PropagationTaskInfo taskInfo : concurrentTasks) {
try {
nullPriority.put(
- task,
- completionService.submit(newPropagationTaskCallable(task, reporter)));
+ taskInfo,
+ completionService.submit(newPropagationTaskCallable(taskInfo, reporter)));
} catch (Exception e) {
LOG.error("Unexpected exception", e);
}
@@ -138,7 +138,7 @@ public class PriorityPropagationTaskExecutor extends AbstractPropagationTaskExec
// ...waiting for all callables to complete, if async processing was not required
if (!nullPriority.isEmpty()) {
if (nullPriorityAsync) {
- for (Map.Entry<PropagationTaskTO, Future<TaskExec>> entry : nullPriority.entrySet()) {
+ for (Map.Entry<PropagationTaskInfo, Future<TaskExec>> entry : nullPriority.entrySet()) {
reporter.onSuccessOrNonPriorityResourceFailures(
entry.getKey(), PropagationTaskExecStatus.CREATED, null, null, null);
}
@@ -174,18 +174,18 @@ public class PriorityPropagationTaskExecutor extends AbstractPropagationTaskExec
/**
* Compare propagation tasks according to related ExternalResource's priority.
*/
- protected static class PriorityComparator implements Comparator<PropagationTaskTO>, Serializable {
+ protected static class PriorityComparator implements Comparator<PropagationTaskInfo>, Serializable {
private static final long serialVersionUID = -1969355670784448878L;
- private final Map<PropagationTaskTO, ExternalResource> taskToResource;
+ private final Map<PropagationTaskInfo, ExternalResource> taskToResource;
- public PriorityComparator(final Map<PropagationTaskTO, ExternalResource> taskToResource) {
+ public PriorityComparator(final Map<PropagationTaskInfo, ExternalResource> taskToResource) {
this.taskToResource = taskToResource;
}
@Override
- public int compare(final PropagationTaskTO task1, final PropagationTaskTO task2) {
+ public int compare(final PropagationTaskInfo task1, final PropagationTaskInfo task2) {
int prop1 = taskToResource.get(task1).getPropagationPriority();
int prop2 = taskToResource.get(task2).getPropagationPriority();
@@ -196,5 +196,4 @@ public class PriorityPropagationTaskExecutor extends AbstractPropagationTaskExec
: -1;
}
}
-
}
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java
index 1e5ab43..0111e2a 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java
@@ -33,7 +33,6 @@ import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.common.lib.patch.StringPatchItem;
import org.apache.syncope.common.lib.patch.UserPatch;
import org.apache.syncope.common.lib.to.AttrTO;
-import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
@@ -58,6 +57,7 @@ import org.apache.syncope.core.persistence.api.entity.resource.Item;
import org.apache.syncope.core.persistence.api.entity.resource.OrgUnit;
import org.apache.syncope.core.persistence.api.entity.resource.Provision;
import org.apache.syncope.core.provisioning.api.MappingManager;
+import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
import org.apache.syncope.core.provisioning.java.utils.MappingUtils;
import org.identityconnectors.framework.common.objects.Attribute;
@@ -135,7 +135,7 @@ public class PropagationManagerImpl implements PropagationManager {
}
@Override
- public List<PropagationTaskTO> getCreateTasks(
+ public List<PropagationTaskInfo> getCreateTasks(
final AnyTypeKind kind,
final String key,
final Boolean enable,
@@ -147,7 +147,7 @@ public class PropagationManagerImpl implements PropagationManager {
}
@Override
- public List<PropagationTaskTO> getUserCreateTasks(
+ public List<PropagationTaskInfo> getUserCreateTasks(
final String key,
final String password,
final Boolean enable,
@@ -158,7 +158,7 @@ public class PropagationManagerImpl implements PropagationManager {
return getCreateTasks(userDAO.authFind(key), password, enable, propByRes, vAttrs, noPropResourceKeys);
}
- protected List<PropagationTaskTO> getCreateTasks(
+ protected List<PropagationTaskInfo> getCreateTasks(
final Any<?> any,
final String password,
final Boolean enable,
@@ -167,7 +167,7 @@ public class PropagationManagerImpl implements PropagationManager {
final Collection<String> noPropResourceKeys) {
if (propByRes == null || propByRes.isEmpty()) {
- return Collections.<PropagationTaskTO>emptyList();
+ return Collections.<PropagationTaskInfo>emptyList();
}
if (noPropResourceKeys != null) {
@@ -178,7 +178,7 @@ public class PropagationManagerImpl implements PropagationManager {
}
@Override
- public List<PropagationTaskTO> getUpdateTasks(
+ public List<PropagationTaskInfo> getUpdateTasks(
final AnyTypeKind kind,
final String key,
final boolean changePwd,
@@ -191,7 +191,7 @@ public class PropagationManagerImpl implements PropagationManager {
}
@Override
- public List<PropagationTaskTO> getUserUpdateTasks(
+ public List<PropagationTaskInfo> getUserUpdateTasks(
final WorkflowResult<Pair<UserPatch, Boolean>> wfResult,
final boolean changePwd,
final Collection<String> noPropResourceKeys) {
@@ -209,11 +209,11 @@ public class PropagationManagerImpl implements PropagationManager {
}
@Override
- public List<PropagationTaskTO> getUserUpdateTasks(final WorkflowResult<Pair<UserPatch, Boolean>> wfResult) {
+ public List<PropagationTaskInfo> getUserUpdateTasks(final WorkflowResult<Pair<UserPatch, Boolean>> wfResult) {
UserPatch userPatch = wfResult.getResult().getKey();
// Propagate password update only to requested resources
- List<PropagationTaskTO> tasks = new ArrayList<>();
+ List<PropagationTaskInfo> tasks = new ArrayList<>();
if (userPatch.getPassword() == null) {
// a. no specific password propagation request: generate propagation tasks for any resource associated
tasks = getUserUpdateTasks(wfResult, false, null);
@@ -256,7 +256,7 @@ public class PropagationManagerImpl implements PropagationManager {
return tasks;
}
- protected List<PropagationTaskTO> getUpdateTasks(
+ protected List<PropagationTaskInfo> getUpdateTasks(
final Any<?> any,
final String password,
final boolean changePwd,
@@ -280,7 +280,7 @@ public class PropagationManagerImpl implements PropagationManager {
}
@Override
- public List<PropagationTaskTO> getDeleteTasks(
+ public List<PropagationTaskInfo> getDeleteTasks(
final AnyTypeKind kind,
final String key,
final PropagationByResource propByRes,
@@ -303,7 +303,7 @@ public class PropagationManagerImpl implements PropagationManager {
return getDeleteTasks(any, localPropByRes, noPropResourceKeys);
}
- protected List<PropagationTaskTO> getDeleteTasks(
+ protected List<PropagationTaskInfo> getDeleteTasks(
final Any<?> any,
final PropagationByResource propByRes,
final Collection<String> noPropResourceKeys) {
@@ -323,7 +323,7 @@ public class PropagationManagerImpl implements PropagationManager {
* @param vAttrs virtual attributes to be set
* @return list of propagation tasks created
*/
- protected List<PropagationTaskTO> createTasks(final Any<?> any,
+ protected List<PropagationTaskInfo> createTasks(final Any<?> any,
final String password, final boolean changePwd,
final Boolean enable, final boolean deleteOnResource, final PropagationByResource propByRes,
final Collection<AttrTO> vAttrs) {
@@ -367,7 +367,7 @@ public class PropagationManagerImpl implements PropagationManager {
}
LOG.debug("With virtual attributes {}:\n{}\n{}", any, propByRes, vAttrMap);
- List<PropagationTaskTO> tasks = new ArrayList<>();
+ List<PropagationTaskInfo> tasks = new ArrayList<>();
for (Map.Entry<String, ResourceOperation> entry : propByRes.asMap().entrySet()) {
ExternalResource resource = resourceDAO.find(entry.getKey());
@@ -385,7 +385,7 @@ public class PropagationManagerImpl implements PropagationManager {
LOG.warn("Requesting propagation for {} but no propagation mapping provided for {}",
any.getType(), resource);
} else {
- PropagationTaskTO task = new PropagationTaskTO();
+ PropagationTaskInfo task = new PropagationTaskInfo();
task.setResource(resource.getKey());
task.setObjectClassName(provision.getObjectClass().getObjectClassValue());
task.setAnyTypeKind(any.getType().getKind());
@@ -441,7 +441,7 @@ public class PropagationManagerImpl implements PropagationManager {
}
@Override
- public List<PropagationTaskTO> createTasks(
+ public List<PropagationTaskInfo> createTasks(
final Realm realm,
final PropagationByResource propByRes,
final Collection<String> noPropResourceKeys) {
@@ -456,7 +456,7 @@ public class PropagationManagerImpl implements PropagationManager {
propByRes.purge();
LOG.debug("After purge {}:\n{}", realm, propByRes);
- List<PropagationTaskTO> tasks = new ArrayList<>();
+ List<PropagationTaskInfo> tasks = new ArrayList<>();
for (Map.Entry<String, ResourceOperation> entry : propByRes.asMap().entrySet()) {
ExternalResource resource = resourceDAO.find(entry.getKey());
@@ -470,7 +470,7 @@ public class PropagationManagerImpl implements PropagationManager {
LOG.warn("Requesting propagation for {} but no ConnObjectLink provided for {}",
realm.getFullPath(), resource);
} else {
- PropagationTaskTO task = new PropagationTaskTO();
+ PropagationTaskInfo task = new PropagationTaskInfo();
task.setResource(resource.getKey());
task.setObjectClassName(orgUnit.getObjectClass().getObjectClassValue());
task.setEntityKey(realm.getKey());
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java
index 298760a..0cc10fe 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java
@@ -53,12 +53,14 @@ import org.apache.syncope.core.provisioning.api.TimeoutException;
import org.apache.syncope.core.provisioning.api.event.AfterHandlingEvent;
import org.apache.syncope.core.provisioning.api.notification.NotificationManager;
import org.apache.syncope.core.provisioning.api.propagation.PropagationReporter;
+import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
import org.apache.syncope.core.provisioning.api.pushpull.IgnoreProvisionException;
import org.apache.syncope.core.provisioning.api.pushpull.SyncopePushResultHandler;
import org.apache.syncope.core.provisioning.api.utils.EntityUtils;
import org.apache.syncope.core.provisioning.java.job.AfterHandlingJob;
import org.apache.syncope.core.provisioning.java.utils.MappingUtils;
import org.identityconnectors.framework.common.objects.AttributeBuilder;
+import org.apache.syncope.core.provisioning.java.propagation.DefaultPropagationReporter;
import org.apache.syncope.core.spring.security.AuthContextUtils;
import org.identityconnectors.framework.common.objects.ConnectorObject;
import org.identityconnectors.framework.common.objects.ObjectClass;
@@ -114,31 +116,45 @@ public abstract class AbstractPushResultHandler extends AbstractSyncopeResultHan
PropagationByResource propByRes = new PropagationByResource();
propByRes.add(ResourceOperation.UPDATE, profile.getTask().getResource().getKey());
- PropagationReporter reporter = taskExecutor.execute(propagationManager.getUpdateTasks(
+ List<PropagationTaskInfo> taskInfos = propagationManager.getUpdateTasks(
any.getType().getKind(),
any.getKey(),
changepwd,
enable,
propByRes,
null,
- noPropResources),
- false);
- reportPropagation(result, reporter);
+ noPropResources);
+ if (!taskInfos.isEmpty()) {
+ taskInfos.get(0).setRead(true);
+ taskInfos.get(0).setBeforeObj(beforeObj);
+ PropagationReporter reporter = new DefaultPropagationReporter();
+ taskExecutor.execute(taskInfos.get(0), reporter);
+ reportPropagation(result, reporter);
+ }
}
- protected void deprovision(final Any<?> any, final ProvisioningReport result) {
+ protected void deprovision(final Any<?> any, final ConnectorObject beforeObj, final ProvisioningReport result) {
AnyTO before = getAnyTO(any.getKey());
List<String> noPropResources = new ArrayList<>(before.getResources());
noPropResources.remove(profile.getTask().getResource().getKey());
- PropagationReporter reporter = taskExecutor.execute(propagationManager.getDeleteTasks(
+ PropagationByResource propByRes = new PropagationByResource();
+ propByRes.add(ResourceOperation.DELETE, profile.getTask().getResource().getKey());
+ propByRes.addOldConnObjectKey(profile.getTask().getResource().getKey(), beforeObj.getUid().getUidValue());
+
+ List<PropagationTaskInfo> taskInfos = propagationManager.getDeleteTasks(
any.getType().getKind(),
any.getKey(),
- null,
- noPropResources),
- false);
- reportPropagation(result, reporter);
+ propByRes,
+ noPropResources);
+ if (!taskInfos.isEmpty()) {
+ taskInfos.get(0).setRead(true);
+ taskInfos.get(0).setBeforeObj(beforeObj);
+ PropagationReporter reporter = new DefaultPropagationReporter();
+ taskExecutor.execute(taskInfos.get(0), reporter);
+ reportPropagation(result, reporter);
+ }
}
protected void provision(final Any<?> any, final Boolean enable, final ProvisioningReport result) {
@@ -150,15 +166,20 @@ public abstract class AbstractPushResultHandler extends AbstractSyncopeResultHan
PropagationByResource propByRes = new PropagationByResource();
propByRes.add(ResourceOperation.CREATE, profile.getTask().getResource().getKey());
- PropagationReporter reporter = taskExecutor.execute(propagationManager.getCreateTasks(
+ List<PropagationTaskInfo> taskInfos = propagationManager.getCreateTasks(
any.getType().getKind(),
any.getKey(),
enable,
propByRes,
before.getVirAttrs(),
- noPropResources),
- false);
- reportPropagation(result, reporter);
+ noPropResources);
+ if (!taskInfos.isEmpty()) {
+ taskInfos.get(0).setRead(true);
+ taskInfos.get(0).setBeforeObj(null);
+ PropagationReporter reporter = new DefaultPropagationReporter();
+ taskExecutor.execute(taskInfos.get(0), reporter);
+ reportPropagation(result, reporter);
+ }
}
protected void link(final Any<?> any, final boolean unlink, final ProvisioningReport result) {
@@ -172,7 +193,7 @@ public abstract class AbstractPushResultHandler extends AbstractSyncopeResultHan
result.setStatus(ProvisioningReport.Status.SUCCESS);
}
- protected void unassign(final Any<?> any, final ProvisioningReport result) {
+ protected void unassign(final Any<?> any, final ConnectorObject beforeObj, final ProvisioningReport result) {
AnyPatch patch = getAnyUtils().newAnyPatch(any.getKey());
patch.getResources().add(new StringPatchItem.Builder().
operation(PatchOperation.DELETE).
@@ -180,7 +201,7 @@ public abstract class AbstractPushResultHandler extends AbstractSyncopeResultHan
update(patch);
- deprovision(any, result);
+ deprovision(any, beforeObj, result);
}
protected void assign(final Any<?> any, final Boolean enabled, final ProvisioningReport result) {
@@ -390,7 +411,7 @@ public abstract class AbstractPushResultHandler extends AbstractSyncopeResultHan
LOG.debug("PushTask not configured for delete");
result.setStatus(ProvisioningReport.Status.IGNORE);
} else {
- deprovision(any, result);
+ deprovision(any, beforeObj, result);
}
break;
@@ -403,7 +424,7 @@ public abstract class AbstractPushResultHandler extends AbstractSyncopeResultHan
LOG.debug("PushTask not configured for delete");
result.setStatus(ProvisioningReport.Status.IGNORE);
} else {
- unassign(any, result);
+ unassign(any, beforeObj, result);
}
break;
@@ -451,21 +472,27 @@ public abstract class AbstractPushResultHandler extends AbstractSyncopeResultHan
if (result.getStatus() == null) {
result.setStatus(ProvisioningReport.Status.SUCCESS);
}
- resultStatus = AuditElements.Result.SUCCESS;
- if (connObjectKey != null && connObjecKeyValue != null) {
- output = getRemoteObject(
- provision.getObjectClass(),
- connObjectKey.getExtAttrName(),
- connObjecKeyValue,
- provision.getMapping().getItems().iterator());
+
+ if (notificationsAvailable || auditRequested) {
+ resultStatus = AuditElements.Result.SUCCESS;
+ if (connObjectKey != null && connObjecKeyValue != null) {
+ output = getRemoteObject(
+ provision.getObjectClass(),
+ connObjectKey.getExtAttrName(),
+ connObjecKeyValue,
+ provision.getMapping().getItems().iterator());
+ }
}
} catch (IgnoreProvisionException e) {
throw e;
} catch (Exception e) {
result.setStatus(ProvisioningReport.Status.FAILURE);
result.setMessage(ExceptionUtils.getRootCauseMessage(e));
- resultStatus = AuditElements.Result.FAILURE;
- output = e;
+
+ if (notificationsAvailable || auditRequested) {
+ resultStatus = AuditElements.Result.FAILURE;
+ output = e;
+ }
LOG.warn("Error pushing {} towards {}", any, profile.getTask().getResource(), e);
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java
index 5c63133..b059412 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java
@@ -24,7 +24,6 @@ import java.util.List;
import java.util.Set;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.apache.syncope.common.lib.SyncopeClientException;
-import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.common.lib.to.RealmTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.AuditElements;
@@ -43,6 +42,7 @@ import org.apache.syncope.core.persistence.api.entity.resource.OrgUnit;
import org.apache.syncope.core.persistence.api.entity.task.PullTask;
import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.core.provisioning.api.propagation.PropagationException;
+import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
import org.apache.syncope.core.provisioning.api.pushpull.IgnoreProvisionException;
import org.apache.syncope.core.provisioning.api.pushpull.ProvisioningReport;
import org.apache.syncope.core.provisioning.api.pushpull.PullActions;
@@ -238,8 +238,8 @@ public class DefaultRealmPullResultHandler
PropagationByResource propByRes = new PropagationByResource();
propByRes.addAll(ResourceOperation.CREATE, realm.getResourceKeys());
if (unmatchingRule == UnmatchingRule.ASSIGN) {
- List<PropagationTaskTO> tasks = propagationManager.createTasks(realm, propByRes, null);
- taskExecutor.execute(tasks, false);
+ List<PropagationTaskInfo> taskInfos = propagationManager.createTasks(realm, propByRes, null);
+ taskExecutor.execute(taskInfos, false);
}
RealmTO actual = binder.getRealmTO(realm, true);
@@ -324,8 +324,8 @@ public class DefaultRealmPullResultHandler
realm = realmDAO.save(realm);
RealmTO updated = binder.getRealmTO(realm, true);
- List<PropagationTaskTO> tasks = propagationManager.createTasks(realm, propByRes, null);
- taskExecutor.execute(tasks, false);
+ List<PropagationTaskInfo> taskInfos = propagationManager.createTasks(realm, propByRes, null);
+ taskExecutor.execute(taskInfos, false);
for (PullActions action : profile.getActions()) {
action.after(profile, delta, updated, result);
@@ -608,8 +608,8 @@ public class DefaultRealmPullResultHandler
PropagationByResource propByRes = new PropagationByResource();
propByRes.addAll(ResourceOperation.DELETE, realm.getResourceKeys());
- List<PropagationTaskTO> tasks = propagationManager.createTasks(realm, propByRes, null);
- taskExecutor.execute(tasks, false);
+ List<PropagationTaskInfo> taskInfos = propagationManager.createTasks(realm, propByRes, null);
+ taskExecutor.execute(taskInfos, false);
realmDAO.delete(realm);
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPushResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPushResultHandler.java
index 0225f39..cfe1388 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPushResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPushResultHandler.java
@@ -41,11 +41,13 @@ import org.apache.syncope.core.provisioning.api.MappingManager;
import org.apache.syncope.core.provisioning.api.TimeoutException;
import org.apache.syncope.core.provisioning.api.event.AfterHandlingEvent;
import org.apache.syncope.core.provisioning.api.propagation.PropagationReporter;
+import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
import org.apache.syncope.core.provisioning.api.pushpull.IgnoreProvisionException;
import org.apache.syncope.core.provisioning.api.pushpull.ProvisioningReport;
import org.apache.syncope.core.provisioning.api.pushpull.PushActions;
import org.apache.syncope.core.provisioning.api.pushpull.RealmPushResultHandler;
import org.apache.syncope.core.provisioning.java.job.AfterHandlingJob;
+import org.apache.syncope.core.provisioning.java.propagation.DefaultPropagationReporter;
import org.apache.syncope.core.provisioning.java.utils.MappingUtils;
import org.apache.syncope.core.spring.security.AuthContextUtils;
import org.identityconnectors.framework.common.objects.AttributeBuilder;
@@ -98,28 +100,38 @@ public class DefaultRealmPushResultHandler
}
}
- private Realm update(final RealmTO realmTO, final ProvisioningReport result) {
+ private Realm update(final RealmTO realmTO, final ConnectorObject beforeObj, final ProvisioningReport result) {
Realm realm = realmDAO.findByFullPath(realmTO.getFullPath());
PropagationByResource propByRes = binder.update(realm, realmTO);
realm = realmDAO.save(realm);
- PropagationReporter reporter = taskExecutor.execute(
- propagationManager.createTasks(realm, propByRes, null), false);
- reportPropagation(result, reporter);
+ List<PropagationTaskInfo> taskInfos = propagationManager.createTasks(realm, propByRes, null);
+ if (!taskInfos.isEmpty()) {
+ taskInfos.get(0).setRead(true);
+ taskInfos.get(0).setBeforeObj(beforeObj);
+ PropagationReporter reporter = new DefaultPropagationReporter();
+ taskExecutor.execute(taskInfos.get(0), reporter);
+ reportPropagation(result, reporter);
+ }
return realm;
}
- private void deprovision(final Realm realm, final ProvisioningReport result) {
+ private void deprovision(final Realm realm, final ConnectorObject beforeObj, final ProvisioningReport result) {
List<String> noPropResources = new ArrayList<>(realm.getResourceKeys());
noPropResources.remove(profile.getTask().getResource().getKey());
PropagationByResource propByRes = new PropagationByResource();
propByRes.addAll(ResourceOperation.DELETE, realm.getResourceKeys());
- PropagationReporter reporter = taskExecutor.execute(
- propagationManager.createTasks(realm, propByRes, noPropResources), false);
- reportPropagation(result, reporter);
+ List<PropagationTaskInfo> taskInfos = propagationManager.createTasks(realm, propByRes, noPropResources);
+ if (!taskInfos.isEmpty()) {
+ taskInfos.get(0).setRead(true);
+ taskInfos.get(0).setBeforeObj(beforeObj);
+ PropagationReporter reporter = new DefaultPropagationReporter();
+ taskExecutor.execute(taskInfos.get(0), reporter);
+ reportPropagation(result, reporter);
+ }
}
private void provision(final Realm realm, final ProvisioningReport result) {
@@ -142,21 +154,21 @@ public class DefaultRealmPushResultHandler
realmTO.getResources().add(profile.getTask().getResource().getKey());
}
- update(realmTO, result);
+ update(realmTO, null, result);
}
- private void unassign(final Realm realm, final ProvisioningReport result) {
+ private void unassign(final Realm realm, final ConnectorObject beforeObj, final ProvisioningReport result) {
RealmTO realmTO = binder.getRealmTO(realm, true);
realmTO.getResources().remove(profile.getTask().getResource().getKey());
- deprovision(update(realmTO, result), result);
+ deprovision(update(realmTO, beforeObj, result), beforeObj, result);
}
private void assign(final Realm realm, final ProvisioningReport result) {
RealmTO realmTO = binder.getRealmTO(realm, true);
realmTO.getResources().add(profile.getTask().getResource().getKey());
- provision(update(realmTO, result), result);
+ provision(update(realmTO, null, result), result);
}
protected ConnectorObject getRemoteObject(
@@ -300,7 +312,7 @@ public class DefaultRealmPushResultHandler
LOG.debug("PushTask not configured for update");
result.setStatus(ProvisioningReport.Status.IGNORE);
} else {
- update(binder.getRealmTO(realm, true), result);
+ update(binder.getRealmTO(realm, true), beforeObj, result);
}
break;
@@ -314,7 +326,7 @@ public class DefaultRealmPushResultHandler
LOG.debug("PushTask not configured for delete");
result.setStatus(ProvisioningReport.Status.IGNORE);
} else {
- deprovision(realm, result);
+ deprovision(realm, beforeObj, result);
}
break;
@@ -328,7 +340,7 @@ public class DefaultRealmPushResultHandler
LOG.debug("PushTask not configured for delete");
result.setStatus(ProvisioningReport.Status.IGNORE);
} else {
- unassign(realm, result);
+ unassign(realm, beforeObj, result);
}
break;
@@ -378,21 +390,27 @@ public class DefaultRealmPushResultHandler
if (result.getStatus() == null) {
result.setStatus(ProvisioningReport.Status.SUCCESS);
}
- resultStatus = AuditElements.Result.SUCCESS;
- if (connObjectKey != null && connObjecKeyValue != null) {
- output = getRemoteObject(
- orgUnit.getObjectClass(),
- connObjectKey.getExtAttrName(),
- connObjecKeyValue,
- orgUnit.getItems().iterator());
+
+ if (notificationsAvailable || auditRequested) {
+ resultStatus = AuditElements.Result.SUCCESS;
+ if (connObjectKey != null && connObjecKeyValue != null) {
+ output = getRemoteObject(
+ orgUnit.getObjectClass(),
+ connObjectKey.getExtAttrName(),
+ connObjecKeyValue,
+ orgUnit.getItems().iterator());
+ }
}
} catch (IgnoreProvisionException e) {
throw e;
} catch (Exception e) {
result.setStatus(ProvisioningReport.Status.FAILURE);
result.setMessage(ExceptionUtils.getRootCauseMessage(e));
- resultStatus = AuditElements.Result.FAILURE;
- output = e;
+
+ if (notificationsAvailable || auditRequested) {
+ resultStatus = AuditElements.Result.FAILURE;
+ output = e;
+ }
LOG.warn("Error pushing {} towards {}", realm, profile.getTask().getResource(), e);
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/ConfirmPasswordResetProducer.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/ConfirmPasswordResetProducer.java
index 3d35c93..7347004 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/ConfirmPasswordResetProducer.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/ConfirmPasswordResetProducer.java
@@ -24,9 +24,9 @@ import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.common.lib.patch.UserPatch;
-import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.core.provisioning.api.WorkflowResult;
+import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
public class ConfirmPasswordResetProducer extends AbstractProducer {
@@ -41,10 +41,9 @@ public class ConfirmPasswordResetProducer extends AbstractProducer {
WorkflowResult<Pair<UserPatch, Boolean>> updated =
(WorkflowResult<Pair<UserPatch, Boolean>>) exchange.getIn().getBody();
- List<PropagationTaskTO> tasks = getPropagationManager().getUserUpdateTasks(updated);
+ List<PropagationTaskInfo> taskInfos = getPropagationManager().getUserUpdateTasks(updated);
- getPropagationTaskExecutor().execute(tasks, false);
+ getPropagationTaskExecutor().execute(taskInfos, false);
}
}
-
}
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/CreateProducer.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/CreateProducer.java
index c58590b..1cd0925 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/CreateProducer.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/CreateProducer.java
@@ -21,7 +21,6 @@ package org.apache.syncope.core.provisioning.camel.producer;
import java.util.List;
import java.util.Map;
import java.util.Set;
-
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.commons.lang3.StringUtils;
@@ -30,11 +29,11 @@ import org.apache.syncope.common.lib.to.AnyObjectTO;
import org.apache.syncope.common.lib.to.AnyTO;
import org.apache.syncope.common.lib.to.AttrTO;
import org.apache.syncope.common.lib.to.GroupTO;
-import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.common.lib.to.UserTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.core.provisioning.api.WorkflowResult;
import org.apache.syncope.core.provisioning.api.propagation.PropagationReporter;
+import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
public class CreateProducer extends AbstractProducer {
@@ -54,18 +53,17 @@ public class CreateProducer extends AbstractProducer {
WorkflowResult<Pair<String, Boolean>> created =
(WorkflowResult<Pair<String, Boolean>>) exchange.getIn().getBody();
- List<PropagationTaskTO> tasks = getPropagationManager().getUserCreateTasks(
+ List<PropagationTaskInfo> taskInfos = getPropagationManager().getUserCreateTasks(
created.getResult().getKey(),
((UserTO) actual).getPassword(),
created.getResult().getValue(),
created.getPropByRes(),
((UserTO) actual).getVirAttrs(),
excludedResources);
- PropagationReporter propagationReporter =
- getPropagationTaskExecutor().execute(tasks, nullPriorityAsync);
+ PropagationReporter reporter = getPropagationTaskExecutor().execute(taskInfos, nullPriorityAsync);
exchange.getOut().setBody(
- Pair.of(created.getResult().getKey(), propagationReporter.getStatuses()));
+ Pair.of(created.getResult().getKey(), reporter.getStatuses()));
} else if (actual instanceof AnyTO) {
WorkflowResult<String> created = (WorkflowResult<String>) exchange.getIn().getBody();
@@ -76,31 +74,29 @@ public class CreateProducer extends AbstractProducer {
groupOwnerMap.put(created.getResult(), groupOwner.getValues().iterator().next());
}
- List<PropagationTaskTO> tasks = getPropagationManager().getCreateTasks(
+ List<PropagationTaskInfo> taskInfos = getPropagationManager().getCreateTasks(
AnyTypeKind.GROUP,
created.getResult(),
null,
created.getPropByRes(),
((AnyTO) actual).getVirAttrs(),
excludedResources);
- getPropagationTaskExecutor().execute(tasks, nullPriorityAsync);
+ getPropagationTaskExecutor().execute(taskInfos, nullPriorityAsync);
exchange.getOut().setBody(Pair.of(created.getResult(), null));
} else {
- List<PropagationTaskTO> tasks = getPropagationManager().getCreateTasks(
+ List<PropagationTaskInfo> taskInfos = getPropagationManager().getCreateTasks(
actual instanceof AnyObjectTO ? AnyTypeKind.ANY_OBJECT : AnyTypeKind.GROUP,
created.getResult(),
null,
created.getPropByRes(),
((AnyTO) actual).getVirAttrs(),
excludedResources);
- PropagationReporter propagationReporter =
- getPropagationTaskExecutor().execute(tasks, nullPriorityAsync);
+ PropagationReporter reporter = getPropagationTaskExecutor().execute(taskInfos, nullPriorityAsync);
- exchange.getOut().setBody(Pair.of(created.getResult(), propagationReporter.getStatuses()));
+ exchange.getOut().setBody(Pair.of(created.getResult(), reporter.getStatuses()));
}
}
}
}
-
}
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/DeleteProducer.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/DeleteProducer.java
index 2f22b1b..a61c91e 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/DeleteProducer.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/DeleteProducer.java
@@ -22,16 +22,15 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
-
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
-import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.persistence.api.dao.UserDAO;
import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.core.provisioning.api.data.GroupDataBinder;
import org.apache.syncope.core.provisioning.api.propagation.PropagationReporter;
+import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
public class DeleteProducer extends AbstractProducer {
@@ -58,7 +57,7 @@ public class DeleteProducer extends AbstractProducer {
Boolean nullPriorityAsync = exchange.getProperty("nullPriorityAsync", Boolean.class);
if (null != getAnyTypeKind()) {
- List<PropagationTaskTO> tasks;
+ List<PropagationTaskInfo> taskInfos;
PropagationReporter propagationReporter;
switch (getAnyTypeKind()) {
case USER:
@@ -69,23 +68,23 @@ public class DeleteProducer extends AbstractProducer {
// information could only be available after uwfAdapter.delete(), which
// will also effectively remove user from db, thus making virtually
// impossible by NotificationManager to fetch required user information
- tasks = getPropagationManager().getDeleteTasks(
+ taskInfos = getPropagationManager().getDeleteTasks(
AnyTypeKind.USER,
key,
propByRes,
excludedResources);
- propagationReporter = getPropagationTaskExecutor().execute(tasks, nullPriorityAsync);
+ propagationReporter = getPropagationTaskExecutor().execute(taskInfos, nullPriorityAsync);
exchange.setProperty("statuses", propagationReporter.getStatuses());
break;
case GROUP:
- tasks = new ArrayList<>();
+ taskInfos = new ArrayList<>();
// Generate propagation tasks for deleting users from group resources, if they are on those
// resources only because of the reason being deleted (see SYNCOPE-357)
for (Map.Entry<String, PropagationByResource> entry
: groupDataBinder.findUsersWithTransitiveResources(key).entrySet()) {
- tasks.addAll(getPropagationManager().getDeleteTasks(
+ taskInfos.addAll(getPropagationManager().getDeleteTasks(
AnyTypeKind.USER,
entry.getKey(),
entry.getValue(),
@@ -94,28 +93,28 @@ public class DeleteProducer extends AbstractProducer {
for (Map.Entry<String, PropagationByResource> entry
: groupDataBinder.findAnyObjectsWithTransitiveResources(key).entrySet()) {
- tasks.addAll(getPropagationManager().getDeleteTasks(
+ taskInfos.addAll(getPropagationManager().getDeleteTasks(
AnyTypeKind.ANY_OBJECT,
entry.getKey(),
entry.getValue(),
excludedResources));
} // Generate propagation tasks for deleting this group from resources
- tasks.addAll(getPropagationManager().getDeleteTasks(
+ taskInfos.addAll(getPropagationManager().getDeleteTasks(
AnyTypeKind.GROUP,
key,
null,
null));
- propagationReporter = getPropagationTaskExecutor().execute(tasks, nullPriorityAsync);
+ propagationReporter = getPropagationTaskExecutor().execute(taskInfos, nullPriorityAsync);
exchange.setProperty("statuses", propagationReporter.getStatuses());
break;
case ANY_OBJECT:
- tasks = getPropagationManager().getDeleteTasks(
+ taskInfos = getPropagationManager().getDeleteTasks(
AnyTypeKind.ANY_OBJECT,
key,
null,
excludedResources);
- propagationReporter = getPropagationTaskExecutor().execute(tasks, nullPriorityAsync);
+ propagationReporter = getPropagationTaskExecutor().execute(taskInfos, nullPriorityAsync);
exchange.setProperty("statuses", propagationReporter.getStatuses());
break;
@@ -124,5 +123,4 @@ public class DeleteProducer extends AbstractProducer {
}
}
}
-
}
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/DeprovisionProducer.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/DeprovisionProducer.java
index c6ffdf3..2f01b7d 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/DeprovisionProducer.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/DeprovisionProducer.java
@@ -19,11 +19,9 @@
package org.apache.syncope.core.provisioning.camel.producer;
import java.util.List;
-
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.commons.collections4.CollectionUtils;
-import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
@@ -31,6 +29,7 @@ import org.apache.syncope.core.persistence.api.dao.GroupDAO;
import org.apache.syncope.core.persistence.api.dao.UserDAO;
import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.core.provisioning.api.propagation.PropagationReporter;
+import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
public class DeprovisionProducer extends AbstractProducer {
@@ -62,39 +61,39 @@ public class DeprovisionProducer extends AbstractProducer {
if (null != getAnyTypeKind()) {
PropagationByResource propByRes = new PropagationByResource();
- List<PropagationTaskTO> tasks;
+ List<PropagationTaskInfo> taskInfos;
PropagationReporter propagationReporter;
switch (getAnyTypeKind()) {
case USER:
propByRes.set(ResourceOperation.DELETE, resources);
- tasks = getPropagationManager().getDeleteTasks(
+ taskInfos = getPropagationManager().getDeleteTasks(
AnyTypeKind.USER,
key,
propByRes,
CollectionUtils.removeAll(userDAO.findAllResourceKeys(key), resources));
- propagationReporter = getPropagationTaskExecutor().execute(tasks, nullPriorityAsync);
+ propagationReporter = getPropagationTaskExecutor().execute(taskInfos, nullPriorityAsync);
exchange.getOut().setBody(propagationReporter.getStatuses());
break;
case GROUP:
propByRes.addAll(ResourceOperation.DELETE, resources);
- tasks = getPropagationManager().getDeleteTasks(
+ taskInfos = getPropagationManager().getDeleteTasks(
AnyTypeKind.GROUP,
key,
propByRes,
CollectionUtils.removeAll(groupDAO.findAllResourceKeys(key), resources));
- propagationReporter = getPropagationTaskExecutor().execute(tasks, nullPriorityAsync);
+ propagationReporter = getPropagationTaskExecutor().execute(taskInfos, nullPriorityAsync);
exchange.getOut().setBody(propagationReporter.getStatuses());
break;
case ANY_OBJECT:
propByRes.addAll(ResourceOperation.DELETE, resources);
- tasks = getPropagationManager().getDeleteTasks(
+ taskInfos = getPropagationManager().getDeleteTasks(
AnyTypeKind.ANY_OBJECT,
key,
propByRes,
CollectionUtils.removeAll(anyObjectDAO.findAllResourceKeys(key), resources));
- propagationReporter = getPropagationTaskExecutor().execute(tasks, nullPriorityAsync);
+ propagationReporter = getPropagationTaskExecutor().execute(taskInfos, nullPriorityAsync);
exchange.getOut().setBody(propagationReporter.getStatuses());
break;
@@ -103,5 +102,4 @@ public class DeprovisionProducer extends AbstractProducer {
}
}
}
-
}
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/ProvisionProducer.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/ProvisionProducer.java
index 459b382..f0f27da 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/ProvisionProducer.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/ProvisionProducer.java
@@ -19,7 +19,6 @@
package org.apache.syncope.core.provisioning.camel.producer;
import java.util.List;
-
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.commons.collections4.CollectionUtils;
@@ -29,13 +28,13 @@ import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.common.lib.patch.PasswordPatch;
import org.apache.syncope.common.lib.patch.StringPatchItem;
import org.apache.syncope.common.lib.patch.UserPatch;
-import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.PatchOperation;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.core.provisioning.api.WorkflowResult;
import org.apache.syncope.core.provisioning.api.propagation.PropagationReporter;
+import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
public class ProvisionProducer extends AbstractProducer {
@@ -56,7 +55,7 @@ public class ProvisionProducer extends AbstractProducer {
UserPatch userPatch = new UserPatch();
userPatch.setKey(key);
- userPatch.getResources().addAll(CollectionUtils.collect(resources,
+ userPatch.getResources().addAll(CollectionUtils.collect(resources,
new Transformer<String, StringPatchItem>() {
@Override
@@ -76,10 +75,10 @@ public class ProvisionProducer extends AbstractProducer {
WorkflowResult<Pair<UserPatch, Boolean>> wfResult = new WorkflowResult<Pair<UserPatch, Boolean>>(
ImmutablePair.of(userPatch, (Boolean) null), propByRes, "update");
- List<PropagationTaskTO> tasks = getPropagationManager().getUserUpdateTasks(wfResult, changePwd, null);
- PropagationReporter propagationReporter = getPropagationTaskExecutor().execute(tasks, nullPriorityAsync);
+ List<PropagationTaskInfo> taskInfos = getPropagationManager().getUserUpdateTasks(wfResult, changePwd, null);
+ PropagationReporter reporter = getPropagationTaskExecutor().execute(taskInfos, nullPriorityAsync);
- exchange.getOut().setBody(propagationReporter.getStatuses());
+ exchange.getOut().setBody(reporter.getStatuses());
} else {
PropagationByResource propByRes = new PropagationByResource();
propByRes.addAll(ResourceOperation.UPDATE, resources);
@@ -89,7 +88,7 @@ public class ProvisionProducer extends AbstractProducer {
anyTypeKind = getAnyTypeKind();
}
- List<PropagationTaskTO> tasks = getPropagationManager().getUpdateTasks(
+ List<PropagationTaskInfo> taskInfos = getPropagationManager().getUpdateTasks(
anyTypeKind,
key,
false,
@@ -97,10 +96,9 @@ public class ProvisionProducer extends AbstractProducer {
propByRes,
null,
null);
- PropagationReporter propagationReporter = getPropagationTaskExecutor().execute(tasks, nullPriorityAsync);
+ PropagationReporter reporter = getPropagationTaskExecutor().execute(taskInfos, nullPriorityAsync);
- exchange.getOut().setBody(propagationReporter.getStatuses());
+ exchange.getOut().setBody(reporter.getStatuses());
}
}
-
}
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/StatusProducer.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/StatusProducer.java
index 96983a4..045f2e0 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/StatusProducer.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/StatusProducer.java
@@ -21,13 +21,11 @@ package org.apache.syncope.core.provisioning.camel.producer;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.common.lib.patch.StatusPatch;
import org.apache.syncope.common.lib.patch.UserPatch;
-import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.common.lib.types.StatusPatchType;
@@ -36,6 +34,7 @@ import org.apache.syncope.core.persistence.api.entity.user.User;
import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.core.provisioning.api.WorkflowResult;
import org.apache.syncope.core.provisioning.api.propagation.PropagationReporter;
+import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
import org.apache.syncope.core.workflow.api.UserWorkflowAdapter;
public class StatusProducer extends AbstractProducer {
@@ -92,7 +91,7 @@ public class StatusProducer extends AbstractProducer {
PropagationByResource propByRes = new PropagationByResource();
propByRes.addAll(ResourceOperation.UPDATE, statusPatch.getResources());
- List<PropagationTaskTO> tasks = getPropagationManager().getUpdateTasks(
+ List<PropagationTaskInfo> taskInfos = getPropagationManager().getUpdateTasks(
AnyTypeKind.USER,
statusPatch.getKey(),
false,
@@ -100,9 +99,9 @@ public class StatusProducer extends AbstractProducer {
propByRes,
null,
null);
- PropagationReporter propagationReporter = getPropagationTaskExecutor().execute(tasks, nullPriorityAsync);
+ PropagationReporter reporter = getPropagationTaskExecutor().execute(taskInfos, nullPriorityAsync);
- exchange.getOut().setBody(Pair.of(updated.getResult(), propagationReporter.getStatuses()));
+ exchange.getOut().setBody(Pair.of(updated.getResult(), reporter.getStatuses()));
}
}
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/SuspendProducer.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/SuspendProducer.java
index 27feae8..6ad268c 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/SuspendProducer.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/SuspendProducer.java
@@ -24,9 +24,9 @@ import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.common.lib.patch.UserPatch;
-import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.core.provisioning.api.WorkflowResult;
+import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
public class SuspendProducer extends AbstractProducer {
@@ -46,13 +46,12 @@ public class SuspendProducer extends AbstractProducer {
UserPatch userPatch = new UserPatch();
userPatch.setKey(updated.getKey().getResult());
- List<PropagationTaskTO> tasks = getPropagationManager().getUserUpdateTasks(
+ List<PropagationTaskInfo> taskInfos = getPropagationManager().getUserUpdateTasks(
new WorkflowResult<>(
Pair.of(userPatch, Boolean.FALSE),
updated.getKey().getPropByRes(), updated.getKey().getPerformedTasks()));
- getPropagationTaskExecutor().execute(tasks, false);
+ getPropagationTaskExecutor().execute(taskInfos, false);
}
}
}
-
}
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/UpdateProducer.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/UpdateProducer.java
index f89182b..3cfa9ff 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/UpdateProducer.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/UpdateProducer.java
@@ -20,17 +20,16 @@ package org.apache.syncope.core.provisioning.camel.producer;
import java.util.List;
import java.util.Set;
-
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.common.lib.patch.AnyObjectPatch;
import org.apache.syncope.common.lib.patch.AnyPatch;
import org.apache.syncope.common.lib.patch.UserPatch;
-import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.core.provisioning.api.WorkflowResult;
import org.apache.syncope.core.provisioning.api.propagation.PropagationReporter;
+import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
public class UpdateProducer extends AbstractProducer {
@@ -50,23 +49,21 @@ public class UpdateProducer extends AbstractProducer {
WorkflowResult<Pair<UserPatch, Boolean>> updated =
(WorkflowResult<Pair<UserPatch, Boolean>>) exchange.getIn().getBody();
- List<PropagationTaskTO> tasks;
+ List<PropagationTaskInfo> taskInfos;
if (isPull()) {
boolean passwordNotNull = updated.getResult().getKey().getPassword() != null;
- tasks = getPropagationManager().getUserUpdateTasks(updated, passwordNotNull, excludedResources);
+ taskInfos = getPropagationManager().getUserUpdateTasks(updated, passwordNotNull, excludedResources);
} else {
- tasks = getPropagationManager().getUserUpdateTasks(updated);
+ taskInfos = getPropagationManager().getUserUpdateTasks(updated);
}
- PropagationReporter propagationReporter =
- getPropagationTaskExecutor().execute(tasks, nullPriorityAsync);
+ PropagationReporter reporter = getPropagationTaskExecutor().execute(taskInfos, nullPriorityAsync);
- exchange.getOut().setBody(Pair.of(
- updated.getResult().getLeft(), propagationReporter.getStatuses()));
+ exchange.getOut().setBody(Pair.of(updated.getResult().getLeft(), reporter.getStatuses()));
} else if (actual instanceof AnyPatch) {
WorkflowResult<? extends AnyPatch> updated =
(WorkflowResult<? extends AnyPatch>) exchange.getIn().getBody();
- List<PropagationTaskTO> tasks = getPropagationManager().getUpdateTasks(
+ List<PropagationTaskInfo> taskInfos = getPropagationManager().getUpdateTasks(
actual instanceof AnyObjectPatch ? AnyTypeKind.ANY_OBJECT : AnyTypeKind.GROUP,
updated.getResult().getKey(),
false,
@@ -74,12 +71,10 @@ public class UpdateProducer extends AbstractProducer {
updated.getPropByRes(),
((AnyPatch) actual).getVirAttrs(),
excludedResources);
- PropagationReporter propagationReporter =
- getPropagationTaskExecutor().execute(tasks, nullPriorityAsync);
+ PropagationReporter reporter = getPropagationTaskExecutor().execute(taskInfos, nullPriorityAsync);
- exchange.getOut().setBody(Pair.of(updated.getResult(), propagationReporter.getStatuses()));
+ exchange.getOut().setBody(Pair.of(updated.getResult(), reporter.getStatuses()));
}
}
}
-
}