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 2016/07/04 14:08:55 UTC
[2/2] syncope git commit: Moving PropagationByResource in a more
appropriate module
Moving PropagationByResource in a more appropriate module
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/df7613e5
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/df7613e5
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/df7613e5
Branch: refs/heads/master
Commit: df7613e50c2c31074463ee9236fd71ea869fa928
Parents: 5a3b09c
Author: Francesco Chicchiricc� <il...@apache.org>
Authored: Mon Jul 4 16:08:43 2016 +0200
Committer: Francesco Chicchiricc� <il...@apache.org>
Committed: Mon Jul 4 16:08:43 2016 +0200
----------------------------------------------------------------------
.../common/lib/types/PropagationByResource.java | 375 ------------------
.../apache/syncope/core/logic/RealmLogic.java | 2 +-
.../core/persistence/api/dao/GroupDAO.java | 19 -
.../core/persistence/jpa/dao/JPAGroupDAO.java | 47 ---
.../provisioning/api/PropagationByResource.java | 376 +++++++++++++++++++
.../core/provisioning/api/WorkflowResult.java | 1 -
.../api/data/AnyObjectDataBinder.java | 2 +-
.../provisioning/api/data/GroupDataBinder.java | 20 +-
.../provisioning/api/data/RealmDataBinder.java | 2 +-
.../provisioning/api/data/UserDataBinder.java | 2 +-
.../api/propagation/PropagationManager.java | 2 +-
.../DefaultAnyObjectProvisioningManager.java | 2 +-
.../java/DefaultGroupProvisioningManager.java | 10 +-
.../java/DefaultUserProvisioningManager.java | 2 +-
.../java/data/AbstractAnyDataBinder.java | 2 +-
.../java/data/AnyObjectDataBinderImpl.java | 2 +-
.../java/data/GroupDataBinderImpl.java | 50 ++-
.../java/data/RealmDataBinderImpl.java | 2 +-
.../java/data/UserDataBinderImpl.java | 2 +-
.../propagation/PropagationManagerImpl.java | 2 +-
.../pushpull/AbstractPullResultHandler.java | 2 +-
.../pushpull/AbstractPushResultHandler.java | 2 +-
.../pushpull/RealmPullResultHandlerImpl.java | 2 +-
.../pushpull/RealmPushResultHandlerImpl.java | 2 +-
.../pushpull/UserPushResultHandlerImpl.java | 2 +-
.../activiti/ActivitiUserWorkflowAdapter.java | 2 +-
.../workflow/activiti/task/PasswordReset.java | 2 +-
.../core/workflow/activiti/task/Update.java | 2 +-
.../java/DefaultAnyObjectWorkflowAdapter.java | 2 +-
.../java/DefaultGroupWorkflowAdapter.java | 2 +-
.../java/DefaultUserWorkflowAdapter.java | 2 +-
.../camel/CamelUserProvisioningManager.java | 2 +-
.../AnyObjectDeprovisionProcessor.java | 2 +-
.../processor/AnyObjectProvisionProcessor.java | 2 +-
.../camel/processor/GroupDeleteProcessor.java | 10 +-
.../processor/GroupDeprovisionProcessor.java | 2 +-
.../processor/GroupProvisionProcessor.java | 2 +-
.../camel/processor/UserDeleteProcessor.java | 2 +-
.../processor/UserDeprovisionProcessor.java | 2 +-
.../camel/processor/UserProvisionProcessor.java | 2 +-
.../UserStatusPropagationProcessor.java | 2 +-
41 files changed, 488 insertions(+), 484 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/common/lib/src/main/java/org/apache/syncope/common/lib/types/PropagationByResource.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/PropagationByResource.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/PropagationByResource.java
deleted file mode 100644
index d172054..0000000
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/types/PropagationByResource.java
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.common.lib.types;
-
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Utility class for encapsulating operations to be performed on various resources.
- */
-public class PropagationByResource implements Serializable {
-
- private static final long serialVersionUID = -5699740428104336636L;
-
- /**
- * Resources for creation.
- */
- private final Set<String> toBeCreated;
-
- /**
- * Resources for update.
- */
- private final Set<String> toBeUpdated;
-
- /**
- * Resources for deletion.
- */
- private final Set<String> toBeDeleted;
-
- /**
- * Mapping target resource names to old ConnObjectKeys (when applicable).
- */
- private final Map<String, String> oldConnObjectKeys;
-
- /**
- * Default constructor.
- */
- public PropagationByResource() {
- toBeCreated = new HashSet<>();
- toBeUpdated = new HashSet<>();
- toBeDeleted = new HashSet<>();
-
- oldConnObjectKeys = new HashMap<>();
- }
-
- /**
- * Avoid potential conflicts by not doing create or update on any resource for which a delete is requested, and by
- * not doing any create on any resource for which an update is requested.
- */
- public final void purge() {
- toBeCreated.removeAll(toBeDeleted);
- toBeCreated.removeAll(toBeUpdated);
-
- toBeUpdated.removeAll(toBeDeleted);
- }
-
- /**
- * Add an element.
- *
- * @param type resource operation type
- * @param resourceKey target resource
- * @return whether the operation was successful or not
- */
- public final boolean add(final ResourceOperation type, final String resourceKey) {
- Set<String> set;
- switch (type) {
- case CREATE:
- set = toBeCreated;
- break;
-
- case UPDATE:
- set = toBeUpdated;
- break;
-
- case DELETE:
- default:
- set = toBeDeleted;
- break;
- }
-
- return set.add(resourceKey);
- }
-
- /**
- * Add some elements.
- *
- * @param type resource operation type
- * @param resourceKeys target resources
- * @return whether the operation was successful or not
- */
- public boolean addAll(final ResourceOperation type, final Collection<String> resourceKeys) {
- Set<String> set;
- switch (type) {
- case CREATE:
- set = toBeCreated;
- break;
-
- case UPDATE:
- set = toBeUpdated;
- break;
-
- case DELETE:
- default:
- set = toBeDeleted;
- break;
- }
-
- return set.addAll(resourceKeys);
- }
-
- /**
- * Remove an element.
- *
- * @param type resource operation type
- * @param resourceKey target resource
- * @return whether the operation was successful or not
- */
- public final boolean remove(final ResourceOperation type, final String resourceKey) {
- boolean result = false;
-
- switch (type) {
- case CREATE:
- result = toBeCreated.remove(resourceKey);
- break;
-
- case UPDATE:
- result = toBeUpdated.remove(resourceKey);
- break;
-
- case DELETE:
- result = toBeDeleted.remove(resourceKey);
- break;
-
- default:
- }
-
- return result;
- }
-
- /**
- * Remove some elements.
- *
- * @param type resource operation type
- * @param resourceKeys target resources
- * @return whether the operation was successful or not
- */
- public boolean removeAll(final ResourceOperation type, final Set<String> resourceKeys) {
- Set<String> set;
- switch (type) {
- case CREATE:
- set = toBeCreated;
- break;
-
- case UPDATE:
- set = toBeUpdated;
- break;
-
- case DELETE:
- default:
- set = toBeDeleted;
- break;
- }
-
- return set.removeAll(resourceKeys);
- }
-
- /**
- * Removes only the resource names in the underlying resource name sets that are contained in the specified
- * collection.
- *
- * @param resourceKeys collection containing resource names to be retained in the underlying resource name sets
- * @return <tt>true</tt> if the underlying resource name sets changed as a result of the call
- * @see Collection#removeAll(java.util.Collection)
- */
- public boolean removeAll(final Collection<String> resourceKeys) {
- return toBeCreated.removeAll(resourceKeys)
- | toBeUpdated.removeAll(resourceKeys)
- | toBeDeleted.removeAll(resourceKeys);
- }
-
- /**
- * Retains only the resource names in the underlying resource name sets that are contained in the specified
- * collection.
- *
- * @param resourceKeys collection containing resource names to be retained in the underlying resource name sets
- * @return <tt>true</tt> if the underlying resource name sets changed as a result of the call
- * @see Collection#retainAll(java.util.Collection)
- */
- public boolean retainAll(final Collection<String> resourceKeys) {
- return toBeCreated.retainAll(resourceKeys)
- | toBeUpdated.retainAll(resourceKeys)
- | toBeDeleted.retainAll(resourceKeys);
- }
-
- public boolean contains(final ResourceOperation type, final String resourceKey) {
- boolean result = false;
-
- switch (type) {
- case CREATE:
- result = toBeCreated.contains(resourceKey);
- break;
-
- case UPDATE:
- result = toBeUpdated.contains(resourceKey);
- break;
-
- case DELETE:
- result = toBeDeleted.contains(resourceKey);
- break;
-
- default:
- }
-
- return result;
- }
-
- /**
- * Get resources for a given resource operation type.
- *
- * @param type resource operation type
- * @return resource matching the given type
- */
- public final Set<String> get(final ResourceOperation type) {
- Set<String> result = Collections.<String>emptySet();
-
- switch (type) {
- case CREATE:
- result = toBeCreated;
- break;
-
- case UPDATE:
- result = toBeUpdated;
- break;
-
- case DELETE:
- result = toBeDeleted;
- break;
-
- default:
- }
-
- return result;
- }
-
- public Map<String, ResourceOperation> asMap() {
- Map<String, ResourceOperation> result = new HashMap<>();
- for (ResourceOperation operation : ResourceOperation.values()) {
- for (String resourceKey : get(operation)) {
- result.put(resourceKey, operation);
- }
- }
-
- return result;
- }
-
- /**
- * Set resources for a given resource operation type.
- *
- * @param type resource operation type
- * @param resourceKeys to be set
- */
- public final void set(final ResourceOperation type, final Collection<String> resourceKeys) {
-
- switch (type) {
- case CREATE:
- toBeCreated.clear();
- toBeCreated.addAll(resourceKeys);
- break;
-
- case UPDATE:
- toBeUpdated.clear();
- toBeUpdated.addAll(resourceKeys);
- break;
-
- case DELETE:
- toBeDeleted.clear();
- toBeDeleted.addAll(resourceKeys);
- break;
-
- default:
- }
- }
-
- /**
- * Merge another resource operation instance into this instance.
- *
- * @param propByRes to be merged
- */
- public final void merge(final PropagationByResource propByRes) {
- if (propByRes != null) {
- toBeCreated.addAll(propByRes.get(ResourceOperation.CREATE));
- toBeUpdated.addAll(propByRes.get(ResourceOperation.UPDATE));
- toBeDeleted.addAll(propByRes.get(ResourceOperation.DELETE));
- oldConnObjectKeys.putAll(propByRes.getOldConnObjectKeys());
- }
- }
-
- /**
- * Removes all of the operations.
- */
- public void clear() {
- toBeCreated.clear();
- toBeUpdated.clear();
- toBeDeleted.clear();
- }
-
- /**
- * Whether no operations are present.
- *
- * @return true if no operations (create / update / delete) and no old connObjectKeys are present
- */
- public final boolean isEmpty() {
- return toBeCreated.isEmpty() && toBeUpdated.isEmpty() && toBeDeleted.isEmpty() && oldConnObjectKeys.isEmpty();
- }
-
- /**
- * Fetch all old connObjectKeys.
- *
- * @return old connObjectKeys; can be empty
- */
- public Map<String, String> getOldConnObjectKeys() {
- return oldConnObjectKeys;
- }
-
- /**
- * Fetch old connObjectKey for given resource name.
- *
- * @param resourceKey resource name
- * @return old connObjectKey; can be null
- */
- public String getOldConnObjectKey(final String resourceKey) {
- return oldConnObjectKeys.get(resourceKey);
- }
-
- /**
- * Add old ConnObjectKey for a given resource name.
- *
- * @param resourceKey resourceKey resource name
- * @param oldConnObjectKey old ConnObjectKey
- */
- public void addOldConnObjectKey(final String resourceKey, final String oldConnObjectKey) {
- if (resourceKey != null && oldConnObjectKey != null) {
- oldConnObjectKeys.put(resourceKey, oldConnObjectKey);
- }
- }
-
- @Override
- public String toString() {
- return "To be Created: " + toBeCreated + ";\n"
- + "To be Updated: " + toBeUpdated + ";\n"
- + "To be Deleted: " + toBeDeleted + ";\n"
- + "Old connObjectKeys: " + oldConnObjectKeys;
- }
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
index 47e0448..985bd02 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
@@ -32,7 +32,7 @@ import org.apache.syncope.common.lib.to.ProvisioningResult;
import org.apache.syncope.common.lib.to.RealmTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.ClientExceptionType;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.common.lib.types.StandardEntitlement;
import org.apache.syncope.core.persistence.api.dao.AnySearchDAO;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java
index f0a5b08..aa30108 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java
@@ -20,7 +20,6 @@ package org.apache.syncope.core.persistence.api.dao;
import java.util.List;
import java.util.Map;
-import org.apache.syncope.common.lib.types.PropagationByResource;
import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
import org.apache.syncope.core.persistence.api.entity.anyobject.AMembership;
import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject;
@@ -47,24 +46,6 @@ public interface GroupDAO extends AnyDAO<Group> {
List<UMembership> findUMemberships(Group group);
- /**
- * Finds any objects having resources assigned exclusively because of memberships of the given group.
- *
- * @param groupKey group key
- * @return map containing pairs with any object key and operations to be performed on those resources (DELETE,
- * typically).
- */
- Map<String, PropagationByResource> findAnyObjectsWithTransitiveResources(String groupKey);
-
- /**
- * Finds users having resources assigned exclusively because of memberships of the given group.
- *
- * @param groupKey group key
- * @return map containing pairs with user key and operations to be performed on those resources (DELETE,
- * typically).
- */
- Map<String, PropagationByResource> findUsersWithTransitiveResources(String groupKey);
-
List<TypeExtension> findTypeExtensions(AnyTypeClass anyTypeClass);
void refreshDynMemberships(AnyObject anyObject);
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
index af5220f..1785672 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
@@ -29,14 +29,11 @@ import javax.persistence.TypedQuery;
import org.apache.commons.collections4.IterableUtils;
import org.apache.commons.collections4.Predicate;
import org.apache.syncope.common.lib.types.AnyTypeKind;
-import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.persistence.api.dao.GroupDAO;
import org.apache.syncope.core.persistence.api.dao.UserDAO;
-import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
import org.apache.syncope.core.persistence.api.entity.group.Group;
import org.apache.syncope.core.persistence.api.entity.user.User;
import org.apache.syncope.core.persistence.jpa.entity.group.JPAGroup;
-import org.apache.syncope.common.lib.types.PropagationByResource;
import org.apache.syncope.common.lib.types.StandardEntitlement;
import org.apache.syncope.core.provisioning.api.utils.RealmUtils;
import org.apache.syncope.core.persistence.api.search.SearchCondConverter;
@@ -47,7 +44,6 @@ import org.apache.syncope.core.persistence.api.dao.NotFoundException;
import org.apache.syncope.core.persistence.api.dao.PlainAttrDAO;
import org.apache.syncope.core.persistence.api.dao.search.AssignableCond;
import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
-import org.apache.syncope.core.persistence.api.entity.Any;
import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
import org.apache.syncope.core.persistence.api.entity.AnyUtils;
import org.apache.syncope.core.persistence.api.entity.Realm;
@@ -277,49 +273,6 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
entityManager().remove(group);
}
- private void populateTransitiveResources(
- final Group group, final Any<?> any, final Map<String, PropagationByResource> result) {
-
- PropagationByResource propByRes = new PropagationByResource();
- for (ExternalResource resource : group.getResources()) {
- if (!any.getResources().contains(resource)) {
- propByRes.add(ResourceOperation.DELETE, resource.getKey());
- }
-
- if (!propByRes.isEmpty()) {
- result.put(any.getKey(), propByRes);
- }
- }
- }
-
- @Transactional(readOnly = true)
- @Override
- public Map<String, PropagationByResource> findAnyObjectsWithTransitiveResources(final String groupKey) {
- Group group = authFind(groupKey);
-
- Map<String, PropagationByResource> result = new HashMap<>();
-
- for (AMembership membership : findAMemberships(group)) {
- populateTransitiveResources(group, membership.getLeftEnd(), result);
- }
-
- return result;
- }
-
- @Transactional(readOnly = true)
- @Override
- public Map<String, PropagationByResource> findUsersWithTransitiveResources(final String groupKey) {
- Group group = authFind(groupKey);
-
- Map<String, PropagationByResource> result = new HashMap<>();
-
- for (UMembership membership : findUMemberships(group)) {
- populateTransitiveResources(group, membership.getLeftEnd(), result);
- }
-
- return result;
- }
-
@Override
public List<TypeExtension> findTypeExtensions(final AnyTypeClass anyTypeClass) {
TypedQuery<TypeExtension> query = entityManager().createQuery(
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/PropagationByResource.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/PropagationByResource.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/PropagationByResource.java
new file mode 100644
index 0000000..e7b8bfc
--- /dev/null
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/PropagationByResource.java
@@ -0,0 +1,376 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.core.provisioning.api;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import org.apache.syncope.common.lib.types.ResourceOperation;
+
+/**
+ * Encapsulates operations to be performed on various resources.
+ */
+public class PropagationByResource implements Serializable {
+
+ private static final long serialVersionUID = -5699740428104336636L;
+
+ /**
+ * Resources for creation.
+ */
+ private final Set<String> toBeCreated;
+
+ /**
+ * Resources for update.
+ */
+ private final Set<String> toBeUpdated;
+
+ /**
+ * Resources for deletion.
+ */
+ private final Set<String> toBeDeleted;
+
+ /**
+ * Mapping target resource names to old ConnObjectKeys (when applicable).
+ */
+ private final Map<String, String> oldConnObjectKeys;
+
+ /**
+ * Default constructor.
+ */
+ public PropagationByResource() {
+ toBeCreated = new HashSet<>();
+ toBeUpdated = new HashSet<>();
+ toBeDeleted = new HashSet<>();
+
+ oldConnObjectKeys = new HashMap<>();
+ }
+
+ /**
+ * Avoid potential conflicts by not doing create or update on any resource for which a delete is requested, and by
+ * not doing any create on any resource for which an update is requested.
+ */
+ public final void purge() {
+ toBeCreated.removeAll(toBeDeleted);
+ toBeCreated.removeAll(toBeUpdated);
+
+ toBeUpdated.removeAll(toBeDeleted);
+ }
+
+ /**
+ * Add an element.
+ *
+ * @param type resource operation type
+ * @param resourceKey target resource
+ * @return whether the operation was successful or not
+ */
+ public final boolean add(final ResourceOperation type, final String resourceKey) {
+ Set<String> set;
+ switch (type) {
+ case CREATE:
+ set = toBeCreated;
+ break;
+
+ case UPDATE:
+ set = toBeUpdated;
+ break;
+
+ case DELETE:
+ default:
+ set = toBeDeleted;
+ break;
+ }
+
+ return set.add(resourceKey);
+ }
+
+ /**
+ * Add some elements.
+ *
+ * @param type resource operation type
+ * @param resourceKeys target resources
+ * @return whether the operation was successful or not
+ */
+ public boolean addAll(final ResourceOperation type, final Collection<String> resourceKeys) {
+ Set<String> set;
+ switch (type) {
+ case CREATE:
+ set = toBeCreated;
+ break;
+
+ case UPDATE:
+ set = toBeUpdated;
+ break;
+
+ case DELETE:
+ default:
+ set = toBeDeleted;
+ break;
+ }
+
+ return set.addAll(resourceKeys);
+ }
+
+ /**
+ * Remove an element.
+ *
+ * @param type resource operation type
+ * @param resourceKey target resource
+ * @return whether the operation was successful or not
+ */
+ public final boolean remove(final ResourceOperation type, final String resourceKey) {
+ boolean result = false;
+
+ switch (type) {
+ case CREATE:
+ result = toBeCreated.remove(resourceKey);
+ break;
+
+ case UPDATE:
+ result = toBeUpdated.remove(resourceKey);
+ break;
+
+ case DELETE:
+ result = toBeDeleted.remove(resourceKey);
+ break;
+
+ default:
+ }
+
+ return result;
+ }
+
+ /**
+ * Remove some elements.
+ *
+ * @param type resource operation type
+ * @param resourceKeys target resources
+ * @return whether the operation was successful or not
+ */
+ public boolean removeAll(final ResourceOperation type, final Set<String> resourceKeys) {
+ Set<String> set;
+ switch (type) {
+ case CREATE:
+ set = toBeCreated;
+ break;
+
+ case UPDATE:
+ set = toBeUpdated;
+ break;
+
+ case DELETE:
+ default:
+ set = toBeDeleted;
+ break;
+ }
+
+ return set.removeAll(resourceKeys);
+ }
+
+ /**
+ * Removes only the resource names in the underlying resource name sets that are contained in the specified
+ * collection.
+ *
+ * @param resourceKeys collection containing resource names to be retained in the underlying resource name sets
+ * @return <tt>true</tt> if the underlying resource name sets changed as a result of the call
+ * @see Collection#removeAll(java.util.Collection)
+ */
+ public boolean removeAll(final Collection<String> resourceKeys) {
+ return toBeCreated.removeAll(resourceKeys)
+ | toBeUpdated.removeAll(resourceKeys)
+ | toBeDeleted.removeAll(resourceKeys);
+ }
+
+ /**
+ * Retains only the resource names in the underlying resource name sets that are contained in the specified
+ * collection.
+ *
+ * @param resourceKeys collection containing resource names to be retained in the underlying resource name sets
+ * @return <tt>true</tt> if the underlying resource name sets changed as a result of the call
+ * @see Collection#retainAll(java.util.Collection)
+ */
+ public boolean retainAll(final Collection<String> resourceKeys) {
+ return toBeCreated.retainAll(resourceKeys)
+ | toBeUpdated.retainAll(resourceKeys)
+ | toBeDeleted.retainAll(resourceKeys);
+ }
+
+ public boolean contains(final ResourceOperation type, final String resourceKey) {
+ boolean result = false;
+
+ switch (type) {
+ case CREATE:
+ result = toBeCreated.contains(resourceKey);
+ break;
+
+ case UPDATE:
+ result = toBeUpdated.contains(resourceKey);
+ break;
+
+ case DELETE:
+ result = toBeDeleted.contains(resourceKey);
+ break;
+
+ default:
+ }
+
+ return result;
+ }
+
+ /**
+ * Get resources for a given resource operation type.
+ *
+ * @param type resource operation type
+ * @return resource matching the given type
+ */
+ public final Set<String> get(final ResourceOperation type) {
+ Set<String> result = Collections.<String>emptySet();
+
+ switch (type) {
+ case CREATE:
+ result = toBeCreated;
+ break;
+
+ case UPDATE:
+ result = toBeUpdated;
+ break;
+
+ case DELETE:
+ result = toBeDeleted;
+ break;
+
+ default:
+ }
+
+ return result;
+ }
+
+ public Map<String, ResourceOperation> asMap() {
+ Map<String, ResourceOperation> result = new HashMap<>();
+ for (ResourceOperation operation : ResourceOperation.values()) {
+ for (String resourceKey : get(operation)) {
+ result.put(resourceKey, operation);
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Set resources for a given resource operation type.
+ *
+ * @param type resource operation type
+ * @param resourceKeys to be set
+ */
+ public final void set(final ResourceOperation type, final Collection<String> resourceKeys) {
+
+ switch (type) {
+ case CREATE:
+ toBeCreated.clear();
+ toBeCreated.addAll(resourceKeys);
+ break;
+
+ case UPDATE:
+ toBeUpdated.clear();
+ toBeUpdated.addAll(resourceKeys);
+ break;
+
+ case DELETE:
+ toBeDeleted.clear();
+ toBeDeleted.addAll(resourceKeys);
+ break;
+
+ default:
+ }
+ }
+
+ /**
+ * Merge another resource operation instance into this instance.
+ *
+ * @param propByRes to be merged
+ */
+ public final void merge(final PropagationByResource propByRes) {
+ if (propByRes != null) {
+ toBeCreated.addAll(propByRes.get(ResourceOperation.CREATE));
+ toBeUpdated.addAll(propByRes.get(ResourceOperation.UPDATE));
+ toBeDeleted.addAll(propByRes.get(ResourceOperation.DELETE));
+ oldConnObjectKeys.putAll(propByRes.getOldConnObjectKeys());
+ }
+ }
+
+ /**
+ * Removes all of the operations.
+ */
+ public void clear() {
+ toBeCreated.clear();
+ toBeUpdated.clear();
+ toBeDeleted.clear();
+ }
+
+ /**
+ * Whether no operations are present.
+ *
+ * @return true if no operations (create / update / delete) and no old connObjectKeys are present
+ */
+ public final boolean isEmpty() {
+ return toBeCreated.isEmpty() && toBeUpdated.isEmpty() && toBeDeleted.isEmpty() && oldConnObjectKeys.isEmpty();
+ }
+
+ /**
+ * Fetch all old connObjectKeys.
+ *
+ * @return old connObjectKeys; can be empty
+ */
+ public Map<String, String> getOldConnObjectKeys() {
+ return oldConnObjectKeys;
+ }
+
+ /**
+ * Fetch old connObjectKey for given resource name.
+ *
+ * @param resourceKey resource name
+ * @return old connObjectKey; can be null
+ */
+ public String getOldConnObjectKey(final String resourceKey) {
+ return oldConnObjectKeys.get(resourceKey);
+ }
+
+ /**
+ * Add old ConnObjectKey for a given resource name.
+ *
+ * @param resourceKey resourceKey resource name
+ * @param oldConnObjectKey old ConnObjectKey
+ */
+ public void addOldConnObjectKey(final String resourceKey, final String oldConnObjectKey) {
+ if (resourceKey != null && oldConnObjectKey != null) {
+ oldConnObjectKeys.put(resourceKey, oldConnObjectKey);
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "To be Created: " + toBeCreated + ";\n"
+ + "To be Updated: " + toBeUpdated + ";\n"
+ + "To be Deleted: " + toBeDeleted + ";\n"
+ + "Old connObjectKeys: " + oldConnObjectKeys;
+ }
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/WorkflowResult.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/WorkflowResult.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/WorkflowResult.java
index 1b3f2ab..c1902eb 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/WorkflowResult.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/WorkflowResult.java
@@ -24,7 +24,6 @@ import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
-import org.apache.syncope.common.lib.types.PropagationByResource;
public class WorkflowResult<T> {
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/AnyObjectDataBinder.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/AnyObjectDataBinder.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/AnyObjectDataBinder.java
index 92fc48b..41e0674 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/AnyObjectDataBinder.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/AnyObjectDataBinder.java
@@ -20,7 +20,7 @@ package org.apache.syncope.core.provisioning.api.data;
import org.apache.syncope.common.lib.patch.AnyObjectPatch;
import org.apache.syncope.common.lib.to.AnyObjectTO;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject;
public interface AnyObjectDataBinder {
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/GroupDataBinder.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/GroupDataBinder.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/GroupDataBinder.java
index 6cb0a5b..087a271 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/GroupDataBinder.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/GroupDataBinder.java
@@ -18,9 +18,10 @@
*/
package org.apache.syncope.core.provisioning.api.data;
+import java.util.Map;
import org.apache.syncope.common.lib.patch.GroupPatch;
import org.apache.syncope.common.lib.to.GroupTO;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.core.persistence.api.entity.group.Group;
public interface GroupDataBinder {
@@ -33,4 +34,21 @@ public interface GroupDataBinder {
PropagationByResource update(Group group, GroupPatch groupPatch);
+ /**
+ * Finds any objects having resources assigned exclusively because of memberships of the given group.
+ *
+ * @param groupKey group key
+ * @return map containing pairs with any object key and operations to be performed on those resources (DELETE,
+ * typically).
+ */
+ Map<String, PropagationByResource> findAnyObjectsWithTransitiveResources(String groupKey);
+
+ /**
+ * Finds users having resources assigned exclusively because of memberships of the given group.
+ *
+ * @param groupKey group key
+ * @return map containing pairs with user key and operations to be performed on those resources (DELETE,
+ * typically).
+ */
+ Map<String, PropagationByResource> findUsersWithTransitiveResources(String groupKey);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/RealmDataBinder.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/RealmDataBinder.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/RealmDataBinder.java
index 8ac5fc8..380cb30 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/RealmDataBinder.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/RealmDataBinder.java
@@ -19,7 +19,7 @@
package org.apache.syncope.core.provisioning.api.data;
import org.apache.syncope.common.lib.to.RealmTO;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.core.persistence.api.entity.Realm;
public interface RealmDataBinder {
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/UserDataBinder.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/UserDataBinder.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/UserDataBinder.java
index 79bfd4d..3b0c449 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/UserDataBinder.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/UserDataBinder.java
@@ -20,7 +20,7 @@ package org.apache.syncope.core.provisioning.api.data;
import org.apache.syncope.common.lib.patch.UserPatch;
import org.apache.syncope.common.lib.to.UserTO;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.core.persistence.api.entity.user.User;
public interface UserDataBinder {
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java
index 5159088..caadb5b 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java
@@ -24,7 +24,7 @@ import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.common.lib.patch.UserPatch;
import org.apache.syncope.common.lib.to.AttrTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.core.persistence.api.entity.Realm;
import org.apache.syncope.core.persistence.api.entity.task.PropagationTask;
import org.apache.syncope.core.provisioning.api.WorkflowResult;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAnyObjectProvisioningManager.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAnyObjectProvisioningManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAnyObjectProvisioningManager.java
index 7b82d1b..b403bc1 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAnyObjectProvisioningManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAnyObjectProvisioningManager.java
@@ -29,7 +29,7 @@ import org.apache.syncope.common.lib.patch.AnyObjectPatch;
import org.apache.syncope.common.lib.to.PropagationStatus;
import org.apache.syncope.common.lib.to.AnyObjectTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
import org.apache.syncope.core.persistence.api.entity.task.PropagationTask;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java
index 8d32726..7711238 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java
@@ -34,17 +34,18 @@ import org.apache.syncope.common.lib.to.AttrTO;
import org.apache.syncope.common.lib.to.PropagationStatus;
import org.apache.syncope.common.lib.to.GroupTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
-import org.apache.syncope.common.lib.types.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.persistence.api.dao.GroupDAO;
import org.apache.syncope.core.persistence.api.entity.task.PropagationTask;
import org.apache.syncope.core.provisioning.api.GroupProvisioningManager;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.core.provisioning.api.WorkflowResult;
import org.apache.syncope.core.provisioning.api.propagation.PropagationManager;
import org.apache.syncope.core.provisioning.api.propagation.PropagationReporter;
import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskExecutor;
import org.apache.syncope.core.spring.ApplicationContextProvider;
import org.apache.syncope.core.provisioning.api.VirAttrHandler;
+import org.apache.syncope.core.provisioning.api.data.GroupDataBinder;
import org.apache.syncope.core.workflow.api.GroupWorkflowAdapter;
public class DefaultGroupProvisioningManager implements GroupProvisioningManager {
@@ -59,6 +60,9 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager
protected PropagationTaskExecutor taskExecutor;
@Autowired
+ protected GroupDataBinder groupDataBinder;
+
+ @Autowired
protected GroupDAO groupDAO;
@Autowired
@@ -156,7 +160,7 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager
// Generate propagation tasks for deleting users and any objects from group resources,
// if they are on those resources only because of the reason being deleted (see SYNCOPE-357)
for (Map.Entry<String, PropagationByResource> entry
- : groupDAO.findUsersWithTransitiveResources(key).entrySet()) {
+ : groupDataBinder.findUsersWithTransitiveResources(key).entrySet()) {
tasks.addAll(propagationManager.getDeleteTasks(
AnyTypeKind.USER,
@@ -165,7 +169,7 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager
excludedResources));
}
for (Map.Entry<String, PropagationByResource> entry
- : groupDAO.findAnyObjectsWithTransitiveResources(key).entrySet()) {
+ : groupDataBinder.findAnyObjectsWithTransitiveResources(key).entrySet()) {
tasks.addAll(propagationManager.getDeleteTasks(
AnyTypeKind.ANY_OBJECT,
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
index 55128c1..85d55cd 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
@@ -40,7 +40,7 @@ import org.apache.syncope.core.persistence.api.entity.task.PropagationTask;
import org.apache.syncope.core.persistence.api.entity.user.User;
import org.apache.syncope.core.provisioning.api.UserProvisioningManager;
import org.apache.syncope.core.provisioning.api.WorkflowResult;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.common.lib.types.StatusPatchType;
import org.apache.syncope.core.provisioning.api.propagation.PropagationException;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
index f1e4270..167ced4 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
@@ -55,7 +55,7 @@ import org.apache.syncope.core.persistence.api.entity.PlainAttr;
import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
import org.apache.syncope.core.persistence.api.entity.PlainSchema;
import org.apache.syncope.core.persistence.api.entity.group.Group;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.core.persistence.api.dao.AllowedSchemas;
import org.apache.syncope.core.provisioning.java.utils.ConnObjectUtils;
import org.apache.syncope.core.provisioning.java.jexl.JexlUtils;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
----------------------------------------------------------------------
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 74bf7e0..75d817f 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
@@ -40,7 +40,7 @@ import org.apache.syncope.common.lib.to.RelationshipTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.ClientExceptionType;
import org.apache.syncope.common.lib.types.PatchOperation;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.spring.BeanUtils;
import org.apache.syncope.core.provisioning.api.utils.EntityUtils;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java
index 2306cdc..c7ab1b1 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java
@@ -19,6 +19,7 @@
package org.apache.syncope.core.provisioning.java.data;
import java.util.Collections;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -36,11 +37,12 @@ import org.apache.syncope.common.lib.types.ClientExceptionType;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.persistence.api.entity.group.Group;
import org.apache.syncope.core.persistence.api.entity.user.User;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.core.provisioning.api.data.GroupDataBinder;
import org.apache.syncope.core.persistence.api.search.SearchCondConverter;
import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
+import org.apache.syncope.core.persistence.api.entity.Any;
import org.apache.syncope.core.persistence.api.entity.AnyType;
import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
import org.apache.syncope.core.persistence.api.entity.DerSchema;
@@ -48,8 +50,11 @@ import org.apache.syncope.core.persistence.api.entity.DynGroupMembership;
import org.apache.syncope.core.persistence.api.entity.Realm;
import org.apache.syncope.core.persistence.api.entity.VirSchema;
import org.apache.syncope.core.persistence.api.entity.anyobject.ADynGroupMembership;
+import org.apache.syncope.core.persistence.api.entity.anyobject.AMembership;
import org.apache.syncope.core.persistence.api.entity.group.TypeExtension;
+import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
import org.apache.syncope.core.persistence.api.entity.user.UDynGroupMembership;
+import org.apache.syncope.core.persistence.api.entity.user.UMembership;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@@ -361,4 +366,47 @@ public class GroupDataBinderImpl extends AbstractAnyDataBinder implements GroupD
? getGroupTO(groupDAO.authFind(key), true)
: getGroupTO(groupDAO.authFindByName(key), true);
}
+
+ private void populateTransitiveResources(
+ final Group group, final Any<?> any, final Map<String, PropagationByResource> result) {
+
+ PropagationByResource propByRes = new PropagationByResource();
+ for (ExternalResource resource : group.getResources()) {
+ if (!any.getResources().contains(resource)) {
+ propByRes.add(ResourceOperation.DELETE, resource.getKey());
+ }
+
+ if (!propByRes.isEmpty()) {
+ result.put(any.getKey(), propByRes);
+ }
+ }
+ }
+
+ @Transactional(readOnly = true)
+ @Override
+ public Map<String, PropagationByResource> findAnyObjectsWithTransitiveResources(final String groupKey) {
+ Group group = groupDAO.authFind(groupKey);
+
+ Map<String, PropagationByResource> result = new HashMap<>();
+
+ for (AMembership membership : groupDAO.findAMemberships(group)) {
+ populateTransitiveResources(group, membership.getLeftEnd(), result);
+ }
+
+ return result;
+ }
+
+ @Transactional(readOnly = true)
+ @Override
+ public Map<String, PropagationByResource> findUsersWithTransitiveResources(final String groupKey) {
+ Group group = groupDAO.authFind(groupKey);
+
+ Map<String, PropagationByResource> result = new HashMap<>();
+
+ for (UMembership membership : groupDAO.findUMemberships(group)) {
+ populateTransitiveResources(group, membership.getLeftEnd(), result);
+ }
+
+ return result;
+ }
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RealmDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RealmDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RealmDataBinderImpl.java
index f8f6334..015612e 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RealmDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RealmDataBinderImpl.java
@@ -25,7 +25,7 @@ import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.to.AnyTO;
import org.apache.syncope.common.lib.to.RealmTO;
import org.apache.syncope.common.lib.types.ClientExceptionType;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.provisioning.java.utils.TemplateUtils;
import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
----------------------------------------------------------------------
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 ff485ed..998514a 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
@@ -53,7 +53,7 @@ import org.apache.syncope.core.persistence.api.dao.SecurityQuestionDAO;
import org.apache.syncope.core.persistence.api.entity.group.Group;
import org.apache.syncope.core.persistence.api.entity.user.SecurityQuestion;
import org.apache.syncope.core.persistence.api.entity.user.User;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.core.provisioning.api.data.UserDataBinder;
import org.apache.syncope.core.spring.security.AuthContextUtils;
import org.apache.syncope.core.spring.security.Encryptor;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java
index 57a4894..b3035a1 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java
@@ -36,7 +36,7 @@ import org.apache.syncope.common.lib.patch.StringPatchItem;
import org.apache.syncope.common.lib.patch.UserPatch;
import org.apache.syncope.common.lib.to.AttrTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
import org.apache.syncope.core.persistence.api.dao.GroupDAO;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
----------------------------------------------------------------------
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 8beab31..2528308 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
@@ -30,7 +30,7 @@ import org.apache.syncope.common.lib.types.AuditElements;
import org.apache.syncope.common.lib.types.AuditElements.Result;
import org.apache.syncope.common.lib.types.MatchingRule;
import org.apache.syncope.common.lib.types.PatchOperation;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.PullMode;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.common.lib.types.UnmatchingRule;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java
index 6227718..a93c239 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java
@@ -31,7 +31,7 @@ import org.apache.syncope.common.lib.types.AuditElements;
import org.apache.syncope.common.lib.types.AuditElements.Result;
import org.apache.syncope.common.lib.types.MatchingRule;
import org.apache.syncope.common.lib.types.PatchOperation;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.common.lib.types.UnmatchingRule;
import org.apache.syncope.core.persistence.api.entity.task.PushTask;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/RealmPullResultHandlerImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/RealmPullResultHandlerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/RealmPullResultHandlerImpl.java
index dc70c4c..bb0ec6d 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/RealmPullResultHandlerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/RealmPullResultHandlerImpl.java
@@ -34,7 +34,7 @@ import org.apache.syncope.common.lib.types.AuditElements;
import org.apache.syncope.common.lib.types.AuditElements.Result;
import org.apache.syncope.common.lib.types.ClientExceptionType;
import org.apache.syncope.common.lib.types.MatchingRule;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.PullMode;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.common.lib.types.UnmatchingRule;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/RealmPushResultHandlerImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/RealmPushResultHandlerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/RealmPushResultHandlerImpl.java
index 334bd64..e823b45 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/RealmPushResultHandlerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/RealmPushResultHandlerImpl.java
@@ -25,7 +25,7 @@ import org.apache.syncope.common.lib.to.RealmTO;
import org.apache.syncope.common.lib.types.AuditElements;
import org.apache.syncope.common.lib.types.AuditElements.Result;
import org.apache.syncope.common.lib.types.MatchingRule;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.common.lib.types.UnmatchingRule;
import org.apache.syncope.core.persistence.api.entity.Realm;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/UserPushResultHandlerImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/UserPushResultHandlerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/UserPushResultHandlerImpl.java
index 5175215..255f317 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/UserPushResultHandlerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/UserPushResultHandlerImpl.java
@@ -25,7 +25,7 @@ import org.apache.syncope.common.lib.patch.AnyPatch;
import org.apache.syncope.common.lib.patch.UserPatch;
import org.apache.syncope.common.lib.to.AnyTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.persistence.api.entity.Any;
import org.apache.syncope.core.persistence.api.entity.AnyUtils;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java
----------------------------------------------------------------------
diff --git a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java
index ef1e732..e74aade 100644
--- a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java
+++ b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java
@@ -61,7 +61,7 @@ import org.apache.syncope.common.lib.patch.UserPatch;
import org.apache.syncope.common.lib.to.UserTO;
import org.apache.syncope.common.lib.to.WorkflowFormPropertyTO;
import org.apache.syncope.common.lib.to.WorkflowFormTO;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.common.lib.types.WorkflowFormPropertyType;
import org.apache.syncope.core.spring.security.AuthContextUtils;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/task/PasswordReset.java
----------------------------------------------------------------------
diff --git a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/task/PasswordReset.java b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/task/PasswordReset.java
index 997fd3b..d3caac6 100644
--- a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/task/PasswordReset.java
+++ b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/task/PasswordReset.java
@@ -21,7 +21,7 @@ package org.apache.syncope.core.workflow.activiti.task;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.syncope.common.lib.patch.PasswordPatch;
import org.apache.syncope.common.lib.patch.UserPatch;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.core.persistence.api.dao.UserDAO;
import org.apache.syncope.core.persistence.api.entity.user.User;
import org.apache.syncope.core.provisioning.api.data.UserDataBinder;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/task/Update.java
----------------------------------------------------------------------
diff --git a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/task/Update.java b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/task/Update.java
index 4448938..163cf1c 100644
--- a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/task/Update.java
+++ b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/task/Update.java
@@ -19,7 +19,7 @@
package org.apache.syncope.core.workflow.activiti.task;
import org.apache.syncope.common.lib.patch.UserPatch;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.core.persistence.api.entity.user.User;
import org.apache.syncope.core.provisioning.api.data.UserDataBinder;
import org.apache.syncope.core.workflow.activiti.ActivitiUserWorkflowAdapter;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultAnyObjectWorkflowAdapter.java
----------------------------------------------------------------------
diff --git a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultAnyObjectWorkflowAdapter.java b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultAnyObjectWorkflowAdapter.java
index 3c8466d..6aae0ef 100644
--- a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultAnyObjectWorkflowAdapter.java
+++ b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultAnyObjectWorkflowAdapter.java
@@ -24,7 +24,7 @@ import java.util.List;
import org.apache.syncope.common.lib.patch.AnyObjectPatch;
import org.apache.syncope.common.lib.to.AnyObjectTO;
import org.apache.syncope.common.lib.to.WorkflowFormTO;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject;
import org.apache.syncope.core.provisioning.api.WorkflowResult;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultGroupWorkflowAdapter.java
----------------------------------------------------------------------
diff --git a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultGroupWorkflowAdapter.java b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultGroupWorkflowAdapter.java
index 2a9e1c8..c60844c 100644
--- a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultGroupWorkflowAdapter.java
+++ b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultGroupWorkflowAdapter.java
@@ -24,7 +24,7 @@ import java.util.List;
import org.apache.syncope.common.lib.patch.GroupPatch;
import org.apache.syncope.common.lib.to.GroupTO;
import org.apache.syncope.common.lib.to.WorkflowFormTO;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.persistence.api.entity.group.Group;
import org.apache.syncope.core.provisioning.api.WorkflowResult;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java
----------------------------------------------------------------------
diff --git a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java
index 46367e2..2df0b77 100644
--- a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java
+++ b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java
@@ -28,7 +28,7 @@ import org.apache.syncope.common.lib.patch.PasswordPatch;
import org.apache.syncope.common.lib.patch.UserPatch;
import org.apache.syncope.common.lib.to.UserTO;
import org.apache.syncope.common.lib.to.WorkflowFormTO;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.persistence.api.dao.ConfDAO;
import org.apache.syncope.core.persistence.api.entity.user.User;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelUserProvisioningManager.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelUserProvisioningManager.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelUserProvisioningManager.java
index 5dd41ab..a9f17c8 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelUserProvisioningManager.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelUserProvisioningManager.java
@@ -33,7 +33,7 @@ import org.apache.syncope.common.lib.patch.StatusPatch;
import org.apache.syncope.common.lib.patch.UserPatch;
import org.apache.syncope.common.lib.to.PropagationStatus;
import org.apache.syncope.common.lib.to.UserTO;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.core.provisioning.api.UserProvisioningManager;
import org.apache.syncope.core.provisioning.api.WorkflowResult;
import org.apache.syncope.core.provisioning.api.pushpull.ProvisioningReport;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectDeprovisionProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectDeprovisionProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectDeprovisionProcessor.java
index 8831559..4c83fe5 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectDeprovisionProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectDeprovisionProcessor.java
@@ -23,7 +23,7 @@ import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.syncope.common.lib.types.AnyTypeKind;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.spring.ApplicationContextProvider;
import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectProvisionProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectProvisionProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectProvisionProcessor.java
index d81c8fd..2c5bb45 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectProvisionProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/AnyObjectProvisionProcessor.java
@@ -22,7 +22,7 @@ import java.util.List;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.syncope.common.lib.types.AnyTypeKind;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.spring.ApplicationContextProvider;
import org.apache.syncope.core.persistence.api.entity.task.PropagationTask;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupDeleteProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupDeleteProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupDeleteProcessor.java
index 83b8578..0ad4d77 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupDeleteProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupDeleteProcessor.java
@@ -25,10 +25,10 @@ import java.util.Set;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.syncope.common.lib.types.AnyTypeKind;
-import org.apache.syncope.common.lib.types.PropagationByResource;
import org.apache.syncope.core.spring.ApplicationContextProvider;
-import org.apache.syncope.core.persistence.api.dao.GroupDAO;
import org.apache.syncope.core.persistence.api.entity.task.PropagationTask;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.data.GroupDataBinder;
import org.apache.syncope.core.provisioning.api.propagation.PropagationManager;
import org.apache.syncope.core.provisioning.api.propagation.PropagationReporter;
import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskExecutor;
@@ -49,7 +49,7 @@ public class GroupDeleteProcessor implements Processor {
protected PropagationTaskExecutor taskExecutor;
@Autowired
- protected GroupDAO groupDAO;
+ protected GroupDataBinder groupDataBinder;
@Override
public void process(final Exchange exchange) throws Exception {
@@ -63,7 +63,7 @@ public class GroupDeleteProcessor implements Processor {
// Generate propagation tasks for deleting users from group resources, if they are on those resources only
// because of the reason being deleted (see SYNCOPE-357)
for (Map.Entry<String, PropagationByResource> entry
- : groupDAO.findUsersWithTransitiveResources(key).entrySet()) {
+ : groupDataBinder.findUsersWithTransitiveResources(key).entrySet()) {
tasks.addAll(propagationManager.getDeleteTasks(
AnyTypeKind.USER,
@@ -72,7 +72,7 @@ public class GroupDeleteProcessor implements Processor {
excludedResources));
}
for (Map.Entry<String, PropagationByResource> entry
- : groupDAO.findAnyObjectsWithTransitiveResources(key).entrySet()) {
+ : groupDataBinder.findAnyObjectsWithTransitiveResources(key).entrySet()) {
tasks.addAll(propagationManager.getDeleteTasks(
AnyTypeKind.ANY_OBJECT,
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupDeprovisionProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupDeprovisionProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupDeprovisionProcessor.java
index 89a6f79..d8e94f0 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupDeprovisionProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupDeprovisionProcessor.java
@@ -23,7 +23,7 @@ import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.syncope.common.lib.types.AnyTypeKind;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.spring.ApplicationContextProvider;
import org.apache.syncope.core.persistence.api.dao.GroupDAO;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupProvisionProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupProvisionProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupProvisionProcessor.java
index fc6aaa6..61c5833 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupProvisionProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupProvisionProcessor.java
@@ -22,7 +22,7 @@ import java.util.List;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.syncope.common.lib.types.AnyTypeKind;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.spring.ApplicationContextProvider;
import org.apache.syncope.core.persistence.api.entity.task.PropagationTask;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserDeleteProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserDeleteProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserDeleteProcessor.java
index 22195e3..0fe993c 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserDeleteProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserDeleteProcessor.java
@@ -23,7 +23,7 @@ import java.util.Set;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.syncope.common.lib.types.AnyTypeKind;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.spring.ApplicationContextProvider;
import org.apache.syncope.core.persistence.api.dao.UserDAO;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserDeprovisionProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserDeprovisionProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserDeprovisionProcessor.java
index b0eab15..38e2a21 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserDeprovisionProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserDeprovisionProcessor.java
@@ -23,7 +23,7 @@ import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.syncope.common.lib.types.AnyTypeKind;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.spring.ApplicationContextProvider;
import org.apache.syncope.core.persistence.api.dao.UserDAO;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserProvisionProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserProvisionProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserProvisionProcessor.java
index 7e76bf3..632c188 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserProvisionProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserProvisionProcessor.java
@@ -29,7 +29,7 @@ import org.apache.syncope.common.lib.patch.PasswordPatch;
import org.apache.syncope.common.lib.patch.StringPatchItem;
import org.apache.syncope.common.lib.patch.UserPatch;
import org.apache.syncope.common.lib.types.PatchOperation;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.spring.ApplicationContextProvider;
import org.apache.syncope.core.persistence.api.dao.UserDAO;
http://git-wip-us.apache.org/repos/asf/syncope/blob/df7613e5/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserStatusPropagationProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserStatusPropagationProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserStatusPropagationProcessor.java
index b8f09ab..fcd59e3 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserStatusPropagationProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserStatusPropagationProcessor.java
@@ -24,7 +24,7 @@ import org.apache.camel.Processor;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.syncope.common.lib.patch.StatusPatch;
import org.apache.syncope.common.lib.types.AnyTypeKind;
-import org.apache.syncope.common.lib.types.PropagationByResource;
+import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.common.lib.types.StatusPatchType;
import org.apache.syncope.core.spring.ApplicationContextProvider;