Repository: syncope
Updated Branches:
  refs/heads/SYNCOPE-156 [created] 518f7bef2


http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeMenuItem.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeMenuItem.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeMenuItem.java
new file mode 100644
index 0000000..b6b2c9b
--- /dev/null
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeMenuItem.java
@@ -0,0 +1,43 @@
+/*
+ * 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.wicket.AttributeModifier;
+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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class AnyTypeMenuItem extends Panel {
+
+    private static final long serialVersionUID = -1100228004207271270L;
+
+    protected static final Logger LOG = 
LoggerFactory.getLogger(AnyTypeMenuItem.class);
+
+    public AnyTypeMenuItem(final String label, final String href) {
+        super("anytype-menuitem");
+
+        WebMarkupContainer myLink = new WebMarkupContainer("tabLink");
+        myLink.add(new AttributeModifier("href", "#" + href));
+        myLink.add(new Label("tabLabel", label));
+        add(myLink);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupSearchResultPanel.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupSearchResultPanel.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupSearchResultPanel.java
new file mode 100644
index 0000000..83e442b
--- /dev/null
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupSearchResultPanel.java
@@ -0,0 +1,234 @@
+/*
+ * 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.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.pages.GroupDisplayAttributesModalPage;
+import org.apache.syncope.client.console.rest.AbstractAnyRestClient;
+import org.apache.syncope.client.console.rest.GroupRestClient;
+import 
org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
+import 
org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.AttrColumn;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
+import 
org.apache.syncope.client.console.wicket.markup.html.form.ActionLink.ActionType;
+import 
org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
+import org.apache.syncope.common.lib.SyncopeClientException;
+import org.apache.syncope.common.lib.to.AnyTO;
+import org.apache.syncope.common.lib.to.AnyTypeClassTO;
+import org.apache.syncope.common.lib.to.GroupTO;
+import org.apache.syncope.common.lib.types.SchemaType;
+import org.apache.wicket.Page;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
+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.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.ResourceModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.util.ReflectionUtils;
+
+public class GroupSearchResultPanel extends AnySearchResultPanel {
+
+    private static final long serialVersionUID = -1100228004207271270L;
+
+    protected static final Logger LOG = 
LoggerFactory.getLogger(GroupSearchResultPanel.class);
+
+    private final String entitlement = "GROUP_READ";
+
+    public GroupSearchResultPanel(final String type, final String parentId, 
final String markupId,
+            final boolean filtered, final String fiql, final PageReference 
callerRef,
+            final AbstractAnyRestClient restClient, final List<AnyTypeClassTO> 
anyTypeClassTOs, final String realm) {
+
+        super(type, parentId, markupId, filtered, fiql, callerRef, restClient, 
anyTypeClassTOs, realm);
+    }
+
+    @Override
+    protected List<IColumn<AnyTO, String>> getColumns() {
+
+        final List<IColumn<AnyTO, String>> columns =
+                new ArrayList<IColumn<AnyTO, String>>();
+
+        for (String name : prefMan.getList(getRequest(), 
Constants.PREF_GROUP_DETAILS_VIEW)) {
+            final Field field = ReflectionUtils.findField(GroupTO.class, name);
+
+            if ("token".equalsIgnoreCase(name)) {
+                columns.add(new PropertyColumn<AnyTO, String>(new 
ResourceModel(name, name), name, name));
+            } else if (field != null && field.getType().equals(Date.class)) {
+                columns.add(new PropertyColumn<AnyTO, String>(new 
ResourceModel(name, name), name, name));
+            } else {
+                columns.add(
+                        new PropertyColumn<AnyTO, String>(new 
ResourceModel(name, name), name, name));
+            }
+        }
+        
+        for (String name : prefMan.getList(getRequest(), 
Constants.PREF_GROUP_ATTRIBUTES_VIEW)) {
+            if (schemaNames.contains(name)) {
+                columns.add(new AttrColumn(name, SchemaType.PLAIN));
+            }
+        }
+
+        for (String name : prefMan.getList(getRequest(), 
Constants.PREF_GROUP_DERIVED_ATTRIBUTES_VIEW)) {
+            if (dSchemaNames.contains(name)) {
+                columns.add(new AttrColumn(name, SchemaType.DERIVED));
+            }
+        }
+
+        // Add defaults in case of no selection
+        if (columns.isEmpty()) {
+            for (String name : 
GroupDisplayAttributesModalPage.GROUP_DEFAULT_SELECTION) {
+                columns.add(
+                        new PropertyColumn<AnyTO, String>(new 
ResourceModel(name, name), name, name));
+            }
+
+            prefMan.setList(getRequest(), getResponse(), 
Constants.PREF_GROUP_DETAILS_VIEW,
+                    
Arrays.asList(GroupDisplayAttributesModalPage.GROUP_DEFAULT_SELECTION));
+        }
+
+        columns.add(new ActionColumn<AnyTO, String>(new 
ResourceModel("actions", "")) {
+
+            private static final long serialVersionUID = -3503023501954863131L;
+
+            @Override
+            public ActionLinksPanel getActions(final String componentId, final 
IModel<AnyTO> model) {
+
+                final ActionLinksPanel panel = new 
ActionLinksPanel(componentId, model, page.getPageReference());
+
+                panel.add(new ActionLink() {
+
+                    private static final long serialVersionUID = 
-7978723352517770644L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target) {
+                        editmodal.setPageCreator(new ModalWindow.PageCreator() 
{
+
+                            private static final long serialVersionUID = 
-7834632442532690940L;
+
+                            @Override
+                            public Page createPage() {
+                                // SYNCOPE-294: re-read groupTO before edit
+                                GroupTO groupTO = ((GroupRestClient) 
restClient).read(model.getObject().getKey());
+                                return null;
+                            }
+                        });
+
+                        editmodal.show(target);
+                    }
+                }, ActionLink.ActionType.EDIT, entitlement);
+
+                panel.add(new ActionLink() {
+
+                    private static final long serialVersionUID = 
-7978723352517770644L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target) {
+                        try {
+                            final GroupTO groupTO = (GroupTO) restClient.
+                                    delete(model.getObject().getETagValue(), 
model.getObject().getKey());
+
+                            page.setModalResult(true);
+
+                            editmodal.setPageCreator(new 
ModalWindow.PageCreator() {
+
+                                private static final long serialVersionUID = 
-7834632442532690940L;
+
+                                @Override
+                                public Page createPage() {
+                                    return null;
+                                }
+                            });
+
+                            editmodal.show(target);
+                        } catch (SyncopeClientException scce) {
+                            error(getString(Constants.OPERATION_ERROR) + ": " 
+ scce.getMessage());
+                            feedbackPanel.refresh(target);
+                        }
+                    }
+                }, ActionLink.ActionType.DELETE, entitlement);
+
+                return panel;
+            }
+
+            @Override
+            public ActionLinksPanel getHeader(final String componentId) {
+                final ActionLinksPanel panel = new 
ActionLinksPanel(componentId, new Model(), page.getPageReference());
+
+                panel.add(new ActionLink() {
+
+                    private static final long serialVersionUID = 
-7978723352517770644L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target) {
+                        displaymodal.setPageCreator(new 
ModalWindow.PageCreator() {
+
+                            private static final long serialVersionUID = 
-7834632442532690940L;
+
+                            @Override
+                            public Page createPage() {
+                                return new GroupDisplayAttributesModalPage(
+                                        page.getPageReference(), displaymodal, 
schemaNames, dSchemaNames);
+                            }
+                        });
+
+                        displaymodal.show(target);
+                    }
+                }, ActionLink.ActionType.CHANGE_VIEW, entitlement);
+
+                panel.add(new ActionLink() {
+
+                    private static final long serialVersionUID = 
-7978723352517770644L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target) {
+                        if (target != null) {
+                            target.add(container);
+                        }
+                    }
+                }, ActionLink.ActionType.RELOAD, entitlement);
+
+                return panel;
+            }
+        });
+
+        return columns;
+    }
+
+    @Override
+    protected <T extends AnyTO> Collection<ActionLink.ActionType> 
getBulkActions() {
+        final List<ActionType> bulkActions = new ArrayList<ActionType>();
+
+        bulkActions.add(ActionType.DELETE);
+        bulkActions.add(ActionType.SUSPEND);
+        bulkActions.add(ActionType.REACTIVATE);
+
+        return bulkActions;
+    }
+
+    @Override
+    protected String getPageId() {
+        return pageID;
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java
index f31c87c..a35fc09 100644
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java
@@ -18,8 +18,22 @@
  */
 package org.apache.syncope.client.console.panels;
 
+import static org.apache.syncope.common.lib.types.AnyTypeKind.USER;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.syncope.client.console.rest.AnyObjectRestClient;
+import org.apache.syncope.client.console.rest.AnyTypeRestClient;
+import org.apache.syncope.client.console.rest.GroupRestClient;
+import org.apache.syncope.client.console.rest.UserRestClient;
+import org.apache.syncope.common.lib.to.AnyTypeTO;
 import org.apache.syncope.common.lib.to.RealmTO;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.spring.injection.annot.SpringBean;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -31,19 +45,85 @@ public class Realm extends Panel {
 
     private final RealmTO realmTO;
 
-    public Realm(final String id, final RealmTO realmTO) {
+    private static Integer MARKUP_ID = 0;
+
+    @SpringBean
+    private AnyTypeRestClient anyTypeRestClient;
+
+    @SpringBean
+    private UserRestClient userRestClient;
+
+    @SpringBean
+    private GroupRestClient groupRestClient;
+
+    @SpringBean
+    private AnyObjectRestClient anyObjectRestClient;
+
+    public Realm(final String id, final RealmTO realmTO, final PageReference 
pageReference) {
         super(id);
         this.realmTO = realmTO;
 
-        add(new RealmDetails("details", realmTO));
-        add(new Any("users"));
-        add(new Any("groups"));
-        add(new Any("services"));
-        add(new Any("serviceRoles"));
-        add(new Any("contexts"));
-        add(new Any("enactmentEngine"));
-        add(new AccountPolicy("accountPolicy"));
-        add(new PasswordPolicy("passwordPolicy"));
+        List<AnyTypeMenuItem> anyMenu = new ArrayList<>();
+        List<AnySearchResultPanel> anyList = new ArrayList<>();
+
+        for (AnyTypeTO anyTypeTO : anyTypeRestClient.list()) {
+            anyMenu.add(new AnyTypeMenuItem(anyTypeTO.getKey(), 
MARKUP_ID.toString()));
+
+            switch (anyTypeTO.getKind()) {
+                case USER:
+                    anyList.add(
+                            new UserSearchResultPanel(anyTypeTO.getKey(), 
"anytype-contentitem", MARKUP_ID.toString(),
+                                    false, null, pageReference, 
userRestClient, anyTypeRestClient.getAnyTypeClass(
+                                            anyTypeTO.getClasses()), 
realmTO.getFullPath()));
+                    break;
+                case GROUP:
+                    anyList.add(
+                            new GroupSearchResultPanel(anyTypeTO.getKey(), 
"anytype-contentitem", MARKUP_ID.toString(),
+                                    false, null, pageReference, 
groupRestClient, anyTypeRestClient.getAnyTypeClass(
+                                            anyTypeTO.getClasses()), 
realmTO.getFullPath()));
+                    break;
+                case ANY_OBJECT:
+                    anyList.add(
+                            new AnySearchResultPanel(anyTypeTO.getKey(), 
"anytype-contentitem", MARKUP_ID.toString(),
+                                    false, null, pageReference, 
anyObjectRestClient, anyTypeRestClient.getAnyTypeClass(
+                                            anyTypeTO.getClasses()), 
realmTO.getFullPath()));
+                    break;
+                default:
+            }
+            MARKUP_ID++;
+        }
+
+        ListView<AnyTypeMenuItem> menuListView = new 
ListView<AnyTypeMenuItem>("anytype-menu", anyMenu) {
+
+            private static final long serialVersionUID = 4949588177564901031L;
+
+            @Override
+            protected void populateItem(final ListItem<AnyTypeMenuItem> item) {
+                item.add(item.getModelObject());
+                if (item.getIndex() == 0) {
+                    item.add(new AttributeModifier("class", "active"));
+                }
+            }
+        };
+        add(menuListView);
+
+        add(new ListView<AnySearchResultPanel>("anytype-content", anyList) {
+
+            private static final long serialVersionUID = 4949588177564901031L;
+
+            @Override
+            protected void populateItem(final ListItem<AnySearchResultPanel> 
item) {
+                item.setMarkupId(item.getModelObject().getCustomMarkupId());
+                item.add(item.getModelObject());
+                if (item.getIndex() == 0) {
+                    item.add(new AttributeModifier("class", "tab-pane 
active"));
+                }
+            }
+        });
+    }
+
+    public RealmTO getRealmTO() {
+        return realmTO;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java
index 391dba2..8797d13 100644
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java
@@ -33,9 +33,10 @@ public class RealmDetails extends Panel {
 
     public RealmDetails(final String id, final RealmTO realmTO) {
         super(id);
-        add(new TextField<>("id", new PropertyModel<>(realmTO, 
"key")).setEnabled(false));
-        add(new TextField<>("name", new PropertyModel<>(realmTO, 
"name")).setEnabled(false));
-        add(new TextField<>("path", new PropertyModel<>(realmTO, 
"fullPath")).setEnabled(false));
+        add(new TextField<>("name", new PropertyModel<>(realmTO, "name")));
+        add(new TextField<>("path", new PropertyModel<>(realmTO, "fullPath")));
+        add(new TextField<>("accountPolicy", new PropertyModel<>(realmTO, 
"accountPolicy")));
+        add(new TextField<>("passwordPolicy", new PropertyModel<>(realmTO, 
"passwordPolicy")));
     }
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/java/org/apache/syncope/client/console/panels/UserSearchResultPanel.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/panels/UserSearchResultPanel.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/panels/UserSearchResultPanel.java
new file mode 100644
index 0000000..8c78785
--- /dev/null
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/panels/UserSearchResultPanel.java
@@ -0,0 +1,277 @@
+/*
+ * 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.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.pages.StatusModalPage;
+import org.apache.syncope.client.console.pages.UserDisplayAttributesModalPage;
+import org.apache.syncope.client.console.rest.AbstractAnyRestClient;
+import org.apache.syncope.client.console.rest.UserRestClient;
+import 
org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
+import 
org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.AttrColumn;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
+import 
org.apache.syncope.client.console.wicket.markup.html.form.ActionLink.ActionType;
+import 
org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
+import org.apache.syncope.common.lib.SyncopeClientException;
+import org.apache.syncope.common.lib.to.AnyTO;
+import org.apache.syncope.common.lib.to.AnyTypeClassTO;
+import org.apache.syncope.common.lib.to.UserTO;
+import org.apache.syncope.common.lib.types.SchemaType;
+import org.apache.wicket.Page;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
+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.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.ResourceModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.util.ReflectionUtils;
+
+public class UserSearchResultPanel extends AnySearchResultPanel {
+
+    private static final long serialVersionUID = -1100228004207271270L;
+
+    protected static final Logger LOG = 
LoggerFactory.getLogger(UserSearchResultPanel.class);
+
+    private final String entitlement = "USER_LIST";
+
+    public UserSearchResultPanel(final String type, final String parentId, 
final String markupId,
+            final boolean filtered, final String fiql, final PageReference 
callerRef,
+            final AbstractAnyRestClient restClient, final List<AnyTypeClassTO> 
anyTypeClassTOs, final String realm) {
+
+        super(type, parentId, markupId, filtered, fiql, callerRef, restClient, 
anyTypeClassTOs, realm);
+    }
+
+    @Override
+    protected List<IColumn<AnyTO, String>> getColumns() {
+
+        final List<IColumn<AnyTO, String>> columns =
+                new ArrayList<IColumn<AnyTO, String>>();
+
+        for (String name : prefMan.getList(getRequest(), 
Constants.PREF_USERS_DETAILS_VIEW)) {
+            final Field field = ReflectionUtils.findField(UserTO.class, name);
+
+            if ("token".equalsIgnoreCase(name)) {
+                columns.add(new PropertyColumn<AnyTO, String>(new 
ResourceModel(name, name), name, name));
+            } else if (field != null && field.getType().equals(Date.class)) {
+                columns.add(new PropertyColumn<AnyTO, String>(new 
ResourceModel(name, name), name, name));
+            } else {
+                columns.add(
+                        new PropertyColumn<AnyTO, String>(new 
ResourceModel(name, name), name, name));
+            }
+        }
+
+        for (String name : prefMan.getList(getRequest(), 
Constants.PREF_USERS_ATTRIBUTES_VIEW)) {
+            if (schemaNames.contains(name)) {
+                columns.add(new AttrColumn(name, SchemaType.PLAIN));           
     
+            }
+        }
+
+        for (String name : prefMan.getList(getRequest(), 
Constants.PREF_USERS_DERIVED_ATTRIBUTES_VIEW)) {
+            if (dSchemaNames.contains(name)) {
+                columns.add(new AttrColumn(name, SchemaType.DERIVED));
+            }
+        }
+
+        // Add defaults in case of no selection
+        if (columns.isEmpty()) {
+            for (String name : 
UserDisplayAttributesModalPage.USER_DEFAULT_SELECTION) {
+                columns.add(
+                        new PropertyColumn<AnyTO, String>(new 
ResourceModel(name, name), name, name));
+            }
+
+            prefMan.setList(getRequest(), getResponse(), 
Constants.PREF_USERS_DETAILS_VIEW,
+                    
Arrays.asList(UserDisplayAttributesModalPage.USER_DEFAULT_SELECTION));
+        }
+
+        columns.add(new ActionColumn<AnyTO, String>(new 
ResourceModel("actions", "")) {
+
+            private static final long serialVersionUID = -3503023501954863131L;
+
+            @Override
+            public ActionLinksPanel getActions(final String componentId, final 
IModel<AnyTO> model) {
+
+                final ActionLinksPanel panel = new 
ActionLinksPanel(componentId, model, page.getPageReference());
+
+                panel.add(new ActionLink() {
+
+                    private static final long serialVersionUID = 
-7978723352517770644L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target) {
+                        statusmodal.setPageCreator(new 
ModalWindow.PageCreator() {
+
+                            private static final long serialVersionUID = 
-7834632442532690940L;
+
+                            @Override
+                            public Page createPage() {
+                                return new StatusModalPage<UserTO>(
+                                        page.getPageReference(), statusmodal, 
(UserTO) model.getObject());
+                            }
+                        });
+
+                        statusmodal.show(target);
+                    }
+                }, ActionLink.ActionType.MANAGE_RESOURCES, entitlement);
+
+                panel.add(new ActionLink() {
+
+                    private static final long serialVersionUID = 
-7978723352517770644L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target) {
+                        statusmodal.setPageCreator(new 
ModalWindow.PageCreator() {
+
+                            private static final long serialVersionUID = 
-7834632442532690940L;
+
+                            @Override
+                            public Page createPage() {
+                                return new StatusModalPage<UserTO>(
+                                        page.getPageReference(), statusmodal, 
(UserTO) model.getObject(), true);
+                            }
+                        });
+
+                        statusmodal.show(target);
+                    }
+                }, ActionLink.ActionType.ENABLE, entitlement);
+
+                panel.add(new ActionLink() {
+
+                    private static final long serialVersionUID = 
-7978723352517770644L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target) {
+                        editmodal.setPageCreator(new ModalWindow.PageCreator() 
{
+
+                            private static final long serialVersionUID = 
-7834632442532690940L;
+
+                            @Override
+                            public Page createPage() {
+                                // SYNCOPE-294: re-read userTO before edit
+                                UserTO userTO = ((UserRestClient) 
restClient).read(model.getObject().getKey());
+                                return null;
+                            }
+                        });
+
+                        editmodal.show(target);
+                    }
+                }, ActionLink.ActionType.EDIT, entitlement);
+
+                panel.add(new ActionLink() {
+
+                    private static final long serialVersionUID = 
-7978723352517770644L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target) {
+                        try {
+                            final UserTO userTO = (UserTO) restClient.
+                                    delete(model.getObject().getETagValue(), 
model.getObject().getKey());
+
+                            page.setModalResult(true);
+
+                            editmodal.setPageCreator(new 
ModalWindow.PageCreator() {
+
+                                private static final long serialVersionUID = 
-7834632442532690940L;
+
+                                @Override
+                                public Page createPage() {
+                                    return null;
+                                }
+                            });
+
+                            editmodal.show(target);
+                        } catch (SyncopeClientException scce) {
+                            error(getString(Constants.OPERATION_ERROR) + ": " 
+ scce.getMessage());
+                            feedbackPanel.refresh(target);
+                        }
+                    }
+                }, ActionLink.ActionType.DELETE, entitlement);
+
+                return panel;
+            }
+
+            @Override
+            public ActionLinksPanel getHeader(final String componentId) {
+                final ActionLinksPanel panel = new 
ActionLinksPanel(componentId, new Model(), page.getPageReference());
+
+                panel.add(new ActionLink() {
+
+                    private static final long serialVersionUID = 
-7978723352517770644L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target) {
+                        displaymodal.setPageCreator(new 
ModalWindow.PageCreator() {
+
+                            private static final long serialVersionUID = 
-7834632442532690940L;
+
+                            @Override
+                            public Page createPage() {
+                                return new UserDisplayAttributesModalPage(
+                                        page.getPageReference(), displaymodal, 
schemaNames, dSchemaNames);
+                            }
+                        });
+
+                        displaymodal.show(target);
+                    }
+                }, ActionLink.ActionType.CHANGE_VIEW, entitlement);
+
+                panel.add(new ActionLink() {
+
+                    private static final long serialVersionUID = 
-7978723352517770644L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target) {
+                        if (target != null) {
+                            target.add(container);
+                        }
+                    }
+                }, ActionLink.ActionType.RELOAD, entitlement);
+
+                return panel;
+            }
+        });
+
+        return columns;
+    }
+
+    @Override
+    protected <T extends AnyTO> Collection<ActionLink.ActionType> 
getBulkActions() {
+        final List<ActionType> bulkActions = new ArrayList<ActionType>();
+
+        bulkActions.add(ActionType.DELETE);
+        bulkActions.add(ActionType.SUSPEND);
+        bulkActions.add(ActionType.REACTIVATE);
+
+        return bulkActions;
+    }
+
+    @Override
+    protected String getPageId() {
+        return pageID;
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
index b9a316d..d4debf0 100644
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
@@ -32,12 +32,12 @@ public abstract class AbstractAnyRestClient extends 
BaseRestClient {
     public abstract int count(String realm);
 
     public abstract List<? extends AnyTO> list(
-            String realm, int page, int size, final SortParam<String> sort);
+            String realm, int page, int size, final SortParam<String> sort, 
final String type);
 
-    public abstract int searchCount(String realm, String fiql);
+    public abstract int searchCount(String realm, String fiql, final String 
type);
 
     public abstract List<? extends AnyTO> search(
-            String realm, String fiql, int page, int size, final 
SortParam<String> sort);
+            String realm, String fiql, int page, int size, final 
SortParam<String> sort, final String type);
 
     public abstract ConnObjectTO readConnObject(String resourceName, Long key);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
new file mode 100644
index 0000000..3fd98bd
--- /dev/null
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
@@ -0,0 +1,96 @@
+/*
+ * 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.rest;
+
+import java.util.List;
+import org.apache.syncope.client.lib.SyncopeClient;
+import org.apache.syncope.common.lib.SyncopeClientException;
+import org.apache.syncope.common.lib.to.AnyObjectTO;
+import org.apache.syncope.common.lib.to.AnyTO;
+import org.apache.syncope.common.lib.to.BulkAction;
+import org.apache.syncope.common.lib.to.BulkActionResult;
+import org.apache.syncope.common.lib.to.ConnObjectTO;
+import org.apache.syncope.common.lib.to.PagedResult;
+import org.apache.syncope.common.rest.api.service.AnyObjectService;
+import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
+import org.springframework.stereotype.Component;
+
+/**
+ * Console client for invoking Rest any type class services.
+ */
+@Component
+public class AnyObjectRestClient extends AbstractAnyRestClient {
+
+    private static final long serialVersionUID = -8874495991295283249L;
+
+    @Override
+    public int count(final String realm) {
+        return 
getService(AnyObjectService.class).list(SyncopeClient.getAnyListQueryBuilder().realm(realm).page(1).size(
+                1).build()).getTotalCount();
+    }
+
+    @Override
+    public List<? extends AnyTO> list(final String realm, final int page, 
final int size, final SortParam<String> sort,
+            final String type) {
+        return list(type, realm).getResult();
+    }
+
+    public PagedResult<AnyObjectTO> list(final String type, final String 
realm) {
+        return getService(AnyObjectService.class).
+                list(type, 
SyncopeClient.getAnyListQueryBuilder().realm(realm).build());
+    }
+
+    @Override
+    public int searchCount(final String realm, final String fiql, final String 
type) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public List<? extends AnyTO> search(final String realm, final String fiql, 
final int page, final int size,
+            final SortParam<String> sort,
+            final String type) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public ConnObjectTO readConnObject(final String resourceName, final Long 
key) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public AnyObjectTO read(final Long id) {
+        AnyObjectTO anyObjectTO = null;
+        try {
+            anyObjectTO = getService(AnyObjectService.class).read(id);
+        } catch (SyncopeClientException e) {
+            LOG.error("While reading any object", e);
+        }
+        return anyObjectTO;
+    }
+
+    @Override
+    public AnyTO delete(final String etag, final Long key) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public BulkActionResult bulkAction(final BulkAction action) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeRestClient.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeRestClient.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeRestClient.java
new file mode 100644
index 0000000..cce0bef
--- /dev/null
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeRestClient.java
@@ -0,0 +1,49 @@
+/*
+ * 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.rest;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.syncope.common.lib.to.AnyTypeClassTO;
+import org.apache.syncope.common.lib.to.AnyTypeTO;
+import org.apache.syncope.common.rest.api.service.AnyTypeClassService;
+import org.apache.syncope.common.rest.api.service.AnyTypeService;
+import org.springframework.stereotype.Component;
+
+/**
+ * Console client for invoking Rest any type class services.
+ */
+@Component
+public class AnyTypeRestClient extends BaseRestClient {
+
+    private static final long serialVersionUID = -8874495991295283249L;
+
+    public List<AnyTypeTO> list() {
+        return getService(AnyTypeService.class).list();
+    }
+
+    public List<AnyTypeClassTO> getAnyTypeClass(final List<String> 
anyTypeClassNames) {
+        List<AnyTypeClassTO> anyTypeClassTOs = new ArrayList<AnyTypeClassTO>();
+        for (String anyTypeClass : anyTypeClassNames) {
+            
anyTypeClassTOs.add(getService(AnyTypeClassService.class).read(anyTypeClass));
+        }
+        return anyTypeClassTOs;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
index 512e08f..659eeb4 100644
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
@@ -56,7 +56,8 @@ public class GroupRestClient extends AbstractAnyRestClient {
     }
 
     @Override
-    public List<GroupTO> list(final String realm, final int page, final int 
size, final SortParam<String> sort) {
+    public List<GroupTO> list(final String realm, final int page, final int 
size, final SortParam<String> sort,
+            final String type) {
         return getService(GroupService.class).
                 
list(SyncopeClient.getAnyListQueryBuilder().realm(realm).page(page).size(size).
                         orderBy(toOrderBy(sort)).details(false).build()).
@@ -64,7 +65,7 @@ public class GroupRestClient extends AbstractAnyRestClient {
     }
 
     @Override
-    public int searchCount(final String realm, final String fiql) {
+    public int searchCount(final String realm, final String fiql, final String 
type) {
         return getService(GroupService.class).
                 
search(SyncopeClient.getAnySearchQueryBuilder().realm(realm).fiql(fiql).page(1).size(1).build()).
                 getTotalCount();
@@ -72,7 +73,8 @@ public class GroupRestClient extends AbstractAnyRestClient {
 
     @Override
     public List<GroupTO> search(
-            final String realm, final String fiql, final int page, final int 
size, final SortParam<String> sort) {
+            final String realm, final String fiql, final int page, final int 
size, final SortParam<String> sort,
+            final String type) {
 
         return getService(GroupService.class).
                 
search(SyncopeClient.getAnySearchQueryBuilder().realm(realm).fiql(fiql).page(page).size(size).

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/java/org/apache/syncope/client/console/rest/RealmRestClient.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/rest/RealmRestClient.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/rest/RealmRestClient.java
index 06cba4d..5dfe69a 100644
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/rest/RealmRestClient.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/rest/RealmRestClient.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.client.console.rest;
 
 import java.util.List;
-
 import org.apache.syncope.common.lib.to.RealmTO;
 import org.apache.syncope.common.rest.api.service.RealmService;
 import org.springframework.stereotype.Component;
@@ -35,4 +34,8 @@ public class RealmRestClient extends BaseRestClient {
     public List<RealmTO> list() {
         return getService(RealmService.class).list();
     }
+
+    public void create(final String parentPath, final RealmTO realmTO) {
+        getService(RealmService.class).create(parentPath, realmTO);         
+    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
index 338851d..142a2db 100644
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
@@ -57,7 +57,8 @@ public class UserRestClient extends AbstractAnyRestClient {
     }
 
     @Override
-    public List<UserTO> list(final String realm, final int page, final int 
size, final SortParam<String> sort) {
+    public List<UserTO> list(final String realm, final int page, final int 
size, final SortParam<String> sort,
+            final String type) {
         return getService(UserService.class).
                 
list(SyncopeClient.getAnyListQueryBuilder().realm(realm).page(page).size(size).
                         orderBy(toOrderBy(sort)).details(false).build()).
@@ -101,7 +102,7 @@ public class UserRestClient extends AbstractAnyRestClient {
     }
 
     @Override
-    public int searchCount(final String realm, final String fiql) {
+    public int searchCount(final String realm, final String fiql, final String 
type) {
         return getService(UserService.class).
                 
search(SyncopeClient.getAnySearchQueryBuilder().realm(realm).fiql(fiql).page(1).size(1).build()).
                 getTotalCount();
@@ -109,7 +110,8 @@ public class UserRestClient extends AbstractAnyRestClient {
 
     @Override
     public List<UserTO> search(
-            final String realm, final String fiql, final int page, final int 
size, final SortParam<String> sort) {
+            final String realm, final String fiql, final int page, final int 
size, final SortParam<String> sort,
+            final String type) {
 
         return getService(UserService.class).
                 
search(SyncopeClient.getAnySearchQueryBuilder().realm(realm).fiql(fiql).page(page).size(size).

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/ActionColumn.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/ActionColumn.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/ActionColumn.java
new file mode 100644
index 0000000..b9dfa62
--- /dev/null
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/ActionColumn.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package 
org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table;
+
+import 
org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
+import org.apache.wicket.Component;
+import 
org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
+import 
org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.model.IModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class ActionColumn<T, S> extends AbstractColumn<T, S> {
+
+    private static final long serialVersionUID = 7955560320949560725L;
+
+    /**
+     * Logger.
+     */
+    protected static final Logger LOG = 
LoggerFactory.getLogger(ActionColumn.class);
+
+    public ActionColumn(final IModel<String> displayModel) {
+        super(displayModel);
+    }
+
+    @Override
+    public String getCssClass() {
+        return "action";
+    }
+
+    @Override
+    public Component getHeader(final String componentId) {
+        return super.getHeader(componentId);
+    }
+
+    @Override
+    public void populateItem(final Item<ICellPopulator<T>> item, final String 
componentId, final IModel<T> rowModel) {
+        item.add(getActions(componentId, rowModel));
+    }
+
+    public abstract ActionLinksPanel getActions(final String componentId, 
final IModel<T> rowModel);
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AttrColumn.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AttrColumn.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AttrColumn.java
new file mode 100644
index 0000000..029a523
--- /dev/null
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AttrColumn.java
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package 
org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table;
+
+import java.util.List;
+import org.apache.syncope.common.lib.types.SchemaType;
+import 
org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
+import 
org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.ResourceModel;
+import org.apache.syncope.common.lib.to.AnyTO;
+
+public class AttrColumn extends AbstractColumn<AnyTO, String> {
+
+    private static final long serialVersionUID = 2624734332447371372L;
+
+    private final String name;
+
+    private final SchemaType schemaType;
+
+    public AttrColumn(final String name, final SchemaType schemaType) {
+        // set sortProperty to schematype#name (e.g. derivedSchema#cn, 
+        // for use with SortableUserProviderComparator.AttrModel#getObject)
+        super(new ResourceModel(name, name), schemaType.name() + "#" + name);
+        this.name = name;
+        this.schemaType = schemaType;
+    }
+
+    @Override
+    public void populateItem(final Item<ICellPopulator<AnyTO>> cellItem, final 
String componentId,
+            final IModel<AnyTO> rowModel) {
+        List<String> values = null;
+
+        switch (schemaType) {
+            case PLAIN:
+                if (rowModel.getObject().getPlainAttrMap().containsKey(name)) {
+                    values = 
rowModel.getObject().getPlainAttrMap().get(name).getValues();
+                }
+                break;
+
+            case VIRTUAL:
+                if (rowModel.getObject().getVirAttrMap().containsKey(name)) {
+                    values = 
rowModel.getObject().getVirAttrMap().get(name).getValues();
+                }
+                break;
+
+            case DERIVED:
+                if (rowModel.getObject().getDerAttrMap().containsKey(name)) {
+                    values = 
rowModel.getObject().getDerAttrMap().get(name).getValues();
+                }
+                break;
+
+            default:
+        }
+
+        if (values == null || values.isEmpty()) {
+            cellItem.add(new Label(componentId, ""));
+        } else {
+            if (values.size() == 1) {
+                cellItem.add(new Label(componentId, values.get(0)));
+            } else {
+                cellItem.add(new Label(componentId, values.toString()));
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/resources/META-INF/resources/css/AdminLTE.css
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/resources/META-INF/resources/css/AdminLTE.css 
b/client/console/src/main/resources/META-INF/resources/css/AdminLTE.css
index 147a648..2587b84 100644
--- a/client/console/src/main/resources/META-INF/resources/css/AdminLTE.css
+++ b/client/console/src/main/resources/META-INF/resources/css/AdminLTE.css
@@ -4360,3 +4360,7 @@ fieldset[disabled] .btn-vk.active {
     white-space: normal!important;
   }
 }
+
+i{
+  margin-right: 5px;
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css 
b/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
index 1b8e565..3cfd680 100644
--- 
a/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
+++ 
b/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
@@ -17,129 +17,129 @@
  * under the License.
  */
 .feedbackPanel {
-    padding-left: 0px;
-    text-align: center;
+  padding-left: 0px;
+  text-align: center;
 }
 
 .notificationpanel_row {  
-    list-style-type: none;
+  list-style-type: none;
 }  
 
 .notificationpanel_row span {  
-    border:0 none;
+  border:0 none;
 }    
 pre {
-    white-space: -moz-pre-wrap; /* Mozilla, supported since 1999 */
-    white-space: -pre-wrap; /* Opera */
-    white-space: -o-pre-wrap; /* Opera */
-    white-space: pre-wrap; /* CSS3 - Text module (Candidate Recommendation) 
http://www.w3.org/TR/css3-text/#white-space */
-    word-wrap: break-word; /* IE 5.5+ */
+  white-space: -moz-pre-wrap; /* Mozilla, supported since 1999 */
+  white-space: -pre-wrap; /* Opera */
+  white-space: -o-pre-wrap; /* Opera */
+  white-space: pre-wrap; /* CSS3 - Text module (Candidate Recommendation) 
http://www.w3.org/TR/css3-text/#white-space */
+  word-wrap: break-word; /* IE 5.5+ */
 }
 
 #veil {
-    display:none;
-    position:absolute;
-    top:0;
-    left:0;
-    z-index:99999;
-    background-color:black;
-    width:100%;
-    height:20000px;
-    color:white;
-    opacity:0.3;
-    filter:alpha(opacity=30);
+  display:none;
+  position:absolute;
+  top:0;
+  left:0;
+  z-index:99999;
+  background-color:black;
+  width:100%;
+  height:20000px;
+  color:white;
+  opacity:0.3;
+  filter:alpha(opacity=30);
 }
 
 #veil img {
-    position:absolute;
-    top:300px;
-    left:50%;
-    margin-left:-75px;
-    width:150px;
+  position:absolute;
+  top:300px;
+  left:50%;
+  margin-left:-75px;
+  width:150px;
 }
 
 .block-sidebar {
-    max-height: 100%; 
-    overflow: auto; 
-    padding-top: 90px; 
-    padding-bottom: 50px; 
-    position: fixed;
+  max-height: 100%; 
+  overflow: auto; 
+  padding-top: 90px; 
+  padding-bottom: 50px; 
+  position: fixed;
 }
 
 .inner-control-sidebar {
-    position: fixed; 
-    height: auto;
+  position: fixed; 
+  height: auto;
 }
 
 .content-margin-layout {
-    margin: 0px 230px 0px 0px !important;
-    padding: 20px !important;
+  margin: 0px 230px 0px 0px !important;
+  padding: 20px !important;
 }
 
 .admin-content-page {
-    padding: 20px;
-    background: #ecf0f5
+  padding: 20px;
+  background: #ecf0f5
 }
 
 .realms {
-    min-height: 554px
+  min-height: 554px
 }
 
 .actions > li > a {
-    padding-top: 5px !important;
-    padding-bottom: 5px !important;
+  padding-top: 5px !important;
+  padding-bottom: 5px !important;
 }
 
 .block-header {
-    position: fixed;
-    width: 100%;
-    top: 0;
+  position: fixed;
+  width: 100%;
+  top: 0;
 }
 
 .block-footer {
-    position: fixed;
-    width: 100%;
-    bottom: 0px;
+  position: fixed;
+  width: 100%;
+  bottom: 0px;
 }
 
 .logo-pos {
-    padding-top: 4px !important;
-    overflow: visible !important;
+  padding-top: 4px !important;
+  overflow: visible !important;
 }
 
 .angle {
-    border: medium none !important;
-    cursor: pointer;
-    display: inline-table !important;
-    float: right;
-    height: 30px;
-    overflow: hidden;
-    position: relative !important;
-    right: 0;
-    top: -30px;
-    width: 25%;
-    z-index: 3;
+  border: medium none !important;
+  cursor: pointer;
+  display: inline-table !important;
+  float: right;
+  height: 30px;
+  overflow: hidden;
+  position: relative !important;
+  right: 0;
+  top: -30px;
+  width: 25%;
+  z-index: 3;
 }
 
 @media (min-width: 768px) {
-    .main-header .logo {
-       height: 54px;
-    }
+  .main-header .logo {
+    height: 54px;
+  }
 }
 
 .w_caption h3 {
-    font-size: 16px;
+  font-size: 16px;
 }
 
 div.wicket-modal div.w_content_3 {
-    border: 1px solid #eee;
-    border-radius: 20px;
-    padding: 5px;
+  border: 1px solid #eee;
+  border-radius: 20px;
+  padding: 5px;
 }
 
 .tab-content {
-    margin-bottom: 10px;
-    margin-top: 10px;
+  margin-bottom: 10px;
+  margin-top: 10px;
 }
 
 a.help {

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/resources/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.html
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/resources/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.html
 
b/client/console/src/main/resources/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.html
new file mode 100644
index 0000000..c48612f
--- /dev/null
+++ 
b/client/console/src/main/resources/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.html
@@ -0,0 +1,118 @@
+<!--
+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:head>
+    <style>
+      div.group{
+        width:450px;
+      }
+
+      div.group div{
+        width:150;
+        height: 25px;
+        float:left;
+      }
+
+      div.group div input {
+        width: 30px;
+      }
+
+      div#attributes-view {
+        display:  block;
+        clear:  both;
+        float: none;
+        overflow: auto;
+        margin-top: 0px;
+        margin-bottom: 20px;
+        margin-left: 10px;
+        margin-right: 10px;
+      }
+
+      .submit{
+        display:  block;
+        clear:  both;
+        float: none;
+        margin-left: 10px;
+      }
+
+      span.grouplabel{
+        display:block;
+        clear: both;
+        margin-left: 10px;
+        margin-bottom: 10px;
+        font-weight: bold;
+      }
+    </style>
+  </wicket:head>
+  <wicket:extend>
+    <form wicket:id="form">
+      <div id="attributes-view">
+        <p class="ui-widget ui-corner-all ui-widget-header">
+          <wicket:message key="title"/>
+        </p>
+
+        <span class="grouplabel"><wicket:message key="plainSchemas"/></span>
+        <span wicket:id="dCheckGroup">
+          <div class="group">
+            <div wicket:id="details">
+              <input type="checkbox" wicket:id="dcheck"/>
+              <span wicket:id="dname">[schema name]</span>
+            </div>
+          </div>
+        </span>
+
+        <span wicket:id="plainSchemas">[schemas]</span>
+
+        <span wicket:id="dschemas">[derived schemas]</span>
+
+      </div>
+
+      <wicket:fragment wicket:id="sfragment">
+        <span wicket:id="psCheckGroup">
+          <div class="group">
+            <div wicket:id="plainSchemas">
+              <input type="checkbox" wicket:id="scheck"/>
+              <span wicket:id="sname">[schema name]</span>
+            </div>
+          </div>
+        </span>
+      </wicket:fragment>
+
+      <wicket:fragment wicket:id="dsfragment">
+        <span class="grouplabel"><wicket:message key="derSchemas"/></span>
+        <span wicket:id="dsCheckGroup">
+          <div class="group">
+            <div wicket:id="derSchemas">
+              <input type="checkbox" wicket:id="dscheck"/>
+              <span wicket:id="dsname">[schema name]</span>
+            </div>
+          </div>
+        </span>
+      </wicket:fragment>
+
+      <wicket:fragment wicket:id="emptyFragment">
+      </wicket:fragment>
+
+      <div class="submit">
+        <input type="submit" class="ui-button ui-widget ui-state-default 
ui-corner-all ui-button-text-only" wicket:id="submit"/>
+        <input type="button" class="ui-button ui-widget ui-state-default 
ui-corner-all ui-button-text-only" wicket:id="cancel"/>
+      </div>
+    </form>
+  </wicket:extend>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/resources/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.properties
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/resources/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.properties
 
b/client/console/src/main/resources/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.properties
new file mode 100644
index 0000000..2b5c573
--- /dev/null
+++ 
b/client/console/src/main/resources/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.properties
@@ -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.
+title=Change display attributes
+tooManySelections=Too many columns to be shown
+plainSchemas=Plain attributes
+derSchemas=Derived attributes
+
+firstname=Firstname
+surname=Surname
+userId=User Id
+edit=Edit
+delete=Delete
+status=Status
+token=Token
+username=Username
+creationDate=Creation Date
+tokenValued=Valued
+tokenNotValued=Not valued

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/resources/org/apache/syncope/client/console/pages/RealmModalPage.html
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/resources/org/apache/syncope/client/console/pages/RealmModalPage.html
 
b/client/console/src/main/resources/org/apache/syncope/client/console/pages/RealmModalPage.html
new file mode 100644
index 0000000..e655aa1
--- /dev/null
+++ 
b/client/console/src/main/resources/org/apache/syncope/client/console/pages/RealmModalPage.html
@@ -0,0 +1,70 @@
+<!--
+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";>
+  <head>
+    <title></title>
+
+    <link href="webjars/bootstrap/${bootstrap.version}/css/bootstrap.min.css" 
rel="stylesheet" type="text/css" />
+    <link 
href="webjars/bootstrap-select/${bootstrap-select.version}/dist/css/bootstrap-select.min.css"
 rel="stylesheet" type="text/css" />
+    <link 
href="webjars/font-awesome/${font-awesome.version}/css/font-awesome.min.css" 
rel="stylesheet" type="text/css" />
+    <link href="webjars/ionicons/${ionicons.version}/css/ionicons.min.css" 
rel="stylesheet" type="text/css" />
+    <link href="css/AdminLTE.css" rel="stylesheet" type="text/css" />
+    <link href="css/AdminLTE_skins/skin-green.css" rel="stylesheet" 
type="text/css" />
+    <link href="css/syncopeConsole.css" rel="stylesheet" type="text/css" />
+    <link href="css/fieldstyle.css" rel="stylesheet" type="text/css" />
+
+    <script type="text/javascript" 
src="webjars/jquery-ui/${jquery-ui.version}/jquery-ui.min.js"></script>
+    <script type="text/javascript" 
src="webjars/bootstrap/${bootstrap.version}/js/bootstrap.min.js"></script>
+    <script type="text/javascript" 
src="webjars/bootstrap-select/${bootstrap-select.version}/dist/js/bootstrap-select.min.js"></script>
+    <script type="text/javascript" src="js/AdminLTE-app.min.js"></script>
+
+    <script type="text/javascript">
+      var notificationShownTimes = 0;
+
+      function showNotification(componentId, messagecount) {
+        notificationShownTimes++;
+        timeout = 1700 + (messagecount * 500) + notificationShownTimes * 200;
+        $('div#' + componentId).fadeTo('normal', 1.0);
+        setTimeout("$('div#" + componentId + "').fadeOut('normal')", timeout);
+      }
+    </script>
+
+    <style type="text/css">
+      table.palette td.header {
+        background:url("images/ui-bg_glass_75_e6e6e6_1x400.png")
+          repeat-x scroll 50% 50% #E6E6E6 !important;
+      }
+    </style>
+  </head>
+  <body onload="setTimeout('window.focus();', 0);">
+    <div wicket:id="feedback"/>
+    <form data-example-id="simple-input-groups" class="bs-example 
bs-example-form" wicket:id="RealmForm">
+      <wicket:container wicket:id="details"/>
+      <wicket:child />
+      <div style="margin: 20px 10px 0">
+        <input type="submit"
+               class="ui-button ui-widget ui-state-default ui-corner-all 
ui-button-text-only"
+               wicket:id="apply"/>
+        <input type="button"
+               class="ui-button ui-widget ui-state-default ui-corner-all 
ui-button-text-only"
+               wicket:id="cancel"/>
+      </div>
+    </form>
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/resources/org/apache/syncope/client/console/pages/Realms.html
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Realms.html
 
b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Realms.html
index 8a998cc..7eaf56d 100644
--- 
a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Realms.html
+++ 
b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Realms.html
@@ -30,10 +30,19 @@ under the License.
             </h3>
             <div class="box-tools pull-right">
               <ul class="nav navbar-nav actions">
-                <li><a href="#"><i class="fa fa-plus"></i></a></li>
+                <li>
+                  <a href="#" wicket:id="createLink">
+                    <i class="fa fa-plus"></i>
+                  </a>                  
+                </li>
                 <li><a href="#"><i class="fa fa-minus"></i></a></li>
-                <li><a href="#"><i class="fa fa-pencil-square-o"></i></a></li>
+                <li>
+                  <a href="#" wicket:id="edit">
+                    <i class="fa fa-pencil-square-o"></i>
+                  </a>                  
+                </li>
               </ul>
+              <div wicket:id="editModal" ></div>
             </div><!-- /.box-tools -->
           </div><!-- /.box-header -->
           <div class="box-body">

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/resources/org/apache/syncope/client/console/panels/AjaxDataTablePanel.html
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AjaxDataTablePanel.html
 
b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AjaxDataTablePanel.html
index f67ba10..86b6359 100644
--- 
a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AjaxDataTablePanel.html
+++ 
b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AjaxDataTablePanel.html
@@ -33,7 +33,7 @@ under the License.
       <div class="bulkAction">
         <div class="bulkActionCell" style="width: 40px">
           <a href="#" wicket:id="bulkActionLink">
-            <img src="img/actions/bulk.png" alt="bulk action icon"  
title="Bulk action"/>
+            <i class="fa fa-gear" alt="bulk action icon"  title="Bulk 
action"></i>
           </a>
         </div>
       </div>

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/resources/org/apache/syncope/client/console/panels/Any.html
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/resources/org/apache/syncope/client/console/panels/Any.html
 
b/client/console/src/main/resources/org/apache/syncope/client/console/panels/Any.html
deleted file mode 100644
index 84340b5..0000000
--- 
a/client/console/src/main/resources/org/apache/syncope/client/console/panels/Any.html
+++ /dev/null
@@ -1,29 +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.
--->
-<!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>
-      <h1>ANY</h1>
-    </wicket:panel>
-  </body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeMenuItem.html
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeMenuItem.html
 
b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeMenuItem.html
new file mode 100644
index 0000000..9d9ed0e
--- /dev/null
+++ 
b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyTypeMenuItem.html
@@ -0,0 +1,29 @@
+<!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>
+      <a data-toggle="tab" wicket:id="tabLink"><span 
wicket:id="tabLabel"></span></a>
+    </wicket:panel>
+  </body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/resources/org/apache/syncope/client/console/panels/Realm.html
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/resources/org/apache/syncope/client/console/panels/Realm.html
 
b/client/console/src/main/resources/org/apache/syncope/client/console/panels/Realm.html
index 29eaae3..a38698a 100644
--- 
a/client/console/src/main/resources/org/apache/syncope/client/console/panels/Realm.html
+++ 
b/client/console/src/main/resources/org/apache/syncope/client/console/panels/Realm.html
@@ -23,68 +23,16 @@ under the License.
 <html xmlns="http://www.w3.org/1999/xhtml"; 
xmlns:wicket="http://xmlns.jcp.org/jsf/composite";>
   <body>
     <wicket:panel>
-      
+
       <div class="tabbable tabs-left">
-        <ul class="nav nav-tabs">
-          <li class="active">
-            <a data-toggle="tab" href="#lA">Details</a>
-          </li>
-          <li>
-            <a data-toggle="tab" href="#lB">Users</a>
-          </li>
-          <li>
-            <a data-toggle="tab" href="#lC">Groups</a>
-          </li>
-          <li class="dropdown">
-            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
-              ANY
-              <b class="caret"></b>
-            </a>
-            <ul class="dropdown-menu">
-              <li><a data-toggle="tab" href="#lB">Users</a></li>
-              <li><a data-toggle="tab" href="#lC">Groups</a></li>
-              <li class="divider"></li>
-              <li class="nav-header">Others</li>
-              <li><a data-toggle="tab" href="#lD">Services</a></li>
-              <li><a data-toggle="tab" href="#lE">Service Roles</a></li>
-              <li><a data-toggle="tab" href="#lF">Enactment Engines</a></li>
-              <li><a data-toggle="tab" href="#lG">Contexts</a></li>
-            </ul>
-          </li>
-          <li>
-            <a data-toggle="tab" href="#lH">Account policy</a>
-          </li>
-          <li>
-            <a data-toggle="tab" href="#lI">Password policy</a>
+        <ul class="nav nav-tabs realm">
+          <li wicket:id="anytype-menu">
+            <wicket:container wicket:id="anytype-menuitem"/>
           </li>
         </ul>
         <div class="tab-content">
-          <div id="lA" class="tab-pane active">
-            <wicket:container wicket:id="details"/>
-          </div>
-          <div id="lB" class="tab-pane">
-            <wicket:container wicket:id="users"/>
-          </div>
-          <div id="lC" class="tab-pane">
-            <wicket:container wicket:id="groups"/>
-          </div>
-          <div id="lD" class="tab-pane">
-            <wicket:container wicket:id="services"/>
-          </div>
-          <div id="lE" class="tab-pane">
-            <wicket:container wicket:id="serviceRoles"/>
-          </div>
-          <div id="lF" class="tab-pane">
-            <wicket:container wicket:id="enactmentEngine"/>
-          </div>
-          <div id="lG" class="tab-pane">
-            <wicket:container wicket:id="contexts"/>
-          </div>
-          <div id="lH" class="tab-pane">
-            <wicket:container wicket:id="accountPolicy"/>
-          </div>
-          <div id="lI" class="tab-pane">
-            <wicket:container wicket:id="passwordPolicy"/>
+          <div class="tab-pane" wicket:id="anytype-content">
+            <wicket:container wicket:id="anytype-contentitem"/>
           </div>
         </div>
       </div>

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/resources/org/apache/syncope/client/console/panels/RealmDetails.html
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/resources/org/apache/syncope/client/console/panels/RealmDetails.html
 
b/client/console/src/main/resources/org/apache/syncope/client/console/panels/RealmDetails.html
index b8c3d27..f75f98d 100644
--- 
a/client/console/src/main/resources/org/apache/syncope/client/console/panels/RealmDetails.html
+++ 
b/client/console/src/main/resources/org/apache/syncope/client/console/panels/RealmDetails.html
@@ -23,23 +23,27 @@ under the License.
 <html xmlns="http://www.w3.org/1999/xhtml"; 
xmlns:wicket="http://xmlns.jcp.org/jsf/composite";>
   <body>
     <wicket:panel>
+      <div class="input-group">
+        <span id="basic-addon1" class="input-group-addon">Name</span>
+        <input type="text" aria-describedby="basic-addon1" placeholder="name" 
class="form-control" wicket:id="name" />
+      </div>
       <br />
-      <form data-example-id="simple-input-groups" class="bs-example 
bs-example-form">
-        <div class="input-group">
-          <span id="basic-addon1" class="input-group-addon">Id</span>
-          <input type="text" aria-describedby="basic-addon1" placeholder="id" 
class="form-control" wicket:id="id" />
-        </div>
-        <br />
-        <div class="input-group">
-          <span id="basic-addon1" class="input-group-addon">Name</span>
-          <input type="text" aria-describedby="basic-addon1" 
placeholder="name" class="form-control" wicket:id="name" />
-        </div>
-        <br />
-        <div class="input-group">
-          <span id="basic-addon1" class="input-group-addon">Path</span>
-          <input type="text" aria-describedby="basic-addon1" 
placeholder="path" class="form-control" wicket:id="path" />
-        </div>
-      </form>
+      <div class="input-group">
+        <span id="basic-addon1" class="input-group-addon">Path</span>
+        <input type="text" aria-describedby="basic-addon1" placeholder="path" 
class="form-control" wicket:id="path" />
+      </div>
+      <br />
+      <div class="input-group">
+        <span id="basic-addon1" class="input-group-addon">Account Policy</span>
+        <input type="text" aria-describedby="basic-addon1" 
placeholder="accountPolicy" class="form-control" 
+               wicket:id="accountPolicy" />
+      </div>
+      <br />
+      <div class="input-group">
+        <span id="basic-addon1" class="input-group-addon">Password 
Policy</span>
+        <input type="text" aria-describedby="basic-addon1" 
placeholder="passwordPolicy" class="form-control" 
+               wicket:id="passwordPolicy" />
+      </div>
     </wicket:panel>
   </body>
 </html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.html
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.html
 
b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.html
index cf51170..312cbba 100644
--- 
a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.html
+++ 
b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.html
@@ -60,7 +60,7 @@ under the License.
     </wicket:fragment>
 
     <wicket:fragment wicket:id="fragmentManageResources">
-      <a href="#" wicket:id="manageResourcesLink"><img id="actionLink" 
src="img/actions/resources-icon.png" alt="manage resources icon" title="Manage 
resources"/></a>
+      <a href="#" wicket:id="manageResourcesLink"><i id="actionLink" class="fa 
fa-sitemap" alt="manage resources icon" title="Manage resources"></i></a>
     </wicket:fragment>
 
     <wicket:fragment wicket:id="fragmentManageUsers">
@@ -80,11 +80,11 @@ under the License.
     </wicket:fragment>
 
     <wicket:fragment wicket:id="fragmentEnable">
-      <a href="#" wicket:id="enableLink"><img id="actionLink" 
src="img/actions/enable.png" alt="enable icon" title="Enable / Disable"/></a>
+      <a href="#" wicket:id="enableLink"><i id="actionLink" class="fa 
fa-toggle-on" alt="enable icon" title="Enable / Disable"></i></a>
     </wicket:fragment>
 
     <wicket:fragment wicket:id="fragmentEdit">
-      <a href="#" wicket:id="editLink"><img id="actionLink" 
src="img/actions/edit.png" alt="edit icon" title="Edit"/></a>
+      <a href="#" wicket:id="editLink"><i id="actionLink" class="fa fa-pencil" 
alt="edit icon" title="Edit"></i></a>
     </wicket:fragment>
 
     <wicket:fragment wicket:id="fragmentReset">
@@ -100,7 +100,7 @@ under the License.
     </wicket:fragment>
 
     <wicket:fragment wicket:id="fragmentDelete">
-      <a href="#" wicket:id="deleteLink"><img id="actionLink" 
src="img/actions/delete.png" alt="delete icon" title="Delete"/></a>
+      <a href="#" wicket:id="deleteLink"><i id="actionLink" class="fa 
fa-remove"  alt="delete icon" title="Delete"></i></a>
     </wicket:fragment>
 
     <wicket:fragment wicket:id="fragmentDryRun">
@@ -128,11 +128,11 @@ under the License.
     </wicket:fragment>
 
     <wicket:fragment wicket:id="fragmentReload">
-      <a href="#" wicket:id="reloadLink"><img id="actionLink" 
src="img/actions/reload.png" alt="reload icon" title="Reload"/></a>
+      <a href="#" wicket:id="reloadLink"><i id="actionLink" class="fa 
fa-repeat" alt="reload icon" title="Reload"></i></a>
     </wicket:fragment>
 
     <wicket:fragment wicket:id="fragmentChangeView">
-      <a href="#" wicket:id="changeViewLink"><img id="actionLink" 
src="img/actions/settings-icon.png" alt="Change view icon" title="Change 
view"/></a>
+      <a href="#" wicket:id="changeViewLink"><i id="actionLink" class="fa 
fa-list" alt="Change view icon" title="Change view"></i></a>
     </wicket:fragment>
 
     <wicket:fragment wicket:id="fragmentUnlink">

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/old_console/src/main/java/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.java
----------------------------------------------------------------------
diff --git 
a/client/old_console/src/main/java/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.java
 
b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.java
index d588a01..f4a6cea 100644
--- 
a/client/old_console/src/main/java/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.java
+++ 
b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.java
@@ -57,7 +57,7 @@ public class DisplayAttributesModalPage extends BaseModalPage 
{
      */
     private static final int MAX_SELECTIONS = 9;
 
-    public static final String[] DEFAULT_SELECTION = { "key", "username", 
"status" };
+        public static final String[] DEFAULT_SELECTION = { "key", "username", 
"status" };
 
     @SpringBean
     private PreferenceManager prefMan;

http://git-wip-us.apache.org/repos/asf/syncope/blob/518f7bef/client/old_console/src/main/java/org/apache/syncope/client/console/pages/EditUserModalPage.java
----------------------------------------------------------------------
diff --git 
a/client/old_console/src/main/java/org/apache/syncope/client/console/pages/EditUserModalPage.java
 
b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/EditUserModalPage.java
index 792f3bd..15119d3 100644
--- 
a/client/old_console/src/main/java/org/apache/syncope/client/console/pages/EditUserModalPage.java
+++ 
b/client/old_console/src/main/java/org/apache/syncope/client/console/pages/EditUserModalPage.java
@@ -98,6 +98,6 @@ public class EditUserModalPage extends UserModalPage {
 
     @Override
     protected void closeAction(final AjaxRequestTarget target, final Form<?> 
form) {
-        setResponsePage(new ResultStatusModalPage.Builder(window, 
userTO).mode(mode).build());
+        setResponsePage(new Realms.Builder(window, userTO).mode(mode).build());
     }
 }

Reply via email to