You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by fm...@apache.org on 2018/12/10 13:36:06 UTC

[syncope] branch 2_0_X updated: [SYNCOPE-1411] force cascade

This is an automated email from the ASF dual-hosted git repository.

fmartelli 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 6357b8b  [SYNCOPE-1411] force cascade
6357b8b is described below

commit 6357b8b3d9d8dd26cfdc4509e18b5e988063993f
Author: fmartelli <fa...@gmail.com>
AuthorDate: Mon Dec 10 14:24:30 2018 +0100

    [SYNCOPE-1411] force cascade
---
 .../provisioning/java/data/AnyObjectDataBinderImpl.java   | 15 +++++++++++++++
 .../core/provisioning/java/data/UserDataBinderImpl.java   | 14 ++++++++++++++
 2 files changed, 29 insertions(+)

diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
index f5cca66..902b502 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
@@ -62,6 +62,7 @@ import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject;
 import org.apache.syncope.core.persistence.api.entity.group.Group;
 import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
 import org.apache.syncope.core.provisioning.api.data.AnyObjectDataBinder;
+import org.apache.syncope.core.provisioning.api.utils.EntityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
@@ -368,9 +369,23 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
                 if (membership != null) {
                     anyObject.getMemberships().remove(membership);
                     membership.setLeftEnd(null);
+                    Set<String> membAttrKeys = new HashSet<>();
                     for (APlainAttr attr : anyObject.getPlainAttrs(membership)) {
                         anyObject.remove(attr);
                         attr.setOwner(null);
+                        membAttrKeys.add(attr.getKey());
+                        if (attr.getSchema().isUniqueConstraint()) {
+                            plainAttrValueDAO.delete(attr.getUniqueValue().getKey(), anyUtils.plainAttrValueClass());
+                        } else {
+                            Collection<String> valuesToBeRemoved = 
+                                    CollectionUtils.collect(attr.getValues(), EntityUtils.keyTransformer());
+                            for (String attrValueKey : valuesToBeRemoved) {
+                                plainAttrValueDAO.delete(attrValueKey, anyUtils.plainAttrValueClass());
+                            }
+                        }
+                    }
+                    for (String attrKey : membAttrKeys) {
+                        plainAttrDAO.delete(attrKey, anyUtils.plainAttrClass());
                     }
 
                     if (membPatch.getOperation() == PatchOperation.DELETE) {
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
index 175375c..4efe304 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
@@ -437,10 +437,24 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
                 if (membership != null) {
                     user.getMemberships().remove(membership);
                     membership.setLeftEnd(null);
+                    Set<String> membAttrKeys = new HashSet<>();
                     for (UPlainAttr attr : user.getPlainAttrs(membership)) {
                         user.remove(attr);
                         attr.setOwner(null);
                         attr.setMembership(null);
+                        membAttrKeys.add(attr.getKey());
+                        if (attr.getSchema().isUniqueConstraint()) {
+                            plainAttrValueDAO.delete(attr.getUniqueValue().getKey(), anyUtils.plainAttrValueClass());
+                        } else {
+                            Collection<String> valuesToBeRemoved = 
+                                    CollectionUtils.collect(attr.getValues(), EntityUtils.keyTransformer());
+                            for (String attrValueKey : valuesToBeRemoved) {
+                                plainAttrValueDAO.delete(attrValueKey, anyUtils.plainAttrValueClass());
+                            }
+                        }
+                    }
+                    for (String attrKey : membAttrKeys) {
+                        plainAttrDAO.delete(attrKey, anyUtils.plainAttrClass());
                     }
 
                     if (membPatch.getOperation() == PatchOperation.DELETE) {