You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2017/08/22 15:09:14 UTC

[10/16] syncope git commit: [SYNCOPE-938] Switching from commons-collections to Java 8 features

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/SecurityQuestionLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/SecurityQuestionLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/SecurityQuestionLogic.java
index e3dae91..f77f2fd 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/SecurityQuestionLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/SecurityQuestionLogic.java
@@ -19,10 +19,8 @@
 package org.apache.syncope.core.logic;
 
 import java.lang.reflect.Method;
-import java.util.ArrayList;
 import java.util.List;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Transformer;
+import java.util.stream.Collectors;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.syncope.common.lib.to.SecurityQuestionTO;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
@@ -52,14 +50,8 @@ public class SecurityQuestionLogic extends AbstractTransactionalLogic<SecurityQu
     @PreAuthorize("isAuthenticated()")
     @Transactional(readOnly = true)
     public List<SecurityQuestionTO> list() {
-        return CollectionUtils.collect(securityQuestionDAO.findAll(),
-                new Transformer<SecurityQuestion, SecurityQuestionTO>() {
-
-            @Override
-            public SecurityQuestionTO transform(final SecurityQuestion input) {
-                return binder.getSecurityQuestionTO(input);
-            }
-        }, new ArrayList<SecurityQuestionTO>());
+        return securityQuestionDAO.findAll().stream().
+                map(securityQuestion -> binder.getSecurityQuestionTO(securityQuestion)).collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.SECURITY_QUESTION_READ + "')")

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
index 00a6592..ad3a86d 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
@@ -23,16 +23,14 @@ import java.lang.management.OperatingSystemMXBean;
 import java.lang.management.RuntimeMXBean;
 import java.lang.reflect.Method;
 import java.net.InetAddress;
-import java.net.URI;
 import java.net.UnknownHostException;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
+import java.util.stream.Collectors;
 import javax.annotation.Resource;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Transformer;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.AbstractBaseBean;
 import org.apache.syncope.common.lib.SyncopeConstants;
@@ -76,7 +74,6 @@ import org.apache.syncope.core.provisioning.api.GroupProvisioningManager;
 import org.apache.syncope.core.provisioning.api.UserProvisioningManager;
 import org.apache.syncope.core.provisioning.api.cache.VirAttrCache;
 import org.apache.syncope.core.provisioning.api.data.GroupDataBinder;
-import org.apache.syncope.core.provisioning.api.utils.EntityUtils;
 import org.apache.syncope.core.spring.security.AuthContextUtils;
 import org.apache.syncope.core.workflow.api.AnyObjectWorkflowAdapter;
 import org.apache.syncope.core.workflow.api.GroupWorkflowAdapter;
@@ -204,9 +201,8 @@ public class SyncopeLogic extends AbstractLogic<AbstractBaseBean> {
                 PLATFORM_INFO.setBuildNumber(buildNumber);
 
                 if (bundleManager.getLocations() != null) {
-                    for (URI location : bundleManager.getLocations()) {
-                        PLATFORM_INFO.getConnIdLocations().add(location.toASCIIString());
-                    }
+                    bundleManager.getLocations().
+                            forEach(location -> PLATFORM_INFO.getConnIdLocations().add(location.toASCIIString()));
                 }
 
                 PLATFORM_INFO.setAnyObjectWorkflowAdapter(AopUtils.getTargetClass(awfAdapter).getName());
@@ -246,35 +242,23 @@ public class SyncopeLogic extends AbstractLogic<AbstractBaseBean> {
             PLATFORM_INFO.getEntitlements().clear();
             PLATFORM_INFO.getEntitlements().addAll(EntitlementsHolder.getInstance().getValues());
 
-            AuthContextUtils.execWithAuthContext(AuthContextUtils.getDomain(), new AuthContextUtils.Executable<Void>() {
-
-                @Override
-                public Void exec() {
-                    PLATFORM_INFO.getAnyTypes().clear();
-                    CollectionUtils.collect(
-                            anyTypeDAO.findAll(),
-                            EntityUtils.keyTransformer(),
-                            PLATFORM_INFO.getAnyTypes());
-
-                    PLATFORM_INFO.getUserClasses().clear();
-                    CollectionUtils.collect(
-                            anyTypeDAO.findUser().getClasses(),
-                            EntityUtils.keyTransformer(),
-                            PLATFORM_INFO.getUserClasses());
-
-                    PLATFORM_INFO.getAnyTypeClasses().clear();
-                    CollectionUtils.collect(
-                            anyTypeClassDAO.findAll(),
-                            EntityUtils.keyTransformer(),
-                            PLATFORM_INFO.getAnyTypeClasses());
-
-                    PLATFORM_INFO.getResources().clear();
-                    CollectionUtils.collect(
-                            resourceDAO.findAll(),
-                            EntityUtils.keyTransformer(),
-                            PLATFORM_INFO.getResources());
-                    return null;
-                }
+            AuthContextUtils.execWithAuthContext(AuthContextUtils.getDomain(), () -> {
+                PLATFORM_INFO.getAnyTypes().clear();
+                PLATFORM_INFO.getAnyTypes().addAll(anyTypeDAO.findAll().stream().
+                        map(type -> type.getKey()).collect(Collectors.toList()));
+
+                PLATFORM_INFO.getUserClasses().clear();
+                PLATFORM_INFO.getUserClasses().addAll(anyTypeDAO.findUser().getClasses().stream().
+                        map(cls -> cls.getKey()).collect(Collectors.toList()));
+
+                PLATFORM_INFO.getAnyTypeClasses().clear();
+                PLATFORM_INFO.getAnyTypeClasses().addAll(anyTypeClassDAO.findAll().stream().
+                        map(cls -> cls.getKey()).collect(Collectors.toList()));
+
+                PLATFORM_INFO.getResources().clear();
+                PLATFORM_INFO.getResources().addAll(resourceDAO.findAll().stream().
+                        map(resource -> resource.getKey()).collect(Collectors.toList()));
+                return null;
             });
         }
 
@@ -394,14 +378,8 @@ public class SyncopeLogic extends AbstractLogic<AbstractBaseBean> {
                 searchCond,
                 page, size,
                 Collections.singletonList(orderByClause), AnyTypeKind.GROUP);
-        List<GroupTO> result = CollectionUtils.collect(matching, new Transformer<Group, GroupTO>() {
-
-            @Transactional(readOnly = true)
-            @Override
-            public GroupTO transform(final Group input) {
-                return groupDataBinder.getGroupTO(input, false);
-            }
-        }, new ArrayList<GroupTO>());
+        List<GroupTO> result = matching.stream().
+                map(group -> groupDataBinder.getGroupTO(group, false)).collect(Collectors.toList());
 
         return Pair.of(count, result);
     }
@@ -412,12 +390,12 @@ public class SyncopeLogic extends AbstractLogic<AbstractBaseBean> {
         if (group == null) {
             throw new NotFoundException("Group " + groupName);
         }
-        TypeExtension typeExt = group.getTypeExtension(anyTypeDAO.findUser());
-        if (typeExt == null) {
+        Optional<? extends TypeExtension> typeExt = group.getTypeExtension(anyTypeDAO.findUser());
+        if (!typeExt.isPresent()) {
             throw new NotFoundException("TypeExtension in " + groupName + " for users");
         }
 
-        return groupDataBinder.getTypeExtensionTO(typeExt);
+        return groupDataBinder.getTypeExtensionTO(typeExt.get());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
index 06e38d2..f7fbe1e 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
@@ -19,12 +19,10 @@
 package org.apache.syncope.core.logic;
 
 import java.lang.reflect.Method;
-import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Transformer;
+import java.util.stream.Collectors;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.tuple.Triple;
 import org.apache.syncope.common.lib.SyncopeClientException;
@@ -170,15 +168,11 @@ public class TaskLogic extends AbstractExecutableLogic<AbstractTaskTO> {
             final List<OrderByClause> orderByClauses,
             final boolean details) {
 
-        return CollectionUtils.collect(taskDAO.findAll(
+        return taskDAO.findAll(
                 type, resourceDAO.find(resource), notificationDAO.find(notification), anyTypeKind, entityKey,
-                page, size, orderByClauses), new Transformer<Task, T>() {
-
-            @Override
-            public T transform(final Task task) {
-                return (T) binder.getTaskTO(task, taskUtilsFactory.getInstance(type), details);
-            }
-        }, new ArrayList<T>());
+                page, size, orderByClauses).stream().
+                <T>map(task -> binder.getTaskTO(task, taskUtilsFactory.getInstance(type), details)).
+                collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.TASK_READ + "')")
@@ -297,26 +291,15 @@ public class TaskLogic extends AbstractExecutableLogic<AbstractTaskTO> {
             throw new NotFoundException("Task " + key);
         }
 
-        return CollectionUtils.collect(taskExecDAO.findAll(task, page, size, orderByClauses),
-                new Transformer<TaskExec, ExecTO>() {
-
-            @Override
-            public ExecTO transform(final TaskExec taskExec) {
-                return binder.getExecTO(taskExec);
-            }
-        }, new ArrayList<ExecTO>());
+        return taskExecDAO.findAll(task, page, size, orderByClauses).stream().
+                map(taskExec -> binder.getExecTO(taskExec)).collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.TASK_LIST + "')")
     @Override
     public List<ExecTO> listRecentExecutions(final int max) {
-        return CollectionUtils.collect(taskExecDAO.findRecent(max), new Transformer<TaskExec, ExecTO>() {
-
-            @Override
-            public ExecTO transform(final TaskExec taskExec) {
-                return binder.getExecTO(taskExec);
-            }
-        }, new ArrayList<ExecTO>());
+        return taskExecDAO.findRecent(max).stream().
+                map(taskExec -> binder.getExecTO(taskExec)).collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.TASK_DELETE + "')")
@@ -345,7 +328,7 @@ public class TaskLogic extends AbstractExecutableLogic<AbstractTaskTO> {
 
         BulkActionResult result = new BulkActionResult();
 
-        for (TaskExec exec : taskExecDAO.findAll(task, startedBefore, startedAfter, endedBefore, endedAfter)) {
+        taskExecDAO.findAll(task, startedBefore, startedAfter, endedBefore, endedAfter).forEach(exec -> {
             try {
                 taskExecDAO.delete(exec);
                 result.getResults().put(String.valueOf(exec.getKey()), BulkActionResult.Status.SUCCESS);
@@ -353,7 +336,7 @@ public class TaskLogic extends AbstractExecutableLogic<AbstractTaskTO> {
                 LOG.error("Error deleting execution {} of task {}", exec.getKey(), key, e);
                 result.getResults().put(String.valueOf(exec.getKey()), BulkActionResult.Status.FAILURE);
             }
-        }
+        });
 
         return result;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
index f889780..5f99944 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
@@ -19,14 +19,12 @@
 package org.apache.syncope.core.logic;
 
 import java.lang.reflect.Method;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Transformer;
+import java.util.stream.Collectors;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.tuple.ImmutablePair;
@@ -112,14 +110,9 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
                 AuthContextUtils.getAuthorizations().get(StandardEntitlement.USER_SEARCH), realm),
                 searchCond == null ? userDAO.getAllMatchingCond() : searchCond,
                 page, size, orderBy, AnyTypeKind.USER);
-        List<UserTO> result = CollectionUtils.collect(matching, new Transformer<User, UserTO>() {
-
-            @Transactional(readOnly = true)
-            @Override
-            public UserTO transform(final User input) {
-                return binder.returnUserTO(binder.getUserTO(input, details));
-            }
-        }, new ArrayList<UserTO>());
+        List<UserTO> result = matching.stream().
+                map(user -> binder.returnUserTO(binder.getUserTO(user, details))).
+                collect(Collectors.toList());
 
         return Pair.of(count, result);
     }
@@ -325,13 +318,8 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
         List<Group> ownedGroups = groupDAO.findOwnedByUser(before.getLeft().getKey());
         if (!ownedGroups.isEmpty()) {
             SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.GroupOwnership);
-            sce.getElements().addAll(CollectionUtils.collect(ownedGroups, new Transformer<Group, String>() {
-
-                @Override
-                public String transform(final Group group) {
-                    return group.getKey() + " " + group.getName();
-                }
-            }, new ArrayList<String>()));
+            sce.getElements().addAll(ownedGroups.stream().
+                    map(group -> group.getKey() + " " + group.getName()).collect(Collectors.toList()));
             throw sce;
         }
 
@@ -360,13 +348,9 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
 
         UserPatch patch = new UserPatch();
         patch.setKey(key);
-        patch.getResources().addAll(CollectionUtils.collect(resources, new Transformer<String, StringPatchItem>() {
-
-            @Override
-            public StringPatchItem transform(final String resource) {
-                return new StringPatchItem.Builder().operation(PatchOperation.DELETE).value(resource).build();
-            }
-        }));
+        patch.getResources().addAll(resources.stream().map(resource
+                -> new StringPatchItem.Builder().operation(PatchOperation.DELETE).value(resource).build()).
+                collect(Collectors.toList()));
 
         return binder.returnUserTO(binder.getUserTO(provisioningManager.unlink(patch)));
     }
@@ -383,13 +367,9 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
 
         UserPatch patch = new UserPatch();
         patch.setKey(key);
-        patch.getResources().addAll(CollectionUtils.collect(resources, new Transformer<String, StringPatchItem>() {
-
-            @Override
-            public StringPatchItem transform(final String resource) {
-                return new StringPatchItem.Builder().operation(PatchOperation.ADD_REPLACE).value(resource).build();
-            }
-        }));
+        patch.getResources().addAll(resources.stream().map(resource
+                -> new StringPatchItem.Builder().operation(PatchOperation.ADD_REPLACE).value(resource).build()).
+                collect(Collectors.toList()));
 
         return binder.returnUserTO(binder.getUserTO(provisioningManager.link(patch)));
     }
@@ -408,13 +388,9 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
 
         UserPatch patch = new UserPatch();
         patch.setKey(key);
-        patch.getResources().addAll(CollectionUtils.collect(resources, new Transformer<String, StringPatchItem>() {
-
-            @Override
-            public StringPatchItem transform(final String resource) {
-                return new StringPatchItem.Builder().operation(PatchOperation.DELETE).value(resource).build();
-            }
-        }));
+        patch.getResources().addAll(resources.stream().map(resource
+                -> new StringPatchItem.Builder().operation(PatchOperation.DELETE).value(resource).build()).
+                collect(Collectors.toList()));
 
         return update(patch, nullPriorityAsync);
     }
@@ -437,13 +413,9 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> {
 
         UserPatch patch = new UserPatch();
         patch.setKey(key);
-        patch.getResources().addAll(CollectionUtils.collect(resources, new Transformer<String, StringPatchItem>() {
-
-            @Override
-            public StringPatchItem transform(final String resource) {
-                return new StringPatchItem.Builder().operation(PatchOperation.ADD_REPLACE).value(resource).build();
-            }
-        }));
+        patch.getResources().addAll(resources.stream().map(resource
+                -> new StringPatchItem.Builder().operation(PatchOperation.ADD_REPLACE).value(resource).build()).
+                collect(Collectors.toList()));
 
         if (changepwd) {
             patch.setPassword(new PasswordPatch.Builder().

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/migration/src/main/java/org/apache/syncope/core/migration/MigrationPullActions.java
----------------------------------------------------------------------
diff --git a/core/migration/src/main/java/org/apache/syncope/core/migration/MigrationPullActions.java b/core/migration/src/main/java/org/apache/syncope/core/migration/MigrationPullActions.java
index caf633a..e626215 100644
--- a/core/migration/src/main/java/org/apache/syncope/core/migration/MigrationPullActions.java
+++ b/core/migration/src/main/java/org/apache/syncope/core/migration/MigrationPullActions.java
@@ -22,8 +22,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.TransformerUtils;
+import java.util.stream.Collectors;
 import org.apache.syncope.common.lib.to.AnyTO;
 import org.apache.syncope.common.lib.to.EntityTO;
 import org.apache.syncope.common.lib.to.GroupTO;
@@ -73,7 +72,7 @@ public class MigrationPullActions extends SchedulingPullActions {
                 && resourcesAttr.getValue() != null && !resourcesAttr.getValue().isEmpty()) {
 
             ((AnyTO) entity).getResources().addAll(
-                    CollectionUtils.collect(resourcesAttr.getValue(), TransformerUtils.stringValueTransformer()));
+                    resourcesAttr.getValue().stream().map(Object::toString).collect(Collectors.toList()));
         }
 
         return delta;

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/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 89ff590..f9db494 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
@@ -25,8 +25,6 @@ import java.util.Map.Entry;
 import java.util.Set;
 import javax.validation.ConstraintViolation;
 import javax.validation.ValidationException;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
 import org.apache.syncope.common.lib.types.EntityViolationType;
 
 /**
@@ -73,7 +71,7 @@ public class InvalidEntityException extends ValidationException {
 
         this.entityClassSimpleName = entityClassSimpleName;
 
-        for (ConstraintViolation<Object> violation : violations) {
+        violations.forEach((violation) -> {
             int firstComma = violation.getMessageTemplate().indexOf(';');
 
             final String key = violation.getMessageTemplate().substring(
@@ -96,17 +94,11 @@ public class InvalidEntityException extends ValidationException {
             }
 
             this.violations.get(violation.getLeafBean().getClass()).add(entityViolationType);
-        }
+        });
     }
 
     public final boolean hasViolation(final EntityViolationType type) {
-        return IterableUtils.matchesAny(violations.keySet(), new Predicate<Class<?>>() {
-
-            @Override
-            public boolean evaluate(final Class<?> entity) {
-                return violations.get(entity).contains(type);
-            }
-        });
+        return violations.keySet().stream().anyMatch(entity -> violations.get(entity).contains(type));
     }
 
     public String getEntityClassSimpleName() {

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AllowedSchemas.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AllowedSchemas.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AllowedSchemas.java
index 6c04ac4..54f5e51 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AllowedSchemas.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AllowedSchemas.java
@@ -18,14 +18,12 @@
  */
 package org.apache.syncope.core.persistence.api.dao;
 
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
-import org.apache.commons.collections4.PredicateUtils;
-import org.apache.commons.collections4.SetUtils;
+import java.util.function.Predicate;
 import org.apache.syncope.core.persistence.api.entity.Schema;
 import org.apache.syncope.core.persistence.api.entity.group.Group;
 
@@ -40,7 +38,7 @@ public class AllowedSchemas<S extends Schema> {
     }
 
     public Set<S> getForMembership(final Group group) {
-        return SetUtils.emptyIfNull(forMemberships.get(group));
+        return forMemberships.get(group) == null ? Collections.<S>emptySet() : forMemberships.get(group);
     }
 
     public Map<Group, Set<S>> getForMemberships() {
@@ -52,35 +50,27 @@ public class AllowedSchemas<S extends Schema> {
     }
 
     public boolean forSelfContains(final String schema) {
-        return IterableUtils.matchesAny(forSelf, new KeyMatches(schema));
+        return forSelf.stream().anyMatch(new KeyMatches(schema));
     }
 
     public boolean forMembershipsContains(final Group group, final S schema) {
-        return IterableUtils.matchesAny(forMemberships.get(group), PredicateUtils.equalPredicate(schema));
+        return getForMembership(group).stream().anyMatch(s -> s.equals(schema));
     }
 
     public boolean forMembershipsContains(final S schema) {
-        for (Map.Entry<Group, Set<S>> entry : forMemberships.entrySet()) {
-            if (entry.getValue().contains(schema)) {
-                return true;
-            }
-        }
-        return false;
+        return forMemberships.entrySet().stream().
+                anyMatch(entry -> entry.getValue().contains(schema));
     }
 
     public boolean forMembershipsContains(final Group group, final String schema) {
-        return IterableUtils.matchesAny(forMemberships.get(group), new KeyMatches(schema));
+        return getForMembership(group).stream().anyMatch(new KeyMatches(schema));
     }
 
     public boolean forMembershipsContains(final String schema) {
         KeyMatches keyMatches = new KeyMatches(schema);
 
-        for (Map.Entry<Group, Set<S>> entry : forMemberships.entrySet()) {
-            if (IterableUtils.matchesAny(entry.getValue(), keyMatches)) {
-                return true;
-            }
-        }
-        return false;
+        return forMemberships.entrySet().stream().
+                anyMatch(entry -> entry.getValue().stream().anyMatch(keyMatches));
     }
 
     public boolean contains(final S schema) {
@@ -106,7 +96,7 @@ public class AllowedSchemas<S extends Schema> {
         }
 
         @Override
-        public boolean evaluate(final S object) {
+        public boolean test(final S object) {
             return object.getKey().equals(schema);
         }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConfDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConfDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConfDAO.java
index b6fe304..b150aaa 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConfDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConfDAO.java
@@ -18,12 +18,13 @@
  */
 package org.apache.syncope.core.persistence.api.dao;
 
+import java.util.Optional;
 import org.apache.syncope.core.persistence.api.entity.conf.CPlainAttr;
 import org.apache.syncope.core.persistence.api.entity.conf.Conf;
 
 public interface ConfDAO extends DAO<Conf> {
 
-    CPlainAttr find(String key);
+    Optional<? extends CPlainAttr> find(String key);
 
     <T> T find(String key, T defaultValue);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/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 580fe32..4bc1488 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
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.core.persistence.api.dao;
 
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
@@ -46,6 +47,8 @@ public interface GroupDAO extends AnyDAO<Group> {
 
     List<String> findADynMembers(Group group);
 
+    Collection<String> findAllResourceKeys(final String key);
+
     void clearADynMembers(Group group);
 
     void refreshDynMemberships(AnyObject anyObject);

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Any.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Any.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Any.java
index 9896e73..0ec609e 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Any.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Any.java
@@ -20,6 +20,7 @@ package org.apache.syncope.core.persistence.api.entity;
 
 import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
 import java.util.List;
+import java.util.Optional;
 
 public interface Any<P extends PlainAttr<?>> extends AnnotatedEntity {
 
@@ -43,7 +44,7 @@ public interface Any<P extends PlainAttr<?>> extends AnnotatedEntity {
 
     boolean remove(P attr);
 
-    P getPlainAttr(String plainSchemaName);
+    Optional<? extends P> getPlainAttr(String plainSchema);
 
     List<? extends P> getPlainAttrs();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/GroupableRelatable.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/GroupableRelatable.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/GroupableRelatable.java
index 147f469..dd13b4a 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/GroupableRelatable.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/GroupableRelatable.java
@@ -20,6 +20,7 @@ package org.apache.syncope.core.persistence.api.entity;
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Optional;
 
 public interface GroupableRelatable<
         L extends Any<P>, 
@@ -29,31 +30,30 @@ public interface GroupableRelatable<
         REL extends Relationship<L, R>> extends Any<P> {
 
     @Override
-    boolean add(final P attr);
+    boolean add(P attr);
 
     @Override
-    boolean remove(final P attr);
+    boolean remove(P attr);
 
     /**
      * Returns the plain attribute for this instance and the given schema name - if found, {@code NULL} otherwise.
      * <b>IMPORTANT:</b> This method won't return any attribute related to memberships.
      *
-     * @param plainSchemaName plain schema name
-     * @return plain attribute for this instance and the given schema name - if found, {@code NULL} otherwise
+     * @param plainSchema plain schema name
+     * @return plain attribute for this instance and the given schema name
      */
     @Override
-    P getPlainAttr(String plainSchemaName);
+    Optional<? extends P> getPlainAttr(String plainSchema);
 
     /**
      * Returns the plain attribute for this instance, the given schema name and the given membership -
      * if found, {@code NULL} otherwise.
      *
-     * @param plainSchemaName plain schema name
+     * @param plainSchema plain schema name
      * @param membership membership
-     * @return plain attribute for this instance, the given schema name and the given membership -
-     * if found, {@code NULL} otherwise
+     * @return plain attribute for this instance, the given schema name and the given membership
      */
-    P getPlainAttr(String plainSchemaName, Membership<?> membership);
+    Optional<? extends P> getPlainAttr(String plainSchema, Membership<?> membership);
 
     /**
      * Returns the plain attributes for this instance.
@@ -68,10 +68,10 @@ public interface GroupableRelatable<
      * Returns the list of plain attributes for this instance and the given schema name (including membeship attributes,
      * as opposite to {@link Any#getPlainAttr(java.lang.String)}).
      *
-     * @param plainSchemaName plain schema name
+     * @param plainSchema plain schema name
      * @return list of plain attributes for this instance and the given schema name (including membeship attributes)
      */
-    Collection<? extends P> getPlainAttrs(String plainSchemaName);
+    Collection<? extends P> getPlainAttrs(String plainSchema);
 
     /**
      * Returns the list of plain attributes for this instance and the given membership.
@@ -83,13 +83,13 @@ public interface GroupableRelatable<
 
     boolean add(M membership);
 
-    M getMembership(String groupKey);
+    Optional<? extends M> getMembership(String groupKey);
 
     List<? extends M> getMemberships();
 
     boolean add(REL relationship);
 
-    REL getRelationship(RelationshipType relationshipType, String otherEndKey);
+    Optional<? extends REL> getRelationship(RelationshipType relationshipType, String otherEndKey);
 
     Collection<? extends REL> getRelationships(String otherEndKey);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Notification.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Notification.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Notification.java
index 9046ccf..62d8221 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Notification.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Notification.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.core.persistence.api.entity;
 
 import java.util.List;
+import java.util.Optional;
 import org.apache.syncope.common.lib.types.TraceLevel;
 
 public interface Notification extends Entity {
@@ -45,7 +46,7 @@ public interface Notification extends Entity {
 
     boolean add(AnyAbout about);
 
-    AnyAbout getAbout(AnyType anyType);
+    Optional<? extends AnyAbout> getAbout(AnyType anyType);
 
     List<? extends AnyAbout> getAbouts();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Realm.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Realm.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Realm.java
index 9796d22..e345921 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Realm.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Realm.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.core.persistence.api.entity;
 
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 import org.apache.syncope.core.persistence.api.entity.policy.AccountPolicy;
 import org.apache.syncope.core.persistence.api.entity.policy.PasswordPolicy;
@@ -48,7 +49,7 @@ public interface Realm extends Entity {
 
     boolean add(AnyTemplateRealm template);
 
-    AnyTemplateRealm getTemplate(AnyType anyType);
+    Optional<? extends AnyTemplateRealm> getTemplate(AnyType anyType);
 
     List<? extends AnyTemplateRealm> getTemplates();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/group/Group.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/group/Group.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/group/Group.java
index b696eee..59d7e5e 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/group/Group.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/group/Group.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.core.persistence.api.entity.group;
 
 import java.util.List;
+import java.util.Optional;
 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.anyobject.ADynGroupMembership;
@@ -43,7 +44,7 @@ public interface Group extends Any<GPlainAttr> {
     boolean add(GPlainAttr attr);
 
     @Override
-    GPlainAttr getPlainAttr(String plainSchemaName);
+    Optional<? extends GPlainAttr> getPlainAttr(String plainSchema);
 
     @Override
     List<? extends GPlainAttr> getPlainAttrs();
@@ -54,13 +55,13 @@ public interface Group extends Any<GPlainAttr> {
 
     boolean add(ADynGroupMembership dynGroupMembership);
 
-    ADynGroupMembership getADynMembership(AnyType anyType);
+    Optional<? extends ADynGroupMembership> getADynMembership(AnyType anyType);
 
     List<? extends ADynGroupMembership> getADynMemberships();
 
     boolean add(TypeExtension typeExtension);
 
-    TypeExtension getTypeExtension(AnyType anyType);
+    Optional<? extends TypeExtension> getTypeExtension(AnyType anyType);
 
     List<? extends TypeExtension> getTypeExtensions();
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/policy/AccountPolicy.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/policy/AccountPolicy.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/policy/AccountPolicy.java
index 6aed282..bf810b3 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/policy/AccountPolicy.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/policy/AccountPolicy.java
@@ -42,7 +42,7 @@ public interface AccountPolicy extends Policy {
 
     boolean add(ExternalResource resource);
 
-    Set<String> getResourceNames();
+    Set<String> getResourceKeys();
 
     Set<? extends ExternalResource> getResources();
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/ExternalResource.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/ExternalResource.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/ExternalResource.java
index e0e1335..4b8ee40 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/ExternalResource.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/ExternalResource.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.core.persistence.api.entity.resource;
 
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 import org.apache.syncope.common.lib.types.ConnConfProperty;
 import org.apache.syncope.common.lib.types.ConnectorCapability;
@@ -91,9 +92,9 @@ public interface ExternalResource extends ProvidedKeyEntity {
 
     boolean add(Provision provision);
 
-    Provision getProvision(AnyType anyType);
+    Optional<? extends Provision> getProvision(AnyType anyType);
 
-    Provision getProvision(ObjectClass objectClass);
+    Optional<? extends Provision> getProvision(ObjectClass objectClass);
 
     List<? extends Provision> getProvisions();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Mapping.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Mapping.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Mapping.java
index 92940a0..ce7abaa 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Mapping.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Mapping.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.core.persistence.api.entity.resource;
 
 import java.util.List;
+import java.util.Optional;
 import org.apache.syncope.core.persistence.api.entity.Entity;
 
 public interface Mapping extends Entity {
@@ -33,7 +34,7 @@ public interface Mapping extends Entity {
 
     boolean add(MappingItem item);
 
-    MappingItem getConnObjectKeyItem();
+    Optional<? extends MappingItem> getConnObjectKeyItem();
 
     void setConnObjectKeyItem(MappingItem item);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/OrgUnit.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/OrgUnit.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/OrgUnit.java
index cdb0504..89bf153 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/OrgUnit.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/OrgUnit.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.core.persistence.api.entity.resource;
 
 import java.util.List;
+import java.util.Optional;
 import org.apache.syncope.core.persistence.api.entity.Entity;
 import org.identityconnectors.framework.common.objects.ObjectClass;
 import org.identityconnectors.framework.common.objects.SyncToken;
@@ -45,7 +46,7 @@ public interface OrgUnit extends Entity {
 
     boolean add(OrgUnitItem item);
 
-    OrgUnitItem getConnObjectKeyItem();
+    Optional<? extends OrgUnitItem> getConnObjectKeyItem();
 
     void setConnObjectKeyItem(OrgUnitItem item);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PullTask.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PullTask.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PullTask.java
index 52c5b93..0ce891b 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PullTask.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PullTask.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.core.persistence.api.entity.task;
 
 import java.util.List;
+import java.util.Optional;
 import org.apache.syncope.common.lib.types.PullMode;
 import org.apache.syncope.core.persistence.api.entity.AnyType;
 import org.apache.syncope.core.persistence.api.entity.Realm;
@@ -39,7 +40,7 @@ public interface PullTask extends ProvisioningTask {
 
     boolean add(AnyTemplatePullTask template);
 
-    AnyTemplatePullTask getTemplate(AnyType anyType);
+    Optional<? extends AnyTemplatePullTask> getTemplate(AnyType anyType);
 
     List<? extends AnyTemplatePullTask> getTemplates();
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PushTask.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PushTask.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PushTask.java
index fe86726..b5fa504 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PushTask.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PushTask.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.core.persistence.api.entity.task;
 
 import java.util.List;
+import java.util.Optional;
 import org.apache.syncope.core.persistence.api.entity.AnyType;
 import org.apache.syncope.core.persistence.api.entity.Realm;
 
@@ -30,7 +31,7 @@ public interface PushTask extends ProvisioningTask {
 
     boolean add(PushTaskAnyFilter filter);
 
-    PushTaskAnyFilter getFilter(AnyType anyType);
+    Optional<? extends PushTaskAnyFilter> getFilter(AnyType anyType);
 
     List<? extends PushTaskAnyFilter> getFilters();
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/search/SearchCondVisitor.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/search/SearchCondVisitor.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/search/SearchCondVisitor.java
index ce607bf..41b677e 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/search/SearchCondVisitor.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/search/SearchCondVisitor.java
@@ -20,6 +20,7 @@ package org.apache.syncope.core.persistence.api.search;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 import org.apache.cxf.jaxrs.ext.search.ConditionType;
 import org.apache.cxf.jaxrs.ext.search.SearchBean;
 import org.apache.cxf.jaxrs.ext.search.SearchCondition;
@@ -69,11 +70,11 @@ public class SearchCondVisitor extends AbstractSearchConditionVisitor<SearchBean
 
     private SearchCond visitPrimitive(final SearchCondition<SearchBean> sc) {
         String name = getRealPropertyName(sc.getStatement().getProperty());
-        SpecialAttr specialAttrName = SpecialAttr.fromString(name);
+        Optional<SpecialAttr> specialAttrName = SpecialAttr.fromString(name);
 
         String value = SearchUtils.toSqlWildcardString(sc.getStatement().getValue().toString(), false).
                 replaceAll("\\\\_", "_");
-        SpecialAttr specialAttrValue = SpecialAttr.fromString(value);
+        Optional<SpecialAttr> specialAttrValue = SpecialAttr.fromString(value);
 
         AttributeCond attributeCond = createAttributeCond(name);
         attributeCond.setExpression(value);
@@ -95,8 +96,8 @@ public class SearchCondVisitor extends AbstractSearchConditionVisitor<SearchBean
         switch (ct) {
             case EQUALS:
             case NOT_EQUALS:
-                if (specialAttrName == null) {
-                    if (specialAttrValue != null && specialAttrValue == SpecialAttr.NULL) {
+                if (!specialAttrName.isPresent()) {
+                    if (specialAttrValue.isPresent() && specialAttrValue.get() == SpecialAttr.NULL) {
                         attributeCond.setType(AttributeCond.Type.ISNULL);
                         attributeCond.setExpression(null);
                     } else if (value.indexOf('%') == -1) {
@@ -111,7 +112,7 @@ public class SearchCondVisitor extends AbstractSearchConditionVisitor<SearchBean
 
                     leaf = SearchCond.getLeafCond(attributeCond);
                 } else {
-                    switch (specialAttrName) {
+                    switch (specialAttrName.get()) {
                         case TYPE:
                             AnyTypeCond typeCond = new AnyTypeCond();
                             typeCond.setAnyTypeKey(value);
@@ -213,11 +214,11 @@ public class SearchCondVisitor extends AbstractSearchConditionVisitor<SearchBean
 
     private SearchCond visitCompount(final SearchCondition<SearchBean> sc) {
         List<SearchCond> searchConds = new ArrayList<>();
-        for (SearchCondition<SearchBean> searchCondition : sc.getSearchConditions()) {
+        sc.getSearchConditions().forEach(searchCondition -> {
             searchConds.add(searchCondition.getStatement() == null
                     ? visitCompount(searchCondition)
                     : visitPrimitive(searchCondition));
-        }
+        });
 
         SearchCond compound;
         switch (sc.getConditionType()) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/ContentLoaderHandler.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/ContentLoaderHandler.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/ContentLoaderHandler.java
index c287ca1..0786351 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/ContentLoaderHandler.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/ContentLoaderHandler.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.persistence.jpa.content;
 
 import java.sql.ResultSet;
-import java.sql.SQLException;
 import java.sql.Types;
 import java.text.ParseException;
 import java.util.HashMap;
@@ -32,7 +31,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.dao.DataAccessException;
 import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.jdbc.core.ResultSetExtractor;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;
@@ -59,20 +57,16 @@ public class ContentLoaderHandler extends DefaultHandler {
     private Object[] getParameters(final String tableName, final Attributes attrs) {
         JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
 
-        Map<String, Integer> colTypes = jdbcTemplate.query("SELECT * FROM " + tableName + " WHERE 0=1",
-                new ResultSetExtractor<Map<String, Integer>>() {
-
-            @Override
-            public Map<String, Integer> extractData(final ResultSet rs) throws SQLException {
-                Map<String, Integer> colTypes = new HashMap<>();
-                for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
-                    colTypes.put(
-                            rs.getMetaData().getColumnName(i).toUpperCase(),
-                            rs.getMetaData().getColumnType(i));
-                }
-                return colTypes;
-            }
-        });
+        Map<String, Integer> colTypes = jdbcTemplate.query(
+                "SELECT * FROM " + tableName + " WHERE 0=1", (final ResultSet rs) -> {
+                    Map<String, Integer> colTypes1 = new HashMap<>();
+                    for (int i = 1; i <= rs.getMetaData().getColumnCount();
+                    i++) {
+                        colTypes1.
+                                put(rs.getMetaData().getColumnName(i).toUpperCase(), rs.getMetaData().getColumnType(i));
+                    }
+                    return colTypes1;
+                });
 
         Object[] parameters = new Object[attrs.getLength()];
         for (int i = 0; i < attrs.getLength(); i++) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentExporter.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentExporter.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentExporter.java
index f1f3e44..c2adeea 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentExporter.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentExporter.java
@@ -48,8 +48,6 @@ import javax.xml.transform.TransformerConfigurationException;
 import javax.xml.transform.sax.SAXTransformerFactory;
 import javax.xml.transform.sax.TransformerHandler;
 import javax.xml.transform.stream.StreamResult;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.core.provisioning.api.utils.FormatUtils;
@@ -97,13 +95,8 @@ public class XMLContentExporter extends AbstractContentDealer implements Content
             Collections.singletonMap("SYNCOPEGROUP", Collections.singleton("USEROWNER_ID"));
 
     private boolean isTableAllowed(final String tableName) {
-        return IterableUtils.matchesAll(TABLE_PREFIXES_TO_BE_EXCLUDED, new Predicate<String>() {
-
-            @Override
-            public boolean evaluate(final String prefix) {
-                return !tableName.toUpperCase().startsWith(prefix.toUpperCase());
-            }
-        });
+        return TABLE_PREFIXES_TO_BE_EXCLUDED.stream().
+                allMatch(prefix -> !tableName.toUpperCase().startsWith(prefix.toUpperCase()));
     }
 
     private List<String> sortByForeignKeys(final String dbSchema, final Connection conn, final Set<String> tableNames)

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
index 894ec21..d883901 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
@@ -22,7 +22,6 @@ import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -55,12 +54,9 @@ 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.Schema;
 import org.apache.syncope.core.persistence.api.entity.VirSchema;
-import org.apache.syncope.core.persistence.api.entity.anyobject.AMembership;
 import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject;
 import org.apache.syncope.core.persistence.api.entity.group.Group;
-import org.apache.syncope.core.persistence.api.entity.group.TypeExtension;
 import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
-import org.apache.syncope.core.persistence.api.entity.user.UMembership;
 import org.apache.syncope.core.persistence.api.entity.user.User;
 import org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAttrValue;
 import org.apache.syncope.core.persistence.jpa.entity.user.JPAUser;
@@ -236,12 +232,12 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
         query.setParameter("doubleValue", attrValue.getDoubleValue());
 
         List<A> result = new ArrayList<>();
-        for (PlainAttrValue value : (List<PlainAttrValue>) query.getResultList()) {
+        ((List<PlainAttrValue>) query.getResultList()).stream().forEach(value -> {
             A any = (A) value.getAttr().getOwner();
             if (!result.contains(any)) {
                 result.add(any);
             }
-        }
+        });
 
         return result;
     }
@@ -318,23 +314,19 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
         }
 
         // Sort literals in order to process later literals included into others
-        Collections.sort(literals, new Comparator<String>() {
-
-            @Override
-            public int compare(final String t, final String t1) {
-                if (t == null && t1 == null) {
-                    return 0;
-                } else if (t != null && t1 == null) {
-                    return -1;
-                } else if (t == null && t1 != null) {
-                    return 1;
-                } else if (t.length() == t1.length()) {
-                    return 0;
-                } else if (t.length() > t1.length()) {
-                    return -1;
-                } else {
-                    return 1;
-                }
+        Collections.sort(literals, (final String t, final String t1) -> {
+            if (t == null && t1 == null) {
+                return 0;
+            } else if (t != null && t1 == null) {
+                return -1;
+            } else if (t == null && t1 != null) {
+                return 1;
+            } else if (t.length() == t1.length()) {
+                return 0;
+            } else if (t.length() > t1.length()) {
+                return -1;
+            } else {
+                return 1;
             }
         });
 
@@ -483,7 +475,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
         typeOwnClasses.addAll(any.getType().getClasses());
         typeOwnClasses.addAll(any.getAuxClasses());
 
-        for (AnyTypeClass typeClass : typeOwnClasses) {
+        typeOwnClasses.forEach(typeClass -> {
             if (reference.equals(PlainSchema.class)) {
                 result.getForSelf().addAll((Collection<? extends S>) typeClass.getPlainSchemas());
             } else if (reference.equals(DerSchema.class)) {
@@ -491,29 +483,31 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
             } else if (reference.equals(VirSchema.class)) {
                 result.getForSelf().addAll((Collection<? extends S>) typeClass.getVirSchemas());
             }
-        }
+        });
 
         // schemas given by type extensions
         Map<Group, List<? extends AnyTypeClass>> typeExtensionClasses = new HashMap<>();
         if (any instanceof User) {
-            for (UMembership memb : ((User) any).getMemberships()) {
-                for (TypeExtension typeExtension : memb.getRightEnd().getTypeExtensions()) {
+            ((User) any).getMemberships().forEach(memb -> {
+                memb.getRightEnd().getTypeExtensions().forEach(typeExtension -> {
                     typeExtensionClasses.put(memb.getRightEnd(), typeExtension.getAuxClasses());
-                }
-            }
+                });
+            });
         } else if (any instanceof AnyObject) {
-            for (AMembership memb : ((AnyObject) any).getMemberships()) {
-                for (TypeExtension typeExtension : memb.getRightEnd().getTypeExtensions()) {
-                    if (any.getType().equals(typeExtension.getAnyType())) {
-                        typeExtensionClasses.put(memb.getRightEnd(), typeExtension.getAuxClasses());
-                    }
-                }
-            }
+            ((AnyObject) any).getMemberships().forEach(memb -> {
+                memb.getRightEnd().getTypeExtensions().stream().
+                        filter(typeExtension -> any.getType().equals(typeExtension.getAnyType())).
+                        forEachOrdered((typeExtension) -> {
+                            typeExtensionClasses.put(memb.getRightEnd(), typeExtension.getAuxClasses());
+                        });
+            });
         }
 
-        for (Map.Entry<Group, List<? extends AnyTypeClass>> entry : typeExtensionClasses.entrySet()) {
-            result.getForMemberships().put(entry.getKey(), new HashSet<S>());
-            for (AnyTypeClass typeClass : entry.getValue()) {
+        typeExtensionClasses.entrySet().stream().map(entry -> {
+            result.getForMemberships().put(entry.getKey(), new HashSet<>());
+            return entry;
+        }).forEachOrdered((entry) -> {
+            entry.getValue().forEach(typeClass -> {
                 if (reference.equals(PlainSchema.class)) {
                     result.getForMemberships().get(entry.getKey()).
                             addAll((Collection<? extends S>) typeClass.getPlainSchemas());
@@ -524,8 +518,8 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
                     result.getForMemberships().get(entry.getKey()).
                             addAll((Collection<? extends S>) typeClass.getVirSchemas());
                 }
-            }
-        }
+            });
+        });
 
         return result;
     }
@@ -547,24 +541,25 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
 
     @Transactional(readOnly = true)
     @Override
+    @SuppressWarnings("unchecked")
     public List<String> findDynRealms(final String key) {
         Query query = entityManager().createNativeQuery(
                 "SELECT dynRealm_id FROM " + JPADynRealmDAO.DYNMEMB_TABLE + " WHERE any_id=?");
         query.setParameter(1, key);
 
         List<String> result = new ArrayList<>();
-        for (Object resultKey : query.getResultList()) {
-            String actualKey = resultKey instanceof Object[]
-                    ? (String) ((Object[]) resultKey)[0]
-                    : ((String) resultKey);
-
-            DynRealm dynRealm = dynRealmDAO().find(actualKey);
-            if (dynRealm == null) {
-                LOG.error("Could not find dynRealm with id {}, even though returned by the native query", actualKey);
-            } else if (!result.contains(actualKey)) {
-                result.add(actualKey);
-            }
-        }
+        query.getResultList().stream().map(resultKey -> resultKey instanceof Object[]
+                ? (String) ((Object[]) resultKey)[0]
+                : ((String) resultKey)).
+                forEachOrdered((actualKey) -> {
+                    DynRealm dynRealm = dynRealmDAO().find(actualKey.toString());
+                    if (dynRealm == null) {
+                        LOG.error("Could not find dynRealm with id {}, even though returned by the native query",
+                                actualKey);
+                    } else if (!result.contains(actualKey.toString())) {
+                        result.add(actualKey.toString());
+                    }
+                });
         return result;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnySearchDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnySearchDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnySearchDAO.java
index c9daf03..f20a765 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnySearchDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnySearchDAO.java
@@ -25,12 +25,11 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
 import javax.persistence.Entity;
 import javax.validation.ValidationException;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Transformer;
 import org.apache.commons.lang3.ClassUtils;
 import org.apache.commons.lang3.SerializationUtils;
 import org.apache.commons.lang3.tuple.Pair;
@@ -100,15 +99,11 @@ public abstract class AbstractAnySearchDAO extends AbstractDAO<Any<?>> implement
     }
 
     protected SearchCond buildEffectiveCond(final SearchCond cond, final Set<String> dynRealmKeys) {
-        List<SearchCond> effectiveConds = CollectionUtils.collect(dynRealmKeys, new Transformer<String, SearchCond>() {
-
-            @Override
-            public SearchCond transform(final String input) {
-                DynRealmCond dynRealmCond = new DynRealmCond();
-                dynRealmCond.setDynRealm(input);
-                return SearchCond.getLeafCond(dynRealmCond);
-            }
-        }, new ArrayList<SearchCond>());
+        List<SearchCond> effectiveConds = dynRealmKeys.stream().map(dynRealmKey -> {
+            DynRealmCond dynRealmCond = new DynRealmCond();
+            dynRealmCond.setDynRealm(dynRealmKey);
+            return SearchCond.getLeafCond(dynRealmCond);
+        }).collect(Collectors.toList());
         effectiveConds.add(cond);
 
         return SearchCond.getAndCond(effectiveConds);
@@ -314,23 +309,22 @@ public abstract class AbstractAnySearchDAO extends AbstractDAO<Any<?>> implement
     protected <T extends Any<?>> List<T> buildResult(final List<Object> raw, final AnyTypeKind kind) {
         List<T> result = new ArrayList<>();
 
-        for (Object anyKey : raw) {
-            String actualKey = anyKey instanceof Object[]
-                    ? (String) ((Object[]) anyKey)[0]
-                    : ((String) anyKey);
-
-            @SuppressWarnings("unchecked")
-            T any = kind == AnyTypeKind.USER
-                    ? (T) userDAO.find(actualKey)
-                    : kind == AnyTypeKind.GROUP
-                            ? (T) groupDAO.find(actualKey)
-                            : (T) anyObjectDAO.find(actualKey);
-            if (any == null) {
-                LOG.error("Could not find {} with id {}, even if returned by native query", kind, actualKey);
-            } else if (!result.contains(any)) {
-                result.add(any);
-            }
-        }
+        raw.stream().map(anyKey -> anyKey instanceof Object[]
+                ? (String) ((Object[]) anyKey)[0]
+                : ((String) anyKey)).
+                forEachOrdered((actualKey) -> {
+                    @SuppressWarnings("unchecked")
+                    T any = kind == AnyTypeKind.USER
+                            ? (T) userDAO.find(actualKey)
+                            : kind == AnyTypeKind.GROUP
+                                    ? (T) groupDAO.find(actualKey)
+                                    : (T) anyObjectDAO.find(actualKey);
+                    if (any == null) {
+                        LOG.error("Could not find {} with id {}, even if returned by native query", kind, actualKey);
+                    } else if (!result.contains(any)) {
+                        result.add(any);
+                    }
+                });
 
         return result;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/DefaultAccountRule.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/DefaultAccountRule.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/DefaultAccountRule.java
index 256ffe6..c54517f 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/DefaultAccountRule.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/DefaultAccountRule.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.persistence.jpa.dao;
 
-import java.util.List;
 import java.util.regex.Pattern;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.common.lib.policy.AccountRuleConf;
@@ -26,7 +25,6 @@ import org.apache.syncope.common.lib.policy.DefaultAccountRuleConf;
 import org.apache.syncope.core.provisioning.api.utils.policy.AccountPolicyException;
 import org.apache.syncope.core.persistence.api.dao.AccountRule;
 import org.apache.syncope.core.persistence.api.dao.AccountRuleConfClass;
-import org.apache.syncope.core.persistence.api.entity.PlainAttr;
 import org.apache.syncope.core.persistence.api.entity.user.User;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -47,15 +45,12 @@ public class DefaultAccountRule implements AccountRule {
                     AccountRuleConf.class.getName() + " expected, got " + conf.getClass().getName());
         }
 
-        for (String schema : this.conf.getSchemasNotPermitted()) {
-            PlainAttr<?> attr = user.getPlainAttr(schema);
-            if (attr != null) {
-                List<String> values = attr.getValuesAsStrings();
-                if (values != null && !values.isEmpty()) {
-                    this.conf.getWordsNotPermitted().add(values.get(0));
-                }
-            }
-        }
+        this.conf.getSchemasNotPermitted().stream().
+                map(schema -> user.getPlainAttr(schema)).
+                filter(attr -> attr.isPresent()).
+                map(attr -> attr.get().getValuesAsStrings()).
+                filter(values -> (values != null && !values.isEmpty())).
+                forEachOrdered(values -> this.conf.getWordsNotPermitted().add(values.get(0)));
 
         if (user.getUsername() == null) {
             throw new AccountPolicyException("Invalid account");
@@ -72,11 +67,11 @@ public class DefaultAccountRule implements AccountRule {
         }
 
         // check words not permitted
-        for (String word : this.conf.getWordsNotPermitted()) {
-            if (StringUtils.containsIgnoreCase(user.getUsername(), word)) {
-                throw new AccountPolicyException("Used word(s) not permitted");
-            }
-        }
+        this.conf.getWordsNotPermitted().stream().
+                filter(word -> StringUtils.containsIgnoreCase(user.getUsername(), word)).
+                forEachOrdered(item -> {
+                    throw new AccountPolicyException("Used word(s) not permitted");
+                });
 
         // check case
         if (this.conf.isAllUpperCase() && !user.getUsername().equals(user.getUsername().toUpperCase())) {
@@ -93,18 +88,18 @@ public class DefaultAccountRule implements AccountRule {
         }
 
         // check prefix
-        for (String prefix : this.conf.getPrefixesNotPermitted()) {
-            if (user.getUsername().startsWith(prefix)) {
-                throw new AccountPolicyException("Prefix not permitted");
-            }
-        }
+        this.conf.getPrefixesNotPermitted().stream().
+                filter(prefix -> user.getUsername().startsWith(prefix)).
+                forEachOrdered(item -> {
+                    throw new AccountPolicyException("Prefix not permitted");
+                });
 
         // check suffix
-        for (String suffix : this.conf.getSuffixesNotPermitted()) {
-            if (user.getUsername().endsWith(suffix)) {
-                throw new AccountPolicyException("Suffix not permitted");
-            }
-        }
+        this.conf.getSuffixesNotPermitted().stream().
+                filter(suffix -> user.getUsername().endsWith(suffix)).
+                forEachOrdered(item -> {
+                    throw new AccountPolicyException("Suffix not permitted");
+                });
     }
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/DefaultPasswordRule.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/DefaultPasswordRule.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/DefaultPasswordRule.java
index 39a02c0..e3eeacd 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/DefaultPasswordRule.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/DefaultPasswordRule.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.persistence.jpa.dao;
 
-import java.util.List;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.common.lib.policy.DefaultPasswordRuleConf;
 import org.apache.syncope.common.lib.policy.PasswordRuleConf;
@@ -26,7 +25,6 @@ import org.apache.syncope.core.provisioning.api.utils.policy.PasswordPolicyExcep
 import org.apache.syncope.core.provisioning.api.utils.policy.PolicyPattern;
 import org.apache.syncope.core.persistence.api.dao.PasswordRule;
 import org.apache.syncope.core.persistence.api.dao.PasswordRuleConfClass;
-import org.apache.syncope.core.persistence.api.entity.PlainAttr;
 import org.apache.syncope.core.persistence.api.entity.user.User;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -45,15 +43,12 @@ public class DefaultPasswordRule implements PasswordRule {
                     PasswordRuleConf.class.getName() + " expected, got " + conf.getClass().getName());
         }
 
-        for (String schema : this.conf.getSchemasNotPermitted()) {
-            PlainAttr<?> attr = user.getPlainAttr(schema);
-            if (attr != null) {
-                List<String> values = attr.getValuesAsStrings();
-                if (values != null && !values.isEmpty()) {
-                    this.conf.getWordsNotPermitted().add(values.get(0));
-                }
-            }
-        }
+        this.conf.getSchemasNotPermitted().stream().
+                map(schema -> user.getPlainAttr(schema)).
+                filter(attr -> attr.isPresent()).
+                map(attr -> attr.get().getValuesAsStrings()).
+                filter(values -> (values != null && !values.isEmpty())).
+                forEachOrdered(values -> this.conf.getWordsNotPermitted().add(values.get(0)));
 
         String clearPassword = user.getClearPassword();
         String password = user.getPassword();
@@ -69,11 +64,11 @@ public class DefaultPasswordRule implements PasswordRule {
             }
 
             // check words not permitted
-            for (String word : this.conf.getWordsNotPermitted()) {
-                if (StringUtils.containsIgnoreCase(clearPassword, word)) {
-                    throw new PasswordPolicyException("Used word(s) not permitted");
-                }
-            }
+            this.conf.getWordsNotPermitted().stream().
+                    filter(word -> StringUtils.containsIgnoreCase(clearPassword, word)).
+                    forEachOrdered(item -> {
+                        throw new PasswordPolicyException("Used word(s) not permitted");
+                    });
 
             // check digits occurrence
             if (this.conf.isDigitRequired() && !checkDigit(clearPassword)) {
@@ -91,18 +86,18 @@ public class DefaultPasswordRule implements PasswordRule {
             }
 
             // check prefix
-            for (String prefix : this.conf.getPrefixesNotPermitted()) {
-                if (clearPassword.startsWith(prefix)) {
-                    throw new PasswordPolicyException("Prefix not permitted");
-                }
-            }
+            this.conf.getPrefixesNotPermitted().stream().
+                    filter(prefix -> clearPassword.startsWith(prefix)).
+                    forEachOrdered(item -> {
+                        throw new PasswordPolicyException("Prefix not permitted");
+                    });
 
             // check suffix
-            for (String suffix : this.conf.getSuffixesNotPermitted()) {
-                if (clearPassword.endsWith(suffix)) {
-                    throw new PasswordPolicyException("Suffix not permitted");
-                }
-            }
+            this.conf.getSuffixesNotPermitted().stream().
+                    filter(suffix -> clearPassword.endsWith(suffix)).
+                    forEachOrdered(item -> {
+                        throw new PasswordPolicyException("Suffix not permitted");
+                    });
 
             // check digit first occurrence
             if (this.conf.isMustStartWithDigit() && !checkFirstDigit(clearPassword)) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
index 32c655c..a595389 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
@@ -28,26 +28,20 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.stream.Collectors;
 import javax.persistence.NoResultException;
 import javax.persistence.Query;
 import javax.persistence.TypedQuery;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
-import org.apache.commons.collections4.SetUtils;
-import org.apache.commons.collections4.Transformer;
 import org.apache.syncope.common.lib.types.AnyEntitlement;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.core.spring.security.AuthContextUtils;
 import org.apache.syncope.core.spring.security.DelegatedAdministrationException;
-import org.apache.syncope.core.provisioning.api.utils.EntityUtils;
 import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
 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.AnyType;
 import org.apache.syncope.core.persistence.api.entity.AnyUtils;
 import org.apache.syncope.core.persistence.api.entity.Realm;
-import org.apache.syncope.core.persistence.api.entity.anyobject.AMembership;
 import org.apache.syncope.core.persistence.api.entity.anyobject.ARelationship;
 import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject;
 import org.apache.syncope.core.persistence.api.entity.group.Group;
@@ -141,17 +135,16 @@ public class JPAAnyObjectDAO extends AbstractAnyDAO<AnyObject> implements AnyObj
 
     @Override
     protected void securityChecks(final AnyObject anyObject) {
-        Set<String> authRealms = SetUtils.emptyIfNull(
-                AuthContextUtils.getAuthorizations().get(AnyEntitlement.READ.getFor(anyObject.getType().getKey())));
-        boolean authorized = IterableUtils.matchesAny(authRealms, new Predicate<String>() {
-
-            @Override
-            public boolean evaluate(final String realm) {
-                return anyObject.getRealm().getFullPath().startsWith(realm);
-            }
-        });
+        Map<String, Set<String>> authorizations = AuthContextUtils.getAuthorizations();
+        Set<String> authRealms = authorizations.containsKey(AnyEntitlement.READ.getFor(anyObject.getType().getKey()))
+                ? authorizations.get(AnyEntitlement.READ.getFor(anyObject.getType().getKey()))
+                : Collections.emptySet();
+        boolean authorized = authRealms.stream().
+                anyMatch(realm -> anyObject.getRealm().getFullPath().startsWith(realm));
         if (!authorized) {
-            authorized = !CollectionUtils.intersection(findDynRealms(anyObject.getKey()), authRealms).isEmpty();
+            authorized = findDynRealms(anyObject.getKey()).stream().
+                    filter(dynRealm -> authRealms.contains(dynRealm)).
+                    count() > 0;
         }
         if (authRealms.isEmpty() || !authorized) {
             throw new DelegatedAdministrationException(
@@ -236,18 +229,21 @@ public class JPAAnyObjectDAO extends AbstractAnyDAO<AnyObject> implements AnyObj
         groupDAO().removeDynMemberships(anyObject);
         dynRealmDAO().removeDynMemberships(anyObject.getKey());
 
-        for (ARelationship relationship : findARelationships(anyObject)) {
+        findARelationships(anyObject).stream().map(relationship -> {
             relationship.getLeftEnd().getRelationships().remove(relationship);
+            return relationship;
+        }).map(relationship -> {
             save(relationship.getLeftEnd());
+            return relationship;
+        }).forEachOrdered(relationship -> entityManager().remove(relationship));
 
-            entityManager().remove(relationship);
-        }
-        for (URelationship relationship : findURelationships(anyObject)) {
+        findURelationships(anyObject).stream().map(relationship -> {
             relationship.getLeftEnd().getRelationships().remove(relationship);
+            return relationship;
+        }).map(relationship -> {
             userDAO().save(relationship.getLeftEnd());
-
-            entityManager().remove(relationship);
-        }
+            return relationship;
+        }).forEachOrdered(relationship -> entityManager().remove(relationship));
 
         entityManager().remove(anyObject);
         publisher.publishEvent(
@@ -256,45 +252,43 @@ public class JPAAnyObjectDAO extends AbstractAnyDAO<AnyObject> implements AnyObj
 
     @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
     @Override
+    @SuppressWarnings("unchecked")
     public List<Group> findDynGroups(final String key) {
         Query query = entityManager().createNativeQuery(
                 "SELECT group_id FROM " + JPAGroupDAO.ADYNMEMB_TABLE + " WHERE any_id=?");
         query.setParameter(1, key);
 
         List<Group> result = new ArrayList<>();
-        for (Object resultKey : query.getResultList()) {
-            String actualKey = resultKey instanceof Object[]
-                    ? (String) ((Object[]) resultKey)[0]
-                    : ((String) resultKey);
-
-            Group group = groupDAO().find(actualKey);
-            if (group == null) {
-                LOG.error("Could not find group with id {}, even though returned by the native query", actualKey);
-            } else if (!result.contains(group)) {
-                result.add(group);
-            }
-        }
+        query.getResultList().stream().map(resultKey -> resultKey instanceof Object[]
+                ? (String) ((Object[]) resultKey)[0]
+                : ((String) resultKey)).
+                forEachOrdered(actualKey -> {
+                    Group group = groupDAO().find(actualKey.toString());
+                    if (group == null) {
+                        LOG.error("Could not find group with id {}, even though returned by the native query",
+                                actualKey);
+                    } else if (!result.contains(group)) {
+                        result.add(group);
+                    }
+                });
         return result;
     }
 
     @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
     @Override
     public Collection<Group> findAllGroups(final AnyObject anyObject) {
-        return CollectionUtils.union(
-                CollectionUtils.collect(anyObject.getMemberships(), new Transformer<AMembership, Group>() {
+        Set<Group> result = new HashSet<>();
+        result.addAll(anyObject.getMemberships().stream().
+                map(membership -> membership.getRightEnd()).collect(Collectors.toSet()));
+        result.addAll(findDynGroups(anyObject.getKey()));
 
-                    @Override
-                    public Group transform(final AMembership input) {
-                        return input.getRightEnd();
-                    }
-                }, new ArrayList<Group>()),
-                findDynGroups(anyObject.getKey()));
+        return result;
     }
 
     @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
     @Override
     public Collection<String> findAllGroupKeys(final AnyObject anyObject) {
-        return CollectionUtils.collect(findAllGroups(anyObject), EntityUtils.<Group>keyTransformer());
+        return findAllGroups(anyObject).stream().map(group -> group.getKey()).collect(Collectors.toList());
     }
 
     @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
@@ -302,9 +296,7 @@ public class JPAAnyObjectDAO extends AbstractAnyDAO<AnyObject> implements AnyObj
     public Collection<ExternalResource> findAllResources(final AnyObject anyObject) {
         Set<ExternalResource> result = new HashSet<>();
         result.addAll(anyObject.getResources());
-        for (Group group : findAllGroups(anyObject)) {
-            result.addAll(group.getResources());
-        }
+        findAllGroups(anyObject).forEach(group -> result.addAll(group.getResources()));
 
         return result;
     }
@@ -312,7 +304,7 @@ public class JPAAnyObjectDAO extends AbstractAnyDAO<AnyObject> implements AnyObj
     @Transactional(readOnly = true)
     @Override
     public Collection<String> findAllResourceKeys(final String key) {
-        return CollectionUtils.collect(findAllResources(authFind(key)), EntityUtils.<ExternalResource>keyTransformer());
+        return findAllResources(authFind(key)).stream().map(resource -> resource.getKey()).collect(Collectors.toList());
     }
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
index 6af5f27..a7aae81 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
@@ -25,9 +25,9 @@ import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
 import javax.persistence.Query;
 import javax.persistence.TemporalType;
-import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.commons.lang3.tuple.Triple;
@@ -36,7 +36,6 @@ import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.common.lib.types.AttrSchemaType;
 import org.apache.syncope.common.lib.types.ClientExceptionType;
 import org.apache.syncope.core.provisioning.api.utils.RealmUtils;
-import org.apache.syncope.core.provisioning.api.utils.EntityUtils;
 import org.apache.syncope.core.persistence.api.dao.search.AttributeCond;
 import org.apache.syncope.core.persistence.api.dao.search.MembershipCond;
 import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
@@ -80,8 +79,8 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
                     noRealm.getElements().add("Invalid realm specified: " + realmPath);
                     throw noRealm;
                 } else {
-                    CollectionUtils.collect(
-                            realmDAO.findDescendants(realm), EntityUtils.<Realm>keyTransformer(), realmKeys);
+                    realmKeys.addAll(realmDAO.findDescendants(realm).stream().
+                            map(r -> r.getKey()).collect(Collectors.toSet()));
                 }
             } else {
                 DynRealm dynRealm = dynRealmDAO.find(realmPath);
@@ -93,7 +92,8 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
             }
         }
         if (!dynRealmKeys.isEmpty()) {
-            CollectionUtils.collect(realmDAO.findAll(), EntityUtils.keyTransformer(), realmKeys);
+            realmKeys.addAll(realmDAO.findAll().stream().
+                    map(r -> r.getKey()).collect(Collectors.toSet()));
         }
 
         StringBuilder adminRealmFilter = new StringBuilder("u.any_id IN (").