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 2016/04/19 15:02:07 UTC

[20/24] syncope git commit: [SYNCOPE-822] UUID keys

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java
index 037773d..a38dd99 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java
@@ -94,9 +94,7 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
         modelObject.fillRecipientConditions();
         modelObject.fillAboutConditions();
 
-        final boolean createFlag
-                = modelObject.getInnerObject().getKey() == null || modelObject.getInnerObject().getKey() <= 0;
-
+        final boolean createFlag = modelObject.getInnerObject().getKey() == null;
         if (createFlag) {
             restClient.create(modelObject.getInnerObject());
         } else {
@@ -121,7 +119,7 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
 
         public Details(final NotificationHandler modelObject) {
             final NotificationTO notificationTO = modelObject.getInnerObject();
-            final boolean createFlag = notificationTO.getKey() == null || notificationTO.getKey() <= 0;
+            final boolean createFlag = notificationTO.getKey() == null;
 
             final AjaxTextFieldPanel sender = new AjaxTextFieldPanel("sender", getString("sender"),
                     new PropertyModel<String>(notificationTO, "sender"));
@@ -134,18 +132,18 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
             subject.addRequiredLabel();
             add(subject);
 
-            final AjaxDropDownChoicePanel<IntMappingType> recipientAttrType
-                    = new AjaxDropDownChoicePanel<IntMappingType>(
+            final AjaxDropDownChoicePanel<IntMappingType> recipientAttrType =
+                    new AjaxDropDownChoicePanel<>(
                             "recipientAttrType",
                             new ResourceModel("recipientAttrType", "recipientAttrType").getObject(),
                             new PropertyModel<IntMappingType>(notificationTO, "recipientAttrType"));
             recipientAttrType.setChoices(
-                    new ArrayList<IntMappingType>(IntMappingType.getAttributeTypes(AnyTypeKind.USER,
+                    new ArrayList<>(IntMappingType.getAttributeTypes(AnyTypeKind.USER,
                             EnumSet.of(IntMappingType.UserKey, IntMappingType.Password))));
             recipientAttrType.addRequiredLabel();
             add(recipientAttrType);
 
-            final AjaxDropDownChoicePanel<String> recipientAttrName = new AjaxDropDownChoicePanel<String>(
+            final AjaxDropDownChoicePanel<String> recipientAttrName = new AjaxDropDownChoicePanel<>(
                     "recipientAttrName", new ResourceModel("recipientAttrName", "recipientAttrName").getObject(),
                     new PropertyModel<String>(notificationTO, "recipientAttrName"));
             recipientAttrName.setChoices(getSchemaNames(recipientAttrType.getModelObject()));
@@ -163,7 +161,7 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
                 }
             });
 
-            final AjaxDropDownChoicePanel<String> template = new AjaxDropDownChoicePanel<String>(
+            final AjaxDropDownChoicePanel<String> template = new AjaxDropDownChoicePanel<>(
                     "template", getString("template"),
                     new PropertyModel<String>(notificationTO, "template"));
 
@@ -179,7 +177,7 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
             template.addRequiredLabel();
             add(template);
 
-            final AjaxDropDownChoicePanel<TraceLevel> traceLevel = new AjaxDropDownChoicePanel<TraceLevel>(
+            final AjaxDropDownChoicePanel<TraceLevel> traceLevel = new AjaxDropDownChoicePanel<>(
                     "traceLevel", getString("traceLevel"),
                     new PropertyModel<TraceLevel>(notificationTO, "traceLevel"));
             traceLevel.setChoices(Arrays.asList(TraceLevel.values()));
@@ -236,11 +234,10 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
 
             final List<String> anyTypeTOs = CollectionUtils.collect(
                     new AnyTypeRestClient().list(),
-                    EntityTOUtils.<String, AnyTypeTO>keyTransformer(),
-                    new ArrayList<String>());
+                    EntityTOUtils.<AnyTypeTO>keyTransformer(), new ArrayList<String>());
 
-            final AjaxDropDownChoicePanel<String> type
-                    = new AjaxDropDownChoicePanel<String>("about", "about", new Model<String>() {
+            final AjaxDropDownChoicePanel<String> type =
+                    new AjaxDropDownChoicePanel<>("about", "about", new Model<String>() {
 
                         private static final long serialVersionUID = -2350296434572623272L;
 
@@ -323,8 +320,8 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
             aboutContainer.setOutputMarkupId(true);
             add(aboutContainer);
 
-            final IModel<List<Pair<String, List<SearchClause>>>> model
-                    = new PropertyModel<List<Pair<String, List<SearchClause>>>>(modelObject, "aboutClauses");
+            final IModel<List<Pair<String, List<SearchClause>>>> model =
+                    new PropertyModel<>(modelObject, "aboutClauses");
 
             aboutContainer.add(new MultiPanel<Pair<String, List<SearchClause>>>("abouts", "abouts", model, false) {
 
@@ -368,13 +365,13 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
 
         public Recipients(final NotificationHandler modelObject) {
             final NotificationTO notificationTO = modelObject.getInnerObject();
-            final boolean createFlag = notificationTO.getKey() == null || notificationTO.getKey() <= 0;
+            final boolean createFlag = notificationTO.getKey() == null;
 
-            final AjaxTextFieldPanel staticRecipientsFieldPanel
-                    = new AjaxTextFieldPanel("panel", "staticRecipients", new Model<String>());
+            final AjaxTextFieldPanel staticRecipientsFieldPanel =
+                    new AjaxTextFieldPanel("panel", "staticRecipients", new Model<String>());
             staticRecipientsFieldPanel.addValidator(EmailAddressValidator.getInstance());
 
-            final MultiFieldPanel<String> staticRecipients = new MultiFieldPanel.Builder<String>(
+            final MultiFieldPanel<String> staticRecipients = new MultiFieldPanel.Builder<>(
                     new PropertyModel<List<String>>(notificationTO, "staticRecipients")).
                     build("staticRecipients", "staticRecipients", staticRecipientsFieldPanel);
 
@@ -406,19 +403,19 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
                 case UserPlainSchema:
                     result = CollectionUtils.collect(
                             schemaRestClient.<PlainSchemaTO>getSchemas(SchemaType.PLAIN, AnyTypeKind.USER.name()),
-                            EntityTOUtils.<String, PlainSchemaTO>keyTransformer(), new ArrayList<String>());
+                            EntityTOUtils.<PlainSchemaTO>keyTransformer(), new ArrayList<String>());
                     break;
 
                 case UserDerivedSchema:
                     result = CollectionUtils.collect(
                             schemaRestClient.<DerSchemaTO>getSchemas(SchemaType.DERIVED, AnyTypeKind.USER.name()),
-                            EntityTOUtils.<String, DerSchemaTO>keyTransformer(), new ArrayList<String>());
+                            EntityTOUtils.<DerSchemaTO>keyTransformer(), new ArrayList<String>());
                     break;
 
                 case UserVirtualSchema:
                     result = CollectionUtils.collect(
                             schemaRestClient.<VirSchemaTO>getSchemas(SchemaType.VIRTUAL, AnyTypeKind.USER.name()),
-                            EntityTOUtils.<String, VirSchemaTO>keyTransformer(), new ArrayList<String>());
+                            EntityTOUtils.<VirSchemaTO>keyTransformer(), new ArrayList<String>());
                     break;
 
                 case Username:

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java
index 8fae231..b2e3356 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java
@@ -148,7 +148,7 @@ public class Realms extends BasePage {
             @Override
             protected void onClickDelete(final AjaxRequestTarget target, final RealmTO realmTO) {
                 try {
-                    if (realmTO.getKey() == null || realmTO.getKey() == 0) {
+                    if (realmTO.getKey() == null) {
                         throw new Exception("Root realm cannot be deleted");
                     }
                     realmRestClient.delete(realmTO.getFullPath());

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
index 4c2d7bf..62ef279 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
@@ -79,6 +79,7 @@ public abstract class AnyDirectoryPanel<T extends AnyTO>
         this.type = builder.type;
         this.fiql = builder.fiql;
 
+        utilityModal.size(Modal.Size.Large);
         addOuterObject(utilityModal);
         setWindowClosedReloadCallback(utilityModal);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java
index 8d786ab..6721e1a 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java
@@ -34,6 +34,7 @@ import org.apache.syncope.client.console.status.StatusModal;
 import org.apache.syncope.client.console.tasks.AnyPropagationTasks;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.AttrColumn;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink.ActionType;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
@@ -81,7 +82,9 @@ public class AnyObjectDirectoryPanel extends AnyDirectoryPanel<AnyObjectTO> {
 
             final Field field = ReflectionUtils.findField(AnyObjectTO.class, name);
 
-            if (field != null && field.getType().equals(Date.class)) {
+            if ("key".equalsIgnoreCase(name)) {
+                columns.add(new KeyPropertyColumn<AnyObjectTO>(new ResourceModel(name, name), name, name));
+            } else if (field != null && field.getType().equals(Date.class)) {
                 columns.add(new PropertyColumn<AnyObjectTO, String>(new ResourceModel(name, name), name, name));
             } else {
                 columns.add(new PropertyColumn<AnyObjectTO, String>(new ResourceModel(name, name), name, name));
@@ -161,7 +164,7 @@ public class AnyObjectDirectoryPanel extends AnyDirectoryPanel<AnyObjectTO> {
                     @Override
                     public void onClick(final AjaxRequestTarget target, final AnyObjectTO ignore) {
                         final AnyObjectTO clone = SerializationUtils.clone(model.getObject());
-                        clone.setKey(0L);
+                        clone.setKey(null);
                         send(AnyObjectDirectoryPanel.this, Broadcast.EXACT,
                                 new AjaxWizard.NewItemActionEvent<>(new AnyHandler<>(clone), target));
                     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeDetailsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeDetailsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeDetailsPanel.java
index c32b507..7cf3b33 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeDetailsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeDetailsPanel.java
@@ -75,7 +75,6 @@ public class AnyTypeDetailsPanel extends Panel {
 
     private List<String> getAvailableAnyTypeClasses() {
         return CollectionUtils.collect(new AnyTypeClassRestClient().list(),
-                EntityTOUtils.<String, AnyTypeClassTO>keyTransformer(),
-                new ArrayList<String>());
+                EntityTOUtils.<AnyTypeClassTO>keyTransformer(), new ArrayList<String>());
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
index 3e0e171..71cd7de 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
@@ -35,6 +35,7 @@ import org.apache.syncope.client.console.tasks.AnyPropagationTasks;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.AttrColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink.ActionType;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
@@ -80,7 +81,9 @@ public class GroupDirectoryPanel extends AnyDirectoryPanel<GroupTO> {
         for (String name : prefMan.getList(getRequest(), Constants.PREF_GROUP_DETAILS_VIEW)) {
             final Field field = ReflectionUtils.findField(GroupTO.class, name);
 
-            if (field != null && field.getType().equals(Date.class)) {
+            if ("key".equalsIgnoreCase(name)) {
+                columns.add(new KeyPropertyColumn<GroupTO>(new ResourceModel(name, name), name, name));
+            } else if (field != null && field.getType().equals(Date.class)) {
                 columns.add(new DatePropertyColumn<GroupTO>(new ResourceModel(name, name), name, name));
             } else {
                 columns.add(new PropertyColumn<GroupTO, String>(new ResourceModel(name, name), name, name));
@@ -155,7 +158,7 @@ public class GroupDirectoryPanel extends AnyDirectoryPanel<GroupTO> {
                     @Override
                     public void onClick(final AjaxRequestTarget target, final GroupTO ignore) {
                         final GroupTO clone = SerializationUtils.clone(model.getObject());
-                        clone.setKey(0L);
+                        clone.setKey(null);
                         send(GroupDirectoryPanel.this, Broadcast.EXACT,
                                 new AjaxWizard.NewItemActionEvent<>(new GroupHandler(clone), target));
                     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmChoicePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmChoicePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmChoicePanel.java
index eed2a4e..fe25812 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmChoicePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmChoicePanel.java
@@ -63,7 +63,7 @@ public class RealmChoicePanel extends Panel {
 
     private final Model<RealmTO> model;
 
-    private final Map<Long, Pair<RealmTO, List<RealmTO>>> tree;
+    private final Map<String, Pair<RealmTO, List<RealmTO>>> tree;
 
     public RealmChoicePanel(final String id, final PageReference pageRef) {
         super(id);
@@ -81,8 +81,8 @@ public class RealmChoicePanel extends Panel {
 
             private void getChildren(
                     final List<Pair<String, RealmTO>> full,
-                    final long key,
-                    final Map<Long, Pair<RealmTO, List<RealmTO>>> tree,
+                    final String key,
+                    final Map<String, Pair<RealmTO, List<RealmTO>>> tree,
                     final String indent) {
 
                 if (tree.containsKey(key)) {
@@ -96,11 +96,11 @@ public class RealmChoicePanel extends Panel {
 
             @Override
             protected List<Pair<String, RealmTO>> load() {
-                Map<Long, Pair<RealmTO, List<RealmTO>>> map = reloadRealmParentMap();
-                model.setObject(map.get(1L).getKey());
+                Map<String, Pair<RealmTO, List<RealmTO>>> map = reloadRealmParentMap();
+                model.setObject(map.get(null).getKey());
 
                 final List<Pair<String, RealmTO>> full = new ArrayList<>();
-                getChildren(full, 0L, map, StringUtils.EMPTY);
+                getChildren(full, null, map, StringUtils.EMPTY);
                 return full;
             }
         };
@@ -163,17 +163,17 @@ public class RealmChoicePanel extends Panel {
         return this;
     }
 
-    private Map<Long, Pair<RealmTO, List<RealmTO>>> reloadRealmParentMap() {
+    private Map<String, Pair<RealmTO, List<RealmTO>>> reloadRealmParentMap() {
         final List<RealmTO> realms = realmRestClient.list();
         Collections.sort(realms, new RealmNameComparator());
         return reloadRealmParentMap(realms);
     }
 
-    private Map<Long, Pair<RealmTO, List<RealmTO>>> reloadRealmParentMap(final List<RealmTO> realms) {
+    private Map<String, Pair<RealmTO, List<RealmTO>>> reloadRealmParentMap(final List<RealmTO> realms) {
         tree.clear();
-        tree.put(0L, Pair.<RealmTO, List<RealmTO>>of(realms.get(0), new ArrayList<RealmTO>()));
+        tree.put(null, Pair.<RealmTO, List<RealmTO>>of(realms.get(0), new ArrayList<RealmTO>()));
 
-        final Map<Long, List<RealmTO>> cache = new HashMap<>();
+        final Map<String, List<RealmTO>> cache = new HashMap<>();
 
         for (RealmTO realm : realms) {
             final List<RealmTO> children = new ArrayList<>();
@@ -223,7 +223,7 @@ public class RealmChoicePanel extends Panel {
         return model.getObject();
     }
 
-    public RealmTO moveToParentRealm(final long key) {
+    public RealmTO moveToParentRealm(final String key) {
         for (Pair<RealmTO, List<RealmTO>> subtree : tree.values()) {
             for (RealmTO child : subtree.getRight()) {
                 if (child.getKey() == key) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java
index 3b4c413..766a2b8 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java
@@ -53,13 +53,13 @@ public class RealmDetails extends Panel {
 
     private final PolicyRestClient policyRestClient = new PolicyRestClient();
 
-    private final IModel<Map<Long, String>> accountPolicies = new LoadableDetachableModel<Map<Long, String>>() {
+    private final IModel<Map<String, String>> accountPolicies = new LoadableDetachableModel<Map<String, String>>() {
 
         private static final long serialVersionUID = -2012833443695917883L;
 
         @Override
-        protected Map<Long, String> load() {
-            Map<Long, String> res = new HashMap<>();
+        protected Map<String, String> load() {
+            Map<String, String> res = new HashMap<>();
             for (AbstractPolicyTO policyTO : policyRestClient.getPolicies(PolicyType.ACCOUNT)) {
                 res.put(policyTO.getKey(), policyTO.getDescription());
             }
@@ -67,13 +67,13 @@ public class RealmDetails extends Panel {
         }
     };
 
-    private final IModel<Map<Long, String>> passwordPolicies = new LoadableDetachableModel<Map<Long, String>>() {
+    private final IModel<Map<String, String>> passwordPolicies = new LoadableDetachableModel<Map<String, String>>() {
 
         private static final long serialVersionUID = -2012833443695917883L;
 
         @Override
-        protected Map<Long, String> load() {
-            Map<Long, String> res = new HashMap<>();
+        protected Map<String, String> load() {
+            Map<String, String> res = new HashMap<>();
             for (AbstractPolicyTO policyTO : policyRestClient.getPolicies(PolicyType.PASSWORD)) {
                 res.put(policyTO.getKey(), policyTO.getDescription());
             }
@@ -120,20 +120,20 @@ public class RealmDetails extends Panel {
         fullPath.setEnabled(false);
         container.add(fullPath);
 
-        AjaxDropDownChoicePanel<Long> accountPolicy = new AjaxDropDownChoicePanel<>(
+        AjaxDropDownChoicePanel<String> accountPolicy = new AjaxDropDownChoicePanel<>(
                 "accountPolicy",
                 new ResourceModel("accountPolicy", "accountPolicy").getObject(),
-                new PropertyModel<Long>(realmTO, "accountPolicy"),
+                new PropertyModel<String>(realmTO, "accountPolicy"),
                 false);
         accountPolicy.setChoiceRenderer(new PolicyRenderer(accountPolicies));
         accountPolicy.setChoices(new ArrayList<>(accountPolicies.getObject().keySet()));
         ((DropDownChoice<?>) accountPolicy.getField()).setNullValid(true);
         container.add(accountPolicy);
 
-        AjaxDropDownChoicePanel<Long> passwordPolicy = new AjaxDropDownChoicePanel<>(
+        AjaxDropDownChoicePanel<String> passwordPolicy = new AjaxDropDownChoicePanel<>(
                 "passwordPolicy",
                 new ResourceModel("passwordPolicy", "passwordPolicy").getObject(),
-                new PropertyModel<Long>(realmTO, "passwordPolicy"),
+                new PropertyModel<String>(realmTO, "passwordPolicy"),
                 false);
         passwordPolicy.setChoiceRenderer(new PolicyRenderer(passwordPolicies));
         passwordPolicy.setChoices(new ArrayList<>(passwordPolicies.getObject().keySet()));

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsModalPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsModalPanel.java
index 0d27f0c..81ae568 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsModalPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsModalPanel.java
@@ -51,7 +51,7 @@ public class SecurityQuestionsModalPanel extends AbstractModalPanel<SecurityQues
     @Override
     public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
         try {
-            if (securityQuestionTO.getKey() == null || securityQuestionTO.getKey() == 0) {
+            if (securityQuestionTO.getKey() == null) {
                 SyncopeConsoleSession.get().getService(SecurityQuestionService.class).create(securityQuestionTO);
             } else {
                 SyncopeConsoleSession.get().getService(SecurityQuestionService.class).update(securityQuestionTO);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
index 38d81cf..1735620 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
@@ -19,14 +19,11 @@
 package org.apache.syncope.client.console.panels;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.commons.Constants;
@@ -35,6 +32,7 @@ import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.panels.SecurityQuestionsPanel.SecurityQuestionsProvider;
 import org.apache.syncope.client.console.rest.SecurityQuestionRestClient;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
 import org.apache.syncope.client.console.wizards.AbstractModalPanelBuilder;
@@ -52,6 +50,7 @@ import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColu
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
+import org.apache.wicket.model.StringResourceModel;
 
 public class SecurityQuestionsPanel extends DirectoryPanel<
         SecurityQuestionTO, SecurityQuestionTO, SecurityQuestionsProvider, SecurityQuestionRestClient> {
@@ -113,37 +112,13 @@ public class SecurityQuestionsPanel extends DirectoryPanel<
 
     @Override
     protected List<IColumn<SecurityQuestionTO, String>> getColumns() {
-        final List<IColumn<SecurityQuestionTO, String>> columns = new ArrayList<>();
-
-        for (Field field : SecurityQuestionTO.class.getDeclaredFields()) {
-            if (field != null && !Modifier.isStatic(field.getModifiers())) {
-                final String fieldName = field.getName();
-                if (field.getType().isArray()
-                        || Collection.class.isAssignableFrom(field.getType())
-                        || Map.class.isAssignableFrom(field.getType())) {
-
-                    columns.add(new PropertyColumn<SecurityQuestionTO, String>(
-                            new ResourceModel(field.getName()), field.getName()));
-                } else {
-                    columns.add(new PropertyColumn<SecurityQuestionTO, String>(
-                            new ResourceModel(field.getName()), field.getName(), field.getName()) {
-
-                        private static final long serialVersionUID = -6902459669035442212L;
-
-                        @Override
-                        public String getCssClass() {
-                            String css = super.getCssClass();
-                            if ("key".equals(fieldName)) {
-                                css = StringUtils.isBlank(css)
-                                        ? "col-xs-1"
-                                        : css + " col-xs-1";
-                            }
-                            return css;
-                        }
-                    });
-                }
-            }
-        }
+        List<IColumn<SecurityQuestionTO, String>> columns = new ArrayList<>();
+
+        columns.add(new KeyPropertyColumn<SecurityQuestionTO>(
+                new StringResourceModel("key", this, null), "key", "key"));
+
+        columns.add(new PropertyColumn<SecurityQuestionTO, String>(
+                new StringResourceModel("content", this, null), "content", "content"));
 
         columns.add(new ActionColumn<SecurityQuestionTO, String>(new ResourceModel("actions")) {
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
index f2416ea..e3e9424 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
@@ -37,6 +37,7 @@ import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.AttrColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.BooleanPropertyColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.TokenColumn;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink.ActionType;
@@ -94,7 +95,9 @@ public class UserDirectoryPanel extends AnyDirectoryPanel<UserTO> {
         for (String name : prefMan.getList(getRequest(), Constants.PREF_USERS_DETAILS_VIEW)) {
             final Field field = ReflectionUtils.findField(UserTO.class, name);
 
-            if ("token".equalsIgnoreCase(name)) {
+            if ("key".equalsIgnoreCase(name)) {
+                columns.add(new KeyPropertyColumn<UserTO>(new ResourceModel(name, name), name, name));
+            } else if ("token".equalsIgnoreCase(name)) {
                 columns.add(new TokenColumn<UserTO>(new ResourceModel(name, name), name));
             } else if (field != null
                     && (field.getType().equals(Boolean.class) || field.getType().equals(boolean.class))) {
@@ -214,7 +217,7 @@ public class UserDirectoryPanel extends AnyDirectoryPanel<UserTO> {
                     @Override
                     public void onClick(final AjaxRequestTarget target, final UserTO ignore) {
                         UserTO clone = SerializationUtils.clone(model.getObject());
-                        clone.setKey(0L);
+                        clone.setKey(null);
                         clone.setUsername(model.getObject().getUsername() + "_clone");
                         send(UserDirectoryPanel.this, Broadcast.EXACT,
                                 new AjaxWizard.NewItemActionEvent<>(new AnyHandler<>(clone), target));

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
index b683d0f..d0124c5 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
@@ -43,9 +43,9 @@ public class VirSchemaDetails extends AbstractSchemaDetailsPanel {
 
     private final ResourceRestClient resourceRestClient = new ResourceRestClient();
 
-    private Map<Long, String> anys = new HashMap<>();
+    private Map<String, String> anys = new HashMap<>();
 
-    private final AjaxDropDownChoicePanel<Long> provision;
+    private final AjaxDropDownChoicePanel<String> provision;
 
     public VirSchemaDetails(final String id,
             final PageReference pageReference,
@@ -59,15 +59,14 @@ public class VirSchemaDetails extends AbstractSchemaDetailsPanel {
         final AjaxDropDownChoicePanel<String> resource = new AjaxDropDownChoicePanel<>(
                 "resource", getString("resource"), new PropertyModel<String>(schemaTO, "resource"));
         resource.setChoices(CollectionUtils.collect(resourceRestClient.list(),
-                EntityTOUtils.<String, ResourceTO>keyTransformer(),
-                new ArrayList<String>()));
+                EntityTOUtils.<ResourceTO>keyTransformer(), new ArrayList<String>()));
 
         resource.setOutputMarkupId(true);
         resource.addRequiredLabel();
         schemaForm.add(resource);
 
         provision = new AjaxDropDownChoicePanel<>(
-                "provision", getString("provision"), new PropertyModel<Long>(schemaTO, "provision"));
+                "provision", getString("provision"), new PropertyModel<String>(schemaTO, "provision"));
 
         provision.setChoices(new ArrayList<>(anys.keySet()));
         provision.setChoiceRenderer(new AnyTypeRenderer());
@@ -98,14 +97,14 @@ public class VirSchemaDetails extends AbstractSchemaDetailsPanel {
                     }
                 }
                 provision.setChoices(new ArrayList<>(anys.keySet()));
-                provision.setModelObject(0L);
+                provision.setModelObject(null);
                 provision.setVisible(true);
                 target.add(provision);
             }
         });
     }
 
-    private class AnyTypeRenderer extends ChoiceRenderer<Long> {
+    private class AnyTypeRenderer extends ChoiceRenderer<String> {
 
         private static final long serialVersionUID = 2840364232128308553L;
 
@@ -114,12 +113,12 @@ public class VirSchemaDetails extends AbstractSchemaDetailsPanel {
         }
 
         @Override
-        public Object getDisplayValue(final Long object) {
+        public Object getDisplayValue(final String object) {
             return anys.get(object);
         }
 
         @Override
-        public String getIdValue(final Long object, final int index) {
+        public String getIdValue(final String object, final int index) {
             return String.valueOf(object != null ? object : 0L);
         }
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java
index 2ec657c..1b6de2c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java
@@ -61,7 +61,7 @@ public abstract class AbstractSearchPanel extends Panel {
 
     protected IModel<List<SearchClause.Type>> types;
 
-    protected IModel<Map<Long, String>> groupNames;
+    protected IModel<Map<String, String>> groupNames;
 
     protected IModel<List<String>> roleNames;
 
@@ -168,8 +168,7 @@ public abstract class AbstractSearchPanel extends Panel {
                 return CollectionUtils.collect(
                         schemaRestClient.getSchemas(SchemaType.PLAIN, anyTypeRestClient.read(type).getClasses().
                                 toArray(new String[] {})),
-                        EntityTOUtils.<String, AbstractSchemaTO>keyTransformer(),
-                        new ArrayList<String>());
+                        EntityTOUtils.<AbstractSchemaTO>keyTransformer(), new ArrayList<String>());
             }
         };
 
@@ -180,8 +179,7 @@ public abstract class AbstractSearchPanel extends Panel {
             @Override
             protected List<String> load() {
                 return CollectionUtils.collect(resourceRestClient.list(),
-                        EntityTOUtils.<String, ResourceTO>keyTransformer(),
-                        new ArrayList<String>());
+                        EntityTOUtils.<ResourceTO>keyTransformer(), new ArrayList<String>());
             }
         };
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSearchPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSearchPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSearchPanel.java
index 5665318..f67e32b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSearchPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSearchPanel.java
@@ -74,15 +74,15 @@ public class AnyObjectSearchPanel extends AbstractSearchPanel {
             }
         };
 
-        this.groupNames = new LoadableDetachableModel<Map<Long, String>>() {
+        this.groupNames = new LoadableDetachableModel<Map<String, String>>() {
 
             private static final long serialVersionUID = 5275935387613157437L;
 
             @Override
-            protected Map<Long, String> load() {
+            protected Map<String, String> load() {
                 List<GroupTO> groupTOs = groupRestClient.list("/", -1, -1, new SortParam<>("name", true), null);
 
-                final Map<Long, String> result = new HashMap<>(groupTOs.size());
+                final Map<String, String> result = new HashMap<>(groupTOs.size());
                 for (GroupTO group : groupTOs) {
                     result.put(group.getKey(), group.getName());
                 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionDirectoryPanel.java
index 7e1db89..17b8aa0 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionDirectoryPanel.java
@@ -33,6 +33,7 @@ import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.AttrColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.BooleanPropertyColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.TokenColumn;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink.ActionType;
@@ -72,7 +73,9 @@ public abstract class AnySelectionDirectoryPanel<T extends AnyTO> extends AnyDir
         for (String name : prefMan.getList(getRequest(), getPrefDetailsView())) {
             final Field field = ReflectionUtils.findField(AnyObjectTO.class, name);
 
-            if (reference == UserTO.class && "token".equalsIgnoreCase(name)) {
+            if ("key".equalsIgnoreCase(name)) {
+                columns.add(new KeyPropertyColumn<T>(new ResourceModel(name, name), name, name));
+            } else if (reference == UserTO.class && "token".equalsIgnoreCase(name)) {
                 columns.add(new TokenColumn<T>(new ResourceModel(name, name), name));
             } else if (field != null
                     && (field.getType().equals(Boolean.class) || field.getType().equals(boolean.class))) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSearchPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSearchPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSearchPanel.java
index 5780cf1..d91aa28 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSearchPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSearchPanel.java
@@ -65,13 +65,13 @@ public final class GroupSearchPanel extends AbstractSearchPanel {
             }
         };
 
-        this.groupNames = new LoadableDetachableModel<Map<Long, String>>() {
+        this.groupNames = new LoadableDetachableModel<Map<String, String>>() {
 
             private static final long serialVersionUID = 5275935387613157437L;
 
             @Override
-            protected Map<Long, String> load() {
-                return Collections.<Long, String>emptyMap();
+            protected Map<String, String> load() {
+                return Collections.<String, String>emptyMap();
             }
         };
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
index afe2bcb..05c5157 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
@@ -70,7 +70,7 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
 
     private final IModel<List<String>> dnames;
 
-    private final IModel<Map<Long, String>> groupNames;
+    private final IModel<Map<String, String>> groupNames;
 
     private final IModel<List<String>> roleNames;
 
@@ -96,7 +96,7 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
             final IModel<List<SearchClause.Type>> types,
             final IModel<List<String>> anames,
             final IModel<List<String>> dnames,
-            final IModel<Map<Long, String>> groupNames,
+            final IModel<Map<String, String>> groupNames,
             final IModel<List<String>> roleNames,
             final IModel<List<String>> resourceNames
     ) {
@@ -190,7 +190,7 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
 
                     case GROUP_MEMBERSHIP:
                         final List<String> groups = CollectionUtils.collect(groupNames.getObject().keySet(),
-                                StringValueTransformer.<Long>stringValueTransformer(), new ArrayList<String>());
+                                StringValueTransformer.<String>stringValueTransformer(), new ArrayList<String>());
 
                         Collections.sort(groups);
                         return groups;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchUtils.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchUtils.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchUtils.java
index 0d53955..83960e1 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchUtils.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchUtils.java
@@ -176,16 +176,16 @@ public final class SearchUtils implements Serializable {
 
                 switch (clause.getType()) {
                     case GROUP_MEMBERSHIP:
-                        Long groupId = NumberUtils.toLong(clause.getProperty().split(" ")[0]);
+                        String groupKey = clause.getProperty().split(" ")[0];
 
                         if (builder instanceof UserFiqlSearchConditionBuilder) {
                             condition = clause.getComparator() == SearchClause.Comparator.EQUALS
-                                    ? ((UserFiqlSearchConditionBuilder) builder).inGroups(groupId)
-                                    : ((UserFiqlSearchConditionBuilder) builder).notInGroups(groupId);
+                                    ? ((UserFiqlSearchConditionBuilder) builder).inGroups(groupKey)
+                                    : ((UserFiqlSearchConditionBuilder) builder).notInGroups(groupKey);
                         } else {
                             condition = clause.getComparator() == SearchClause.Comparator.EQUALS
-                                    ? ((AnyObjectFiqlSearchConditionBuilder) builder).inGroups(groupId)
-                                    : ((AnyObjectFiqlSearchConditionBuilder) builder).notInGroups(groupId);
+                                    ? ((AnyObjectFiqlSearchConditionBuilder) builder).inGroups(groupKey)
+                                    : ((AnyObjectFiqlSearchConditionBuilder) builder).notInGroups(groupKey);
                         }
                         break;
 
@@ -271,11 +271,11 @@ public final class SearchUtils implements Serializable {
                                     break;
                                 case EQUALS:
                                     condition = ((UserFiqlSearchConditionBuilder) builder).
-                                            inRelationships(Long.parseLong(value));
+                                            inRelationships(value);
                                     break;
                                 case NOT_EQUALS:
                                     condition = ((UserFiqlSearchConditionBuilder) builder).
-                                            notInRelationships(Long.parseLong(value));
+                                            notInRelationships(value);
                                     break;
                                 default:
                                     break;
@@ -292,11 +292,11 @@ public final class SearchUtils implements Serializable {
                                     break;
                                 case EQUALS:
                                     condition = ((AnyObjectFiqlSearchConditionBuilder) builder).
-                                            inRelationships(Long.parseLong(value));
+                                            inRelationships(value);
                                     break;
                                 case NOT_EQUALS:
                                     condition = ((AnyObjectFiqlSearchConditionBuilder) builder).
-                                            notInRelationships(Long.parseLong(value));
+                                            notInRelationships(value);
                                     break;
                                 default:
                                     break;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
index 78c4ff2..2eaad2f 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
@@ -47,12 +47,12 @@ public abstract class AbstractAnyRestClient<T extends AnyTO> extends BaseRestCli
     public abstract List<T> search(
             String realm, String fiql, int page, int size, final SortParam<String> sort, final String type);
 
-    public abstract T read(final Long key);
+    public abstract T read(final String key);
 
-    public abstract ProvisioningResult<T> delete(String etag, Long key);
+    public abstract ProvisioningResult<T> delete(String etag, String key);
 
     protected <E extends AnyService<T, ?>> ProvisioningResult<T> delete(
-            final Class<E> serviceClass, final Class<T> objectType, final String etag, final Long key) {
+            final Class<E> serviceClass, final Class<T> objectType, final String etag, final String key) {
         ProvisioningResult<T> result;
         synchronized (this) {
             final E service = getService(etag, serviceClass);
@@ -67,7 +67,7 @@ public abstract class AbstractAnyRestClient<T extends AnyTO> extends BaseRestCli
 
     protected abstract Class<? extends AnyService<?, ?>> getAnyServiceClass();
 
-    public BulkActionResult unlink(final String etag, final long key, final List<StatusBean> statuses) {
+    public BulkActionResult unlink(final String etag, final String key, final List<StatusBean> statuses) {
         BulkActionResult result;
         synchronized (this) {
             AnyService<?, ?> service = getService(etag, getAnyServiceClass());
@@ -84,7 +84,7 @@ public abstract class AbstractAnyRestClient<T extends AnyTO> extends BaseRestCli
         return result;
     }
 
-    public BulkActionResult link(final String etag, final long key, final List<StatusBean> statuses) {
+    public BulkActionResult link(final String etag, final String key, final List<StatusBean> statuses) {
         BulkActionResult result;
         synchronized (this) {
             AnyService<?, ?> service = getService(etag, getAnyServiceClass());
@@ -104,7 +104,7 @@ public abstract class AbstractAnyRestClient<T extends AnyTO> extends BaseRestCli
         return result;
     }
 
-    public BulkActionResult deprovision(final String etag, final long key, final List<StatusBean> statuses) {
+    public BulkActionResult deprovision(final String etag, final String key, final List<StatusBean> statuses) {
         BulkActionResult result;
         synchronized (this) {
             AnyService<?, ?> service = getService(etag, getAnyServiceClass());
@@ -121,7 +121,7 @@ public abstract class AbstractAnyRestClient<T extends AnyTO> extends BaseRestCli
         return result;
     }
 
-    public BulkActionResult provision(final String etag, final long key, final List<StatusBean> statuses) {
+    public BulkActionResult provision(final String etag, final String key, final List<StatusBean> statuses) {
         BulkActionResult result;
         synchronized (this) {
             AnyService<?, ?> service = getService(etag, getAnyServiceClass());
@@ -141,7 +141,7 @@ public abstract class AbstractAnyRestClient<T extends AnyTO> extends BaseRestCli
         return result;
     }
 
-    public BulkActionResult unassign(final String etag, final long key, final List<StatusBean> statuses) {
+    public BulkActionResult unassign(final String etag, final String key, final List<StatusBean> statuses) {
         BulkActionResult result;
         synchronized (this) {
             AnyService<?, ?> service = getService(etag, getAnyServiceClass());
@@ -158,7 +158,7 @@ public abstract class AbstractAnyRestClient<T extends AnyTO> extends BaseRestCli
         return result;
     }
 
-    public BulkActionResult assign(final String etag, final long key, final List<StatusBean> statuses) {
+    public BulkActionResult assign(final String etag, final String key, final List<StatusBean> statuses) {
         BulkActionResult result;
         synchronized (this) {
             AnyService<?, ?> service = getService(etag, getAnyServiceClass());

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
index b132d2d..1160fe7 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
@@ -81,7 +81,7 @@ public class AnyObjectRestClient extends AbstractAnyRestClient<AnyObjectTO> {
     }
 
     @Override
-    public AnyObjectTO read(final Long key) {
+    public AnyObjectTO read(final String key) {
         return getService(AnyObjectService.class).read(key);
     }
 
@@ -103,7 +103,7 @@ public class AnyObjectRestClient extends AbstractAnyRestClient<AnyObjectTO> {
     }
 
     @Override
-    public ProvisioningResult<AnyObjectTO> delete(final String etag, final Long key) {
+    public ProvisioningResult<AnyObjectTO> delete(final String etag, final String key) {
         return delete(AnyObjectService.class, AnyObjectTO.class, etag, key);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
index 8dbc8f6..f9e293b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
@@ -71,7 +71,7 @@ public class ConnectorRestClient extends BaseRestClient {
      * @param key the id
      * @return ConnInstanceTO
      */
-    public ConnInstanceTO read(final Long key) {
+    public ConnInstanceTO read(final String key) {
         ConnInstanceTO connectorTO = null;
 
         try {
@@ -91,7 +91,7 @@ public class ConnectorRestClient extends BaseRestClient {
         getService(ConnectorService.class).update(connectorTO);
     }
 
-    public ConnInstanceTO delete(final Long key) {
+    public ConnInstanceTO delete(final String key) {
         ConnInstanceTO connectorTO = getService(ConnectorService.class).
                 read(key, SyncopeConsoleSession.get().getLocale().toString());
         getService(ConnectorService.class).delete(key);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/rest/ExecutionRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ExecutionRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ExecutionRestClient.java
index 7659a5d..1bb0ad9 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ExecutionRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ExecutionRestClient.java
@@ -24,9 +24,9 @@ import org.apache.syncope.common.lib.to.ExecTO;
 
 public interface ExecutionRestClient {
 
-    void startExecution(long executionCollectorKey, Date start);
+    void startExecution(String executionCollectorKey, Date start);
 
-    void deleteExecution(long executionKeyI);
+    void deleteExecution(String executionKey);
 
     List<ExecTO> listRecentExecutions(final int max);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
index 9955073..ff5e08e 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
@@ -20,7 +20,6 @@ package org.apache.syncope.client.console.rest;
 
 import java.util.List;
 import javax.ws.rs.core.GenericType;
-
 import javax.ws.rs.core.Response;
 import org.apache.syncope.common.lib.patch.GroupPatch;
 import org.apache.syncope.common.lib.to.BulkAction;
@@ -53,8 +52,9 @@ public class GroupRestClient extends AbstractAnyRestClient<GroupTO> {
     }
 
     @Override
-    public List<GroupTO> list(final String realm, final int page, final int size, final SortParam<String> sort,
-            final String type) {
+    public List<GroupTO> list(
+            final String realm, final int page, final int size, final SortParam<String> sort, final String type) {
+
         return getService(GroupService.class).
                 list(new AnyListQuery.Builder().realm(realm).page(page).size(size).
                         orderBy(toOrderBy(sort)).details(false).build()).
@@ -86,7 +86,7 @@ public class GroupRestClient extends AbstractAnyRestClient<GroupTO> {
     }
 
     @Override
-    public GroupTO read(final Long key) {
+    public GroupTO read(final String key) {
         return getService(GroupService.class).read(key);
     }
 
@@ -102,7 +102,7 @@ public class GroupRestClient extends AbstractAnyRestClient<GroupTO> {
     }
 
     @Override
-    public ProvisioningResult<GroupTO> delete(final String etag, final Long key) {
+    public ProvisioningResult<GroupTO> delete(final String etag, final String key) {
         return delete(GroupService.class, GroupTO.class, etag, key);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/rest/NotificationRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/NotificationRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/NotificationRestClient.java
index 3f9d820..f5b2e30 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/NotificationRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/NotificationRestClient.java
@@ -39,7 +39,7 @@ public class NotificationRestClient extends BaseRestClient {
         return getService(NotificationService.class).list();
     }
 
-    public NotificationTO read(final Long key) {
+    public NotificationTO read(final String key) {
         return getService(NotificationService.class).read(key);
     }
 
@@ -51,7 +51,7 @@ public class NotificationRestClient extends BaseRestClient {
         getService(NotificationService.class).update(notificationTO);
     }
 
-    public void delete(final Long key) {
+    public void delete(final String key) {
         getService(NotificationService.class).delete(key);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/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 6d21769..c5e8e36 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
@@ -31,7 +31,7 @@ public class PolicyRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -1392090291817187902L;
 
-    public <T extends AbstractPolicyTO> T getPolicy(final Long key) {
+    public <T extends AbstractPolicyTO> T getPolicy(final String key) {
         T policy = null;
         try {
             policy = getService(PolicyService.class).read(key);
@@ -62,7 +62,7 @@ public class PolicyRestClient extends BaseRestClient {
         getService(PolicyService.class).update(policy);
     }
 
-    public void delete(final Long id, final Class<? extends AbstractPolicyTO> policyClass) {
-        getService(PolicyService.class).delete(id);
+    public void delete(final String key, final Class<? extends AbstractPolicyTO> policyClass) {
+        getService(PolicyService.class).delete(key);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
index 9c2b86b..743ebfb 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
@@ -31,7 +31,7 @@ public class ReportRestClient extends BaseRestClient implements ExecutionRestCli
 
     private static final long serialVersionUID = 1644689667998953604L;
 
-    public ReportTO read(final Long reportKey) {
+    public ReportTO read(final String reportKey) {
         return getService(ReportService.class).read(reportKey);
     }
 
@@ -52,17 +52,17 @@ public class ReportRestClient extends BaseRestClient implements ExecutionRestCli
      *
      * @param reportKey report to delete
      */
-    public void delete(final long reportKey) {
+    public void delete(final String reportKey) {
         getService(ReportService.class).delete(reportKey);
     }
 
     @Override
-    public void startExecution(final long reportKey, final Date start) {
+    public void startExecution(final String reportKey, final Date start) {
         getService(ReportService.class).execute(new ExecuteQuery.Builder().key(reportKey).startAt(start).build());
     }
 
     @Override
-    public void deleteExecution(final long reportExecKey) {
+    public void deleteExecution(final String reportExecKey) {
         getService(ReportService.class).deleteExecution(reportExecKey);
     }
 
@@ -71,7 +71,7 @@ public class ReportRestClient extends BaseRestClient implements ExecutionRestCli
         return getService(ReportService.class).listRecentExecutions(max);
     }
 
-    public Response exportExecutionResult(final long executionId, final ReportExecExportFormat fmt) {
-        return getService(ReportService.class).exportExecutionResult(executionId, fmt);
+    public Response exportExecutionResult(final String executionKey, final ReportExecExportFormat fmt) {
+        return getService(ReportService.class).exportExecutionResult(executionKey, fmt);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
index 5e97b69..fceef65 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
@@ -39,7 +39,7 @@ public class ResourceRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -6898907679835668987L;
 
-    public ConnObjectTO readConnObject(final String resource, final String anyTypeKey, final Long anyKey) {
+    public ConnObjectTO readConnObject(final String resource, final String anyTypeKey, final String anyKey) {
         return getService(ResourceService.class).readConnObject(resource, anyTypeKey, anyKey);
     }
 
@@ -97,7 +97,7 @@ public class ResourceRestClient extends BaseRestClient {
 
     public BulkActionResult bulkAssociationAction(
             final String resourceName, final String anyTypeName,
-            final ResourceDeassociationAction action, final List<Long> anyKeys) {
+            final ResourceDeassociationAction action, final List<String> anyKeys) {
 
         ResourceDeassociationPatch patch = new ResourceDeassociationPatch();
         patch.setKey(resourceName);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java
index 725a088..d6d5081 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java
@@ -77,8 +77,7 @@ public class SchemaRestClient extends BaseRestClient {
 
         try {
             CollectionUtils.collect(getSchemas(schemaType),
-                    EntityTOUtils.<String, AbstractSchemaTO>keyTransformer(),
-                    schemaNames);
+                    EntityTOUtils.<AbstractSchemaTO>keyTransformer(), schemaNames);
         } catch (SyncopeClientException e) {
             LOG.error("While getting all user schema names", e);
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/rest/SecurityQuestionRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/SecurityQuestionRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/SecurityQuestionRestClient.java
index 2ed516c..2eb2691 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/SecurityQuestionRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/SecurityQuestionRestClient.java
@@ -38,7 +38,7 @@ public class SecurityQuestionRestClient extends BaseRestClient {
         getService(SecurityQuestionService.class).update(securityQuestionTO);
     }
 
-    public void delete(final Long securityQuestionKey) {
+    public void delete(final String securityQuestionKey) {
         getService(SecurityQuestionService.class).delete(securityQuestionKey);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java
index 378269e..2a494cd 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/TaskRestClient.java
@@ -55,13 +55,13 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
                 build()).getTotalCount();
     }
 
-    public int count(final AnyTypeKind anyTypeKind, final Long anyTypeKey, final TaskType kind) {
+    public int count(final AnyTypeKind anyTypeKind, final String anyTypeKey, final TaskType kind) {
         return getService(TaskService.class).list(
                 new TaskQuery.Builder(kind).anyTypeKind(anyTypeKind).anyTypeKey(anyTypeKey).page(1).size(1).
                 build()).getTotalCount();
     }
 
-    public int countExecutions(final Long taskKey) {
+    public int countExecutions(final String taskKey) {
         return getService(TaskService.class).
                 listExecutions(new TaskExecQuery.Builder().key(taskKey).page(1).size(1).build()).getTotalCount();
     }
@@ -78,7 +78,7 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
     }
 
     public List<PropagationTaskTO> listPropagationTasks(
-            final AnyTypeKind anyTypeKind, final Long anyTypeKey,
+            final AnyTypeKind anyTypeKind, final String anyTypeKey,
             final int page, final int size, final SortParam<String> sort) {
 
         return getService(TaskService.class).
@@ -91,9 +91,9 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
 
     @SuppressWarnings("unchecked")
     public <T extends AbstractTaskTO> List<T> listNotificationTasks(
-            final Long notification,
+            final String notification,
             final AnyTypeKind anyTypeKind,
-            final Long anyTypeKey,
+            final String anyTypeKey,
             final int page,
             final int size,
             final SortParam<String> sort) {
@@ -139,9 +139,9 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
                 getResult();
     }
 
-    public List<ExecTO> listExecutions(final Long taskId, final int page, final int size) {
+    public List<ExecTO> listExecutions(final String taskKey, final int page, final int size) {
         return getService(TaskService.class).
-                listExecutions(new TaskExecQuery.Builder().key(taskId).page(page).size(size).build()).getResult();
+                listExecutions(new TaskExecQuery.Builder().key(taskKey).page(page).size(size).build()).getResult();
     }
 
     private TaskType getTaskType(final Class<?> reference) {
@@ -160,35 +160,35 @@ public class TaskRestClient extends BaseRestClient implements ExecutionRestClien
         return result;
     }
 
-    public PropagationTaskTO readPropagationTask(final Long taskKey) {
+    public PropagationTaskTO readPropagationTask(final String taskKey) {
         return getService(TaskService.class).read(taskKey, false);
     }
 
-    public NotificationTaskTO readNotificationTask(final Long taskKey) {
+    public NotificationTaskTO readNotificationTask(final String taskKey) {
         return getService(TaskService.class).read(taskKey, false);
     }
 
-    public <T extends SchedTaskTO> T readSchedTask(final Class<T> reference, final Long taskKey) {
+    public <T extends SchedTaskTO> T readSchedTask(final Class<T> reference, final String taskKey) {
         return getService(TaskService.class).read(taskKey, false);
     }
 
-    public void delete(final Long taskKey, final Class<? extends AbstractTaskTO> taskToClass) {
+    public void delete(final String taskKey, final Class<? extends AbstractTaskTO> taskToClass) {
         getService(TaskService.class).delete(taskKey);
     }
 
     @Override
-    public void startExecution(final long taskKey, final Date start) {
+    public void startExecution(final String taskKey, final Date start) {
         startExecution(taskKey, start, false);
     }
 
-    public void startExecution(final long taskKey, final Date start, final boolean dryRun) {
+    public void startExecution(final String taskKey, final Date start, final boolean dryRun) {
         getService(TaskService.class).execute(
                 new ExecuteQuery.Builder().key(taskKey).startAt(start).dryRun(dryRun).build());
     }
 
     @Override
-    public void deleteExecution(final long taskExecId) {
-        getService(TaskService.class).deleteExecution(taskExecId);
+    public void deleteExecution(final String taskExecKey) {
+        getService(TaskService.class).deleteExecution(taskExecKey);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
index d4561fe..dce489c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
@@ -83,12 +83,12 @@ public class UserRestClient extends AbstractAnyRestClient<UserTO> {
     }
 
     @Override
-    public ProvisioningResult<UserTO> delete(final String etag, final Long key) {
+    public ProvisioningResult<UserTO> delete(final String etag, final String key) {
         return delete(UserService.class, UserTO.class, etag, key);
     }
 
     @Override
-    public UserTO read(final Long key) {
+    public UserTO read(final String key) {
         return getService(UserService.class).read(key);
     }
 
@@ -109,14 +109,14 @@ public class UserRestClient extends AbstractAnyRestClient<UserTO> {
                         orderBy(toOrderBy(sort)).details(false).build()).getResult();
     }
 
-    public ProvisioningResult<UserTO> mustChangePassword(final String etag, final boolean value, final Long key) {
+    public ProvisioningResult<UserTO> mustChangePassword(final String etag, final boolean value, final String key) {
         final UserPatch userPatch = new UserPatch();
         userPatch.setKey(key);
         userPatch.setMustChangePassword(new BooleanReplacePatchItem.Builder().value(value).build());
         return update(etag, userPatch);
     }
 
-    public void suspend(final String etag, final long userKey, final List<StatusBean> statuses) {
+    public void suspend(final String etag, final String userKey, final List<StatusBean> statuses) {
         StatusPatch statusPatch = StatusUtils.buildStatusPatch(statuses, false);
         statusPatch.setKey(userKey);
         statusPatch.setType(StatusPatchType.SUSPEND);
@@ -127,7 +127,7 @@ public class UserRestClient extends AbstractAnyRestClient<UserTO> {
         }
     }
 
-    public void reactivate(final String etag, final long userKey, final List<StatusBean> statuses) {
+    public void reactivate(final String etag, final String userKey, final List<StatusBean> statuses) {
         StatusPatch statusPatch = StatusUtils.buildStatusPatch(statuses, true);
         statusPatch.setKey(userKey);
         statusPatch.setType(StatusPatchType.REACTIVATE);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/tasks/AnyPropagationTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/AnyPropagationTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/AnyPropagationTaskDirectoryPanel.java
index c8ea264..811e3a2 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/AnyPropagationTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/AnyPropagationTaskDirectoryPanel.java
@@ -33,13 +33,13 @@ public abstract class AnyPropagationTaskDirectoryPanel extends PropagationTaskDi
 
     private final AnyTypeKind anyTypeKind;
 
-    private final Long anyTypeKey;
+    private final String anyTypeKey;
 
     protected AnyPropagationTaskDirectoryPanel(
             final BaseModal<?> baseModal,
             final MultilevelPanel multiLevelPanelRef,
             final AnyTypeKind anyTypeKind,
-            final Long anyTypeKey,
+            final String anyTypeKey,
             final PageReference pageRef) {
 
         super(baseModal, multiLevelPanelRef, null, pageRef);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/tasks/AnyPropagationTasks.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/AnyPropagationTasks.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/AnyPropagationTasks.java
index d59ee81..5cfa7d5 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/AnyPropagationTasks.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/AnyPropagationTasks.java
@@ -35,7 +35,7 @@ public class AnyPropagationTasks extends AbstractPropagationTasks {
     public <T extends AnyTO> AnyPropagationTasks(
             final BaseModal<?> baseModal,
             final AnyTypeKind anyTypeKind,
-            final Long anyTypeKey,
+            final String anyTypeKey,
             final PageReference pageReference) {
 
         super(BaseModal.CONTENT_ID);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
index d60d507..03d62e7 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
@@ -49,26 +49,24 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.model.StringResourceModel;
 
-/**
- * Tasks page.
- */
 public abstract class NotificationTaskDirectoryPanel
         extends TaskDirectoryPanel<NotificationTaskTO> implements ModalPanel<NotificationTaskTO> {
 
     private static final long serialVersionUID = 4984337552918213290L;
 
-    private final Long notification;
+    private final String notification;
 
     private final AnyTypeKind anyTypeKind;
 
-    private final Long anyTypeKey;
+    private final String anyTypeKey;
 
     protected NotificationTaskDirectoryPanel(
-            final Long notification,
+            final String notification,
             final AnyTypeKind anyTypeKind,
-            final Long anyTypeKey,
+            final String anyTypeKey,
             final MultilevelPanel multiLevelPanelRef,
             final PageReference pageRef) {
+
         super(null, multiLevelPanelRef, pageRef);
         this.notification = notification;
         this.anyTypeKind = anyTypeKind;
@@ -201,17 +199,18 @@ public abstract class NotificationTaskDirectoryPanel
 
         private static final long serialVersionUID = 4725679400450513556L;
 
-        private final Long notification;
+        private final String notification;
 
         private final AnyTypeKind anyTypeKind;
 
-        private final Long anyTypeKey;
+        private final String anyTypeKey;
 
         public NotificationTasksProvider(
-                final Long notification,
+                final String notification,
                 final AnyTypeKind anyTypeKind,
-                final Long anyTypeKey,
+                final String anyTypeKey,
                 final int paginatorRows) {
+
             super(paginatorRows, TaskType.PROPAGATION, restClient);
             this.notification = notification;
             this.anyTypeKind = anyTypeKind;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
index 282e847..da36a28 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
@@ -32,6 +32,7 @@ import org.apache.syncope.client.console.panels.ModalPanel;
 import org.apache.syncope.client.console.panels.MultilevelPanel;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink.ActionType;
@@ -72,7 +73,7 @@ public abstract class PropagationTaskDirectoryPanel
     protected List<IColumn<PropagationTaskTO, String>> getColumns() {
         final List<IColumn<PropagationTaskTO, String>> columns = new ArrayList<>();
 
-        columns.add(new PropertyColumn<PropagationTaskTO, String>(
+        columns.add(new KeyPropertyColumn<PropagationTaskTO>(
                 new StringResourceModel("key", this, null), "key", "key"));
 
         columns.add(new PropertyColumn<PropagationTaskTO, String>(new StringResourceModel(

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java
index 0d8538f..6d1554c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java
@@ -24,6 +24,7 @@ import java.util.Iterator;
 import java.util.List;
 import org.apache.syncope.client.console.panels.MultilevelPanel;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.common.lib.to.AbstractProvisioningTaskTO;
 import org.apache.syncope.common.lib.to.PullTaskTO;
@@ -67,9 +68,9 @@ public abstract class ProvisioningTaskDirectoryPanel<T extends AbstractProvision
 
     @Override
     protected List<IColumn<T, String>> getFieldColumns() {
-        final List<IColumn<T, String>> columns = new ArrayList<>();
+        List<IColumn<T, String>> columns = new ArrayList<>();
 
-        columns.add(new PropertyColumn<T, String>(
+        columns.add(new KeyPropertyColumn<T>(
                 new StringResourceModel("key", this, null), "key", "key"));
 
         columns.add(new PropertyColumn<T, String>(

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
index 1ef8b50..ac8f210 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
@@ -32,6 +32,7 @@ import org.apache.syncope.client.console.panels.ModalPanel;
 import org.apache.syncope.client.console.panels.MultilevelPanel;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink.ActionType;
@@ -98,7 +99,7 @@ public abstract class SchedTaskDirectoryPanel<T extends SchedTaskTO>
     protected List<IColumn<T, String>> getFieldColumns() {
         final List<IColumn<T, String>> columns = new ArrayList<>();
 
-        columns.add(new PropertyColumn<T, String>(
+        columns.add(new KeyPropertyColumn<T>(
                 new StringResourceModel("key", this, null), "key", "key"));
 
         columns.add(new PropertyColumn<T, String>(
@@ -195,7 +196,7 @@ public abstract class SchedTaskDirectoryPanel<T extends SchedTaskTO>
                             @Override
                             public void onClick(final AjaxRequestTarget target, final T ignore) {
                                 final T clone = SerializationUtils.clone(model.getObject());
-                                clone.setKey(0L);
+                                clone.setKey(null);
                                 send(SchedTaskDirectoryPanel.this, Broadcast.EXACT,
                                         new AjaxWizard.EditItemActionEvent<>(clone, target));
                             }