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/08/28 18:40:44 UTC

[3/4] syncope git commit: Add AdminLTe theme provider, new Modal dialog, new Realms tab

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/client/console/src/main/java/org/apache/syncope/client/console/themes/AdminLTECssResourceReference.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/themes/AdminLTECssResourceReference.java b/client/console/src/main/java/org/apache/syncope/client/console/themes/AdminLTECssResourceReference.java
new file mode 100644
index 0000000..4eacbbd
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/themes/AdminLTECssResourceReference.java
@@ -0,0 +1,48 @@
+/*
+ * 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.themes;
+
+import de.agilecoders.wicket.core.Bootstrap;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.wicket.markup.head.CssHeaderItem;
+import org.apache.wicket.markup.head.HeaderItem;
+import org.apache.wicket.request.resource.CssResourceReference;
+
+public class AdminLTECssResourceReference extends CssResourceReference {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Singleton instance of this reference
+     */
+    public static final AdminLTECssResourceReference INSTANCE = new AdminLTECssResourceReference();
+
+    public AdminLTECssResourceReference() {
+        super(AdminLTECssResourceReference.class, "css/AdminLTE.css");
+    }
+
+    @Override
+    public List<HeaderItem> getDependencies() {
+        final List<HeaderItem> dependencies = new ArrayList<>();
+        dependencies.add(CssHeaderItem.forReference(Bootstrap.getSettings().getCssResourceReference()));
+        dependencies.addAll(super.getDependencies());
+        return dependencies;
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/client/console/src/main/java/org/apache/syncope/client/console/wicket/ajax/markup/html/navigation/paging/AjaxDataNavigationToolbar.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/ajax/markup/html/navigation/paging/AjaxDataNavigationToolbar.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/ajax/markup/html/navigation/paging/AjaxDataNavigationToolbar.java
new file mode 100644
index 0000000..077521b
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/ajax/markup/html/navigation/paging/AjaxDataNavigationToolbar.java
@@ -0,0 +1,52 @@
+/*
+ * 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.ajax.markup.html.navigation.paging;
+
+import de.agilecoders.wicket.core.markup.html.bootstrap.navigation.ajax.BootstrapAjaxPagingNavigator;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxNavigationToolbar;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.navigation.paging.PagingNavigator;
+
+public class AjaxDataNavigationToolbar extends AjaxNavigationToolbar {
+
+    private static final long serialVersionUID = -225570234877133351L;
+
+    private final WebMarkupContainer container;
+    
+    public AjaxDataNavigationToolbar(final DataTable<?, ?> table, final WebMarkupContainer container) {
+        super(table);
+        this.container = container;
+    }
+
+    @Override
+    protected PagingNavigator newPagingNavigator(final String navigatorId, final DataTable<?, ?> table) {
+        return new BootstrapAjaxPagingNavigator(navigatorId, table) {
+
+            private static final long serialVersionUID = -5254490177324296529L;
+
+            @Override
+            protected void onAjaxEvent(final AjaxRequestTarget target) {
+                target.add(table);
+                target.add(container);
+            }
+        };
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AjaxFallbackDataTable.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AjaxFallbackDataTable.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AjaxFallbackDataTable.java
new file mode 100644
index 0000000..53096b2
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AjaxFallbackDataTable.java
@@ -0,0 +1,51 @@
+/*
+ * 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.client.console.wicket.ajax.markup.html.navigation.paging.AjaxDataNavigationToolbar;
+import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackHeadersToolbar;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.NoRecordsToolbar;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.markup.repeater.OddEvenItem;
+import org.apache.wicket.model.IModel;
+
+public class AjaxFallbackDataTable<T, S> extends DataTable<T, S> {
+
+    private static final long serialVersionUID = 6861105496141602937L;
+
+    public AjaxFallbackDataTable(final String id, final List<? extends IColumn<T, S>> columns,
+            final ISortableDataProvider<T, S> dataProvider, final int rowsPerPage, final WebMarkupContainer container) {
+        super(id, columns, dataProvider, rowsPerPage);
+        setOutputMarkupId(true);
+        setVersioned(false);
+        addTopToolbar(new AjaxDataNavigationToolbar(this, container));
+        addTopToolbar(new AjaxFallbackHeadersToolbar<>(this, dataProvider));
+        addBottomToolbar(new NoRecordsToolbar(this));
+    }
+
+    @Override
+    protected Item<T> newRowItem(final String id, final int index, final IModel<T> model) {
+        return new OddEvenItem<>(id, index, model);
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/buttons/DefaultModalCloseButton.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/buttons/DefaultModalCloseButton.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/buttons/DefaultModalCloseButton.java
new file mode 100644
index 0000000..7e1fc1d
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/buttons/DefaultModalCloseButton.java
@@ -0,0 +1,34 @@
+/*
+ * 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.markup.html.bootstrap.buttons;
+
+import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.ModalCloseButton;
+import org.apache.wicket.behavior.AttributeAppender;
+import org.apache.wicket.model.ResourceModel;
+
+public class DefaultModalCloseButton extends ModalCloseButton {
+
+    private static final long serialVersionUID = -1097993976905448580L;
+
+    public DefaultModalCloseButton() {
+        super(new ResourceModel("cancel", "Cancel"));
+
+        add(new AttributeAppender("class", " pull-left"));
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/buttons/PrimaryModalButton.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/buttons/PrimaryModalButton.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/buttons/PrimaryModalButton.java
new file mode 100644
index 0000000..890b9a7
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/buttons/PrimaryModalButton.java
@@ -0,0 +1,35 @@
+/*
+ * 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.markup.html.bootstrap.buttons;
+
+import com.googlecode.wicket.jquery.ui.markup.html.link.AjaxSubmitLink;
+import de.agilecoders.wicket.core.markup.html.bootstrap.button.ButtonBehavior;
+import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
+import org.apache.wicket.markup.html.form.Form;
+
+public class PrimaryModalButton extends AjaxSubmitLink {
+
+    private static final long serialVersionUID = -1097993976905448580L;
+
+    public PrimaryModalButton(final String id, final String name, final Form<?> form) {
+        super(id, form);
+        add(new ButtonBehavior(Buttons.Type.Primary, Buttons.Size.Medium));
+        
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java
new file mode 100644
index 0000000..8591ee2
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java
@@ -0,0 +1,110 @@
+/*
+ * 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.markup.html.bootstrap.dialog;
+
+import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.syncope.client.console.panels.NotificationPanel;
+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow.WindowClosedCallback;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.markup.html.panel.EmptyPanel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class BaseModal<T> extends Modal<T> {
+
+    private static final long serialVersionUID = -6142277554912316095L;
+
+    protected static final Logger LOG = LoggerFactory.getLogger(BaseModal.class);
+
+    private static final String CONTENT = "modalContent";
+    
+    private static final String INPUT = "input";
+
+    protected NotificationPanel feedbackPanel;
+
+    private final List<Component> components;
+
+    private final WebMarkupContainer container;
+
+    private WindowClosedCallback windowClosedCallback;
+
+    public BaseModal(final String id) {
+        super(id);
+        container = new WebMarkupContainer("container");
+        container.add(new EmptyPanel(CONTENT));
+        container.setOutputMarkupId(true);
+        add(container);
+        setUseCloseHandler(true);
+        this.windowClosedCallback = null;
+        components = new ArrayList<>();
+    }
+
+    @Override
+    public MarkupContainer addOrReplace(final Component... component) {
+        return container.addOrReplace(component);
+    }
+
+    public static String getModalContentId() {
+        return CONTENT;
+    }
+
+    public static String getModalInputId() {
+        return INPUT;
+    }
+
+    public BaseModal<T> setWindowClosedCallback(final WindowClosedCallback callback) {
+        windowClosedCallback = callback;
+        return this;
+    }
+
+    @Override
+    protected void onClose(final IPartialPageRequestHandler target) {
+        if (windowClosedCallback != null) {
+            windowClosedCallback.onClose((AjaxRequestTarget) target);
+        }
+    }
+
+    public void addFooterInput(final Component component) {
+        this.components.add(component);
+    }
+
+    @Override
+    protected void onInitialize() {
+        super.onInitialize();
+
+        final WebMarkupContainer footer = (WebMarkupContainer) this.get("dialog:footer");
+        footer.addOrReplace(new ListView<Component>("inputs", components) {
+
+            private static final long serialVersionUID = 4949588177564901031L;
+
+            @Override
+            protected void populateItem(final ListItem<Component> item) {
+                item.add(item.getModelObject());
+            }
+        }.setOutputMarkupId(true));
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxTextFieldPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxTextFieldPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxTextFieldPanel.java
index 2ba29f8..f42b67f 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxTextFieldPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxTextFieldPanel.java
@@ -28,8 +28,9 @@ import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteSettings;
 import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteTextField;
+import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
+import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.validation.IValidator;
 
 public class AjaxTextFieldPanel extends FieldPanel<String> implements Cloneable {
@@ -69,7 +70,8 @@ public class AjaxTextFieldPanel extends FieldPanel<String> implements Cloneable
                 return result.iterator();
             }
         };
-        add(field.setLabel(new Model<>(name)).setOutputMarkupId(true));
+        
+        add(field.setLabel(new ResourceModel(name, name)).setOutputMarkupId(true));
 
         if (enableOnChange && !isReadOnly()) {
             field.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
@@ -82,6 +84,8 @@ public class AjaxTextFieldPanel extends FieldPanel<String> implements Cloneable
                 }
             });
         }
+        
+        add(new Label("label", new ResourceModel(name, name)));
     }
 
     public void addValidator(final IValidator<? super String> validator) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/FieldPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/FieldPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/FieldPanel.java
index e0f2f3e..ed95c4c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/FieldPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/FieldPanel.java
@@ -29,6 +29,7 @@ import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
+import org.apache.wicket.model.ResourceModel;
 
 public abstract class FieldPanel<T> extends AbstractFieldPanel<T> implements Cloneable {
 
@@ -53,6 +54,11 @@ public abstract class FieldPanel<T> extends AbstractFieldPanel<T> implements Clo
         return field;
     }
 
+    public FieldPanel<T> setPlaceholder(final String id) {
+        field.add(new AttributeModifier("placeholder", new ResourceModel(id, id)));
+        return this;
+    }
+
     public FieldPanel<T> setTitle(final String title) {
         this.title = title;
         field.add(AttributeModifier.replace("title", title != null

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/client/console/src/main/resources/META-INF/resources/css/AdminLTE_plugins/dataTables/dataTables.bootstrap.css
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/META-INF/resources/css/AdminLTE_plugins/dataTables/dataTables.bootstrap.css b/client/console/src/main/resources/META-INF/resources/css/AdminLTE_plugins/dataTables/dataTables.bootstrap.css
new file mode 100644
index 0000000..864b68e
--- /dev/null
+++ b/client/console/src/main/resources/META-INF/resources/css/AdminLTE_plugins/dataTables/dataTables.bootstrap.css
@@ -0,0 +1,369 @@
+div.dataTables_length label {
+  font-weight: normal;
+  text-align: left;
+  white-space: nowrap;
+}
+
+div.dataTables_length select {
+  width: 75px;
+  display: inline-block;
+}
+
+div.dataTables_filter {
+  text-align: right;
+}
+
+div.dataTables_filter label {
+  font-weight: normal;
+  white-space: nowrap;
+  text-align: left;
+}
+
+div.dataTables_filter input {
+  margin-left: 0.5em;
+  display: inline-block;
+  width: auto;
+}
+
+div.dataTables_info {
+  padding-top: 8px;
+  white-space: nowrap;
+}
+
+div.dataTables_paginate {
+  margin: 0;
+  white-space: nowrap;
+  text-align: right;
+}
+
+div.dataTables_paginate ul.pagination {
+  margin: 2px 0;
+  white-space: nowrap;
+}
+
+@media screen and (max-width: 767px) {
+  div.dataTables_wrapper > div.row > div,
+  div.dataTables_length,
+  div.dataTables_filter,
+  div.dataTables_info,
+  div.dataTables_paginate {
+    text-align: center;
+  }
+
+  div.DTTT {
+    margin-bottom: 0.5em;
+  }
+}
+
+table.dataTable td,
+table.dataTable th {
+  -webkit-box-sizing: content-box;
+  -moz-box-sizing: content-box;
+  box-sizing: content-box;
+}
+
+table.dataTable {
+  clear: both;
+  margin-top: 6px !important;
+  margin-bottom: 6px !important;
+  max-width: none !important;
+}
+
+table.dataTable thead .sorting,
+table.dataTable thead .sorting_asc,
+table.dataTable thead .sorting_desc,
+table.dataTable thead .sorting_asc_disabled,
+table.dataTable thead .sorting_desc_disabled {
+  cursor: pointer;
+  position: relative;
+}
+
+table.dataTable thead .sorting:after,
+table.dataTable thead .sorting_asc:after,
+table.dataTable thead .sorting_desc:after {
+  position: absolute;
+  top: 8px;
+  right: 8px;
+  display: block;
+  font-family: 'Glyphicons Halflings';
+  opacity: 0.5;
+}
+table.dataTable thead .sorting:after {
+  opacity: 0.2;
+  content: "\e150"; /* sort */
+}
+table.dataTable thead .sorting_asc:after {
+  content: "\e155"; /* sort-by-attributes */
+}
+table.dataTable thead .sorting_desc:after {
+  content: "\e156"; /* sort-by-attributes-alt */
+}
+div.dataTables_scrollBody table.dataTable thead .sorting:after,
+div.dataTables_scrollBody table.dataTable thead .sorting_asc:after,
+div.dataTables_scrollBody table.dataTable thead .sorting_desc:after {
+  display: none;
+}
+
+table.dataTable thead .sorting_asc_disabled:after,
+table.dataTable thead .sorting_desc_disabled:after {
+  color: #eee;
+}
+
+table.dataTable thead > tr > th {
+  padding-right: 30px;
+}
+
+table.dataTable th:active {
+  outline: none;
+}
+
+/* Condensed */
+table.dataTable.table-condensed thead > tr > th {
+  padding-right: 20px;
+}
+
+table.dataTable.table-condensed thead .sorting:after,
+table.dataTable.table-condensed thead .sorting_asc:after,
+table.dataTable.table-condensed thead .sorting_desc:after {
+  top: 6px;
+  right: 6px;
+}
+
+/* Scrolling */
+div.dataTables_scrollHead table {
+  margin-bottom: 0 !important;
+  border-bottom-left-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+div.dataTables_scrollHead table thead tr:last-child th:first-child,
+div.dataTables_scrollHead table thead tr:last-child td:first-child {
+  border-bottom-left-radius: 0 !important;
+  border-bottom-right-radius: 0 !important;
+}
+
+div.dataTables_scrollBody table {
+  border-top: none;
+  margin-top: 0 !important;
+  margin-bottom: 0 !important;
+}
+
+div.dataTables_scrollBody tbody tr:first-child th,
+div.dataTables_scrollBody tbody tr:first-child td {
+  border-top: none;
+}
+
+div.dataTables_scrollFoot table {
+  margin-top: 0 !important;
+  border-top: none;
+}
+
+/* Frustratingly the border-collapse:collapse used by Bootstrap makes the column
+   width calculations when using scrolling impossible to align columns. We have
+   to use separate
+*/
+table.table-bordered.dataTable {
+  border-collapse: separate !important;
+}
+table.table-bordered thead th,
+table.table-bordered thead td {
+  border-left-width: 0;
+  border-top-width: 0;
+}
+table.table-bordered tbody th,
+table.table-bordered tbody td {
+  border-left-width: 0;
+  border-bottom-width: 0;
+}
+table.table-bordered tfoot th,
+table.table-bordered tfoot td {
+  border-left-width: 0;
+  border-bottom-width: 0;
+}
+table.table-bordered th:last-child,
+table.table-bordered td:last-child {
+  border-right-width: 0;
+}
+div.dataTables_scrollHead table.table-bordered {
+  border-bottom-width: 0;
+}
+
+
+
+
+/*
+ * TableTools styles
+ */
+.table.dataTable tbody tr.active td,
+.table.dataTable tbody tr.active th {
+  background-color: #08C;
+  color: white;
+}
+
+.table.dataTable tbody tr.active:hover td,
+.table.dataTable tbody tr.active:hover th {
+  background-color: #0075b0 !important;
+}
+
+.table.dataTable tbody tr.active th > a,
+.table.dataTable tbody tr.active td > a {
+  color: white;
+}
+
+.table-striped.dataTable tbody tr.active:nth-child(odd) td,
+.table-striped.dataTable tbody tr.active:nth-child(odd) th {
+  background-color: #017ebc;
+}
+
+table.DTTT_selectable tbody tr {
+  cursor: pointer;
+}
+
+div.DTTT .btn:hover {
+  text-decoration: none !important;
+}
+
+ul.DTTT_dropdown.dropdown-menu {
+  z-index: 2003;
+}
+
+ul.DTTT_dropdown.dropdown-menu a {
+  color: #333 !important; /* needed only when demo_page.css is included */
+}
+
+ul.DTTT_dropdown.dropdown-menu li {
+  position: relative;
+}
+
+ul.DTTT_dropdown.dropdown-menu li:hover a {
+  background-color: #0088cc;
+  color: white !important;
+}
+
+div.DTTT_collection_background {
+  z-index: 2002;	
+}
+
+/* TableTools information display */
+div.DTTT_print_info {
+  position: fixed;
+  top: 50%;
+  left: 50%;
+  width: 400px;
+  height: 150px;
+  margin-left: -200px;
+  margin-top: -75px;
+  text-align: center;
+  color: #333;
+  padding: 10px 30px;
+  opacity: 0.95;
+
+  background-color: white;
+  border: 1px solid rgba(0, 0, 0, 0.2);
+  border-radius: 6px;
+
+  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5);
+  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5);
+}
+
+div.DTTT_print_info h6 {
+  font-weight: normal;
+  font-size: 28px;
+  line-height: 28px;
+  margin: 1em;
+}
+
+div.DTTT_print_info p {
+  font-size: 14px;
+  line-height: 20px;
+}
+
+div.dataTables_processing {
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  width: 100%;
+  height: 60px;
+  margin-left: -50%;
+  margin-top: -25px;
+  padding-top: 20px;
+  padding-bottom: 20px;
+  text-align: center;
+  font-size: 1.2em;
+  background-color: white;
+  background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));
+  background: -webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);
+  background: -moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);
+  background: -ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);
+  background: -o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);
+  background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);
+}
+
+
+
+/*
+ * FixedColumns styles
+ */
+div.DTFC_LeftHeadWrapper table,
+div.DTFC_LeftFootWrapper table,
+div.DTFC_RightHeadWrapper table,
+div.DTFC_RightFootWrapper table,
+table.DTFC_Cloned tr.even {
+  background-color: white;
+  margin-bottom: 0;
+}
+
+div.DTFC_RightHeadWrapper table ,
+div.DTFC_LeftHeadWrapper table {
+  border-bottom: none !important;
+  margin-bottom: 0 !important;
+  border-top-right-radius: 0 !important;
+  border-bottom-left-radius: 0 !important;
+  border-bottom-right-radius: 0 !important;
+}
+
+div.DTFC_RightHeadWrapper table thead tr:last-child th:first-child,
+div.DTFC_RightHeadWrapper table thead tr:last-child td:first-child,
+div.DTFC_LeftHeadWrapper table thead tr:last-child th:first-child,
+div.DTFC_LeftHeadWrapper table thead tr:last-child td:first-child {
+  border-bottom-left-radius: 0 !important;
+  border-bottom-right-radius: 0 !important;
+}
+
+div.DTFC_RightBodyWrapper table,
+div.DTFC_LeftBodyWrapper table {
+  border-top: none;
+  margin: 0 !important;
+}
+
+div.DTFC_RightBodyWrapper tbody tr:first-child th,
+div.DTFC_RightBodyWrapper tbody tr:first-child td,
+div.DTFC_LeftBodyWrapper tbody tr:first-child th,
+div.DTFC_LeftBodyWrapper tbody tr:first-child td {
+  border-top: none;
+}
+
+div.DTFC_RightFootWrapper table,
+div.DTFC_LeftFootWrapper table {
+  border-top: none;
+  margin-top: 0 !important;
+}
+
+
+div.DTFC_LeftBodyWrapper table.dataTable thead .sorting:after,
+div.DTFC_LeftBodyWrapper table.dataTable thead .sorting_asc:after,
+div.DTFC_LeftBodyWrapper table.dataTable thead .sorting_desc:after,
+div.DTFC_RightBodyWrapper table.dataTable thead .sorting:after,
+div.DTFC_RightBodyWrapper table.dataTable thead .sorting_asc:after,
+div.DTFC_RightBodyWrapper table.dataTable thead .sorting_desc:after {
+  display: none;
+}
+
+
+/*
+ * FixedHeader styles
+ */
+div.FixedHeader_Cloned table {
+  margin: 0 !important
+}
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/client/console/src/main/resources/META-INF/resources/js/AdminLTE-app.min.js
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/META-INF/resources/js/AdminLTE-app.min.js b/client/console/src/main/resources/META-INF/resources/js/AdminLTE-app.min.js
deleted file mode 100644
index e61cc0f..0000000
--- a/client/console/src/main/resources/META-INF/resources/js/AdminLTE-app.min.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*! AdminLTE app.js
- * ================
- * Main JS application file for AdminLTE v2. This file
- * should be included in all pages. It controls some layout
- * options and implements exclusive AdminLTE plugins.
- *
- * @Author  Almsaeed Studio
- * @Support <http://www.almsaeedstudio.com>
- * @Email   <su...@almsaeedstudio.com>
- * @version 2.1.0
- * @license MIT <http://opensource.org/licenses/MIT>
- */
-"use strict";function _init(){$.AdminLTE.layout={activate:function(){var a=this;a.fix(),a.fixSidebar(),$(window,".wrapper").resize(function(){a.fix(),a.fixSidebar()})},fix:function(){var a=$(".main-header").outerHeight()+$(".main-footer").outerHeight(),b=$(window).height(),c=$(".sidebar").height();if($("body").hasClass("fixed"))$(".content-wrapper, .right-side").css("min-height",b-$(".main-footer").outerHeight());else{var d;b>=c?($(".content-wrapper, .right-side").css("min-height",b-a),d=b-a):($(".content-wrapper, .right-side").css("min-height",c),d=c);var e=$($.AdminLTE.options.controlSidebarOptions.selector);"undefined"!=typeof e&&e.height()>d&&$(".content-wrapper, .right-side").css("min-height",e.height())}},fixSidebar:function(){return $("body").hasClass("fixed")?("undefined"==typeof $.fn.slimScroll&&console&&console.error("Error: the fixed layout requires the slimscroll plugin!"),void($.AdminLTE.options.sidebarSlimScroll&&"undefined"!=typeof $.fn.slimScroll&&($(".sidebar").slim
 Scroll({destroy:!0}).height("auto"),$(".sidebar").slimscroll({height:$(window).height()-$(".main-header").height()+"px",color:"rgba(0,0,0,0.2)",size:"3px"})))):void("undefined"!=typeof $.fn.slimScroll&&$(".sidebar").slimScroll({destroy:!0}).height("auto"))}},$.AdminLTE.pushMenu={activate:function(a){var b=$.AdminLTE.options.screenSizes;$(a).on("click",function(a){a.preventDefault(),$(window).width()>b.sm-1?$("body").toggleClass("sidebar-collapse"):$("body").hasClass("sidebar-open")?($("body").removeClass("sidebar-open"),$("body").removeClass("sidebar-collapse")):$("body").addClass("sidebar-open")}),$(".content-wrapper").click(function(){$(window).width()<=b.sm-1&&$("body").hasClass("sidebar-open")&&$("body").removeClass("sidebar-open")}),($.AdminLTE.options.sidebarExpandOnHover||$("body").hasClass("fixed")&&$("body").hasClass("sidebar-mini"))&&this.expandOnHover()},expandOnHover:function(){var a=this,b=$.AdminLTE.options.screenSizes.sm-1;$(".main-sidebar").hover(function(){$("body")
 .hasClass("sidebar-mini")&&$("body").hasClass("sidebar-collapse")&&$(window).width()>b&&a.expand()},function(){$("body").hasClass("sidebar-mini")&&$("body").hasClass("sidebar-expanded-on-hover")&&$(window).width()>b&&a.collapse()})},expand:function(){$("body").removeClass("sidebar-collapse").addClass("sidebar-expanded-on-hover")},collapse:function(){$("body").hasClass("sidebar-expanded-on-hover")&&$("body").removeClass("sidebar-expanded-on-hover").addClass("sidebar-collapse")}},$.AdminLTE.tree=function(a){var b=this;$("li a",$(a)).on("click",function(a){var c=$(this),d=c.next();if(d.is(".treeview-menu")&&d.is(":visible"))d.slideUp("normal",function(){d.removeClass("menu-open")}),d.parent("li").removeClass("active");else if(d.is(".treeview-menu")&&!d.is(":visible")){var e=c.parents("ul").first(),f=e.find("ul:visible").slideUp("normal");f.removeClass("menu-open");var g=c.parent("li");d.slideDown("normal",function(){d.addClass("menu-open"),e.find("li.active").removeClass("active"),g.ad
 dClass("active"),b.layout.fix()})}d.is(".treeview-menu")&&a.preventDefault()})},$.AdminLTE.controlSidebar={activate:function(){var a=this,b=$.AdminLTE.options.controlSidebarOptions,c=$(b.selector),d=$(b.toggleBtnSelector);d.on("click",function(d){d.preventDefault(),c.hasClass("control-sidebar-open")||$("body").hasClass("control-sidebar-open")?a.close(c,b.slide):a.open(c,b.slide)});var e=$(".control-sidebar-bg");a._fix(e),$("body").hasClass("fixed")?a._fixForFixed(c):$(".content-wrapper, .right-side").height()<c.height()&&a._fixForContent(c)},open:function(a,b){b?a.addClass("control-sidebar-open"):$("body").addClass("control-sidebar-open")},close:function(a,b){b?a.removeClass("control-sidebar-open"):$("body").removeClass("control-sidebar-open")},_fix:function(a){var b=this;$("body").hasClass("layout-boxed")?(a.css("position","absolute"),a.height($(".wrapper").height()),$(window).resize(function(){b._fix(a)})):a.css({position:"fixed",height:"auto"})},_fixForFixed:function(a){a.css({po
 sition:"fixed","max-height":"100%",overflow:"auto","padding-bottom":"50px"})},_fixForContent:function(a){$(".content-wrapper, .right-side").css("min-height",a.height())}},$.AdminLTE.boxWidget={selectors:$.AdminLTE.options.boxWidgetOptions.boxWidgetSelectors,icons:$.AdminLTE.options.boxWidgetOptions.boxWidgetIcons,activate:function(){var a=this;$(a.selectors.collapse).on("click",function(b){b.preventDefault(),a.collapse($(this))}),$(a.selectors.remove).on("click",function(b){b.preventDefault(),a.remove($(this))})},collapse:function(a){var b=this,c=a.parents(".box").first(),d=c.find("> .box-body, > .box-footer");c.hasClass("collapsed-box")?(a.children(":first").removeClass(b.icons.open).addClass(b.icons.collapse),d.slideDown(300,function(){c.removeClass("collapsed-box")})):(a.children(":first").removeClass(b.icons.collapse).addClass(b.icons.open),d.slideUp(300,function(){c.addClass("collapsed-box")}))},remove:function(a){var b=a.parents(".box").first();b.slideUp()}}}if("undefined"==ty
 peof jQuery)throw new Error("AdminLTE requires jQuery");$.AdminLTE={},$.AdminLTE.options={navbarMenuSlimscroll:!0,navbarMenuSlimscrollWidth:"3px",navbarMenuHeight:"200px",sidebarToggleSelector:"[data-toggle='offcanvas']",sidebarPushMenu:!0,sidebarSlimScroll:!0,sidebarExpandOnHover:!1,enableBoxRefresh:!0,enableBSToppltip:!0,BSTooltipSelector:"[data-toggle='tooltip']",enableFastclick:!0,enableControlSidebar:!0,controlSidebarOptions:{toggleBtnSelector:"[data-toggle='control-sidebar']",selector:".control-sidebar",slide:!0},enableBoxWidget:!0,boxWidgetOptions:{boxWidgetIcons:{collapse:"fa-minus",open:"fa-plus",remove:"fa-times"},boxWidgetSelectors:{remove:'[data-widget="remove"]',collapse:'[data-widget="collapse"]'}},directChat:{enable:!0,contactToggleSelector:'[data-widget="chat-pane-toggle"]'},colors:{lightBlue:"#3c8dbc",red:"#f56954",green:"#00a65a",aqua:"#00c0ef",yellow:"#f39c12",blue:"#0073b7",navy:"#001F3F",teal:"#39CCCC",olive:"#3D9970",lime:"#01FF70",orange:"#FF851B",fuchsia:"#F0
 12BE",purple:"#8E24AA",maroon:"#D81B60",black:"#222222",gray:"#d2d6de"},screenSizes:{xs:480,sm:768,md:992,lg:1200}},$(function(){"undefined"!=typeof AdminLTEOptions&&$.extend(!0,$.AdminLTE.options,AdminLTEOptions);var a=$.AdminLTE.options;_init(),$.AdminLTE.layout.activate(),$.AdminLTE.tree(".sidebar"),a.enableControlSidebar&&$.AdminLTE.controlSidebar.activate(),a.navbarMenuSlimscroll&&"undefined"!=typeof $.fn.slimscroll&&$(".navbar .menu").slimscroll({height:a.navbarMenuHeight,alwaysVisible:!1,size:a.navbarMenuSlimscrollWidth}).css("width","100%"),a.sidebarPushMenu&&$.AdminLTE.pushMenu.activate(a.sidebarToggleSelector),a.enableBSToppltip&&$("body").tooltip({selector:a.BSTooltipSelector}),a.enableBoxWidget&&$.AdminLTE.boxWidget.activate(),a.enableFastclick&&"undefined"!=typeof FastClick&&FastClick.attach(document.body),a.directChat.enable&&$(a.directChat.contactToggleSelector).on("click",function(){var a=$(this).parents(".direct-chat").first();a.toggleClass("direct-chat-contacts-ope
 n")}),$('.btn-group[data-toggle="btn-toggle"]').each(function(){var a=$(this);$(this).find(".btn").on("click",function(b){a.find(".btn.active").removeClass("active"),$(this).addClass("active"),b.preventDefault()})})}),function(a){a.fn.boxRefresh=function(b){function c(a){a.append(f),e.onLoadStart.call(a)}function d(a){a.find(f).remove(),e.onLoadDone.call(a)}var e=a.extend({trigger:".refresh-btn",source:"",onLoadStart:function(a){},onLoadDone:function(a){}},b),f=a('<div class="overlay"><div class="fa fa-refresh fa-spin"></div></div>');return this.each(function(){if(""===e.source)return void(console&&console.log("Please specify a source first - boxRefresh()"));var b=a(this),f=b.find(e.trigger).first();f.on("click",function(a){a.preventDefault(),c(b),b.find(".box-body").load(e.source,function(){d(b)})})})}}(jQuery),function(a){a.fn.todolist=function(b){var c=a.extend({onCheck:function(a){},onUncheck:function(a){}},b);return this.each(function(){"undefined"!=typeof a.fn.iCheck?(a("input
 ",this).on("ifChecked",function(b){var d=a(this).parents("li").first();d.toggleClass("done"),c.onCheck.call(d)}),a("input",this).on("ifUnchecked",function(b){var d=a(this).parents("li").first();d.toggleClass("done"),c.onUncheck.call(d)})):a("input",this).on("change",function(b){var d=a(this).parents("li").first();d.toggleClass("done"),c.onCheck.call(d)})})}}(jQuery);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/client/console/src/main/resources/org/apache/syncope/client/console/pages/BaseModalPage.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/BaseModalPage.html b/client/console/src/main/resources/org/apache/syncope/client/console/pages/BaseModalPage.html
index c1be88b..995b1ef 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/BaseModalPage.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/BaseModalPage.html
@@ -20,19 +20,16 @@ under the License.
   <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_plugins/dataTables/dataTables.bootstrap.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" src="webjars/jquery-ui/${jquery-ui.version}/jquery-ui.min.js"></script>>
 
     <script type="text/javascript">
       var notificationShownTimes = 0;

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/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 857ae9c..233dae8 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
@@ -25,20 +25,17 @@ under the License.
     <title>Apache Syncope</title>
 
     <link rel="shortcut icon" href="img/favicon.png" type="image/png"/>
-
-    <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/plugins/AdminLTE_plugins/dataTables.bootstrap.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;
@@ -160,4 +157,4 @@ under the License.
       $('#spanYear').html(new Date().getFullYear());
     </script>
   </body>
-</html>
\ No newline at end of file
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/client/console/src/main/resources/org/apache/syncope/client/console/pages/Login.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Login.html b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Login.html
index e6230db..3b8a3d4 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Login.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Login.html
@@ -26,16 +26,11 @@ under the License.
     <title>Apache Syncope - Login</title>
 
     <link rel="shortcut icon" href="img/favicon.png" type="image/png"/>
-
-    <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/login.css" rel="stylesheet" type="text/css" />
     <link href="css/syncopeConsole.css" rel="stylesheet" type="text/css" />
-
-    <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>
   </head>
   <body class="skin-green">

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/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
deleted file mode 100644
index e655aa1..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/RealmModalPage.html
+++ /dev/null
@@ -1,70 +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.
--->
-<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/0419594e/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 7eaf56d..dc3fa89 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
@@ -20,7 +20,6 @@ under the License.
 <html xmlns="http://www.w3.org/1999/xhtml" 
       xmlns:wicket="http://xmlns.jcp.org/jsf/composite">
   <wicket:extend>
-
     <div class="wrapper">
       <div class="admin-content-page content-margin-layout" wicket:id="content">
         <div class="box box-solid box-primary">
@@ -42,7 +41,6 @@ under the License.
                   </a>                  
                 </li>
               </ul>
-              <div wicket:id="editModal" ></div>
             </div><!-- /.box-tools -->
           </div><!-- /.box-header -->
           <div class="box-body">
@@ -51,6 +49,8 @@ under the License.
             </div>
           </div>
         </div>
+        <div wicket:id="createModal"></div>
+        <div wicket:id="editModal"></div>
       </div>
 
       <aside class="control-sidebar control-sidebar-dark control-sidebar-open block-sidebar">

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractModalPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractModalPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractModalPanel.html
new file mode 100644
index 0000000..631c38b
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractModalPanel.html
@@ -0,0 +1,45 @@
+<!--
+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>
+      <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>
+  </wicket:head>-->
+
+  <wicket:panel>
+    <div wicket:id="feedback"/>
+    <wicket:child />
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.html
index 487165b..e543318 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.html
@@ -18,14 +18,19 @@ under the License.
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
   <wicket:panel>
-
     <div wicket:id="container">
       <span wicket:id="resultTable">[Table]</span>
-
+      
       <span style="float:right">
         <form wicket:id="paginator" style="display:inline">
-          <label><wicket:message key="displayRows"/></label>
-          <select class="text ui-widget-content ui-corner-all" wicket:id="rowsChooser"/>
+          <div class="col-sm-6">
+            <div class="dataTables_length">
+              <label>
+                <wicket:message key="displayRows"/>
+                <select class="form-control input-sm" wicket:id="rowsChooser"/>
+              </label>
+            </div>
+          </div>
         </form>
       </span>
     </div>

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyAjaxTabbedPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyAjaxTabbedPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyAjaxTabbedPanel.html
new file mode 100644
index 0000000..ce63b0d
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AnyAjaxTabbedPanel.html
@@ -0,0 +1,35 @@
+<!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:panel>
+    <div class="tabbable tabs-left" style="margin-right: 0; border-right: 0;">
+      <ul class="nav nav-tabs" style="margin-right: 0; border-right: 0;" wicket:id="tabs-container">
+        <li wicket:id="tabs">
+          <a data-toggle="tab" href="#" wicket:id="link">
+            <span wicket:id="title">[tab title]</span>
+          </a>
+        </li>
+      </ul>
+      <div class="tab-content" style="min-height: 100%; padding-left: 20px; border-left: 1px solid #ddd;">
+        <div wicket:id="panel" class="tab-pane active">[tab]</div>
+      </div>
+    </div>
+  </wicket:panel>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/client/console/src/main/resources/org/apache/syncope/client/console/panels/GroupModalPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/GroupModalPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/GroupModalPanel.html
new file mode 100644
index 0000000..bbcd878
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/GroupModalPanel.html
@@ -0,0 +1,52 @@
+<!--
+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 style="margin: 5px;">
+      <p class="ui-widget ui-corner-all ui-widget-header">
+        <wicket:message key="title"/>&nbsp;<span wicket:id="displayName"/>
+      </p>
+      <form wicket:id="groupForm">
+        <div id="tabs">
+          <div style="display: block; clear: both">
+            <ul>
+              <li><a href="#details"><span><wicket:message key="details"/></span></a></li>
+              <li><a href="#templates"><span><wicket:message key="templates"/></span></a></li>
+              <li><a href="#plainAttrs"><span><wicket:message key="plainAttrs"/></span></a></li>
+              <li><a href="#derAttrs"><span><wicket:message key="derAttrs"/></span></a></li>
+              <li><a href="#virAttrs"><span><wicket:message key="virAttrs"/></span></a></li>
+              <li><a href="#resources"><span><wicket:message key="resources"/></span></a></li>
+              <li><a href="#entitlements"><span><wicket:message key="entitlements"/></span></a></li>
+              <li><a href="#security"><span><wicket:message key="security"/></span></a></li>
+            </ul>
+          </div>
+          <div wicket:id="groupPanel"></div>
+        </div>
+        <div style="bottom:0;margin:10px">
+          <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>
+    </div>
+  </wicket:extend>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/client/console/src/main/resources/org/apache/syncope/client/console/panels/GroupModalPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/GroupModalPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/GroupModalPanel.properties
new file mode 100644
index 0000000..4ffa2fb
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/GroupModalPanel.properties
@@ -0,0 +1,48 @@
+# 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.
+required_alert=All form fields are required.
+title=Group
+details=Details
+plainAttrs=Plain attributes
+tab3=Derived attributes
+tab4=Virtual attributes
+resources=Resources
+entitlements=Entitlements
+security=Security
+add=+
+drop=-
+error=Generic error occurred during the operation
+firstResourcesList=Group's resources
+secondResourcesList=Available resources
+firstEntitlementsList=Group's entitlements
+secondEntitlementsList=Available entitlements
+derAttrs=Derived Attributes
+derAttrToRemove=Delete
+derAttrName=Name
+derAttrValue=Derived value
+
+virAttrs=Virtual Attributes
+virAttrToRemove=Delete
+virAttrName=Name
+virAttrValue=Virtual value
+
+addAttributeBtn=Add
+
+inheritPlainAttrs=Inherit plain attributes
+inheritDerAttrs=Inherit derived attributes
+inheritVirAttrs=Inherit virtual attributes
+templates=Templates

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/client/console/src/main/resources/org/apache/syncope/client/console/panels/GroupModalPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/GroupModalPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/GroupModalPanel_it.properties
new file mode 100644
index 0000000..1c6efec
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/GroupModalPanel_it.properties
@@ -0,0 +1,50 @@
+# 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.
+required_alert=All form fields are required.
+title=Gruppo
+details=Dettagli
+plainAttrs=Attributi normali
+tab3=Attributi derivati
+tab4=Attributi virtuali
+resources=Risorse
+entitlements=Entitlement
+security=Sicurezza
+add=+
+drop=-
+error=Errore generico durante l'operazione
+firstResourcesList=Risorse ruolo
+secondResourcesList=Risorse disponibili
+firstResourcesList=Risorse gruppo
+secondResourcesList=Risorse disponibili
+derAttrs=Attributi derivati
+derAttrToRemove=Elimina
+derAttrName=Nome
+derAttrValue=Valore derivato
+
+virAttrs=Attributi virtuali
+virAttrToRemove=Elimina
+virAttrName=Nome
+virAttrValue=Valore virtuale
+
+addAttributeBtn=Aggiungi
+
+inheritPlainAttrs=Eredita attributi normali
+inheritDerAttrs=Eredita attributi derivati
+inheritVirAttrs=Eredita attributi virtuali
+templates=Modelo
+secondEntitlementsList=Entitlement disponibili
+firstEntitlementsList=Entitlement gruppo

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/client/console/src/main/resources/org/apache/syncope/client/console/panels/GroupModalPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/GroupModalPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/GroupModalPanel_pt_BR.properties
new file mode 100644
index 0000000..0649585
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/GroupModalPanel_pt_BR.properties
@@ -0,0 +1,48 @@
+# 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.
+required_alert=Todos os campos s\u00e3o obrigat\u00f3rios
+title=Grupo
+details=Detalhes
+plainAttrs=Atributos Normal
+tab3=Atributos Derivados
+tab4=Atributos Virtuais
+resources=Recursos
+entitlements=Direitos
+security=Seguran\u00e7a
+add=+
+drop=-
+error=Um erro gen\u00e9rico ocorreu durante a opera\u00e7\u00e3o
+firstResourcesList=Recursos de grupos
+secondResourcesList=Recursos dispon\u00edveis
+firstEntitlementsList=Direitos de grupos
+secondEntitlementsList=Direitos dispon\u00edveis
+derAttrs=Atributos derivados
+derAttrToRemove=Exluir
+derAttrName=Nome
+derAttrValue=Valor Derivado
+
+virAttrs=Atributos Virtuais
+virAttrToRemove=Excluir
+virAttrName=Nome
+virAttrValue=Valor Virtual
+
+addAttributeBtn=Adicionar
+
+inheritPlainAttrs=Atributos Herdados Normal
+inheritDerAttrs=Atributos Derivados Herdados
+inheritVirAttrs=Atributos Virtuais Herdados
+templates=Modelli

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/client/console/src/main/resources/org/apache/syncope/client/console/panels/ModalContent.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ModalContent.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ModalContent.html
index 471a985..e1fbeff 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ModalContent.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ModalContent.html
@@ -19,23 +19,23 @@ under the License.
 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
 
   <wicket:head>
-    <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>
+      <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>
   </wicket:head>
 
   <wicket:panel>

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/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 a38698a..9a6f9ef 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,19 +23,7 @@ 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 realm">
-          <li wicket:id="anytype-menu">
-            <wicket:container wicket:id="anytype-menuitem"/>
-          </li>
-        </ul>
-        <div class="tab-content">
-          <div class="tab-pane" wicket:id="anytype-content">
-            <wicket:container wicket:id="anytype-contentitem"/>
-          </div>
-        </div>
-      </div>
+      <div wicket:id="tabbedPanel"></div>
     </wicket:panel>
   </body>
 </html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/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 f75f98d..281ddd1 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,27 +23,10 @@ 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 />
-      <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>
+      <span wicket:id="name">[name]</span>
+      <span wicket:id="fullPath">[fullPath]</span>
+      <span wicket:id="accountPolicy">[accountPolicy]</span>
+      <span wicket:id="passwordPolicy">[passwordPolicy]</span>
     </wicket:panel>
   </body>
 </html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/client/console/src/main/resources/org/apache/syncope/client/console/panels/RealmModalPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/RealmModalPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/RealmModalPanel.html
new file mode 100644
index 0000000..2f01a50
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/RealmModalPanel.html
@@ -0,0 +1,27 @@
+<!--
+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 wicket:id="feedback"/>
+    <form data-example-id="simple-input-groups" class="bs-example bs-example-form" wicket:id="realmForm">
+      <div wicket:id="details">[details]</div>
+      <wicket:child />
+    </form>
+  </wicket:extend>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModalPage.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModalPage.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModalPage.html
new file mode 100644
index 0000000..8cb22f0
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModalPage.html
@@ -0,0 +1,56 @@
+<!--
+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>
+    <form wicket:id="form">
+      <div class="tabbable tabs-left">
+        <ul class="nav nav-tabs">
+          <li class="active"><a  data-toggle="tab" href="#resource"><span><wicket:message key="resource"/></span></a></li>
+          <li><a  data-toggle="tab" href="#umapping"><span><wicket:message key="umapping"/></span></a></li>
+          <li><a  data-toggle="tab" href="#gmapping"><span><wicket:message key="gmapping"/></span></a></li>
+          <li><a  data-toggle="tab" href="#connectorProperties"><span><wicket:message key="connectorProperties"/></span></a></li>
+          <li><a  data-toggle="tab" href="#security"><span><wicket:message key="security"/></span></a></li>
+        </ul>
+        <div class="tab-content">
+          <div id="resource" class="tab-pane active">
+            <span wicket:id="details">[details]</span>
+            <span wicket:id="systeminformation">[System Information]</span>
+          </div>
+          <div id="umapping" class="tab-pane">
+            <span wicket:id="umapping">[umapping]</span>
+          </div>
+          <div id="gmapping" class="tab-pane">
+            <span wicket:id="gmapping">[gmapping]</span>
+          </div>
+          <div id="connectorProperties" class="tab-pane">
+            <span wicket:id="connconf">[connconf]</span>
+          </div>
+          <div id="security" class="tab-pane">
+            <span wicket:id="security">[security]</span>
+          </div>
+        </div>
+      </div>
+
+      <div class="modal-footer">
+        <input type="submit" class="btn btn-primary" wicket:id="apply"/>
+        <input type="button" class="btn btn-default" wicket:id="cancel"/>
+      </div> 
+    </form>
+  </wicket:extend>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/0419594e/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModalPage.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModalPage.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModalPage.properties
new file mode 100644
index 0000000..789919b
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModalPage.properties
@@ -0,0 +1,60 @@
+# 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.
+resource=Resource details
+umapping=User mapping
+connectorProperties=Connector properties
+security=Security
+required_alert=All form fields are required
+connector=Connector
+existing_resources=Existing resources
+action=Action
+edit_attribute=Edit resource
+title=Resource
+extAttrNames=External attributes
+intMappingTypes=Internal mapping types
+entity=Entity
+groupSchema=Group Schema
+connObjectKey=ConnObjectKey
+mandatoryCondition=Mandatory
+password=Password
+purpose=Purpose
+mappingUserSchema=Mapping User Schema
+mappingGroupSchema=Mapping Group Schema
+delete=Delete
+intAttrNames=Internal attributes
+enforceMandatoryCondition=Enforce mandatory condition
+fieldName=Field name
+
+connObjectKeyValidation=There must be exactly one ConnObjectKey
+propagationMode=Propagation mode
+connObjectLink=ConnObjectLink
+enable=Enable
+
+createTraceLevel=Create trace level
+updateTraceLevel=Update trace level
+deleteTraceLevel=Delete trace level
+syncTraceLevel=Synchronization trace level
+propagationPriority=Propagation priority
+propagationPrimary=Propagation primary
+
+success_connection=Successful connection
+error_connection=Connection failure
+check=Check connection
+actionsClasses=Actions classes
+gmapping=Group mapping
+new=New resource
+randomPwdIfNotProvided=Generate random passwords when missing