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 2019/03/06 13:53:24 UTC

[syncope] branch 2_0_X updated: [SYNCOPE-1444] Passing SyncDelta as argument

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 b791303  [SYNCOPE-1444] Passing SyncDelta as argument
b791303 is described below

commit b7913034c9e37bfd675a34647fdd423b91ed8ffb
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Wed Mar 6 14:26:31 2019 +0100

    [SYNCOPE-1444] Passing SyncDelta as argument
---
 .../api/pushpull/PullCorrelationRule.java          |  8 ++---
 .../provisioning/java/ConnectorFacadeProxy.java    |  1 -
 .../java/pushpull/AbstractPullResultHandler.java   |  2 +-
 .../pushpull/DefaultRealmPullResultHandler.java    |  2 +-
 .../pushpull/PlainAttrsPullCorrelationRule.java    |  6 ++--
 .../core/provisioning/java/pushpull/PullUtils.java | 36 ++++++++++++++--------
 .../syncope/fit/core/reference/TestPullRule.java   |  6 ++--
 7 files changed, 35 insertions(+), 26 deletions(-)

diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/PullCorrelationRule.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/PullCorrelationRule.java
index 5d6d922..210d2ac 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/PullCorrelationRule.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/PullCorrelationRule.java
@@ -19,7 +19,7 @@
 package org.apache.syncope.core.provisioning.api.pushpull;
 
 import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
-import org.identityconnectors.framework.common.objects.ConnectorObject;
+import org.identityconnectors.framework.common.objects.SyncDelta;
 
 /**
  * Interface for correlation rule to be evaluated during PullJob execution.
@@ -29,8 +29,8 @@ public interface PullCorrelationRule {
     /**
      * Return a search condition.
      *
-     * @param connObj connector object.
-     * @return search condition.
+     * @param syncDelta change operation, including external attributes
+     * @return search condition
      */
-    SearchCond getSearchCond(ConnectorObject connObj);
+    SearchCond getSearchCond(SyncDelta syncDelta);
 }
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorFacadeProxy.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorFacadeProxy.java
index 46393b5..0e13e6d 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorFacadeProxy.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorFacadeProxy.java
@@ -335,7 +335,6 @@ public class ConnectorFacadeProxy implements Connector {
             public boolean handle(final ConnectorObject obj) {
                 return handler.handle(new SyncDeltaBuilder().
                         setObject(obj).
-                        setUid(obj.getUid()).
                         setDeltaType(SyncDeltaType.CREATE_OR_UPDATE).
                         setToken(new SyncToken("")).
                         build());
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
index f0a2c8d..4995476 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
@@ -729,7 +729,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
                 processed.getDeltaType(), processed.getUid().getUidValue(), processed.getObject().getObjectClass());
 
         try {
-            List<String> keys = pullUtils.match(processed.getObject(), provision, anyUtils);
+            List<String> keys = pullUtils.match(processed, provision, anyUtils);
             LOG.debug("Match(es) found for {} as {}: {}",
                     processed.getUid().getUidValue(), processed.getObject().getObjectClass(), keys);
 
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 e17be3b..8c54fee 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
@@ -678,7 +678,7 @@ public class DefaultRealmPullResultHandler
         LOG.debug("Transformed {} for {} as {}",
                 processed.getDeltaType(), processed.getUid().getUidValue(), processed.getObject().getObjectClass());
 
-        List<String> keys = pullUtils.match(processed.getObject(), orgUnit);
+        List<String> keys = pullUtils.match(processed, orgUnit);
         LOG.debug("Match found for {} as {}: {}",
                 processed.getUid().getUidValue(), processed.getObject().getObjectClass(), keys);
 
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PlainAttrsPullCorrelationRule.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PlainAttrsPullCorrelationRule.java
index 9c55b03..ba3b850 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PlainAttrsPullCorrelationRule.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PlainAttrsPullCorrelationRule.java
@@ -28,10 +28,10 @@ import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
 import org.apache.syncope.core.persistence.api.entity.resource.Item;
 import org.apache.syncope.core.persistence.api.entity.resource.Provision;
 import org.identityconnectors.framework.common.objects.Attribute;
-import org.identityconnectors.framework.common.objects.ConnectorObject;
 import org.apache.syncope.core.provisioning.api.pushpull.PullCorrelationRule;
 import org.apache.syncope.core.provisioning.java.utils.MappingUtils;
 import org.apache.syncope.core.provisioning.api.data.ItemTransformer;
+import org.identityconnectors.framework.common.objects.SyncDelta;
 
 public class PlainAttrsPullCorrelationRule implements PullCorrelationRule {
 
@@ -45,7 +45,7 @@ public class PlainAttrsPullCorrelationRule implements PullCorrelationRule {
     }
 
     @Override
-    public SearchCond getSearchCond(final ConnectorObject connObj) {
+    public SearchCond getSearchCond(final SyncDelta syncDelta) {
         Map<String, Item> mappingItems = new HashMap<>();
         for (Item item : provision.getMapping().getItems()) {
             mappingItems.put(item.getIntAttrName(), item);
@@ -58,7 +58,7 @@ public class PlainAttrsPullCorrelationRule implements PullCorrelationRule {
             Item mappingItem = mappingItems.get(schema);
             Attribute attr = mappingItem == null
                     ? null
-                    : connObj.getAttributeByName(mappingItem.getExtAttrName());
+                    : syncDelta.getObject().getAttributeByName(mappingItem.getExtAttrName());
             if (attr == null) {
                 throw new IllegalArgumentException(
                         "Connector object does not contains the attributes to perform the search: " + schema);
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullUtils.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullUtils.java
index d359ebf..ea98e1d 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullUtils.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullUtils.java
@@ -64,6 +64,10 @@ import org.identityconnectors.framework.common.objects.ConnectorObject;
 import org.identityconnectors.framework.common.objects.Name;
 import org.identityconnectors.framework.common.objects.OperationalAttributes;
 import org.identityconnectors.framework.common.objects.SearchResult;
+import org.identityconnectors.framework.common.objects.SyncDelta;
+import org.identityconnectors.framework.common.objects.SyncDeltaBuilder;
+import org.identityconnectors.framework.common.objects.SyncDeltaType;
+import org.identityconnectors.framework.common.objects.SyncToken;
 import org.identityconnectors.framework.common.objects.filter.EqualsFilter;
 import org.identityconnectors.framework.spi.SearchResultsHandler;
 import org.slf4j.Logger;
@@ -150,7 +154,13 @@ public class PullUtils {
 
             ConnectorObject connObj = found.iterator().next();
             try {
-                List<String> anyKeys = match(connObj, provision, anyUtils);
+                List<String> anyKeys = match(
+                        new SyncDeltaBuilder().
+                                setToken(new SyncToken("")).
+                                setDeltaType(SyncDeltaType.CREATE_OR_UPDATE).
+                                setObject(connObj).
+                                build(),
+                        provision, anyUtils);
                 if (anyKeys.isEmpty()) {
                     LOG.debug("No matching {} found for {}, aborting", anyUtils.anyTypeKind(), connObj);
                 } else {
@@ -169,13 +179,13 @@ public class PullUtils {
     }
 
     private List<String> findByConnObjectKey(
-            final ConnectorObject connObj, final Provision provision, final AnyUtils anyUtils) {
+            final SyncDelta syncDelta, final Provision provision, final AnyUtils anyUtils) {
 
         String connObjectKey = null;
 
         MappingItem connObjectKeyItem = MappingUtils.getConnObjectKeyItem(provision);
         if (connObjectKeyItem != null) {
-            Attribute connObjectKeyAttr = connObj.getAttributeByName(connObjectKeyItem.getExtAttrName());
+            Attribute connObjectKeyAttr = syncDelta.getObject().getAttributeByName(connObjectKeyItem.getExtAttrName());
             if (connObjectKeyAttr != null) {
                 connObjectKey = AttributeUtil.getStringValue(connObjectKeyAttr);
             }
@@ -268,10 +278,10 @@ public class PullUtils {
     }
 
     private List<String> findByCorrelationRule(
-            final ConnectorObject connObj, final PullCorrelationRule rule, final AnyTypeKind type) {
+            final SyncDelta syncDelta, final PullCorrelationRule rule, final AnyTypeKind type) {
 
         List<String> result = new ArrayList<>();
-        for (Any<?> any : searchDAO.search(rule.getSearchCond(connObj), type)) {
+        for (Any<?> any : searchDAO.search(rule.getSearchCond(syncDelta), type)) {
             result.add(any.getKey());
         }
 
@@ -281,13 +291,13 @@ public class PullUtils {
     /**
      * Finds internal entities based on external attributes and mapping.
      *
-     * @param connObj external attributes
+     * @param syncDelta change operation, including external attributes
      * @param provision mapping
      * @param anyUtils any utils
      * @return list of matching users' / groups' / any objects' keys
      */
     public List<String> match(
-            final ConnectorObject connObj,
+            final SyncDelta syncDelta,
             final Provision provision,
             final AnyUtils anyUtils) {
 
@@ -315,10 +325,10 @@ public class PullUtils {
 
         try {
             return pullRule == null
-                    ? findByConnObjectKey(connObj, provision, anyUtils)
-                    : findByCorrelationRule(connObj, pullRule, anyUtils.anyTypeKind());
+                    ? findByConnObjectKey(syncDelta, provision, anyUtils)
+                    : findByCorrelationRule(syncDelta, pullRule, anyUtils.anyTypeKind());
         } catch (RuntimeException e) {
-            LOG.error("Could not match {} with any existing {}", connObj, provision.getAnyType(), e);
+            LOG.error("Could not match {} with any existing {}", syncDelta, provision.getAnyType(), e);
             return Collections.<String>emptyList();
         }
     }
@@ -326,19 +336,19 @@ public class PullUtils {
     /**
      * Finds internal realms based on external attributes and mapping.
      *
-     * @param connObj external attributes
+     * @param syncDelta change operation, including external attributes
      * @param orgUnit mapping
      * @return list of matching realms' keys.
      */
     public List<String> match(
-            final ConnectorObject connObj,
+            final SyncDelta syncDelta,
             final OrgUnit orgUnit) {
 
         String connObjectKey = null;
 
         OrgUnitItem connObjectKeyItem = orgUnit.getConnObjectKeyItem();
         if (connObjectKeyItem != null) {
-            Attribute connObjectKeyAttr = connObj.getAttributeByName(connObjectKeyItem.getExtAttrName());
+            Attribute connObjectKeyAttr = syncDelta.getObject().getAttributeByName(connObjectKeyItem.getExtAttrName());
             if (connObjectKeyAttr != null) {
                 connObjectKey = AttributeUtil.getStringValue(connObjectKeyAttr);
             }
diff --git a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/TestPullRule.java b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/TestPullRule.java
index 71d36a7..32386d4 100644
--- a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/TestPullRule.java
+++ b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/TestPullRule.java
@@ -20,8 +20,8 @@ package org.apache.syncope.fit.core.reference;
 
 import org.apache.syncope.core.persistence.api.dao.search.AttributeCond;
 import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
-import org.identityconnectors.framework.common.objects.ConnectorObject;
 import org.apache.syncope.core.provisioning.api.pushpull.PullCorrelationRule;
+import org.identityconnectors.framework.common.objects.SyncDelta;
 
 /**
  * Test pull rule relying on <tt>email</tt> attribute value.
@@ -29,11 +29,11 @@ import org.apache.syncope.core.provisioning.api.pushpull.PullCorrelationRule;
 public class TestPullRule implements PullCorrelationRule {
 
     @Override
-    public SearchCond getSearchCond(final ConnectorObject connObj) {
+    public SearchCond getSearchCond(final SyncDelta syncDelta) {
         AttributeCond cond = new AttributeCond();
         cond.setSchema("email");
         cond.setType(AttributeCond.Type.EQ);
-        cond.setExpression(connObj.getName().getNameValue());
+        cond.setExpression(syncDelta.getObject().getName().getNameValue());
 
         return SearchCond.getLeafCond(cond);
     }