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:15 UTC

[11/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/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormTO.java
index 0e80be6..2f99b65 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormTO.java
@@ -23,12 +23,11 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Optional;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
 import org.apache.syncope.common.lib.AbstractBaseBean;
 import org.apache.syncope.common.lib.patch.UserPatch;
 
@@ -135,14 +134,8 @@ public class WorkflowFormTO extends AbstractBaseBean {
     }
 
     @JsonIgnore
-    public WorkflowFormPropertyTO getProperty(final String id) {
-        return IterableUtils.find(properties, new Predicate<WorkflowFormPropertyTO>() {
-
-            @Override
-            public boolean evaluate(final WorkflowFormPropertyTO object) {
-                return id.equals(object.getId());
-            }
-        });
+    public Optional<WorkflowFormPropertyTO> getProperty(final String id) {
+        return properties.stream().filter(property -> id.equals(property.getId())).findFirst();
     }
 
     @XmlElementWrapper(name = "workflowFormProperties")

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java
index fd7e5f2..ad43e0e 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java
@@ -22,9 +22,6 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.SyncopeClientException;
@@ -77,7 +74,7 @@ public abstract class AbstractAnyLogic<TO extends AnyTO, P extends AnyPatch> ext
     private List<LogicActions> getActions(final Realm realm) {
         List<LogicActions> actions = new ArrayList<>();
 
-        for (String className : realm.getActionsClassNames()) {
+        realm.getActionsClassNames().forEach(className -> {
             try {
                 Class<?> actionsClass = Class.forName(className);
                 LogicActions logicActions = (LogicActions) ApplicationContextProvider.getBeanFactory().
@@ -87,7 +84,7 @@ public abstract class AbstractAnyLogic<TO extends AnyTO, P extends AnyPatch> ext
             } catch (Exception e) {
                 LOG.warn("Class '{}' not found", className, e);
             }
-        }
+        });
 
         return actions;
     }
@@ -229,20 +226,15 @@ public abstract class AbstractAnyLogic<TO extends AnyTO, P extends AnyPatch> ext
     }
 
     protected boolean securityChecks(final Set<String> effectiveRealms, final String realm, final String key) {
-        boolean authorized = IterableUtils.matchesAny(effectiveRealms, new Predicate<String>() {
-
-            @Override
-            public boolean evaluate(final String ownedRealm) {
-                return realm.startsWith(ownedRealm);
-            }
-        });
+        boolean authorized = effectiveRealms.stream().anyMatch(ownedRealm -> realm.startsWith(ownedRealm));
         if (!authorized) {
             AnyDAO<?> anyDAO = this instanceof UserLogic
                     ? userDAO
                     : this instanceof GroupLogic
                             ? groupDAO
                             : anyObjectDAO;
-            authorized = !CollectionUtils.intersection(anyDAO.findDynRealms(key), effectiveRealms).isEmpty();
+            authorized = anyDAO.findDynRealms(key).stream().
+                    filter(dynRealm -> effectiveRealms.contains(dynRealm)).findFirst().isPresent();
         }
         if (!authorized) {
             throw new DelegatedAdministrationException(
@@ -255,7 +247,7 @@ public abstract class AbstractAnyLogic<TO extends AnyTO, P extends AnyPatch> ext
                     key);
         }
 
-        return IterableUtils.matchesAny(effectiveRealms, new RealmUtils.DynRealmsPredicate());
+        return effectiveRealms.stream().anyMatch(new RealmUtils.DynRealmsPredicate());
     }
 
     public abstract TO read(String key);

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/AccessTokenLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/AccessTokenLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/AccessTokenLogic.java
index f1a39c1..ee3877f 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/AccessTokenLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/AccessTokenLogic.java
@@ -21,13 +21,11 @@ package org.apache.syncope.core.logic;
 import static org.apache.syncope.core.logic.AbstractLogic.LOG;
 
 import java.lang.reflect.Method;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
+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.to.AccessTokenTO;
 import org.apache.syncope.common.lib.types.CipherAlgorithm;
@@ -115,14 +113,8 @@ public class AccessTokenLogic extends AbstractTransactionalLogic<AccessTokenTO>
             final int size,
             final List<OrderByClause> orderByClauses) {
 
-        return CollectionUtils.collect(accessTokenDAO.findAll(page, size, orderByClauses),
-                new Transformer<AccessToken, AccessTokenTO>() {
-
-            @Override
-            public AccessTokenTO transform(final AccessToken input) {
-                return binder.getAccessTokenTO(input);
-            }
-        }, new ArrayList<AccessTokenTO>());
+        return accessTokenDAO.findAll(page, size, orderByClauses).stream().
+                map(accessToken -> binder.getAccessTokenTO(accessToken)).collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.ACCESS_TOKEN_DELETE + "')")

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java
index e5621be..a067ab7 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java
@@ -19,13 +19,11 @@
 package org.apache.syncope.core.logic;
 
 import java.lang.reflect.Method;
-import java.util.ArrayList;
 import java.util.Collection;
 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.Pair;
@@ -95,14 +93,8 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectPatch
 
         List<AnyObject> matching = searchDAO.search(
                 effectiveRealms, searchCond, page, size, orderBy, AnyTypeKind.ANY_OBJECT);
-        List<AnyObjectTO> result = CollectionUtils.collect(matching, new Transformer<AnyObject, AnyObjectTO>() {
-
-            @Transactional(readOnly = true)
-            @Override
-            public AnyObjectTO transform(final AnyObject input) {
-                return binder.getAnyObjectTO(input, details);
-            }
-        }, new ArrayList<AnyObjectTO>());
+        List<AnyObjectTO> result = matching.stream().
+                map(anyObject -> binder.getAnyObjectTO(anyObject, details)).collect(Collectors.toList());
 
         return Pair.of(count, result);
     }
@@ -184,13 +176,9 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectPatch
 
         AnyObjectPatch patch = new AnyObjectPatch();
         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.getAnyObjectTO(provisioningManager.unlink(patch));
     }
@@ -206,13 +194,9 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectPatch
 
         AnyObjectPatch patch = new AnyObjectPatch();
         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.getAnyObjectTO(provisioningManager.link(patch));
     }
@@ -230,13 +214,9 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectPatch
 
         AnyObjectPatch patch = new AnyObjectPatch();
         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);
     }
@@ -258,13 +238,9 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectPatch
 
         AnyObjectPatch patch = new AnyObjectPatch();
         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 update(patch, nullPriorityAsync);
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeClassLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeClassLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeClassLogic.java
index babe255..03f6909 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeClassLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeClassLogic.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.commons.lang3.StringUtils;
 import org.apache.syncope.common.lib.SyncopeClientException;
@@ -64,13 +62,8 @@ public class AnyTypeClassLogic extends AbstractTransactionalLogic<AnyTypeClassTO
     @PreAuthorize("hasRole('" + StandardEntitlement.ANYTYPECLASS_LIST + "')")
     @Transactional(readOnly = true)
     public List<AnyTypeClassTO> list() {
-        return CollectionUtils.collect(anyTypeClassDAO.findAll(), new Transformer<AnyTypeClass, AnyTypeClassTO>() {
-
-            @Override
-            public AnyTypeClassTO transform(final AnyTypeClass input) {
-                return binder.getAnyTypeClassTO(input);
-            }
-        }, new ArrayList<AnyTypeClassTO>());
+        return anyTypeClassDAO.findAll().stream().
+                map(anyTypeClass -> binder.getAnyTypeClassTO(anyTypeClass)).collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.ANYTYPECLASS_CREATE + "')")

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java
index f967da8..783d356 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.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.commons.lang3.StringUtils;
 import org.apache.syncope.common.lib.SyncopeClientException;
@@ -64,13 +62,7 @@ public class AnyTypeLogic extends AbstractTransactionalLogic<AnyTypeTO> {
     @PreAuthorize("hasRole('" + StandardEntitlement.ANYTYPE_LIST + "')")
     @Transactional(readOnly = true)
     public List<AnyTypeTO> list() {
-        return CollectionUtils.collect(anyTypeDAO.findAll(), new Transformer<AnyType, AnyTypeTO>() {
-
-            @Override
-            public AnyTypeTO transform(final AnyType input) {
-                return binder.getAnyTypeTO(input);
-            }
-        }, new ArrayList<AnyTypeTO>());
+        return anyTypeDAO.findAll().stream().map(anyType -> binder.getAnyTypeTO(anyType)).collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.ANYTYPE_CREATE + "')")

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java
index eea22ad..cc7a4bd 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java
@@ -21,6 +21,7 @@ package org.apache.syncope.core.logic;
 import java.io.OutputStream;
 import java.lang.reflect.Method;
 import java.util.List;
+import java.util.Optional;
 import org.apache.syncope.common.lib.to.AttrTO;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.syncope.core.spring.security.AuthContextUtils;
@@ -65,8 +66,8 @@ public class ConfigurationLogic extends AbstractTransactionalLogic<AttrTO> {
 
     @PreAuthorize("hasRole('" + StandardEntitlement.CONFIGURATION_DELETE + "')")
     public void delete(final String schema) {
-        CPlainAttr conf = confDAO.find(schema);
-        if (conf == null) {
+        Optional<? extends CPlainAttr> conf = confDAO.find(schema);
+        if (!conf.isPresent()) {
             PlainSchema plainSchema = plainSchemaDAO.find(schema);
             if (plainSchema == null) {
                 throw new NotFoundException("Configuration schema " + schema);
@@ -86,8 +87,10 @@ public class ConfigurationLogic extends AbstractTransactionalLogic<AttrTO> {
     public AttrTO get(final String schema) {
         AttrTO result;
 
-        CPlainAttr conf = confDAO.find(schema);
-        if (conf == null) {
+        Optional<? extends CPlainAttr> conf = confDAO.find(schema);
+        if (conf.isPresent()) {
+            result = binder.getAttrTO(conf.get());
+        } else {
             PlainSchema plainSchema = plainSchemaDAO.find(schema);
             if (plainSchema == null) {
                 throw new NotFoundException("Configuration schema " + schema);
@@ -95,8 +98,6 @@ public class ConfigurationLogic extends AbstractTransactionalLogic<AttrTO> {
 
             result = new AttrTO();
             result.setSchema(schema);
-        } else {
-            result = binder.getAttrTO(conf);
         }
 
         return result;

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorHistoryLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorHistoryLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorHistoryLogic.java
index 2d0afa7..e7ff07c 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorHistoryLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorHistoryLogic.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.syncope.common.lib.to.ConnInstanceHistoryConfTO;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.syncope.core.persistence.api.dao.ConnInstanceDAO;
@@ -64,15 +62,8 @@ public class ConnectorHistoryLogic extends AbstractTransactionalLogic<ConnInstan
             throw new NotFoundException("Connector '" + key + "'");
         }
 
-        return CollectionUtils.collect(connInstanceHistoryConfDAO.findByEntity(connInstance),
-                new Transformer<ConnInstanceHistoryConf, ConnInstanceHistoryConfTO>() {
-
-            @Override
-            public ConnInstanceHistoryConfTO transform(final ConnInstanceHistoryConf input) {
-                return getConnInstanceHistoryConfTO(input);
-            }
-
-        }, new ArrayList<ConnInstanceHistoryConfTO>());
+        return connInstanceHistoryConfDAO.findByEntity(connInstance).stream().
+                map(historyConf -> getConnInstanceHistoryConfTO(historyConf)).collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.CONNECTOR_HISTORY_RESTORE + "')")

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
index 9c92e29..5d80ef7 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
@@ -25,11 +25,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
-import org.apache.commons.collections4.PredicateUtils;
-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.syncope.common.lib.SyncopeClientException;
@@ -51,10 +47,8 @@ import org.apache.syncope.core.spring.security.AuthContextUtils;
 import org.apache.syncope.core.spring.security.DelegatedAdministrationException;
 import org.identityconnectors.common.l10n.CurrentLocale;
 import org.identityconnectors.framework.api.ConfigurationProperties;
-import org.identityconnectors.framework.api.ConnectorInfo;
 import org.identityconnectors.framework.api.ConnectorInfoManager;
 import org.identityconnectors.framework.api.ConnectorKey;
-import org.identityconnectors.framework.common.objects.AttributeInfo;
 import org.identityconnectors.framework.common.objects.AttributeUtil;
 import org.identityconnectors.framework.common.objects.ObjectClassInfo;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -81,13 +75,7 @@ public class ConnectorLogic extends AbstractTransactionalLogic<ConnInstanceTO> {
     private ConnectorFactory connFactory;
 
     protected void securityChecks(final Set<String> effectiveRealms, final String realm, final String key) {
-        boolean authorized = IterableUtils.matchesAny(effectiveRealms, new Predicate<String>() {
-
-            @Override
-            public boolean evaluate(final String ownedRealm) {
-                return realm.startsWith(ownedRealm);
-            }
-        });
+        boolean authorized = effectiveRealms.stream().anyMatch(ownedRealm -> realm.startsWith(ownedRealm));
         if (!authorized) {
             throw new DelegatedAdministrationException(realm, ConnInstance.class.getSimpleName(), key);
         }
@@ -138,9 +126,9 @@ public class ConnectorLogic extends AbstractTransactionalLogic<ConnInstanceTO> {
         if (!connInstance.getResources().isEmpty()) {
             SyncopeClientException associatedResources = SyncopeClientException.build(
                     ClientExceptionType.AssociatedResources);
-            for (ExternalResource resource : connInstance.getResources()) {
+            connInstance.getResources().forEach(resource -> {
                 associatedResources.getElements().add(resource.getKey());
-            }
+            });
             throw associatedResources;
         }
 
@@ -154,23 +142,20 @@ public class ConnectorLogic extends AbstractTransactionalLogic<ConnInstanceTO> {
     public List<ConnInstanceTO> list(final String lang) {
         CurrentLocale.set(StringUtils.isBlank(lang) ? Locale.ENGLISH : new Locale(lang));
 
-        List<ConnInstanceTO> result = CollectionUtils.collect(connInstanceDAO.findAll().iterator(),
-                new Transformer<ConnInstance, ConnInstanceTO>() {
-
-            @Override
-            public ConnInstanceTO transform(final ConnInstance connInstance) {
-                ConnInstanceTO result = null;
-                try {
-                    result = binder.getConnInstanceTO(connInstance);
-                } catch (NotFoundException e) {
-                    LOG.error("Connector '{}#{}' not found", connInstance.getBundleName(), connInstance.getVersion());
-                }
-
-                return result;
-            }
-        }, new ArrayList<ConnInstanceTO>());
-        CollectionUtils.filter(result, PredicateUtils.notNullPredicate());
-        return result;
+        return connInstanceDAO.findAll().stream().
+                filter(connInstance -> connInstance != null).
+                map(connInstance -> {
+                    ConnInstanceTO result = null;
+                    try {
+                        result = binder.getConnInstanceTO(connInstance);
+                    } catch (NotFoundException e) {
+                        LOG.
+                                error("Connector '{}#{}' not found", connInstance.getBundleName(), connInstance.
+                                        getVersion());
+                    }
+
+                    return result;
+                }).collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.CONNECTOR_READ + "')")
@@ -197,25 +182,22 @@ public class ConnectorLogic extends AbstractTransactionalLogic<ConnInstanceTO> {
 
         List<ConnBundleTO> connectorBundleTOs = new ArrayList<>();
         for (Map.Entry<URI, ConnectorInfoManager> entry : connIdBundleManager.getConnInfoManagers().entrySet()) {
-            for (ConnectorInfo bundle : entry.getValue().getConnectorInfos()) {
+            entry.getValue().getConnectorInfos().stream().map(bundle -> {
                 ConnBundleTO connBundleTO = new ConnBundleTO();
                 connBundleTO.setDisplayName(bundle.getConnectorDisplayName());
-
                 connBundleTO.setLocation(entry.getKey().toString());
-
                 ConnectorKey key = bundle.getConnectorKey();
                 connBundleTO.setBundleName(key.getBundleName());
                 connBundleTO.setConnectorName(key.getConnectorName());
                 connBundleTO.setVersion(key.getBundleVersion());
-
                 ConfigurationProperties properties = connIdBundleManager.getConfigurationProperties(bundle);
-
                 for (String propName : properties.getPropertyNames()) {
                     connBundleTO.getProperties().add(binder.build(properties.getProperty(propName)));
                 }
-
+                return connBundleTO;
+            }).forEachOrdered(connBundleTO -> {
                 connectorBundleTOs.add(connBundleTO);
-            }
+            });
         }
 
         return connectorBundleTOs;
@@ -235,20 +217,20 @@ public class ConnectorLogic extends AbstractTransactionalLogic<ConnInstanceTO> {
                 getObjectClassInfo();
 
         List<ConnIdObjectClassTO> result = new ArrayList<>(objectClassInfo.size());
-        for (ObjectClassInfo info : objectClassInfo) {
+        objectClassInfo.stream().map(info -> {
             ConnIdObjectClassTO connIdObjectClassTO = new ConnIdObjectClassTO();
             connIdObjectClassTO.setType(info.getType());
             connIdObjectClassTO.setAuxiliary(info.isAuxiliary());
             connIdObjectClassTO.setContainer(info.isContainer());
-
-            for (AttributeInfo attrInfo : info.getAttributeInfo()) {
-                if (includeSpecial || !AttributeUtil.isSpecialName(attrInfo.getName())) {
-                    connIdObjectClassTO.getAttributes().add(attrInfo.getName());
-                }
-            }
-
+            info.getAttributeInfo().stream().
+                    filter(attrInfo -> includeSpecial || !AttributeUtil.isSpecialName(attrInfo.getName())).
+                    forEachOrdered(attrInfo -> {
+                        connIdObjectClassTO.getAttributes().add(attrInfo.getName());
+                    });
+            return connIdObjectClassTO;
+        }).forEachOrdered((connIdObjectClassTO) -> {
             result.add(connIdObjectClassTO);
-        }
+        });
 
         return result;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/DomainLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/DomainLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/DomainLogic.java
index cfefdd0..d9d29ba 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/DomainLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/DomainLogic.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.commons.lang3.StringUtils;
 import org.apache.syncope.common.lib.to.DomainTO;
@@ -63,13 +61,7 @@ public class DomainLogic extends AbstractTransactionalLogic<DomainTO> {
 
     @PreAuthorize("isAuthenticated()")
     public List<DomainTO> list() {
-        return CollectionUtils.collect(domainDAO.findAll(), new Transformer<Domain, DomainTO>() {
-
-            @Override
-            public DomainTO transform(final Domain input) {
-                return binder.getDomainTO(input);
-            }
-        }, new ArrayList<DomainTO>());
+        return domainDAO.findAll().stream().map(domain -> binder.getDomainTO(domain)).collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.DOMAIN_CREATE + "') and authentication.details.domain == "

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/DynRealmLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/DynRealmLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/DynRealmLogic.java
index 0b17724..de9e78a 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/DynRealmLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/DynRealmLogic.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.DynRealmTO;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
@@ -56,13 +54,8 @@ public class DynRealmLogic extends AbstractTransactionalLogic<DynRealmTO> {
     }
 
     public List<DynRealmTO> list() {
-        return CollectionUtils.collect(dynRealmDAO.findAll(), new Transformer<DynRealm, DynRealmTO>() {
-
-            @Override
-            public DynRealmTO transform(final DynRealm input) {
-                return binder.getDynRealmTO(input);
-            }
-        }, new ArrayList<DynRealmTO>());
+        return dynRealmDAO.findAll().stream().
+                map(dynRealm -> binder.getDynRealmTO(dynRealm)).collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.DYNREALM_CREATE + "')")

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
index 898113d..efdab59 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
@@ -19,17 +19,13 @@
 package org.apache.syncope.core.logic;
 
 import java.lang.reflect.Method;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
 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.IterableUtils;
-import org.apache.commons.collections4.Predicate;
-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.Pair;
@@ -110,21 +106,17 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
 
     @Override
     protected boolean securityChecks(final Set<String> effectiveRealms, final String realm, final String key) {
-        boolean authorized = IterableUtils.matchesAny(effectiveRealms, new Predicate<String>() {
-
-            @Override
-            public boolean evaluate(final String ownedRealm) {
-                return realm.startsWith(ownedRealm) || ownedRealm.equals(RealmUtils.getGroupOwnerRealm(realm, key));
-            }
-        });
+        boolean authorized = effectiveRealms.stream().anyMatch(ownedRealm
+                -> realm.startsWith(ownedRealm) || ownedRealm.equals(RealmUtils.getGroupOwnerRealm(realm, key)));
         if (!authorized) {
-            authorized = !CollectionUtils.intersection(groupDAO.findDynRealms(key), effectiveRealms).isEmpty();
+            authorized = groupDAO.findDynRealms(key).stream().
+                    filter(dynRealm -> effectiveRealms.contains(dynRealm)).findFirst().isPresent();
         }
         if (!authorized) {
             throw new DelegatedAdministrationException(realm, AnyTypeKind.GROUP.name(), key);
         }
 
-        return IterableUtils.matchesAny(effectiveRealms, new RealmUtils.DynRealmsPredicate());
+        return effectiveRealms.stream().anyMatch(new RealmUtils.DynRealmsPredicate());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.GROUP_READ + "')")
@@ -137,16 +129,8 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
     @PreAuthorize("isAuthenticated() and not(hasRole('" + StandardEntitlement.ANONYMOUS + "'))")
     @Transactional(readOnly = true)
     public List<GroupTO> own() {
-        return CollectionUtils.collect(
-                userDAO.findAllGroups(userDAO.findByUsername(AuthContextUtils.getUsername())),
-                new Transformer<Group, GroupTO>() {
-
-            @Transactional(readOnly = true)
-            @Override
-            public GroupTO transform(final Group input) {
-                return binder.getGroupTO(input, true);
-            }
-        }, new ArrayList<GroupTO>());
+        return userDAO.findAllGroups(userDAO.findByUsername(AuthContextUtils.getUsername())).stream().
+                map(group -> binder.getGroupTO(group, true)).collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.GROUP_SEARCH + "')")
@@ -166,14 +150,8 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
                 RealmUtils.getEffective(SyncopeConstants.FULL_ADMIN_REALMS, realm),
                 searchCond == null ? groupDAO.getAllMatchingCond() : searchCond,
                 page, size, orderBy, AnyTypeKind.GROUP);
-        List<GroupTO> result = CollectionUtils.collect(matching, new Transformer<Group, GroupTO>() {
-
-            @Transactional(readOnly = true)
-            @Override
-            public GroupTO transform(final Group input) {
-                return binder.getGroupTO(input, details);
-            }
-        }, new ArrayList<GroupTO>());
+        List<GroupTO> result = matching.stream().
+                map(group -> binder.getGroupTO(group, details)).collect(Collectors.toList());
 
         return Pair.of(count, result);
     }
@@ -238,14 +216,8 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
         List<Group> ownedGroups = groupDAO.findOwnedByGroup(before.getLeft().getKey());
         if (!ownedGroups.isEmpty()) {
             SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.GroupOwnership);
-            sce.getElements().addAll(CollectionUtils.collect(ownedGroups, new Transformer<Group, String>() {
-
-                @Transactional(readOnly = true)
-                @Override
-                public String transform(final Group group) {
-                    return group.getKey() + " " + group.getName();
-                }
-            }, new ArrayList<String>()));
+            sce.getElements().addAll(ownedGroups.stream().
+                    map(g -> g.getKey() + " " + g.getName()).collect(Collectors.toList()));
             throw sce;
         }
 
@@ -269,13 +241,9 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
 
         GroupPatch patch = new GroupPatch();
         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.getGroupTO(provisioningManager.unlink(patch));
     }
@@ -292,13 +260,9 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
 
         GroupPatch patch = new GroupPatch();
         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.getGroupTO(provisioningManager.link(patch));
     }
@@ -317,13 +281,9 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
 
         GroupPatch patch = new GroupPatch();
         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);
     }
@@ -346,13 +306,9 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
 
         GroupPatch patch = new GroupPatch();
         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 update(patch, nullPriorityAsync);
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java
index 5429c24..9c8a8b3 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java
@@ -24,13 +24,7 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.IteratorUtils;
-import org.apache.commons.collections4.Predicate;
-import org.apache.commons.collections4.PredicateUtils;
-import org.apache.commons.collections4.Transformer;
-import org.apache.commons.collections4.TransformerUtils;
+import java.util.stream.Collectors;
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.core.LoggerContext;
@@ -60,7 +54,6 @@ import org.apache.syncope.core.persistence.api.dao.LoggerDAO;
 import org.apache.syncope.core.persistence.api.dao.NotFoundException;
 import org.apache.syncope.core.persistence.api.dao.TaskDAO;
 import org.apache.syncope.core.persistence.api.entity.EntityFactory;
-import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
 import org.apache.syncope.core.persistence.api.entity.Logger;
 import org.apache.syncope.core.persistence.api.entity.task.SchedTask;
 import org.apache.syncope.core.spring.BeanUtils;
@@ -99,31 +92,21 @@ public class LoggerLogic extends AbstractTransactionalLogic<LoggerTO> {
     private EntityFactory entityFactory;
 
     private List<LoggerTO> list(final LoggerType type) {
-        return CollectionUtils.collect(loggerDAO.findAll(type), new Transformer<Logger, LoggerTO>() {
-
-            @Override
-            public LoggerTO transform(final Logger logger) {
-                LoggerTO loggerTO = new LoggerTO();
-                BeanUtils.copyProperties(logger, loggerTO);
-                return loggerTO;
-            }
-        }, new ArrayList<LoggerTO>());
+        return loggerDAO.findAll(type).stream().map(logger -> {
+            LoggerTO loggerTO = new LoggerTO();
+            BeanUtils.copyProperties(logger, loggerTO);
+            return loggerTO;
+        }).collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.LOG_LIST + "') and authentication.details.domain == "
             + "T(org.apache.syncope.common.lib.SyncopeConstants).MASTER_DOMAIN")
     public List<LogAppender> memoryAppenders() {
-        return CollectionUtils.collect(
-                loggerLoader.getMemoryAppenders().keySet(),
-                new Transformer<String, LogAppender>() {
-
-            @Override
-            public LogAppender transform(final String input) {
-                LogAppender logAppender = new LogAppender();
-                logAppender.setName(input);
-                return logAppender;
-            }
-        }, new ArrayList<LogAppender>());
+        return loggerLoader.getMemoryAppenders().keySet().stream().map(appender -> {
+            LogAppender logAppender = new LogAppender();
+            logAppender.setName(appender);
+            return logAppender;
+        }).collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.LOG_READ + "') and authentication.details.domain == "
@@ -134,10 +117,7 @@ public class LoggerLogic extends AbstractTransactionalLogic<LoggerTO> {
             throw new NotFoundException("Appender " + memoryAppender);
         }
 
-        return CollectionUtils.collect(
-                appender.getStatements(),
-                TransformerUtils.<LogStatementTO>nopTransformer(),
-                new ArrayList<LogStatementTO>());
+        return appender.getStatements().stream().collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.LOG_LIST + "') and authentication.details.domain == "
@@ -150,22 +130,18 @@ public class LoggerLogic extends AbstractTransactionalLogic<LoggerTO> {
     @PreAuthorize("hasRole('" + StandardEntitlement.AUDIT_LIST + "')")
     @Transactional(readOnly = true)
     public List<AuditLoggerName> listAudits() {
-        return CollectionUtils.collect(
-                IteratorUtils.filteredIterator(list(LoggerType.AUDIT).iterator(), PredicateUtils.notNullPredicate()),
-                new Transformer<LoggerTO, AuditLoggerName>() {
-
-            @Override
-            public AuditLoggerName transform(final LoggerTO logger) {
-                AuditLoggerName result = null;
-                try {
-                    result = AuditLoggerName.fromLoggerName(logger.getKey());
-                } catch (Exception e) {
-                    LOG.warn("Unexpected audit logger name: {}", logger.getKey(), e);
-                }
+        return list(LoggerType.AUDIT).stream().
+                filter(logger -> logger != null).
+                map(logger -> {
+                    AuditLoggerName result = null;
+                    try {
+                        result = AuditLoggerName.fromLoggerName(logger.getKey());
+                    } catch (Exception e) {
+                        LOG.warn("Unexpected audit logger name: {}", logger.getKey(), e);
+                    }
 
-                return result;
-            }
-        }, new ArrayList<AuditLoggerName>());
+                    return result;
+                }).collect(Collectors.toList());
     }
 
     private void throwInvalidLogger(final LoggerType type) {
@@ -235,14 +211,7 @@ public class LoggerLogic extends AbstractTransactionalLogic<LoggerTO> {
                 logConf = new LoggerConfig(auditLoggerName, null, false);
             }
             for (AuditAppender auditAppender : loggerLoader.auditAppenders(AuthContextUtils.getDomain())) {
-                if (IterableUtils.matchesAny(auditAppender.getEvents(), new Predicate<AuditLoggerName>() {
-
-                    @Override
-                    public boolean evaluate(final AuditLoggerName auditLoggerName) {
-                        return name.equalsIgnoreCase(auditLoggerName.toLoggerName());
-                    }
-                })) {
-
+                if (auditAppender.getEvents().stream().anyMatch(event -> name.equalsIgnoreCase(event.toLoggerName()))) {
                     loggerLoader.addAppenderToContext(ctx, auditAppender, logConf);
                 }
             }
@@ -380,7 +349,7 @@ public class LoggerLogic extends AbstractTransactionalLogic<LoggerTO> {
             events.add(new EventCategoryTO(EventCategoryType.PUSH));
 
             for (AnyTypeKind anyTypeKind : AnyTypeKind.values()) {
-                for (ExternalResource resource : resourceDAO.findAll()) {
+                resourceDAO.findAll().forEach(resource -> {
                     EventCategoryTO propEventCategoryTO = new EventCategoryTO(EventCategoryType.PROPAGATION);
                     EventCategoryTO syncEventCategoryTO = new EventCategoryTO(EventCategoryType.PULL);
                     EventCategoryTO pushEventCategoryTO = new EventCategoryTO(EventCategoryType.PUSH);
@@ -414,7 +383,7 @@ public class LoggerLogic extends AbstractTransactionalLogic<LoggerTO> {
                     events.add(propEventCategoryTO);
                     events.add(syncEventCategoryTO);
                     events.add(pushEventCategoryTO);
-                }
+                });
             }
 
             for (SchedTask task : taskDAO.<SchedTask>findAll(TaskType.SCHEDULED)) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/MailTemplateLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/MailTemplateLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/MailTemplateLogic.java
index 7839e12..ff742c5 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/MailTemplateLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/MailTemplateLogic.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.commons.lang3.StringUtils;
 import org.apache.syncope.common.lib.SyncopeClientException;
@@ -34,6 +32,7 @@ import org.apache.syncope.core.persistence.api.dao.NotFoundException;
 import org.apache.syncope.core.persistence.api.dao.DuplicateException;
 import org.apache.syncope.core.persistence.api.dao.MailTemplateDAO;
 import org.apache.syncope.core.persistence.api.dao.NotificationDAO;
+import org.apache.syncope.core.persistence.api.entity.Entity;
 import org.apache.syncope.core.persistence.api.entity.EntityFactory;
 import org.apache.syncope.core.persistence.api.entity.MailTemplate;
 import org.apache.syncope.core.persistence.api.entity.Notification;
@@ -73,13 +72,8 @@ public class MailTemplateLogic extends AbstractTransactionalLogic<MailTemplateTO
 
     @PreAuthorize("hasRole('" + StandardEntitlement.MAIL_TEMPLATE_LIST + "')")
     public List<MailTemplateTO> list() {
-        return CollectionUtils.collect(mailTemplateDAO.findAll(), new Transformer<MailTemplate, MailTemplateTO>() {
-
-            @Override
-            public MailTemplateTO transform(final MailTemplate input) {
-                return getMailTemplateTO(input.getKey());
-            }
-        }, new ArrayList<MailTemplateTO>());
+        return mailTemplateDAO.findAll().stream().
+                map(template -> getMailTemplateTO(template.getKey())).collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.MAIL_TEMPLATE_CREATE + "')")
@@ -145,13 +139,7 @@ public class MailTemplateLogic extends AbstractTransactionalLogic<MailTemplateTO
         List<Notification> notifications = notificationDAO.findByTemplate(mailTemplate);
         if (!notifications.isEmpty()) {
             SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InUseByNotifications);
-            sce.getElements().addAll(CollectionUtils.collect(notifications, new Transformer<Notification, String>() {
-
-                @Override
-                public String transform(final Notification notification) {
-                    return String.valueOf(notification.getKey());
-                }
-            }, new ArrayList<String>()));
+            sce.getElements().addAll(notifications.stream().map(Entity::getKey).collect(Collectors.toList()));
             throw sce;
         }
 
@@ -169,7 +157,7 @@ public class MailTemplateLogic extends AbstractTransactionalLogic<MailTemplateTO
         if (ArrayUtils.isNotEmpty(args)) {
             for (int i = 0; key == null && i < args.length; i++) {
                 if (args[i] instanceof String) {
-                    key = ((String) args[i]).toString();
+                    key = ((String) args[i]);
                 } else if (args[i] instanceof MailTemplateTO) {
                     key = ((MailTemplateTO) args[i]).getKey();
                 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/MemoryAppender.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/MemoryAppender.java b/core/logic/src/main/java/org/apache/syncope/core/logic/MemoryAppender.java
index 8183979..d78585b 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/MemoryAppender.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/MemoryAppender.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.logic;
 
 import java.util.Queue;
-import org.apache.commons.collections4.queue.CircularFifoQueue;
 import org.apache.logging.log4j.core.Appender;
 import org.apache.logging.log4j.core.Filter;
 import org.apache.logging.log4j.core.LogEvent;
@@ -30,6 +29,7 @@ import org.apache.logging.log4j.core.config.plugins.PluginElement;
 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.ReusableMessage;
+import org.apache.syncope.common.lib.collections.CircularFifoQueue;
 import org.apache.syncope.common.lib.log.LogStatementTO;
 import org.apache.syncope.common.lib.types.LoggerLevel;
 import org.apache.syncope.core.provisioning.api.utils.ExceptionUtils2;

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/NotificationLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/NotificationLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/NotificationLogic.java
index 3b867b4..b594613 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/NotificationLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/NotificationLogic.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.commons.lang3.tuple.Triple;
 import org.apache.syncope.common.lib.to.JobTO;
@@ -64,13 +62,8 @@ public class NotificationLogic extends AbstractJobLogic<NotificationTO> {
 
     @PreAuthorize("hasRole('" + StandardEntitlement.NOTIFICATION_LIST + "')")
     public List<NotificationTO> list() {
-        return CollectionUtils.collect(notificationDAO.findAll(), new Transformer<Notification, NotificationTO>() {
-
-            @Override
-            public NotificationTO transform(final Notification input) {
-                return binder.getNotificationTO(input);
-            }
-        }, new ArrayList<NotificationTO>());
+        return notificationDAO.findAll().stream().
+                map(notification -> binder.getNotificationTO(notification)).collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.NOTIFICATION_CREATE + "')")

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/PolicyLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/PolicyLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/PolicyLogic.java
index 0cffd0c..4f5e053 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/PolicyLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/PolicyLogic.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.policy.AbstractPolicyTO;
 import org.apache.syncope.common.lib.types.PolicyType;
@@ -78,13 +76,8 @@ public class PolicyLogic extends AbstractTransactionalLogic<AbstractPolicyTO> {
 
     @PreAuthorize("hasRole('" + StandardEntitlement.POLICY_LIST + "')")
     public <T extends AbstractPolicyTO> List<T> list(final PolicyType type) {
-        return CollectionUtils.collect(policyDAO.find(getPolicyClass(type)), new Transformer<Policy, T>() {
-
-            @Override
-            public T transform(final Policy input) {
-                return binder.getPolicyTO(input);
-            }
-        }, new ArrayList<T>());
+        return policyDAO.find(getPolicyClass(type)).stream().
+                <T>map(policy -> binder.getPolicyTO(policy)).collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.POLICY_READ + "')")

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
index e82e495..03cfe0f 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
@@ -19,12 +19,10 @@
 package org.apache.syncope.core.logic;
 
 import java.lang.reflect.Method;
-import java.util.ArrayList;
 import java.util.Collections;
 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.syncope.common.lib.SyncopeClientException;
@@ -81,13 +79,8 @@ public class RealmLogic extends AbstractTransactionalLogic<RealmTO> {
         }
 
         final boolean admin = AuthContextUtils.getAuthorizations().keySet().contains(StandardEntitlement.REALM_LIST);
-        return CollectionUtils.collect(realmDAO.findDescendants(realm), new Transformer<Realm, RealmTO>() {
-
-            @Override
-            public RealmTO transform(final Realm input) {
-                return binder.getRealmTO(input, admin);
-            }
-        }, new ArrayList<RealmTO>());
+        return realmDAO.findDescendants(realm).stream().
+                map(descendant -> binder.getRealmTO(descendant, admin)).collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.REALM_CREATE + "')")
@@ -100,9 +93,9 @@ public class RealmLogic extends AbstractTransactionalLogic<RealmTO> {
         Realm realm = realmDAO.save(binder.create(parentPath, realmTO));
 
         PropagationByResource propByRes = new PropagationByResource();
-        for (String resource : realm.getResourceKeys()) {
+        realm.getResourceKeys().forEach(resource -> {
             propByRes.add(ResourceOperation.CREATE, resource);
-        }
+        });
         List<PropagationTask> tasks = propagationManager.createTasks(realm, propByRes, null);
         PropagationReporter propagationReporter = taskExecutor.execute(tasks, false);
 
@@ -165,9 +158,9 @@ public class RealmLogic extends AbstractTransactionalLogic<RealmTO> {
         }
 
         PropagationByResource propByRes = new PropagationByResource();
-        for (String resource : realm.getResourceKeys()) {
+        realm.getResourceKeys().forEach(resource -> {
             propByRes.add(ResourceOperation.DELETE, resource);
-        }
+        });
         List<PropagationTask> tasks = propagationManager.createTasks(realm, propByRes, null);
         PropagationReporter propagationReporter = taskExecutor.execute(tasks, false);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/RelationshipTypeLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/RelationshipTypeLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/RelationshipTypeLogic.java
index 6d96e8b..30ac9a2 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/RelationshipTypeLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/RelationshipTypeLogic.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.commons.lang3.StringUtils;
 import org.apache.syncope.common.lib.to.RelationshipTypeTO;
@@ -58,14 +56,8 @@ public class RelationshipTypeLogic extends AbstractTransactionalLogic<Relationsh
 
     @PreAuthorize("hasRole('" + StandardEntitlement.RELATIONSHIPTYPE_LIST + "')")
     public List<RelationshipTypeTO> list() {
-        return CollectionUtils.collect(relationshipTypeDAO.findAll(),
-                new Transformer<RelationshipType, RelationshipTypeTO>() {
-
-            @Override
-            public RelationshipTypeTO transform(final RelationshipType input) {
-                return binder.getRelationshipTypeTO(input);
-            }
-        }, new ArrayList<RelationshipTypeTO>());
+        return relationshipTypeDAO.findAll().stream().
+                map(relationshipType -> binder.getRelationshipTypeTO(relationshipType)).collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.RELATIONSHIPTYPE_CREATE + "')")

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
index 5243277..854870f 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
@@ -22,11 +22,11 @@ import java.io.ByteArrayInputStream;
 import java.io.OutputStream;
 import java.lang.reflect.Method;
 import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 import java.util.zip.ZipInputStream;
 import javax.xml.transform.stream.StreamSource;
 import org.apache.cocoon.pipeline.NonCachingPipeline;
@@ -34,8 +34,6 @@ import org.apache.cocoon.pipeline.Pipeline;
 import org.apache.cocoon.sax.SAXPipelineComponent;
 import org.apache.cocoon.sax.component.XMLGenerator;
 import org.apache.cocoon.sax.component.XMLSerializer;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Transformer;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.tuple.Triple;
@@ -137,13 +135,7 @@ public class ReportLogic extends AbstractExecutableLogic<ReportTO> {
 
     @PreAuthorize("hasRole('" + StandardEntitlement.REPORT_LIST + "')")
     public List<ReportTO> list() {
-        return CollectionUtils.collect(reportDAO.findAll(), new Transformer<Report, ReportTO>() {
-
-            @Override
-            public ReportTO transform(final Report input) {
-                return binder.getReportTO(input);
-            }
-        }, new ArrayList<ReportTO>());
+        return reportDAO.findAll().stream().map(report -> binder.getReportTO(report)).collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.REPORT_READ + "')")
@@ -314,26 +306,15 @@ public class ReportLogic extends AbstractExecutableLogic<ReportTO> {
             throw new NotFoundException("Report " + key);
         }
 
-        return CollectionUtils.collect(reportExecDAO.findAll(report, page, size, orderByClauses),
-                new Transformer<ReportExec, ExecTO>() {
-
-            @Override
-            public ExecTO transform(final ReportExec reportExec) {
-                return binder.getExecTO(reportExec);
-            }
-        }, new ArrayList<ExecTO>());
+        return reportExecDAO.findAll(report, page, size, orderByClauses).stream().
+                map(reportExec -> binder.getExecTO(reportExec)).collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.REPORT_LIST + "')")
     @Override
     public List<ExecTO> listRecentExecutions(final int max) {
-        return CollectionUtils.collect(reportExecDAO.findRecent(max), new Transformer<ReportExec, ExecTO>() {
-
-            @Override
-            public ExecTO transform(final ReportExec reportExec) {
-                return binder.getExecTO(reportExec);
-            }
-        }, new ArrayList<ExecTO>());
+        return reportExecDAO.findRecent(max).stream().
+                map(reportExec -> binder.getExecTO(reportExec)).collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.REPORT_DELETE + "')")
@@ -362,7 +343,7 @@ public class ReportLogic extends AbstractExecutableLogic<ReportTO> {
 
         BulkActionResult result = new BulkActionResult();
 
-        for (ReportExec exec : reportExecDAO.findAll(report, startedBefore, startedAfter, endedBefore, endedAfter)) {
+        reportExecDAO.findAll(report, startedBefore, startedAfter, endedBefore, endedAfter).forEach(exec -> {
             try {
                 reportExecDAO.delete(exec);
                 result.getResults().put(String.valueOf(exec.getKey()), BulkActionResult.Status.SUCCESS);
@@ -370,7 +351,7 @@ public class ReportLogic extends AbstractExecutableLogic<ReportTO> {
                 LOG.error("Error deleting execution {} of report {}", 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/ReportTemplateLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ReportTemplateLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ReportTemplateLogic.java
index f44427f..4d150d9 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ReportTemplateLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ReportTemplateLogic.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.commons.lang3.StringUtils;
 import org.apache.syncope.common.lib.SyncopeClientException;
@@ -34,6 +32,7 @@ import org.apache.syncope.core.persistence.api.dao.NotFoundException;
 import org.apache.syncope.core.persistence.api.dao.DuplicateException;
 import org.apache.syncope.core.persistence.api.dao.ReportTemplateDAO;
 import org.apache.syncope.core.persistence.api.dao.ReportDAO;
+import org.apache.syncope.core.persistence.api.entity.Entity;
 import org.apache.syncope.core.persistence.api.entity.EntityFactory;
 import org.apache.syncope.core.persistence.api.entity.ReportTemplate;
 import org.apache.syncope.core.persistence.api.entity.Report;
@@ -73,14 +72,8 @@ public class ReportTemplateLogic extends AbstractTransactionalLogic<ReportTempla
 
     @PreAuthorize("hasRole('" + StandardEntitlement.REPORT_TEMPLATE_LIST + "')")
     public List<ReportTemplateTO> list() {
-        return CollectionUtils.collect(
-                reportTemplateDAO.findAll(), new Transformer<ReportTemplate, ReportTemplateTO>() {
-
-            @Override
-            public ReportTemplateTO transform(final ReportTemplate input) {
-                return getReportTemplateTO(input.getKey());
-            }
-        }, new ArrayList<ReportTemplateTO>());
+        return reportTemplateDAO.findAll().stream().
+                map(template -> getReportTemplateTO(template.getKey())).collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.REPORT_TEMPLATE_CREATE + "')")
@@ -158,13 +151,7 @@ public class ReportTemplateLogic extends AbstractTransactionalLogic<ReportTempla
         List<Report> reports = reportDAO.findByTemplate(reportTemplate);
         if (!reports.isEmpty()) {
             SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InUseByNotifications);
-            sce.getElements().addAll(CollectionUtils.collect(reports, new Transformer<Report, String>() {
-
-                @Override
-                public String transform(final Report report) {
-                    return String.valueOf(report.getKey());
-                }
-            }, new ArrayList<String>()));
+            sce.getElements().addAll(reports.stream().map(Entity::getKey).collect(Collectors.toList()));
             throw sce;
         }
 
@@ -182,7 +169,7 @@ public class ReportTemplateLogic extends AbstractTransactionalLogic<ReportTempla
         if (ArrayUtils.isNotEmpty(args)) {
             for (int i = 0; key == null && i < args.length; i++) {
                 if (args[i] instanceof String) {
-                    key = ((String) args[i]).toString();
+                    key = ((String) args[i]);
                 } else if (args[i] instanceof ReportTemplateTO) {
                     key = ((ReportTemplateTO) args[i]).getKey();
                 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceHistoryLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceHistoryLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceHistoryLogic.java
index fc95f81..d027e97 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceHistoryLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceHistoryLogic.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.syncope.common.lib.to.ResourceHistoryConfTO;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
@@ -64,14 +62,8 @@ public class ResourceHistoryLogic extends AbstractTransactionalLogic<ResourceHis
             throw new NotFoundException("Resource '" + key + "'");
         }
 
-        return CollectionUtils.collect(resourceHistoryConfDAO.findByEntity(resource),
-                new Transformer<ExternalResourceHistoryConf, ResourceHistoryConfTO>() {
-
-            @Override
-            public ResourceHistoryConfTO transform(final ExternalResourceHistoryConf input) {
-                return getResourceHistoryConfTO(input);
-            }
-        }, new ArrayList<ResourceHistoryConfTO>());
+        return resourceHistoryConfDAO.findByEntity(resource).stream().
+                map(historyConf -> getResourceHistoryConfTO(historyConf)).collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.RESOURCE_HISTORY_RESTORE + "')")

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
index 3f2ff75..eccbd6d 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
@@ -23,18 +23,16 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.IteratorUtils;
-import org.apache.commons.collections4.Predicate;
-import org.apache.commons.collections4.Transformer;
+import java.util.stream.Collectors;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.ImmutableTriple;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.commons.lang3.tuple.Triple;
+import org.apache.syncope.common.lib.collections.IteratorChain;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.to.ConnObjectTO;
@@ -61,7 +59,6 @@ import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
 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.ConnInstance;
-import org.apache.syncope.core.persistence.api.entity.VirSchema;
 import org.apache.syncope.core.persistence.api.entity.resource.Provision;
 import org.apache.syncope.core.provisioning.api.MappingManager;
 import org.apache.syncope.core.provisioning.api.utils.RealmUtils;
@@ -120,13 +117,8 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
     private ConnectorFactory connFactory;
 
     protected void securityChecks(final Set<String> effectiveRealms, final String realm, final String key) {
-        boolean authorized = IterableUtils.matchesAny(effectiveRealms, new Predicate<String>() {
-
-            @Override
-            public boolean evaluate(final String ownedRealm) {
-                return realm.startsWith(ownedRealm);
-            }
-        });
+        effectiveRealms.stream().anyMatch(ownedRealm -> realm.startsWith(ownedRealm));
+        boolean authorized = effectiveRealms.stream().anyMatch(ownedRealm -> realm.startsWith(ownedRealm));
         if (!authorized) {
             throw new DelegatedAdministrationException(realm, ExternalResource.class.getSimpleName(), key);
         }
@@ -201,12 +193,12 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
             if (anyType == null) {
                 throw new NotFoundException("AnyType '" + anyTypeKey + "'");
             }
-            Provision provision = resource.getProvision(anyType);
-            if (provision == null) {
+            Optional<? extends Provision> provision = resource.getProvision(anyType);
+            if (!provision.isPresent()) {
                 throw new NotFoundException("Provision for AnyType '" + anyTypeKey + "' in Resource '" + key + "'");
             }
 
-            provision.setSyncToken(connector.getLatestSyncToken(provision.getObjectClass()));
+            provision.get().setSyncToken(connector.getLatestSyncToken(provision.get().getObjectClass()));
         }
 
         Set<String> effectiveRealms = RealmUtils.getEffective(
@@ -234,12 +226,12 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
             if (anyType == null) {
                 throw new NotFoundException("AnyType '" + anyTypeKey + "'");
             }
-            Provision provision = resource.getProvision(anyType);
-            if (provision == null) {
+            Optional<? extends Provision> provision = resource.getProvision(anyType);
+            if (!provision.isPresent()) {
                 throw new NotFoundException("Provision for AnyType '" + anyTypeKey + "' in Resource '" + key + "'");
             }
 
-            provision.setSyncToken(null);
+            provision.get().setSyncToken(null);
         }
 
         Set<String> effectiveRealms = RealmUtils.getEffective(
@@ -283,13 +275,8 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
     @PreAuthorize("hasRole('" + StandardEntitlement.RESOURCE_LIST + "')")
     @Transactional(readOnly = true)
     public List<ResourceTO> list() {
-        return CollectionUtils.collect(resourceDAO.findAll(), new Transformer<ExternalResource, ResourceTO>() {
-
-            @Override
-            public ResourceTO transform(final ExternalResource input) {
-                return binder.getResourceTO(input);
-            }
-        }, new ArrayList<ResourceTO>());
+        return resourceDAO.findAll().stream().
+                map(resource -> binder.getResourceTO(resource)).collect(Collectors.toList());
     }
 
     private Triple<ExternalResource, AnyType, Provision> connObjectInit(
@@ -303,12 +290,12 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
         if (anyType == null) {
             throw new NotFoundException("AnyType '" + anyTypeKey + "'");
         }
-        Provision provision = resource.getProvision(anyType);
-        if (provision == null) {
+        Optional<? extends Provision> provision = resource.getProvision(anyType);
+        if (!provision.isPresent()) {
             throw new NotFoundException("Provision on resource '" + resourceKey + "' for type '" + anyTypeKey + "'");
         }
 
-        return ImmutableTriple.of(resource, anyType, provision);
+        return ImmutableTriple.of(resource, anyType, provision.get());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.RESOURCE_GET_CONNOBJECT + "')")
@@ -327,19 +314,19 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
         }
 
         // 2. build connObjectKeyItem
-        MappingItem connObjectKeyItem = MappingUtils.getConnObjectKeyItem(init.getRight());
-        if (connObjectKeyItem == null) {
+        Optional<MappingItem> connObjectKeyItem = MappingUtils.getConnObjectKeyItem(init.getRight());
+        if (!connObjectKeyItem.isPresent()) {
             throw new NotFoundException(
                     "ConnObjectKey mapping for " + init.getMiddle() + " " + anyKey + " on resource '" + key + "'");
         }
-        String connObjectKeyValue = mappingManager.getConnObjectKeyValue(any, init.getRight());
+        Optional<String> connObjectKeyValue = mappingManager.getConnObjectKeyValue(any, init.getRight());
 
         // 3. determine attributes to query
         Set<MappingItem> linkinMappingItems = new HashSet<>();
-        for (VirSchema virSchema : virSchemaDAO.findByProvision(init.getRight())) {
+        virSchemaDAO.findByProvision(init.getRight()).forEach(virSchema -> {
             linkinMappingItems.add(virSchema.asLinkingMappingItem());
-        }
-        Iterator<MappingItem> mapItems = IteratorUtils.chainedIterator(
+        });
+        Iterator<MappingItem> mapItems = new IteratorChain<>(
                 init.getRight().getMapping().getItems().iterator(),
                 linkinMappingItems.iterator());
 
@@ -347,11 +334,11 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
         Connector connector = connFactory.getConnector(init.getLeft());
         ConnectorObject connectorObject = connector.getObject(
                 init.getRight().getObjectClass(),
-                AttributeBuilder.build(connObjectKeyItem.getExtAttrName(), connObjectKeyValue),
+                AttributeBuilder.build(connObjectKeyItem.get().getExtAttrName(), connObjectKeyValue.get()),
                 MappingUtils.buildOperationOptions(mapItems));
         if (connectorObject == null) {
             throw new NotFoundException(
-                    "Object " + connObjectKeyValue + " with class " + init.getRight().getObjectClass()
+                    "Object " + connObjectKeyValue.get() + " with class " + init.getRight().getObjectClass()
                     + " not found on resource " + key);
         }
 
@@ -394,10 +381,10 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
             init.getRight().getMapping().getItems();
 
             Set<MappingItem> linkinMappingItems = new HashSet<>();
-            for (VirSchema virSchema : virSchemaDAO.findByProvision(init.getRight())) {
+            virSchemaDAO.findByProvision(init.getRight()).forEach(virSchema -> {
                 linkinMappingItems.add(virSchema.asLinkingMappingItem());
-            }
-            Iterator<MappingItem> mapItems = IteratorUtils.chainedIterator(
+            });
+            Iterator<MappingItem> mapItems = new IteratorChain<>(
                     init.getRight().getMapping().getItems().iterator(),
                     linkinMappingItems.iterator());
             options = MappingUtils.buildOperationOptions(mapItems);

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/RoleLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/RoleLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/RoleLogic.java
index c5b3b9a..e8b9f8a 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/RoleLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/RoleLogic.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.commons.lang3.StringUtils;
 import org.apache.syncope.common.lib.to.RoleTO;
@@ -61,13 +59,7 @@ public class RoleLogic extends AbstractTransactionalLogic<RoleTO> {
     @PreAuthorize("hasRole('" + StandardEntitlement.ROLE_LIST + "')")
     @Transactional(readOnly = true)
     public List<RoleTO> list() {
-        return CollectionUtils.collect(roleDAO.findAll(), new Transformer<Role, RoleTO>() {
-
-            @Override
-            public RoleTO transform(final Role input) {
-                return binder.getRoleTO(input);
-            }
-        }, new ArrayList<RoleTO>());
+        return roleDAO.findAll().stream().map(role -> binder.getRoleTO(role)).collect(Collectors.toList());
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.ROLE_CREATE + "')")

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java
index 97da0f6..dba439b 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java
@@ -21,8 +21,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.function.Function;
+import java.util.stream.Collectors;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.common.lib.SyncopeClientException;
@@ -145,7 +145,7 @@ public class SchemaLogic extends AbstractTransactionalLogic<AbstractSchemaTO> {
     }
 
     @PreAuthorize("isAuthenticated()")
-    @SuppressWarnings("unchecked")
+    @SuppressWarnings({ "unchecked", "Convert2Lambda" })
     public <T extends AbstractSchemaTO> List<T> list(
             final SchemaType schemaType, final List<String> anyTypeClasses) {
 
@@ -153,53 +153,50 @@ public class SchemaLogic extends AbstractTransactionalLogic<AbstractSchemaTO> {
         if (anyTypeClasses != null) {
             anyTypeClasses.remove(AnyTypeKind.USER.name());
             anyTypeClasses.remove(AnyTypeKind.GROUP.name());
-            for (String anyTypeClass : anyTypeClasses) {
+            anyTypeClasses.forEach(anyTypeClass -> {
                 AnyTypeClass clazz = anyTypeClassDAO.find(anyTypeClass);
                 if (clazz == null) {
                     LOG.warn("Ignoring invalid {}: {}", AnyTypeClass.class.getSimpleName(), anyTypeClass);
                 } else {
                     classes.add(clazz);
                 }
-            }
+            });
         }
 
         List<T> result;
         switch (schemaType) {
             case VIRTUAL:
-                result = CollectionUtils.collect(
-                        classes.isEmpty() ? virSchemaDAO.findAll() : virSchemaDAO.findByAnyTypeClasses(classes),
-                        new Transformer<VirSchema, T>() {
-
-                    @Override
-                    public T transform(final VirSchema input) {
-                        return (T) binder.getVirSchemaTO(input);
-                    }
-                }, new ArrayList<T>());
+                result = (classes.isEmpty() ? virSchemaDAO.findAll() : virSchemaDAO.findByAnyTypeClasses(classes)).
+                        stream().map(new Function<VirSchema, T>() {
+
+                            @Override
+                            public T apply(final VirSchema schema) {
+                                return (T) binder.getVirSchemaTO(schema);
+                            }
+                        }).collect(Collectors.toList());
                 break;
 
             case DERIVED:
-                result = CollectionUtils.collect(
-                        classes.isEmpty() ? derSchemaDAO.findAll() : derSchemaDAO.findByAnyTypeClasses(classes),
-                        new Transformer<DerSchema, T>() {
-
-                    @Override
-                    public T transform(final DerSchema input) {
-                        return (T) binder.getDerSchemaTO(input);
-                    }
-                }, new ArrayList<T>());
+                result = (classes.isEmpty() ? derSchemaDAO.findAll() : derSchemaDAO.findByAnyTypeClasses(classes)).
+                        stream().map(new Function<DerSchema, T>() {
+
+                            @Override
+                            public T apply(final DerSchema schema) {
+                                return (T) binder.getDerSchemaTO(schema);
+                            }
+                        }).collect(Collectors.toList());
                 break;
 
             case PLAIN:
             default:
-                result = CollectionUtils.collect(
-                        classes.isEmpty() ? plainSchemaDAO.findAll() : plainSchemaDAO.findByAnyTypeClasses(classes),
-                        new Transformer<PlainSchema, T>() {
-
-                    @Override
-                    public T transform(final PlainSchema input) {
-                        return (T) binder.getPlainSchemaTO(input);
-                    }
-                }, new ArrayList<T>());
+                result = (classes.isEmpty() ? plainSchemaDAO.findAll() : plainSchemaDAO.findByAnyTypeClasses(classes)).
+                        stream().map(new Function<PlainSchema, T>() {
+
+                            @Override
+                            public T apply(final PlainSchema schema) {
+                                return (T) binder.getPlainSchemaTO(schema);
+                            }
+                        }).collect(Collectors.toList());
         }
 
         return result;