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

[08/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/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAPasswordPolicy.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAPasswordPolicy.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAPasswordPolicy.java
index ba70562..1ea375d 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAPasswordPolicy.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAPasswordPolicy.java
@@ -20,6 +20,7 @@ package org.apache.syncope.core.persistence.jpa.entity.policy;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 import javax.persistence.Basic;
 import javax.persistence.CascadeType;
 import javax.persistence.Entity;
@@ -28,8 +29,6 @@ import javax.persistence.OneToMany;
 import javax.persistence.Table;
 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.syncope.common.lib.policy.PasswordRuleConf;
 import org.apache.syncope.core.persistence.api.entity.policy.PasswordPolicy;
 
@@ -91,12 +90,6 @@ public class JPAPasswordPolicy extends AbstractPolicy implements PasswordPolicy
 
     @Override
     public List<PasswordRuleConf> getRuleConfs() {
-        return CollectionUtils.collect(ruleConfs, new Transformer<JPAPasswordRuleConfInstance, PasswordRuleConf>() {
-
-            @Override
-            public PasswordRuleConf transform(final JPAPasswordRuleConfInstance input) {
-                return input.getInstance();
-            }
-        }, new ArrayList<PasswordRuleConf>());
+        return ruleConfs.stream().map(input -> input.getInstance()).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/entity/resource/JPAExternalResource.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java
index 30462ce..511b586 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java
@@ -19,8 +19,10 @@
 package org.apache.syncope.core.persistence.jpa.entity.resource;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 import javax.persistence.Basic;
 import javax.persistence.CascadeType;
@@ -40,9 +42,6 @@ import javax.persistence.Table;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import javax.validation.constraints.NotNull;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.common.lib.types.ConnConfProperty;
 import org.apache.syncope.common.lib.types.ConnectorCapability;
@@ -208,25 +207,13 @@ public class JPAExternalResource extends AbstractProvidedKeyEntity implements Ex
     }
 
     @Override
-    public Provision getProvision(final ObjectClass objectClass) {
-        return IterableUtils.find(provisions, new Predicate<Provision>() {
-
-            @Override
-            public boolean evaluate(final Provision provision) {
-                return provision.getObjectClass().equals(objectClass);
-            }
-        });
+    public Optional<? extends Provision> getProvision(final ObjectClass objectClass) {
+        return provisions.stream().filter(provision -> provision.getObjectClass().equals(objectClass)).findFirst();
     }
 
     @Override
-    public Provision getProvision(final AnyType anyType) {
-        return IterableUtils.find(provisions, new Predicate<Provision>() {
-
-            @Override
-            public boolean evaluate(final Provision provision) {
-                return provision.getAnyType().equals(anyType);
-            }
-        });
+    public Optional<? extends Provision> getProvision(final AnyType anyType) {
+        return provisions.stream().filter(provision -> provision.getAnyType().equals(anyType)).findFirst();
     }
 
     @Override
@@ -343,7 +330,7 @@ public class JPAExternalResource extends AbstractProvidedKeyEntity implements Ex
     public Set<ConnConfProperty> getConfOverride() {
         Set<ConnConfProperty> confOverride = new HashSet<>();
         if (!StringUtils.isBlank(jsonConf)) {
-            CollectionUtils.addAll(confOverride, POJOHelper.deserialize(jsonConf, ConnConfProperty[].class));
+            confOverride.addAll(Arrays.asList(POJOHelper.deserialize(jsonConf, ConnConfProperty[].class)));
         }
 
         return confOverride;

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAMapping.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAMapping.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAMapping.java
index bac3955..d0d6ede 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAMapping.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAMapping.java
@@ -20,6 +20,7 @@ package org.apache.syncope.core.persistence.jpa.entity.resource;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 import javax.persistence.Cacheable;
 import javax.persistence.CascadeType;
 import javax.persistence.Entity;
@@ -27,8 +28,6 @@ import javax.persistence.FetchType;
 import javax.persistence.OneToMany;
 import javax.persistence.OneToOne;
 import javax.persistence.Table;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
 import org.apache.syncope.core.persistence.api.entity.resource.Mapping;
 import org.apache.syncope.core.persistence.api.entity.resource.MappingItem;
 import org.apache.syncope.core.persistence.api.entity.resource.Provision;
@@ -77,14 +76,8 @@ public class JPAMapping extends AbstractGeneratedKeyEntity implements Mapping {
     }
 
     @Override
-    public MappingItem getConnObjectKeyItem() {
-        return IterableUtils.find(getItems(), new Predicate<MappingItem>() {
-
-            @Override
-            public boolean evaluate(final MappingItem item) {
-                return item.isConnObjectKey();
-            }
-        });
+    public Optional<? extends MappingItem> getConnObjectKeyItem() {
+        return getItems().stream().filter(MappingItem::isConnObjectKey).findFirst();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAOrgUnit.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAOrgUnit.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAOrgUnit.java
index ab4398d..6a76358 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAOrgUnit.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAOrgUnit.java
@@ -20,6 +20,7 @@ package org.apache.syncope.core.persistence.jpa.entity.resource;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 import javax.persistence.Cacheable;
 import javax.persistence.CascadeType;
 import javax.persistence.Entity;
@@ -29,8 +30,6 @@ import javax.persistence.OneToMany;
 import javax.persistence.OneToOne;
 import javax.persistence.Table;
 import javax.validation.constraints.NotNull;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
 import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
 import org.apache.syncope.core.persistence.api.entity.resource.OrgUnitItem;
 import org.apache.syncope.core.persistence.api.entity.resource.OrgUnit;
@@ -125,14 +124,8 @@ public class JPAOrgUnit extends AbstractGeneratedKeyEntity implements OrgUnit {
     }
 
     @Override
-    public OrgUnitItem getConnObjectKeyItem() {
-        return IterableUtils.find(getItems(), new Predicate<OrgUnitItem>() {
-
-            @Override
-            public boolean evaluate(final OrgUnitItem item) {
-                return item.isConnObjectKey();
-            }
-        });
+    public Optional<? extends OrgUnitItem> getConnObjectKeyItem() {
+        return getItems().stream().filter(OrgUnitItem::isConnObjectKey).findFirst();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPropagationTask.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPropagationTask.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPropagationTask.java
index 7b415ff..ce029d8 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPropagationTask.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPropagationTask.java
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.core.persistence.jpa.entity.task;
 
+import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
 import javax.persistence.DiscriminatorValue;
@@ -26,7 +27,6 @@ import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
 import javax.persistence.Lob;
 import javax.persistence.ManyToOne;
-import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.common.lib.types.ResourceOperation;
@@ -113,7 +113,7 @@ public class JPAPropagationTask extends AbstractTask implements PropagationTask
     public Set<Attribute> getAttributes() {
         Set<Attribute> result = new HashSet<>();
         if (StringUtils.isNotBlank(this.attributes)) {
-            CollectionUtils.addAll(result, POJOHelper.deserialize(this.attributes, Attribute[].class));
+            result.addAll(Arrays.asList(POJOHelper.deserialize(this.attributes, Attribute[].class)));
         }
 
         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/entity/task/JPAPullTask.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPullTask.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPullTask.java
index 7dca06c..54f70cf 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPullTask.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPullTask.java
@@ -21,6 +21,7 @@ package org.apache.syncope.core.persistence.jpa.entity.task;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 import javax.persistence.CascadeType;
 import javax.persistence.CollectionTable;
@@ -35,12 +36,9 @@ import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
 import javax.persistence.OneToMany;
 import javax.validation.constraints.NotNull;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
 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;
-import org.apache.syncope.core.persistence.api.entity.AnyTemplate;
 import org.apache.syncope.core.persistence.jpa.entity.JPARealm;
 import org.apache.syncope.core.persistence.api.entity.task.PullTask;
 import org.apache.syncope.core.persistence.api.entity.task.AnyTemplatePullTask;
@@ -113,14 +111,10 @@ public class JPAPullTask extends AbstractProvisioningTask implements PullTask {
     }
 
     @Override
-    public AnyTemplatePullTask getTemplate(final AnyType anyType) {
-        return IterableUtils.find(templates, new Predicate<AnyTemplate>() {
-
-            @Override
-            public boolean evaluate(final AnyTemplate template) {
-                return anyType != null && anyType.equals(template.getAnyType());
-            }
-        });
+    public Optional<? extends AnyTemplatePullTask> getTemplate(final AnyType anyType) {
+        return templates.stream().
+                filter(template -> anyType != null && anyType.equals(template.getAnyType())).
+                findFirst();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java
index 1ef12a4..efa84b7 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java
@@ -21,6 +21,7 @@ package org.apache.syncope.core.persistence.jpa.entity.task;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 import javax.persistence.CascadeType;
 import javax.persistence.CollectionTable;
@@ -32,8 +33,6 @@ import javax.persistence.FetchType;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
 import javax.persistence.OneToMany;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
 import org.apache.syncope.core.persistence.api.entity.AnyType;
 import org.apache.syncope.core.persistence.api.entity.Realm;
 import org.apache.syncope.core.persistence.api.entity.task.PushTask;
@@ -82,14 +81,8 @@ public class JPAPushTask extends AbstractProvisioningTask implements PushTask {
     }
 
     @Override
-    public PushTaskAnyFilter getFilter(final AnyType anyType) {
-        return IterableUtils.find(filters, new Predicate<PushTaskAnyFilter>() {
-
-            @Override
-            public boolean evaluate(final PushTaskAnyFilter filter) {
-                return anyType != null && anyType.equals(filter.getAnyType());
-            }
-        });
+    public Optional<? extends PushTaskAnyFilter> getFilter(final AnyType anyType) {
+        return filters.stream().filter(filter -> anyType != null && anyType.equals(filter.getAnyType())).findFirst();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java
index 0dddb77..dcf205e 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java
@@ -374,7 +374,7 @@ public class JPAUser
 
     @Override
     public Integer getFailedLogins() {
-        return failedLogins == null ? Integer.valueOf(0) : failedLogins;
+        return failedLogins == null ? 0 : failedLogins;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/spring/DomainTransactionInterceptor.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/spring/DomainTransactionInterceptor.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/spring/DomainTransactionInterceptor.java
index 691f5e4..7d8883a 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/spring/DomainTransactionInterceptor.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/spring/DomainTransactionInterceptor.java
@@ -43,18 +43,14 @@ public class DomainTransactionInterceptor extends TransactionInterceptor {
     public TransactionAttributeSource getTransactionAttributeSource() {
         final TransactionAttributeSource origTxAttrSource = super.getTransactionAttributeSource();
 
-        return new TransactionAttributeSource() {
+        return (final Method method, final Class<?> targetClass) -> {
+            TransactionAttribute txAttr = origTxAttrSource.getTransactionAttribute(method, targetClass);
 
-            @Override
-            public TransactionAttribute getTransactionAttribute(final Method method, final Class<?> targetClass) {
-                TransactionAttribute txAttr = origTxAttrSource.getTransactionAttribute(method, targetClass);
-
-                if (txAttr instanceof DefaultTransactionAttribute) {
-                    ((DefaultTransactionAttribute) txAttr).setQualifier(AuthContextUtils.getDomain());
-                }
-
-                return txAttr;
+            if (txAttr instanceof DefaultTransactionAttribute) {
+                ((DefaultTransactionAttribute) txAttr).setQualifier(AuthContextUtils.getDomain());
             }
+
+            return txAttr;
         };
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ExternalResourceValidator.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ExternalResourceValidator.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ExternalResourceValidator.java
index 719a240..5bedb07 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ExternalResourceValidator.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ExternalResourceValidator.java
@@ -22,8 +22,6 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import javax.validation.ConstraintValidatorContext;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
 import org.apache.syncope.common.lib.types.EntityViolationType;
 import org.apache.syncope.core.persistence.api.entity.AnyType;
 import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
@@ -31,7 +29,6 @@ import org.apache.syncope.core.persistence.api.entity.resource.Item;
 import org.apache.syncope.core.persistence.api.entity.resource.Mapping;
 import org.apache.syncope.core.persistence.api.entity.resource.MappingItem;
 import org.apache.syncope.core.persistence.api.entity.resource.OrgUnit;
-import org.apache.syncope.core.persistence.api.entity.resource.Provision;
 import org.apache.syncope.core.provisioning.api.propagation.PropagationActions;
 import org.identityconnectors.framework.common.objects.ObjectClass;
 import org.apache.syncope.core.provisioning.api.data.ItemTransformer;
@@ -39,13 +36,7 @@ import org.apache.syncope.core.provisioning.api.data.ItemTransformer;
 public class ExternalResourceValidator extends AbstractValidator<ExternalResourceCheck, ExternalResource> {
 
     private boolean isValid(final List<? extends Item> items, final ConstraintValidatorContext context) {
-        long connObjectKeys = IterableUtils.countMatches(items, new Predicate<Item>() {
-
-            @Override
-            public boolean evaluate(final Item item) {
-                return item.isConnObjectKey();
-            }
-        });
+        long connObjectKeys = items.stream().filter(Item::isConnObjectKey).count();
         if (connObjectKeys != 1) {
             context.buildConstraintViolationWithTemplate(
                     getTemplate(EntityViolationType.InvalidMapping, "Single ConnObjectKey mapping is required")).
@@ -94,13 +85,7 @@ public class ExternalResourceValidator extends AbstractValidator<ExternalResourc
 
         boolean isValid = true;
 
-        long passwords = IterableUtils.countMatches(mapping.getItems(), new Predicate<MappingItem>() {
-
-            @Override
-            public boolean evaluate(final MappingItem item) {
-                return item.isPassword();
-            }
-        });
+        long passwords = mapping.getItems().stream().filter(MappingItem::isPassword).count();
         if (passwords > 1) {
             context.buildConstraintViolationWithTemplate(
                     getTemplate(EntityViolationType.InvalidMapping, "One password mapping is allowed at most")).
@@ -144,16 +129,12 @@ public class ExternalResourceValidator extends AbstractValidator<ExternalResourc
 
         final Set<AnyType> anyTypes = new HashSet<>();
         final Set<String> objectClasses = new HashSet<>();
-        boolean validMappings = IterableUtils.matchesAll(resource.getProvisions(), new Predicate<Provision>() {
-
-            @Override
-            public boolean evaluate(final Provision provision) {
-                anyTypes.add(provision.getAnyType());
-                if (provision.getObjectClass() != null) {
-                    objectClasses.add(provision.getObjectClass().getObjectClassValue());
-                }
-                return isValid(provision.getMapping(), context);
+        boolean validMappings = resource.getProvisions().stream().allMatch(provision -> {
+            anyTypes.add(provision.getAnyType());
+            if (provision.getObjectClass() != null) {
+                objectClasses.add(provision.getObjectClass().getObjectClassValue());
             }
+            return isValid(provision.getMapping(), context);
         });
         validMappings &= isValid(resource.getOrgUnit(), context);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ReportValidator.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ReportValidator.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ReportValidator.java
index e05dee8..b6cfd26 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ReportValidator.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ReportValidator.java
@@ -19,11 +19,9 @@
 package org.apache.syncope.core.persistence.jpa.validation.entity;
 
 import java.text.ParseException;
-import java.util.HashSet;
 import java.util.Set;
+import java.util.stream.Collectors;
 import javax.validation.ConstraintValidatorContext;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Transformer;
 import org.apache.syncope.common.lib.report.ReportletConf;
 import org.apache.syncope.common.lib.types.EntityViolationType;
 import org.apache.syncope.core.persistence.api.entity.Report;
@@ -50,14 +48,8 @@ public class ReportValidator extends AbstractValidator<ReportCheck, Report> {
             }
         }
 
-        Set<String> reportletNames = CollectionUtils.collect(object.getReportletConfs(),
-                new Transformer<ReportletConf, String>() {
-
-                    @Override
-                    public String transform(final ReportletConf input) {
-                        return input.getName();
-                    }
-                }, new HashSet<String>());
+        Set<String> reportletNames = object.getReportletConfs().stream().
+                map(ReportletConf::getName).collect(Collectors.toSet());
         if (reportletNames.size() != object.getReportletConfs().size()) {
             LOG.error("Reportlet name must be unique");
             isValid = false;

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
index 1ba9913..a6bcf52 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
@@ -25,11 +25,9 @@ import static org.junit.Assert.assertTrue;
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
+import java.util.stream.Collectors;
 import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
@@ -50,8 +48,8 @@ import org.apache.syncope.core.persistence.api.dao.search.AssignableCond;
 import org.apache.syncope.core.persistence.api.dao.search.MemberCond;
 import org.apache.syncope.core.persistence.api.dao.search.RelationshipCond;
 import org.apache.syncope.core.persistence.api.dao.search.RelationshipTypeCond;
-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.Entity;
 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;
@@ -203,10 +201,7 @@ public class AnySearchTest extends AbstractTest {
         assertNotNull(users);
         assertEquals(4, users.size());
 
-        Set<String> ids = new HashSet<>(users.size());
-        for (User user : users) {
-            ids.add(user.getKey());
-        }
+        Set<String> ids = users.stream().map(Entity::getKey).collect(Collectors.toSet());
         assertTrue(ids.contains("1417acbe-cbf6-4277-9372-e75e04f97000"));
         assertTrue(ids.contains("b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee"));
     }
@@ -224,10 +219,7 @@ public class AnySearchTest extends AbstractTest {
         assertNotNull(users);
         assertEquals(4, users.size());
 
-        Set<String> ids = new HashSet<>(users.size());
-        for (User user : users) {
-            ids.add(user.getKey());
-        }
+        Set<String> ids = users.stream().map(Entity::getKey).collect(Collectors.toSet());
         assertTrue(ids.contains("1417acbe-cbf6-4277-9372-e75e04f97000"));
         assertTrue(ids.contains("b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee"));
     }
@@ -484,36 +476,18 @@ public class AnySearchTest extends AbstractTest {
                 SearchCond.getLeafCond(relationshipTypeCond), SearchCond.getLeafCond(tcond));
         assertTrue(searchCondition.isValid());
 
-        List<AnyObject> matching = searchDAO.search(searchCondition, AnyTypeKind.ANY_OBJECT);
-        assertNotNull(matching);
-        assertEquals(2, matching.size());
-        assertTrue(IterableUtils.matchesAny(matching, new Predicate<AnyObject>() {
-
-            @Override
-            public boolean evaluate(final AnyObject any) {
-                return "fc6dbc3a-6c07-4965-8781-921e7401a4a5".equals(any.getKey());
-            }
-        }));
-        assertTrue(IterableUtils.matchesAny(matching, new Predicate<AnyObject>() {
-
-            @Override
-            public boolean evaluate(final AnyObject any) {
-                return "8559d14d-58c2-46eb-a2d4-a7d35161e8f8".equals(any.getKey());
-            }
-        }));
+        List<AnyObject> anyObjects = searchDAO.search(searchCondition, AnyTypeKind.ANY_OBJECT);
+        assertNotNull(anyObjects);
+        assertEquals(2, anyObjects.size());
+        assertTrue(anyObjects.stream().anyMatch(any -> "fc6dbc3a-6c07-4965-8781-921e7401a4a5".equals(any.getKey())));
+        assertTrue(anyObjects.stream().anyMatch(any -> "8559d14d-58c2-46eb-a2d4-a7d35161e8f8".equals(any.getKey())));
 
         // 2. search for users involved in "neighborhood" relationship
         searchCondition = SearchCond.getLeafCond(relationshipTypeCond);
-        matching = searchDAO.search(searchCondition, AnyTypeKind.USER);
-        assertNotNull(matching);
-        assertEquals(1, matching.size());
-        assertTrue(IterableUtils.matchesAny(matching, new Predicate<Any<?>>() {
-
-            @Override
-            public boolean evaluate(final Any<?> any) {
-                return "c9b2dec2-00a7-4855-97c0-d854842b4b24".equals(any.getKey());
-            }
-        }));
+        List<User> users = searchDAO.search(searchCondition, AnyTypeKind.USER);
+        assertNotNull(users);
+        assertEquals(1, users.size());
+        assertTrue(users.stream().anyMatch(any -> "c9b2dec2-00a7-4855-97c0-d854842b4b24".equals(any.getKey())));
     }
 
     @Test
@@ -569,20 +543,8 @@ public class AnySearchTest extends AbstractTest {
         assertTrue(searchCondition.isValid());
 
         List<Group> groups = searchDAO.search(searchCondition, AnyTypeKind.GROUP);
-        assertTrue(IterableUtils.matchesAny(groups, new Predicate<Group>() {
-
-            @Override
-            public boolean evaluate(final Group group) {
-                return "additional".equals(group.getName());
-            }
-        }));
-        assertFalse(IterableUtils.matchesAny(groups, new Predicate<Group>() {
-
-            @Override
-            public boolean evaluate(final Group group) {
-                return "fake".equals(group.getName());
-            }
-        }));
+        assertTrue(groups.stream().anyMatch(group -> "additional".equals(group.getName())));
+        assertFalse(groups.stream().anyMatch(group -> "fake".equals(group.getName())));
 
         assignableCond = new AssignableCond();
         assignableCond.setRealmFullPath("/odd");
@@ -590,13 +552,8 @@ public class AnySearchTest extends AbstractTest {
         assertTrue(searchCondition.isValid());
 
         List<AnyObject> anyObjects = searchDAO.search(searchCondition, AnyTypeKind.ANY_OBJECT);
-        assertFalse(IterableUtils.matchesAny(anyObjects, new Predicate<AnyObject>() {
-
-            @Override
-            public boolean evaluate(final AnyObject anyObject) {
-                return "9e1d130c-d6a3-48b1-98b3-182477ed0688".equals(anyObject.getKey());
-            }
-        }));
+        assertFalse(anyObjects.stream().
+                anyMatch(anyObject -> "9e1d130c-d6a3-48b1-98b3-182477ed0688".equals(anyObject.getKey())));
     }
 
     @Test
@@ -627,13 +584,7 @@ public class AnySearchTest extends AbstractTest {
         List<User> users = searchDAO.search(searchCondition, AnyTypeKind.USER);
         assertNotNull(users);
         assertEquals(2, users.size());
-        assertTrue(IterableUtils.matchesAny(users, new Predicate<User>() {
-
-            @Override
-            public boolean evaluate(final User user) {
-                return "c9b2dec2-00a7-4855-97c0-d854842b4b24".equals(user.getKey());
-            }
-        }));
+        assertTrue(users.stream().anyMatch(user -> "c9b2dec2-00a7-4855-97c0-d854842b4b24".equals(user.getKey())));
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConfTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConfTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConfTest.java
index 511a359..d72ea14 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConfTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConfTest.java
@@ -19,11 +19,11 @@
 package org.apache.syncope.core.persistence.jpa.inner;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
+import java.util.Optional;
 import org.apache.syncope.common.lib.types.AttrSchemaType;
 import org.apache.syncope.common.lib.types.EntityViolationType;
 import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidEntityException;
@@ -49,16 +49,16 @@ public class ConfTest extends AbstractTest {
 
     @Test
     public void read() {
-        CPlainAttr conf = confDAO.find("selfRegistration.allowed");
-        assertNotNull(conf);
-        assertTrue(conf.getValues().get(0).getBooleanValue());
+        Optional<? extends CPlainAttr> conf = confDAO.find("selfRegistration.allowed");
+        assertTrue(conf.isPresent());
+        assertTrue(conf.get().getValues().get(0).getBooleanValue());
 
         conf = confDAO.find("authentication.statuses");
-        assertNotNull(conf);
-        assertEquals(2, conf.getValues().size());
+        assertTrue(conf.isPresent());
+        assertEquals(2, conf.get().getValues().size());
 
         conf = confDAO.find("non.existing");
-        assertNull(conf);
+        assertFalse(conf.isPresent());
     }
 
     private void add(final CPlainAttr newAttr, final String value) {
@@ -88,8 +88,8 @@ public class ConfTest extends AbstractTest {
         add(newConf, "2014-06-20");
         confDAO.save(newConf);
 
-        CPlainAttr actual = confDAO.find("useless");
-        assertEquals(actual.getValuesAsStrings(), newConf.getValuesAsStrings());
+        Optional<? extends CPlainAttr> actual = confDAO.find("useless");
+        assertEquals(actual.get().getValuesAsStrings(), newConf.getValuesAsStrings());
 
         // 3. update conf
         newConf.getValues().clear();
@@ -97,11 +97,11 @@ public class ConfTest extends AbstractTest {
         confDAO.save(newConf);
 
         actual = confDAO.find("useless");
-        assertEquals(actual.getValuesAsStrings(), newConf.getValuesAsStrings());
+        assertEquals(actual.get().getValuesAsStrings(), newConf.getValuesAsStrings());
 
         // 4. delete conf
         confDAO.delete("useless");
-        assertNull(confDAO.find("useless"));
+        assertFalse(confDAO.find("useless").isPresent());
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConnInstanceTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConnInstanceTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConnInstanceTest.java
index 5020adb..fd47175 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConnInstanceTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConnInstanceTest.java
@@ -26,12 +26,10 @@ import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import java.io.File;
-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.Transformer;
+import java.util.stream.Collectors;
 import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.types.ConnConfPropSchema;
 import org.apache.syncope.common.lib.types.ConnConfProperty;
@@ -57,14 +55,9 @@ public class ConnInstanceTest extends AbstractTest {
 
     @Test
     public void findAll() {
-        List<GrantedAuthority> authorities = CollectionUtils.collect(StandardEntitlement.values(),
-                new Transformer<String, GrantedAuthority>() {
-
-            @Override
-            public GrantedAuthority transform(final String entitlement) {
-                return new SyncopeGrantedAuthority(entitlement, SyncopeConstants.ROOT_REALM);
-            }
-        }, new ArrayList<GrantedAuthority>());
+        List<GrantedAuthority> authorities = StandardEntitlement.values().stream().
+                map(entitlement -> new SyncopeGrantedAuthority(entitlement, SyncopeConstants.ROOT_REALM)).
+                collect(Collectors.toList());
 
         UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(
                 new org.springframework.security.core.userdetails.User(

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/GroupTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/GroupTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/GroupTest.java
index c3ef956..6a4057b 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/GroupTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/GroupTest.java
@@ -59,7 +59,7 @@ public class GroupTest extends AbstractTest {
         group = groupDAO.findByName("additional");
         assertNotNull(group);
         assertEquals(1, group.getTypeExtensions().size());
-        assertEquals(2, group.getTypeExtension(anyTypeDAO.findUser()).getAuxClasses().size());
+        assertEquals(2, group.getTypeExtension(anyTypeDAO.findUser()).get().getAuxClasses().size());
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/MultitenancyTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/MultitenancyTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/MultitenancyTest.java
index 80077a7..5ca623c 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/MultitenancyTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/MultitenancyTest.java
@@ -23,10 +23,8 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
-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.SyncopeConstants;
 import org.apache.syncope.common.lib.types.CipherAlgorithm;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
@@ -60,14 +58,9 @@ public class MultitenancyTest extends AbstractTest {
 
     @BeforeClass
     public static void setAuthContext() {
-        List<GrantedAuthority> authorities = CollectionUtils.collect(StandardEntitlement.values(),
-                new Transformer<String, GrantedAuthority>() {
-
-            @Override
-            public GrantedAuthority transform(final String entitlement) {
-                return new SyncopeGrantedAuthority(entitlement, SyncopeConstants.ROOT_REALM);
-            }
-        }, new ArrayList<GrantedAuthority>());
+        List<GrantedAuthority> authorities = StandardEntitlement.values().stream().
+                map(entitlement -> new SyncopeGrantedAuthority(entitlement, SyncopeConstants.ROOT_REALM)).
+                collect(Collectors.toList());
 
         UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(
                 new org.springframework.security.core.userdetails.User(

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainAttrTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainAttrTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainAttrTest.java
index 3eda5ed..c80caaf 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainAttrTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainAttrTest.java
@@ -190,7 +190,7 @@ public class PlainAttrTest extends AbstractTest {
 
         userDAO.save(user);
 
-        UPlainAttr obscure = user.getPlainAttr("obscure");
+        UPlainAttr obscure = user.getPlainAttr("obscure").get();
         assertNotNull(obscure);
         assertEquals(1, obscure.getValues().size());
         assertEquals(Encryptor.getInstance(obscureSchema.getSecretKey()).
@@ -217,10 +217,10 @@ public class PlainAttrTest extends AbstractTest {
 
         userDAO.save(user);
 
-        UPlainAttr obscure = user.getPlainAttr("photo");
-        assertNotNull(obscure);
-        assertEquals(1, obscure.getValues().size());
-        assertTrue(Arrays.equals(bytes, obscure.getValues().get(0).getBinaryValue()));
+        UPlainAttr photo = user.getPlainAttr("photo").get();
+        assertNotNull(photo);
+        assertEquals(1, photo.getValues().size());
+        assertTrue(Arrays.equals(bytes, photo.getValues().get(0).getBinaryValue()));
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RealmTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RealmTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RealmTest.java
index d8d853a..2e8d215 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RealmTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RealmTest.java
@@ -26,7 +26,6 @@ import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import java.util.List;
-import org.apache.commons.collections4.CollectionUtils;
 import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.types.EntityViolationType;
 import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidEntityException;
@@ -93,12 +92,6 @@ public class RealmTest extends AbstractTest {
     }
 
     @Test
-    public void findDescendants() {
-        assertTrue(CollectionUtils.disjunction(realmDAO.findAll(), realmDAO.findDescendants(realmDAO.getRoot())).
-                isEmpty());
-    }
-
-    @Test
     public void findAll() {
         List<Realm> list = realmDAO.findAll();
         assertNotNull(list);

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ResourceTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ResourceTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ResourceTest.java
index 9439827..a1fe83e 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ResourceTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ResourceTest.java
@@ -25,12 +25,8 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-import java.util.ArrayList;
 import java.util.List;
-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.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.types.EntityViolationType;
 import org.apache.syncope.common.lib.types.MappingPurpose;
@@ -75,16 +71,11 @@ public class ResourceTest extends AbstractTest {
                 "net.tirasa.connid.bundles.soap.WebServiceConnector", connector.getConnectorName());
         assertEquals("invalid bundle name", "net.tirasa.connid.bundles.soap", connector.getBundleName());
 
-        Mapping mapping = resource.getProvision(anyTypeDAO.findUser()).getMapping();
+        Mapping mapping = resource.getProvision(anyTypeDAO.findUser()).get().getMapping();
         assertFalse("no mapping specified", mapping.getItems().isEmpty());
 
-        assertTrue(IterableUtils.matchesAny(mapping.getItems(), new Predicate<MappingItem>() {
-
-            @Override
-            public boolean evaluate(final MappingItem item) {
-                return "7f55b09c-b573-41dc-a9eb-ccd80bd3ea7a".equals(item.getKey());
-            }
-        }));
+        assertTrue(mapping.getItems().stream().
+                anyMatch(item -> "7f55b09c-b573-41dc-a9eb-ccd80bd3ea7a".equals(item.getKey())));
 
         try {
             resourceDAO.authFind("ws-target-resource-1");
@@ -103,14 +94,9 @@ public class ResourceTest extends AbstractTest {
 
     @Test
     public void findAll() {
-        List<GrantedAuthority> authorities = CollectionUtils.collect(StandardEntitlement.values(),
-                new Transformer<String, GrantedAuthority>() {
-
-            @Override
-            public GrantedAuthority transform(final String entitlement) {
-                return new SyncopeGrantedAuthority(entitlement, SyncopeConstants.ROOT_REALM);
-            }
-        }, new ArrayList<GrantedAuthority>());
+        List<GrantedAuthority> authorities = StandardEntitlement.values().stream().
+                map(entitlement -> new SyncopeGrantedAuthority(entitlement, SyncopeConstants.ROOT_REALM)).
+                collect(Collectors.toList());
 
         UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(
                 new org.springframework.security.core.userdetails.User(
@@ -131,8 +117,8 @@ public class ResourceTest extends AbstractTest {
     public void getConnObjectKey() {
         ExternalResource resource = resourceDAO.find("ws-target-resource-2");
         assertNotNull(resource);
-        assertEquals("fullname",
-                resource.getProvision(anyTypeDAO.findUser()).getMapping().getConnObjectKeyItem().getIntAttrName());
+        assertEquals("fullname", resource.getProvision(anyTypeDAO.findUser()).get().
+                getMapping().getConnObjectKeyItem().get().getIntAttrName());
     }
 
     @Test
@@ -165,8 +151,8 @@ public class ResourceTest extends AbstractTest {
 
         assertNotNull(actual);
         assertNotNull(actual.getConnector());
-        assertNotNull(actual.getProvision(anyTypeDAO.findUser()).getMapping());
-        assertFalse(actual.getProvision(anyTypeDAO.findUser()).getMapping().getItems().isEmpty());
+        assertNotNull(actual.getProvision(anyTypeDAO.findUser()).get().getMapping());
+        assertFalse(actual.getProvision(anyTypeDAO.findUser()).get().getMapping().getItems().isEmpty());
         assertEquals(Integer.valueOf(2), actual.getPropagationPriority());
     }
 
@@ -335,7 +321,7 @@ public class ResourceTest extends AbstractTest {
         ExternalResource actual = resourceDAO.save(resource);
         assertNotNull(actual);
 
-        assertEquals(3, actual.getProvision(anyTypeDAO.findUser()).getMapping().getItems().size());
+        assertEquals(3, actual.getProvision(anyTypeDAO.findUser()).get().getMapping().getItems().size());
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/VirSchemaTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/VirSchemaTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/VirSchemaTest.java
index 192ef0f..e6b0410 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/VirSchemaTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/VirSchemaTest.java
@@ -62,7 +62,7 @@ public class VirSchemaTest extends AbstractTest {
     @Test
     public void save() {
         ExternalResource csv = resourceDAO.find("resource-csv");
-        Provision provision = csv.getProvision(ObjectClass.ACCOUNT);
+        Provision provision = csv.getProvision(ObjectClass.ACCOUNT).get();
         assertNotNull(provision);
 
         VirSchema virSchema = entityFactory.newEntity(VirSchema.class);

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ConfTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ConfTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ConfTest.java
index f9bcff1..c5559df 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ConfTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ConfTest.java
@@ -53,7 +53,7 @@ public class ConfTest extends AbstractTest {
 
     @Test
     public void update() {
-        CPlainAttr expireTime = confDAO.find("token.expireTime");
+        CPlainAttr expireTime = confDAO.find("token.expireTime").get();
         assertNotNull(expireTime);
         long value = expireTime.getValues().get(0).getLongValue();
         value++;
@@ -65,7 +65,7 @@ public class ConfTest extends AbstractTest {
         confDAO.save(expireTime);
         confDAO.flush();
 
-        CPlainAttr actual = confDAO.find("token.expireTime");
+        CPlainAttr actual = confDAO.find("token.expireTime").get();
         assertEquals(expireTime, actual);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
index fc359e3..bf00361 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
@@ -29,9 +29,8 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
+import java.util.stream.Collectors;
 import javax.persistence.Query;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Predicate;
 import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidEntityException;
@@ -146,7 +145,7 @@ public class GroupTest extends AbstractTest {
         group = groupDAO.findByName("new");
         assertNotNull(group);
         assertEquals(1, group.getTypeExtensions().size());
-        assertEquals(2, group.getTypeExtension(anyTypeDAO.findUser()).getAuxClasses().size());
+        assertEquals(2, group.getTypeExtension(anyTypeDAO.findUser()).get().getAuxClasses().size());
     }
 
     @Test
@@ -179,22 +178,23 @@ public class GroupTest extends AbstractTest {
      * required for avoiding creating of a new transaction - good for general use case but bad for the way how
      * this test class is architected.
      */
-    private List<Group> findDynGroups(final User user) {
+    @SuppressWarnings("unchecked")
+    public List<Group> findDynGroups(final User user) {
         Query query = entityManager().createNativeQuery(
                 "SELECT group_id FROM " + JPAGroupDAO.UDYNMEMB_TABLE + " WHERE any_id=?");
         query.setParameter(1, user.getKey());
 
         List<Group> result = new ArrayList<>();
-        for (Object key : query.getResultList()) {
-            String actualKey = key instanceof Object[]
-                    ? (String) ((Object[]) key)[0]
-                    : ((String) key);
-
-            Group group = groupDAO.find(actualKey);
-            if (group != null && !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) {
+                    } else if (!result.contains(group)) {
+                        result.add(group);
+                    }
+                });
         return result;
     }
 
@@ -279,22 +279,23 @@ public class GroupTest extends AbstractTest {
      * required for avoiding creating of a new transaction - good for general use case but bad for the way how
      * this test class is architected.
      */
-    private List<Group> findDynGroups(final AnyObject anyObject) {
+    @SuppressWarnings("unchecked")
+    public List<Group> findDynGroups(final AnyObject anyObject) {
         Query query = entityManager().createNativeQuery(
                 "SELECT group_id FROM " + JPAGroupDAO.ADYNMEMB_TABLE + " WHERE any_id=?");
         query.setParameter(1, anyObject.getKey());
 
         List<Group> result = new ArrayList<>();
-        for (Object key : query.getResultList()) {
-            String actualKey = key instanceof Object[]
-                    ? (String) ((Object[]) key)[0]
-                    : ((String) key);
-
-            Group group = groupDAO.find(actualKey);
-            if (group != null && !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) {
+                    } else if (!result.contains(group)) {
+                        result.add(group);
+                    }
+                });
         return result;
     }
 
@@ -336,18 +337,13 @@ public class GroupTest extends AbstractTest {
         // 2. verify that dynamic membership is there
         actual = groupDAO.find(actual.getKey());
         assertNotNull(actual);
-        assertNotNull(actual.getADynMembership(anyTypeDAO.find("PRINTER")));
-        assertNotNull(actual.getADynMembership(anyTypeDAO.find("PRINTER")).getKey());
-        assertEquals(actual, actual.getADynMembership(anyTypeDAO.find("PRINTER")).getGroup());
+        assertNotNull(actual.getADynMembership(anyTypeDAO.find("PRINTER")).get());
+        assertNotNull(actual.getADynMembership(anyTypeDAO.find("PRINTER")).get().getKey());
+        assertEquals(actual, actual.getADynMembership(anyTypeDAO.find("PRINTER")).get().getGroup());
 
         // 3. verify that expected any objects have the created group dynamically assigned
-        List<String> members = CollectionUtils.select(groupDAO.findADynMembers(actual), new Predicate<String>() {
-
-            @Override
-            public boolean evaluate(final String object) {
-                return "PRINTER".equals(anyObjectDAO.find(object).getType().getKey());
-            }
-        }, new ArrayList<String>());
+        List<String> members = groupDAO.findADynMembers(actual).stream().filter(object
+                -> "PRINTER".equals(anyObjectDAO.find(object).getType().getKey())).collect(Collectors.toList());
         assertEquals(2, members.size());
         assertEquals(
                 new HashSet<>(Arrays.asList("fc6dbc3a-6c07-4965-8781-921e7401a4a5", newAnyObjectKey)),
@@ -357,7 +353,7 @@ public class GroupTest extends AbstractTest {
         assertNotNull(anyObject);
         Collection<Group> dynGroupMemberships = findDynGroups(anyObject);
         assertEquals(1, dynGroupMemberships.size());
-        assertTrue(dynGroupMemberships.contains(actual.getADynMembership(anyTypeDAO.find("PRINTER")).getGroup()));
+        assertTrue(dynGroupMemberships.contains(actual.getADynMembership(anyTypeDAO.find("PRINTER")).get().getGroup()));
 
         // 4. delete the new any object and verify that dynamic membership was updated
         anyObjectDAO.delete(newAnyObjectKey);
@@ -365,18 +361,13 @@ public class GroupTest extends AbstractTest {
         anyObjectDAO.flush();
 
         actual = groupDAO.find(actual.getKey());
-        members = CollectionUtils.select(groupDAO.findADynMembers(actual), new Predicate<String>() {
-
-            @Override
-            public boolean evaluate(final String object) {
-                return "PRINTER".equals(anyObjectDAO.find(object).getType().getKey());
-            }
-        }, new ArrayList<String>());
+        members = groupDAO.findADynMembers(actual).stream().filter(object
+                -> "PRINTER".equals(anyObjectDAO.find(object).getType().getKey())).collect(Collectors.toList());
         assertEquals(1, members.size());
         assertEquals("fc6dbc3a-6c07-4965-8781-921e7401a4a5", members.get(0));
 
         // 5. delete group and verify that dynamic membership was also removed
-        String dynMembershipKey = actual.getADynMembership(anyTypeDAO.find("PRINTER")).getKey();
+        String dynMembershipKey = actual.getADynMembership(anyTypeDAO.find("PRINTER")).get().getKey();
 
         groupDAO.delete(actual);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainSchemaTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainSchemaTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainSchemaTest.java
index 5d8f021..16a80df 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainSchemaTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainSchemaTest.java
@@ -25,14 +25,12 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.UUID;
+import java.util.stream.Collectors;
 import javax.persistence.EntityExistsException;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Transformer;
 import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.types.AttrSchemaType;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
@@ -81,14 +79,9 @@ public class PlainSchemaTest extends AbstractTest {
 
     @BeforeClass
     public static void setAuthContext() {
-        List<GrantedAuthority> authorities = CollectionUtils.collect(StandardEntitlement.values(),
-                new Transformer<String, GrantedAuthority>() {
-
-            @Override
-            public GrantedAuthority transform(final String entitlement) {
-                return new SyncopeGrantedAuthority(entitlement, SyncopeConstants.ROOT_REALM);
-            }
-        }, new ArrayList<GrantedAuthority>());
+        List<GrantedAuthority> authorities = StandardEntitlement.values().stream().
+                map(entitlement -> new SyncopeGrantedAuthority(entitlement, SyncopeConstants.ROOT_REALM)).
+                collect(Collectors.toList());
 
         UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(
                 new org.springframework.security.core.userdetails.User(
@@ -124,7 +117,7 @@ public class PlainSchemaTest extends AbstractTest {
         // fullname is mapped as ConnObjectKey for ws-target-resource-2, need to swap it otherwise validation errors 
         // will be raised
         for (MappingItem item : resourceDAO.find("ws-target-resource-2").
-                getProvision(anyTypeDAO.findUser()).getMapping().getItems()) {
+                getProvision(anyTypeDAO.findUser()).get().getMapping().getItems()) {
 
             if ("fullname".equals(item.getIntAttrName())) {
                 item.setConnObjectKey(false);
@@ -140,10 +133,10 @@ public class PlainSchemaTest extends AbstractTest {
         // check for associated mappings
         Set<MappingItem> mapItems = new HashSet<>();
         for (ExternalResource resource : resourceDAO.findAll()) {
-            if (resource.getProvision(anyTypeDAO.findUser()) != null
-                    && resource.getProvision(anyTypeDAO.findUser()).getMapping() != null) {
+            if (resource.getProvision(anyTypeDAO.findUser()).isPresent()
+                    && resource.getProvision(anyTypeDAO.findUser()).get().getMapping() != null) {
 
-                for (MappingItem mapItem : resource.getProvision(anyTypeDAO.findUser()).getMapping().getItems()) {
+                for (MappingItem mapItem : resource.getProvision(anyTypeDAO.findUser()).get().getMapping().getItems()) {
                     if (schema.getKey().equals(mapItem.getIntAttrName())) {
                         mapItems.add(mapItem);
                     }
@@ -166,10 +159,10 @@ public class PlainSchemaTest extends AbstractTest {
         // check for mappings deletion
         mapItems = new HashSet<>();
         for (ExternalResource resource : resourceDAO.findAll()) {
-            if (resource.getProvision(anyTypeDAO.findUser()) != null
-                    && resource.getProvision(anyTypeDAO.findUser()).getMapping() != null) {
+            if (resource.getProvision(anyTypeDAO.findUser()).isPresent()
+                    && resource.getProvision(anyTypeDAO.findUser()).get().getMapping() != null) {
 
-                for (MappingItem mapItem : resource.getProvision(anyTypeDAO.findUser()).getMapping().getItems()) {
+                for (MappingItem mapItem : resource.getProvision(anyTypeDAO.findUser()).get().getMapping().getItems()) {
                     if ("fullname".equals(mapItem.getIntAttrName())) {
                         mapItems.add(mapItem);
                     }
@@ -180,8 +173,8 @@ public class PlainSchemaTest extends AbstractTest {
 
         assertNull(plainAttrDAO.find("01f22fbd-b672-40af-b528-686d9b27ebc4", UPlainAttr.class));
         assertNull(plainAttrDAO.find(UUID.randomUUID().toString(), UPlainAttr.class));
-        assertNull(userDAO.findByUsername("rossini").getPlainAttr("fullname"));
-        assertNull(userDAO.findByUsername("vivaldi").getPlainAttr("fullname"));
+        assertFalse(userDAO.findByUsername("rossini").getPlainAttr("fullname").isPresent());
+        assertFalse(userDAO.findByUsername("vivaldi").getPlainAttr("fullname").isPresent());
     }
 
     @Test
@@ -193,10 +186,10 @@ public class PlainSchemaTest extends AbstractTest {
         // check for associated mappings
         Set<MappingItem> mappings = new HashSet<>();
         for (ExternalResource resource : resourceDAO.findAll()) {
-            if (resource.getProvision(anyTypeDAO.findUser()) != null
-                    && resource.getProvision(anyTypeDAO.findUser()).getMapping() != null) {
+            if (resource.getProvision(anyTypeDAO.findUser()).isPresent()
+                    && resource.getProvision(anyTypeDAO.findUser()).get().getMapping() != null) {
 
-                for (MappingItem mapItem : resource.getProvision(anyTypeDAO.findUser()).getMapping().getItems()) {
+                for (MappingItem mapItem : resource.getProvision(anyTypeDAO.findUser()).get().getMapping().getItems()) {
                     if (schema.getKey().equals(mapItem.getIntAttrName())) {
                         mappings.add(mapItem);
                     }
@@ -218,7 +211,7 @@ public class PlainSchemaTest extends AbstractTest {
     @Test
     public void deleteFirstname() {
         assertEquals(5, resourceDAO.find("resource-db-pull").
-                getProvision(anyTypeDAO.findUser()).getMapping().getItems().size());
+                getProvision(anyTypeDAO.findUser()).get().getMapping().getItems().size());
 
         plainSchemaDAO.delete("firstname");
         assertNull(plainSchemaDAO.find("firstname"));
@@ -226,6 +219,6 @@ public class PlainSchemaTest extends AbstractTest {
         plainSchemaDAO.flush();
 
         assertEquals(4, resourceDAO.find("resource-db-pull").
-                getProvision(anyTypeDAO.findUser()).getMapping().getItems().size());
+                getProvision(anyTypeDAO.findUser()).get().getMapping().getItems().size());
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java
index f027930..de6d911 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java
@@ -24,11 +24,10 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
-import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
 import org.apache.syncope.common.lib.types.MappingPurpose;
 import org.apache.syncope.common.lib.types.TaskType;
 import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
@@ -40,7 +39,7 @@ import org.apache.syncope.core.persistence.api.dao.UserDAO;
 import org.apache.syncope.core.persistence.api.dao.VirSchemaDAO;
 import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
 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.Entity;
 import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
 import org.apache.syncope.core.persistence.api.entity.policy.PasswordPolicy;
 import org.apache.syncope.core.persistence.api.entity.resource.Mapping;
@@ -156,7 +155,7 @@ public class ResourceTest extends AbstractTest {
         // save the resource
         ExternalResource actual = resourceDAO.save(resource);
         assertNotNull(actual);
-        assertNotNull(actual.getProvision(anyTypeDAO.findUser()).getMapping());
+        assertNotNull(actual.getProvision(anyTypeDAO.findUser()).get().getMapping());
 
         resourceDAO.flush();
         resourceDAO.detach(actual);
@@ -184,7 +183,7 @@ public class ResourceTest extends AbstractTest {
         assertTrue(resource.getConnector().equals(connector));
 
         // check mappings
-        List<? extends MappingItem> items = resource.getProvision(anyTypeDAO.findUser()).getMapping().getItems();
+        List<? extends MappingItem> items = resource.getProvision(anyTypeDAO.findUser()).get().getMapping().getItems();
         assertNotNull(items);
         assertEquals(5, items.size());
 
@@ -213,10 +212,7 @@ public class ResourceTest extends AbstractTest {
         List<User> users = userDAO.findByResource(resource);
         assertNotNull(users);
 
-        Set<String> userKeys = new HashSet<>();
-        for (User user : users) {
-            userKeys.add(user.getKey());
-        }
+        Set<String> userKeys = users.stream().map(Entity::getKey).collect(Collectors.toSet());
         // -------------------------------------
 
         // Get tasks
@@ -235,57 +231,50 @@ public class ResourceTest extends AbstractTest {
         assertNull("delete did not work", actual);
 
         // resource must be not referenced any more from users
-        for (String key : userKeys) {
-            User actualUser = userDAO.find(key);
-            assertNotNull(actualUser);
-            for (ExternalResource res : userDAO.findAllResources(actualUser)) {
-                assertFalse(res.getKey().equalsIgnoreCase(resource.getKey()));
-            }
-        }
+        userKeys.stream().
+                map(key -> userDAO.find(key)).
+                map(actualUser -> {
+                    assertNotNull(actualUser);
+                    return actualUser;
+                }).forEachOrdered((actualUser) -> {
+            userDAO.findAllResources(actualUser).
+                    forEach(res -> assertFalse(res.getKey().equalsIgnoreCase(resource.getKey())));
+        });
 
         // resource must be not referenced any more from the connector
         ConnInstance actualConnector = connInstanceDAO.find(connector.getKey());
         assertNotNull(actualConnector);
-        for (ExternalResource res : actualConnector.getResources()) {
-            assertFalse(res.getKey().equalsIgnoreCase(resource.getKey()));
-        }
+        actualConnector.getResources().
+                forEach(res -> assertFalse(res.getKey().equalsIgnoreCase(resource.getKey())));
 
         // there must be no tasks
-        for (PropagationTask task : propagationTasks) {
-            assertNull(taskDAO.find(task.getKey()));
-        }
+        propagationTasks.forEach(task -> assertNull(taskDAO.find(task.getKey())));
     }
 
     @Test
     public void emptyMapping() {
         ExternalResource ldap = resourceDAO.find("resource-ldap");
         assertNotNull(ldap);
-        assertNotNull(ldap.getProvision(anyTypeDAO.findUser()).getMapping());
-        assertNotNull(ldap.getProvision(anyTypeDAO.findGroup()).getMapping());
+        assertNotNull(ldap.getProvision(anyTypeDAO.findUser()).get().getMapping());
+        assertNotNull(ldap.getProvision(anyTypeDAO.findGroup()).get().getMapping());
 
         // need to avoid any class not defined in this Maven module
         ldap.getPropagationActionsClassNames().clear();
 
-        List<? extends MappingItem> items = ldap.getProvision(anyTypeDAO.findGroup()).getMapping().getItems();
+        List<? extends MappingItem> items = ldap.getProvision(anyTypeDAO.findGroup()).get().getMapping().getItems();
         assertNotNull(items);
         assertFalse(items.isEmpty());
-        List<String> itemKeys = new ArrayList<>(items.size());
-        for (MappingItem item : items) {
-            itemKeys.add(item.getKey());
-        }
+        List<String> itemKeys = items.stream().map(Entity::getKey).collect(Collectors.toList());
 
-        Provision groupProvision = ldap.getProvision(anyTypeDAO.findGroup());
-        for (VirSchema schema : virSchemaDAO.findByProvision(groupProvision)) {
-            virSchemaDAO.delete(schema.getKey());
-        }
+        Provision groupProvision = ldap.getProvision(anyTypeDAO.findGroup()).get();
+        virSchemaDAO.findByProvision(groupProvision).
+                forEach(schema -> virSchemaDAO.delete(schema.getKey()));
         ldap.getProvisions().remove(groupProvision);
 
         resourceDAO.save(ldap);
         resourceDAO.flush();
 
-        for (String itemKey : itemKeys) {
-            assertNull(entityManager().find(JPAMappingItem.class, itemKey));
-        }
+        itemKeys.forEach(itemKey -> assertNull(entityManager().find(JPAMappingItem.class, itemKey)));
     }
 
     @Test
@@ -314,19 +303,19 @@ public class ResourceTest extends AbstractTest {
         ExternalResource csv = resourceDAO.find("resource-csv");
         assertNotNull(csv);
 
-        int origMapItems = csv.getProvision(anyTypeDAO.findUser()).getMapping().getItems().size();
+        int origMapItems = csv.getProvision(anyTypeDAO.findUser()).get().getMapping().getItems().size();
 
         MappingItem newMapItem = entityFactory.newEntity(MappingItem.class);
         newMapItem.setIntAttrName("TEST");
         newMapItem.setExtAttrName("TEST");
         newMapItem.setPurpose(MappingPurpose.PROPAGATION);
-        csv.getProvision(anyTypeDAO.findUser()).getMapping().add(newMapItem);
+        csv.getProvision(anyTypeDAO.findUser()).get().getMapping().add(newMapItem);
 
         resourceDAO.save(csv);
         resourceDAO.flush();
 
         csv = resourceDAO.find("resource-csv");
         assertNotNull(csv);
-        assertEquals(origMapItems + 1, csv.getProvision(anyTypeDAO.findUser()).getMapping().getItems().size());
+        assertEquals(origMapItems + 1, csv.getProvision(anyTypeDAO.findUser()).get().getMapping().getItems().size());
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/UserTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/UserTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/UserTest.java
index ede95f7..074488f 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/UserTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/UserTest.java
@@ -28,8 +28,6 @@ import static org.junit.Assert.fail;
 import java.util.Date;
 import java.util.List;
 import java.util.UUID;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidEntityException;
 import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
@@ -181,8 +179,8 @@ public class UserTest extends AbstractTest {
 
         // replace 'artDirector' with 'additional', which defines type extension with class 'other' and 'csv':
         // now it works
-        membership = user.getMembership(groupDAO.findByName("artDirector").getKey());
-        user.remove(user.getPlainAttr("obscure", membership));
+        membership = user.getMembership(groupDAO.findByName("artDirector").getKey()).get();
+        user.remove(user.getPlainAttr("obscure", membership).get());
         user.getMemberships().remove(membership);
         membership.setLeftEnd(null);
 
@@ -204,26 +202,14 @@ public class UserTest extends AbstractTest {
         user = userDAO.findByUsername("vivaldi");
         assertEquals(1, user.getMemberships().size());
 
-        final UMembership newM = user.getMembership(groupDAO.findByName("additional").getKey());
+        final UMembership newM = user.getMembership(groupDAO.findByName("additional").getKey()).get();
         assertEquals(1, user.getPlainAttrs(newM).size());
 
-        assertNull(user.getPlainAttr("obscure").getMembership());
+        assertNull(user.getPlainAttr("obscure").get().getMembership());
         assertEquals(2, user.getPlainAttrs("obscure").size());
-        assertTrue(user.getPlainAttrs("obscure").contains(user.getPlainAttr("obscure")));
-        assertTrue(IterableUtils.matchesAny(user.getPlainAttrs("obscure"), new Predicate<UPlainAttr>() {
-
-            @Override
-            public boolean evaluate(final UPlainAttr object) {
-                return object.getMembership() == null;
-            }
-        }));
-        assertTrue(IterableUtils.matchesAny(user.getPlainAttrs("obscure"), new Predicate<UPlainAttr>() {
-
-            @Override
-            public boolean evaluate(final UPlainAttr object) {
-                return newM.equals(object.getMembership());
-            }
-        }));
+        assertTrue(user.getPlainAttrs("obscure").contains(user.getPlainAttr("obscure").get()));
+        assertTrue(user.getPlainAttrs("obscure").stream().anyMatch(plainAttr -> plainAttr.getMembership() == null));
+        assertTrue(user.getPlainAttrs("obscure").stream().anyMatch(plainAttr -> newM.equals(plainAttr.getMembership())));
     }
 
     /**
@@ -251,7 +237,7 @@ public class UserTest extends AbstractTest {
         User owner = userDAO.findByUsername("vivaldi");
         assertNotNull("did not get expected user", owner);
 
-        String firstname = owner.getPlainAttr("firstname").getValuesAsStrings().iterator().next();
+        String firstname = owner.getPlainAttr("firstname").get().getValuesAsStrings().iterator().next();
         assertNotNull(firstname);
 
         // search by ksuffix derived attribute

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/VirSchemaTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/VirSchemaTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/VirSchemaTest.java
index 7b00f82..21d9c5a 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/VirSchemaTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/VirSchemaTest.java
@@ -48,7 +48,7 @@ public class VirSchemaTest extends AbstractTest {
 
     @Test
     public void deal() {
-        Provision provision = resourceDAO.find("ws-target-resource-1").getProvision(anyTypeDAO.findUser());
+        Provision provision = resourceDAO.find("ws-target-resource-1").getProvision(anyTypeDAO.findUser()).get();
         assertNotNull(provision);
         assertTrue(virSchemaDAO.findByProvision(provision).isEmpty());
 
@@ -66,7 +66,7 @@ public class VirSchemaTest extends AbstractTest {
         assertTrue(virSchema.isReadonly());
         assertEquals("EXT_ATTR", virSchema.getExtAttrName());
 
-        provision = resourceDAO.find("ws-target-resource-1").getProvision(anyTypeDAO.findUser());
+        provision = resourceDAO.find("ws-target-resource-1").getProvision(anyTypeDAO.findUser()).get();
         assertNotNull(provision);
         assertFalse(virSchemaDAO.findByProvision(provision).isEmpty());
         assertTrue(virSchemaDAO.findByProvision(provision).contains(virSchema));

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/XMLContentExporterTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/XMLContentExporterTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/XMLContentExporterTest.java
index 84bc767..9f085d4 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/XMLContentExporterTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/XMLContentExporterTest.java
@@ -22,10 +22,8 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
 import java.nio.charset.Charset;
-import java.util.ArrayList;
 import java.util.List;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Predicate;
+import java.util.stream.Collectors;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.output.ByteArrayOutputStream;
 import org.apache.commons.lang3.StringUtils;
@@ -50,15 +48,9 @@ public class XMLContentExporterTest extends AbstractTest {
         String exported = baos.toString(Charset.defaultCharset());
         assertTrue(StringUtils.isNotBlank(exported));
 
-        List<String> realms = CollectionUtils.select(
-                IOUtils.readLines(IOUtils.toInputStream(exported, Charset.defaultCharset()), Charset.defaultCharset()),
-                new Predicate<String>() {
-
-            @Override
-            public boolean evaluate(final String row) {
-                return row.startsWith("<REALM");
-            }
-        }, new ArrayList<String>());
+        List<String> realms = IOUtils.readLines(
+                IOUtils.toInputStream(exported, Charset.defaultCharset()), Charset.defaultCharset()).stream().
+                filter(row -> row.startsWith("<REALM")).collect(Collectors.toList());
         assertEquals(4, realms.size());
         assertTrue(realms.get(0).contains("NAME=\"/\""));
         assertTrue(realms.get(1).contains("NAME=\"two\""));

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
index 59bef19..90a5d9e 100644
--- a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
@@ -1331,15 +1331,15 @@ we are happy to inform you that the password request was successfully executed f
 &lt;/html&gt;"/>
   <MailTemplate id="test"/>
   <MailTemplate id="optin"
-                textTemplate="Hi ${user.getPlainAttr(&quot;firstname&quot;).values[0]} ${user.getPlainAttr(&quot;surname&quot;).values[0]}, welcome to Syncope!
+                textTemplate="Hi ${user.getPlainAttr(&quot;firstname&quot;).get().values[0]} ${user.getPlainAttr(&quot;surname&quot;).get().values[0]}, welcome to Syncope!
 
 Your username is ${user.username}.
-Your email address is ${user.getPlainAttr(&quot;email&quot;).values[0]}.
-Your email address inside a link: http://localhost/?email=${user.getPlainAttr(&quot;email&quot;).values[0].replace('@', '%40')}
+Your email address is ${user.getPlainAttr(&quot;email&quot;).get().values[0]}.
+Your email address inside a link: http://localhost/?email=${user.getPlainAttr(&quot;email&quot;).get().values[0].replace('@', '%40')}
 
 This message was sent to the following recipients:&#10;
 $$ for (recipient: recipients) {&#10;
-  * ${recipient.getPlainAttr(&quot;email&quot;).values[0]}&#10;
+  * ${recipient.getPlainAttr(&quot;email&quot;).get().values[0]}&#10;
 $$ }&#10;
 &#10;
 because one of the following events occurred:&#10;
@@ -1355,19 +1355,19 @@ $$ }&#10;
 $$ }&#10;"
                 htmlTemplate="&lt;html&gt;
 &lt;body&gt;
-&lt;h3&gt;Hi ${user.getPlainAttr(&quot;firstname&quot;).values[0]} ${user.getPlainAttr(&quot;surname&quot;).values[0]}, welcome to Syncope!&lt;/h3&gt;
+&lt;h3&gt;Hi ${user.getPlainAttr(&quot;firstname&quot;).get().values[0]} ${user.getPlainAttr(&quot;surname&quot;).get().values[0]}, welcome to Syncope!&lt;/h3&gt;
 
 &lt;p&gt;
    Your username is ${user.username}.&lt;br/&gt;
-   Your email address is ${user.getPlainAttr(&quot;email&quot;).values[0]}.
-   Your email address inside a &lt;a href=&quot;http://localhost/?email=${user.getPlainAttr(&quot;email&quot;).values[0].replace('@', '%40')}&quot;&gt;link&lt;/a&gt;.
+   Your email address is ${user.getPlainAttr(&quot;email&quot;).get().values[0]}.
+   Your email address inside a &lt;a href=&quot;http://localhost/?email=${user.getPlainAttr(&quot;email&quot;).get().values[0].replace('@', '%40')}&quot;&gt;link&lt;/a&gt;.
 &lt;/p&gt;
 
 &lt;p&gt;
     This message was sent to the following recipients:
 &lt;ul&gt;&#10;
 $$ for (recipient: recipients) {&#10;Na
-  &lt;li&gt;${recipient.getPlainAttr(&quot;email&quot;).values[0]}&lt;/li&gt;&#10;
+  &lt;li&gt;${recipient.getPlainAttr(&quot;email&quot;).get().values[0]}&lt;/li&gt;&#10;
 $$ }&#10;
 &lt;/ul&gt;&#10;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/MappingManager.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/MappingManager.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/MappingManager.java
index daa09e2..338a94e 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/MappingManager.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/MappingManager.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.core.provisioning.api;
 
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.to.AnyTO;
@@ -42,7 +43,7 @@ public interface MappingManager {
      * @param provision provision information
      * @return connObjectKey internal value
      */
-    String getConnObjectKeyValue(Any<?> any, Provision provision);
+    Optional<String> getConnObjectKeyValue(Any<?> any, Provision provision);
 
     /**
      * Get connObjectKey internal value.

http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/utils/EntityUtils.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/utils/EntityUtils.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/utils/EntityUtils.java
deleted file mode 100644
index 264df5d..0000000
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/utils/EntityUtils.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.core.provisioning.api.utils;
-
-import org.apache.commons.collections4.Transformer;
-import org.apache.syncope.core.persistence.api.entity.Entity;
-
-public final class EntityUtils {
-
-    public static <E extends Entity> Transformer<E, String> keyTransformer() {
-        return new Transformer<E, String>() {
-
-            @Override
-            public String transform(final E input) {
-                return input.getKey();
-            }
-        };
-    }
-
-    /**
-     * Private default constructor, for static-only classes.
-     */
-    private EntityUtils() {
-    }
-}