You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by fm...@apache.org on 2015/12/31 09:20:14 UTC

[4/4] syncope git commit: [SYNCOPE-156] provides material button for types by changing to be compliant to the standard use of search tables + fixes some notifications & icons

[SYNCOPE-156] provides material button for types by changing to be compliant to the standard use of search tables + fixes some notifications & icons


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

Branch: refs/heads/master
Commit: 6a93860d8deab4a2c1e5cf2c8e75e64c8c5eb27d
Parents: e599033
Author: fmartelli <fa...@gmail.com>
Authored: Thu Dec 31 09:19:54 2015 +0100
Committer: fmartelli <fa...@gmail.com>
Committed: Thu Dec 31 09:19:54 2015 +0100

----------------------------------------------------------------------
 .../console/pages/AbstractStatusModalPage.java  |   5 +-
 .../pages/AnyDisplayAttributesModalPage.java    |   8 +-
 .../console/pages/BulkActionModalPage.java      |   7 +-
 .../pages/BulkActionResultModalPage.java        |  10 +-
 .../pages/DisplayAttributesModalPage.java       |  25 +--
 .../pages/GroupDisplayAttributesModalPage.java  |  11 +-
 .../syncope/client/console/pages/Realms.java    |   8 +-
 .../client/console/pages/ResultStatusModal.java | 168 +++++++++----------
 .../syncope/client/console/pages/Roles.java     |  25 +--
 .../client/console/pages/SecurityQuestions.java |  33 +---
 .../client/console/pages/StatusModal.java       |  14 +-
 .../syncope/client/console/pages/Types.java     | 109 +-----------
 .../pages/UserDisplayAttributesModalPage.java   |  11 +-
 .../console/panels/AbstractModalPanel.java      |  24 ++-
 .../console/panels/AbstractResourceModal.java   |   6 +-
 .../console/panels/AbstractTypesPanel.java      |  83 ++-------
 .../console/panels/ActionDataTablePanel.java    |   2 +-
 .../console/panels/AjaxDataTablePanel.java      |   6 +-
 .../console/panels/AnyTypeClassModalPanel.java  |   6 +-
 .../console/panels/AnyTypeClassesPanel.java     |  65 ++++---
 .../console/panels/AnyTypeDetailsPanel.java     |  19 +--
 .../console/panels/AnyTypeModalPanel.java       |  34 +---
 .../client/console/panels/AnyTypePanel.java     | 143 +++++++++++-----
 .../client/console/panels/ConnectorModal.java   |   2 +-
 .../client/console/panels/DataTablePanel.java   |   3 +-
 .../console/panels/FailureMessageModal.java     |   5 +-
 .../console/panels/GroupSearchResultPanel.java  |   2 +-
 .../client/console/panels/ModalPanel.java       |   5 +-
 .../console/panels/NotificationPanel.java       |   6 +-
 .../syncope/client/console/panels/Realm.java    |   7 +-
 .../client/console/panels/RealmModalPanel.java  |  14 +-
 .../panels/RelationshipTypeDetailsPanel.java    |  18 +-
 .../panels/RelationshipTypeModalPanel.java      |  36 +---
 .../console/panels/RelationshipTypePanel.java   | 144 +++++++++++-----
 .../client/console/panels/ResourceModal.java    |  62 +++----
 .../console/panels/RoleSearchResultPanel.java   |   4 +
 .../client/console/panels/SchemaModalPanel.java |   2 +-
 .../client/console/panels/SchemasPanel.java     |  38 ++++-
 .../panels/SecurityQuestionDetailsPanel.java    |   6 +-
 .../panels/SecurityQuestionModalPanel.java      |  21 ++-
 .../console/panels/SecurityQuestionsPanel.java  | 117 +++++++++----
 .../console/panels/UserSearchResultPanel.java   |  21 +--
 .../panels/search/AbstractSearchPanel.java      |  29 ----
 .../client/console/rest/ResourceRestClient.java |   2 +-
 .../client/console/topology/Topology.java       | 132 ++++++++-------
 .../console/topology/TopologyNodePanel.java     |  24 ++-
 .../markup/html/bootstrap/dialog/BaseModal.java |  27 ++-
 .../wizards/AbstractModalPanelBuilder.java      |  86 ++++++++++
 .../client/console/wizards/AjaxWizard.java      |   5 +-
 .../console/wizards/AjaxWizardBuilder.java      |  53 +-----
 .../client/console/wizards/WizardMgtPanel.java  |  42 +++--
 .../console/wizards/any/GroupWizardBuilder.java |   4 +-
 .../client/console/wizards/any/Resources.java   |   2 +-
 .../console/wizards/role/RoleWizardBuilder.java |   4 +-
 .../syncope/client/console/pages/BasePage.html  |  18 +-
 .../syncope/client/console/pages/Logs.html      |   2 +-
 .../syncope/client/console/pages/Roles.html     |   7 -
 .../client/console/pages/SecurityQuestions.html |   7 -
 .../syncope/client/console/pages/Types.html     |  24 ---
 .../console/panels/AbstractTypesPanel.html      |  40 -----
 .../console/panels/AnyTypePanel.properties      |  18 ++
 .../console/panels/AnyTypePanel_it.properties   |  18 ++
 .../panels/AnyTypePanel_pt_BR.properties        |  18 ++
 .../panels/RelationshipTypePanel.properties     |  18 ++
 .../panels/RelationshipTypePanel_it.properties  |  18 ++
 .../RelationshipTypePanel_pt_BR.properties      |  18 ++
 .../client/console/panels/SchemasPanel.html     |   5 +
 .../panels/SecurityQuestionsPanel.properties    |  18 ++
 .../panels/SecurityQuestionsPanel_it.properties |  18 ++
 .../SecurityQuestionsPanel_pt_BR.properties     |  18 ++
 .../panels/search/AbstractSearchPanel.html      |   1 -
 71 files changed, 1074 insertions(+), 937 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/6a93860d/client/console/src/main/java/org/apache/syncope/client/console/pages/AbstractStatusModalPage.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/AbstractStatusModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/AbstractStatusModalPage.java
index f46ec67..20c71b7 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/AbstractStatusModalPage.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/AbstractStatusModalPage.java
@@ -18,16 +18,17 @@
  */
 package org.apache.syncope.client.console.pages;
 
+import java.io.Serializable;
 import org.apache.syncope.client.console.panels.AbstractModalPanel;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.markup.html.panel.Fragment;
 
-public class AbstractStatusModalPage extends AbstractModalPanel {
+public class AbstractStatusModalPage<T extends Serializable> extends AbstractModalPanel<T> {
 
     private static final long serialVersionUID = 6633408683036028540L;
 
-    public AbstractStatusModalPage(final BaseModal<?> modal, final PageReference pageRef) {
+    public AbstractStatusModalPage(final BaseModal<T> modal, final PageReference pageRef) {
         super(modal, pageRef);
         add(new Fragment("pwdMgtFields", "emptyFragment", this));
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/6a93860d/client/console/src/main/java/org/apache/syncope/client/console/pages/AnyDisplayAttributesModalPage.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/AnyDisplayAttributesModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/AnyDisplayAttributesModalPage.java
index 1995014..ec43ddc 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/AnyDisplayAttributesModalPage.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/AnyDisplayAttributesModalPage.java
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.client.console.pages;
 
+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;
@@ -30,8 +31,7 @@ import org.apache.wicket.PageReference;
  *
  * @param <T> anyTO
  */
-@SuppressWarnings({ "unchecked", "rawtypes" })
-public class AnyDisplayAttributesModalPage<T extends AnyTO> extends DisplayAttributesModalPage {
+public class AnyDisplayAttributesModalPage<T extends Serializable> extends DisplayAttributesModalPage<T> {
 
     private static final long serialVersionUID = 5194630813773543054L;
 
@@ -40,7 +40,7 @@ public class AnyDisplayAttributesModalPage<T extends AnyTO> extends DisplayAttri
     private final String type;
 
     public AnyDisplayAttributesModalPage(
-            final BaseModal<?> modal,
+            final BaseModal<T> modal,
             final PageReference pageRef,
             final List<String> schemaNames,
             final List<String> dSchemaNames,
@@ -66,7 +66,7 @@ public class AnyDisplayAttributesModalPage<T extends AnyTO> extends DisplayAttri
     }
 
     @Override
-    public Class getTOClass() {
+    public Class<? extends AnyTO> getTOClass() {
         return AnyObjectTO.class;
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/6a93860d/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionModalPage.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionModalPage.java
index 9a16098..da5aac2 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionModalPage.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionModalPage.java
@@ -45,12 +45,12 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
 import org.springframework.beans.BeanUtils;
 
-public class BulkActionModalPage<T, S> extends AbstractModalPanel {
+public class BulkActionModalPage<T extends Serializable, S> extends AbstractModalPanel<T> {
 
     private static final long serialVersionUID = 4114026480146090962L;
 
     public BulkActionModalPage(
-            final BaseModal<?> modal,
+            final BaseModal<T> modal,
             final PageReference pageRef,
             final Collection<T> items,
             final List<IColumn<T, S>> columns,
@@ -88,8 +88,7 @@ public class BulkActionModalPage<T, S> extends AbstractModalPanel {
                 Integer.MAX_VALUE).setVisible(items != null && !items.isEmpty()));
 
         @SuppressWarnings("rawtypes")
-        final ActionLinksPanel<Serializable> actionPanel =
-                ActionLinksPanel.builder(pageRef).build("actions");
+        final ActionLinksPanel<Serializable> actionPanel = ActionLinksPanel.builder(pageRef).build("actions");
         add(actionPanel);
 
         for (ActionLink.ActionType action : actions) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/6a93860d/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionResultModalPage.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionResultModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionResultModalPage.java
index c659ddc..aa6a63e 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionResultModalPage.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionResultModalPage.java
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.client.console.pages;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
@@ -39,15 +40,14 @@ import org.apache.wicket.model.IModel;
 /**
  * Show user or group status after performing a successful operation.
  *
- * @param <T> type of the object that will be rendered in columns
- * @param <S> type of the sorting parameter
+ * @param <E> type of the inner model object
  */
-public class BulkActionResultModalPage<T, S> extends AbstractModalPanel {
+public class BulkActionResultModalPage<E extends Serializable> extends AbstractModalPanel<E> {
 
     private static final long serialVersionUID = 2646115294319713724L;
 
-    public BulkActionResultModalPage(
-            final BaseModal<?> modal,
+    public <T extends Serializable, S> BulkActionResultModalPage(
+            final BaseModal<E> modal,
             final PageReference pageRef,
             final Collection<T> items,
             final List<IColumn<T, S>> columns,

http://git-wip-us.apache.org/repos/asf/syncope/blob/6a93860d/client/console/src/main/java/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.java
index a6c0298..a1ea8b9 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.java
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.client.console.pages;
 
+import java.io.Serializable;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -49,8 +50,7 @@ import org.apache.wicket.model.ResourceModel;
  *
  * @param <T> anyTO
  */
-@SuppressWarnings({ "unchecked", "rawtypes" })
-public abstract class DisplayAttributesModalPage<T extends AnyTO> extends AbstractModalPanel {
+public abstract class DisplayAttributesModalPage<T extends Serializable> extends AbstractModalPanel<T> {
 
     private static final long serialVersionUID = -4274117450918385110L;
 
@@ -105,8 +105,8 @@ public abstract class DisplayAttributesModalPage<T extends AnyTO> extends Abstra
             }
         };
 
-        final Form form = new Form(FORM);
-        form.setModel(new CompoundPropertyModel(this));
+        final Form<DisplayAttributesModalPage<T>> form = new Form<>(FORM);
+        form.setModel(new CompoundPropertyModel<>(this));
 
         selectedDetails = prefMan.getList(getRequest(), getPrefDetailView());
 
@@ -114,7 +114,8 @@ public abstract class DisplayAttributesModalPage<T extends AnyTO> extends Abstra
 
         selectedDerSchemas = prefMan.getList(getRequest(), getPrefDerivedAttributeView());
 
-        final CheckGroup dgroup = new CheckGroup("dCheckGroup", new PropertyModel(this, "selectedDetails"));
+        final CheckGroup<String> dgroup
+                = new CheckGroup<>("dCheckGroup", new PropertyModel<List<String>>(this, "selectedDetails"));
         form.add(dgroup);
 
         final ListView<String> details = new ListView<String>("details", fnames) {
@@ -123,7 +124,7 @@ public abstract class DisplayAttributesModalPage<T extends AnyTO> extends Abstra
 
             @Override
             protected void populateItem(final ListItem<String> item) {
-                item.add(new Check("dcheck", item.getModel()));
+                item.add(new Check<>("dcheck", item.getModel()));
                 item.add(new Label("dname", new ResourceModel(item.getModelObject(), item.getModelObject())));
             }
         };
@@ -138,7 +139,8 @@ public abstract class DisplayAttributesModalPage<T extends AnyTO> extends Abstra
             final Fragment fragment = new Fragment("plainSchemas", "sfragment", form);
             form.add(fragment);
 
-            final CheckGroup sgroup = new CheckGroup("psCheckGroup", new PropertyModel(this, "selectedPlainSchemas"));
+            final CheckGroup<String> sgroup
+                    = new CheckGroup<>("psCheckGroup", new PropertyModel<List<String>>(this, "selectedPlainSchemas"));
             fragment.add(sgroup);
 
             final ListView<String> schemas = new ListView<String>("plainSchemas", names) {
@@ -147,7 +149,7 @@ public abstract class DisplayAttributesModalPage<T extends AnyTO> extends Abstra
 
                 @Override
                 protected void populateItem(final ListItem<String> item) {
-                    item.add(new Check("scheck", item.getModel()));
+                    item.add(new Check<>("scheck", item.getModel()));
                     item.add(new Label("sname", new ResourceModel(item.getModelObject(), item.getModelObject())));
                 }
             };
@@ -163,7 +165,8 @@ public abstract class DisplayAttributesModalPage<T extends AnyTO> extends Abstra
             final Fragment fragment = new Fragment("dschemas", "dsfragment", form);
             form.add(fragment);
 
-            final CheckGroup dsgroup = new CheckGroup("dsCheckGroup", new PropertyModel(this, "selectedDerSchemas"));
+            final CheckGroup<String> dsgroup
+                    = new CheckGroup<>("dsCheckGroup", new PropertyModel<List<String>>(this, "selectedDerSchemas"));
             fragment.add(dsgroup);
 
             final ListView<String> derSchemas = new ListView<String>("derSchemas", dsnames) {
@@ -172,7 +175,7 @@ public abstract class DisplayAttributesModalPage<T extends AnyTO> extends Abstra
 
                 @Override
                 protected void populateItem(final ListItem<String> item) {
-                    item.add(new Check("dscheck", item.getModel()));
+                    item.add(new Check<>("dscheck", item.getModel()));
                     item.add(new Label("dsname", new ResourceModel(item.getModelObject(), item.getModelObject())));
                 }
             };
@@ -237,6 +240,6 @@ public abstract class DisplayAttributesModalPage<T extends AnyTO> extends Abstra
 
     public abstract String getPrefDerivedAttributeView();
 
-    public abstract Class getTOClass();
+    public abstract Class<? extends AnyTO> getTOClass();
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/6a93860d/client/console/src/main/java/org/apache/syncope/client/console/pages/GroupDisplayAttributesModalPage.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/GroupDisplayAttributesModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/GroupDisplayAttributesModalPage.java
index 09dbb06..6167c99 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/GroupDisplayAttributesModalPage.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/GroupDisplayAttributesModalPage.java
@@ -18,24 +18,27 @@
  */
 package org.apache.syncope.client.console.pages;
 
+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.AnyTO;
 import org.apache.syncope.common.lib.to.GroupTO;
 import org.apache.wicket.PageReference;
 
 /**
  * Modal window with Display group attributes form.
+ *
+ * @param <T>
  */
-@SuppressWarnings({ "unchecked", "rawtypes" })
-public class GroupDisplayAttributesModalPage extends DisplayAttributesModalPage {
+public class GroupDisplayAttributesModalPage<T extends Serializable> extends DisplayAttributesModalPage<T> {
 
     private static final long serialVersionUID = 5194630813773543054L;
 
     public static final String[] GROUP_DEFAULT_SELECTION = { "key", "name" };
 
     public GroupDisplayAttributesModalPage(
-            final BaseModal<?> modal,
+            final BaseModal<T> modal,
             final PageReference pageRef,
             final List<String> schemaNames,
             final List<String> dSchemaNames) {
@@ -58,7 +61,7 @@ public class GroupDisplayAttributesModalPage extends DisplayAttributesModalPage
     }
 
     @Override
-    public Class getTOClass() {
+    public Class<? extends AnyTO> getTOClass() {
         return GroupTO.class;
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/6a93860d/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 19c3e0a..25a2064 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
@@ -73,7 +73,6 @@ public class Realms extends BasePage {
             public void onClose(final AjaxRequestTarget target) {
                 target.add(realmSidebarPanel.reloadRealmTree());
                 target.add(updateRealmContent(realmSidebarPanel.getCurrentRealm()));
-
                 modal.show(false);
             }
         });
@@ -148,12 +147,13 @@ public class Realms extends BasePage {
                     realmRestClient.delete(realmTO.getFullPath());
                     target.add(realmSidebarPanel.reloadRealmTree());
                     target.add(updateRealmContent(realmSidebarPanel.getCurrentRealm()));
-                    info(getString(Constants.OPERATION_SUCCEEDED));
+                    getSession().info(getString(Constants.OPERATION_SUCCEEDED));
                 } catch (Exception e) {
                     LOG.error("While deleting realm", e);
-                    error(getString(Constants.ERROR) + ": " + e.getMessage());
+                    // Excape line breaks
+                    getSession().error(getString(Constants.ERROR) + ": " + e.getMessage().replace("\n", " "));
                 }
-                BasePage.class.cast(getPage()).getNotificationPanel().refresh(target);
+                getNotificationPanel().refresh(target);
             }
         });
         return content;

http://git-wip-us.apache.org/repos/asf/syncope/blob/6a93860d/client/console/src/main/java/org/apache/syncope/client/console/pages/ResultStatusModal.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/ResultStatusModal.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/ResultStatusModal.java
index bd90381..9507941 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/ResultStatusModal.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/ResultStatusModal.java
@@ -64,7 +64,7 @@ import org.apache.wicket.request.resource.ContextRelativeResource;
  *
  * @param <T> anyTO
  */
-public final class ResultStatusModal<T extends AnyTO> extends AbstractModalPanel {
+public final class ResultStatusModal<T extends AnyTO> extends AbstractModalPanel<T> {
 
     private static final long serialVersionUID = 2646115294319713723L;
 
@@ -157,87 +157,87 @@ public final class ResultStatusModal<T extends AnyTO> extends AbstractModalPanel
             final ListView<PropagationStatus> propRes = new ListView<PropagationStatus>("resources",
                     propagations) {
 
-                        private static final long serialVersionUID = -1020475259727720708L;
+                private static final long serialVersionUID = -1020475259727720708L;
+
+                @Override
+                protected void populateItem(final ListItem<PropagationStatus> item) {
+                    final PropagationStatus propTO = (PropagationStatus) item.getDefaultModelObject();
+
+                    final ListView<String> attributes = getConnObjectView(propTO);
+
+                    final Fragment attrhead;
+                    if (attributes.getModelObject() == null || attributes.getModelObject().isEmpty()) {
+                        attrhead = new Fragment("attrhead", "emptyAttrHeadFrag", this);
+                    } else {
+                        attrhead = new Fragment("attrhead", "attrHeadFrag", this);
+                    }
+
+                    item.add(attrhead);
+                    item.add(attributes);
+
+                    attrhead.add(new Label("resource", propTO.getResource()));
+
+                    attrhead.add(new Label("propagation", propTO.getStatus() == null
+                            ? "UNDEFINED" : propTO.getStatus().toString()));
+
+                    final Image image;
+                    final String alt, title;
+
+                    final BaseModal<T> failureWindow = new BaseModal<>("failureWindow");
+
+                    final AjaxLink<?> failureWindowLink = new AjaxLink<Void>("showFailureWindow") {
+
+                        private static final long serialVersionUID = -7978723352517770644L;
 
                         @Override
-                        protected void populateItem(final ListItem<PropagationStatus> item) {
-                            final PropagationStatus propTO = (PropagationStatus) item.getDefaultModelObject();
-
-                            final ListView<String> attributes = getConnObjectView(propTO);
-
-                            final Fragment attrhead;
-                            if (attributes.getModelObject() == null || attributes.getModelObject().isEmpty()) {
-                                attrhead = new Fragment("attrhead", "emptyAttrHeadFrag", this);
-                            } else {
-                                attrhead = new Fragment("attrhead", "attrHeadFrag", this);
-                            }
-
-                            item.add(attrhead);
-                            item.add(attributes);
-
-                            attrhead.add(new Label("resource", propTO.getResource()));
-
-                            attrhead.add(new Label("propagation", propTO.getStatus() == null
-                                                    ? "UNDEFINED" : propTO.getStatus().toString()));
-
-                            final Image image;
-                            final String alt, title;
-
-                            final BaseModal<?> failureWindow = new BaseModal<>("failureWindow");
-
-                            final AjaxLink<?> failureWindowLink = new AjaxLink<Void>("showFailureWindow") {
-
-                                private static final long serialVersionUID = -7978723352517770644L;
-
-                                @Override
-                                public void onClick(final AjaxRequestTarget target) {
-                                    failureWindow.show(target);
-                                }
-                            };
-
-                            switch (propTO.getStatus()) {
-
-                                case SUCCESS:
-                                case CREATED:
-                                    image = new Image("icon",
-                                            new ContextRelativeResource(IMG_PREFIX + Status.ACTIVE.toString()
-                                                    + Constants.PNG_EXT));
-                                    alt = "success icon";
-                                    title = "success";
-                                    failureWindow.setVisible(false);
-                                    failureWindowLink.setEnabled(false);
-                                    break;
-
-                                default:
-                                    image = new Image("icon",
-                                            new ContextRelativeResource(IMG_PREFIX + Status.SUSPENDED.toString()
-                                                    + Constants.PNG_EXT));
-                                    alt = "failure icon";
-                                    title = "failure";
-                            }
-
-                            image.add(new Behavior() {
-
-                                private static final long serialVersionUID = 1469628524240283489L;
-
-                                @Override
-                                public void onComponentTag(final Component component, final ComponentTag tag) {
-                                    tag.put("alt", alt);
-                                    tag.put("title", title);
-                                }
-                            });
-                            final FailureMessageModal executionFailureMessagePage;
-                            if (propTO.getFailureReason() == null) {
-                                executionFailureMessagePage = new FailureMessageModal(
-                                        modal, pageRef, StringUtils.EMPTY);
-                            } else {
-                                executionFailureMessagePage = new FailureMessageModal(
-                                        modal, pageRef, propTO.getFailureReason());
-                            }
-
-                            failureWindow.setContent(executionFailureMessagePage);
+                        public void onClick(final AjaxRequestTarget target) {
+                            failureWindow.show(target);
                         }
                     };
+
+                    switch (propTO.getStatus()) {
+
+                        case SUCCESS:
+                        case CREATED:
+                            image = new Image("icon",
+                                    new ContextRelativeResource(IMG_PREFIX + Status.ACTIVE.toString()
+                                            + Constants.PNG_EXT));
+                            alt = "success icon";
+                            title = "success";
+                            failureWindow.setVisible(false);
+                            failureWindowLink.setEnabled(false);
+                            break;
+
+                        default:
+                            image = new Image("icon",
+                                    new ContextRelativeResource(IMG_PREFIX + Status.SUSPENDED.toString()
+                                            + Constants.PNG_EXT));
+                            alt = "failure icon";
+                            title = "failure";
+                    }
+
+                    image.add(new Behavior() {
+
+                        private static final long serialVersionUID = 1469628524240283489L;
+
+                        @Override
+                        public void onComponentTag(final Component component, final ComponentTag tag) {
+                            tag.put("alt", alt);
+                            tag.put("title", title);
+                        }
+                    });
+                    final FailureMessageModal<T> executionFailureMessagePage;
+                    if (propTO.getFailureReason() == null) {
+                        executionFailureMessagePage = new FailureMessageModal<>(
+                                modal, pageRef, StringUtils.EMPTY);
+                    } else {
+                        executionFailureMessagePage = new FailureMessageModal<>(
+                                modal, pageRef, propTO.getFailureReason());
+                    }
+
+                    failureWindow.setContent(executionFailureMessagePage);
+                }
+            };
             fragment.add(propRes);
         }
 
@@ -343,14 +343,12 @@ public final class ResultStatusModal<T extends AnyTO> extends AbstractModalPanel
 
         if (attr == null || attr.getValues() == null || attr.getValues().isEmpty()) {
             value = "";
+        } else if (ConnIdSpecialAttributeName.PASSWORD.equals(attrName)) {
+            value = "********";
         } else {
-            if (ConnIdSpecialAttributeName.PASSWORD.equals(attrName)) {
-                value = "********";
-            } else {
-                value = attr.getValues().size() > 1
-                        ? attr.getValues().toString()
-                        : attr.getValues().get(0);
-            }
+            value = attr.getValues().size() > 1
+                    ? attr.getValues().toString()
+                    : attr.getValues().get(0);
         }
 
         Component label = new Label("value", value.length() > 50 ? value.substring(0, 50) + "..." : value).

http://git-wip-us.apache.org/repos/asf/syncope/blob/6a93860d/client/console/src/main/java/org/apache/syncope/client/console/pages/Roles.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Roles.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Roles.java
index 7910c9a..8f7e7f1 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/Roles.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/Roles.java
@@ -18,20 +18,12 @@
  */
 package org.apache.syncope.client.console.pages;
 
-import static org.apache.wicket.Component.ENABLE;
-
 import org.apache.syncope.client.console.panels.RoleSearchResultPanel;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
-import org.apache.syncope.client.console.wizards.AjaxWizard;
 import org.apache.syncope.client.console.wizards.WizardMgtPanel;
 import org.apache.syncope.client.console.wizards.role.RoleHandler;
 import org.apache.syncope.client.console.wizards.role.RoleWizardBuilder;
 import org.apache.syncope.common.lib.to.RoleTO;
-import org.apache.syncope.common.lib.types.StandardEntitlement;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.markup.html.AjaxLink;
-import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
-import org.apache.wicket.event.Broadcast;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.Model;
@@ -54,21 +46,8 @@ public class Roles extends BasePage {
 
             private static final long serialVersionUID = -5960765294082359003L;
 
-        }.addNewItemPanelBuilder(new RoleWizardBuilder(BaseModal.CONTENT_ID, new RoleTO(), getPageReference()), false).
-                build("roles");
-
-        final AjaxLink<RoleTO> createLink = new AjaxLink<RoleTO>("add") {
-
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public void onClick(final AjaxRequestTarget target) {
-                send(roleSearchResultPanel, Broadcast.EXACT, new AjaxWizard.NewItemActionEvent<RoleTO>(null, target));
-            }
-        };
-
-        content.add(createLink);
-        MetaDataRoleAuthorizationStrategy.authorize(createLink, ENABLE, StandardEntitlement.ROLE_CREATE);
+        }.addNewItemPanelBuilder(new RoleWizardBuilder(BaseModal.CONTENT_ID, new RoleTO(), getPageReference()), true)
+                .build("roles");
 
         content.add(roleSearchResultPanel);
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/6a93860d/client/console/src/main/java/org/apache/syncope/client/console/pages/SecurityQuestions.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/SecurityQuestions.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/SecurityQuestions.java
index 6b0df50..83686bc 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/SecurityQuestions.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/SecurityQuestions.java
@@ -18,21 +18,13 @@
  */
 package org.apache.syncope.client.console.pages;
 
-import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
-import org.apache.syncope.client.console.SyncopeConsoleSession;
-import org.apache.syncope.client.console.panels.SecurityQuestionModalPanel;
 import org.apache.syncope.client.console.panels.SecurityQuestionsPanel;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.common.lib.to.SecurityQuestionTO;
-import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.markup.html.AjaxLink;
-import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
-import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxLink;
 import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 public class SecurityQuestions extends BasePage {
@@ -55,30 +47,7 @@ public class SecurityQuestions extends BasePage {
         addWindowWindowClosedCallback(securityQuestionModal);
         add(securityQuestionModal);
 
-        final AjaxLink<Void> createLink = new IndicatingAjaxLink<Void>("createSecurityQuestion") {
-
-            private static final long serialVersionUID = -7978723352517770644L;
-
-            @Override
-            public void onClick(final AjaxRequestTarget target) {
-                securityQuestionModal.header(new ResourceModel("createSecurityQuestion"));
-                securityQuestionModal.setFormModel(new SecurityQuestionTO());
-                securityQuestionModal.size(Modal.Size.Large);
-                target.add(securityQuestionModal.setContent(
-                        new SecurityQuestionModalPanel(securityQuestionModal, getPageReference(), true)));
-                securityQuestionModal.addSumbitButton();
-                securityQuestionModal.show(true);
-            }
-        };
-        content.add(createLink);
-
-        if (SyncopeConsoleSession.get().owns(StandardEntitlement.SECURITY_QUESTION_CREATE)) {
-            MetaDataRoleAuthorizationStrategy.authorize(
-                    createLink, ENABLE, StandardEntitlement.SECURITY_QUESTION_CREATE);
-        }
-
-        securityQuestionsPanel = new SecurityQuestionsPanel(
-                "securityQuestionPanel", getPageReference(), securityQuestionModal);
+        securityQuestionsPanel = new SecurityQuestionsPanel("securityQuestionPanel", getPageReference());
         securityQuestionsPanel.setOutputMarkupId(true);
 
         content.add(securityQuestionsPanel);

http://git-wip-us.apache.org/repos/asf/syncope/blob/6a93860d/client/console/src/main/java/org/apache/syncope/client/console/pages/StatusModal.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/StatusModal.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/StatusModal.java
index d59088a..5718dab 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/StatusModal.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/StatusModal.java
@@ -64,7 +64,7 @@ import org.apache.wicket.model.Model;
 import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.model.StringResourceModel;
 
-public class StatusModal<T extends AnyTO> extends AbstractStatusModalPage {
+public class StatusModal<T extends Serializable> extends AbstractStatusModalPage<T> {
 
     private static final long serialVersionUID = -9148734710505211261L;
 
@@ -103,15 +103,15 @@ public class StatusModal<T extends AnyTO> extends AbstractStatusModalPage {
     private final List<IColumn<StatusBean, String>> columns;
 
     public StatusModal(
-            final BaseModal<?> modal,
+            final BaseModal<T> modal,
             final PageReference pageRef,
-            final AnyTO attributableTO) {
+            final AnyTO anyTO) {
 
-        this(modal, pageRef, attributableTO, false);
+        this(modal, pageRef, anyTO, false);
     }
 
     public StatusModal(
-            final BaseModal<?> modal,
+            final BaseModal<T> modal,
             final PageReference pageRef,
             final AnyTO anyTO,
             final boolean statusOnly) {
@@ -547,8 +547,8 @@ public class StatusModal<T extends AnyTO> extends AbstractStatusModalPage {
             final ResourceAssociationAction type,
             final Collection<StatusBean> selection) {
 
-        final IndicatingAjaxButton goon =
-                new IndicatingAjaxButton("continue", new ResourceModel("continue", "Continue")) {
+        final IndicatingAjaxButton goon
+                = new IndicatingAjaxButton("continue", new ResourceModel("continue", "Continue")) {
 
             private static final long serialVersionUID = -2341391430136818027L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/6a93860d/client/console/src/main/java/org/apache/syncope/client/console/pages/Types.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Types.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Types.java
index f1d2bbb..4869a98 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/Types.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/Types.java
@@ -18,39 +18,24 @@
  */
 package org.apache.syncope.client.console.pages;
 
-import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 import de.agilecoders.wicket.core.markup.html.bootstrap.tabs.AjaxBootstrapTabbedPanel;
 import java.util.ArrayList;
 import java.util.List;
-import org.apache.syncope.client.console.SyncopeConsoleSession;
-import org.apache.syncope.client.console.panels.AnyTypeClassModalPanel;
 import org.apache.syncope.client.console.panels.AnyTypeClassesPanel;
-import org.apache.syncope.client.console.panels.AnyTypeModalPanel;
 import org.apache.syncope.client.console.panels.AnyTypePanel;
-import org.apache.syncope.client.console.panels.ModalPanel;
-import org.apache.syncope.client.console.panels.RelationshipTypeModalPanel;
 import org.apache.syncope.client.console.panels.RelationshipTypePanel;
 import org.apache.syncope.client.console.panels.SchemasPanel;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.common.lib.to.AbstractSchemaTO;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.markup.html.AjaxLink;
-import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
 import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
 import org.apache.wicket.extensions.markup.html.tabs.ITab;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.Model;
-import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
-import org.apache.syncope.client.console.panels.SchemaModalPanel;
 import org.apache.syncope.common.lib.to.AnyTypeClassTO;
-import org.apache.syncope.common.lib.to.AnyTypeTO;
-import org.apache.syncope.common.lib.to.PlainSchemaTO;
-import org.apache.syncope.common.lib.to.RelationshipTypeTO;
-import org.apache.syncope.common.lib.types.StandardEntitlement;
-import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxLink;
 import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
 
 public class Types extends BasePage {
@@ -61,10 +46,6 @@ public class Types extends BasePage {
 
     private final BaseModal<AnyTypeClassTO> anyTypeClassModal;
 
-    private final BaseModal<AnyTypeTO> anyTypeModal;
-
-    private final BaseModal<RelationshipTypeTO> relationshipTypeModal;
-
     private final AjaxBootstrapTabbedPanel<ITab> tabbedPanel;
 
     private enum Type {
@@ -72,6 +53,7 @@ public class Types extends BasePage {
         ANYTYPECLASS,
         ANYTYPE,
         RELATIONSHIPTYPE;
+
     }
 
     public Types(final PageParameters parameters) {
@@ -79,8 +61,6 @@ public class Types extends BasePage {
 
         this.schemaModal = new BaseModal<>("schemaModal");
         this.anyTypeClassModal = new BaseModal<>("anyTypeClassModal");
-        this.anyTypeModal = new BaseModal<>("anyTypeModal");
-        this.relationshipTypeModal = new BaseModal<>("relationshipTypeModal");
 
         final WebMarkupContainer content = new WebMarkupContainer("content");
         content.add(new Label("header", "Types"));
@@ -88,50 +68,11 @@ public class Types extends BasePage {
         tabbedPanel = new AjaxBootstrapTabbedPanel<>("tabbedPanel", buildTabList());
         content.add(tabbedPanel);
 
-        final AjaxLink<Void> createSchemaLink =
-                buildCreateLink("createSchema", schemaModal, Type.SCHEMA);
-        content.add(createSchemaLink);
-
-        if (SyncopeConsoleSession.get().owns(StandardEntitlement.SCHEMA_CREATE)) {
-            MetaDataRoleAuthorizationStrategy.authorize(createSchemaLink, ENABLE, StandardEntitlement.SCHEMA_CREATE);
-        }
-
-        final AjaxLink<Void> createAnyTypeClassLink =
-                buildCreateLink("createAnyTypeClass", anyTypeClassModal, Type.ANYTYPECLASS);
-        content.add(createAnyTypeClassLink);
-
-        if (SyncopeConsoleSession.get().owns(StandardEntitlement.ANYTYPECLASS_CREATE)) {
-            MetaDataRoleAuthorizationStrategy.authorize(
-                    createAnyTypeClassLink, ENABLE, StandardEntitlement.ANYTYPECLASS_CREATE);
-        }
-
-        final AjaxLink<Void> createAnyTypeLink =
-                buildCreateLink("createAnyType", anyTypeModal, Type.ANYTYPE);
-        content.add(createAnyTypeLink);
-
-        if (SyncopeConsoleSession.get().owns(StandardEntitlement.ANYTYPE_CREATE)) {
-            MetaDataRoleAuthorizationStrategy.authorize(
-                    createAnyTypeLink, ENABLE, StandardEntitlement.ANYTYPE_CREATE);
-        }
-
-        final AjaxLink<Void> createRelationshipTypeLink =
-                buildCreateLink("createRelationshipType", relationshipTypeModal, Type.RELATIONSHIPTYPE);
-        content.add(createRelationshipTypeLink);
-
-        if (SyncopeConsoleSession.get().owns(StandardEntitlement.RELATIONSHIPTYPE_CREATE)) {
-            MetaDataRoleAuthorizationStrategy.authorize(
-                    createRelationshipTypeLink, ENABLE, StandardEntitlement.RELATIONSHIPTYPE_CREATE);
-        }
-
         add(content);
         addWindowWindowClosedCallback(schemaModal);
         addWindowWindowClosedCallback(anyTypeClassModal);
-        addWindowWindowClosedCallback(anyTypeModal);
-        addWindowWindowClosedCallback(relationshipTypeModal);
         add(schemaModal);
         add(anyTypeClassModal);
-        add(anyTypeModal);
-        add(relationshipTypeModal);
     }
 
     private List<ITab> buildTabList() {
@@ -144,7 +85,7 @@ public class Types extends BasePage {
 
             @Override
             public Panel getPanel(final String panelId) {
-                return new RelationshipTypePanel(panelId, getPageReference(), relationshipTypeModal);
+                return new RelationshipTypePanel(panelId, getPageReference());
             }
         });
 
@@ -154,7 +95,7 @@ public class Types extends BasePage {
 
             @Override
             public Panel getPanel(final String panelId) {
-                return new AnyTypePanel(panelId, getPageReference(), anyTypeModal);
+                return new AnyTypePanel(panelId, getPageReference());
             }
         });
 
@@ -181,50 +122,6 @@ public class Types extends BasePage {
         return tabs;
     }
 
-    private AjaxLink<Void> buildCreateLink(final String label, final BaseModal<?> modal, final Type type) {
-
-        final AjaxLink<Void> createLink = new IndicatingAjaxLink<Void>(label) {
-
-            private static final long serialVersionUID = -7978723352517770644L;
-
-            @Override
-            public void onClick(final AjaxRequestTarget target) {
-                modal.header(new ResourceModel(label));
-                target.add(modal.setContent(buildModalPanel(type)));
-                modal.addSumbitButton();
-                modal.show(true);
-            }
-        };
-
-        return createLink;
-    }
-
-    private ModalPanel buildModalPanel(final Type type) {
-        final ModalPanel panel;
-        switch (type) {
-            case ANYTYPECLASS:
-                anyTypeClassModal.setFormModel(new AnyTypeClassTO());
-                anyTypeClassModal.size(Modal.Size.Large);
-                panel = new AnyTypeClassModalPanel(anyTypeClassModal, getPageReference(), true);
-                break;
-            case ANYTYPE:
-                anyTypeModal.setFormModel(new AnyTypeTO());
-                anyTypeModal.size(Modal.Size.Large);
-                panel = new AnyTypeModalPanel(anyTypeModal, getPageReference(), true);
-                break;
-            case RELATIONSHIPTYPE:
-                relationshipTypeModal.setFormModel(new RelationshipTypeTO());
-                relationshipTypeModal.size(Modal.Size.Medium);
-                panel = new RelationshipTypeModalPanel(relationshipTypeModal, getPageReference(), true);
-                break;
-            case SCHEMA:
-            default:
-                schemaModal.setFormModel(new PlainSchemaTO());
-                panel = new SchemaModalPanel(schemaModal, getPageReference(), true);
-        }
-        return panel;
-    }
-
     private void addWindowWindowClosedCallback(final BaseModal<?> modal) {
         modal.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/6a93860d/client/console/src/main/java/org/apache/syncope/client/console/pages/UserDisplayAttributesModalPage.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/UserDisplayAttributesModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/UserDisplayAttributesModalPage.java
index 0529f9f..307e61c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/UserDisplayAttributesModalPage.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/UserDisplayAttributesModalPage.java
@@ -18,24 +18,27 @@
  */
 package org.apache.syncope.client.console.pages;
 
+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.AnyTO;
 import org.apache.syncope.common.lib.to.UserTO;
 import org.apache.wicket.PageReference;
 
 /**
  * Modal window with Display user attributes form.
+ *
+ * @param <T>
  */
-@SuppressWarnings({ "unchecked", "rawtypes" })
-public class UserDisplayAttributesModalPage extends DisplayAttributesModalPage {
+public class UserDisplayAttributesModalPage<T extends Serializable> extends DisplayAttributesModalPage<T> {
 
     private static final long serialVersionUID = 5194630813773543054L;
 
     public static final String[] USER_DEFAULT_SELECTION = { "key", "username", "status" };
 
     public UserDisplayAttributesModalPage(
-            final BaseModal<?> modal,
+            final BaseModal<T> modal,
             final PageReference pageRef,
             final List<String> schemaNames,
             final List<String> dSchemaNames) {
@@ -58,7 +61,7 @@ public class UserDisplayAttributesModalPage extends DisplayAttributesModalPage {
     }
 
     @Override
-    public Class getTOClass() {
+    public Class<? extends AnyTO> getTOClass() {
         return UserTO.class;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/6a93860d/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractModalPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractModalPanel.java
index 3811873..dae4216 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractModalPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractModalPanel.java
@@ -18,8 +18,11 @@
  */
 package org.apache.syncope.client.console.panels;
 
+import java.io.Serializable;
 import org.apache.syncope.client.console.wicket.markup.head.MetaHeaderItem;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.head.HeaderItem;
@@ -30,13 +33,13 @@ import org.apache.wicket.markup.html.panel.Panel;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class AbstractModalPanel extends Panel implements ModalPanel {
+public class AbstractModalPanel<T extends Serializable> extends Panel implements ModalPanel<T> {
 
     private static final long serialVersionUID = 8611724965544132636L;
 
     protected static final Logger LOG = LoggerFactory.getLogger(AbstractModalPanel.class);
 
-    protected final BaseModal<?> modal;
+    protected final BaseModal<T> modal;
 
     protected static final String CANCEL = "cancel";
 
@@ -50,13 +53,23 @@ public class AbstractModalPanel extends Panel implements ModalPanel {
 
     protected final HeaderItem meta = new MetaHeaderItem("X-UA-Compatible", "IE=edge");
 
-    public AbstractModalPanel(final BaseModal<?> modal, final PageReference pageRef) {
+    public AbstractModalPanel(final BaseModal<T> modal, final PageReference pageRef) {
         super(BaseModal.getContentId());
         this.pageRef = pageRef;
         this.modal = modal;
     }
 
     @Override
+    public final MarkupContainer add(final Component... childs) {
+        return super.add(childs);
+    }
+
+    @Override
+    public final MarkupContainer addOrReplace(final Component... childs) {
+        return super.addOrReplace(childs);
+    }
+
+    @Override
     public void renderHead(final IHeaderResponse response) {
         super.renderHead(response);
         response.render(new PriorityHeaderItem(meta));
@@ -75,4 +88,9 @@ public class AbstractModalPanel extends Panel implements ModalPanel {
     public void onError(final AjaxRequestTarget target, final Form<?> form) {
         modal.getNotificationPanel().refresh(target);
     }
+
+    @Override
+    public T getItem() {
+        return modal.getFormModel();
+    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/6a93860d/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractResourceModal.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractResourceModal.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractResourceModal.java
index 68fcc19..a4446ff 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractResourceModal.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractResourceModal.java
@@ -33,14 +33,16 @@ import org.apache.wicket.markup.html.form.Form;
 
 /**
  * Modal window with Resource form.
+ *
+ * @param <T>
  */
-public abstract class AbstractResourceModal extends AbstractModalPanel {
+public abstract class AbstractResourceModal<T extends Serializable> extends AbstractModalPanel<T> {
 
     private static final long serialVersionUID = 1734415311027284221L;
 
     protected final List<ITab> tabs;
 
-    public AbstractResourceModal(final BaseModal<?> modal, final PageReference pageRef) {
+    public AbstractResourceModal(final BaseModal<T> modal, final PageReference pageRef) {
         super(modal, pageRef);
 
         this.tabs = new ArrayList<>();

http://git-wip-us.apache.org/repos/asf/syncope/blob/6a93860d/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractTypesPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractTypesPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractTypesPanel.java
index cad794e..fd9f547 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractTypesPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractTypesPanel.java
@@ -18,83 +18,20 @@
  */
 package org.apache.syncope.client.console.panels;
 
-import java.util.List;
-import org.apache.syncope.client.console.PreferenceManager;
-import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.AjaxFallbackDataTable;
-import org.apache.syncope.client.console.wicket.markup.html.form.SelectChoiceRenderer;
+import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
+import org.apache.syncope.client.console.commons.SearchableDataProvider;
+import org.apache.syncope.client.console.rest.BaseRestClient;
 import org.apache.syncope.common.lib.AbstractBaseBean;
-import org.apache.wicket.PageReference;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
-import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
-import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.form.DropDownChoice;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.PropertyModel;
 
-public class AbstractTypesPanel<T extends AbstractBaseBean> extends Panel {
+public abstract class AbstractTypesPanel<T extends AbstractBaseBean, DP extends SearchableDataProvider<T>>
+        extends AbstractSearchResultPanel<T, T, DP, BaseRestClient> {
 
     private static final long serialVersionUID = 7890071604330629259L;
 
-    protected final PreferenceManager prefMan = new PreferenceManager();
-
-    protected final PageReference pageRef;
-
-    protected int pageRows;
-
-    public AbstractTypesPanel(final String id, final PageReference pageRef) {
-        super(id);
-        this.pageRef = pageRef;
-    }
-
-    protected void buildDataTable(final WebMarkupContainer container, final List<IColumn<T, String>> tableCols,
-            final SortableDataProvider<T, String> provider, final String paginatorKey) {
-
-        final WebMarkupContainer tableContainer = new WebMarkupContainer("tableContainer");
-
-        tableContainer.setOutputMarkupId(true);
-        container.add(tableContainer);
-
-        final AjaxFallbackDataTable<T, String> table =
-                new AjaxFallbackDataTable<>("datatable",
-                        tableCols, provider, pageRows, tableContainer);
-
-        table.setOutputMarkupId(true);
-        tableContainer.add(table);
-        container.add(getPaginatorForm(tableContainer, table, "paginator", this, paginatorKey));
-    }
-
-    protected Form<Void> getPaginatorForm(final WebMarkupContainer webContainer,
-            final AjaxFallbackDataTable<T, String> dataTable,
-            final String formname, final Panel panel, final String rowsPerPagePrefName) {
-
-        final Form<Void> form = new Form<>(formname);
-
-        final DropDownChoice<Integer> rowChooser = new DropDownChoice<>("rowsChooser",
-                new PropertyModel<Integer>(panel, "pageRows"), prefMan.getPaginatorChoices(),
-                new SelectChoiceRenderer<Integer>());
-
-        rowChooser.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
-
-            private static final long serialVersionUID = -1107858522700306810L;
-
-            @Override
-            protected void onUpdate(final AjaxRequestTarget target) {
-                prefMan.set(getRequest(), getResponse(), rowsPerPagePrefName, rowChooser.getInput());
-                dataTable.setItemsPerPage(rowChooser.getModelObject());
-                target.add(webContainer);
-            }
-        });
-
-        form.add(rowChooser);
-        return form;
-    }
-
-    protected int getPageRows() {
-        return pageRows;
+    public AbstractTypesPanel(final String id, final Builder<T, T, BaseRestClient> builder) {
+        super(id, builder);
+        setFooterVisibility(true);
+        modal.addSumbitButton();
+        modal.size(Modal.Size.Large);
     }
 }
-

http://git-wip-us.apache.org/repos/asf/syncope/blob/6a93860d/client/console/src/main/java/org/apache/syncope/client/console/panels/ActionDataTablePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ActionDataTablePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ActionDataTablePanel.java
index 8c063b2..65e9ca1 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ActionDataTablePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ActionDataTablePanel.java
@@ -40,7 +40,7 @@ import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.model.ResourceModel;
 
-public class ActionDataTablePanel<T, S> extends DataTablePanel<T, S> {
+public class ActionDataTablePanel<T extends Serializable, S> extends DataTablePanel<T, S> {
 
     private static final long serialVersionUID = -8826989026203543957L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/6a93860d/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java
index f740fc3..6a5b596 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java
@@ -45,11 +45,11 @@ import org.apache.wicket.markup.html.form.CheckGroup;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.panel.Fragment;
 
-public final class AjaxDataTablePanel<T, S> extends DataTablePanel<T, S> {
+public final class AjaxDataTablePanel<T extends Serializable, S> extends DataTablePanel<T, S> {
 
     private static final long serialVersionUID = -7264400471578272966L;
 
-    public static class Builder<T, S> implements Serializable {
+    public static class Builder<T extends Serializable, S> implements Serializable {
 
         private static final long serialVersionUID = 8876232177473972722L;
 
@@ -148,7 +148,7 @@ public final class AjaxDataTablePanel<T, S> extends DataTablePanel<T, S> {
 
         super(id);
 
-        final BaseModal<?> bulkModalWin = new BaseModal<>("bulkModal");
+        final BaseModal<T> bulkModalWin = new BaseModal<>("bulkModal");
         add(bulkModalWin);
 
         bulkModalWin.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {

http://git-wip-us.apache.org/repos/asf/syncope/blob/6a93860d/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassModalPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassModalPanel.java
index a5eae89..02063f3 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassModalPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassModalPanel.java
@@ -30,7 +30,7 @@ import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.PropertyModel;
 
-public class AnyTypeClassModalPanel extends AbstractModalPanel {
+public class AnyTypeClassModalPanel extends AbstractModalPanel<AnyTypeClassTO> {
 
     private static final long serialVersionUID = 1086997609984272599L;
 
@@ -51,8 +51,8 @@ public class AnyTypeClassModalPanel extends AbstractModalPanel {
         antTypeClassForm.setModel(new CompoundPropertyModel<>(anyTypeClassTO));
         antTypeClassForm.setOutputMarkupId(true);
 
-        final AjaxTextFieldPanel key =
-                new AjaxTextFieldPanel("key", getString("key"), new PropertyModel<String>(anyTypeClassTO, "key"));
+        final AjaxTextFieldPanel key = new AjaxTextFieldPanel("key", getString("key"), new PropertyModel<String>(
+                anyTypeClassTO, "key"));
         key.addRequiredLabel();
         key.setEnabled(anyTypeClassTO.getKey() == null || anyTypeClassTO.getKey().isEmpty());
         antTypeClassForm.add(key);

http://git-wip-us.apache.org/repos/asf/syncope/blob/6a93860d/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 f5dba79..1948904 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
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.client.console.panels;
 
+import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 import java.io.Serializable;
 import java.util.List;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
@@ -38,6 +39,7 @@ import org.apache.wicket.markup.html.form.ListChoice;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
+import org.apache.wicket.model.ResourceModel;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -53,7 +55,6 @@ public class AnyTypeClassesPanel extends Panel {
 
     public AnyTypeClassesPanel(final String id, final PageReference pageRef, final BaseModal<AnyTypeClassTO> modal) {
         super(id);
-
         this.setOutputMarkupId(true);
 
         final WebMarkupContainer container = new WebMarkupContainer("container");
@@ -124,6 +125,20 @@ public class AnyTypeClassesPanel extends Panel {
 
             @Override
             public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
+                modal.header(new ResourceModel("createAnyTypeClass"));
+                modal.setFormModel(new AnyTypeClassTO());
+                modal.size(Modal.Size.Large);
+                target.add(modal.setContent(new AnyTypeClassModalPanel(modal, pageRef, true)));
+                modal.addSumbitButton();
+                modal.show(true);
+            }
+        }, ActionLink.ActionType.CREATE, StandardEntitlement.ANYTYPECLASS_CREATE).addWithRoles(
+                new ActionLink<Serializable>() {
+
+            private static final long serialVersionUID = -3722207913631435501L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
                 if (anyTypeClasses != null && anyTypeClasses.getModelObject() != null) {
                     modal.header(Model.of(anyTypeClasses.getModelObject().getKey()));
                     modal.setFormModel(anyTypeClasses.getModelObject());
@@ -133,30 +148,32 @@ public class AnyTypeClassesPanel extends Panel {
                 }
             }
         }, ActionLink.ActionType.EDIT, StandardEntitlement.ANYTYPECLASS_UPDATE).addWithRoles(
-                new ActionLink<Serializable>() {
-
-            private static final long serialVersionUID = -3722207913631435501L;
-
-            @Override
-            public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
-                try {
-                    if (anyTypeClasses != null && anyTypeClasses.getModelObject() != null) {
-                        SyncopeConsoleSession.get()
-                                .getService(AnyTypeClassService.class).delete(anyTypeClasses.getModelObject().getKey());
-                        anyTypeClasses.setModelObject(null);
-                        anyTypeClasses.setChoices(SyncopeConsoleSession.get().getService(AnyTypeClassService.class).
-                                list());
-                        target.add(anyTypeClasses);
-                        target.add(updateAnyTypeClassDetails(new AnyTypeClassTO(), true));
-                        info(getString(Constants.OPERATION_SUCCEEDED));
+                        new ActionLink<Serializable>() {
+
+                    private static final long serialVersionUID = -3722207913631435501L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
+                        try {
+                            if (anyTypeClasses != null && anyTypeClasses.getModelObject() != null) {
+                                SyncopeConsoleSession.get()
+                                        .getService(AnyTypeClassService.class).delete(anyTypeClasses.getModelObject().
+                                        getKey());
+                                anyTypeClasses.setModelObject(null);
+                                anyTypeClasses.setChoices(SyncopeConsoleSession.get().getService(
+                                        AnyTypeClassService.class).
+                                        list());
+                                target.add(anyTypeClasses);
+                                target.add(updateAnyTypeClassDetails(new AnyTypeClassTO(), true));
+                                info(getString(Constants.OPERATION_SUCCEEDED));
+                            }
+                        } catch (Exception e) {
+                            LOG.error("While deleting AnyTypeClass", e);
+                            error(getString(Constants.ERROR) + ": " + e.getMessage());
+                        }
+                        ((AbstractBasePage) getPage()).getNotificationPanel().refresh(target);
                     }
-                } catch (Exception e) {
-                    LOG.error("While deleting AnyTypeClass", e);
-                    error(getString(Constants.ERROR) + ": " + e.getMessage());
-                }
-                ((AbstractBasePage) getPage()).getNotificationPanel().refresh(target);
-            }
-        }, ActionLink.ActionType.DELETE, StandardEntitlement.ANYTYPECLASS_DELETE);
+                }, ActionLink.ActionType.DELETE, StandardEntitlement.ANYTYPECLASS_DELETE);
 
         container.add(actionLinks.build("editRemove"));
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/6a93860d/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 f5d5a97..8bda922 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
@@ -24,7 +24,6 @@ import java.util.List;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.Transformer;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxPalettePanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
@@ -43,32 +42,30 @@ public class AnyTypeDetailsPanel extends Panel {
 
     private static final long serialVersionUID = 8131650329622035501L;
 
-    private final AnyTypeTO anyTypeTO;
-
-    public AnyTypeDetailsPanel(final String id, final BaseModal<AnyTypeTO> modal) {
+    public AnyTypeDetailsPanel(final String id, final AnyTypeTO anyTypeTO) {
         super(id);
 
-        this.anyTypeTO = modal.getFormModel();
-
         final WebMarkupContainer container = new WebMarkupContainer("container");
         container.setOutputMarkupId(true);
         add(container);
 
         final Form<AnyTypeTO> form = new Form<>("form");
-        form.setModel(new CompoundPropertyModel<>(this.anyTypeTO));
+        form.setModel(new CompoundPropertyModel<>(anyTypeTO));
         container.add(form);
 
-        final AjaxTextFieldPanel key =
-                new AjaxTextFieldPanel("key", getString("key"), new PropertyModel<String>(this.anyTypeTO, "key"));
+        final AjaxTextFieldPanel key
+                = new AjaxTextFieldPanel("key", getString("key"), new PropertyModel<String>(anyTypeTO, "key"));
         key.addRequiredLabel();
         key.setEnabled(key.getModelObject() == null || key.getModelObject().isEmpty());
         form.add(key);
 
         final AjaxDropDownChoicePanel<AnyTypeKind> kind = new AjaxDropDownChoicePanel<>(
-                "kind", getString("kind"), new PropertyModel<AnyTypeKind>(this.anyTypeTO, "kind"));
+                "kind", getString("kind"), new PropertyModel<AnyTypeKind>(anyTypeTO, "kind"));
         kind.setChoices(Arrays.asList(AnyTypeKind.values()));
-        kind.setModelObject(AnyTypeKind.ANY_OBJECT);
         kind.setOutputMarkupId(true);
+        if (anyTypeTO.getKind() == null) {
+            kind.setModelObject(AnyTypeKind.ANY_OBJECT);
+        }
         kind.setEnabled(false);
         form.add(kind);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/6a93860d/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeModalPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeModalPanel.java
index 76acff0..0ec02d0 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeModalPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeModalPanel.java
@@ -18,44 +18,24 @@
  */
 package org.apache.syncope.client.console.panels;
 
-import org.apache.syncope.client.console.SyncopeConsoleSession;
-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.AnyTypeTO;
-import org.apache.syncope.common.rest.api.service.AnyTypeService;
 import org.apache.wicket.PageReference;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.html.form.Form;
 
-public class AnyTypeModalPanel extends AbstractModalPanel {
+public class AnyTypeModalPanel extends AbstractModalPanel<AnyTypeTO> {
 
     private static final long serialVersionUID = -4603032036433309900L;
 
-    private final boolean createFlag;
+    protected final AnyTypeTO anyTypeTO;
 
-    public AnyTypeModalPanel(final BaseModal<AnyTypeTO> modal, final PageReference pageRef, final boolean createFlag) {
+    public AnyTypeModalPanel(final BaseModal<AnyTypeTO> modal, final AnyTypeTO anyTypeTO, final PageReference pageRef) {
         super(modal, pageRef);
-
-        this.createFlag = createFlag;
-        add(new AnyTypeDetailsPanel("anyTypeDetailsPanel", modal));
+        this.anyTypeTO = anyTypeTO;
+        add(new AnyTypeDetailsPanel("anyTypeDetailsPanel", this.anyTypeTO));
     }
 
     @Override
-    public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
-        try {
-            final AnyTypeTO updateAnyTypeTO = AnyTypeTO.class.cast(form.getModelObject());
-
-            if (createFlag) {
-                SyncopeConsoleSession.get().getService(AnyTypeService.class).create(updateAnyTypeTO);
-            } else {
-                SyncopeConsoleSession.get().getService(AnyTypeService.class).update(updateAnyTypeTO);
-            }
-            info(getString(Constants.OPERATION_SUCCEEDED));
-            modal.close(target);
-        } catch (Exception e) {
-            LOG.error("While creating or updating AnyTypeTO", e);
-            error(getString(Constants.ERROR) + ": " + e.getMessage());
-            modal.getNotificationPanel().refresh(target);
-        }
+    public AnyTypeTO getItem() {
+        return this.anyTypeTO;
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/6a93860d/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypePanel.java
index ccdfd77..e445746 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypePanel.java
@@ -18,68 +18,135 @@
  */
 package org.apache.syncope.client.console.panels;
 
+import static org.apache.syncope.client.console.panels.AbstractModalPanel.LOG;
+import static org.apache.wicket.Component.ENABLE;
+
 import java.io.Serializable;
 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 org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.commons.SearchableDataProvider;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.client.console.pages.AbstractBasePage;
+import org.apache.syncope.client.console.panels.AnyTypePanel.AnyTypeProvider;
+import org.apache.syncope.client.console.rest.BaseRestClient;
 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.ActionLinksPanel;
+import org.apache.syncope.client.console.wizards.AbstractModalPanelBuilder;
+import org.apache.syncope.client.console.wizards.AjaxWizard;
+import org.apache.syncope.client.console.wizards.WizardMgtPanel;
 import org.apache.syncope.common.lib.to.AnyTypeTO;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.syncope.common.rest.api.service.AnyTypeService;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
+import org.apache.wicket.event.Broadcast;
 import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
-import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
-import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
-import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 import org.apache.wicket.model.ResourceModel;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
-public class AnyTypePanel extends AbstractTypesPanel<AnyTypeTO> {
+public class AnyTypePanel extends AbstractTypesPanel<AnyTypeTO, AnyTypeProvider> {
 
     private static final long serialVersionUID = 3905038169553185171L;
 
-    private static final Logger LOG = LoggerFactory.getLogger(AnyTypePanel.class);
+    private final String pageID = "AnyTypes";
 
-    private static final String PAGINATOR_ROWS_KEYS = Constants.PREF_ANYTYPE_PAGINATOR_ROWS;
+    public AnyTypePanel(final String id, final Builder<AnyTypeTO, AnyTypeTO, BaseRestClient> builder) {
+        super(id, builder);
+    }
 
-    private final BaseModal<AnyTypeTO> modal;
+    public AnyTypePanel(final String id, final PageReference pageRef) {
+        super(id, new Builder<AnyTypeTO, AnyTypeTO, BaseRestClient>(null, pageRef) {
 
-    public AnyTypePanel(final String id, final PageReference pageReference, final BaseModal<AnyTypeTO> modal) {
-        super(id, pageReference);
+            private static final long serialVersionUID = 8769126634538601689L;
 
-        this.pageRows = prefMan.getPaginatorRows(getRequest(), PAGINATOR_ROWS_KEYS);
-        this.modal = modal;
+            @Override
+            protected WizardMgtPanel<AnyTypeTO> newInstance(final String id) {
+                return new AnyTypePanel(id, this);
+            }
+        });
 
-        final WebMarkupContainer container = new WebMarkupContainer("container");
-        container.setOutputMarkupId(true);
-        add(container);
+        this.addNewItemPanelBuilder(new AbstractModalPanelBuilder<AnyTypeTO>(
+                BaseModal.CONTENT_ID, new AnyTypeTO(), pageRef) {
 
-        buildDataTable(container,
-                getColumns(container, pageReference), new AnyTypePanel.AnyTypeProvider(), PAGINATOR_ROWS_KEYS);
+            private static final long serialVersionUID = -6388405037134399367L;
 
+            @Override
+            public ModalPanel<AnyTypeTO> build(final int index, final boolean edit) {
+                final AnyTypeTO modelObject = newModelObject();
+                return new AnyTypeModalPanel(modal, modelObject, pageRef) {
+
+                    private static final long serialVersionUID = -6227956682141146095L;
+
+                    @Override
+                    public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
+                        try {
+                            if (getOriginalItem() == null || StringUtils.isBlank(getOriginalItem().getKey())) {
+                                SyncopeConsoleSession.get().getService(AnyTypeService.class).create(modelObject);
+                            } else {
+                                SyncopeConsoleSession.get().getService(AnyTypeService.class).update(modelObject);
+                            }
+                            info(getString(Constants.OPERATION_SUCCEEDED));
+                            modal.close(target);
+                        } catch (Exception e) {
+                            LOG.error("While creating or updating AnyTypeTO", e);
+                            error(getString(Constants.ERROR) + ": " + e.getMessage());
+                            modal.getNotificationPanel().refresh(target);
+                        }
+                    }
+                };
+            }
+
+            @Override
+            protected void onCancelInternal(final AnyTypeTO modelObject) {
+            }
+
+            @Override
+            protected void onApplyInternal(final AnyTypeTO modelObject) {
+            }
+        }, true);
+
+        initResultTable();
+        MetaDataRoleAuthorizationStrategy.authorize(addAjaxLink, ENABLE, StandardEntitlement.ANYTYPE_CREATE);
+    }
+
+    @Override
+    protected AnyTypeProvider dataProvider() {
+        return new AnyTypeProvider(rows);
+    }
+
+    @Override
+    protected String paginatorRowsKey() {
+        return Constants.PREF_ANYTYPE_PAGINATOR_ROWS;
+    }
+
+    @Override
+    protected Collection<ActionLink.ActionType> getBulkActions() {
+        return Collections.<ActionLink.ActionType>emptyList();
+    }
+
+    @Override
+    protected String getPageId() {
+        return pageID;
     }
 
-    private <T extends AnyTypeModalPanel> List<IColumn<AnyTypeTO, String>> getColumns(
-            final WebMarkupContainer webContainer, final PageReference pageReference) {
+    @Override
+    protected List<IColumn<AnyTypeTO, String>> getColumns() {
 
         final List<IColumn<AnyTypeTO, String>> columns = new ArrayList<>();
 
@@ -88,9 +155,8 @@ public class AnyTypePanel extends AbstractTypesPanel<AnyTypeTO> {
             if (field != null && !Modifier.isStatic(field.getModifiers())) {
                 final String fieldName = field.getName();
                 if (field.getType().isArray()) {
-                    final IColumn<AnyTypeTO, String> column =
-                            new PropertyColumn<AnyTypeTO, String>(
-                                    new ResourceModel(field.getName()), field.getName()) {
+                    final IColumn<AnyTypeTO, String> column = new PropertyColumn<AnyTypeTO, String>(
+                            new ResourceModel(field.getName()), field.getName()) {
 
                         private static final long serialVersionUID = 3282547854226892169L;
 
@@ -108,9 +174,8 @@ public class AnyTypePanel extends AbstractTypesPanel<AnyTypeTO> {
                     columns.add(column);
 
                 } else {
-                    final IColumn<AnyTypeTO, String> column =
-                            new PropertyColumn<AnyTypeTO, String>(
-                                    new ResourceModel(field.getName()), field.getName(), field.getName()) {
+                    final IColumn<AnyTypeTO, String> column = new PropertyColumn<AnyTypeTO, String>(
+                            new ResourceModel(field.getName()), field.getName(), field.getName()) {
 
                         private static final long serialVersionUID = 3282547854226892169L;
 
@@ -143,9 +208,8 @@ public class AnyTypePanel extends AbstractTypesPanel<AnyTypeTO> {
             public void populateItem(final Item<ICellPopulator<AnyTypeTO>> item, final String componentId,
                     final IModel<AnyTypeTO> model) {
 
-                final AnyTypeTO anyTypeTO = model.getObject();
-
-                final ActionLinksPanel.Builder<Serializable> actionLinks = ActionLinksPanel.builder(pageReference);
+                final ActionLinksPanel.Builder<Serializable> actionLinks
+                        = ActionLinksPanel.builder(page.getPageReference());
                 actionLinks.setDisableIndicator(true);
                 actionLinks.addWithRoles(new ActionLink<Serializable>() {
 
@@ -153,11 +217,8 @@ public class AnyTypePanel extends AbstractTypesPanel<AnyTypeTO> {
 
                     @Override
                     public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
-                        modal.header(Model.of(anyTypeTO.getKey()));
-                        modal.setFormModel(anyTypeTO);
-                        target.add(modal.setContent(new AnyTypeModalPanel(modal, pageReference, false)));
-                        modal.addSumbitButton();
-                        modal.show(true);
+                        send(AnyTypePanel.this, Broadcast.EXACT,
+                                new AjaxWizard.EditItemActionEvent<AnyTypeTO>(model.getObject(), target));
                     }
                 }, ActionLink.ActionType.EDIT, StandardEntitlement.ANYTYPE_UPDATE).addWithRoles(
                         new ActionLink<Serializable>() {
@@ -167,9 +228,10 @@ public class AnyTypePanel extends AbstractTypesPanel<AnyTypeTO> {
                     @Override
                     public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
                         try {
-                            SyncopeConsoleSession.get().getService(AnyTypeService.class).delete(anyTypeTO.getKey());
+                            SyncopeConsoleSession.get().
+                                    getService(AnyTypeService.class).delete(model.getObject().getKey());
                             info(getString(Constants.OPERATION_SUCCEEDED));
-                            target.add(webContainer);
+                            target.add(container);
                         } catch (Exception e) {
                             LOG.error("While deleting AnyTypeTO", e);
                             error(getString(Constants.ERROR) + ": " + e.getMessage());
@@ -186,15 +248,14 @@ public class AnyTypePanel extends AbstractTypesPanel<AnyTypeTO> {
 
     }
 
-    private final class AnyTypeProvider extends SortableDataProvider<AnyTypeTO, String> {
+    protected final class AnyTypeProvider extends SearchableDataProvider<AnyTypeTO> {
 
         private static final long serialVersionUID = -185944053385660794L;
 
         private final SortableDataProviderComparator<AnyTypeTO> comparator;
 
-        private AnyTypeProvider() {
-            super();
-            setSort("key", SortOrder.ASCENDING);
+        private AnyTypeProvider(final int paginatorRows) {
+            super(paginatorRows);
             comparator = new SortableDataProviderComparator<>(this);
         }