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/03/31 17:28:56 UTC

[02/10] syncope git commit: [SYNCOPE-156] Various small improvements

[SYNCOPE-156] Various small improvements


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

Branch: refs/heads/master
Commit: e29d78c17a899339a47531865d261043c2073429
Parents: 85cc122
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Thu Mar 31 12:44:31 2016 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Thu Mar 31 12:44:31 2016 +0200

----------------------------------------------------------------------
 .../AnyObjectDisplayAttributesModalPage.java    | 69 --------------------
 .../AnyObjectDisplayAttributesModalPanel.java   | 69 ++++++++++++++++++++
 .../panels/AnyObjectSearchResultPanel.java      | 13 ++--
 .../console/panels/AnyTypeClassesPanel.java     |  2 +-
 .../client/console/panels/AnyTypesPanel.java    |  2 +-
 .../panels/DisplayAttributesModalPanel.java     | 69 +++++++++-----------
 .../GroupDisplayAttributesModalPanel.java       | 10 +--
 .../console/panels/GroupSearchResultPanel.java  | 15 ++---
 .../client/console/panels/ParametersPanel.java  |  2 +-
 .../console/panels/RelationshipTypesPanel.java  |  2 +-
 .../console/panels/RoleSearchResultPanel.java   |  2 +-
 .../client/console/panels/SchemaTypePanel.java  |  2 +-
 .../console/panels/SecurityQuestionsPanel.java  |  2 +-
 .../panels/UserDisplayAttributesModalPanel.java | 10 +--
 .../console/panels/UserSearchResultPanel.java   | 24 ++++---
 .../AnyObjectSelectionSearchResultPanel.java    | 13 ++--
 .../search/AnySelectionSearchResultPanel.java   | 45 ++++++++-----
 .../search/GroupSelectionSearchResultPanel.java | 13 ++--
 .../console/panels/search/UserSearchPanel.java  |  2 +-
 .../search/UserSelectionSearchResultPanel.java  | 13 ++--
 .../tasks/PropagationTaskSearchResultPanel.java |  2 +-
 .../tasks/SchedTaskSearchResultPanel.java       |  2 +-
 .../client/console/tasks/TaskExecutions.java    |  2 +-
 .../console/todos/TODOSearchResultPanel.java    |  2 +-
 .../html/repeater/data/table/TokenColumn.java   | 53 +++++++++++++++
 25 files changed, 253 insertions(+), 187 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDisplayAttributesModalPage.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDisplayAttributesModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDisplayAttributesModalPage.java
deleted file mode 100644
index 7e1bd2a..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDisplayAttributesModalPage.java
+++ /dev/null
@@ -1,69 +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.panels;
-
-import java.io.Serializable;
-import java.util.List;
-import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
-import org.apache.syncope.common.lib.to.AnyObjectTO;
-import org.apache.wicket.PageReference;
-
-/**
- * Modal window with Display any attributes form.
- *
- * @param <T> can be {@link org.apache.syncope.common.lib.to.AnyTO} or
- * {@link org.apache.syncope.client.console.wizards.any.AnyHandler}
- */
-public class AnyObjectDisplayAttributesModalPage<T extends Serializable> extends DisplayAttributesModalPanel<T> {
-
-    private static final long serialVersionUID = 5194630813773543054L;
-
-    public static final String[] ANY_OBJECT_DEFAULT_SELECTION = { "key" };
-
-    public AnyObjectDisplayAttributesModalPage(
-            final BaseModal<T> modal,
-            final PageReference pageRef,
-            final List<String> schemaNames,
-            final List<String> dSchemaNames,
-            final String type) {
-
-        super(modal, pageRef, schemaNames, dSchemaNames, type);
-    }
-
-    @Override
-    public String getPrefDetailView() {
-        return String.format(Constants.PREF_ANY_OBJECT_DETAILS_VIEW, type);
-    }
-
-    @Override
-    public String getPrefAttributeView() {
-        return String.format(Constants.PREF_ANY_OBJECT_PLAIN_ATTRS_VIEW, type);
-    }
-
-    @Override
-    public String getPrefDerivedAttributeView() {
-        return String.format(Constants.PREF_ANY_OBJECT_DER_ATTRS_VIEW, type);
-    }
-
-    @Override
-    public Class<AnyObjectTO> getTOClass() {
-        return AnyObjectTO.class;
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDisplayAttributesModalPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDisplayAttributesModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDisplayAttributesModalPanel.java
new file mode 100644
index 0000000..9b02666
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDisplayAttributesModalPanel.java
@@ -0,0 +1,69 @@
+/*
+ * 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.panels;
+
+import java.io.Serializable;
+import java.util.List;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.common.lib.to.AnyObjectTO;
+import org.apache.wicket.PageReference;
+
+/**
+ * Modal window with Display any attributes form.
+ *
+ * @param <T> can be {@link org.apache.syncope.common.lib.to.AnyTO} or
+ * {@link org.apache.syncope.client.console.wizards.any.AnyHandler}
+ */
+public class AnyObjectDisplayAttributesModalPanel<T extends Serializable> extends DisplayAttributesModalPanel<T> {
+
+    private static final long serialVersionUID = 5194630813773543054L;
+
+    public static final String[] DEFAULT_SELECTION = { "key" };
+
+    public AnyObjectDisplayAttributesModalPanel(
+            final BaseModal<T> modal,
+            final PageReference pageRef,
+            final List<String> schemaNames,
+            final List<String> dSchemaNames,
+            final String type) {
+
+        super(modal, pageRef, schemaNames, dSchemaNames, type);
+    }
+
+    @Override
+    protected String getPrefDetailView() {
+        return String.format(Constants.PREF_ANY_OBJECT_DETAILS_VIEW, type);
+    }
+
+    @Override
+    protected String getPrefPlainAttributeView() {
+        return String.format(Constants.PREF_ANY_OBJECT_PLAIN_ATTRS_VIEW, type);
+    }
+
+    @Override
+    protected String getPrefDerivedAttributeView() {
+        return String.format(Constants.PREF_ANY_OBJECT_DER_ATTRS_VIEW, type);
+    }
+
+    @Override
+    protected Class<AnyObjectTO> getTOClass() {
+        return AnyObjectTO.class;
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectSearchResultPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectSearchResultPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectSearchResultPanel.java
index 8eeb37b..af4dcd1 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectSearchResultPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectSearchResultPanel.java
@@ -21,6 +21,7 @@ package org.apache.syncope.client.console.panels;
 import java.io.Serializable;
 import java.lang.reflect.Field;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import org.apache.commons.lang3.SerializationUtils;
@@ -100,14 +101,18 @@ public class AnyObjectSearchResultPanel extends AnySearchResultPanel<AnyObjectTO
 
         // Add defaults in case of no selection
         if (columns.isEmpty()) {
-            for (String name : AnyObjectDisplayAttributesModalPage.ANY_OBJECT_DEFAULT_SELECTION) {
+            for (String name : AnyObjectDisplayAttributesModalPanel.DEFAULT_SELECTION) {
                 columns.add(new PropertyColumn<AnyObjectTO, String>(new ResourceModel(name, name), name, name));
             }
+
+            prefMan.setList(getRequest(), getResponse(),
+                    String.format(Constants.PREF_ANY_OBJECT_DETAILS_VIEW, type),
+                    Arrays.asList(AnyObjectDisplayAttributesModalPanel.DEFAULT_SELECTION));
         }
 
         setWindowClosedReloadCallback(displayAttributeModal);
 
-        columns.add(new ActionColumn<AnyObjectTO, String>(new ResourceModel("actions", "")) {
+        columns.add(new ActionColumn<AnyObjectTO, String>(new ResourceModel("actions")) {
 
             private static final long serialVersionUID = -3503023501954863131L;
 
@@ -191,10 +196,10 @@ public class AnyObjectSearchResultPanel extends AnySearchResultPanel<AnyObjectTO
 
                     @Override
                     public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
-                        target.add(displayAttributeModal.setContent(new AnyObjectDisplayAttributesModalPage<>(
+                        target.add(displayAttributeModal.setContent(new AnyObjectDisplayAttributesModalPanel<>(
                                 displayAttributeModal, page.getPageReference(), pSchemaNames, dSchemaNames, type)));
                         displayAttributeModal.addSumbitButton();
-                        displayAttributeModal.header(new ResourceModel("any.attr.display", ""));
+                        displayAttributeModal.header(new ResourceModel("any.attr.display"));
                         displayAttributeModal.show(true);
                     }
                 }, ActionLink.ActionType.CHANGE_VIEW, String.format("%s_%s", type, AnyEntitlement.READ)).add(

http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
index 5c2b446..d0f4b97 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
@@ -148,7 +148,7 @@ public class AnyTypeClassesPanel extends AbstractTypesPanel<AnyTypeClassTO, AnyT
             }
         }
 
-        columns.add(new ActionColumn<AnyTypeClassTO, String>(new ResourceModel("actions", "")) {
+        columns.add(new ActionColumn<AnyTypeClassTO, String>(new ResourceModel("actions")) {
 
             private static final long serialVersionUID = 906457126287899096L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java
index 93d19b6..61535b4 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java
@@ -150,7 +150,7 @@ public class AnyTypesPanel extends AbstractTypesPanel<AnyTypeTO, AnyTypeProvider
             }
         }
 
-        columns.add(new ActionColumn<AnyTypeTO, String>(new ResourceModel("actions", "")) {
+        columns.add(new ActionColumn<AnyTypeTO, String>(new ResourceModel("actions")) {
 
             private static final long serialVersionUID = 906457126287899096L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/client/console/src/main/java/org/apache/syncope/client/console/panels/DisplayAttributesModalPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/DisplayAttributesModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/DisplayAttributesModalPanel.java
index 87398c2..f09b59a 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/DisplayAttributesModalPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/DisplayAttributesModalPanel.java
@@ -73,7 +73,7 @@ public abstract class DisplayAttributesModalPanel<T extends Serializable> extend
     public DisplayAttributesModalPanel(
             final BaseModal<T> modal,
             final PageReference pageRef,
-            final List<String> schemaNames,
+            final List<String> pSchemaNames,
             final List<String> dSchemaNames,
             final String type) {
 
@@ -90,13 +90,13 @@ public abstract class DisplayAttributesModalPanel<T extends Serializable> extend
             }
         };
 
-        final IModel<List<String>> names = new LoadableDetachableModel<List<String>>() {
+        final IModel<List<String>> psnames = new LoadableDetachableModel<List<String>>() {
 
             private static final long serialVersionUID = 5275935387613157437L;
 
             @Override
             protected List<String> load() {
-                return schemaNames;
+                return pSchemaNames;
             }
         };
 
@@ -111,61 +111,54 @@ public abstract class DisplayAttributesModalPanel<T extends Serializable> extend
         };
 
         selectedDetails = prefMan.getList(getRequest(), getPrefDetailView());
-        selectedPlainSchemas = prefMan.getList(getRequest(), getPrefAttributeView());
+        selectedPlainSchemas = prefMan.getList(getRequest(), getPrefPlainAttributeView());
         selectedDerSchemas = prefMan.getList(getRequest(), getPrefDerivedAttributeView());
 
         final WebMarkupContainer container = new WebMarkupContainer("container");
         container.setOutputMarkupId(true);
         add(container);
 
-        final AjaxPalettePanel<String> plainSchema =
-                new AjaxPalettePanel.Builder<String>()
-                .setAllowOrder(true)
-                .setAllowMoveAll(true)
-                .build("plainSchemas",
-                        new PropertyModel<List<String>>(this, "selectedPlainSchemas"),
-                        new ListModel<>(names.getObject()));
-
-        plainSchema.hideLabel();
-        plainSchema.setOutputMarkupId(true);
-        container.add(plainSchema);
-
-        final AjaxPalettePanel<String> details =
-                new AjaxPalettePanel.Builder<String>()
-                .setAllowOrder(true)
-                .setAllowMoveAll(true)
-                .build("details",
+        AjaxPalettePanel<String> details = new AjaxPalettePanel.Builder<String>().
+                setAllowOrder(true).
+                setAllowMoveAll(true).
+                build("details",
                         new PropertyModel<List<String>>(this, "selectedDetails"),
                         new ListModel<>(fnames.getObject()));
-
         details.hideLabel();
         details.setOutputMarkupId(true);
         container.add(details);
 
-        final AjaxPalettePanel<String> derSchema =
-                new AjaxPalettePanel.Builder<String>()
-                .setAllowOrder(true)
-                .setAllowMoveAll(true)
-                .build("derSchemas",
+        AjaxPalettePanel<String> plainSchemas = new AjaxPalettePanel.Builder<String>().
+                setAllowOrder(true).
+                setAllowMoveAll(true).
+                build("plainSchemas",
+                        new PropertyModel<List<String>>(this, "selectedPlainSchemas"),
+                        new ListModel<>(psnames.getObject()));
+        plainSchemas.hideLabel();
+        plainSchemas.setOutputMarkupId(true);
+        container.add(plainSchemas);
+
+        AjaxPalettePanel<String> derSchemas = new AjaxPalettePanel.Builder<String>().
+                setAllowOrder(true).
+                setAllowMoveAll(true).
+                build("derSchemas",
                         new PropertyModel<List<String>>(this, "selectedDerSchemas"),
                         new ListModel<>(dsnames.getObject()));
-        derSchema.hideLabel();
-        derSchema.setOutputMarkupId(true);
-        container.add(derSchema);
+        derSchemas.hideLabel();
+        derSchemas.setOutputMarkupId(true);
+        container.add(derSchemas);
     }
 
     @Override
     public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
-        if (selectedDetails.size() + selectedPlainSchemas.size() + selectedDerSchemas.size()
-                > MAX_SELECTIONS) {
-
+        if (selectedDetails.size() + selectedPlainSchemas.size() + selectedDerSchemas.size() > MAX_SELECTIONS) {
             error(getString("tooManySelections"));
             onError(target, form);
         } else {
             final Map<String, List<String>> prefs = new HashMap<>();
 
             prefs.put(getPrefDetailView(), selectedDetails);
-            prefs.put(getPrefAttributeView(), selectedPlainSchemas);
+            prefs.put(getPrefPlainAttributeView(), selectedPlainSchemas);
             prefs.put(getPrefDerivedAttributeView(), selectedDerSchemas);
             prefMan.setList(getRequest(), getResponse(), prefs);
 
@@ -175,12 +168,12 @@ public abstract class DisplayAttributesModalPanel<T extends Serializable> extend
         }
     }
 
-    public abstract String getPrefDetailView();
+    protected abstract String getPrefDetailView();
 
-    public abstract String getPrefAttributeView();
+    protected abstract String getPrefPlainAttributeView();
 
-    public abstract String getPrefDerivedAttributeView();
+    protected abstract String getPrefDerivedAttributeView();
 
-    public abstract Class<? extends AnyTO> getTOClass();
+    protected abstract Class<? extends AnyTO> getTOClass();
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDisplayAttributesModalPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDisplayAttributesModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDisplayAttributesModalPanel.java
index 0519781..30aeb96 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDisplayAttributesModalPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDisplayAttributesModalPanel.java
@@ -35,7 +35,7 @@ public class GroupDisplayAttributesModalPanel<T extends Serializable> extends Di
 
     private static final long serialVersionUID = 5194630813773543054L;
 
-    public static final String[] GROUP_DEFAULT_SELECTION = { "key", "name" };
+    public static final String[] DEFAULT_SELECTION = { "key", "name" };
 
     public GroupDisplayAttributesModalPanel(
             final BaseModal<T> modal,
@@ -46,22 +46,22 @@ public class GroupDisplayAttributesModalPanel<T extends Serializable> extends Di
     }
 
     @Override
-    public String getPrefDetailView() {
+    protected String getPrefDetailView() {
         return Constants.PREF_GROUP_DETAILS_VIEW;
     }
 
     @Override
-    public String getPrefAttributeView() {
+    protected String getPrefPlainAttributeView() {
         return Constants.PREF_GROUP_PLAIN_ATTRS_VIEW;
     }
 
     @Override
-    public String getPrefDerivedAttributeView() {
+    protected String getPrefDerivedAttributeView() {
         return Constants.PREF_GROUP_DER_ATTRS_VIEW;
     }
 
     @Override
-    public Class<GroupTO> getTOClass() {
+    protected Class<GroupTO> getTOClass() {
         return GroupTO.class;
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupSearchResultPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupSearchResultPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupSearchResultPanel.java
index c82b56f..50a92f5 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupSearchResultPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupSearchResultPanel.java
@@ -32,6 +32,7 @@ import org.apache.syncope.client.console.rest.GroupRestClient;
 import org.apache.syncope.client.console.status.StatusModal;
 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.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
 import org.apache.syncope.client.console.wizards.AjaxWizard;
@@ -74,10 +75,8 @@ public class GroupSearchResultPanel extends AnySearchResultPanel<GroupTO> {
         for (String name : prefMan.getList(getRequest(), Constants.PREF_GROUP_DETAILS_VIEW)) {
             final Field field = ReflectionUtils.findField(GroupTO.class, name);
 
-            if ("token".equalsIgnoreCase(name)) {
-                columns.add(new PropertyColumn<GroupTO, String>(new ResourceModel(name, name), name, name));
-            } else if (field != null && field.getType().equals(Date.class)) {
-                columns.add(new PropertyColumn<GroupTO, String>(new ResourceModel(name, name), name, name));
+            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));
             }
@@ -97,17 +96,17 @@ public class GroupSearchResultPanel extends AnySearchResultPanel<GroupTO> {
 
         // Add defaults in case of no selection
         if (columns.isEmpty()) {
-            for (String name : GroupDisplayAttributesModalPanel.GROUP_DEFAULT_SELECTION) {
+            for (String name : GroupDisplayAttributesModalPanel.DEFAULT_SELECTION) {
                 columns.add(new PropertyColumn<GroupTO, String>(new ResourceModel(name, name), name, name));
             }
 
             prefMan.setList(getRequest(), getResponse(), Constants.PREF_GROUP_DETAILS_VIEW,
-                    Arrays.asList(GroupDisplayAttributesModalPanel.GROUP_DEFAULT_SELECTION));
+                    Arrays.asList(GroupDisplayAttributesModalPanel.DEFAULT_SELECTION));
         }
 
         setWindowClosedReloadCallback(displayAttributeModal);
 
-        columns.add(new ActionColumn<GroupTO, String>(new ResourceModel("actions", "")) {
+        columns.add(new ActionColumn<GroupTO, String>(new ResourceModel("actions")) {
 
             private static final long serialVersionUID = -3503023501954863131L;
 
@@ -194,7 +193,7 @@ public class GroupSearchResultPanel extends AnySearchResultPanel<GroupTO> {
                         target.add(displayAttributeModal.setContent(new GroupDisplayAttributesModalPanel<>(
                                 displayAttributeModal, page.getPageReference(), pSchemaNames, dSchemaNames)));
                         displayAttributeModal.addSumbitButton();
-                        displayAttributeModal.header(new ResourceModel("any.attr.display", ""));
+                        displayAttributeModal.header(new ResourceModel("any.attr.display"));
                         displayAttributeModal.show(true);
                     }
                 }, ActionLink.ActionType.CHANGE_VIEW, StandardEntitlement.GROUP_READ).add(

http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersPanel.java
index 60540d9..d4099b8 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersPanel.java
@@ -138,7 +138,7 @@ public class ParametersPanel extends AbstractSearchResultPanel<
         columns.add(new PropertyColumn<AttrTO, String>(new ResourceModel("schema"), "schema", "schema"));
         columns.add(new PropertyColumn<AttrTO, String>(new ResourceModel("values"), "values"));
 
-        columns.add(new ActionColumn<AttrTO, String>(new ResourceModel("actions", "")) {
+        columns.add(new ActionColumn<AttrTO, String>(new ResourceModel("actions")) {
 
             private static final long serialVersionUID = 906457126287899096L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/client/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java
index a2fa48f..c148ea7 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java
@@ -152,7 +152,7 @@ public class RelationshipTypesPanel extends AbstractTypesPanel<RelationshipTypeT
             }
         }
 
-        columns.add(new ActionColumn<RelationshipTypeTO, String>(new ResourceModel("actions", "")) {
+        columns.add(new ActionColumn<RelationshipTypeTO, String>(new ResourceModel("actions")) {
 
             private static final long serialVersionUID = 906457126287899096L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleSearchResultPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleSearchResultPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleSearchResultPanel.java
index 3856375..fec8760 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleSearchResultPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleSearchResultPanel.java
@@ -82,7 +82,7 @@ public class RoleSearchResultPanel
         columns.add(new PropertyColumn<RoleTO, String>(
                 new ResourceModel("realms"), null, "realms"));
 
-        columns.add(new ActionColumn<RoleTO, String>(new ResourceModel("actions", "")) {
+        columns.add(new ActionColumn<RoleTO, String>(new ResourceModel("actions")) {
 
             private static final long serialVersionUID = -3503023501954863131L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
index dd0c3aa..5857c3f 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
@@ -179,7 +179,7 @@ public class SchemaTypePanel extends AbstractTypesPanel<AbstractSchemaTO, Schema
             }
         }
 
-        columns.add(new ActionColumn<AbstractSchemaTO, String>(new ResourceModel("actions", "")) {
+        columns.add(new ActionColumn<AbstractSchemaTO, String>(new ResourceModel("actions")) {
 
             private static final long serialVersionUID = 906457126287899096L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/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 beb15d4..5317df8 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
@@ -146,7 +146,7 @@ public class SecurityQuestionsPanel extends AbstractSearchResultPanel<
             }
         }
 
-        columns.add(new ActionColumn<SecurityQuestionTO, String>(new ResourceModel("actions", "")) {
+        columns.add(new ActionColumn<SecurityQuestionTO, String>(new ResourceModel("actions")) {
 
             private static final long serialVersionUID = -8089193528195091515L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDisplayAttributesModalPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDisplayAttributesModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDisplayAttributesModalPanel.java
index c8022e3..ff833a8 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDisplayAttributesModalPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDisplayAttributesModalPanel.java
@@ -35,7 +35,7 @@ public class UserDisplayAttributesModalPanel<T extends Serializable> extends Dis
 
     private static final long serialVersionUID = 5194630813773543054L;
 
-    public static final String[] USER_DEFAULT_SELECTION = { "key", "username", "status", "mustChangePassword" };
+    public static final String[] DEFAULT_SELECTION = { "key", "username", "status", "mustChangePassword" };
 
     public UserDisplayAttributesModalPanel(
             final BaseModal<T> modal,
@@ -46,22 +46,22 @@ public class UserDisplayAttributesModalPanel<T extends Serializable> extends Dis
     }
 
     @Override
-    public String getPrefDetailView() {
+    protected String getPrefDetailView() {
         return Constants.PREF_USERS_DETAILS_VIEW;
     }
 
     @Override
-    public String getPrefAttributeView() {
+    protected String getPrefPlainAttributeView() {
         return Constants.PREF_USERS_PLAIN_ATTRS_VIEW;
     }
 
     @Override
-    public String getPrefDerivedAttributeView() {
+    protected String getPrefDerivedAttributeView() {
         return Constants.PREF_USERS_DER_ATTRS_VIEW;
     }
 
     @Override
-    public Class<UserTO> getTOClass() {
+    protected Class<UserTO> getTOClass() {
         return UserTO.class;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/client/console/src/main/java/org/apache/syncope/client/console/panels/UserSearchResultPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/UserSearchResultPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/UserSearchResultPanel.java
index 443d01e..3a6596d 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/UserSearchResultPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/UserSearchResultPanel.java
@@ -23,6 +23,7 @@ import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Date;
 import java.util.List;
 import org.apache.commons.lang3.SerializationUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -33,6 +34,8 @@ import org.apache.syncope.client.console.status.StatusModal;
 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.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.TokenColumn;
 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.AjaxWizard;
@@ -81,14 +84,19 @@ public class UserSearchResultPanel extends AnySearchResultPanel<UserTO> {
 
     @Override
     protected List<IColumn<UserTO, String>> getColumns() {
-
         final List<IColumn<UserTO, String>> columns = new ArrayList<>();
 
         for (String name : prefMan.getList(getRequest(), Constants.PREF_USERS_DETAILS_VIEW)) {
             final Field field = ReflectionUtils.findField(UserTO.class, name);
 
-            if (field != null && (field.getType().equals(Boolean.class) || field.getType().equals(boolean.class))) {
+            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))) {
+
                 columns.add(new BooleanPropertyColumn<UserTO>(new ResourceModel(name, name), name, name));
+            } else if (field != null && field.getType().equals(Date.class)) {
+                columns.add(new DatePropertyColumn<UserTO>(new ResourceModel(name, name), name, name));
             } else {
                 columns.add(new PropertyColumn<UserTO, String>(new ResourceModel(name, name), name, name));
             }
@@ -108,17 +116,17 @@ public class UserSearchResultPanel extends AnySearchResultPanel<UserTO> {
 
         // Add defaults in case of no selection
         if (columns.isEmpty()) {
-            for (String name : UserDisplayAttributesModalPanel.USER_DEFAULT_SELECTION) {
+            for (String name : UserDisplayAttributesModalPanel.DEFAULT_SELECTION) {
                 columns.add(new PropertyColumn<UserTO, String>(new ResourceModel(name, name), name, name));
             }
 
             prefMan.setList(getRequest(), getResponse(), Constants.PREF_USERS_DETAILS_VIEW,
-                    Arrays.asList(UserDisplayAttributesModalPanel.USER_DEFAULT_SELECTION));
+                    Arrays.asList(UserDisplayAttributesModalPanel.DEFAULT_SELECTION));
         }
 
         setWindowClosedReloadCallback(displayAttributeModal);
 
-        columns.add(new ActionColumn<UserTO, String>(new ResourceModel("actions", "")) {
+        columns.add(new ActionColumn<UserTO, String>(new ResourceModel("actions")) {
 
             private static final long serialVersionUID = -3503023501954863131L;
 
@@ -151,8 +159,8 @@ public class UserSearchResultPanel extends AnySearchResultPanel<UserTO> {
                     @Override
                     public void onClick(final AjaxRequestTarget target, final UserTO ignore) {
 
-                        final IModel<AnyHandler<UserTO>> formModel
-                                = new CompoundPropertyModel<>(new AnyHandler<>(model.getObject()));
+                        final IModel<AnyHandler<UserTO>> formModel =
+                                new CompoundPropertyModel<>(new AnyHandler<>(model.getObject()));
                         altDefaultModal.setFormModel(formModel);
 
                         target.add(altDefaultModal.setContent(new StatusModal<>(
@@ -239,7 +247,7 @@ public class UserSearchResultPanel extends AnySearchResultPanel<UserTO> {
                         target.add(displayAttributeModal.setContent(new UserDisplayAttributesModalPanel<>(
                                 displayAttributeModal, page.getPageReference(), pSchemaNames, dSchemaNames)));
 
-                        displayAttributeModal.header(new ResourceModel("any.attr.display", ""));
+                        displayAttributeModal.header(new ResourceModel("any.attr.display"));
                         displayAttributeModal.addSumbitButton();
                         displayAttributeModal.show(true);
                     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSelectionSearchResultPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSelectionSearchResultPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSelectionSearchResultPanel.java
index 4213084..9b37287 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSelectionSearchResultPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSelectionSearchResultPanel.java
@@ -20,6 +20,7 @@ package org.apache.syncope.client.console.panels.search;
 
 import java.util.List;
 import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.panels.AnyObjectDisplayAttributesModalPanel;
 import org.apache.syncope.client.console.rest.AnyObjectRestClient;
 import org.apache.syncope.client.console.wizards.WizardMgtPanel;
 import org.apache.syncope.client.console.wizards.any.AnyHandler;
@@ -31,10 +32,8 @@ public final class AnyObjectSelectionSearchResultPanel extends AnySelectionSearc
 
     private static final long serialVersionUID = -1100228004207271272L;
 
-    public static final String[] USER_DEFAULT_SELECTION = { "key" };
-
     private AnyObjectSelectionSearchResultPanel(final String id, final Builder builder) {
-        super(id, builder);
+        super(id, builder, AnyObjectTO.class);
     }
 
     @Override
@@ -43,8 +42,8 @@ public final class AnyObjectSelectionSearchResultPanel extends AnySelectionSearc
     }
 
     @Override
-    protected String[] getDislayAttributes() {
-        return USER_DEFAULT_SELECTION;
+    protected String[] getDisplayAttributes() {
+        return AnyObjectDisplayAttributesModalPanel.DEFAULT_SELECTION;
     }
 
     @Override
@@ -53,7 +52,7 @@ public final class AnyObjectSelectionSearchResultPanel extends AnySelectionSearc
     }
 
     @Override
-    public String getPrefAttributesView() {
+    public String getPrefPlainAttributesView() {
         return String.format(Constants.PREF_ANY_OBJECT_PLAIN_ATTRS_VIEW, type);
     }
 
@@ -64,7 +63,7 @@ public final class AnyObjectSelectionSearchResultPanel extends AnySelectionSearc
 
     public static final class Builder extends AnySelectionSearchResultPanel.Builder<AnyObjectTO> {
 
-        private static final long serialVersionUID = 1L;
+        private static final long serialVersionUID = 5155811461060452446L;
 
         public Builder(final List<AnyTypeClassTO> anyTypeClassTOs, final String type, final PageReference pageRef) {
             super(anyTypeClassTOs, new AnyObjectRestClient(), type, pageRef);

http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionSearchResultPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionSearchResultPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionSearchResultPanel.java
index b6ddc5a..344ff17 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionSearchResultPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionSearchResultPanel.java
@@ -26,16 +26,20 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
-import org.apache.syncope.client.console.panels.AnyObjectDisplayAttributesModalPage;
+import org.apache.syncope.client.console.panels.AnyObjectDisplayAttributesModalPanel;
 import org.apache.syncope.client.console.panels.AnySearchResultPanel;
 import org.apache.syncope.client.console.rest.AbstractAnyRestClient;
 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.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.TokenColumn;
 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.common.lib.to.AnyTypeClassTO;
 import org.apache.syncope.common.lib.to.AnyObjectTO;
 import org.apache.syncope.common.lib.to.AnyTO;
+import org.apache.syncope.common.lib.to.UserTO;
 import org.apache.syncope.common.lib.types.AnyEntitlement;
 import org.apache.syncope.common.lib.types.SchemaType;
 import org.apache.wicket.PageReference;
@@ -51,28 +55,36 @@ public abstract class AnySelectionSearchResultPanel<T extends AnyTO> extends Any
 
     private static final long serialVersionUID = -1100228004207271272L;
 
-    protected AnySelectionSearchResultPanel(final String id, final AnySearchResultPanel.Builder<T> builder) {
+    private final Class<T> reference;
+
+    protected AnySelectionSearchResultPanel(
+            final String id, final AnySearchResultPanel.Builder<T> builder, final Class<T> reference) {
+
         super(id, builder);
+        this.reference = reference;
     }
 
     @Override
     protected List<IColumn<T, String>> getColumns() {
-
         final List<IColumn<T, String>> columns = new ArrayList<>();
 
         for (String name : prefMan.getList(getRequest(), getPrefDetailsView())) {
             final Field field = ReflectionUtils.findField(AnyObjectTO.class, name);
 
-            if ("token".equalsIgnoreCase(name)) {
-                columns.add(new PropertyColumn<T, String>(new ResourceModel(name, name), name, name));
+            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))) {
+
+                columns.add(new BooleanPropertyColumn<T>(new ResourceModel(name, name), name, name));
             } else if (field != null && field.getType().equals(Date.class)) {
-                columns.add(new PropertyColumn<T, String>(new ResourceModel(name, name), name, name));
+                columns.add(new DatePropertyColumn<T>(new ResourceModel(name, name), name, name));
             } else {
                 columns.add(new PropertyColumn<T, String>(new ResourceModel(name, name), name, name));
             }
         }
 
-        for (String name : prefMan.getList(getRequest(), getPrefAttributesView())) {
+        for (String name : prefMan.getList(getRequest(), getPrefPlainAttributesView())) {
             if (pSchemaNames.contains(name)) {
                 columns.add(new AttrColumn<T>(name, SchemaType.PLAIN));
             }
@@ -86,15 +98,14 @@ public abstract class AnySelectionSearchResultPanel<T extends AnyTO> extends Any
 
         // Add defaults in case of no selection
         if (columns.isEmpty()) {
-            for (String name : getDislayAttributes()) {
+            for (String name : getDisplayAttributes()) {
                 columns.add(new PropertyColumn<T, String>(new ResourceModel(name, name), name, name));
             }
 
-            prefMan.setList(getRequest(), getResponse(), getPrefDetailsView(),
-                    Arrays.asList(getDislayAttributes()));
+            prefMan.setList(getRequest(), getResponse(), getPrefDetailsView(), Arrays.asList(getDisplayAttributes()));
         }
 
-        columns.add(new ActionColumn<T, String>(new ResourceModel("actions", "")) {
+        columns.add(new ActionColumn<T, String>(new ResourceModel("actions")) {
 
             private static final long serialVersionUID = -3503023501954863131L;
 
@@ -128,11 +139,11 @@ public abstract class AnySelectionSearchResultPanel<T extends AnyTO> extends Any
                             @Override
                             public void onClick(final AjaxRequestTarget target, final T ignore) {
                                 // still missing content
-                                target.add(altDefaultModal.setContent(new AnyObjectDisplayAttributesModalPage<>(
+                                target.add(altDefaultModal.setContent(new AnyObjectDisplayAttributesModalPanel<>(
                                         altDefaultModal, page.getPageReference(), pSchemaNames, dSchemaNames, type)));
-                                
+
                                 altDefaultModal.addSumbitButton();
-                                altDefaultModal.header(new ResourceModel("any.attr.display", ""));
+                                altDefaultModal.header(new ResourceModel("any.attr.display"));
                                 altDefaultModal.show(true);
                             }
                         }, ActionLink.ActionType.CHANGE_VIEW, String.format("%s_%s", type, AnyEntitlement.READ)).
@@ -159,17 +170,17 @@ public abstract class AnySelectionSearchResultPanel<T extends AnyTO> extends Any
         return Collections.<ActionLink.ActionType>emptyList();
     }
 
-    protected abstract String[] getDislayAttributes();
+    protected abstract String[] getDisplayAttributes();
 
     protected abstract String getPrefDetailsView();
 
-    protected abstract String getPrefAttributesView();
+    protected abstract String getPrefPlainAttributesView();
 
     protected abstract String getPrefDerivedAttributesView();
 
     public abstract static class Builder<T extends AnyTO> extends AnySearchResultPanel.Builder<T> {
 
-        private static final long serialVersionUID = 1L;
+        private static final long serialVersionUID = 5460024856989891156L;
 
         public Builder(
                 final List<AnyTypeClassTO> anyTypeClassTOs,

http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/client/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSelectionSearchResultPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSelectionSearchResultPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSelectionSearchResultPanel.java
index 2fd3edb..5af0851 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSelectionSearchResultPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSelectionSearchResultPanel.java
@@ -20,6 +20,7 @@ package org.apache.syncope.client.console.panels.search;
 
 import java.util.List;
 import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.panels.GroupDisplayAttributesModalPanel;
 import org.apache.syncope.client.console.rest.GroupRestClient;
 import org.apache.syncope.client.console.wizards.WizardMgtPanel;
 import org.apache.syncope.client.console.wizards.any.AnyHandler;
@@ -31,10 +32,8 @@ public final class GroupSelectionSearchResultPanel extends AnySelectionSearchRes
 
     private static final long serialVersionUID = -1100228004207271271L;
 
-    public static final String[] GROUP_DEFAULT_SELECTION = { "key", "name" };
-
     private GroupSelectionSearchResultPanel(final String id, final Builder builder) {
-        super(id, builder);
+        super(id, builder, GroupTO.class);
     }
 
     @Override
@@ -43,8 +42,8 @@ public final class GroupSelectionSearchResultPanel extends AnySelectionSearchRes
     }
 
     @Override
-    protected String[] getDislayAttributes() {
-        return GROUP_DEFAULT_SELECTION;
+    protected String[] getDisplayAttributes() {
+        return GroupDisplayAttributesModalPanel.DEFAULT_SELECTION;
     }
 
     @Override
@@ -53,7 +52,7 @@ public final class GroupSelectionSearchResultPanel extends AnySelectionSearchRes
     }
 
     @Override
-    public String getPrefAttributesView() {
+    public String getPrefPlainAttributesView() {
         return Constants.PREF_GROUP_PLAIN_ATTRS_VIEW;
     }
 
@@ -64,7 +63,7 @@ public final class GroupSelectionSearchResultPanel extends AnySelectionSearchRes
 
     public static final class Builder extends AnySelectionSearchResultPanel.Builder<GroupTO> {
 
-        private static final long serialVersionUID = 1L;
+        private static final long serialVersionUID = -8774023867045850683L;
 
         public Builder(final List<AnyTypeClassTO> anyTypeClassTOs, final String type, final PageReference pageRef) {
             super(anyTypeClassTOs, new GroupRestClient(), type, pageRef);

http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/client/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSearchPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSearchPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSearchPanel.java
index 2949130..faaecb8 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSearchPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSearchPanel.java
@@ -75,7 +75,7 @@ public final class UserSearchPanel extends AnyObjectSearchPanel {
 
     @Override
     protected List<SearchClause.Type> getAvailableTypes() {
-        List<SearchClause.Type> result = new ArrayList<SearchClause.Type>();
+        List<SearchClause.Type> result = new ArrayList<>();
         result.add(SearchClause.Type.ATTRIBUTE);
         result.add(SearchClause.Type.ROLE_MEMBERSHIP);
         result.add(SearchClause.Type.GROUP_MEMBERSHIP);

http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/client/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSelectionSearchResultPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSelectionSearchResultPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSelectionSearchResultPanel.java
index f523c6a..deb6263 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSelectionSearchResultPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSelectionSearchResultPanel.java
@@ -20,6 +20,7 @@ package org.apache.syncope.client.console.panels.search;
 
 import java.util.List;
 import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.panels.UserDisplayAttributesModalPanel;
 import org.apache.syncope.client.console.rest.UserRestClient;
 import org.apache.syncope.client.console.wizards.WizardMgtPanel;
 import org.apache.syncope.client.console.wizards.any.AnyHandler;
@@ -31,10 +32,8 @@ public final class UserSelectionSearchResultPanel extends AnySelectionSearchResu
 
     private static final long serialVersionUID = -1100228004207271272L;
 
-    public static final String[] USER_DEFAULT_SELECTION = { "key", "username", "status" };
-
     private UserSelectionSearchResultPanel(final String id, final Builder builder) {
-        super(id, builder);
+        super(id, builder, UserTO.class);
     }
 
     @Override
@@ -43,8 +42,8 @@ public final class UserSelectionSearchResultPanel extends AnySelectionSearchResu
     }
 
     @Override
-    protected String[] getDislayAttributes() {
-        return USER_DEFAULT_SELECTION;
+    protected String[] getDisplayAttributes() {
+        return UserDisplayAttributesModalPanel.DEFAULT_SELECTION;
     }
 
     @Override
@@ -53,7 +52,7 @@ public final class UserSelectionSearchResultPanel extends AnySelectionSearchResu
     }
 
     @Override
-    protected String getPrefAttributesView() {
+    protected String getPrefPlainAttributesView() {
         return Constants.PREF_USERS_PLAIN_ATTRS_VIEW;
     }
 
@@ -64,7 +63,7 @@ public final class UserSelectionSearchResultPanel extends AnySelectionSearchResu
 
     public static final class Builder extends AnySelectionSearchResultPanel.Builder<UserTO> {
 
-        private static final long serialVersionUID = 1L;
+        private static final long serialVersionUID = -1555789797531054422L;
 
         public Builder(final List<AnyTypeClassTO> anyTypeClassTOs, final String type, final PageReference pageRef) {
             super(anyTypeClassTOs, new UserRestClient(), type, pageRef);

http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskSearchResultPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskSearchResultPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskSearchResultPanel.java
index 2f572d5..767eea3 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskSearchResultPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskSearchResultPanel.java
@@ -96,7 +96,7 @@ public abstract class PropagationTaskSearchResultPanel extends TaskSearchResultP
         columns.add(new PropertyColumn<PropagationTaskTO, String>(
                 new StringResourceModel("latestExecStatus", this, null), "latestExecStatus", "latestExecStatus"));
 
-        columns.add(new ActionColumn<PropagationTaskTO, String>(new ResourceModel("actions", "")) {
+        columns.add(new ActionColumn<PropagationTaskTO, String>(new ResourceModel("actions")) {
 
             private static final long serialVersionUID = 2054811145491901166L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel.java
index 8345fb4..efadb54 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskSearchResultPanel.java
@@ -151,7 +151,7 @@ public abstract class SchedTaskSearchResultPanel<T extends SchedTaskTO> extends
 
         columns.addAll(getFieldColumns());
 
-        columns.add(new ActionColumn<T, String>(new ResourceModel("actions", "")) {
+        columns.add(new ActionColumn<T, String>(new ResourceModel("actions")) {
 
             private static final long serialVersionUID = 2054811145491901166L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskExecutions.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskExecutions.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskExecutions.java
index 43de894..1e029c7 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskExecutions.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskExecutions.java
@@ -98,7 +98,7 @@ public abstract class TaskExecutions
 
         columns.add(new PropertyColumn<ExecTO, String>(new ResourceModel("status"), "status", "status"));
 
-        columns.add(new ActionColumn<ExecTO, String>(new ResourceModel("actions", "")) {
+        columns.add(new ActionColumn<ExecTO, String>(new ResourceModel("actions")) {
 
             private static final long serialVersionUID = -3503023501954863131L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/client/console/src/main/java/org/apache/syncope/client/console/todos/TODOSearchResultPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/todos/TODOSearchResultPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/todos/TODOSearchResultPanel.java
index db4ce60..ff789b4 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/todos/TODOSearchResultPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/todos/TODOSearchResultPanel.java
@@ -85,7 +85,7 @@ public class TODOSearchResultPanel
         columns.add(new DatePropertyColumn<WorkflowFormTO>(
                 new ResourceModel("dueDate"), "dueDate", "dueDate"));
         columns.add(new PropertyColumn<WorkflowFormTO, String>(new ResourceModel("owner"), "owner", "owner"));
-        columns.add(new ActionColumn<WorkflowFormTO, String>(new ResourceModel("actions", "")) {
+        columns.add(new ActionColumn<WorkflowFormTO, String>(new ResourceModel("actions")) {
 
             private static final long serialVersionUID = -3503023501954863133L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/e29d78c1/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/TokenColumn.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/TokenColumn.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/TokenColumn.java
new file mode 100644
index 0000000..7be6715
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/TokenColumn.java
@@ -0,0 +1,53 @@
+/*
+ * 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.wicket.extensions.markup.html.repeater.data.table;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.common.lib.to.AnyTO;
+import org.apache.syncope.common.lib.to.UserTO;
+import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.ResourceModel;
+
+public class TokenColumn<T extends AnyTO> extends AbstractColumn<T, String> {
+
+    private static final long serialVersionUID = 8077865338230121496L;
+
+    public TokenColumn(final IModel<String> displayModel, final String sortProperty) {
+        super(displayModel, sortProperty);
+    }
+
+    @Override
+    public void populateItem(
+            final Item<ICellPopulator<T>> cellItem,
+            final String componentId,
+            final IModel<T> rowModel) {
+
+        if (rowModel.getObject() instanceof UserTO) {
+            if (StringUtils.isNotBlank(((UserTO) rowModel.getObject()).getToken())) {
+                cellItem.add(new Label(componentId, new ResourceModel("tokenValued", "tokenValued")));
+            } else {
+                cellItem.add(new Label(componentId, new ResourceModel("tokenNotValued", "tokenNotValued")));
+            }
+        }
+    }
+}