Upgrading WicketStuff, Swagger JAX-RS, git-commit-id-maven-plugin and maven-assembly-plugin
diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxGrid.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxGrid.java
index 9c0f94a..167607b 100644
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxGrid.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxGrid.java
@@ -24,7 +24,6 @@
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.event.Broadcast;
 import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
@@ -34,22 +33,20 @@
 import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
-import org.wicketstuff.egrid.column.EditableGridActionsColumn;
-import org.wicketstuff.egrid.column.EditableGridActionsPanel;
+import org.wicketstuff.egrid.column.EditableActionsColumn;
+import org.wicketstuff.egrid.column.panel.ActionsPanel;
 import org.wicketstuff.egrid.component.EditableDataTable;
-import org.wicketstuff.egrid.model.GridOperationData;
-import org.wicketstuff.egrid.model.OperationType;
 import org.wicketstuff.egrid.provider.IEditableDataProvider;
-import org.wicketstuff.egrid.toolbar.EditableGridHeadersToolbar;
-import org.wicketstuff.egrid.toolbar.EditableGridNavigationToolbar;
+import org.wicketstuff.egrid.toolbar.HeadersToolbar;
+import org.wicketstuff.egrid.toolbar.NavigationToolbar;
 
 public class AjaxGrid<K, V, S> extends Panel {
 
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 9101893623114754751L;
 
     protected static class NonValidatingForm<T> extends Form<T> {
 
-        protected static final long serialVersionUID = 1L;
+        private static final long serialVersionUID = 8313183098058102408L;
 
         public NonValidatingForm(final String id) {
             super(id);
@@ -75,26 +72,12 @@
         newCols.addAll(columns);
         newCols.add(new AjaxGridActionsColumn<>(new Model<>("Actions")));
 
-        dataTable = new EditableDataTable<>("dataTable", newCols, dataProvider, rowsPerPage, null) {
-
-            protected static final long serialVersionUID = 1L;
-
-            @Override
-            protected void onError(final AjaxRequestTarget target) {
-                AjaxGrid.this.onError(target);
-            }
-
-            @Override
-            protected Item<Pair<K, V>> newRowItem(final String id, final int index, final IModel<Pair<K, V>> model) {
-                return super.newRowItem(id, index, model);
-            }
-        };
-
+        dataTable = new EditableDataTable<>("dataTable", newCols, dataProvider, rowsPerPage);
         dataTable.setOutputMarkupId(true);
 
-        dataTable.addTopToolbar(new EditableGridNavigationToolbar(dataTable));
+        dataTable.addTopToolbar(new NavigationToolbar(dataTable));
         if (displayHeader()) {
-            dataTable.addTopToolbar(new EditableGridHeadersToolbar<>(dataTable, dataProvider));
+            dataTable.addTopToolbar(new HeadersToolbar<>(dataTable, dataProvider));
         }
         if (displayAdd()) {
             dataTable.addBottomToolbar(newAddBottomToolbar(dataTable, dataProvider));
@@ -116,12 +99,6 @@
         return this;
     }
 
-    protected EditableDataTable.RowItem<Pair<K, V>> newRowItem(
-            final String id, final int index, final IModel<Pair<K, V>> model) {
-
-        return new EditableDataTable.RowItem<>(id, index, model);
-    }
-
     protected AjaxGridBottomToolbar<Pair<K, V>, S> newAddBottomToolbar(
             final EditableDataTable<Pair<K, V>, S> dataTable,
             final IEditableDataProvider<Pair<K, V>, S> dataProvider) {
@@ -162,7 +139,7 @@
         return true;
     }
 
-    protected void onCancel(final AjaxRequestTarget target) {
+    protected void onCancel(final AjaxRequestTarget target, final IModel<Pair<K, V>> rowModel) {
     }
 
     protected void onDelete(final AjaxRequestTarget target, final IModel<Pair<K, V>> rowModel) {
@@ -177,9 +154,9 @@
     protected void onAdd(final AjaxRequestTarget target, final Pair<K, V> newRow) {
     }
 
-    protected class AjaxGridActionsColumn<P, S> extends EditableGridActionsColumn<Pair<K, V>, S> {
+    protected class AjaxGridActionsColumn<P, S> extends EditableActionsColumn<Pair<K, V>, S> {
 
-        protected static final long serialVersionUID = 1L;
+        private static final long serialVersionUID = 7409805339768145855L;
 
         public AjaxGridActionsColumn(final IModel<String> displayModel) {
             super(displayModel);
@@ -187,11 +164,12 @@
 
         @Override
         public void populateItem(
-                final Item<ICellPopulator<Pair<K, V>>> item,
-                final String componentId,
+                final Item<ICellPopulator<Pair<K, V>>> item, String componentId,
                 final IModel<Pair<K, V>> rowModel) {
 
-            item.add(new AjaxGridActionsPanel<>(componentId, item));
+            @SuppressWarnings("unchecked")
+            Item<Pair<K, V>> rowItem = item.findParent(Item.class);
+            item.add(new AjaxGridActionsPanel<>(componentId, rowItem));
         }
 
         @Override
@@ -210,8 +188,8 @@
         }
 
         @Override
-        protected void onCancel(final AjaxRequestTarget target) {
-            AjaxGrid.this.onCancel(target);
+        protected void onCancel(final AjaxRequestTarget target, final IModel<Pair<K, V>> rowModel) {
+            AjaxGrid.this.onCancel(target, rowModel);
         }
 
         @Override
@@ -220,55 +198,64 @@
         }
     }
 
-    protected class AjaxGridActionsPanel<T> extends EditableGridActionsPanel<Pair<K, V>> {
+    protected class AjaxGridActionsPanel<T> extends ActionsPanel<Pair<K, V>> {
 
         private static final long serialVersionUID = -1239486389000098745L;
 
         private final Item<Pair<K, V>> rowItem;
 
         @SuppressWarnings("unchecked")
-        public AjaxGridActionsPanel(final String id, final Item<ICellPopulator<Pair<K, V>>> item) {
+        public AjaxGridActionsPanel(final String id, final Item<Pair<K, V>> item) {
             super(id, item);
 
-            rowItem = item.findParent(Item.class);
-            addOrReplace(new AjaxLink<String>("delete") {
+            this.rowItem = item;
+        }
 
-                private static final long serialVersionUID = 1049203640150071039L;
+        @Override
+        protected void onEdit(final AjaxRequestTarget target) {
+            super.onEdit(target);
 
-                @SuppressWarnings("unchecked")
-                @Override
-                public void onClick(final AjaxRequestTarget target) {
-                    EditableDataTable<?, ?> eventTarget = rowItem.findParent(EditableDataTable.class);
-                    send(getPage(), Broadcast.BREADTH, new GridOperationData<>(
-                            OperationType.DELETE, (T) rowItem.getDefaultModelObject(), eventTarget));
-                    target.add(eventTarget);
-                    onDelete(target);
-                }
-
-                @Override
-                public boolean isVisible() {
-                    return AjaxGridActionsPanel.this.allowDelete(rowItem);
-                }
-            });
+            rowItem.setMetaData(EditableDataTable.EDITING, true);
+            send(getPage(), Broadcast.BREADTH, rowItem);
+            target.add(rowItem);
         }
 
         @Override
         protected void onSave(final AjaxRequestTarget target) {
+            super.onSave(target);
+
+            rowItem.setMetaData(EditableDataTable.EDITING, false);
+            send(getPage(), Broadcast.BREADTH, rowItem);
+            target.add(rowItem);
+
             AjaxGrid.this.onSave(target, rowItem.getModel());
         }
 
         @Override
         protected void onError(final AjaxRequestTarget target) {
+            target.add(rowItem);
+
             AjaxGrid.this.onError(target);
         }
 
         @Override
         protected void onCancel(final AjaxRequestTarget target) {
-            AjaxGrid.this.onCancel(target);
+            super.onCancel(target);
+
+            rowItem.setMetaData(EditableDataTable.EDITING, false);
+            send(getPage(), Broadcast.BREADTH, rowItem);
+            target.add(rowItem);
+
+            AjaxGrid.this.onCancel(target, rowItem.getModel());
         }
 
         @Override
         protected void onDelete(final AjaxRequestTarget target) {
+            super.onDelete(target);
+
+            dataTable.getDataProvider().remove(rowItem.getModelObject());
+            target.add(dataTable);
+
             AjaxGrid.this.onDelete(target, rowItem.getModel());
         }
     }
diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxGridBottomToolbar.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxGridBottomToolbar.java
index 1e701fa..259b38e 100644
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxGridBottomToolbar.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxGridBottomToolbar.java
@@ -33,14 +33,14 @@
 import org.apache.wicket.markup.html.list.LoopItem;
 import org.apache.wicket.model.PropertyModel;
 import org.wicketstuff.egrid.column.AbstractEditablePropertyColumn;
-import org.wicketstuff.egrid.column.EditableCellPanel;
+import org.wicketstuff.egrid.column.panel.EditablePanel;
 import org.wicketstuff.egrid.component.EditableDataTable;
-import org.wicketstuff.egrid.component.EditableGridSubmitLink;
-import org.wicketstuff.egrid.toolbar.AbstractEditableGridToolbar;
+import org.wicketstuff.egrid.component.EditableTableSubmitLink;
+import org.wicketstuff.egrid.toolbar.AbstractEditableToolbar;
 
-public abstract class AjaxGridBottomToolbar<T, S> extends AbstractEditableGridToolbar {
+public abstract class AjaxGridBottomToolbar<T, S> extends AbstractEditableToolbar {
 
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = -8122881502408032823L;
 
     protected static final String CELL_ID = "cell";
 
@@ -70,7 +70,7 @@
 
     protected class AddToolBarForm extends Form<T> implements IFormVisitorParticipant {
 
-        protected static final long serialVersionUID = 1L;
+        private static final long serialVersionUID = 4496461574118470280L;
 
         public AddToolBarForm(final String id) {
             super(id);
@@ -86,9 +86,9 @@
     }
 
     protected Component newAddButton(final WebMarkupContainer encapsulatingContainer) {
-        return new EditableGridSubmitLink("add", encapsulatingContainer) {
+        return new EditableTableSubmitLink("add", encapsulatingContainer) {
 
-            protected static final long serialVersionUID = 1L;
+            private static final long serialVersionUID = 4073423722572857137L;
 
             @Override
             protected void onSuccess(final AjaxRequestTarget target) {
@@ -108,19 +108,21 @@
         List<AbstractEditablePropertyColumn<T, S>> columns = getEditableColumns();
         return new Loop(CELLS_ID, columns.size()) {
 
-            protected static final long serialVersionUID = 1L;
+            private static final long serialVersionUID = -7579369655436866236L;
 
             @Override
             protected void populateItem(final LoopItem item) {
-                addEditorComponent(item, getEditorColumn(columns, item.getIndex()));
+                AbstractEditablePropertyColumn<T, S> editableColumn = columns.get(item.getIndex());
+
+                EditablePanel panel = editableColumn.createEditablePanel(CELL_ID);
+                FormComponent<?> editorComponent = panel.getEditableComponent();
+                editorComponent.setDefaultModel(new PropertyModel<T>(newRow, editableColumn.getPropertyExpression()));
+
+                item.add(panel);
             }
         };
     }
 
-    protected void addEditorComponent(final LoopItem item, final AbstractEditablePropertyColumn<T, S> toolBarCell) {
-        item.add(newCell(toolBarCell));
-    }
-
     @SuppressWarnings("unchecked")
     protected List<AbstractEditablePropertyColumn<T, S>> getEditableColumns() {
         List<AbstractEditablePropertyColumn<T, S>> columns = new ArrayList<>();
@@ -130,17 +132,4 @@
                 forEach(columns::add);
         return columns;
     }
-
-    protected Component newCell(final AbstractEditablePropertyColumn<T, S> editableGridColumn) {
-        EditableCellPanel panel = editableGridColumn.getEditableCellPanel(CELL_ID);
-        FormComponent<?> editorComponent = panel.getEditableComponent();
-        editorComponent.setDefaultModel(new PropertyModel<T>(newRow, editableGridColumn.getPropertyExpression()));
-        return panel;
-    }
-
-    protected AbstractEditablePropertyColumn<T, S> getEditorColumn(
-            final List<AbstractEditablePropertyColumn<T, S>> editorColumn, final int index) {
-
-        return editorColumn.get(index);
-    }
 }
diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxGridFieldPanel.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxGridFieldPanel.java
index 2d62d4c..a8c0a7f 100644
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxGridFieldPanel.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxGridFieldPanel.java
@@ -21,10 +21,10 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.stream.Collectors;
 import org.apache.commons.lang3.tuple.MutablePair;
 import org.apache.commons.lang3.tuple.Pair;
-import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.panel.Panel;
@@ -32,10 +32,10 @@
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.ResourceModel;
 import org.wicketstuff.egrid.column.AbstractEditablePropertyColumn;
-import org.wicketstuff.egrid.column.RequiredEditableTextFieldColumn;
+import org.wicketstuff.egrid.column.RequiredTextFieldColumn;
 import org.wicketstuff.egrid.provider.EditableListDataProvider;
 
-public class AjaxGridFieldPanel<K, V, S> extends Panel {
+public class AjaxGridFieldPanel<K, V> extends Panel {
 
     private static final long serialVersionUID = 7589570522964677729L;
 
@@ -48,8 +48,8 @@
                 "grid",
                 getColumns(),
                 new EditableListDataProvider<>(model.getObject().entrySet().stream().
-                        map(entry -> MutablePair.of(entry.getKey(), entry.getValue())).
-                        collect(Collectors.toList())), 10) {
+                        map(e -> MutablePair.of(e.getKey(), e.getValue())).collect(Collectors.toList()), ""),
+                10) {
 
             private static final long serialVersionUID = -1315456128897492459L;
 
@@ -75,19 +75,16 @@
         });
     }
 
-    public AjaxGridFieldPanel<K, V, S> hideLabel() {
-        Component label = get(AbstractFieldPanel.LABEL);
-        if (label != null) {
-            label.setVisible(false);
-        }
+    public AjaxGridFieldPanel<K, V> hideLabel() {
+        Optional.ofNullable(get(AbstractFieldPanel.LABEL)).ifPresent(label -> label.setVisible(false));
 
         return this;
     }
 
-    private List<AbstractEditablePropertyColumn<Pair<K, V>, S>> getColumns() {
-        List<AbstractEditablePropertyColumn<Pair<K, V>, S>> columns = new ArrayList<>();
-        columns.add(new RequiredEditableTextFieldColumn<>(Model.of(), "left"));
-        columns.add(new RequiredEditableTextFieldColumn<>(Model.of(), "right"));
+    private List<AbstractEditablePropertyColumn<Pair<K, V>, String>> getColumns() {
+        List<AbstractEditablePropertyColumn<Pair<K, V>, String>> columns = new ArrayList<>();
+        columns.add(new RequiredTextFieldColumn<>(Model.of(), "left"));
+        columns.add(new RequiredTextFieldColumn<>(Model.of(), "right"));
         return columns;
     }
 }
diff --git a/client/idrepo/common-ui/src/main/resources/META-INF/resources/ui-commons/css/syncopeUI.scss b/client/idrepo/common-ui/src/main/resources/META-INF/resources/ui-commons/css/syncopeUI.scss
index 98c8ff8..b5f0491 100644
--- a/client/idrepo/common-ui/src/main/resources/META-INF/resources/ui-commons/css/syncopeUI.scss
+++ b/client/idrepo/common-ui/src/main/resources/META-INF/resources/ui-commons/css/syncopeUI.scss
@@ -1262,7 +1262,7 @@
 }
 
 .nav-link > a {
-  #color: #343a40
+  color: #343a40;
 }
 
 .bg-green {
diff --git a/pom.xml b/pom.xml
index d090ad7..5a1dded 100644
--- a/pom.xml
+++ b/pom.xml
@@ -442,7 +442,7 @@
 
     <h2.version>2.2.224</h2.version>
 
-    <swagger-core.version>2.2.20</swagger-core.version>
+    <swagger-core.version>2.2.21</swagger-core.version>
     <swagger-ui.version>5.12.0</swagger-ui.version>
 
     <jquery-slimscroll.version>1.3.8</jquery-slimscroll.version>
@@ -458,7 +458,7 @@
     <chartjs.version>4.1.2</chartjs.version>
 
     <wicket.version>10.0.0</wicket.version>
-    <wicketstuff.version>10.0.0-M2</wicketstuff.version>
+    <wicketstuff.version>10.0.0</wicketstuff.version>
     <wicket-jqueryui.version>10.0.0-M1</wicket-jqueryui.version>
     <wicket-bootstrap.version>7.0.3</wicket-bootstrap.version>
     <wicket-jquery-selectors.version>4.0.4</wicket-jquery-selectors.version>
@@ -1406,7 +1406,7 @@
         <plugin>
           <groupId>io.github.git-commit-id</groupId>
           <artifactId>git-commit-id-maven-plugin</artifactId>
-          <version>8.0.1</version>
+          <version>8.0.2</version>
           <executions>
             <execution>
               <goals>
@@ -1639,7 +1639,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-assembly-plugin</artifactId>
-          <version>3.7.0</version>
+          <version>3.7.1</version>
         </plugin>
 
         <plugin>