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 2017/04/05 10:42:25 UTC

[2/4] syncope git commit: [SYNCOPE-1057] More complete AnyPatch generation for update during pull

[SYNCOPE-1057] More complete AnyPatch generation for update during pull


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/4a82fb30
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/4a82fb30
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/4a82fb30

Branch: refs/heads/master
Commit: 4a82fb302b08e05360adc30e56780f180e97f8cd
Parents: 76c7916
Author: Francesco Chicchiricc� <il...@apache.org>
Authored: Wed Apr 5 12:03:24 2017 +0200
Committer: Francesco Chicchiricc� <il...@apache.org>
Committed: Wed Apr 5 12:03:34 2017 +0200

----------------------------------------------------------------------
 .../syncope/common/lib/AnyOperations.java       | 16 +++--
 .../java/utils/ConnObjectUtils.java             | 67 ++++++++++++++++----
 2 files changed, 64 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/4a82fb30/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java b/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
index 15a85d3..277d921 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
@@ -400,15 +400,17 @@ public final class AnyOperations {
         // 2. ownership
         result.setUserOwner(
                 replacePatchItem(updated.getUserOwner(), original.getUserOwner(), new StringReplacePatchItem()));
-        result.setGroupOwner(replacePatchItem(updated.getGroupOwner(), original.getGroupOwner(),
-                new StringReplacePatchItem()));
+        result.setGroupOwner(
+                replacePatchItem(updated.getGroupOwner(), original.getGroupOwner(), new StringReplacePatchItem()));
 
-        // 3. dynamic membership
-        result.setUDynMembershipCond(updated.getUDynMembershipCond());
-        result.getADynMembershipConds().putAll(updated.getADynMembershipConds());
+        if (!incremental) {
+            // 3. dynamic membership
+            result.setUDynMembershipCond(updated.getUDynMembershipCond());
+            result.getADynMembershipConds().putAll(updated.getADynMembershipConds());
 
-        // 4. type extensions
-        result.getTypeExtensions().addAll(updated.getTypeExtensions());
+            // 4. type extensions
+            result.getTypeExtensions().addAll(updated.getTypeExtensions());
+        }
 
         return result;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/4a82fb30/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/ConnObjectUtils.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/ConnObjectUtils.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/ConnObjectUtils.java
index 786dbf3..fbd7c32 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/ConnObjectUtils.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/ConnObjectUtils.java
@@ -116,7 +116,10 @@ public class ConnObjectUtils {
      */
     @Transactional(readOnly = true)
     public <T extends AnyTO> T getAnyTO(
-            final ConnectorObject obj, final PullTask pullTask, final Provision provision, final AnyUtils anyUtils) {
+            final ConnectorObject obj,
+            final PullTask pullTask,
+            final Provision provision,
+            final AnyUtils anyUtils) {
 
         T anyTO = getAnyTOFromConnObject(obj, pullTask, provision, anyUtils);
 
@@ -170,40 +173,80 @@ public class ConnObjectUtils {
      */
     @SuppressWarnings("unchecked")
     @Transactional(readOnly = true)
-    public <T extends AnyPatch> T getAnyPatch(final String key, final ConnectorObject obj,
-            final AnyTO original, final PullTask pullTask, final Provision provision, final AnyUtils anyUtils) {
+    public <T extends AnyPatch> T getAnyPatch(
+            final String key,
+            final ConnectorObject obj,
+            final AnyTO original,
+            final PullTask pullTask,
+            final Provision provision,
+            final AnyUtils anyUtils) {
 
         AnyTO updated = getAnyTOFromConnObject(obj, pullTask, provision, anyUtils);
         updated.setKey(key);
 
+        T anyPatch = null;
         if (null != anyUtils.getAnyTypeKind()) {
             switch (anyUtils.getAnyTypeKind()) {
                 case USER:
+                    UserTO originalUser = (UserTO) original;
+                    UserTO updatedUser = (UserTO) updated;
+
+                    if (StringUtils.isBlank(updatedUser.getUsername())) {
+                        updatedUser.setUsername(originalUser.getUsername());
+                    }
+
                     // update password if and only if password is really changed
                     User user = userDAO.authFind(key);
-                    if (StringUtils.isBlank(((UserTO) updated).getPassword())
-                            || ENCRYPTOR.verify(((UserTO) updated).getPassword(),
+                    if (StringUtils.isBlank(updatedUser.getPassword())
+                            || ENCRYPTOR.verify(updatedUser.getPassword(),
                                     user.getCipherAlgorithm(), user.getPassword())) {
 
-                        ((UserTO) updated).setPassword(null);
+                        updatedUser.setPassword(null);
                     }
-                    return (T) AnyOperations.diff(((UserTO) updated), ((UserTO) original), true);
+
+                    updatedUser.setSecurityQuestion(updatedUser.getSecurityQuestion());
+                    updatedUser.setMustChangePassword(originalUser.isMustChangePassword());
+
+                    anyPatch = (T) AnyOperations.diff(updatedUser, originalUser, true);
+                    break;
 
                 case GROUP:
-                    return (T) AnyOperations.diff(((GroupTO) updated), ((GroupTO) original), true);
+                    GroupTO originalGroup = (GroupTO) original;
+                    GroupTO updatedGroup = (GroupTO) updated;
+
+                    if (StringUtils.isBlank(updatedGroup.getName())) {
+                        updatedGroup.setName(originalGroup.getName());
+                    }
+                    updatedGroup.setUserOwner(originalGroup.getUserOwner());
+                    updatedGroup.setGroupOwner(originalGroup.getGroupOwner());
+                    updatedGroup.getTypeExtensions().addAll(originalGroup.getTypeExtensions());
+
+                    anyPatch = (T) AnyOperations.diff(updatedGroup, originalGroup, true);
+                    break;
 
                 case ANY_OBJECT:
-                    return (T) AnyOperations.diff(((AnyObjectTO) updated), ((AnyObjectTO) original), true);
+                    AnyObjectTO originalAnyObject = (AnyObjectTO) original;
+                    AnyObjectTO updatedAnyObject = (AnyObjectTO) updated;
+
+                    if (StringUtils.isBlank(updatedAnyObject.getName())) {
+                        updatedAnyObject.setName(originalAnyObject.getName());
+                    }
+
+                    anyPatch = (T) AnyOperations.diff(updatedAnyObject, originalAnyObject, true);
+                    break;
 
                 default:
             }
         }
 
-        return null;
+        return anyPatch;
     }
 
-    private <T extends AnyTO> T getAnyTOFromConnObject(final ConnectorObject obj,
-            final PullTask pullTask, final Provision provision, final AnyUtils anyUtils) {
+    private <T extends AnyTO> T getAnyTOFromConnObject(
+            final ConnectorObject obj,
+            final PullTask pullTask,
+            final Provision provision,
+            final AnyUtils anyUtils) {
 
         T anyTO = anyUtils.newAnyTO();
         anyTO.setType(provision.getAnyType().getKey());