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 2015/04/21 09:49:53 UTC

[38/40] syncope git commit: [SYNCOPE-119] New security model implemented

[SYNCOPE-119] New security model implemented


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

Branch: refs/heads/SYNCOPE-119
Commit: 65d652af618a54292bb8dcf5cf93147bb6b83c52
Parents: 18958ba
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon Apr 20 16:29:53 2015 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon Apr 20 16:29:53 2015 +0200

----------------------------------------------------------------------
 .../apache/syncope/client/cli/SyncopeAdm.java   |   8 -
 .../client/cli/commands/EntitlementCommand.java |  70 --
 .../client/cli/commands/PolicyCommand.java      |   2 +-
 .../client/console/commons/JexlHelpUtil.java    |  61 --
 .../client/console/commons/JexlHelpUtils.java   |  61 ++
 .../console/commons/PreferenceManager.java      |   9 +-
 .../client/console/commons/PreviewUtil.java     |  62 --
 .../client/console/commons/PreviewUtils.java    |  62 ++
 .../console/pages/DerSchemaModalPage.java       |   6 +-
 .../console/pages/PlainSchemaModalPage.java     |   6 +-
 .../client/console/pages/PolicyModalPage.java   |   2 +-
 .../syncope/client/console/pages/Reports.java   |   6 +-
 .../syncope/client/console/pages/Schema.java    |  31 +-
 .../client/console/panels/DerAttrsPanel.java    |   2 +-
 .../console/panels/GroupDetailsPanel.java       |   6 +-
 .../console/panels/LoggerCategoryPanel.java     |  21 +-
 .../client/console/panels/MembershipsPanel.java |  12 +-
 .../client/console/panels/PlainAttrsPanel.java  |   8 +-
 .../console/panels/ResourceMappingPanel.java    |   6 +-
 .../client/console/panels/ResourcesPanel.java   |   2 +-
 .../client/console/panels/UserDetailsPanel.java |  10 +-
 .../client/console/panels/VirAttrsPanel.java    |   2 +-
 .../client/console/rest/PolicyRestClient.java   |  16 +-
 .../markup/html/form/BinaryFieldPanel.java      |   4 +-
 .../syncope/client/lib/SyncopeClient.java       |  42 +-
 .../client/lib/SyncopeClientFactoryBean.java    |  13 +-
 client/pom.xml                                  |   3 +-
 .../common/lib/AttributableOperations.java      |  88 +-
 .../syncope/common/lib/CollectionUtils2.java    |  25 +
 .../syncope/common/lib/SyncopeConstants.java    |   8 +-
 .../common/lib/mod/AbstractSubjectMod.java      |  10 +
 .../apache/syncope/common/lib/mod/GroupMod.java |  89 +-
 .../apache/syncope/common/lib/mod/UserMod.java  |  31 +-
 .../report/AbstractSubjectReportletConf.java    |  14 +-
 .../common/lib/report/GroupReportletConf.java   |   1 -
 .../search/GroupFiqlSearchConditionBuilder.java |  23 -
 .../common/lib/search/GroupProperty.java        |   6 -
 .../syncope/common/lib/search/SpecialAttr.java  |  28 +-
 .../common/lib/to/AbstractAttributableTO.java   |  45 +-
 .../syncope/common/lib/to/AbstractPolicyTO.java |  20 +-
 .../common/lib/to/AbstractSubjectTO.java        |  10 +
 .../syncope/common/lib/to/AccountPolicyTO.java  |  15 +-
 .../syncope/common/lib/to/BulkActionResult.java |   7 +-
 .../syncope/common/lib/to/ConnObjectTO.java     |  15 +-
 .../apache/syncope/common/lib/to/GroupTO.java   | 136 ---
 .../apache/syncope/common/lib/to/MappingTO.java |  26 +-
 .../syncope/common/lib/to/MembershipTO.java     |  10 +-
 .../syncope/common/lib/to/PasswordPolicyTO.java |  16 +-
 .../apache/syncope/common/lib/to/RoleTO.java    |  10 -
 .../syncope/common/lib/to/SyncPolicyTO.java     |  14 +-
 .../syncope/common/lib/to/SyncTaskTO.java       |  10 +
 .../apache/syncope/common/lib/to/SyncopeTO.java |   9 +
 .../apache/syncope/common/lib/to/UserTO.java    |  11 +-
 .../syncope/common/lib/to/WorkflowFormTO.java   |   5 +-
 .../common/lib/types/AccountPolicySpec.java     |  12 +-
 .../common/lib/types/AuditLoggerName.java       |   9 +-
 .../common/lib/types/ClientExceptionType.java   |   5 +-
 .../syncope/common/lib/types/Entitlement.java   |   9 +-
 .../syncope/common/lib/types/PolicyType.java    |  38 +-
 .../syncope/common/lib/wrap/EntitlementTO.java  |  30 -
 .../syncope/common/rest/api/RESTHeaders.java    |   2 +
 .../rest/api/service/EntitlementService.java    |  53 --
 .../common/rest/api/service/GroupService.java   |  69 +-
 .../common/rest/api/service/PolicyService.java  |  12 -
 .../rest/api/service/UserSelfService.java       |   5 +-
 .../common/rest/api/service/UserService.java    |  44 +-
 .../core/logic/AbstractSubjectLogic.java        |  35 +-
 .../syncope/core/logic/ConnectorLogic.java      |  38 +-
 .../syncope/core/logic/EntitlementLogic.java    |  60 --
 .../apache/syncope/core/logic/GroupLogic.java   | 211 ++---
 .../apache/syncope/core/logic/LoggerLogic.java  |  33 +-
 .../apache/syncope/core/logic/PolicyLogic.java  |  34 +-
 .../syncope/core/logic/ResourceLogic.java       |  44 +-
 .../apache/syncope/core/logic/SchemaLogic.java  |  81 +-
 .../core/logic/SecurityQuestionLogic.java       |   2 +-
 .../apache/syncope/core/logic/SyncopeLogic.java |   5 +
 .../apache/syncope/core/logic/TaskLogic.java    |  97 +-
 .../apache/syncope/core/logic/UserLogic.java    | 147 +---
 .../syncope/core/logic/UserWorkflowLogic.java   |  16 +-
 .../logic/notification/NotificationJob.java     |   4 +-
 .../core/logic/report/GroupReportlet.java       |  40 +-
 .../syncope/core/logic/report/ReportJob.java    |   6 +-
 .../core/logic/report/UserReportlet.java        |  31 +-
 .../resources/report/groupReportlet2csv.xsl     |  12 -
 .../main/resources/report/groupReportlet2fo.xsl |  43 -
 .../resources/report/groupReportlet2html.xsl    |  36 -
 .../syncope/core/logic/NotificationTest.java    |  50 +-
 .../syncope/core/misc/ConnObjectUtil.java       | 763 ----------------
 .../syncope/core/misc/ConnObjectUtils.java      | 746 ++++++++++++++++
 .../apache/syncope/core/misc/ExceptionUtil.java |  47 -
 .../syncope/core/misc/ExceptionUtils2.java      |  47 +
 .../apache/syncope/core/misc/MappingUtil.java   | 738 ----------------
 .../apache/syncope/core/misc/MappingUtils.java  | 735 ++++++++++++++++
 .../apache/syncope/core/misc/RealmUtils.java    |  61 ++
 .../apache/syncope/core/misc/jexl/JexlUtil.java | 285 ------
 .../syncope/core/misc/jexl/JexlUtils.java       | 285 ++++++
 .../core/misc/policy/AccountPolicyEnforcer.java |   4 +-
 .../core/misc/policy/PolicyEvaluator.java       |   7 +-
 .../core/misc/search/SearchCondVisitor.java     |   7 -
 .../core/misc/security/AuthContextUtil.java     |  74 --
 .../core/misc/security/AuthContextUtils.java    |  73 ++
 .../core/misc/security/PasswordGenerator.java   |  56 +-
 .../core/misc/security/SecureRandomUtil.java    |  48 -
 .../core/misc/security/SecureRandomUtils.java   |  48 +
 .../security/SyncopeAuthenticationProvider.java |  47 +-
 .../misc/security/SyncopeGrantedAuthority.java  |  76 ++
 .../security/SyncopeUserDetailsService.java     |  85 +-
 .../misc/security/UnauthorizedException.java    |  30 +
 .../security/UnauthorizedGroupException.java    |  42 -
 .../misc/search/SearchCondConverterTest.java    |  14 -
 .../persistence/api/GroupEntitlementUtil.java   |  92 --
 .../core/persistence/api/dao/DerSchemaDAO.java  |   4 +-
 .../persistence/api/dao/EntitlementDAO.java     |  38 -
 .../core/persistence/api/dao/GroupDAO.java      |  32 +-
 .../persistence/api/dao/PlainSchemaDAO.java     |   4 +-
 .../core/persistence/api/dao/PolicyDAO.java     |   8 -
 .../core/persistence/api/dao/RealmDAO.java      |   5 +
 .../core/persistence/api/dao/SubjectDAO.java    |  10 +-
 .../persistence/api/dao/SubjectSearchDAO.java   |  16 +-
 .../core/persistence/api/dao/UserDAO.java       |   6 +-
 .../core/persistence/api/dao/VirSchemaDAO.java  |   4 +-
 .../api/entity/AttributableUtil.java            |  91 --
 .../api/entity/AttributableUtilFactory.java     |  33 -
 .../api/entity/AttributableUtils.java           |  91 ++
 .../api/entity/AttributableUtilsFactory.java    |  33 +
 .../persistence/api/entity/Entitlement.java     |  29 -
 .../persistence/api/entity/EntityFactory.java   |   2 -
 .../core/persistence/api/entity/PlainAttr.java  |   2 +-
 .../core/persistence/api/entity/Role.java       |   4 -
 .../core/persistence/api/entity/Subject.java    |   4 +
 .../persistence/api/entity/group/Group.java     | 105 +--
 .../persistence/api/entity/task/SyncTask.java   |   5 +
 .../persistence/api/entity/task/TaskUtil.java   |  36 -
 .../api/entity/task/TaskUtilFactory.java        |  33 -
 .../persistence/api/entity/task/TaskUtils.java  |  36 +
 .../api/entity/task/TaskUtilsFactory.java       |  33 +
 .../core/persistence/api/entity/user/User.java  |   7 +
 core/persistence-jpa/pom.xml                    |   5 +
 .../jpa/content/ContentLoaderHandler.java       |   4 +-
 .../persistence/jpa/dao/AbstractSubjectDAO.java |  53 +-
 .../core/persistence/jpa/dao/JPAConfDAO.java    |   6 +-
 .../persistence/jpa/dao/JPADerSchemaDAO.java    |   4 +-
 .../persistence/jpa/dao/JPAEntitlementDAO.java  |  88 --
 .../jpa/dao/JPAExternalResourceDAO.java         |   6 -
 .../core/persistence/jpa/dao/JPAGroupDAO.java   | 293 ++-----
 .../persistence/jpa/dao/JPAPlainSchemaDAO.java  |   4 +-
 .../core/persistence/jpa/dao/JPAPolicyDAO.java  |  84 +-
 .../core/persistence/jpa/dao/JPARealmDAO.java   |  63 +-
 .../core/persistence/jpa/dao/JPARoleDAO.java    |   5 +
 .../jpa/dao/JPASubjectSearchDAO.java            | 118 +--
 .../core/persistence/jpa/dao/JPAUserDAO.java    |  69 +-
 .../persistence/jpa/dao/JPAVirSchemaDAO.java    |   4 +-
 .../jpa/entity/AbstractAttributable.java        |  37 -
 .../persistence/jpa/entity/AbstractDerAttr.java |   4 +-
 .../jpa/entity/AbstractPlainAttr.java           |   4 +-
 .../persistence/jpa/entity/AbstractSubject.java |  19 +
 .../jpa/entity/AnnotatedEntityListener.java     |   4 +-
 .../jpa/entity/JPAAccountPolicy.java            |  12 +-
 .../jpa/entity/JPAAttributableUtil.java         | 879 -------------------
 .../jpa/entity/JPAAttributableUtils.java        | 879 +++++++++++++++++++
 .../persistence/jpa/entity/JPAEntitlement.java  |  62 --
 .../jpa/entity/JPAEntityFactory.java            |  32 +-
 .../jpa/entity/JPAExternalResource.java         |   6 +-
 .../jpa/entity/JPAPasswordPolicy.java           |   9 +-
 .../persistence/jpa/entity/JPAPushPolicy.java   |   5 +-
 .../core/persistence/jpa/entity/JPARealm.java   |  11 +-
 .../core/persistence/jpa/entity/JPARole.java    |  12 -
 .../persistence/jpa/entity/JPASyncPolicy.java   |   9 +-
 .../jpa/entity/JPAttributableUtilFactory.java   |  81 --
 .../jpa/entity/JPAttributableUtilsFactory.java  |  81 ++
 .../persistence/jpa/entity/group/JPAGroup.java  | 336 +------
 .../jpa/entity/membership/JPAMembership.java    |  30 +-
 .../jpa/entity/task/JPASyncTask.java            |  17 +
 .../jpa/entity/task/JPATaskUtil.java            | 152 ----
 .../jpa/entity/task/JPATaskUtilFactory.java     |  91 --
 .../jpa/entity/task/JPATaskUtils.java           | 152 ++++
 .../jpa/entity/task/JPATaskUtilsFactory.java    |  91 ++
 .../persistence/jpa/entity/user/JPAUser.java    |  39 +-
 .../entity/ConnInstanceValidator.java           |   8 +-
 .../jpa/validation/entity/RealmValidator.java   |   3 +-
 .../jpa/validation/entity/UserValidator.java    |  47 +-
 .../src/main/resources/content.xml              |  83 +-
 .../src/main/resources/views.xml                |   6 -
 .../core/persistence/jpa/AbstractTest.java      |   4 +-
 .../core/persistence/jpa/entity/AttrTest.java   |  14 +-
 .../jpa/entity/AttributableSearchTest.java      | 138 ++-
 .../core/persistence/jpa/entity/ConfTest.java   |   4 +-
 .../persistence/jpa/entity/DerSchemaTest.java   |   4 +-
 .../persistence/jpa/entity/EntitlementTest.java |  72 --
 .../core/persistence/jpa/entity/GroupTest.java  |  77 +-
 .../persistence/jpa/entity/PlainSchemaTest.java |   2 +-
 .../core/persistence/jpa/entity/PolicyTest.java |  20 +-
 .../core/persistence/jpa/entity/RealmTest.java  |  11 +-
 .../core/persistence/jpa/entity/RoleTest.java   |  16 -
 .../core/persistence/jpa/entity/UserTest.java   |  45 +-
 .../persistence/jpa/entity/VirSchemaTest.java   |   4 +-
 .../persistence/jpa/relationship/AttrTest.java  |   2 +-
 .../relationship/AttributableSearchTest.java    |  10 +-
 .../jpa/relationship/DerSchemaTest.java         |   2 +-
 .../jpa/relationship/EntitlementTest.java       |  57 --
 .../persistence/jpa/relationship/GroupTest.java |  43 +-
 .../jpa/relationship/PlainSchemaTest.java       |   6 +-
 .../src/test/resources/content.xml              | 281 ++----
 .../src/test/resources/simplelogger.properties  |   4 +
 .../provisioning/api/ConnIdBundleManager.java   |   6 +-
 .../core/provisioning/api/ConnPoolConfUtil.java |  69 --
 .../provisioning/api/ConnPoolConfUtils.java     |  69 ++
 .../api/GroupProvisioningManager.java           |   7 +-
 .../provisioning/api/ProvisioningManager.java   |   6 +-
 .../syncope/core/provisioning/api/URIUtil.java  |  61 --
 .../syncope/core/provisioning/api/URIUtils.java |  61 ++
 .../api/UserProvisioningManager.java            |  16 +-
 .../provisioning/api/data/SchemaDataBinder.java |   6 +-
 .../provisioning/api/data/TaskDataBinder.java   |   8 +-
 .../api/propagation/PropagationManager.java     | 154 ++--
 .../java/ConnIdBundleManagerImpl.java           |  18 +-
 .../provisioning/java/ConnectorFacadeProxy.java |   7 +-
 .../java/DefaultGroupProvisioningManager.java   |  61 +-
 .../java/DefaultUserProvisioningManager.java    | 106 ++-
 .../core/provisioning/java/VirAttrHandler.java  |  46 +-
 .../java/cache/DisabledVirAttrCache.java        |   4 +
 .../java/cache/MemoryVirAttrCache.java          |  22 +-
 .../data/AbstractAttributableDataBinder.java    | 156 ++--
 .../java/data/ConfigurationDataBinderImpl.java  |   4 +-
 .../java/data/ConnInstanceDataBinderImpl.java   |  37 +-
 .../java/data/GroupDataBinderImpl.java          | 211 +----
 .../java/data/PolicyDataBinderImpl.java         |  44 +-
 .../java/data/ResourceDataBinderImpl.java       |  67 +-
 .../java/data/RoleDataBinderImpl.java           |  21 +-
 .../java/data/SchemaDataBinderImpl.java         |  12 +-
 .../java/data/TaskDataBinderImpl.java           |  62 +-
 .../java/data/UserDataBinderImpl.java           | 137 ++-
 .../provisioning/java/job/AbstractTaskJob.java  |   4 +-
 .../notification/NotificationManagerImpl.java   |  32 +-
 .../AbstractPropagationTaskExecutor.java        |  20 +-
 .../propagation/DefaultPropagationReporter.java |  10 +-
 .../LDAPMembershipPropagationActions.java       |  10 +-
 .../propagation/PropagationManagerImpl.java     | 331 ++-----
 .../java/sync/AbstractProvisioningJob.java      |  29 +-
 .../java/sync/AbstractPushResultHandler.java    |  26 +-
 .../java/sync/AbstractSyncResultHandler.java    | 118 ++-
 .../java/sync/AbstractSyncopeResultHandler.java |  14 +-
 .../java/sync/GroupPushResultHandlerImpl.java   |  16 +-
 .../java/sync/GroupSyncResultHandlerImpl.java   |  22 +-
 .../java/sync/LDAPMembershipSyncActions.java    |   7 +-
 .../provisioning/java/sync/PushJobImpl.java     |  59 +-
 .../provisioning/java/sync/SyncJobImpl.java     |  17 +-
 .../provisioning/java/sync/SyncUtilities.java   | 419 ---------
 .../core/provisioning/java/sync/SyncUtils.java  | 403 +++++++++
 .../java/sync/UserPushResultHandlerImpl.java    |  16 +-
 .../java/sync/UserSyncResultHandlerImpl.java    |  24 +-
 .../src/main/resources/provisioning.properties  |   1 +
 .../src/main/resources/provisioningContext.xml  |   2 +-
 .../rest/cxf/RestServiceExceptionMapper.java    |   9 +-
 .../rest/cxf/service/AbstractServiceImpl.java   |   4 +-
 .../rest/cxf/service/ConnectorServiceImpl.java  |  35 +-
 .../cxf/service/EntitlementServiceImpl.java     |  44 -
 .../core/rest/cxf/service/GroupServiceImpl.java |  92 +-
 .../rest/cxf/service/PolicyServiceImpl.java     |  34 +-
 .../core/rest/cxf/service/RealmServiceImpl.java |   9 +-
 .../rest/cxf/service/ResourceServiceImpl.java   |  22 +-
 .../core/rest/cxf/service/TaskServiceImpl.java  |  43 +-
 .../rest/cxf/service/UserSelfServiceImpl.java   |  11 +-
 .../core/rest/cxf/service/UserServiceImpl.java  | 108 ++-
 .../activiti/ActivitiUserWorkflowAdapter.java   |  49 +-
 .../activiti/SyncopeGroupQueryImpl.java         |  26 +-
 .../workflow/activiti/SyncopeUserManager.java   |   6 +-
 .../workflow/activiti/SyncopeUserQueryImpl.java |  26 +-
 .../core/workflow/api/UserWorkflowAdapter.java  |  10 +-
 .../java/AbstractUserWorkflowAdapter.java       |   6 +-
 .../java/DefaultUserWorkflowAdapter.java        |  21 +-
 .../core/logic/init/CamelRouteLoader.java       |  28 -
 .../camel/CamelGroupProvisioningManager.java    |  17 +-
 .../camel/CamelUserProvisioningManager.java     |  37 +-
 .../processor/GroupCreateInSyncProcessor.java   |  15 +-
 .../camel/processor/GroupCreateProcessor.java   |  10 +-
 .../camel/processor/GroupDeleteProcessor.java   |  19 +-
 .../processor/GroupDeprovisionProcessor.java    |   8 +-
 .../camel/processor/GroupUpdateProcessor.java   |  10 +-
 .../processor/UserConfirmPwdResetProcessor.java |   2 +-
 .../camel/processor/UserCreateProcessor.java    |  20 +-
 .../camel/processor/UserDeleteProcessor.java    |   2 +-
 .../processor/UserDeprovisionProcessor.java     |  14 +-
 .../processor/UserInnerSuspendProcessor.java    |  12 +-
 .../processor/UserSetStatusInSyncProcessor.java |   4 -
 .../UserStatusPropagationProcessor.java         |  14 +-
 .../processor/UserUpdateInSyncProcessor.java    |  14 +-
 .../camel/processor/UserUpdateProcessor.java    |  12 +-
 .../src/main/resources/provisioning.properties  |   1 +
 .../fit/core/reference/TestSyncActions.java     |   6 +-
 .../main/resources/all/provisioning.properties  |   1 +
 .../src/main/resources/log4j2.xml               |   3 +
 .../src/main/resources/provisioning.properties  |   1 +
 .../fit/core/reference/AbstractITCase.java      |  20 +-
 .../core/reference/AuthenticationITCase.java    | 266 +++---
 .../fit/core/reference/CamelRouteITCase.java    |  58 +-
 .../fit/core/reference/ConfigurationITCase.java |   5 +-
 .../fit/core/reference/ConnectorITCase.java     |   2 +-
 .../syncope/fit/core/reference/GroupITCase.java | 259 +-----
 .../fit/core/reference/NotificationITCase.java  |   2 +-
 .../core/reference/NotificationTaskITCase.java  |   2 +-
 .../fit/core/reference/PlainSchemaITCase.java   |   2 +-
 .../fit/core/reference/PolicyITCase.java        |  63 +-
 .../fit/core/reference/PushTaskITCase.java      |   2 +-
 .../syncope/fit/core/reference/RealmITCase.java |   3 +-
 .../syncope/fit/core/reference/RoleITCase.java  |   6 +-
 .../fit/core/reference/SearchITCase.java        |  54 +-
 .../fit/core/reference/SyncTaskITCase.java      |  46 +-
 .../syncope/fit/core/reference/UserITCase.java  | 138 ++-
 .../fit/core/reference/UserSelfITCase.java      |  32 +-
 .../fit/core/reference/UserWorkflowITCase.java  |  10 +-
 .../fit/core/reference/VirAttrITCase.java       |  26 +-
 installer/src/main/resources/izpack/install.xml |   2 +-
 pom.xml                                         |   4 +-
 314 files changed, 7359 insertions(+), 9938 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/cli/src/main/java/org/apache/syncope/client/cli/SyncopeAdm.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/SyncopeAdm.java b/client/cli/src/main/java/org/apache/syncope/client/cli/SyncopeAdm.java
index 2bb802f..9774a30 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/SyncopeAdm.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/SyncopeAdm.java
@@ -21,7 +21,6 @@ package org.apache.syncope.client.cli;
 import com.beust.jcommander.JCommander;
 import com.beust.jcommander.ParameterException;
 import org.apache.syncope.client.cli.commands.ConfigurationCommand;
-import org.apache.syncope.client.cli.commands.EntitlementCommand;
 import org.apache.syncope.client.cli.commands.LoggerCommand;
 import org.apache.syncope.client.cli.commands.NotificationCommand;
 import org.apache.syncope.client.cli.commands.PolicyCommand;
@@ -54,8 +53,6 @@ public class SyncopeAdm {
 
     private static PolicyCommand policyCommand;
 
-    private static EntitlementCommand entitlementCommand;
-
     public static void main(final String[] args) {
         LOG.debug("Starting with args \n");
 
@@ -96,9 +93,6 @@ public class SyncopeAdm {
         policyCommand = new PolicyCommand();
         jcommander.addCommand(policyCommand);
         LOG.debug("Added PolicyCommand");
-        entitlementCommand = new EntitlementCommand();
-        jcommander.addCommand(entitlementCommand);
-        LOG.debug("Added EntitlementCommand");
     }
 
     private static void executeCommand() {
@@ -116,8 +110,6 @@ public class SyncopeAdm {
             reportCommand.execute();
         } else if ("policy".equalsIgnoreCase(command)) {
             policyCommand.execute();
-        } else if ("entitlement".equalsIgnoreCase(command)) {
-            entitlementCommand.execute();
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/cli/src/main/java/org/apache/syncope/client/cli/commands/EntitlementCommand.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/EntitlementCommand.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/EntitlementCommand.java
deleted file mode 100644
index e0058ab..0000000
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/EntitlementCommand.java
+++ /dev/null
@@ -1,70 +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.client.cli.commands;
-
-import com.beust.jcommander.Parameter;
-import com.beust.jcommander.Parameters;
-import org.apache.syncope.client.cli.SyncopeServices;
-import org.apache.syncope.common.lib.wrap.EntitlementTO;
-import org.apache.syncope.common.rest.api.service.EntitlementService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Parameters(
-        commandNames = "entitlement",
-        optionPrefixes = "-",
-        separators = "=",
-        commandDescription = "Apache Syncope entitlement service")
-public class EntitlementCommand extends AbstractCommand {
-
-    private static final Logger LOG = LoggerFactory.getLogger(EntitlementCommand.class);
-
-    private final String helpMessage = "Usage: entitlement [options]\n"
-            + "  Options:\n"
-            + "    -h, --help \n"
-            + "    -l, --list \n"
-            + "    -lo, --list-own \n";
-
-    @Parameter(names = { "-lo", "--list-own" })
-    public boolean listOwn = false;
-
-    @Override
-    public void execute() {
-        final EntitlementService entitlementService = SyncopeServices.get(EntitlementService.class);
-        LOG.debug("Entitlement service successfully created");
-
-        if (help) {
-            LOG.debug("- entitlement help command");
-            System.out.println(helpMessage);
-        } else if (list) {
-            System.out.println("All entitlement:");
-            for (final EntitlementTO entitlementTO : entitlementService.getAllEntitlements()) {
-                System.out.println("  *** " + entitlementTO.getElement());
-            }
-        } else if (listOwn) {
-            System.out.println("All own entitlement:");
-            for (final EntitlementTO entitlementTO : entitlementService.getOwnEntitlements()) {
-                System.out.println("  *** " + entitlementTO.getElement());
-            }
-        } else {
-            System.out.println(helpMessage);
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/cli/src/main/java/org/apache/syncope/client/cli/commands/PolicyCommand.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/PolicyCommand.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/PolicyCommand.java
index c2bcb5f..086ab25 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/PolicyCommand.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/PolicyCommand.java
@@ -79,7 +79,7 @@ public class PolicyCommand extends AbstractCommand {
             } catch (final IllegalArgumentException ex) {
                 System.out.println(" - Error: " + policyType + " isn't a valid policy type, try with:");
                 for (final PolicyType type : PolicyType.values()) {
-                    System.out.println("  *** " + type.name() + ": " + type.getDescription());
+                    System.out.println("  *** " + type.name());
                 }
             }
         } else if (policyIdToRead > -1L) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/console/src/main/java/org/apache/syncope/client/console/commons/JexlHelpUtil.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/JexlHelpUtil.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/JexlHelpUtil.java
deleted file mode 100644
index 5cfd3ce..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/JexlHelpUtil.java
+++ /dev/null
@@ -1,61 +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.client.console.commons;
-
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.markup.html.AjaxLink;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.link.ExternalLink;
-
-public final class JexlHelpUtil {
-
-    private static final String JEXL_SYNTAX_URL = "http://commons.apache.org/jexl/reference/syntax.html";
-
-    private JexlHelpUtil() {
-        // private constructor for static utility class
-    }
-
-    public static WebMarkupContainer getJexlHelpWebContainer(final String wicketId) {
-        final WebMarkupContainer jexlHelp = new WebMarkupContainer(wicketId);
-        jexlHelp.setVisible(false);
-        jexlHelp.setOutputMarkupPlaceholderTag(true);
-        jexlHelp.setOutputMarkupId(true);
-        jexlHelp.add(new ExternalLink("jexlLink", JEXL_SYNTAX_URL));
-        return jexlHelp;
-    }
-
-    public static AjaxLink<Void> getAjaxLink(final WebMarkupContainer wmc, final String wicketId) {
-        AjaxLink<Void> questionMarkJexlHelp = new AjaxLink<Void>(wicketId) {
-
-            private static final long serialVersionUID = -1838017408000591382L;
-
-            private boolean toogle = false;
-
-            @Override
-            public void onClick(final AjaxRequestTarget target) {
-                // using bitwise inversion as suggested by 
-                // http://pmd.sourceforge.net/pmd-4.2.5/rules/controversial.html#BooleanInversion
-                toogle ^= true;
-                wmc.setVisible(toogle);
-                target.add(wmc);
-            }
-        };
-        return questionMarkJexlHelp;
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/console/src/main/java/org/apache/syncope/client/console/commons/JexlHelpUtils.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/JexlHelpUtils.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/JexlHelpUtils.java
new file mode 100644
index 0000000..b29d180
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/JexlHelpUtils.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.commons;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.link.ExternalLink;
+
+public final class JexlHelpUtils {
+
+    private static final String JEXL_SYNTAX_URL = "http://commons.apache.org/jexl/reference/syntax.html";
+
+    private JexlHelpUtils() {
+        // private constructor for static utility class
+    }
+
+    public static WebMarkupContainer getJexlHelpWebContainer(final String wicketId) {
+        final WebMarkupContainer jexlHelp = new WebMarkupContainer(wicketId);
+        jexlHelp.setVisible(false);
+        jexlHelp.setOutputMarkupPlaceholderTag(true);
+        jexlHelp.setOutputMarkupId(true);
+        jexlHelp.add(new ExternalLink("jexlLink", JEXL_SYNTAX_URL));
+        return jexlHelp;
+    }
+
+    public static AjaxLink<Void> getAjaxLink(final WebMarkupContainer wmc, final String wicketId) {
+        AjaxLink<Void> questionMarkJexlHelp = new AjaxLink<Void>(wicketId) {
+
+            private static final long serialVersionUID = -1838017408000591382L;
+
+            private boolean toogle = false;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target) {
+                // using bitwise inversion as suggested by 
+                // http://pmd.sourceforge.net/pmd-4.2.5/rules/controversial.html#BooleanInversion
+                toogle ^= true;
+                wmc.setVisible(toogle);
+                target.add(wmc);
+            }
+        };
+        return questionMarkJexlHelp;
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/console/src/main/java/org/apache/syncope/client/console/commons/PreferenceManager.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/PreferenceManager.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/PreferenceManager.java
index c9b27fc..a4e246e 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/PreferenceManager.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/PreferenceManager.java
@@ -27,7 +27,6 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import org.apache.commons.lang3.math.NumberUtils;
 import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Response;
@@ -130,15 +129,15 @@ public class PreferenceManager {
     }
 
     public void set(final Request request, final Response response, final Map<String, List<String>> prefs) {
-        String prefString = cookieUtils.load(PREFMAN_KEY);
+        Map<String, String> current = new HashMap<>();
 
-        final Map<String, String> current = new HashMap<String, String>();
+        String prefString = cookieUtils.load(PREFMAN_KEY);
         if (prefString != null) {
             current.putAll(getPrefs(new String(Base64.decodeBase64(prefString.getBytes()))));
         }
 
         // after retrieved previous setting in order to overwrite the key ...
-        for (Entry<String, List<String>> entry : prefs.entrySet()) {
+        for (Map.Entry<String, List<String>> entry : prefs.entrySet()) {
             current.put(entry.getKey(), StringUtils.collectionToDelimitedString(entry.getValue(), ";"));
         }
 
@@ -152,7 +151,7 @@ public class PreferenceManager {
     public void set(final Request request, final Response response, final String key, final String value) {
         String prefString = cookieUtils.load(PREFMAN_KEY);
 
-        final Map<String, String> current = new HashMap<String, String>();
+        final Map<String, String> current = new HashMap<>();
         if (prefString != null) {
             current.putAll(getPrefs(new String(Base64.decodeBase64(prefString.getBytes()))));
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/console/src/main/java/org/apache/syncope/client/console/commons/PreviewUtil.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/PreviewUtil.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/PreviewUtil.java
deleted file mode 100644
index 98e47c0..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/PreviewUtil.java
+++ /dev/null
@@ -1,62 +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.client.console.commons;
-
-import java.lang.reflect.InvocationTargetException;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.syncope.client.console.init.ImplementationClassNamesLoader;
-import org.apache.syncope.client.console.wicket.markup.html.form.preview.AbstractBinaryPreviewer;
-import org.apache.wicket.Component;
-import org.apache.wicket.util.crypt.Base64;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.util.ClassUtils;
-
-@org.springframework.stereotype.Component
-public class PreviewUtil {
-
-    @Autowired
-    private ImplementationClassNamesLoader implementationClassNamesLoader;
-
-    public Component getPreviewer(final String mimeType, final String file)
-            throws InstantiationException, IllegalAccessException, InvocationTargetException {
-
-        final Class<? extends AbstractBinaryPreviewer> previewer = StringUtils.isBlank(file)
-                ? null
-                : implementationClassNamesLoader.getPreviewerClass(mimeType);
-
-        return previewer == null
-                ? null
-                : ClassUtils.getConstructorIfAvailable(previewer, String.class, String.class, byte[].class).
-                newInstance(new Object[] { "previewer", mimeType, Base64.decodeBase64(file) }).
-                preview();
-    }
-
-    public Component getPreviewer(final String mimeType, final byte[] file)
-            throws InstantiationException, IllegalAccessException, InvocationTargetException {
-
-        final Class<? extends AbstractBinaryPreviewer> previewer =
-                implementationClassNamesLoader.getPreviewerClass(mimeType);
-
-        return previewer == null
-                ? null
-                : ClassUtils.getConstructorIfAvailable(previewer, String.class, String.class, byte[].class).
-                newInstance(new Object[] { "previewer", mimeType, file }).
-                preview();
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/console/src/main/java/org/apache/syncope/client/console/commons/PreviewUtils.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/PreviewUtils.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/PreviewUtils.java
new file mode 100644
index 0000000..12c93d4
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/PreviewUtils.java
@@ -0,0 +1,62 @@
+/*
+ * 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.client.console.commons;
+
+import java.lang.reflect.InvocationTargetException;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.client.console.init.ImplementationClassNamesLoader;
+import org.apache.syncope.client.console.wicket.markup.html.form.preview.AbstractBinaryPreviewer;
+import org.apache.wicket.Component;
+import org.apache.wicket.util.crypt.Base64;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.ClassUtils;
+
+@org.springframework.stereotype.Component
+public class PreviewUtils {
+
+    @Autowired
+    private ImplementationClassNamesLoader implementationClassNamesLoader;
+
+    public Component getPreviewer(final String mimeType, final String file)
+            throws InstantiationException, IllegalAccessException, InvocationTargetException {
+
+        final Class<? extends AbstractBinaryPreviewer> previewer = StringUtils.isBlank(file)
+                ? null
+                : implementationClassNamesLoader.getPreviewerClass(mimeType);
+
+        return previewer == null
+                ? null
+                : ClassUtils.getConstructorIfAvailable(previewer, String.class, String.class, byte[].class).
+                newInstance(new Object[] { "previewer", mimeType, Base64.decodeBase64(file) }).
+                preview();
+    }
+
+    public Component getPreviewer(final String mimeType, final byte[] file)
+            throws InstantiationException, IllegalAccessException, InvocationTargetException {
+
+        final Class<? extends AbstractBinaryPreviewer> previewer =
+                implementationClassNamesLoader.getPreviewerClass(mimeType);
+
+        return previewer == null
+                ? null
+                : ClassUtils.getConstructorIfAvailable(previewer, String.class, String.class, byte[].class).
+                newInstance(new Object[] { "previewer", mimeType, file }).
+                preview();
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/console/src/main/java/org/apache/syncope/client/console/pages/DerSchemaModalPage.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/DerSchemaModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/DerSchemaModalPage.java
index 98f4fbb..1abe744 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/DerSchemaModalPage.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/DerSchemaModalPage.java
@@ -19,7 +19,7 @@
 package org.apache.syncope.client.console.pages;
 
 import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.commons.JexlHelpUtil;
+import org.apache.syncope.client.console.commons.JexlHelpUtils;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.DerSchemaTO;
@@ -68,9 +68,9 @@ public class DerSchemaModalPage extends AbstractSchemaModalPage<DerSchemaTO> {
                 new PropertyModel<String>(schema, "expression"));
         expression.addRequiredLabel();
 
-        final WebMarkupContainer jexlHelp = JexlHelpUtil.getJexlHelpWebContainer("jexlHelp");
+        final WebMarkupContainer jexlHelp = JexlHelpUtils.getJexlHelpWebContainer("jexlHelp");
 
-        final AjaxLink<Void> questionMarkJexlHelp = JexlHelpUtil.getAjaxLink(jexlHelp, "questionMarkJexlHelp");
+        final AjaxLink<Void> questionMarkJexlHelp = JexlHelpUtils.getAjaxLink(jexlHelp, "questionMarkJexlHelp");
         schemaForm.add(questionMarkJexlHelp);
         questionMarkJexlHelp.add(jexlHelp);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/console/src/main/java/org/apache/syncope/client/console/pages/PlainSchemaModalPage.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/PlainSchemaModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/PlainSchemaModalPage.java
index bad0ae7..3adba7d 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/PlainSchemaModalPage.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/PlainSchemaModalPage.java
@@ -25,7 +25,7 @@ import java.util.Iterator;
 import java.util.List;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.commons.JexlHelpUtil;
+import org.apache.syncope.client.console.commons.JexlHelpUtils;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
@@ -218,9 +218,9 @@ public class PlainSchemaModalPage extends AbstractSchemaModalPage<PlainSchemaTO>
         });
         schemaForm.add(mandatoryCondition);
 
-        final WebMarkupContainer pwdJexlHelp = JexlHelpUtil.getJexlHelpWebContainer("jexlHelp");
+        final WebMarkupContainer pwdJexlHelp = JexlHelpUtils.getJexlHelpWebContainer("jexlHelp");
 
-        final AjaxLink<Void> pwdQuestionMarkJexlHelp = JexlHelpUtil.getAjaxLink(pwdJexlHelp, "questionMarkJexlHelp");
+        final AjaxLink<Void> pwdQuestionMarkJexlHelp = JexlHelpUtils.getAjaxLink(pwdJexlHelp, "questionMarkJexlHelp");
         schemaForm.add(pwdQuestionMarkJexlHelp);
         pwdQuestionMarkJexlHelp.add(pwdJexlHelp);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/console/src/main/java/org/apache/syncope/client/console/pages/PolicyModalPage.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/PolicyModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/PolicyModalPage.java
index 8daecb7..ead376a 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/PolicyModalPage.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/PolicyModalPage.java
@@ -72,7 +72,7 @@ import org.apache.wicket.spring.injection.annot.SpringBean;
 /**
  * Modal window with Resource form.
  */
-public class PolicyModalPage<T extends AbstractPolicyTO> extends BaseModalPage {
+public class PolicyModalPage<T extends AbstractPolicyTO<?>> extends BaseModalPage {
 
     private static final long serialVersionUID = -7325772767481076679L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/console/src/main/java/org/apache/syncope/client/console/pages/Reports.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Reports.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Reports.java
index a7b9c6c..e484701 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/Reports.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/Reports.java
@@ -22,7 +22,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.commons.PreferenceManager;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
@@ -328,7 +328,7 @@ public class Reports extends BasePage {
 
                             for (String toBeRemoved : eventSelectionChanged.getToBeRemoved()) {
                                 if (events.contains(toBeRemoved)) {
-                                    final Map.Entry<EventCategoryTO, Result> eventCategory =
+                                    Pair<EventCategoryTO, Result> eventCategory =
                                     AuditLoggerName.parseEventCategory(toBeRemoved);
 
                                     final AuditLoggerName auditLoggerName = new AuditLoggerName(
@@ -346,7 +346,7 @@ public class Reports extends BasePage {
 
                             for (String toBeAdded : eventSelectionChanged.getToBeAdded()) {
                                 if (!events.contains(toBeAdded)) {
-                                    final Map.Entry<EventCategoryTO, Result> eventCategory =
+                                    Pair<EventCategoryTO, Result> eventCategory =
                                     AuditLoggerName.parseEventCategory(toBeAdded);
 
                                     final AuditLoggerName auditLoggerName = new AuditLoggerName(

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/console/src/main/java/org/apache/syncope/client/console/pages/Schema.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Schema.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Schema.java
index 9bfba54..cffb7cd 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/Schema.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/Schema.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.client.console.pages;
 
 import java.lang.reflect.Field;
-import java.util.AbstractMap.SimpleEntry;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -29,6 +28,8 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.commons.PreferenceManager;
 import org.apache.syncope.client.console.commons.SchemaModalPageFactory;
@@ -95,31 +96,31 @@ public class Schema extends BasePage {
         }
     };
 
-    private static final Map<Map.Entry<AttributableType, SchemaType>, String> PAGINATOR_ROWS_KEYS =
-            new HashMap<Map.Entry<AttributableType, SchemaType>, String>() {
+    private static final Map<Pair<AttributableType, SchemaType>, String> PAGINATOR_ROWS_KEYS =
+            new HashMap<Pair<AttributableType, SchemaType>, String>() {
 
                 private static final long serialVersionUID = 3109256773218160485L;
 
                 {
-                    put(new SimpleEntry<>(AttributableType.CONFIGURATION, SchemaType.PLAIN),
+                    put(new ImmutablePair<>(AttributableType.CONFIGURATION, SchemaType.PLAIN),
                             Constants.PREF_CONF_SCHEMA_PAGINATOR_ROWS);
-                    put(new SimpleEntry<>(AttributableType.USER, SchemaType.PLAIN),
+                    put(new ImmutablePair<>(AttributableType.USER, SchemaType.PLAIN),
                             Constants.PREF_USER_PLAIN_SCHEMA_PAGINATOR_ROWS);
-                    put(new SimpleEntry<>(AttributableType.USER, SchemaType.DERIVED),
+                    put(new ImmutablePair<>(AttributableType.USER, SchemaType.DERIVED),
                             Constants.PREF_USER_DER_SCHEMA_PAGINATOR_ROWS);
-                    put(new SimpleEntry<>(AttributableType.USER, SchemaType.VIRTUAL),
+                    put(new ImmutablePair<>(AttributableType.USER, SchemaType.VIRTUAL),
                             Constants.PREF_USER_VIR_SCHEMA_PAGINATOR_ROWS);
-                    put(new SimpleEntry<>(AttributableType.MEMBERSHIP, SchemaType.PLAIN),
+                    put(new ImmutablePair<>(AttributableType.MEMBERSHIP, SchemaType.PLAIN),
                             Constants.PREF_MEMBERSHIP_PLAIN_SCHEMA_PAGINATOR_ROWS);
-                    put(new SimpleEntry<>(AttributableType.MEMBERSHIP, SchemaType.DERIVED),
+                    put(new ImmutablePair<>(AttributableType.MEMBERSHIP, SchemaType.DERIVED),
                             Constants.PREF_MEMBERSHIP_DER_SCHEMA_PAGINATOR_ROWS);
-                    put(new SimpleEntry<>(AttributableType.MEMBERSHIP, SchemaType.VIRTUAL),
+                    put(new ImmutablePair<>(AttributableType.MEMBERSHIP, SchemaType.VIRTUAL),
                             Constants.PREF_MEMBERSHIP_VIR_SCHEMA_PAGINATOR_ROWS);
-                    put(new SimpleEntry<>(AttributableType.GROUP, SchemaType.PLAIN),
+                    put(new ImmutablePair<>(AttributableType.GROUP, SchemaType.PLAIN),
                             Constants.PREF_GROUP_PLAIN_SCHEMA_PAGINATOR_ROWS);
-                    put(new SimpleEntry<>(AttributableType.GROUP, SchemaType.DERIVED),
+                    put(new ImmutablePair<>(AttributableType.GROUP, SchemaType.DERIVED),
                             Constants.PREF_GROUP_DER_SCHEMA_PAGINATOR_ROWS);
-                    put(new SimpleEntry<>(AttributableType.GROUP, SchemaType.VIRTUAL),
+                    put(new ImmutablePair<>(AttributableType.GROUP, SchemaType.VIRTUAL),
                             Constants.PREF_GROUP_VIR_SCHEMA_PAGINATOR_ROWS);
                 }
             };
@@ -304,7 +305,7 @@ public class Schema extends BasePage {
             final AjaxFallbackDefaultDataTable dataTable,
             final String formname, final SchemaTypePanel schemaTypePanel, final String rowsPerPagePrefName) {
 
-        Form<Void> form = new Form<Void>(formname);
+        Form<Void> form = new Form<>(formname);
 
         final DropDownChoice<Integer> rowChooser = new DropDownChoice<Integer>("rowsChooser",
                 new PropertyModel<Integer>(schemaTypePanel, "pageRows"), prefMan.getPaginatorChoices(),
@@ -449,7 +450,7 @@ public class Schema extends BasePage {
             setWindowClosedCallback(editSchemaWin, schemaContainer);
 
             final String paginatorRowsKey = PAGINATOR_ROWS_KEYS.get(
-                    new SimpleEntry<AttributableType, SchemaType>(attrType, schemaType));
+                    new ImmutablePair<AttributableType, SchemaType>(attrType, schemaType));
             pageRows = prefMan.getPaginatorRows(getRequest(), paginatorRowsKey);
 
             List<IColumn> tableCols = getColumns(schemaContainer, editSchemaWin, attrType,

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/console/src/main/java/org/apache/syncope/client/console/panels/DerAttrsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/DerAttrsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/DerAttrsPanel.java
index c8872b5..8be459a 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/DerAttrsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/DerAttrsPanel.java
@@ -100,7 +100,7 @@ public class DerAttrsPanel extends Panel {
                 } else if (entityTO instanceof UserTO) {
                     derSchemaNames = schemaRestClient.getDerSchemaNames(AttributableType.USER);
                 } else {
-                    derSchemaNames = groupRestClient.read(((MembershipTO) entityTO).getGroupId()).getMDerAttrTemplates();
+                    derSchemaNames = groupRestClient.read(((MembershipTO) entityTO).getGroupKey()).getMDerAttrTemplates();
                 }
 
                 return derSchemaNames;

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDetailsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDetailsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDetailsPanel.java
index 4af9d25..7662e4a 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDetailsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDetailsPanel.java
@@ -19,7 +19,7 @@
 package org.apache.syncope.client.console.panels;
 
 import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.commons.JexlHelpUtil;
+import org.apache.syncope.client.console.commons.JexlHelpUtils;
 import org.apache.syncope.client.console.pages.GroupSelectModalPage;
 import org.apache.syncope.client.console.pages.UserOwnerSelectModalPage;
 import org.apache.syncope.client.console.panels.AttrTemplatesPanel.GroupAttrTemplatesChange;
@@ -142,9 +142,9 @@ public class GroupDetailsPanel extends Panel {
         final AjaxTextFieldPanel name =
                 new AjaxTextFieldPanel("name", "name", new PropertyModel<String>(groupTO, "key"));
 
-        final WebMarkupContainer jexlHelp = JexlHelpUtil.getJexlHelpWebContainer("jexlHelp");
+        final WebMarkupContainer jexlHelp = JexlHelpUtils.getJexlHelpWebContainer("jexlHelp");
 
-        final AjaxLink<Void> questionMarkJexlHelp = JexlHelpUtil.getAjaxLink(jexlHelp, "questionMarkJexlHelp");
+        final AjaxLink<Void> questionMarkJexlHelp = JexlHelpUtils.getAjaxLink(jexlHelp, "questionMarkJexlHelp");
         this.add(questionMarkJexlHelp);
         questionMarkJexlHelp.add(jexlHelp);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/console/src/main/java/org/apache/syncope/client/console/panels/LoggerCategoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/LoggerCategoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/LoggerCategoryPanel.java
index aa3c3eb..70e0361 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/LoggerCategoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/LoggerCategoryPanel.java
@@ -24,9 +24,9 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.panels.SelectedEventsPanel.EventSelectionChanged;
 import org.apache.syncope.client.console.panels.SelectedEventsPanel.InspectSelectedEvent;
@@ -52,16 +52,9 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
 import org.apache.wicket.model.ResourceModel;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public abstract class LoggerCategoryPanel extends Panel {
 
-    /**
-     * Logger.
-     */
-    private static final Logger LOG = LoggerFactory.getLogger(LoggerCategoryPanel.class);
-
     private static final long serialVersionUID = 6429053774964787734L;
 
     private final List<EventCategoryTO> eventCategoryTOs;
@@ -207,7 +200,7 @@ public abstract class LoggerCategoryPanel extends Panel {
             @Override
             public void onClick(final AjaxRequestTarget target) {
                 if (StringUtils.isNotBlank(custom.getModelObject())) {
-                    final Map.Entry<EventCategoryTO, AuditElements.Result> parsed =
+                    final Pair<EventCategoryTO, AuditElements.Result> parsed =
                             AuditLoggerName.parseEventCategory(custom.getModelObject());
 
                     final String eventString = AuditLoggerName.buildEvent(
@@ -233,12 +226,12 @@ public abstract class LoggerCategoryPanel extends Panel {
             private static final long serialVersionUID = -3722207913631435502L;
 
             @Override
-            public void onClick(AjaxRequestTarget target) {
+            public void onClick(final AjaxRequestTarget target) {
                 if (StringUtils.isNotBlank(custom.getModelObject())) {
-                    final Map.Entry<EventCategoryTO, AuditElements.Result> parsed =
+                    Pair<EventCategoryTO, AuditElements.Result> parsed =
                             AuditLoggerName.parseEventCategory(custom.getModelObject());
 
-                    final String eventString = AuditLoggerName.buildEvent(
+                    String eventString = AuditLoggerName.buildEvent(
                             parsed.getKey().getType(),
                             null,
                             null,
@@ -351,9 +344,9 @@ public abstract class LoggerCategoryPanel extends Panel {
             // update objects ....
             eventCategoryTO.getEvents().clear();
 
-            final InspectSelectedEvent inspectSelectedEvent = (InspectSelectedEvent) event.getPayload();
+            InspectSelectedEvent inspectSelectedEvent = (InspectSelectedEvent) event.getPayload();
 
-            final Map.Entry<EventCategoryTO, AuditElements.Result> categoryEvent =
+            Pair<EventCategoryTO, AuditElements.Result> categoryEvent =
                     AuditLoggerName.parseEventCategory(inspectSelectedEvent.getEvent());
 
             eventCategoryTO.setType(categoryEvent.getKey().getType());

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/console/src/main/java/org/apache/syncope/client/console/panels/MembershipsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/MembershipsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/MembershipsPanel.java
index 9136462..fa0a9bc 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/MembershipsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/MembershipsPanel.java
@@ -126,12 +126,12 @@ public class MembershipsPanel extends Panel {
                                     PageReference pageRef = getPage().getPageReference();
 
                                     for (MembershipTO membTO : membView.getList()) {
-                                        if (membTO.getGroupId() == groupTO.getKey()) {
+                                        if (membTO.getGroupKey() == groupTO.getKey()) {
                                             return new MembershipModalPage(pageRef, membWin, membTO, mode);
                                         }
                                     }
                                     MembershipTO membTO = new MembershipTO();
-                                    membTO.setGroupId(groupTO.getKey());
+                                    membTO.setGroupKey(groupTO.getKey());
                                     membTO.setGroupName(groupTO.getName());
 
                                     return new MembershipModalPage(pageRef, membWin, membTO, mode);
@@ -159,7 +159,7 @@ public class MembershipsPanel extends Panel {
                     protected void populateItem(final ListItem<MembershipTO> item) {
                         final MembershipTO membershipTO = (MembershipTO) item.getDefaultModelObject();
 
-                        item.add(new Label("groupId", new Model<Long>(membershipTO.getGroupId())));
+                        item.add(new Label("groupId", new Model<Long>(membershipTO.getGroupKey())));
                         item.add(new Label("groupName", new Model<String>(membershipTO.getGroupName())));
 
                         AjaxLink editLink = new ClearIndicatingAjaxLink("editLink", pageRef) {
@@ -194,13 +194,13 @@ public class MembershipsPanel extends Panel {
                                 ((UserModalPage) getPage()).getUserTO().getMemberships().remove(membershipTO);
                                 target.add(membershipsContainer);
 
-                                GroupTO groupTO = groupTreeBuilder.findGroup(membershipTO.getGroupId());
+                                GroupTO groupTO = groupTreeBuilder.findGroup(membershipTO.getGroupKey());
                                 Set<String> resourcesToRemove = groupTO == null
                                         ? Collections.<String>emptySet() : groupTO.getResources();
                                 if (!resourcesToRemove.isEmpty()) {
                                     Set<String> resourcesAssignedViaMembership = new HashSet<>();
                                     for (MembershipTO membTO : userTO.getMemberships()) {
-                                        groupTO = groupTreeBuilder.findGroup(membTO.getGroupId());
+                                        groupTO = groupTreeBuilder.findGroup(membTO.getGroupKey());
                                         if (groupTO != null) {
                                             resourcesAssignedViaMembership.addAll(groupTO.getResources());
                                         }
@@ -237,7 +237,7 @@ public class MembershipsPanel extends Panel {
 
                         Set<String> resourcesToAdd = new HashSet<>();
                         for (Long diffMembId : diff) {
-                            long groupId = updatedUserTO.getMembershipMap().get(diffMembId).getGroupId();
+                            long groupId = updatedUserTO.getMembershipMap().get(diffMembId).getGroupKey();
                             GroupTO groupTO = groupTreeBuilder.findGroup(groupId);
                             resourcesToAdd.addAll(groupTO.getResources());
                             StatusUtils.update(

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/console/src/main/java/org/apache/syncope/client/console/panels/PlainAttrsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/PlainAttrsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/PlainAttrsPanel.java
index 1cf25ef..b0517b0 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/PlainAttrsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/PlainAttrsPanel.java
@@ -32,7 +32,7 @@ import java.util.Set;
 import java.util.TreeMap;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.commons.AttrLayoutType;
-import org.apache.syncope.client.console.commons.JexlHelpUtil;
+import org.apache.syncope.client.console.commons.JexlHelpUtils;
 import org.apache.syncope.client.console.commons.Mode;
 import org.apache.syncope.client.console.panels.AttrTemplatesPanel.GroupAttrTemplatesChange;
 import org.apache.syncope.client.console.rest.ConfigurationRestClient;
@@ -118,9 +118,9 @@ public class PlainAttrsPanel extends Panel {
             protected void populateItem(final ListItem<AttrTO> item) {
                 final AttrTO attributeTO = (AttrTO) item.getDefaultModelObject();
 
-                final WebMarkupContainer jexlHelp = JexlHelpUtil.getJexlHelpWebContainer("jexlHelp");
+                final WebMarkupContainer jexlHelp = JexlHelpUtils.getJexlHelpWebContainer("jexlHelp");
 
-                final AjaxLink<Void> questionMarkJexlHelp = JexlHelpUtil.getAjaxLink(jexlHelp, "questionMarkJexlHelp");
+                final AjaxLink<Void> questionMarkJexlHelp = JexlHelpUtils.getAjaxLink(jexlHelp, "questionMarkJexlHelp");
                 item.add(questionMarkJexlHelp);
                 questionMarkJexlHelp.add(jexlHelp);
 
@@ -169,7 +169,7 @@ public class PlainAttrsPanel extends Panel {
             attrLayout = confRestClient.readAttrLayout(AttrLayoutType.valueOf(mode, AttributableType.MEMBERSHIP));
             schemaTOs = schemaRestClient.getSchemas(AttributableType.MEMBERSHIP);
             Set<String> allowed = new HashSet<>(
-                    groupRestClient.read(((MembershipTO) entityTO).getGroupId()).getMPlainAttrTemplates());
+                    groupRestClient.read(((MembershipTO) entityTO).getGroupKey()).getMPlainAttrTemplates());
             schemaRestClient.filter(schemaTOs, allowed, true);
         } else {
             schemas = new TreeMap<>();

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java
index 3940421..406676f 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java
@@ -26,7 +26,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.commons.JexlHelpUtil;
+import org.apache.syncope.client.console.commons.JexlHelpUtils;
 import org.apache.syncope.client.console.panels.ResourceConnConfPanel.ConnConfModEvent;
 import org.apache.syncope.client.console.rest.ConnectorRestClient;
 import org.apache.syncope.client.console.rest.SchemaRestClient;
@@ -185,9 +185,9 @@ public class ResourceMappingPanel extends Panel {
             schemaNames = Collections.<String>emptyList();
         }
 
-        final WebMarkupContainer jexlHelp = JexlHelpUtil.getJexlHelpWebContainer("jexlHelp");
+        final WebMarkupContainer jexlHelp = JexlHelpUtils.getJexlHelpWebContainer("jexlHelp");
 
-        AjaxLink<Void> questionMarkJexlHelp = JexlHelpUtil.getAjaxLink(jexlHelp, "questionMarkJexlHelp");
+        AjaxLink<Void> questionMarkJexlHelp = JexlHelpUtils.getAjaxLink(jexlHelp, "questionMarkJexlHelp");
         mappingContainer.add(questionMarkJexlHelp);
         questionMarkJexlHelp.add(jexlHelp);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourcesPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourcesPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourcesPanel.java
index 6dd1d06..028b3a0 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourcesPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourcesPanel.java
@@ -153,7 +153,7 @@ public class ResourcesPanel extends Panel {
                                 if (!resourcesToRemove.isEmpty()) {
                                     Set<String> resourcesAssignedViaMembership = new HashSet<>();
                                     for (MembershipTO membTO : userTO.getMemberships()) {
-                                        GroupTO groupTO = groupTreeBuilder.findGroup(membTO.getGroupId());
+                                        GroupTO groupTO = groupTreeBuilder.findGroup(membTO.getGroupKey());
                                         if (groupTO != null) {
                                             resourcesAssignedViaMembership.addAll(groupTO.getResources());
                                         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDetailsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDetailsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDetailsPanel.java
index 18e2066..bf990ec 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDetailsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDetailsPanel.java
@@ -18,7 +18,7 @@
  */
 package org.apache.syncope.client.console.panels;
 
-import org.apache.syncope.client.console.commons.JexlHelpUtil;
+import org.apache.syncope.client.console.commons.JexlHelpUtils;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxPasswordFieldPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.FieldPanel;
@@ -52,9 +52,9 @@ public class UserDetailsPanel extends Panel {
         final FieldPanel<String> username = new AjaxTextFieldPanel("username", "username",
                 new PropertyModel<String>(userTO, "username"));
 
-        final WebMarkupContainer jexlHelp = JexlHelpUtil.getJexlHelpWebContainer("usernameJexlHelp");
+        final WebMarkupContainer jexlHelp = JexlHelpUtils.getJexlHelpWebContainer("usernameJexlHelp");
 
-        final AjaxLink<?> questionMarkJexlHelp = JexlHelpUtil.getAjaxLink(jexlHelp, "usernameQuestionMarkJexlHelp");
+        final AjaxLink<?> questionMarkJexlHelp = JexlHelpUtils.getAjaxLink(jexlHelp, "usernameQuestionMarkJexlHelp");
         add(questionMarkJexlHelp);
         questionMarkJexlHelp.add(jexlHelp);
 
@@ -68,9 +68,9 @@ public class UserDetailsPanel extends Panel {
         // ------------------------
         // Password
         // ------------------------
-        final WebMarkupContainer pwdJexlHelp = JexlHelpUtil.getJexlHelpWebContainer("pwdJexlHelp");
+        final WebMarkupContainer pwdJexlHelp = JexlHelpUtils.getJexlHelpWebContainer("pwdJexlHelp");
 
-        final AjaxLink<?> pwdQuestionMarkJexlHelp = JexlHelpUtil.getAjaxLink(pwdJexlHelp, "pwdQuestionMarkJexlHelp");
+        final AjaxLink<?> pwdQuestionMarkJexlHelp = JexlHelpUtils.getAjaxLink(pwdJexlHelp, "pwdQuestionMarkJexlHelp");
         add(pwdQuestionMarkJexlHelp);
         pwdQuestionMarkJexlHelp.add(pwdJexlHelp);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/console/src/main/java/org/apache/syncope/client/console/panels/VirAttrsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/VirAttrsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/VirAttrsPanel.java
index 4a3e103..84049f0 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/VirAttrsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/VirAttrsPanel.java
@@ -124,7 +124,7 @@ public class VirAttrsPanel extends Panel {
                 } else {
                     schemaTOs = schemaRestClient.getVirSchemas(AttributableType.MEMBERSHIP);
                     Set<String> allowed = new HashSet<String>(
-                            groupRestClient.read(((MembershipTO) entityTO).getGroupId()).getMVirAttrTemplates());
+                            groupRestClient.read(((MembershipTO) entityTO).getGroupKey()).getMVirAttrTemplates());
                     filter(schemaTOs, allowed);
                 }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java
index eb9e7cb..4409f7c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java
@@ -34,7 +34,7 @@ public class PolicyRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -1392090291817187902L;
 
-    public <T extends AbstractPolicyTO> T getGlobalPolicy(final PolicyType type) {
+    public <T extends AbstractPolicyTO<?>> T getGlobalPolicy(final PolicyType type) {
         T policy = null;
         try {
             policy = getService(PolicyService.class).readGlobal(type);
@@ -44,7 +44,7 @@ public class PolicyRestClient extends BaseRestClient {
         return policy;
     }
 
-    public <T extends AbstractPolicyTO> T getPolicy(final Long id) {
+    public <T extends AbstractPolicyTO<?>> T getPolicy(final Long id) {
         T policy = null;
         try {
             policy = getService(PolicyService.class).read(id);
@@ -55,7 +55,7 @@ public class PolicyRestClient extends BaseRestClient {
     }
 
     @SuppressWarnings("unchecked")
-    public <T extends AbstractPolicyTO> List<T> getPolicies(final PolicyType type, final boolean includeGlobal) {
+    public <T extends AbstractPolicyTO<?>> List<T> getPolicies(final PolicyType type, final boolean includeGlobal) {
         final List<T> res = new ArrayList<>();
 
         try {
@@ -66,9 +66,9 @@ public class PolicyRestClient extends BaseRestClient {
 
         if (includeGlobal) {
             try {
-                AbstractPolicyTO globalPolicy = getGlobalPolicy(type);
+                T globalPolicy = getGlobalPolicy(type);
                 if (globalPolicy != null) {
-                    res.add(0, (T) globalPolicy);
+                    res.add(0, globalPolicy);
                 }
             } catch (Exception ignore) {
                 LOG.warn("No global policy found", ignore);
@@ -78,15 +78,15 @@ public class PolicyRestClient extends BaseRestClient {
         return res;
     }
 
-    public <T extends AbstractPolicyTO> void createPolicy(final T policy) {
+    public <T extends AbstractPolicyTO<?>> void createPolicy(final T policy) {
         getService(PolicyService.class).create(policy);
     }
 
-    public <T extends AbstractPolicyTO> void updatePolicy(final T policy) {
+    public <T extends AbstractPolicyTO<?>> void updatePolicy(final T policy) {
         getService(PolicyService.class).update(policy.getKey(), policy);
     }
 
-    public void delete(final Long id, final Class<? extends AbstractPolicyTO> policyClass) {
+    public void delete(final Long id, final Class<? extends AbstractPolicyTO<?>> policyClass) {
         getService(PolicyService.class).delete(id);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.java
index 6615b14..40a88ac 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.java
@@ -22,7 +22,7 @@ import java.io.ByteArrayInputStream;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.syncope.client.console.commons.PreviewUtil;
+import org.apache.syncope.client.console.commons.PreviewUtils;
 import org.apache.syncope.client.console.commons.HttpResourceStream;
 import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.pages.BaseModalPage;
@@ -63,7 +63,7 @@ public class BinaryFieldPanel extends FieldPanel<String> {
     private final Fragment emptyFragment;
 
     @SpringBean
-    private PreviewUtil previewUtil;
+    private PreviewUtils previewUtil;
 
     public BinaryFieldPanel(final String id, final String name, final IModel<String> model, final String mimeType) {
         super(id, model);

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClient.java
----------------------------------------------------------------------
diff --git a/client/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClient.java b/client/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClient.java
index 2a3d146..c3f4428 100644
--- a/client/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClient.java
+++ b/client/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClient.java
@@ -18,14 +18,26 @@
  */
 package org.apache.syncope.client.lib;
 
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
 import javax.ws.rs.core.EntityTag;
 import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.cxf.jaxrs.client.WebClient;
 import org.apache.syncope.common.lib.search.OrderByClauseBuilder;
 import org.apache.syncope.common.lib.search.GroupFiqlSearchConditionBuilder;
 import org.apache.syncope.common.lib.search.UserFiqlSearchConditionBuilder;
+import org.apache.syncope.common.lib.to.UserTO;
+import org.apache.syncope.common.lib.types.Entitlement;
 import org.apache.syncope.common.rest.api.Preference;
 import org.apache.syncope.common.rest.api.RESTHeaders;
+import org.apache.syncope.common.rest.api.service.UserSelfService;
 
 /**
  * Entry point for client access to all REST services exposed by Syncope core; obtain instances via
@@ -37,15 +49,21 @@ public class SyncopeClient {
 
     private final RestClientFactoryBean restClientFactory;
 
+    private final RestClientExceptionMapper exceptionMapper;
+
     private final String username;
 
     private final String password;
 
-    public SyncopeClient(final MediaType mediaType, final RestClientFactoryBean restClientFactory,
+    public SyncopeClient(
+            final MediaType mediaType,
+            final RestClientFactoryBean restClientFactory,
+            final RestClientExceptionMapper exceptionMapper,
             final String username, final String password) {
 
         this.mediaType = mediaType;
         this.restClientFactory = restClientFactory;
+        this.exceptionMapper = exceptionMapper;
         this.username = username;
         this.password = password;
     }
@@ -90,6 +108,28 @@ public class SyncopeClient {
         }
     }
 
+    @SuppressWarnings("unchecked")
+    public Pair<Map<Entitlement, Set<String>>, UserTO> self() {
+        Response response = getService(UserSelfService.class).read();
+        if (response.getStatusInfo().getStatusCode() != Response.Status.OK.getStatusCode()) {
+            Exception ex = exceptionMapper.fromResponse(response);
+            if (ex != null) {
+                throw (RuntimeException) ex;
+            }
+        }
+
+        try {
+            return new ImmutablePair<>(
+                    (Map<Entitlement, Set<String>>) new ObjectMapper().readValue(
+                            response.getHeaderString(RESTHeaders.OWNED_ENTITLEMENTS),
+                            new TypeReference<HashMap<Entitlement, Set<String>>>() {
+                            }),
+                    response.readEntity(UserTO.class));
+        } catch (IOException e) {
+            throw new IllegalStateException(e);
+        }
+    }
+
     /**
      * Sets the given header on the give service instance.
      *

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClientFactoryBean.java
----------------------------------------------------------------------
diff --git a/client/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClientFactoryBean.java b/client/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClientFactoryBean.java
index 53e0fda..24923f1 100644
--- a/client/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClientFactoryBean.java
+++ b/client/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClientFactoryBean.java
@@ -89,7 +89,7 @@ public class SyncopeClientFactoryBean {
         marshallerProperties.put(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
         defaultJAXBProvider.setMarshallerProperties(marshallerProperties);
 
-        Map<String, String> collectionWrapperMap = new HashMap<String, String>();
+        Map<String, String> collectionWrapperMap = new HashMap<>();
         collectionWrapperMap.put(AbstractPolicyTO.class.getName(), "policies");
         defaultJAXBProvider.setCollectionWrapperMap(collectionWrapperMap);
 
@@ -111,11 +111,11 @@ public class SyncopeClientFactoryBean {
         defaultRestClientFactoryBean.setThreadSafe(true);
         defaultRestClientFactoryBean.setInheritHeaders(true);
 
-        List<Feature> features = new ArrayList<Feature>();
+        List<Feature> features = new ArrayList<>();
         features.add(new LoggingFeature());
         defaultRestClientFactoryBean.setFeatures(features);
 
-        List<Object> providers = new ArrayList<Object>(3);
+        List<Object> providers = new ArrayList<>(3);
         providers.add(getJaxbProvider());
         providers.add(getJsonProvider());
         providers.add(getExceptionMapper());
@@ -197,6 +197,11 @@ public class SyncopeClientFactoryBean {
     }
 
     public SyncopeClient create(final String username, final String password) {
-        return new SyncopeClient(getContentType().getMediaType(), getRestClientFactoryBean(), username, password);
+        return new SyncopeClient(
+                getContentType().getMediaType(),
+                getRestClientFactoryBean(),
+                getExceptionMapper(),
+                username,
+                password);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/65d652af/client/pom.xml
----------------------------------------------------------------------
diff --git a/client/pom.xml b/client/pom.xml
index 78bfcbd..92c8b6e 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -35,7 +35,8 @@ under the License.
 
   <modules>
     <module>lib</module>
-    <module>console</module>
+    <!-- THIS UNTIL SYNCOPE-611 gets completely resolved -->
+    <!--<module>console</module>-->
     <module>cli</module>
   </modules>