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 2020/04/17 16:11:23 UTC
[syncope] 02/02: [SYNCOPE-1508] Ensuring
PropagationActions#moreAttrsToGet is invoked during Push
This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git
commit 1d4d8c697711fa03c1f9f9f3021346a20f4bb2f5
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Fri Apr 17 17:58:17 2020 +0200
[SYNCOPE-1508] Ensuring PropagationActions#moreAttrsToGet is invoked during Push
---
.../implementations/MyPropagationActions.groovy | 5 +++--
.../api/propagation/PropagationActions.java | 5 +++--
.../propagation/AbstractPropagationTaskExecutor.java | 4 ++--
.../java/pushpull/AbstractPushResultHandler.java | 2 +-
.../java/pushpull/DefaultUserPushResultHandler.java | 4 ++--
.../provisioning/java/pushpull/OutboundMatcher.java | 20 +++++++++++++++++---
6 files changed, 28 insertions(+), 12 deletions(-)
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPropagationActions.groovy b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPropagationActions.groovy
index f0156eb..4ac88eb 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPropagationActions.groovy
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPropagationActions.groovy
@@ -18,6 +18,7 @@
* under the License.
*/
import groovy.transform.CompileStatic
+import java.util.Optional
import java.util.Set
import org.apache.syncope.core.persistence.api.entity.resource.OrgUnit
import org.apache.syncope.core.persistence.api.entity.resource.Provision
@@ -30,12 +31,12 @@ import org.identityconnectors.framework.common.objects.ConnectorObject
class MyPropagationActions implements PropagationActions {
@Override
- Set<String> moreAttrsToGet(PropagationTask task, OrgUnit orgUnit) {
+ Set<String> moreAttrsToGet(Optional<PropagationTask> task, OrgUnit orgUnit) {
return Set.of();
}
@Override
- Set<String> moreAttrsToGet(PropagationTask task, Provision provision) {
+ Set<String> moreAttrsToGet(Optional<PropagationTask> task, Provision provision) {
return Set.of();
}
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationActions.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationActions.java
index 9f4c40f..a7bd704 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationActions.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationActions.java
@@ -18,6 +18,7 @@
*/
package org.apache.syncope.core.provisioning.api.propagation;
+import java.util.Optional;
import java.util.Set;
import org.apache.syncope.core.persistence.api.entity.resource.OrgUnit;
import org.apache.syncope.core.persistence.api.entity.resource.Provision;
@@ -34,7 +35,7 @@ public interface PropagationActions {
* @param orgUnit Realm provisioning information
* @return additional attributes to include in the result from the underlying connector
*/
- default Set<String> moreAttrsToGet(PropagationTask task, OrgUnit orgUnit) {
+ default Set<String> moreAttrsToGet(Optional<PropagationTask> task, OrgUnit orgUnit) {
return Set.of();
}
@@ -45,7 +46,7 @@ public interface PropagationActions {
* @param provision Any provisioning information
* @return additional attributes to include in the result from the underlying connector
*/
- default Set<String> moreAttrsToGet(PropagationTask task, Provision provision) {
+ default Set<String> moreAttrsToGet(Optional<PropagationTask> task, Provision provision) {
return Set.of();
}
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 71c639f..0aabd5f 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
@@ -399,7 +399,7 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
provision = task.getResource().getProvision(new ObjectClass(task.getObjectClassName())).orElse(null);
orgUnit = task.getResource().getOrgUnit();
- if (taskInfo.getBeforeObj() == null) {
+ if (taskInfo.getBeforeObj() == null || !taskInfo.getBeforeObj().isPresent()) {
// Try to read remote object BEFORE any actual operation
beforeObj = provision == null && orgUnit == null
? null
@@ -693,7 +693,7 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
: task.getOldConnObjectKey();
Set<String> moreAttrsToGet = new HashSet<>();
- actions.forEach(action -> moreAttrsToGet.addAll(action.moreAttrsToGet(task, orgUnit)));
+ actions.forEach(action -> moreAttrsToGet.addAll(action.moreAttrsToGet(Optional.of(task), orgUnit)));
ConnectorObject obj = null;
Optional<? extends OrgUnitItem> connObjectKeyItem = orgUnit.getConnObjectKeyItem();
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 a0105be..3c0e13b 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
@@ -165,7 +165,7 @@ public abstract class AbstractPushResultHandler extends AbstractSyncopeResultHan
before.getVirAttrs(),
noPropResources);
if (!taskInfos.isEmpty()) {
- taskInfos.get(0).setBeforeObj(Optional.ofNullable(null));
+ taskInfos.get(0).setBeforeObj(Optional.empty());
PropagationReporter reporter = new DefaultPropagationReporter();
taskExecutor.execute(taskInfos.get(0), reporter, adminUser);
reportPropagation(result, reporter);
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultUserPushResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultUserPushResultHandler.java
index 3de89eb..0479822 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultUserPushResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultUserPushResultHandler.java
@@ -372,7 +372,7 @@ public class DefaultUserPushResultHandler extends AbstractPushResultHandler impl
null,
null);
if (!taskInfos.isEmpty()) {
- taskInfos.get(0).setBeforeObj(Optional.ofNullable(null));
+ taskInfos.get(0).setBeforeObj(Optional.empty());
PropagationReporter reporter = new DefaultPropagationReporter();
taskExecutor.execute(taskInfos.get(0), reporter, adminUser);
reportPropagation(result, reporter);
@@ -399,7 +399,7 @@ public class DefaultUserPushResultHandler extends AbstractPushResultHandler impl
propByLinkedAccount,
""));
if (!taskInfos.isEmpty()) {
- taskInfos.get(0).setBeforeObj(Optional.ofNullable(null));
+ taskInfos.get(0).setBeforeObj(Optional.empty());
PropagationReporter reporter = new DefaultPropagationReporter();
taskExecutor.execute(taskInfos.get(0), reporter, adminUser);
reportPropagation(result, reporter);
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/OutboundMatcher.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/OutboundMatcher.java
index f899bcd..4536fca 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/OutboundMatcher.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/OutboundMatcher.java
@@ -110,7 +110,7 @@ public class OutboundMatcher {
}
Set<String> moreAttrsToGet = new HashSet<>();
- actions.forEach(action -> moreAttrsToGet.addAll(action.moreAttrsToGet(task, provision)));
+ actions.forEach(action -> moreAttrsToGet.addAll(action.moreAttrsToGet(Optional.of(task), provision)));
List<ConnectorObject> result = new ArrayList<>();
try {
@@ -150,6 +150,20 @@ public class OutboundMatcher {
final Optional<String[]> moreAttrsToGet,
final LinkingMappingItem... linkingItems) {
+ Set<String> matgFromPropagationActions = new HashSet<>();
+ provision.getResource().getPropagationActions().forEach(impl -> {
+ try {
+ matgFromPropagationActions.addAll(
+ ImplementationManager.<PropagationActions>build(impl).
+ moreAttrsToGet(Optional.empty(), provision));
+ } catch (Exception e) {
+ LOG.error("While building {}", impl, e);
+ }
+ });
+ Optional<String[]> effectiveMATG = Optional.of(Stream.concat(
+ moreAttrsToGet.map(Stream::of).orElse(Stream.empty()),
+ matgFromPropagationActions.stream()).toArray(String[]::new));
+
Optional<PushCorrelationRule> rule = rule(provision);
List<ConnectorObject> result = new ArrayList<>();
@@ -159,7 +173,7 @@ public class OutboundMatcher {
connector,
rule.get().getFilter(any, provision),
provision,
- moreAttrsToGet,
+ effectiveMATG,
ArrayUtils.isEmpty(linkingItems)
? Optional.empty() : Optional.of(List.of(linkingItems))));
} else {
@@ -172,7 +186,7 @@ public class OutboundMatcher {
connObjectKeyItem.get(),
connObjectKeyValue.get(),
provision,
- moreAttrsToGet,
+ effectiveMATG,
ArrayUtils.isEmpty(linkingItems)
? Optional.empty() : Optional.of(List.of(linkingItems))).
ifPresent(result::add);