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) {