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 &amp; 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]));