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/03/23 14:00:46 UTC
[syncope] 02/02: [SYNCOPE-1508] PushActions
This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch 2_1_X
in repository https://gitbox.apache.org/repos/asf/syncope.git
commit 0a1231562950dd0e11203015ca7614dd0115c694
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Mon Mar 23 13:17:59 2020 +0100
[SYNCOPE-1508] PushActions
---
.../syncope/client/console/wizards/any/Groups.java | 2 +-
.../console/implementations/MyPullActions.groovy | 1 +
.../console/implementations/MyPushActions.groovy | 7 ++++++
.../syncope/core/logic/ReconciliationLogic.java | 2 +-
.../apache/syncope/core/logic/ResourceLogic.java | 2 +-
.../provisioning/api/pushpull/PushActions.java | 13 +++++++++++
.../core/provisioning/java/VirAttrHandlerImpl.java | 2 ++
.../java/pushpull/AbstractPushResultHandler.java | 10 +++++++--
.../java/pushpull/OutboundMatcher.java | 25 +++++++++++-----------
.../java/pushpull/PullJobDelegate.java | 3 ---
10 files changed, 47 insertions(+), 20 deletions(-)
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
index dd94e98..7dd86c4 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
@@ -135,7 +135,7 @@ public class Groups extends AbstractGroups {
: groupRestClient.search(
anyTO.getRealm(),
SyncopeClient.getGroupSearchConditionBuilder().
- isAssignable().and().is("name").equalTo(filter).query(),
+ isAssignable().and().is("name").equalToIgnoreCase(filter).query(),
1, Constants.MAX_GROUP_LIST_SIZE,
new SortParam<>("name", true),
null)).stream().map(input -> {
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPullActions.groovy b/client/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPullActions.groovy
index b438461..c7aa21e 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPullActions.groovy
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPullActions.groovy
@@ -18,6 +18,7 @@
*/
import groovy.transform.CompileStatic
import java.util.Collections
+import java.util.Set
import org.apache.syncope.common.lib.patch.AnyPatch
import org.apache.syncope.common.lib.to.EntityTO
import org.apache.syncope.common.lib.to.ProvisioningReport
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPushActions.groovy b/client/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPushActions.groovy
index 0828f03..07bbffe 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPushActions.groovy
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPushActions.groovy
@@ -18,6 +18,8 @@
* under the License.
*/
import groovy.transform.CompileStatic
+import java.util.Collections
+import java.util.Set
import org.apache.syncope.core.persistence.api.entity.Entity
import org.apache.syncope.core.provisioning.api.pushpull.ProvisioningProfile
import org.apache.syncope.core.provisioning.api.pushpull.ProvisioningReport
@@ -27,6 +29,11 @@ import org.quartz.JobExecutionException
@CompileStatic
class MyPushActions implements PushActions {
+ @Override
+ Set<String> moreAttrsToGet(ProvisioningProfile profile, Entity entity) {
+ return Collections.emptySet();
+ }
+
@Override
Entity beforeAssign(
ProvisioningProfile profile,
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java
index cd060a6..5658302 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java
@@ -256,7 +256,7 @@ public class ReconciliationLogic extends AbstractTransactionalLogic<EntityTO> {
status.setOnSyncope(getOnSyncope(any, connObjectKeyItem, provision));
List<ConnectorObject> connObjs = outboundMatcher.match(
- connFactory.getConnector(provision.getResource()), any, provision);
+ connFactory.getConnector(provision.getResource()), any, provision, Optional.empty());
if (!connObjs.isEmpty()) {
status.setOnResource(ConnObjectUtils.getConnObjectTO(connObjs.get(0).getAttributes()));
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
index ba0946c..7fc2f08 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
@@ -322,7 +322,7 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
// 2. find on resource
List<ConnectorObject> connObjs = outboundMatcher.match(
- connFactory.getConnector(provision.getResource()), any, provision);
+ connFactory.getConnector(provision.getResource()), any, provision, Optional.empty());
if (connObjs.isEmpty()) {
throw new NotFoundException(
"Object " + any + " with class " + provision.getObjectClass()
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/PushActions.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/PushActions.java
index 642d591..aed56ef 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/PushActions.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/PushActions.java
@@ -18,6 +18,8 @@
*/
package org.apache.syncope.core.provisioning.api.pushpull;
+import java.util.Collections;
+import java.util.Set;
import org.apache.syncope.common.lib.to.ProvisioningReport;
import org.apache.syncope.core.persistence.api.entity.Entity;
import org.quartz.JobExecutionException;
@@ -29,6 +31,17 @@ import org.quartz.JobExecutionException;
public interface PushActions extends ProvisioningActions {
/**
+ * Return additional attributes to include in the result from the underlying connector.
+ *
+ * @param profile profile of the pull being executed.
+ * @param entity entity
+ * @return additional attributes to include in the result from the underlying connector
+ */
+ default Set<String> moreAttrsToGet(ProvisioningProfile<?, ?> profile, Entity entity) {
+ return Collections.emptySet();
+ }
+
+ /**
* Action to be executed before to assign (link & provision) a pushed entity to the resource.
*
* @param profile profile of the push being executed.
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/VirAttrHandlerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/VirAttrHandlerImpl.java
index cc15730..1ba471e 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/VirAttrHandlerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/VirAttrHandlerImpl.java
@@ -23,6 +23,7 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.Set;
import java.util.stream.Stream;
import org.apache.syncope.core.persistence.api.dao.AllowedSchemas;
@@ -122,6 +123,7 @@ public class VirAttrHandlerImpl implements VirAttrHandler {
connFactory.getConnector(provision.getResource()),
any,
provision,
+ Optional.empty(),
schemasToRead.stream().map(VirSchema::asLinkingMappingItem).toArray(LinkingMappingItem[]::new)).
forEach(connObj -> schemasToRead.forEach(schema -> {
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 de3e6a6..5e39b28 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
@@ -20,9 +20,11 @@ package org.apache.syncope.core.provisioning.java.pushpull;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
+import java.util.Set;
import java.util.stream.Collectors;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
@@ -255,7 +257,10 @@ public abstract class AbstractPushResultHandler extends AbstractSyncopeResultHan
any.getType().getKind(), any.getKey(), profile.getTask().getResource());
// Try to read remote object BEFORE any actual operation
- List<ConnectorObject> connObjs = outboundMatcher.match(profile.getConnector(), any, provision);
+ Set<String> moreAttrsToGet = new HashSet<>();
+ profile.getActions().forEach(action -> moreAttrsToGet.addAll(action.moreAttrsToGet(profile, provision)));
+ List<ConnectorObject> connObjs = outboundMatcher.match(
+ profile.getConnector(), any, provision, Optional.of(moreAttrsToGet.toArray(new String[0])));
LOG.debug("Match(es) found for {} as {}: {}", any, provision.getObjectClass(), connObjs);
if (connObjs.size() > 1) {
@@ -448,7 +453,8 @@ public abstract class AbstractPushResultHandler extends AbstractSyncopeResultHan
if (notificationsAvailable || auditRequested) {
resultStatus = AuditElements.Result.SUCCESS;
- output = outboundMatcher.match(profile.getConnector(), any, provision);
+ output = outboundMatcher.match(
+ profile.getConnector(), any, provision, Optional.of(moreAttrsToGet.toArray(new String[0])));
}
} catch (IgnoreProvisionException e) {
throw e;
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 41637c6..efdca3a 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
@@ -120,16 +120,16 @@ public class OutboundMatcher {
connector,
rule.get().getFilter(any, provision),
provision,
- Optional.empty(),
- Optional.of(moreAttrsToGet.toArray(new String[0]))));
+ Optional.of(moreAttrsToGet.toArray(new String[0])),
+ Optional.empty()));
} else {
MappingUtils.getConnObjectKeyItem(provision).ifPresent(connObjectKeyItem -> matchByConnObjectKeyValue(
connector,
connObjectKeyItem,
connObjectKeyValue,
provision,
- Optional.empty(),
- Optional.of(moreAttrsToGet.toArray(new String[0]))).
+ Optional.of(moreAttrsToGet.toArray(new String[0])),
+ Optional.empty()).
ifPresent(result::add));
}
} catch (RuntimeException e) {
@@ -148,6 +148,7 @@ public class OutboundMatcher {
final Connector connector,
final Any<?> any,
final Provision provision,
+ final Optional<String[]> moreAttrsToGet,
final LinkingMappingItem... linkingItems) {
Optional<PushCorrelationRule> rule = rule(provision);
@@ -159,9 +160,9 @@ public class OutboundMatcher {
connector,
rule.get().getFilter(any, provision),
provision,
+ moreAttrsToGet,
ArrayUtils.isEmpty(linkingItems)
- ? Optional.empty() : Optional.of(Arrays.asList(linkingItems)),
- Optional.empty()));
+ ? Optional.empty() : Optional.of(Arrays.asList(linkingItems))));
} else {
Optional<? extends MappingItem> connObjectKeyItem = MappingUtils.getConnObjectKeyItem(provision);
Optional<String> connObjectKeyValue = mappingManager.getConnObjectKeyValue(any, provision);
@@ -172,9 +173,9 @@ public class OutboundMatcher {
connObjectKeyItem.get(),
connObjectKeyValue.get(),
provision,
+ moreAttrsToGet,
ArrayUtils.isEmpty(linkingItems)
- ? Optional.empty() : Optional.of(Arrays.asList(linkingItems)),
- Optional.empty()).
+ ? Optional.empty() : Optional.of(Arrays.asList(linkingItems))).
ifPresent(result::add);
}
}
@@ -193,8 +194,8 @@ public class OutboundMatcher {
final Connector connector,
final Filter filter,
final Provision provision,
- final Optional<Collection<LinkingMappingItem>> linkingItems,
- final Optional<String[]> moreAttrsToGet) {
+ final Optional<String[]> moreAttrsToGet,
+ final Optional<Collection<LinkingMappingItem>> linkingItems) {
Stream<MappingItem> items = Stream.concat(
provision.getMapping().getItems().stream(),
@@ -233,8 +234,8 @@ public class OutboundMatcher {
final MappingItem connObjectKeyItem,
final String connObjectKeyValue,
final Provision provision,
- final Optional<Collection<LinkingMappingItem>> linkingItems,
- final Optional<String[]> moreAttrsToGet) {
+ final Optional<String[]> moreAttrsToGet,
+ final Optional<Collection<LinkingMappingItem>> linkingItems) {
Stream<MappingItem> items = Stream.concat(
provision.getMapping().getItems().stream(),
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java
index 829a6b8..9e7ff24 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java
@@ -227,7 +227,6 @@ public class PullJobDelegate extends AbstractProvisioningJobDelegate<PullTask> i
Set<String> moreAttrsToGet = new HashSet<>();
actions.forEach(action -> moreAttrsToGet.addAll(action.moreAttrsToGet(profile, orgUnit)));
-
OperationOptions options = MappingUtils.buildOperationOptions(
MappingUtils.getPullItems(orgUnit.getItems().stream()), moreAttrsToGet.toArray(new String[0]));
@@ -312,11 +311,9 @@ public class PullJobDelegate extends AbstractProvisioningJobDelegate<PullTask> i
try {
Set<String> moreAttrsToGet = new HashSet<>();
actions.forEach(action -> moreAttrsToGet.addAll(action.moreAttrsToGet(profile, provision)));
-
Stream<? extends Item> mapItems = Stream.concat(
MappingUtils.getPullItems(provision.getMapping().getItems().stream()),
virSchemaDAO.findByProvision(provision).stream().map(VirSchema::asLinkingMappingItem));
-
OperationOptions options = MappingUtils.buildOperationOptions(
mapItems, moreAttrsToGet.toArray(new String[0]));