You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by md...@apache.org on 2015/11/20 15:23:10 UTC

[2/2] syncope git commit: [SYNCOPE-156] Added the management of AnyTypeClasses

[SYNCOPE-156] Added the management of AnyTypeClasses


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

Branch: refs/heads/master
Commit: e6e2a4718f534240d97b64152b55041449f2ce90
Parents: 444182f
Author: Marco Di Sabatino Di Diodoro <md...@apache.org>
Authored: Fri Nov 20 15:22:03 2015 +0100
Committer: Marco Di Sabatino Di Diodoro <md...@apache.org>
Committed: Fri Nov 20 15:22:14 2015 +0100

----------------------------------------------------------------------
 .../syncope/client/console/pages/BasePage.java  |   8 +-
 .../syncope/client/console/pages/Schemas.java   | 141 -------------
 .../syncope/client/console/pages/Types.java     | 202 +++++++++++++++++++
 .../console/panels/AnyTypeClassDetails.java     | 104 ++++++++++
 .../console/panels/AnyTypeClassModalPanel.java  |  87 ++++++++
 .../console/panels/AnyTypeClassesPanel.java     | 144 ++++++++++++-
 .../client/console/panels/AnyTypePanel.java     |  33 +++
 .../client/console/panels/SchemaModalPanel.java |   2 +-
 .../client/console/panels/SchemasPanel.java     |   1 -
 .../markup/html/form/AjaxPalettePanel.java      |  94 +++++++--
 .../wicket/markup/html/form/NonI18nPalette.java |  11 +
 .../client/console/wizards/any/AuxClasses.java  |  46 ++---
 .../client/console/wizards/any/Resources.java   |  37 ++--
 .../client/console/wizards/any/Roles.java       |  17 +-
 .../syncope/client/console/pages/BasePage.html  |   2 +-
 .../syncope/client/console/pages/Schemas.html   |  54 -----
 .../client/console/pages/Schemas.properties     |  18 --
 .../client/console/pages/Schemas_it.properties  |  18 --
 .../console/pages/Schemas_pt_BR.properties      |  18 --
 .../syncope/client/console/pages/Types.html     |  56 +++++
 .../client/console/pages/Types.properties       |  18 ++
 .../client/console/pages/Types_it.properties    |  18 ++
 .../client/console/pages/Types_pt_BR.properties |  18 ++
 .../console/panels/AnyTypeClassDetails.html     |  57 ++++++
 .../panels/AnyTypeClassDetails.properties       |  20 ++
 .../panels/AnyTypeClassDetails_it.properties    |  20 ++
 .../panels/AnyTypeClassDetails_pt_BR.properties |  20 ++
 .../console/panels/AnyTypeClassModalPanel.html  |  32 +++
 .../console/panels/AnyTypeClassesPanel.html     |  56 +++++
 .../panels/AnyTypeClassesPanel.properties       |  19 ++
 .../panels/AnyTypeClassesPanel_it.properties    |  19 ++
 .../panels/AnyTypeClassesPanel_pt_BR.properties |  19 ++
 32 files changed, 1085 insertions(+), 324 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
index 16c7151..f77233e 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
@@ -84,11 +84,11 @@ public class BasePage extends AbstractBasePage implements IAjaxIndicatorAware {
         WebMarkupContainer confULContainer = new WebMarkupContainer(getULContainerId("configuration"));
         confLIContainer.add(confULContainer);
 
-        liContainer = new WebMarkupContainer(getLIContainerId("schemas"));
+        liContainer = new WebMarkupContainer(getLIContainerId("types"));
         confULContainer.add(liContainer);
-        BookmarkablePageLink<Page> schemaLink = new BookmarkablePageLink<>("schemas", Schemas.class);
-//        MetaDataRoleAuthorizationStrategy.authorize(schemaLink, WebPage.ENABLE, StandardEntitlement.SCHEMA_LIST);
-        liContainer.add(schemaLink);
+        BookmarkablePageLink<Page> typesLink = new BookmarkablePageLink<>("types", Types.class);
+        MetaDataRoleAuthorizationStrategy.authorize(typesLink, WebPage.ENABLE, StandardEntitlement.SCHEMA_LIST);
+        liContainer.add(typesLink);
 
         liContainer = new WebMarkupContainer(getLIContainerId("workflow"));
         confULContainer.add(liContainer);

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/java/org/apache/syncope/client/console/pages/Schemas.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Schemas.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Schemas.java
deleted file mode 100644
index 0e8b408..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/Schemas.java
+++ /dev/null
@@ -1,141 +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.pages;
-
-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.commons.Constants;
-import org.apache.syncope.client.console.panels.SchemasPanel;
-import org.apache.syncope.client.console.wicket.ajax.markup.html.ClearIndicatingAjaxLink;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
-import org.apache.syncope.common.lib.to.AbstractSchemaTO;
-import org.apache.wicket.PageReference;
-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.EmptyPanel;
-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.types.StandardEntitlement;
-import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
-
-public class Schemas extends BasePage {
-
-    private static final long serialVersionUID = 8091922398776299403L;
-
-    private final BaseModal<AbstractSchemaTO> modal;
-
-    public Schemas(final PageParameters parameters) {
-        super(parameters);
-
-        this.modal = new BaseModal<>("modal");
-
-        final WebMarkupContainer content = new WebMarkupContainer("content");
-        content.add(new Label("header", "AnyTypeClasses/Schemas"));
-        content.setOutputMarkupId(true);
-        content.add(new AjaxBootstrapTabbedPanel<>("tabbedPanel", buildTabList(getPageReference())));
-        content.add(buildCreateSchemaLink());
-        add(content);
-
-        modal.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {
-
-            private static final long serialVersionUID = 8804221891699487139L;
-
-            @Override
-            public void onClose(final AjaxRequestTarget target) {
-                target.add();
-                modal.show(false);
-
-                if (((AbstractBasePage) Schemas.this.getPage()).isModalResult()) {
-                    info(getString(Constants.OPERATION_SUCCEEDED));
-                    feedbackPanel.refresh(target);
-                    ((AbstractBasePage) Schemas.this.getPage()).setModalResult(false);
-                }
-            }
-        });
-
-        add(modal);
-
-    }
-
-    private List<ITab> buildTabList(final PageReference pageReference) {
-
-        final List<ITab> tabs = new ArrayList<>();
-
-        tabs.add(new AbstractTab(new Model<>("AnyTypeClasses")) {
-
-            private static final long serialVersionUID = -6815067322125799251L;
-
-            @Override
-            public Panel getPanel(final String panelId) {
-//                final AnyTypeClassesPanel objectClassesPanel =
-//                        new AnyTypeClassesPanel(panelId, getPageReference(), false);
-//                objectClassesPanel.setEnabled(false);
-//                return objectClassesPanel;
-                return new EmptyPanel(panelId);
-            }
-        });
-
-        tabs.add(new AbstractTab(new Model<>("Schemas")) {
-
-            private static final long serialVersionUID = -6815067322125799251L;
-
-            @Override
-            public Panel getPanel(final String panelId) {
-                return new SchemasPanel(panelId, getPageReference(), modal);
-            }
-        });
-
-        return tabs;
-    }
-
-    private AjaxLink<Void> buildCreateSchemaLink() {
-
-        final AjaxLink<Void> createLink = new ClearIndicatingAjaxLink<Void>("createSchemaLink", getPageReference()) {
-
-            private static final long serialVersionUID = -7978723352517770644L;
-
-            @Override
-            protected void onClickInternal(final AjaxRequestTarget target) {
-                modal.header(new ResourceModel("createSchema"));
-
-                final SchemaModalPanel panel = new SchemaModalPanel(modal, getPageReference(), true);
-
-                target.add(modal.setContent(panel));
-                modal.addSumbitButton();
-                modal.show(true);
-            }
-        };
-
-        if (SyncopeConsoleSession.get().owns(StandardEntitlement.SCHEMA_CREATE)) {
-            MetaDataRoleAuthorizationStrategy.authorize(createLink, ENABLE, StandardEntitlement.SCHEMA_CREATE);
-        }
-
-        return createLink;
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/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
new file mode 100644
index 0000000..8c710b7
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/Types.java
@@ -0,0 +1,202 @@
+/*
+ * 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.pages;
+
+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.commons.Constants;
+import org.apache.syncope.client.console.panels.AnyTypeClassModalPanel;
+import org.apache.syncope.client.console.panels.AnyTypeClassesPanel;
+import org.apache.syncope.client.console.panels.ModalPanel;
+import org.apache.syncope.client.console.panels.SchemasPanel;
+import org.apache.syncope.client.console.wicket.ajax.markup.html.ClearIndicatingAjaxLink;
+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.types.StandardEntitlement;
+import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
+import org.apache.wicket.markup.html.panel.EmptyPanel;
+
+public class Types extends BasePage {
+
+    private static final long serialVersionUID = 8091922398776299403L;
+
+    private final BaseModal<AbstractSchemaTO> schemaModal;
+
+    private final BaseModal<AnyTypeClassTO> anyTypeClassModal;
+
+    private final BaseModal<AnyTypeTO> anyTypeModal;
+
+    private final AjaxBootstrapTabbedPanel<ITab> tabbedPanel;
+
+    private enum Type {
+        SCHEMA,
+        ANYTYPECLASS,
+        ANYTYPE,
+        RELATIONSHIPTYPE;
+    }
+
+    public Types(final PageParameters parameters) {
+        super(parameters);
+
+        this.schemaModal = new BaseModal<>("schemaModal");
+        this.anyTypeClassModal = new BaseModal<>("anyTypeClassModal");
+        this.anyTypeModal = new BaseModal<>("anyTypeModal");
+
+        final WebMarkupContainer content = new WebMarkupContainer("content");
+        content.add(new Label("header", "Types"));
+        content.setOutputMarkupId(true);
+        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(
+                    createSchemaLink, ENABLE, StandardEntitlement.ANYTYPECLASS_CREATE);
+        }
+
+        add(content);
+        addWindowWindowClosedCallback(schemaModal);
+        addWindowWindowClosedCallback(anyTypeClassModal);
+        addWindowWindowClosedCallback(anyTypeModal);
+        add(schemaModal);
+        add(anyTypeClassModal);
+        add(anyTypeModal);
+    }
+
+    private List<ITab> buildTabList() {
+
+        final List<ITab> tabs = new ArrayList<>();
+
+        tabs.add(new AbstractTab(new Model<>("AnyTypes")) {
+
+            private static final long serialVersionUID = -6815067322125799251L;
+
+            @Override
+            public Panel getPanel(final String panelId) {
+                //return new AnyTypePanel(panelId, getPageReference(), anyTypeModal);
+                return new EmptyPanel(panelId);
+            }
+        });
+
+        tabs.add(new AbstractTab(new Model<>("AnyTypeClasses")) {
+
+            private static final long serialVersionUID = -6815067322125799251L;
+
+            @Override
+            public Panel getPanel(final String panelId) {
+                return new AnyTypeClassesPanel(panelId, getPageReference(), anyTypeClassModal);
+            }
+        });
+
+        tabs.add(new AbstractTab(new Model<>("Schemas")) {
+
+            private static final long serialVersionUID = -6815067322125799251L;
+
+            @Override
+            public Panel getPanel(final String panelId) {
+                return new SchemasPanel(panelId, getPageReference(), schemaModal);
+            }
+        });
+
+        return tabs;
+    }
+
+    private AjaxLink<Void> buildCreateLink(final String label, final BaseModal<?> modal, final Type type) {
+
+        final AjaxLink<Void> createLink = new ClearIndicatingAjaxLink<Void>(label, getPageReference()) {
+
+            private static final long serialVersionUID = -7978723352517770644L;
+
+            @Override
+            protected void onClickInternal(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());
+                panel = new AnyTypeClassModalPanel(anyTypeClassModal, getPageReference(), true);
+                break;
+            case ANYTYPE:
+            case RELATIONSHIPTYPE:
+            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() {
+
+            private static final long serialVersionUID = 8804221891699487139L;
+
+            @Override
+            public void onClose(final AjaxRequestTarget target) {
+                tabbedPanel.setSelectedTab(tabbedPanel.getSelectedTab());
+                target.add(tabbedPanel);
+                modal.show(false);
+
+                if (((AbstractBasePage) Types.this.getPage()).isModalResult()) {
+                    info(getString(Constants.OPERATION_SUCCEEDED));
+                    feedbackPanel.refresh(target);
+                    ((AbstractBasePage) Types.this.getPage()).setModalResult(false);
+                }
+            }
+        });
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassDetails.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassDetails.java
new file mode 100644
index 0000000..1b0206e
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassDetails.java
@@ -0,0 +1,104 @@
+/*
+ * 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.util.List;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.rest.SchemaRestClient;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxPalettePanel;
+import org.apache.syncope.common.lib.to.AnyTypeClassTO;
+import org.apache.syncope.common.rest.api.service.AnyTypeClassService;
+import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.model.util.ListModel;
+
+public class AnyTypeClassDetails extends Panel {
+
+    private static final long serialVersionUID = 3321861543207340469L;
+
+    private final AnyTypeClassTO anyTypeClassTO;
+
+    private final SchemaRestClient schemaRestClient = new SchemaRestClient();
+
+    private final List<String> availablePlainSchemas = schemaRestClient.getPlainSchemaNames();
+
+    private final List<String> availableDerSchemas = schemaRestClient.getDerSchemaNames();
+
+    private final List<String> availableVirSchemas = schemaRestClient.getVirSchemaNames();
+
+    public AnyTypeClassDetails(final String id,
+            final AnyTypeClassTO anyTypeClassTO, final boolean edit) {
+        super(id);
+
+        this.anyTypeClassTO = anyTypeClassTO;
+        buildAvailableSchemas(anyTypeClassTO.getKey());
+
+        final TransparentWebMarkupContainer container = new TransparentWebMarkupContainer("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.anyTypeClassTO, "plainSchemas"),
+                        new ListModel<>(availablePlainSchemas));
+
+        plainSchema.setOutputMarkupId(true);
+        plainSchema.setEnabled(edit);
+        container.add(plainSchema);
+
+        final AjaxPalettePanel<String> derSchema =
+                new AjaxPalettePanel.Builder<String>()
+                .setAllowOrder(true)
+                .setAllowMoveAll(true)
+                .build("derSchemas",
+                        new PropertyModel<List<String>>(this.anyTypeClassTO, "derSchemas"),
+                        new ListModel<>(availableDerSchemas));
+
+        derSchema.setOutputMarkupId(true);
+        derSchema.setEnabled(edit);
+        container.add(derSchema);
+
+        final AjaxPalettePanel<String> virSchema =
+                new AjaxPalettePanel.Builder<String>()
+                .setAllowOrder(true)
+                .setAllowMoveAll(true)
+                .build("virSchemas",
+                        new PropertyModel<List<String>>(this.anyTypeClassTO, "virSchemas"),
+                        new ListModel<>(availableVirSchemas));
+
+        virSchema.setOutputMarkupId(true);
+        virSchema.setEnabled(edit);
+        container.add(virSchema);
+    }
+
+    private void buildAvailableSchemas(final String key) {
+
+        for (AnyTypeClassTO item : SyncopeConsoleSession.get().getService(AnyTypeClassService.class).list()) {
+            if (key == null || !item.getKey().equals(key)) {
+                availablePlainSchemas.removeAll(item.getPlainSchemas());
+                availableDerSchemas.removeAll(item.getDerSchemas());
+                availableVirSchemas.removeAll(item.getVirSchemas());
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/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
new file mode 100644
index 0000000..6df508f
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassModalPanel.java
@@ -0,0 +1,87 @@
+/*
+ * 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 org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.pages.AbstractBasePage;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
+import org.apache.syncope.common.lib.to.AnyTypeClassTO;
+import org.apache.syncope.common.rest.api.service.AnyTypeClassService;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+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 {
+
+    private static final long serialVersionUID = 1086997609984272599L;
+
+    private final AnyTypeClassTO anyTypeClassTO;
+
+    private final boolean createFlag;
+
+    public AnyTypeClassModalPanel(
+            final BaseModal<AnyTypeClassTO> modal,
+            final PageReference pageRef,
+            final boolean createFlag) {
+        super(modal, pageRef);
+
+        this.anyTypeClassTO = modal.getFormModel();
+        this.createFlag = createFlag;
+
+        final Form<AnyTypeClassTO> antTypeClassForm = new Form<>("form");
+        antTypeClassForm.setModel(new CompoundPropertyModel<>(anyTypeClassTO));
+        antTypeClassForm.setOutputMarkupId(true);
+
+        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);
+
+        antTypeClassForm.add(new AnyTypeClassDetails("details", anyTypeClassTO, true));
+        add(antTypeClassForm);
+    }
+
+    @Override
+    public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
+
+        try {
+            final AnyTypeClassTO updatedAnyTypeClassTO = AnyTypeClassTO.class.cast(form.getModelObject());
+
+            if (createFlag) {
+                SyncopeConsoleSession.get().getService(AnyTypeClassService.class).create(updatedAnyTypeClassTO);
+            } else {
+                SyncopeConsoleSession.get().getService(AnyTypeClassService.class).update(updatedAnyTypeClassTO);
+            }
+
+            if (pageRef.getPage() instanceof AbstractBasePage) {
+                ((AbstractBasePage) pageRef.getPage()).setModalResult(true);
+            }
+            modal.close(target);
+        } catch (Exception e) {
+            LOG.error("While creating or updating AnyTypeClass", e);
+            error(getString(Constants.ERROR) + ": " + e.getMessage());
+            modal.getFeedbackPanel().refresh(target);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/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 2d1c07f..28a9fab 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,15 +18,155 @@
  */
 package org.apache.syncope.client.console.panels;
 
+import java.io.Serializable;
+import java.util.List;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.pages.AbstractBasePage;
+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.common.lib.to.AnyTypeClassTO;
+import org.apache.syncope.common.lib.types.StandardEntitlement;
+import org.apache.syncope.common.rest.api.service.AnyTypeClassService;
 import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.IChoiceRenderer;
+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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class AnyTypeClassesPanel extends Panel {
 
     private static final long serialVersionUID = -2356760296223908382L;
 
-    public AnyTypeClassesPanel(final String id, final PageReference pageReference, final boolean unwraped) {
+    private static final Logger LOG = LoggerFactory.getLogger(AnyTypeClassesPanel.class);
+
+    private final ListChoice<AnyTypeClassTO> anyTypeClasses;
+
+    private AnyTypeClassDetails anyTypeClassesDetails;
+
+    public AnyTypeClassesPanel(final String id, final PageReference pageRef, final BaseModal<AnyTypeClassTO> modal) {
         super(id);
+
+        this.setOutputMarkupId(true);
+
+        final WebMarkupContainer container = new WebMarkupContainer("container");
+        container.setOutputMarkupId(true);
+        add(container);
+
+        anyTypeClasses = new ListChoice<AnyTypeClassTO>(
+                "anyTypeClasses", new Model<AnyTypeClassTO>(),
+                SyncopeConsoleSession.get().getService(AnyTypeClassService.class).list()) {
+
+            private static final long serialVersionUID = 4022366881854379834L;
+
+            @Override
+            protected CharSequence getDefaultChoice(final String selectedValue) {
+                return null;
+            }
+        };
+
+        anyTypeClasses.setChoiceRenderer(new IChoiceRenderer<AnyTypeClassTO>() {
+
+            private static final long serialVersionUID = 1048000918946220007L;
+
+            @Override
+            public Object getDisplayValue(final AnyTypeClassTO object) {
+                return object.getKey();
+            }
+
+            @Override
+            public String getIdValue(final AnyTypeClassTO object, final int index) {
+                return object.getKey();
+            }
+
+            @Override
+            public AnyTypeClassTO getObject(final String id,
+                    final IModel<? extends List<? extends AnyTypeClassTO>> choices) {
+                for (AnyTypeClassTO item : choices.getObject()) {
+                    if (item.getKey().equals(id)) {
+                        return item;
+                    }
+                }
+                return null;
+            }
+        });
+
+        anyTypeClasses.setNullValid(true);
+        container.add(anyTypeClasses);
+
+        updateAnyTypeClassDetails(new AnyTypeClassTO(), false);
+        container.add(anyTypeClassesDetails);
+
+        anyTypeClasses.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+
+            private static final long serialVersionUID = -1107858522700306810L;
+
+            @Override
+            protected void onUpdate(final AjaxRequestTarget target) {
+                updateAnyTypeClassDetails(anyTypeClasses.getModelObject(), true);
+                container.addOrReplace(anyTypeClassesDetails);
+                target.add(container);
+            }
+        });
+
+        final ActionLinksPanel.Builder<Serializable> actionLinks = ActionLinksPanel.builder(pageRef);
+        actionLinks.setDisableIndicator(true);
+        actionLinks.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());
+                    modal.addSumbitButton();
+                    modal.show(true);
+                    target.add(modal.setContent(new AnyTypeClassModalPanel(modal, pageRef, false)));
+                }
+            }
+        }, 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));
+                    }
+                } catch (Exception e) {
+                    LOG.error("While deleting AnyTypeClass", e);
+                    error(getString(Constants.ERROR) + ": " + e.getMessage());
+                }
+                ((AbstractBasePage) pageRef.getPage()).getFeedbackPanel().refresh(target);
+            }
+        }, ActionLink.ActionType.DELETE, StandardEntitlement.ANYTYPECLASS_DELETE);
+
+        container.add(actionLinks.build("editRemove"));
+    }
+
+    private Panel updateAnyTypeClassDetails(final AnyTypeClassTO anyTypeClassTO, final boolean visible) {
+        anyTypeClassesDetails = new AnyTypeClassDetails("anyTypeClassesDetails", anyTypeClassTO, false);
+        anyTypeClassesDetails.setOutputMarkupId(true);
+        anyTypeClassesDetails.setOutputMarkupPlaceholderTag(true);
+        anyTypeClassesDetails.setVisible(visible);
+        anyTypeClassesDetails.setEnabled(false);
+        return anyTypeClassesDetails;
     }
-    
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/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
new file mode 100644
index 0000000..bbf73a7
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypePanel.java
@@ -0,0 +1,33 @@
+/*
+ * 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 org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.common.lib.to.AnyTypeTO;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.markup.html.panel.Panel;
+
+public class AnyTypePanel extends Panel {
+
+    private static final long serialVersionUID = 3905038169553185171L;
+
+    public AnyTypePanel(final String id, final PageReference pageReference, final BaseModal<AnyTypeTO> modal) {
+        super(id);
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaModalPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaModalPanel.java
index 2f589cc..f822471 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaModalPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaModalPanel.java
@@ -90,7 +90,7 @@ public class SchemaModalPanel extends AbstractModalPanel {
 
         if (createFlag) {
             try {
-                Class<? extends AbstractSchemaTO> schemaTOClass = schemaType.getToClass();
+                final Class<? extends AbstractSchemaTO> schemaTOClass = schemaType.getToClass();
                 modal.setFormModel((AbstractSchemaTO) schemaTOClass.newInstance());
             } catch (InstantiationException | IllegalAccessException ex) {
                 LOG.error("SchemaType not found", ex);

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemasPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemasPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemasPanel.java
index a449044..6792b9c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemasPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemasPanel.java
@@ -121,7 +121,6 @@ public class SchemasPanel extends Panel {
         final Collapsible collapsible = new Collapsible("collapsePanel", buildTabList());
         collapsible.setOutputMarkupId(true);
         add(collapsible);
-
     }
 
     private List<ITab> buildTabList() {

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPalettePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPalettePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPalettePanel.java
index bb86e7f..33b04da 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPalettePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPalettePanel.java
@@ -18,11 +18,15 @@
  */
 package org.apache.syncope.client.console.wicket.markup.html.form;
 
+import java.io.Serializable;
 import java.util.Collection;
 import java.util.List;
+import org.apache.wicket.Component;
 import org.apache.wicket.extensions.markup.html.form.palette.Palette;
+import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.IChoiceRenderer;
 import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.model.util.ListModel;
 
 public class AjaxPalettePanel<T> extends AbstractFieldPanel<List<T>> {
@@ -31,30 +35,38 @@ public class AjaxPalettePanel<T> extends AbstractFieldPanel<List<T>> {
 
     protected final Palette<T> palette;
 
-    public AjaxPalettePanel(final String id, final IModel<List<T>> model, final ListModel<T> choices) {
-        this(id, model, choices, false);
-    }
-
-    public AjaxPalettePanel(final String id, final IModel<List<T>> model, final ListModel<T> choices,
-            final boolean allowOrder) {
-
-        this(id, model, choices, new SelectChoiceRenderer<T>(), allowOrder, false);
-    }
-
-    public AjaxPalettePanel(final String id, final IModel<List<T>> model, final ListModel<T> choices,
-            final IChoiceRenderer<T> renderer, final boolean allowOrder, final boolean allowMoveAll) {
+    public AjaxPalettePanel(final String id,
+            final IModel<List<T>> model, final ListModel<T> choices,
+            final IChoiceRenderer<T> renderer, final boolean allowOrder,
+            final boolean allowMoveAll, final String availableLabel, final String selectedLabel) {
 
         super(id, id, model);
 
-        this.palette = createPalette(model, choices, renderer, allowOrder, allowMoveAll);
+        this.palette = createPalette(model, choices, renderer, allowOrder, allowMoveAll, availableLabel, selectedLabel);
         add(palette.setOutputMarkupId(true));
         setOutputMarkupId(true);
     }
 
-    protected final Palette<T> createPalette(final IModel<List<T>> model, final ListModel<T> choices,
-            final IChoiceRenderer<T> renderer, final boolean allowOrder, final boolean allowMoveAll) {
+    protected final Palette<T> createPalette(
+            final IModel<List<T>> model, final ListModel<T> choices,
+            final IChoiceRenderer<T> renderer,
+            final boolean allowOrder, final boolean allowMoveAll,
+            final String availableLabel, final String selectedLabel) {
+
+        return new NonI18nPalette<T>("paletteField", model, choices, renderer, 8, allowOrder, allowMoveAll) {
 
-        return new NonI18nPalette<>("paletteField", model, choices, renderer, 8, allowOrder, allowMoveAll);
+            private static final long serialVersionUID = -3074655279011678437L;
+
+            @Override
+            protected Component newAvailableHeader(final String componentId) {
+                return new Label(componentId, new ResourceModel("palette.available", availableLabel));
+            }
+
+            @Override
+            protected Component newSelectedHeader(final String componentId) {
+                return new Label(componentId, new ResourceModel("palette.selected", selectedLabel));
+            }
+        };
     }
 
     @Override
@@ -66,4 +78,54 @@ public class AjaxPalettePanel<T> extends AbstractFieldPanel<List<T>> {
     public Collection<T> getModelCollection() {
         return palette.getModelCollection();
     }
+
+    public static class Builder<T extends Serializable> {
+
+        private IChoiceRenderer<T> renderer;
+
+        private boolean allowOrder;
+
+        private boolean allowMoveAll;
+
+        private String selectedLabel;
+
+        private String availableLabel;
+
+        public Builder() {
+            this.allowMoveAll = false;
+            this.allowOrder = false;
+            this.renderer = new SelectChoiceRenderer<>();
+        }
+
+        public Builder<T> setAllowOrder(final boolean allowOrder) {
+            this.allowOrder = allowOrder;
+            return this;
+        }
+
+        public Builder<T> setAllowMoveAll(final boolean allowMoveAll) {
+            this.allowMoveAll = allowMoveAll;
+            return this;
+        }
+
+        public Builder<T> setSelectedLabel(final String selectedLabel) {
+            this.selectedLabel = selectedLabel;
+            return this;
+        }
+
+        public Builder<T> setAvailableLabel(final String availableLabel) {
+            this.availableLabel = availableLabel;
+            return this;
+        }
+
+        public Builder<T> setRenderer(final IChoiceRenderer<T> renderer) {
+            this.renderer = renderer;
+            return this;
+        }
+
+        public AjaxPalettePanel<T> build(
+                final String id, final IModel<List<T>> model, final ListModel<T> choices) {
+            return new AjaxPalettePanel<>(id, model,
+                    choices, renderer, allowOrder, allowMoveAll, availableLabel, selectedLabel);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/NonI18nPalette.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/NonI18nPalette.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/NonI18nPalette.java
index 3a923d5..b705f59 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/NonI18nPalette.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/NonI18nPalette.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.client.console.wicket.markup.html.form;
 
 import java.util.Collection;
+import org.apache.wicket.Component;
 import org.apache.wicket.extensions.markup.html.form.palette.Palette;
 import org.apache.wicket.markup.html.form.IChoiceRenderer;
 import org.apache.wicket.model.IModel;
@@ -40,4 +41,14 @@ public class NonI18nPalette<T> extends Palette<T> {
     protected boolean localizeDisplayValues() {
         return false;
     }
+
+    @Override
+    protected Component newAvailableHeader(final String componentId) {
+        return super.newAvailableHeader(componentId);
+    }
+
+    @Override
+    protected Component newSelectedHeader(final String componentId) {
+        return super.newSelectedHeader(componentId);
+    }   
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java
index e63a70e..6e612b6 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java
@@ -61,16 +61,17 @@ public class AuxClasses extends WizardStep {
                     ? UserTO.class.cast(entityTO).getMemberships()
                     : AnyObjectTO.class.cast(entityTO).getMemberships();
 
-            fragment.add(new AjaxPalettePanel<>(
-                    "groups",
-                    new ListModel<String>(CollectionUtils.collect(memberships,
+            fragment.add(new AjaxPalettePanel.Builder<String>().setAllowOrder(true)
+                    .build(
+                            "groups",
+                            new ListModel<String>(CollectionUtils.collect(memberships,
                                     new Transformer<MembershipTO, String>() {
 
-                                        @Override
-                                        public String transform(final MembershipTO input) {
-                                            return String.format("[%d] %s", input.getRightKey(), input.getGroupName());
-                                        }
-                                    }, new ArrayList<String>())) {
+                                @Override
+                                public String transform(final MembershipTO input) {
+                                    return String.format("[%d] %s", input.getRightKey(), input.getGroupName());
+                                }
+                            }, new ArrayList<String>())) {
 
                         private static final long serialVersionUID = 1L;
 
@@ -94,38 +95,37 @@ public class AuxClasses extends WizardStep {
                                     }
 
                                     return new MembershipTO.Builder().left(entityTO.getType(), entityTO.getKey()).
-                                    group(groupKey, groupName).build();
+                                            group(groupKey, groupName).build();
                                 }
                             }, memberships);
                         }
                     },
-                    new ListModel<>(CollectionUtils.collect(groupRestClient.list(
-                                            entityTO.getRealm(), -1, -1, new SortParam<>("name", true), null),
+                            new ListModel<>(CollectionUtils.collect(groupRestClient.list(
+                                    entityTO.getRealm(), -1, -1, new SortParam<>("name", true), null),
                                     new Transformer<GroupTO, String>() {
 
-                                        @Override
-                                        public String transform(final GroupTO input) {
-                                            return String.format("[%d] %s", input.getKey(), input.getName());
-                                        }
-                                    }, new ArrayList<String>())),
-                    true).setOutputMarkupId(true));
+                                @Override
+                                public String transform(final GroupTO input) {
+                                    return String.format("[%d] %s", input.getKey(), input.getName());
+                                }
+                            }, new ArrayList<String>()))).setOutputMarkupId(true));
         }
         add(fragment);
 
         final List<String> current = Arrays.asList(anyTypeClass);
 
-        final List<String> choices = new ArrayList<String>();
+        final List<String> choices = new ArrayList<>();
         for (AnyTypeClassTO aux : AnyTypeRestClient.getAllAnyTypeClass()) {
             if (!current.contains(aux.getKey())) {
                 choices.add(aux.getKey());
             }
         }
 
-        add(new AjaxPalettePanel<>(
-                "auxClasses",
-                new PropertyModel<List<String>>(entityTO, "auxClasses"),
-                new ListModel<>(choices),
-                true).setOutputMarkupId(true));
+        add(new AjaxPalettePanel.Builder<String>().
+                setAllowOrder(true)
+                .build("auxClasses",
+                        new PropertyModel<List<String>>(entityTO, "auxClasses"),
+                        new ListModel<>(choices)).setOutputMarkupId(true));
 
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Resources.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Resources.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Resources.java
index 8f9a362..86ad35f 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Resources.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Resources.java
@@ -37,30 +37,29 @@ public class Resources extends WizardStep {
     public <T extends AnyTO> Resources(final T entityTO) {
         this.setOutputMarkupId(true);
 
-        add(new AjaxPalettePanel<>("resources",
+        add(new AjaxPalettePanel.Builder<String>().build("resources",
                 new PropertyModel<List<String>>(entityTO, "resources") {
 
-                    private static final long serialVersionUID = 1L;
+            private static final long serialVersionUID = 1L;
 
-                    @Override
-                    public List<String> getObject() {
-                        return new ArrayList<>(entityTO.getResources());
-                    }
+            @Override
+            public List<String> getObject() {
+                return new ArrayList<>(entityTO.getResources());
+            }
+
+            @Override
+            public void setObject(final List<String> object) {
+                entityTO.getResources().clear();
+                entityTO.getResources().addAll(object);
+            }
+        }, new ListModel<>(CollectionUtils.collect(
+                        ResourceRestClient.getAll(),
+                        new Transformer<ResourceTO, String>() {
 
                     @Override
-                    public void setObject(final List<String> object) {
-                        entityTO.getResources().clear();
-                        entityTO.getResources().addAll(object);
+                    public String transform(final ResourceTO input) {
+                        return input.getKey();
                     }
-                },
-                new ListModel<>(CollectionUtils.collect(
-                                ResourceRestClient.getAll(),
-                                new Transformer<ResourceTO, String>() {
-
-                                    @Override
-                                    public String transform(final ResourceTO input) {
-                                        return input.getKey();
-                                    }
-                                }, new ArrayList<String>()))).setOutputMarkupId(true));
+                }, new ArrayList<String>()))).setOutputMarkupId(true));
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Roles.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Roles.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Roles.java
index 179783a..e5f500b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Roles.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Roles.java
@@ -38,16 +38,17 @@ public class Roles extends WizardStep {
     public <T extends AnyTO> Roles(final UserTO entityTO) {
         this.setOutputMarkupId(true);
 
-        add(new AjaxPalettePanel<>("roles",
-                new PropertyModel<List<String>>(entityTO, "roles"),
-                new ListModel<>(CollectionUtils.collect(
+        add(new AjaxPalettePanel.Builder<String>()
+                .build("roles",
+                        new PropertyModel<List<String>>(entityTO, "roles"),
+                        new ListModel<>(CollectionUtils.collect(
                                 RoleRestClient.getAll(),
                                 new Transformer<RoleTO, String>() {
 
-                                    @Override
-                                    public String transform(final RoleTO input) {
-                                        return input.getKey();
-                                    }
-                                }, new ArrayList<String>()))).setOutputMarkupId(true));
+                            @Override
+                            public String transform(final RoleTO input) {
+                                return input.getKey();
+                            }
+                        }, new ArrayList<String>()))).setOutputMarkupId(true));
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html b/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html
index 755a846..243ee5f 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html
@@ -116,7 +116,7 @@ under the License.
                 <li wicket:id="workflowLI"><a href="#" wicket:id="workflow"><i class="fa fa-circle-o"></i>Workflow</a></li>
                 <li><a href="#"><i class="fa fa-circle-o"></i>Logs</a></li>
                 <li><a href="#"><i class="fa fa-circle-o"></i>Layouts</a></li>
-                <li wicket:id="schemasLI"><a href="#" wicket:id="schemas"><i class="fa fa-circle-o"></i><wicket:message key="types"/></a></li>
+                <li wicket:id="typesLI"><a href="#" wicket:id="types"><i class="fa fa-circle-o"></i><wicket:message key="types"/></a></li>
                 <li><a href="#"><i class="fa fa-circle-o"></i>Notifications</a></li>
               </ul>
             </li>

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/resources/org/apache/syncope/client/console/pages/Schemas.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Schemas.html b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Schemas.html
deleted file mode 100644
index d16dd64..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Schemas.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!DOCTYPE html>
-<!--
-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.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:extend>
-    <div class="wrapper">
-      <div class="admin-content-page" wicket:id="content">
-        <div class="box box-solid box-primary">
-          <div class="box-header with-border">
-            <h3 class="box-title">
-              <span wicket:id="header"></span>
-            </h3>
-            <div class="box-tools pull-right">
-              <ul class="nav navbar-nav actions">
-                <li>
-                  <a wicket:message="title:createAnyTypeClass"><!--                  <a wicket:id="createAnyTypeClassLink">-->
-                    <i class="glyphicon glyphicon-duplicate"></i>
-                  </a>                  
-                </li>
-                <li>
-                  <a wicket:message="title:createSchema" wicket:id="createSchemaLink">
-                    <i class="glyphicon glyphicon-list-alt"></i>
-                  </a>                  
-                </li>
-              </ul>
-            </div>
-          </div>
-          <div class="box-body">
-            <div class="realms">
-              <div wicket:id="tabbedPanel"></div>
-            </div>
-          </div>
-        </div>
-      </div>
-    </div>
-      <div wicket:id="modal"></div>
-  </wicket:extend>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/resources/org/apache/syncope/client/console/pages/Schemas.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Schemas.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Schemas.properties
deleted file mode 100644
index 9defe37..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Schemas.properties
+++ /dev/null
@@ -1,18 +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.
-createSchema=Create new schema
-createAnyTypeClass=Create new AnyTypeClass

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/resources/org/apache/syncope/client/console/pages/Schemas_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Schemas_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Schemas_it.properties
deleted file mode 100644
index e9994ec..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Schemas_it.properties
+++ /dev/null
@@ -1,18 +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.
-createSchema=Crea un nuovo schema
-createAnyTypeClass=Crea un nuovo AnyTypeClass

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/resources/org/apache/syncope/client/console/pages/Schemas_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Schemas_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Schemas_pt_BR.properties
deleted file mode 100644
index 1d42eb5..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Schemas_pt_BR.properties
+++ /dev/null
@@ -1,18 +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.
-createSchema=Cria um novo schema 
-createAnyTypeClass=Cria um novo AnyTypeClass

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/resources/org/apache/syncope/client/console/pages/Types.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Types.html b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Types.html
new file mode 100644
index 0000000..3dc2364
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Types.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<!--
+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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:extend>
+    <div class="wrapper">
+      <div class="admin-content-page" wicket:id="content">
+        <div class="box box-solid box-primary">
+          <div class="box-header with-border">
+            <h3 class="box-title">
+              <span wicket:id="header"></span>
+            </h3>
+            <div class="box-tools pull-right">
+              <ul class="nav navbar-nav actions">
+                <li>
+                  <a wicket:message="title:createAnyTypeClass" wicket:id="createAnyTypeClass">
+                    <i class="glyphicon glyphicon-duplicate"></i>
+                  </a>                  
+                </li>
+                <li>
+                  <a wicket:message="title:createSchema" wicket:id="createSchema">
+                    <i class="glyphicon glyphicon-list-alt"></i>
+                  </a>                  
+                </li>
+              </ul>
+            </div>
+          </div>
+          <div class="box-body">
+            <div class="realms">
+              <div wicket:id="tabbedPanel"></div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div wicket:id="schemaModal"></div>
+    <div wicket:id="anyTypeClassModal"></div>
+    <div wicket:id="anyTypeModal"></div>
+  </wicket:extend>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/resources/org/apache/syncope/client/console/pages/Types.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Types.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Types.properties
new file mode 100644
index 0000000..9defe37
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Types.properties
@@ -0,0 +1,18 @@
+# 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.
+createSchema=Create new schema
+createAnyTypeClass=Create new AnyTypeClass

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/resources/org/apache/syncope/client/console/pages/Types_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Types_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Types_it.properties
new file mode 100644
index 0000000..e9994ec
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Types_it.properties
@@ -0,0 +1,18 @@
+# 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.
+createSchema=Crea un nuovo schema
+createAnyTypeClass=Crea un nuovo AnyTypeClass

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/resources/org/apache/syncope/client/console/pages/Types_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Types_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Types_pt_BR.properties
new file mode 100644
index 0000000..1d42eb5
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Types_pt_BR.properties
@@ -0,0 +1,18 @@
+# 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.
+createSchema=Cria um novo schema 
+createAnyTypeClass=Cria um novo AnyTypeClass

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassDetails.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassDetails.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassDetails.html
new file mode 100644
index 0000000..cfa9d7e
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassDetails.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<!--
+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.
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:panel>
+    <span wicket:id="container">
+      <div class="box">
+        <div class="box-header with-border">
+          <h3 class="box-title"><wicket:message key="plainSchemas"/></h3>
+        </div>
+        <div class="box-body">
+          <div id="group-forum">
+            <span wicket:id="plainSchemas">[plainSchemas]</span>
+          </div>
+        </div>
+      </div>
+      <div class="box">
+        <div class="box-header with-border">
+          <h3 class="box-title"><wicket:message key="derSchemas"/></h3>
+        </div>
+        <div class="box-body">
+          <div id="group-forum">
+            <span wicket:id="derSchemas">[derSchemas]</span>
+          </div>
+        </div>
+      </div>
+      <div class="box">
+        <div class="box-header with-border">
+          <h3 class="box-title"><wicket:message key="virSchemas"/></h3>
+        </div>
+        <div class="box-body">
+          <div id="group-forum">
+            <span wicket:id="virSchemas">[virSchemas]</span>
+          </div>
+        </div>
+      </div>
+    </span>
+  </wicket:panel>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassDetails.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassDetails.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassDetails.properties
new file mode 100644
index 0000000..835d123
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassDetails.properties
@@ -0,0 +1,20 @@
+# 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.
+
+plainSchemas=Plain Schemas
+derSchemas=Derived Schemas
+virSchemas=Virtual Schemas

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassDetails_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassDetails_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassDetails_it.properties
new file mode 100644
index 0000000..835d123
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassDetails_it.properties
@@ -0,0 +1,20 @@
+# 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.
+
+plainSchemas=Plain Schemas
+derSchemas=Derived Schemas
+virSchemas=Virtual Schemas

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassDetails_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassDetails_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassDetails_pt_BR.properties
new file mode 100644
index 0000000..835d123
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassDetails_pt_BR.properties
@@ -0,0 +1,20 @@
+# 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.
+
+plainSchemas=Plain Schemas
+derSchemas=Derived Schemas
+virSchemas=Virtual Schemas

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassModalPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassModalPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassModalPanel.html
new file mode 100644
index 0000000..ea82eb3
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassModalPanel.html
@@ -0,0 +1,32 @@
+<!--
+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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:panel>
+    <div class="form-group">
+      <form wicket:id="form">
+        <div class="form-group">
+          <span wicket:id="key">[key]</span>
+        </div>
+        <div class="form-group">
+          <span wicket:id="details">[details]</span>
+        </div>
+      </form>
+    </div>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.html
new file mode 100644
index 0000000..0fec0c7
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<!--
+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.
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://xmlns.jcp.org/jsf/composite">
+  <body>
+    <wicket:panel>
+      <span wicket:id="container">
+        <div class="col-md-4">
+          <div class="box">
+            <div class="box-header with-border">
+              <h3 class="box-title"><wicket:message key="anyTypeClasses"/></h3>
+            </div>
+            <div class="box-body">
+              <div class="row">
+                <div class="col-md-8">
+                  <div class="form-group">
+                    <label><wicket:message key="select"/></label>
+                    <select wicket:id="anyTypeClasses" class="form-control"></select>
+                  </div>
+                </div>
+                <div class="col-md-1" style="padding-top: 20px">
+                  <div class="form-group">
+                    <div id="actionButtons" style="padding-top: 5px;">
+                      <span  wicket:id="editRemove"/>
+                    </div>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="col-md-8" style="float:right">
+          <span wicket:id="anyTypeClassesDetails">[anyTypeClassesDetails]</span>
+        </div>
+      </span>
+    </wicket:panel>
+  </body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.properties
new file mode 100644
index 0000000..6438ab9
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.properties
@@ -0,0 +1,19 @@
+# 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.
+select=Select
+
+anyTypeClasses=AnyTypeClasses

http://git-wip-us.apache.org/repos/asf/syncope/blob/e6e2a471/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassesPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassesPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassesPanel_it.properties
new file mode 100644
index 0000000..8b1b519
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeClassesPanel_it.properties
@@ -0,0 +1,19 @@
+# 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.
+select=Seleziona
+
+anyTypeClasses=AnyTypeClasses