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());