More replacements thanks to commons-collections

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

Branch: refs/heads/SYNCOPE-119
Commit: bac03b2569644991e26d2879da2eda47bf9debb9
Parents: 091c735
Author: Francesco Chicchiriccò <ilgro...@apache.org>
Authored: Wed Apr 8 10:00:38 2015 +0200
Committer: Francesco Chicchiriccò <ilgro...@apache.org>
Committed: Wed Apr 8 10:00:38 2015 +0200

----------------------------------------------------------------------
 .../syncope/core/logic/NotificationTest.java    | 14 ++---
 .../syncope/core/misc/CollectionUtils2.java     | 61 ++++++++++++++++++++
 .../persistence/api/GroupEntitlementUtil.java   | 14 +++--
 .../validation/InvalidEntityException.java      | 15 ++---
 .../jpa/entity/AbstractPlainAttr.java           |  2 +-
 .../api/cache/VirAttrCacheValue.java            |  3 +-
 .../api/propagation/PropagationManager.java     |  3 +-
 .../provisioning/java/AsyncConnectorFacade.java |  4 +-
 .../java/DefaultGroupProvisioningManager.java   |  9 +--
 .../java/DefaultUserProvisioningManager.java    | 18 +++---
 .../java/cache/DisabledVirAttrCache.java        |  2 +-
 .../data/AbstractAttributableDataBinder.java    |  4 +-
 .../notification/NotificationManagerImpl.java   | 19 +++---
 .../DBPasswordPropagationActions.java           | 28 ++++-----
 .../LDAPMembershipPropagationActions.java       |  4 +-
 .../LDAPPasswordPropagationActions.java         | 27 +++++----
 .../propagation/PropagationManagerImpl.java     | 47 +++++++--------
 .../java/sync/AbstractProvisioningJob.java      | 13 +++--
 .../java/sync/AbstractSyncResultHandler.java    |  2 +-
 .../java/sync/AbstractSyncopeResultHandler.java |  2 +
 .../java/sync/DBPasswordSyncActions.java        | 28 ++++-----
 .../java/sync/LDAPMembershipSyncActions.java    | 31 +++++-----
 .../java/sync/LDAPPasswordSyncActions.java      |  2 +-
 23 files changed, 213 insertions(+), 139 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/logic/src/test/java/org/apache/syncope/core/logic/NotificationTest.java
----------------------------------------------------------------------
diff --git 
a/core/logic/src/test/java/org/apache/syncope/core/logic/NotificationTest.java 
b/core/logic/src/test/java/org/apache/syncope/core/logic/NotificationTest.java
index fdf4d11..4555189 100644
--- 
a/core/logic/src/test/java/org/apache/syncope/core/logic/NotificationTest.java
+++ 
b/core/logic/src/test/java/org/apache/syncope/core/logic/NotificationTest.java
@@ -256,7 +256,7 @@ public class NotificationTest {
     public void notifyByMail() throws Exception {
         // 1. create suitable notification for subsequent tests
         Notification notification = 
entityFactory.newEntity(Notification.class);
-        notification.addEvent("[REST]:[UserLogic]:[]:[create]:[SUCCESS]");
+        
notification.getEvents().add("[REST]:[UserLogic]:[]:[create]:[SUCCESS]");
         notification.setUserAbout(new 
UserFiqlSearchConditionBuilder().inGroups(7L).query());
         notification.setRecipients(new 
UserFiqlSearchConditionBuilder().inGroups(8L).query());
         notification.setSelfAsRecipient(true);
@@ -314,7 +314,7 @@ public class NotificationTest {
     public void issueSYNCOPE192() throws Exception {
         // 1. create suitable notification for subsequent tests
         Notification notification = 
entityFactory.newEntity(Notification.class);
-        notification.addEvent("[REST]:[UserLogic]:[]:[create]:[SUCCESS]");
+        
notification.getEvents().add("[REST]:[UserLogic]:[]:[create]:[SUCCESS]");
         notification.setUserAbout(new 
UserFiqlSearchConditionBuilder().inGroups(7L).query());
         notification.setRecipients(new 
UserFiqlSearchConditionBuilder().inGroups(8L).query());
         notification.setSelfAsRecipient(true);
@@ -366,7 +366,7 @@ public class NotificationTest {
     public void notifyByMailEmptyAbout() throws Exception {
         // 1. create suitable notification for subsequent tests
         Notification notification = 
entityFactory.newEntity(Notification.class);
-        notification.addEvent("[REST]:[UserLogic]:[]:[create]:[SUCCESS]");
+        
notification.getEvents().add("[REST]:[UserLogic]:[]:[create]:[SUCCESS]");
         notification.setUserAbout(null);
         notification.setRecipients(new 
UserFiqlSearchConditionBuilder().inGroups(8L).query());
         notification.setSelfAsRecipient(true);
@@ -416,7 +416,7 @@ public class NotificationTest {
     public void notifyByMailWithRetry() throws Exception {
         // 1. create suitable notification for subsequent tests
         Notification notification = 
entityFactory.newEntity(Notification.class);
-        notification.addEvent("[REST]:[UserLogic]:[]:[create]:[SUCCESS]");
+        
notification.getEvents().add("[REST]:[UserLogic]:[]:[create]:[SUCCESS]");
         notification.setUserAbout(null);
         notification.setRecipients(new 
UserFiqlSearchConditionBuilder().inGroups(8L).query());
         notification.setSelfAsRecipient(true);
@@ -485,7 +485,7 @@ public class NotificationTest {
     public void issueSYNCOPE445() throws Exception {
         // 1. create suitable notification for subsequent tests
         Notification notification = 
entityFactory.newEntity(Notification.class);
-        notification.addEvent("[REST]:[UserLogic]:[]:[create]:[SUCCESS]");
+        
notification.getEvents().add("[REST]:[UserLogic]:[]:[create]:[SUCCESS]");
         notification.setUserAbout(new 
UserFiqlSearchConditionBuilder().inGroups(7L).query());
         notification.setRecipients(new 
UserFiqlSearchConditionBuilder().inGroups(8L).query());
         notification.setSelfAsRecipient(true);
@@ -544,7 +544,7 @@ public class NotificationTest {
     public void issueSYNCOPE492() throws Exception {
         // 1. create suitable disabled notification for subsequent tests
         Notification notification = 
entityFactory.newEntity(Notification.class);
-        notification.addEvent("[REST]:[UserLogic]:[]:[create]:[SUCCESS]");
+        
notification.getEvents().add("[REST]:[UserLogic]:[]:[create]:[SUCCESS]");
         notification.setUserAbout(new 
UserFiqlSearchConditionBuilder().inGroups(7L).query());
         notification.setSelfAsRecipient(true);
 
@@ -588,7 +588,7 @@ public class NotificationTest {
 
         // 1. create suitable notification for subsequent tests
         Notification notification = 
entityFactory.newEntity(Notification.class);
-        notification.addEvent("[REST]:[GroupLogic]:[]:[create]:[SUCCESS]");
+        
notification.getEvents().add("[REST]:[GroupLogic]:[]:[create]:[SUCCESS]");
         notification.setGroupAbout(new 
GroupFiqlSearchConditionBuilder().is("name").equalTo("group446").query());
         notification.setSelfAsRecipient(false);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/misc/src/main/java/org/apache/syncope/core/misc/CollectionUtils2.java
----------------------------------------------------------------------
diff --git 
a/core/misc/src/main/java/org/apache/syncope/core/misc/CollectionUtils2.java 
b/core/misc/src/main/java/org/apache/syncope/core/misc/CollectionUtils2.java
new file mode 100644
index 0000000..44ddc5c
--- /dev/null
+++ b/core/misc/src/main/java/org/apache/syncope/core/misc/CollectionUtils2.java
@@ -0,0 +1,61 @@
+/*
+ * 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.misc;
+
+import java.util.Iterator;
+
+public final class CollectionUtils2 {
+
+    /**
+     * Returns the next element in <tt>iterator</tt> or <tt>defaultValue</tt> 
if the iterator is empty.
+     *
+     * @param defaultValue the default value to return if the iterator is empty
+     * @return the next element of <tt>iterator</tt> or the default value
+     */
+    public static <T> T getNext(final Iterator<? extends T> iterator, final T 
defaultValue) {
+        return iterator.hasNext() ? iterator.next() : defaultValue;
+    }
+
+    /**
+     * Returns the first element in <tt>iterable</tt> or <tt>defaultValue</tt> 
if the iterable is empty.
+     *
+     * <p/>
+     * If no default value is desired (and the caller instead wants a {@link 
java.util.NoSuchElementException} to be
+     * thrown), it is recommended that <tt>iterable.iterator().next()}</tt> is 
used instead.
+     *
+     * @param defaultValue the default value to return if the iterable is empty
+     * @return the first element of <tt>iterable</tt> or the default value
+     */
+    public static <T> T getFirst(final Iterable<? extends T> iterable, final T 
defaultValue) {
+        return getNext(iterable.iterator(), defaultValue);
+    }
+
+    /**
+     * Returns the first element in <tt>iterable</tt> or <tt>null</tt> if the 
iterable is empty.
+     *
+     * @return the first element of <tt>iterable</tt> or <tt>null</tt>
+     */
+    public static <T> T getFirstOrNull(final Iterable<? extends T> iterable) {
+        return getNext(iterable.iterator(), null);
+    }
+
+    private CollectionUtils2() {
+        // private constructor for static utility class
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/GroupEntitlementUtil.java
----------------------------------------------------------------------
diff --git 
a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/GroupEntitlementUtil.java
 
b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/GroupEntitlementUtil.java
index b0f104a..723dfe1 100644
--- 
a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/GroupEntitlementUtil.java
+++ 
b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/GroupEntitlementUtil.java
@@ -22,6 +22,8 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.regex.Pattern;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Transformer;
 import org.apache.syncope.core.persistence.api.entity.Entitlement;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -73,11 +75,13 @@ public final class GroupEntitlementUtil {
     }
 
     public static Set<Long> getGroupKeys(final List<Entitlement> entitlements) 
{
-        Set<String> names = new HashSet<>(entitlements.size());
-        for (Entitlement entitlement : entitlements) {
-            names.add(entitlement.getKey());
-        }
-        return GroupEntitlementUtil.getGroupKeys(names);
+        return getGroupKeys(CollectionUtils.collect(entitlements, new 
Transformer<Entitlement, String>() {
+
+            @Override
+            public String transform(final Entitlement entitlement) {
+                return entitlement.getKey();
+            }
+        }, new HashSet<String>()));
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/attrvalue/validation/InvalidEntityException.java
----------------------------------------------------------------------
diff --git 
a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/attrvalue/validation/InvalidEntityException.java
 
b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/attrvalue/validation/InvalidEntityException.java
index 818fb61..97f1a58 100644
--- 
a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/attrvalue/validation/InvalidEntityException.java
+++ 
b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/attrvalue/validation/InvalidEntityException.java
@@ -24,6 +24,8 @@ import java.util.Map;
 import java.util.Set;
 import javax.validation.ConstraintViolation;
 import javax.validation.ValidationException;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Predicate;
 import org.apache.syncope.common.lib.types.EntityViolationType;
 
 /**
@@ -97,14 +99,13 @@ public class InvalidEntityException extends 
ValidationException {
     }
 
     public final boolean hasViolation(final EntityViolationType type) {
-        boolean found = false;
-        for (Class<?> entity : violations.keySet()) {
-            if (violations.get(entity).contains(type)) {
-                found = true;
-            }
-        }
+        return CollectionUtils.exists(violations.keySet(), new 
Predicate<Class<?>>() {
 
-        return found;
+            @Override
+            public boolean evaluate(final Class<?> entity) {
+                return violations.get(entity).contains(type);
+            }
+        });
     }
 
     public String getEntityClassSimpleName() {

http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttr.java
----------------------------------------------------------------------
diff --git 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttr.java
 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttr.java
index 2db17f0..aa7af95 100644
--- 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttr.java
+++ 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttr.java
@@ -80,7 +80,7 @@ public abstract class AbstractPlainAttr extends 
AbstractEntity<Long> implements
             result = 
Collections.singletonList(getUniqueValue().getValueAsString());
         }
 
-        return result;
+        return Collections.unmodifiableList(result);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCacheValue.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCacheValue.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCacheValue.java
index 0db95ac..3288432 100644
--- 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCacheValue.java
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCacheValue.java
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.core.provisioning.api.cache;
 
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -73,7 +74,7 @@ public class VirAttrCacheValue {
             res.addAll(value);
         }
 
-        return res;
+        return Collections.unmodifiableSet(res);
     }
 
     public Date getLastAccessDate() {

http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/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 277dfc9..895e0dc 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
@@ -207,6 +207,7 @@ public interface PropagationManager {
      * the creation fails onto a mandatory resource.
      *
      * @param userKey to be deleted
+     * @param resourceNames resources
      * @param noPropResourceNames name of external resources not to be 
considered for propagation
      * @return list of propagation tasks
      */
@@ -231,7 +232,7 @@ public interface PropagationManager {
      * @param noPropResourceNames external resource names not to be considered 
for propagation
      * @return list of propagation tasks
      */
-    List<PropagationTask> getUserUpdateTaskIds(User user, Boolean enable, 
Set<String> noPropResourceNames);
+    List<PropagationTask> getUserUpdateTaskIds(User user, Boolean enable, 
Collection<String> noPropResourceNames);
 
     /**
      * Performs update on each resource associated to the user.

http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AsyncConnectorFacade.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AsyncConnectorFacade.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AsyncConnectorFacade.java
index 416c8c0..ae2d297 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AsyncConnectorFacade.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AsyncConnectorFacade.java
@@ -154,7 +154,7 @@ public class AsyncConnectorFacade {
 
     @Async
     public Future<Set<String>> getSchemaNames(final ConnectorFacade connector, 
final boolean includeSpecial) {
-        final Set<String> schemaNames = new HashSet<String>();
+        final Set<String> schemaNames = new HashSet<>();
 
         try {
             final Schema schema = connector.schema();
@@ -175,7 +175,7 @@ public class AsyncConnectorFacade {
 
     @Async
     public Future<Set<ObjectClass>> getSupportedObjectClasses(final 
ConnectorFacade connector) {
-        final Set<ObjectClass> objectClasses = new HashSet<ObjectClass>();
+        final Set<ObjectClass> objectClasses = new HashSet<>();
 
         try {
             final Schema schema = connector.schema();

http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/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 7dc3366..2adbdd0 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
@@ -26,6 +26,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
+import org.apache.commons.collections4.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -74,7 +75,8 @@ public class DefaultGroupProvisioningManager implements 
GroupProvisioningManager
     public Map.Entry<Long, List<PropagationStatus>> create(final GroupTO 
subject, final Set<String> excludedResources) {
         WorkflowResult<Long> created = gwfAdapter.create(subject);
 
-        AuthContextUtil.extendAuthContext(created.getResult(), 
GroupEntitlementUtil.getEntitlementNameFromGroupKey(created.getResult()));
+        AuthContextUtil.extendAuthContext(created.getResult(), 
GroupEntitlementUtil.getEntitlementNameFromGroupKey(
+                created.getResult()));
 
         List<PropagationTask> tasks =
                 propagationManager.getGroupCreateTaskIds(created, 
subject.getVirAttrs(), excludedResources);
@@ -100,7 +102,7 @@ public class DefaultGroupProvisioningManager implements 
GroupProvisioningManager
             groupOwnerMap.put(created.getResult(), 
groupOwner.getValues().iterator().next());
         }
 
-        AuthContextUtil.extendAuthContext(created.getResult(), 
+        AuthContextUtil.extendAuthContext(created.getResult(),
                 
GroupEntitlementUtil.getEntitlementNameFromGroupKey(created.getResult()));
 
         List<PropagationTask> tasks = propagationManager.getGroupCreateTaskIds(
@@ -198,8 +200,7 @@ public class DefaultGroupProvisioningManager implements 
GroupProvisioningManager
     public List<PropagationStatus> deprovision(final Long groupKey, final 
Collection<String> resources) {
         Group group = groupDAO.authFetch(groupKey);
 
-        Set<String> noPropResourceName = group.getResourceNames();
-        noPropResourceName.removeAll(resources);
+        Collection<String> noPropResourceName = 
CollectionUtils.removeAll(group.getResourceNames(), resources);
 
         List<PropagationTask> tasks = propagationManager.getGroupDeleteTaskIds(
                 groupKey, new HashSet<>(resources), noPropResourceName);

http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/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 c9fbe0f..4eb425f 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
@@ -25,6 +25,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import org.apache.commons.collections4.CollectionUtils;
 import org.apache.syncope.common.lib.mod.MembershipMod;
 import org.apache.syncope.common.lib.mod.StatusMod;
 import org.apache.syncope.common.lib.mod.UserMod;
@@ -234,11 +235,11 @@ public class DefaultUserProvisioningManager implements 
UserProvisioningManager {
     }
 
     protected List<PropagationStatus> propagateStatus(final User user, final 
StatusMod statusMod) {
-        Set<String> resourcesToBeExcluded = new 
HashSet<>(user.getResourceNames());
-        resourcesToBeExcluded.removeAll(statusMod.getResourceNames());
+        Collection<String> noPropResourceNames =
+                CollectionUtils.removeAll(user.getResourceNames(), 
statusMod.getResourceNames());
 
         List<PropagationTask> tasks = propagationManager.getUserUpdateTaskIds(
-                user, statusMod.getType() != StatusMod.ModType.SUSPEND, 
resourcesToBeExcluded);
+                user, statusMod.getType() != StatusMod.ModType.SUSPEND, 
noPropResourceNames);
         PropagationReporter propReporter =
                 
ApplicationContextProvider.getApplicationContext().getBean(PropagationReporter.class);
         try {
@@ -274,11 +275,10 @@ public class DefaultUserProvisioningManager implements 
UserProvisioningManager {
     public List<PropagationStatus> deprovision(final Long userKey, final 
Collection<String> resources) {
         final User user = userDAO.authFetch(userKey);
 
-        final Set<String> noPropResourceName = user.getResourceNames();
-        noPropResourceName.removeAll(resources);
+        Collection<String> noPropResourceNames = 
CollectionUtils.removeAll(user.getResourceNames(), resources);
 
         final List<PropagationTask> tasks =
-                propagationManager.getUserDeleteTaskIds(userKey, new 
HashSet<>(resources), noPropResourceName);
+                propagationManager.getUserDeleteTaskIds(userKey, new 
HashSet<>(resources), noPropResourceNames);
         final PropagationReporter propagationReporter =
                 
ApplicationContextProvider.getApplicationContext().getBean(PropagationReporter.class);
         try {
@@ -330,12 +330,10 @@ public class DefaultUserProvisioningManager implements 
UserProvisioningManager {
             }
         }
 
-        PropagationReporter propagationReporter = 
ApplicationContextProvider.getApplicationContext().
-                getBean(PropagationReporter.class);
-
         List<PropagationTask> tasks = propagationManager.getUserUpdateTaskIds(
                 updated, updated.getResult().getKey().getPassword() != null, 
excludedResources);
-
+        PropagationReporter propagationReporter = 
ApplicationContextProvider.getApplicationContext().
+                getBean(PropagationReporter.class);
         try {
             taskExecutor.execute(tasks, propagationReporter);
         } catch (PropagationException e) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/cache/DisabledVirAttrCache.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/cache/DisabledVirAttrCache.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/cache/DisabledVirAttrCache.java
index d1e0dda..3c3dcca 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/cache/DisabledVirAttrCache.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/cache/DisabledVirAttrCache.java
@@ -38,7 +38,7 @@ public class DisabledVirAttrCache implements VirAttrCache {
     }
 
     @Override
-    public boolean isValidEntry(VirAttrCacheValue value) {
+    public boolean isValidEntry(final VirAttrCacheValue value) {
         return false;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAttributableDataBinder.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAttributableDataBinder.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAttributableDataBinder.java
index a33e062..2c94b8b 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAttributableDataBinder.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAttributableDataBinder.java
@@ -166,7 +166,6 @@ abstract class AbstractAttributableDataBinder {
             schema = plainSchemaDAO.find(schemaName, reference);
 
             // safely ignore invalid schemas from AttrTO
-            // see http://code.google.com/p/syncope/issues/detail?id=17
             if (schema == null) {
                 LOG.debug("Ignoring invalid schema {}", schemaName);
             } else if (schema.isReadonly()) {
@@ -753,8 +752,7 @@ abstract class AbstractAttributableDataBinder {
             if ((type == AttributableType.USER && resource.getUmapping() != 
null)
                     || (type == AttributableType.GROUP && 
resource.getGmapping() != null)) {
 
-                MappingItem accountIdItem =
-                        
attrUtilFactory.getInstance(type).getAccountIdItem(resource);
+                MappingItem accountIdItem = 
attrUtilFactory.getInstance(type).getAccountIdItem(resource);
                 if (accountIdItem == null) {
                     throw new NotFoundException(
                             "AccountId mapping for " + type + " " + 
subject.getKey()

http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
index 169ac88..dac783b 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
@@ -36,6 +36,7 @@ import 
org.apache.syncope.common.lib.types.AuditElements.Result;
 import org.apache.syncope.common.lib.types.AuditLoggerName;
 import org.apache.syncope.common.lib.types.IntMappingType;
 import org.apache.syncope.common.lib.types.SubjectType;
+import org.apache.syncope.core.misc.CollectionUtils2;
 import org.apache.syncope.core.persistence.api.GroupEntitlementUtil;
 import org.apache.syncope.core.persistence.api.dao.ConfDAO;
 import org.apache.syncope.core.persistence.api.dao.EntitlementDAO;
@@ -347,15 +348,8 @@ public class NotificationManagerImpl implements 
NotificationManager {
 
             case UserPlainSchema:
                 UPlainAttr attr = user.getPlainAttr(recipientAttrName);
-                if (attr != null && !attr.getValuesAsStrings().isEmpty()) {
-                    email = attr.getValuesAsStrings().get(0);
-                }
-                break;
-
-            case UserVirtualSchema:
-                UVirAttr virAttr = user.getVirAttr(recipientAttrName);
-                if (virAttr != null && !virAttr.getValues().isEmpty()) {
-                    email = virAttr.getValues().get(0);
+                if (attr != null) {
+                    email = 
CollectionUtils2.getFirstOrNull(attr.getValuesAsStrings());
                 }
                 break;
 
@@ -366,6 +360,13 @@ public class NotificationManagerImpl implements 
NotificationManager {
                 }
                 break;
 
+            case UserVirtualSchema:
+                UVirAttr virAttr = user.getVirAttr(recipientAttrName);
+                if (virAttr != null) {
+                    email = 
CollectionUtils2.getFirstOrNull(virAttr.getValues());
+                }
+                break;
+
             default:
         }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DBPasswordPropagationActions.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DBPasswordPropagationActions.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DBPasswordPropagationActions.java
index fd4b3dc..1e75acb 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DBPasswordPropagationActions.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DBPasswordPropagationActions.java
@@ -19,8 +19,9 @@
 package org.apache.syncope.core.provisioning.java.propagation;
 
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Set;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Predicate;
 import org.apache.syncope.common.lib.types.AttributableType;
 import org.apache.syncope.common.lib.types.CipherAlgorithm;
 import org.apache.syncope.common.lib.types.ConnConfProperty;
@@ -85,22 +86,23 @@ public class DBPasswordPropagationActions extends 
DefaultPropagationActions {
         }
     }
 
-    private String getCipherAlgorithm(ConnInstance connInstance) {
-        String cipherAlgorithm = CLEARTEXT;
-        for (Iterator<ConnConfProperty> propertyIterator = 
connInstance.getConfiguration().iterator();
-                propertyIterator.hasNext();) {
+    private String getCipherAlgorithm(final ConnInstance connInstance) {
+        ConnConfProperty cipherAlgorithm =
+                CollectionUtils.find(connInstance.getConfiguration(), new 
Predicate<ConnConfProperty>() {
 
-            ConnConfProperty property = propertyIterator.next();
-            if ("cipherAlgorithm".equals(property.getSchema().getName())
-                    && property.getValues() != null && 
!property.getValues().isEmpty()) {
+                    @Override
+                    public boolean evaluate(final ConnConfProperty property) {
+                        return 
"cipherAlgorithm".equals(property.getSchema().getName())
+                        && property.getValues() != null && 
!property.getValues().isEmpty();
+                    }
+                });
 
-                return (String) property.getValues().get(0);
-            }
-        }
-        return cipherAlgorithm;
+        return cipherAlgorithm == null
+                ? CLEARTEXT
+                : (String) cipherAlgorithm.getValues().get(0);
     }
 
-    private boolean cipherAlgorithmMatches(String connectorAlgorithm, 
CipherAlgorithm userAlgorithm) {
+    private boolean cipherAlgorithmMatches(final String connectorAlgorithm, 
final CipherAlgorithm userAlgorithm) {
         if (userAlgorithm == null) {
             return false;
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPMembershipPropagationActions.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPMembershipPropagationActions.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPMembershipPropagationActions.java
index 0bd204f..f62aca0 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPMembershipPropagationActions.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPMembershipPropagationActions.java
@@ -92,9 +92,9 @@ public class LDAPMembershipPropagationActions extends 
DefaultPropagationActions
                 }
                 LOG.debug("Group accountLinks to propagate for membership: 
{}", groupAccountLinks);
 
-                Set<Attribute> attributes = new 
HashSet<Attribute>(task.getAttributes());
+                Set<Attribute> attributes = new 
HashSet<>(task.getAttributes());
 
-                Set<String> groups = new HashSet<String>(groupAccountLinks);
+                Set<String> groups = new HashSet<>(groupAccountLinks);
                 Attribute ldapGroups = 
AttributeUtil.find(getGroupMembershipAttrName(), attributes);
 
                 if (ldapGroups != null) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java
index fc1b00c..37ce2fa 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java
@@ -19,8 +19,9 @@
 package org.apache.syncope.core.provisioning.java.propagation;
 
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Set;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Predicate;
 import org.apache.syncope.common.lib.types.AttributableType;
 import org.apache.syncope.common.lib.types.CipherAlgorithm;
 import org.apache.syncope.common.lib.types.ConnConfProperty;
@@ -91,18 +92,20 @@ public class LDAPPasswordPropagationActions extends 
DefaultPropagationActions {
         }
     }
 
-    private String getCipherAlgorithm(ConnInstance connInstance) {
-        String cipherAlgorithm = CLEARTEXT;
-        for (Iterator<ConnConfProperty> propertyIterator = 
connInstance.getConfiguration().iterator();
-                propertyIterator.hasNext();) {
+    private String getCipherAlgorithm(final ConnInstance connInstance) {
+        ConnConfProperty cipherAlgorithm =
+                CollectionUtils.find(connInstance.getConfiguration(), new 
Predicate<ConnConfProperty>() {
 
-            ConnConfProperty property = propertyIterator.next();
-            if ("passwordHashAlgorithm".equals(property.getSchema().getName())
-                    && property.getValues() != null && 
!property.getValues().isEmpty()) {
-                return (String) property.getValues().get(0);
-            }
-        }
-        return cipherAlgorithm;
+                    @Override
+                    public boolean evaluate(final ConnConfProperty property) {
+                        return 
"passwordHashAlgorithm".equals(property.getSchema().getName())
+                        && property.getValues() != null && 
!property.getValues().isEmpty();
+                    }
+                });
+
+        return cipherAlgorithm == null
+                ? CLEARTEXT
+                : (String) cipherAlgorithm.getValues().get(0);
     }
 
     private boolean cipherAlgorithmMatches(String connectorAlgorithm, 
CipherAlgorithm userAlgorithm) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/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 3108368..122261f 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
@@ -26,6 +26,8 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Predicate;
 import org.apache.syncope.common.lib.mod.AttrMod;
 import org.apache.syncope.common.lib.mod.MembershipMod;
 import org.apache.syncope.common.lib.mod.UserMod;
@@ -173,10 +175,15 @@ public class PropagationManagerImpl implements 
PropagationManager {
             virAttrHandler.fillVirtual(user, vAttrs, 
attrUtilFactory.getInstance(AttributableType.USER));
 
         }
-        for (Membership membership : user.getMemberships()) {
-            MembershipTO membershipTO;
+        for (final Membership membership : user.getMemberships()) {
             if (membership.getVirAttrs() != null && 
!membership.getVirAttrs().isEmpty()) {
-                membershipTO = findMembershipTO(membership, membershipTOs);
+                MembershipTO membershipTO = 
CollectionUtils.find(membershipTOs, new Predicate<MembershipTO>() {
+
+                    @Override
+                    public boolean evaluate(final MembershipTO membershipTO) {
+                        return membershipTO.getGroupId() == 
membership.getGroup().getKey();
+                    }
+                });
                 if (membershipTO != null) {
                     virAttrHandler.fillVirtual(membership,
                             membershipTO.getVirAttrs(), 
attrUtilFactory.getInstance(AttributableType.MEMBERSHIP));
@@ -276,7 +283,7 @@ public class PropagationManagerImpl implements 
PropagationManager {
      */
     @Override
     public List<PropagationTask> getUserUpdateTaskIds(final User user, final 
Boolean enable,
-            final Set<String> noPropResourceNames) throws NotFoundException {
+            final Collection<String> noPropResourceNames) throws 
NotFoundException {
 
         return getUpdateTaskIds(
                 user, // user to be updated on external resources
@@ -385,6 +392,7 @@ public class PropagationManagerImpl implements 
PropagationManager {
      * @throws NotFoundException if group is not found
      * @throws UnauthorizedGroupException if caller doesn't own enough 
entitlements to administer the given group
      */
+    @Override
     public List<PropagationTask> getGroupUpdateTaskIds(final 
WorkflowResult<Long> wfResult,
             final Set<String> vAttrsToBeRemoved, final Set<AttrMod> 
vAttrsToBeUpdated,
             final Set<String> noPropResourceNames)
@@ -413,9 +421,16 @@ public class PropagationManagerImpl implements 
PropagationManager {
         // SYNCOPE-458 fill membership virtual attributes
         if (subject instanceof User) {
             final User user = (User) subject;
-            for (Membership membership : user.getMemberships()) {
+            for (final Membership membership : user.getMemberships()) {
                 if (membership.getVirAttrs() != null && 
!membership.getVirAttrs().isEmpty()) {
-                    final MembershipMod membershipMod = 
findMembershipMod(membership, membershipsToAdd);
+                    final MembershipMod membershipMod = 
CollectionUtils.find(membershipsToAdd,
+                            new Predicate<MembershipMod>() {
+
+                                @Override
+                                public boolean evaluate(final MembershipMod 
membershipMod) {
+                                    return membershipMod.getGroup() == 
membership.getGroup().getKey();
+                                }
+                            });
                     if (membershipMod != null) {
                         virAttrHandler.fillVirtual(membership, 
membershipMod.getVirAttrsToRemove() == null
                                 ? Collections.<String>emptySet()
@@ -750,24 +765,4 @@ public class PropagationManagerImpl implements 
PropagationManager {
 
         return tasks;
     }
-
-    protected MembershipTO findMembershipTO(final Membership membership, final 
Collection<MembershipTO> memberships) {
-        for (MembershipTO membershipTO : memberships) {
-            if (membershipTO.getGroupId() == membership.getGroup().getKey()) {
-                return membershipTO;
-            }
-        }
-        LOG.error("No MembershipTO found for membership {}", membership);
-        return null;
-    }
-
-    protected MembershipMod findMembershipMod(final Membership membership, 
final Set<MembershipMod> membershipMods) {
-        for (MembershipMod membershipMod : membershipMods) {
-            if (membershipMod.getGroup() == membership.getGroup().getKey()) {
-                return membershipMod;
-            }
-        }
-        LOG.error("No MembershipMod found for membership {}", membership);
-        return null;
-    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractProvisioningJob.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractProvisioningJob.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractProvisioningJob.java
index 197d4d5..0920146 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractProvisioningJob.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractProvisioningJob.java
@@ -22,6 +22,8 @@ import java.lang.reflect.ParameterizedType;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Transformer;
 import org.apache.syncope.common.lib.types.TraceLevel;
 import org.apache.syncope.core.persistence.api.dao.EntitlementDAO;
 import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
@@ -315,11 +317,14 @@ public abstract class AbstractProvisioningJob<T extends 
ProvisioningTask, A exte
     @Override
     protected String doExecute(final boolean dryRun) throws 
JobExecutionException {
         // PRE: grant all authorities (i.e. setup the SecurityContextHolder)
-        final List<GrantedAuthority> authorities = new ArrayList<>();
+        List<GrantedAuthority> authorities = new ArrayList<>();
+        CollectionUtils.collect(entitlementDAO.findAll(), new 
Transformer<Entitlement, GrantedAuthority>() {
 
-        for (Entitlement entitlement : entitlementDAO.findAll()) {
-            authorities.add(new SimpleGrantedAuthority(entitlement.getKey()));
-        }
+            @Override
+            public GrantedAuthority transform(final Entitlement entitlement) {
+                return new SimpleGrantedAuthority(entitlement.getKey());
+            }
+        }, authorities);
 
         final UserDetails userDetails = new User("admin", "FAKE_PASSWORD", 
true, true, true, true, authorities);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncResultHandler.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncResultHandler.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncResultHandler.java
index 5b9b3a7..3067ca5 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncResultHandler.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncResultHandler.java
@@ -513,7 +513,7 @@ public abstract class AbstractSyncResultHandler extends 
AbstractSyncopeResultHan
 
         LOG.debug("Subject to ignore {}", 
delta.getObject().getUid().getUidValue());
 
-        final List<ProvisioningResult> ignoreResults = new 
ArrayList<ProvisioningResult>();
+        final List<ProvisioningResult> ignoreResults = new ArrayList<>();
         final ProvisioningResult result = new ProvisioningResult();
 
         result.setId(null);

http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncopeResultHandler.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncopeResultHandler.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncopeResultHandler.java
index cb1890b..ec33571 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncopeResultHandler.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncopeResultHandler.java
@@ -116,10 +116,12 @@ public abstract class AbstractSyncopeResultHandler<T 
extends ProvisioningTask, A
      */
     protected ProvisioningProfile<T, A> profile;
 
+    @Override
     public void setProfile(final ProvisioningProfile<T, A> profile) {
         this.profile = profile;
     }
 
+    @Override
     public ProvisioningProfile<T, A> getProfile() {
         return profile;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/DBPasswordSyncActions.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/DBPasswordSyncActions.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/DBPasswordSyncActions.java
index 75f2078..2b3ca02 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/DBPasswordSyncActions.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/DBPasswordSyncActions.java
@@ -18,7 +18,8 @@
  */
 package org.apache.syncope.core.provisioning.java.sync;
 
-import java.util.Iterator;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Predicate;
 import org.apache.syncope.common.lib.mod.AbstractSubjectMod;
 import org.apache.syncope.common.lib.mod.UserMod;
 import org.apache.syncope.common.lib.to.AbstractSubjectTO;
@@ -105,18 +106,19 @@ public class DBPasswordSyncActions extends 
DefaultSyncActions {
     }
 
     private String getCipherAlgorithm(final ConnInstance connInstance) {
-        String cipherAlgorithm = CLEARTEXT;
-        for (Iterator<ConnConfProperty> propertyIterator = 
connInstance.getConfiguration().iterator();
-                propertyIterator.hasNext();) {
-
-            ConnConfProperty property = propertyIterator.next();
-            if ("cipherAlgorithm".equals(property.getSchema().getName())
-                    && property.getValues() != null && 
!property.getValues().isEmpty()) {
-
-                return (String) property.getValues().get(0);
-            }
-        }
-        return cipherAlgorithm;
+        ConnConfProperty cipherAlgorithm =
+                CollectionUtils.find(connInstance.getConfiguration(), new 
Predicate<ConnConfProperty>() {
+
+                    @Override
+                    public boolean evaluate(final ConnConfProperty property) {
+                        return 
"cipherAlgorithm".equals(property.getSchema().getName())
+                        && property.getValues() != null && 
!property.getValues().isEmpty();
+                    }
+                });
+
+        return cipherAlgorithm == null
+                ? CLEARTEXT
+                : (String) cipherAlgorithm.getValues().get(0);
     }
 
     @Transactional(readOnly = true)

http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPMembershipSyncActions.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPMembershipSyncActions.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPMembershipSyncActions.java
index 736cb3f..526b494 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPMembershipSyncActions.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPMembershipSyncActions.java
@@ -20,9 +20,10 @@ package org.apache.syncope.core.provisioning.java.sync;
 
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Predicate;
 import org.apache.syncope.common.lib.mod.AbstractSubjectMod;
 import org.apache.syncope.common.lib.mod.MembershipMod;
 import org.apache.syncope.common.lib.mod.UserMod;
@@ -32,7 +33,6 @@ import org.apache.syncope.common.lib.types.AuditElements;
 import org.apache.syncope.common.lib.types.AuditElements.Result;
 import org.apache.syncope.common.lib.types.ConnConfProperty;
 import org.apache.syncope.core.persistence.api.dao.GroupDAO;
-import org.apache.syncope.core.persistence.api.entity.ConnInstance;
 import org.apache.syncope.core.persistence.api.entity.ExternalResource;
 import org.apache.syncope.core.persistence.api.entity.membership.Membership;
 import org.apache.syncope.core.persistence.api.entity.group.Group;
@@ -98,20 +98,19 @@ public class LDAPMembershipSyncActions extends 
DefaultSyncActions {
      * @return the name of the attribute used to keep track of group 
memberships
      */
     protected String getGroupMembershipAttrName(final Connector connector) {
-        ConnInstance connInstance = connector.getActiveConnInstance();
-        Iterator<ConnConfProperty> propertyIterator = 
connInstance.getConfiguration().iterator();
-        String groupMembershipName = "uniquemember";
-        while (propertyIterator.hasNext()) {
-            ConnConfProperty property = propertyIterator.next();
-            if ("groupMemberAttribute".equals(property.getSchema().getName())
-                    && property.getValues() != null && 
!property.getValues().isEmpty()) {
-
-                groupMembershipName = (String) property.getValues().get(0);
-                break;
-            }
-        }
-
-        return groupMembershipName;
+        ConnConfProperty groupMembership = 
CollectionUtils.find(connector.getActiveConnInstance().getConfiguration(),
+                new Predicate<ConnConfProperty>() {
+
+                    @Override
+                    public boolean evaluate(final ConnConfProperty property) {
+                        return 
"groupMemberAttribute".equals(property.getSchema().getName())
+                        && property.getValues() != null && 
!property.getValues().isEmpty();
+                    }
+                });
+
+        return groupMembership == null
+                ? "uniquemember"
+                : (String) groupMembership.getValues().get(0);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPPasswordSyncActions.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPPasswordSyncActions.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPPasswordSyncActions.java
index 16cd796..fe1a8aa 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPPasswordSyncActions.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPPasswordSyncActions.java
@@ -82,7 +82,7 @@ public class LDAPPasswordSyncActions extends 
DefaultSyncActions {
         return delta;
     }
 
-    private void parseEncodedPassword(String password) {
+    private void parseEncodedPassword(final String password) {
         if (password != null && password.startsWith("{")) {
             int closingBracketIndex = password.indexOf('}');
             String digest = password.substring(1, password.indexOf('}'));

Reply via email to