This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch 3_0_X
in repository https://gitbox.apache.org/repos/asf/syncope.git

commit d8213861d0dd6929f9551b848e67eea9a827b571
Author: Francesco Chicchiriccò <[email protected]>
AuthorDate: Thu Oct 30 08:35:11 2025 +0100

    [SYNCOPE-1925] Review setWindowClosedReloadCallback
---
 .../authprofiles/AuthProfileDirectoryPanel.java    |   5 +-
 .../clientapps/ClientAppDirectoryPanel.java        |   7 +-
 .../console/panels/AMSessionDirectoryPanel.java    |   2 +-
 .../panels/SAML2IdPEntityDirectoryPanel.java       |   6 +-
 .../console/panels/SRARouteDirectoryPanel.java     |   7 +-
 ...MergeLinkedAccountsReviewPanel_fr_CA.properties |   2 +-
 .../MergeLinkedAccountsReviewPanel_it.properties   |  10 +-
 .../MergeLinkedAccountsReviewPanel_ja.properties   |   2 +-
 ...MergeLinkedAccountsReviewPanel_pt_BR.properties |   2 +-
 .../MergeLinkedAccountsReviewPanel_ru.properties   |   2 +-
 .../apache/syncope/client/ui/commons/DateOps.java  |   4 +-
 .../notifications/MailTemplateDirectoryPanel.java  |   5 +-
 .../console/panels/CommandDirectoryPanel.java      |   6 +-
 .../client/console/panels/DirectoryPanel.java      |  34 ++++--
 .../console/panels/DomainDirectoryPanel.java       |   9 +-
 .../console/panels/DynRealmDirectoryPanel.java     |   5 +-
 .../client/console/panels/GroupDirectoryPanel.java |   6 +-
 .../panels/ImplementationDirectoryPanel.java       |   4 +
 .../panels/NetworkServiceDirectoryPanel.java       |   5 +-
 .../console/panels/SecurityQuestionsPanel.java     |   5 +-
 .../client/console/panels/UserDirectoryPanel.java  |   7 +-
 .../console/policies/PolicyDirectoryPanel.java     |   5 +-
 .../markup/html/bootstrap/dialog/BaseModal.java    |   5 +-
 .../wicket/markup/html/form/ActionLink.java        |   3 -
 .../markup/html/form/ActionLinksTogglePanel.java   |   7 +-
 .../wicket/markup/html/form/ActionPanel.java       |   2 +-
 .../org/apache/syncope/core/logic/UserLogic.java   |   3 +-
 .../core/persistence/jpa/inner/AnySearchTest.java  | 127 ++++++++-------------
 .../panels/UserRequestFormDirectoryPanel.java      |   4 +
 .../panels/OIDCProvidersDirectoryPanel.java        |   2 +-
 .../console/panels/SAML2IdPsDirectoryPanel.java    |   7 +-
 .../apache/syncope/fit/console/BatchesITCase.java  |  46 ++++----
 .../syncope/fit/console/LinkedAccountsITCase.java  |  33 +++---
 .../org/apache/syncope/fit/core/SearchITCase.java  |   2 +-
 34 files changed, 168 insertions(+), 213 deletions(-)

diff --git 
a/client/am/console/src/main/java/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel.java
 
b/client/am/console/src/main/java/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel.java
index 0693dd6244..da73e8b002 100644
--- 
a/client/am/console/src/main/java/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel.java
+++ 
b/client/am/console/src/main/java/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel.java
@@ -81,10 +81,7 @@ public class AuthProfileDirectoryPanel
             }
         };
         authProfileModal.size(Modal.Size.Large);
-        authProfileModal.setWindowClosedCallback(target -> {
-            updateResultTable(target);
-            authProfileModal.show(false);
-        });
+        setWindowClosedReloadCallback(authProfileModal, true);
         addOuterObject(authProfileModal);
 
         disableCheckBoxes();
diff --git 
a/client/am/console/src/main/java/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel.java
 
b/client/am/console/src/main/java/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel.java
index b0364d7b4f..208f4ce2c6 100644
--- 
a/client/am/console/src/main/java/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel.java
+++ 
b/client/am/console/src/main/java/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel.java
@@ -97,10 +97,7 @@ public abstract class ClientAppDirectoryPanel<T extends 
ClientAppTO>
 
         modal.addSubmitButton();
         modal.size(Modal.Size.Large);
-        modal.setWindowClosedCallback(target -> {
-            updateResultTable(target);
-            modal.show(false);
-        });
+        setWindowClosedReloadCallback(modal, true);
         setFooterVisibility(true);
 
         propertiesModal = new BaseModal<>(Constants.OUTER) {
@@ -114,7 +111,7 @@ public abstract class ClientAppDirectoryPanel<T extends 
ClientAppTO>
             }
         };
         propertiesModal.size(Modal.Size.Large);
-        propertiesModal.setWindowClosedCallback(target -> 
propertiesModal.show(false));
+        setWindowClosedReloadCallback(propertiesModal);
         addOuterObject(propertiesModal);
 
         disableCheckBoxes();
diff --git 
a/client/am/console/src/main/java/org/apache/syncope/client/console/panels/AMSessionDirectoryPanel.java
 
b/client/am/console/src/main/java/org/apache/syncope/client/console/panels/AMSessionDirectoryPanel.java
index 9db0f0b713..852f53bf9d 100644
--- 
a/client/am/console/src/main/java/org/apache/syncope/client/console/panels/AMSessionDirectoryPanel.java
+++ 
b/client/am/console/src/main/java/org/apache/syncope/client/console/panels/AMSessionDirectoryPanel.java
@@ -92,7 +92,7 @@ public class AMSessionDirectoryPanel
             }
         };
         viewModal.size(Modal.Size.Extra_large);
-        viewModal.setWindowClosedCallback(target -> viewModal.show(false));
+        setWindowClosedReloadCallback(viewModal);
         addOuterObject(viewModal);
 
         initResultTable();
diff --git 
a/client/am/console/src/main/java/org/apache/syncope/client/console/panels/SAML2IdPEntityDirectoryPanel.java
 
b/client/am/console/src/main/java/org/apache/syncope/client/console/panels/SAML2IdPEntityDirectoryPanel.java
index 2ec1e9ea21..52244a75a2 100644
--- 
a/client/am/console/src/main/java/org/apache/syncope/client/console/panels/SAML2IdPEntityDirectoryPanel.java
+++ 
b/client/am/console/src/main/java/org/apache/syncope/client/console/panels/SAML2IdPEntityDirectoryPanel.java
@@ -70,11 +70,7 @@ public class SAML2IdPEntityDirectoryPanel extends 
DirectoryPanel<
 
         modal.size(Modal.Size.Large);
         modal.addSubmitButton();
-
-        modal.setWindowClosedCallback(target -> {
-            updateResultTable(target);
-            modal.show(false);
-        });
+        setWindowClosedReloadCallback(modal, true);
 
         addNewItemPanelBuilder(new SAML2IdPEntityWizardBuilder(new 
SAML2IdPEntityTO(), restClient, pageRef), false);
 
diff --git 
a/client/am/console/src/main/java/org/apache/syncope/client/console/panels/SRARouteDirectoryPanel.java
 
b/client/am/console/src/main/java/org/apache/syncope/client/console/panels/SRARouteDirectoryPanel.java
index a116ccf53f..280026d2e8 100644
--- 
a/client/am/console/src/main/java/org/apache/syncope/client/console/panels/SRARouteDirectoryPanel.java
+++ 
b/client/am/console/src/main/java/org/apache/syncope/client/console/panels/SRARouteDirectoryPanel.java
@@ -61,13 +61,10 @@ public class SRARouteDirectoryPanel
 
         modal.size(Modal.Size.Large);
         modal.addSubmitButton();
-
-        modal.setWindowClosedCallback(target -> {
-            updateResultTable(target);
-            modal.show(false);
-        });
+        setWindowClosedReloadCallback(modal, true);
 
         addNewItemPanelBuilder(new SRARouteWizardBuilder(new SRARouteTO(), 
restClient, pageRef), true);
+
         initResultTable();
     }
 
diff --git 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/any/MergeLinkedAccountsReviewPanel_fr_CA.properties
 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/any/MergeLinkedAccountsReviewPanel_fr_CA.properties
index c2d89faeaf..3fd6639997 100644
--- 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/any/MergeLinkedAccountsReviewPanel_fr_CA.properties
+++ 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/any/MergeLinkedAccountsReviewPanel_fr_CA.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 mergeLinkedAccounts.reviewAccounts.title=Preview finalized linked accounts
-connObjectKeyValue=Connector
+connObjectKeyValue=Connector Key
 resource=Resource
 key=Key
 username=Username
diff --git 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/any/MergeLinkedAccountsReviewPanel_it.properties
 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/any/MergeLinkedAccountsReviewPanel_it.properties
index c2d89faeaf..bd2fcc6be8 100644
--- 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/any/MergeLinkedAccountsReviewPanel_it.properties
+++ 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/any/MergeLinkedAccountsReviewPanel_it.properties
@@ -14,9 +14,9 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-mergeLinkedAccounts.reviewAccounts.title=Preview finalized linked accounts
-connObjectKeyValue=Connector
-resource=Resource
-key=Key
+mergeLinkedAccounts.reviewAccounts.title=Anteprima linked account
+connObjectKeyValue=Chiave esterna
+resource=Risorsa
+key=Chiave interna
 username=Username
-suspended=Suspended
+suspended=Sospeso
diff --git 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/any/MergeLinkedAccountsReviewPanel_ja.properties
 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/any/MergeLinkedAccountsReviewPanel_ja.properties
index c2d89faeaf..3fd6639997 100644
--- 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/any/MergeLinkedAccountsReviewPanel_ja.properties
+++ 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/any/MergeLinkedAccountsReviewPanel_ja.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 mergeLinkedAccounts.reviewAccounts.title=Preview finalized linked accounts
-connObjectKeyValue=Connector
+connObjectKeyValue=Connector Key
 resource=Resource
 key=Key
 username=Username
diff --git 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/any/MergeLinkedAccountsReviewPanel_pt_BR.properties
 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/any/MergeLinkedAccountsReviewPanel_pt_BR.properties
index c2d89faeaf..3fd6639997 100644
--- 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/any/MergeLinkedAccountsReviewPanel_pt_BR.properties
+++ 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/any/MergeLinkedAccountsReviewPanel_pt_BR.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 mergeLinkedAccounts.reviewAccounts.title=Preview finalized linked accounts
-connObjectKeyValue=Connector
+connObjectKeyValue=Connector Key
 resource=Resource
 key=Key
 username=Username
diff --git 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/any/MergeLinkedAccountsReviewPanel_ru.properties
 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/any/MergeLinkedAccountsReviewPanel_ru.properties
index c2d89faeaf..3fd6639997 100644
--- 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/any/MergeLinkedAccountsReviewPanel_ru.properties
+++ 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/any/MergeLinkedAccountsReviewPanel_ru.properties
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 mergeLinkedAccounts.reviewAccounts.title=Preview finalized linked accounts
-connObjectKeyValue=Connector
+connObjectKeyValue=Connector Key
 resource=Resource
 key=Key
 username=Username
diff --git 
a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/DateOps.java
 
b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/DateOps.java
index 4e0d591cb2..1f23abe89e 100644
--- 
a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/DateOps.java
+++ 
b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/DateOps.java
@@ -47,11 +47,11 @@ public final class DateOps {
         }
 
         public String format(final OffsetDateTime date) {
-            return Optional.ofNullable(date).map(v -> 
fdf.format(convert(date))).orElse(StringUtils.EMPTY);
+            return Optional.ofNullable(date).map(v -> 
fdf.format(convert(v))).orElse(StringUtils.EMPTY);
         }
 
         public String format(final ZonedDateTime date) {
-            return Optional.ofNullable(date).map(v -> 
fdf.format(convert(date))).orElse(StringUtils.EMPTY);
+            return Optional.ofNullable(date).map(v -> 
fdf.format(convert(v))).orElse(StringUtils.EMPTY);
         }
 
         public String format(final LocalDateTime date) {
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java
index 51d897be10..b6398da899 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java
@@ -73,10 +73,7 @@ public class MailTemplateDirectoryPanel
 
         modal.size(Modal.Size.Small);
         modal.addSubmitButton();
-        modal.setWindowClosedCallback(target -> {
-            updateResultTable(target);
-            modal.show(false);
-        });
+        setWindowClosedReloadCallback(modal, true);
         setFooterVisibility(true);
 
         addOuterObject(utilityModal);
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/CommandDirectoryPanel.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/CommandDirectoryPanel.java
index db7a127515..190073bc34 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/CommandDirectoryPanel.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/CommandDirectoryPanel.java
@@ -65,11 +65,7 @@ public class CommandDirectoryPanel
         disableCheckBoxes();
 
         modal.size(Modal.Size.Large);
-
-        modal.setWindowClosedCallback(target -> {
-            updateResultTable(target);
-            modal.show(false);
-        });
+        setWindowClosedReloadCallback(modal, true);
 
         addNewItemPanelBuilder(new CommandWizardBuilder(new CommandTO(), 
restClient, pageRef), false);
 
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java
index f15ba9b909..272209229b 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java
@@ -35,7 +35,6 @@ import 
org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
 import org.apache.syncope.client.console.wizards.WizardMgtPanel;
 import org.apache.syncope.client.ui.commons.Constants;
 import 
org.apache.syncope.client.ui.commons.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
-import org.apache.syncope.client.ui.commons.panels.WizardModalPanel;
 import org.apache.syncope.client.ui.commons.rest.RestClient;
 import org.apache.syncope.common.lib.types.IdRepoEntitlement;
 import org.apache.wicket.PageReference;
@@ -178,16 +177,13 @@ public abstract class DirectoryPanel<
 
         rows = PreferenceManager.getPaginatorRows(paginatorRowsKey());
 
-        modal.setWindowClosedCallback(target -> {
-            if (actionTogglePanel.isVisibleInHierarchy() && modal.getContent() 
instanceof WizardModalPanel) {
-                actionTogglePanel.updateHeader(target, 
WizardModalPanel.class.cast(modal.getContent()).getItem());
-            }
-            modal.show(false);
-        });
+        setWindowClosedReloadCallback(modal);
 
-        setWindowClosedReloadCallback(altDefaultModal);
         altDefaultModal.size(Modal.Size.Default);
+        setWindowClosedReloadCallback(altDefaultModal);
 
+        displayAttributeModal.size(Modal.Size.Default);
+        displayAttributeModal.addSubmitButton();
         displayAttributeModal.setWindowClosedCallback(target -> {
             EventDataWrapper data = new EventDataWrapper();
             data.setTarget(target);
@@ -195,11 +191,27 @@ public abstract class DirectoryPanel<
 
             send(DirectoryPanel.this, Broadcast.EXACT, data);
 
-            displayAttributeModal.size(Modal.Size.Default);
             modal.show(false);
         });
-        displayAttributeModal.size(Modal.Size.Default);
-        displayAttributeModal.addSubmitButton();
+    }
+
+    @Override
+    protected void setWindowClosedReloadCallback(final BaseModal<?> baseModal) 
{
+        setWindowClosedReloadCallback(baseModal, false);
+    }
+
+    protected void setWindowClosedReloadCallback(final BaseModal<?> baseModal, 
final boolean updateResultTable) {
+        baseModal.setWindowClosedCallback(target -> {
+            if (actionTogglePanel.isVisibleInHierarchy()) {
+                actionTogglePanel.toggle(target, false);
+            }
+
+            if (updateResultTable) {
+                updateResultTable(target);
+            }
+
+            baseModal.show(false);
+        });
     }
 
     protected abstract DP dataProvider();
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainDirectoryPanel.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainDirectoryPanel.java
index b279dd0437..15120eb0c0 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainDirectoryPanel.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainDirectoryPanel.java
@@ -65,15 +65,16 @@ public class DomainDirectoryPanel extends 
DirectoryPanel<Domain, Domain, DomainP
         modal.size(Modal.Size.Large);
 
         modal.setWindowClosedCallback(target -> {
+            if (actionTogglePanel.isVisibleInHierarchy()) {
+                actionTogglePanel.toggle(target, false);
+            }
+
             updateResultTable(target);
             modal.show(false);
         });
 
         addOuterObject(utilityModal);
-        utilityModal.setWindowClosedCallback(target -> {
-            updateResultTable(target);
-            modal.show(false);
-        });
+        setWindowClosedReloadCallback(utilityModal, true);
         utilityModal.size(Modal.Size.Small);
         utilityModal.addSubmitButton();
 
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmDirectoryPanel.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmDirectoryPanel.java
index d720bc331c..3968b02bf0 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmDirectoryPanel.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmDirectoryPanel.java
@@ -65,10 +65,7 @@ public class DynRealmDirectoryPanel extends
 
         modal.size(Modal.Size.Large);
         modal.addSubmitButton();
-        modal.setWindowClosedCallback(target -> {
-            updateResultTable(target);
-            modal.show(false);
-        });
+        setWindowClosedReloadCallback(modal, true);
         setFooterVisibility(true);
 
         AjaxLink<Void> newDynRealmlLink = new AjaxLink<>("add") {
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
index 0b2265492b..a275d4d0eb 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
@@ -111,12 +111,12 @@ public class GroupDirectoryPanel extends 
AnyDirectoryPanel<GroupTO, GroupRestCli
         super(id, builder, wizardInModal);
 
         typeExtensionsModal.size(Modal.Size.Large);
-        addOuterObject(typeExtensionsModal);
-        setWindowClosedReloadCallback(typeExtensionsModal);
         typeExtensionsModal.addSubmitButton();
+        setWindowClosedReloadCallback(typeExtensionsModal);
+        addOuterObject(typeExtensionsModal);
 
-        addOuterObject(membersModal);
         membersModal.size(Modal.Size.Large);
+        addOuterObject(membersModal);
 
         membersTogglePanel = new MembersTogglePanel(page.getPageReference()) {
 
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationDirectoryPanel.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationDirectoryPanel.java
index e73ae45928..7fac40727c 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationDirectoryPanel.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationDirectoryPanel.java
@@ -74,6 +74,10 @@ public class ImplementationDirectoryPanel extends 
DirectoryPanel<
         modal.size(Modal.Size.Large);
         modal.addSubmitButton();
         modal.setWindowClosedCallback(target -> {
+            if (actionTogglePanel.isVisibleInHierarchy()) {
+                actionTogglePanel.toggle(target, false);
+            }
+
             implementation.setEngine(null);
             updateResultTable(target);
             modal.show(false);
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel.java
index e16594d352..2e2051bb89 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel.java
@@ -68,10 +68,7 @@ public class NetworkServiceDirectoryPanel extends 
DirectoryPanel<
 
         modal.size(Modal.Size.Large);
         modal.addSubmitButton();
-        modal.setWindowClosedCallback(target -> {
-            updateResultTable(target);
-            modal.show(false);
-        });
+        setWindowClosedReloadCallback(modal, true);
         setFooterVisibility(true);
 
         initResultTable();
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
index 3dc5e210bc..94c7aeba8f 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
@@ -72,10 +72,7 @@ public class SecurityQuestionsPanel extends DirectoryPanel<
 
         modal.addSubmitButton();
         modal.size(Modal.Size.Large);
-        modal.setWindowClosedCallback(target -> {
-            modal.show(false);
-            target.add(container);
-        });
+        setWindowClosedReloadCallback(modal, true);
         setFooterVisibility(true);
 
         this.addNewItemPanelBuilder(
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
index 25fdfc1303..6393f31fcf 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
@@ -74,10 +74,7 @@ public class UserDirectoryPanel extends 
AnyDirectoryPanel<UserTO, UserRestClient
     protected UserDirectoryPanel(final String id, final Builder builder, final 
boolean wizardInModal) {
         super(id, builder, wizardInModal);
 
-        altDefaultModal.setWindowClosedCallback(target -> {
-            updateResultTable(target);
-            modal.show(false);
-        });
+        setWindowClosedReloadCallback(altDefaultModal, true);
     }
 
     @Override
@@ -224,7 +221,7 @@ public class UserDirectoryPanel extends 
AnyDirectoryPanel<UserTO, UserRestClient
             
SyncopeWebApplication.get().getAnyDirectoryPanelAdditionalActionLinksProvider().get(
                     model,
                     realm,
-                    altDefaultModal,
+                    modal,
                     getString("any.edit", new Model<>(new 
UserWrapper(model.getObject()))),
                     this,
                     pageRef).forEach(panel::add);
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.java
index de735ee05c..133bbb5f5f 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.java
@@ -110,10 +110,7 @@ public abstract class PolicyDirectoryPanel<T extends 
PolicyTO>
 
         modal.addSubmitButton();
         modal.size(Modal.Size.Large);
-        modal.setWindowClosedCallback(target -> {
-            updateResultTable(target);
-            modal.show(false);
-        });
+        setWindowClosedReloadCallback(modal, true);
         setFooterVisibility(true);
 
         disableCheckBoxes();
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java
index 09f871ec36..268e9343cd 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java
@@ -24,6 +24,7 @@ import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.behavior.Draggable
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 import org.apache.syncope.client.console.panels.AbstractModalPanel;
 import 
org.apache.syncope.client.console.wicket.ajax.form.IndicatorModalCloseBehavior;
 import 
org.apache.syncope.client.console.wicket.markup.html.bootstrap.buttons.DefaultModalCloseButton;
@@ -184,9 +185,7 @@ public class BaseModal<T extends Serializable> extends 
Modal<T> {
 
     @Override
     protected void onClose(final IPartialPageRequestHandler target) {
-        if (windowClosedCallback != null) {
-            windowClosedCallback.onClose((AjaxRequestTarget) target);
-        }
+        Optional.ofNullable(windowClosedCallback).ifPresent(callback -> 
callback.onClose((AjaxRequestTarget) target));
     }
 
     public AjaxSubmitLink addSubmitButton() {
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java
index 44d65ab309..c9c7676b4b 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java
@@ -128,9 +128,6 @@ public abstract class ActionLink<T extends Serializable> 
implements Serializable
 
     public abstract void onClick(AjaxRequestTarget target, T modelObject);
 
-    public void postClick() {
-    }
-
     public boolean feedbackPanelAutomaticReload() {
         return reloadFeedbackPanel;
     }
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksTogglePanel.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksTogglePanel.java
index 2935f55f5a..815009c7e1 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksTogglePanel.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksTogglePanel.java
@@ -33,6 +33,7 @@ import org.apache.syncope.client.ui.commons.status.StatusBean;
 import org.apache.syncope.client.ui.commons.wizards.any.EntityWrapper;
 import org.apache.syncope.client.ui.commons.wizards.any.UserWrapper;
 import org.apache.syncope.common.keymaster.client.api.model.Domain;
+import org.apache.syncope.common.keymaster.client.api.model.NetworkService;
 import org.apache.syncope.common.lib.Attr;
 import org.apache.syncope.common.lib.command.CommandTO;
 import org.apache.syncope.common.lib.policy.PolicyTO;
@@ -71,7 +72,7 @@ public class ActionLinksTogglePanel<T extends Serializable> 
extends TogglePanel<
         container.add(getEmptyFragment());
     }
 
-    public void updateHeader(final AjaxRequestTarget target, final 
Serializable modelObject) {
+    protected void updateHeader(final AjaxRequestTarget target, final 
Serializable modelObject) {
         final String header;
         if (modelObject instanceof UserTO) {
             header = ((UserTO) modelObject).getUsername();
@@ -112,6 +113,8 @@ public class ActionLinksTogglePanel<T extends Serializable> 
extends TogglePanel<
             header = ((Domain) modelObject).getKey();
         } else if (modelObject instanceof CommandTO) {
             header = ((CommandTO) modelObject).getKey();
+        } else if (modelObject instanceof NetworkService) {
+            header = ((NetworkService) modelObject).getAddress();
         } else if (modelObject instanceof NamedEntityTO) {
             header = ((NamedEntityTO) modelObject).getName();
         } else if (modelObject instanceof EntityTO) {
@@ -133,7 +136,7 @@ public class ActionLinksTogglePanel<T extends Serializable> 
extends TogglePanel<
 
         updateHeader(target, modelObject);
 
-        modal.setWindowClosedCallback(t -> modal.show(false));
+        setWindowClosedReloadCallback(modal);
 
         Fragment frag = new Fragment("actions", "actionsFragment", this);
         frag.setOutputMarkupId(true);
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel.java
index 20bd29068a..4b2a83afe7 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel.java
@@ -169,7 +169,7 @@ public final class ActionPanel<T extends Serializable> 
extends Panel {
 
         Optional.ofNullable(action.getIcon()).ifPresent(i -> 
actionIcon.add(new AttributeModifier("class", i)));
 
-        this.disableIndicator = !action.hasIndicator();
+        disableIndicator = !action.hasIndicator();
         // ---------------------------
     }
 
diff --git 
a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java 
b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
index c53128011b..93667dfb95 100644
--- 
a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
+++ 
b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
@@ -584,8 +584,7 @@ public class UserLogic extends AbstractAnyLogic<UserTO, 
UserCR, UserUR> {
                 build();
 
         if (changepwd) {
-            req.setPassword(new PasswordPatch.Builder().
-                    
value(password).onSyncope(false).resources(resources).build());
+            req.setPassword(new 
PasswordPatch.Builder().value(password).onSyncope(false).resources(resources).build());
         }
 
         return update(req, nullPriorityAsync);
diff --git 
a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
 
b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
index 6bbe1d6720..41a6365e6a 100644
--- 
a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
+++ 
b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
@@ -59,7 +59,7 @@ import 
org.apache.syncope.core.persistence.api.dao.search.ResourceCond;
 import org.apache.syncope.core.persistence.api.dao.search.RoleCond;
 import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
 import org.apache.syncope.core.persistence.api.entity.AnyType;
-import org.apache.syncope.core.persistence.api.entity.EntityFactory;
+import org.apache.syncope.core.persistence.api.entity.AnyUtils;
 import org.apache.syncope.core.persistence.api.entity.PlainSchema;
 import org.apache.syncope.core.persistence.api.entity.anyobject.AMembership;
 import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject;
@@ -105,12 +105,9 @@ public class AnySearchTest extends AbstractTest {
 
     @Autowired
     private RoleDAO roleDAO;
-    
+
     @Autowired
     private PlainSchemaDAO plainSchemaDAO;
-    
-    @Autowired
-    private EntityFactory entityFactory;
 
     @Autowired
     private PlainAttrValidationManager validator;
@@ -989,58 +986,48 @@ public class AnySearchTest extends AbstractTest {
     }
 
     @Test
-    public void issueSYNCOPE1906() {
-        User bellini = userDAO.findByUsername("bellini");
-        assertNotNull(bellini);
-
+    void issueSYNCOPE1906() {
         PlainSchema ctypeSchema = plainSchemaDAO.find("ctype");
-        assertNotNull(ctypeSchema);
-
-        userDAO.save(addPlainAttr(bellini, ctypeSchema, "aa1"));
 
-        User puccini = userDAO.findByUsername("puccini");
-        assertNotNull(bellini);
+        AnyUtils anyUtils = anyUtilsFactory.getInstance(AnyTypeKind.USER);
 
-        userDAO.save(addPlainAttr(puccini, ctypeSchema, "aa2"));
+        anyUtils.addAttr(validator, userDAO.findKey("bellini"), ctypeSchema, 
"aa1");
+        assertEquals("aa1", userDAO.findByUsername("bellini").
+                
getPlainAttr("ctype").orElseThrow().getValues().get(0).getValueAsString());
 
-        User verdi = userDAO.findByUsername("verdi");
-        assertNotNull(verdi);
+        anyUtils.addAttr(validator, userDAO.findKey("puccini"), ctypeSchema, 
"aa2");
+        assertEquals("aa2", userDAO.findByUsername("puccini").
+                
getPlainAttr("ctype").orElseThrow().getValues().get(0).getValueAsString());
 
-        userDAO.save(addPlainAttr(verdi, ctypeSchema, "aa3"));
+        anyUtils.addAttr(validator, userDAO.findKey("verdi"), ctypeSchema, 
"aa3");
+        assertEquals("aa3", userDAO.findByUsername("verdi").
+                
getPlainAttr("ctype").orElseThrow().getValues().get(0).getValueAsString());
 
-        User vivaldi = userDAO.findByUsername("vivaldi");
-        assertNotNull(vivaldi);
-
-        userDAO.save(addPlainAttr(vivaldi, ctypeSchema, "aa4"));
-
-        User rossini = userDAO.findByUsername("rossini");
-        assertNotNull(rossini);
+        anyUtils.removeAttr(userDAO.findKey("vivaldi"), ctypeSchema);
+        anyUtils.addAttr(validator, userDAO.findKey("vivaldi"), ctypeSchema, 
"aa4");
+        assertEquals("aa4", userDAO.findByUsername("vivaldi").
+                
getPlainAttr("ctype").orElseThrow().getValues().get(0).getValueAsString());
 
-        userDAO.save(addPlainAttr(rossini, ctypeSchema, "aa5"));
+        anyUtils.removeAttr(userDAO.findKey("rossini"), ctypeSchema);
+        anyUtils.addAttr(validator, userDAO.findKey("rossini"), ctypeSchema, 
"aa5");
+        assertEquals("aa5", userDAO.findByUsername("rossini").
+                
getPlainAttr("ctype").orElseThrow().getValues().get(0).getValueAsString());
 
         entityManager().flush();
 
+        AnyCond keyCond = new AnyCond(AttrCond.Type.ISNOTNULL);
+        keyCond.setSchema("key");
+
         OrderByClause orderByCtype = new OrderByClause();
         orderByCtype.setField("ctype");
         orderByCtype.setDirection(OrderByClause.Direction.DESC);
 
-        OrderByClause orderByFirstname = new OrderByClause();
-        orderByFirstname.setField("username");
-        orderByFirstname.setDirection(OrderByClause.Direction.DESC);
-
-        AnyCond idCond = new AnyCond(AttrCond.Type.ISNOTNULL);
-        idCond.setSchema("id");
-
-        List<User> users =
-                searchDAO.search(SearchCond.getLeaf(idCond), 
List.of(orderByCtype, orderByFirstname), AnyTypeKind.USER);
-
-        assertEquals("bellini", users.get(4).getUsername());
-        assertEquals("puccini", users.get(3).getUsername());
-        assertEquals("verdi", users.get(2).getUsername());
-        assertEquals("vivaldi", users.get(1).getUsername());
-        assertEquals("rossini", users.get(0).getUsername());
+        List<User> users = searchDAO.search(
+                SearchCond.getLeaf(keyCond), List.of(orderByCtype), 
AnyTypeKind.USER);
+        assertEquals(
+                List.of("rossini", "vivaldi", "verdi", "puccini", "bellini"),
+                
users.stream().map(User::getUsername).collect(Collectors.toList()));
 
-        // order by ctype even not searching by it
         AttrCond surnameCond = new AttrCond(AttrCond.Type.ILIKE);
         surnameCond.setSchema("surname");
         surnameCond.setExpression("%ini");
@@ -1048,10 +1035,10 @@ public class AnySearchTest extends AbstractTest {
         AttrCond coolCond = new AttrCond(AttrCond.Type.ISNULL);
         coolCond.setSchema("cool");
 
-        users = 
searchDAO.search(SearchCond.getAnd(SearchCond.getLeaf(surnameCond), 
SearchCond.getLeaf(coolCond)),
+        // order by ctype even not searching by it
+        users = searchDAO.search(
+                SearchCond.getAnd(SearchCond.getLeaf(surnameCond), 
SearchCond.getLeaf(coolCond)),
                 List.of(orderByCtype), AnyTypeKind.USER);
-
-        assertFalse(users.isEmpty());
         assertEquals(2, users.size());
 
         // order by unique attribute
@@ -1059,45 +1046,29 @@ public class AnySearchTest extends AbstractTest {
         orderByFullname.setField("fullname");
         orderByFullname.setDirection(OrderByClause.Direction.DESC);
 
-        users = searchDAO.search(SearchCond.getLeaf(idCond), 
List.of(orderByFullname), AnyTypeKind.USER);
-
-        assertEquals("vivaldi", users.get(4).getUsername());
-        assertEquals("puccini", users.get(3).getUsername());
-        assertEquals("rossini", users.get(2).getUsername());
-        assertEquals("verdi", users.get(1).getUsername());
-        assertEquals("bellini", users.get(0).getUsername());
+        users = searchDAO.search(
+                SearchCond.getLeaf(keyCond), List.of(orderByFullname), 
AnyTypeKind.USER);
+        assertEquals(
+                List.of("bellini", "verdi", "rossini", "puccini", "vivaldi"),
+                
users.stream().map(User::getUsername).collect(Collectors.toList()));
     }
 
     @Test
-    public void issueSYNCOPE1922() {
-        User bellini = userDAO.findByUsername("bellini");
-        assertNotNull(bellini);
-
-        PlainSchema obscureSchema = plainSchemaDAO.find("obscure");
-        assertNotNull(obscureSchema);
-
-        userDAO.save(addPlainAttr(bellini, obscureSchema, "myobscurevalue"));
+    void issueSYNCOPE1922() {
+        anyUtilsFactory.getInstance(AnyTypeKind.USER).addAttr(
+                validator,
+                userDAO.findKey("bellini"),
+                plainSchemaDAO.find("obscure"),
+                "myobscurevalue");
 
         entityManager().flush();
 
-        AttrCond obscureCond = new AttrCond(AttrCond.Type.EQ);
-        obscureCond.setSchema("obscure");
-        obscureCond.setExpression("myobscurevalue");
-
-        assertThrows(IllegalArgumentException.class,
-                () -> searchDAO.search(SearchCond.getLeaf(obscureCond), 
AnyTypeKind.USER));
-    }
+        AttrCond cond = new AttrCond(AttrCond.Type.EQ);
+        cond.setSchema("obscure");
+        cond.setExpression("myobscurevalue");
 
-    private User addPlainAttr(final User user, final PlainSchema plainSchema, 
final String value) {
-        user.getPlainAttr(plainSchema.getKey())
-                .ifPresentOrElse(ctype -> 
ctype.getValues().get(0).setStringValue(value), () -> {
-                    UPlainAttr attr = 
entityFactory.newEntity(UPlainAttr.class);
-                    attr.setOwner(user);
-                    attr.setSchema(plainSchema);
-                    attr.add(validator, value, 
anyUtilsFactory.getInstance(AnyTypeKind.USER));
-
-                    user.add(attr);
-                });
-        return user;
+        assertThrows(
+                IllegalArgumentException.class,
+                () -> searchDAO.search(SearchCond.getLeaf(cond), 
AnyTypeKind.USER));
     }
 }
diff --git 
a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDirectoryPanel.java
 
b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDirectoryPanel.java
index ff5264f24d..1bcc71b226 100644
--- 
a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDirectoryPanel.java
+++ 
b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDirectoryPanel.java
@@ -113,6 +113,10 @@ public class UserRequestFormDirectoryPanel
                 ((UserRequestFormsWidget) widget).refreshLatestAlerts(target);
             }
 
+            if (actionTogglePanel.isVisibleInHierarchy()) {
+                actionTogglePanel.toggle(target, false);
+            }
+
             manageFormModal.show(false);
         });
 
diff --git 
a/ext/oidcc4ui/client-console/src/main/java/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel.java
 
b/ext/oidcc4ui/client-console/src/main/java/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel.java
index 8961e524b6..63594c21b7 100644
--- 
a/ext/oidcc4ui/client-console/src/main/java/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel.java
+++ 
b/ext/oidcc4ui/client-console/src/main/java/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel.java
@@ -117,7 +117,7 @@ public class OIDCProvidersDirectoryPanel extends 
DirectoryPanel<
                 setFooterVisible(false);
             }
         };
-        templateModal.setWindowClosedCallback(target -> 
templateModal.show(false));
+        setWindowClosedReloadCallback(templateModal);
         templateModal.size(Modal.Size.Large);
         addOuterObject(templateModal);
 
diff --git 
a/ext/saml2sp4ui/client-console/src/main/java/org/apache/syncope/client/console/panels/SAML2IdPsDirectoryPanel.java
 
b/ext/saml2sp4ui/client-console/src/main/java/org/apache/syncope/client/console/panels/SAML2IdPsDirectoryPanel.java
index 3705c9cb9a..b9210a3217 100644
--- 
a/ext/saml2sp4ui/client-console/src/main/java/org/apache/syncope/client/console/panels/SAML2IdPsDirectoryPanel.java
+++ 
b/ext/saml2sp4ui/client-console/src/main/java/org/apache/syncope/client/console/panels/SAML2IdPsDirectoryPanel.java
@@ -107,10 +107,7 @@ public class SAML2IdPsDirectoryPanel extends 
DirectoryPanel<
 
         modal.addSubmitButton();
         modal.size(Modal.Size.Large);
-        modal.setWindowClosedCallback(target -> {
-            updateResultTable(target);
-            modal.show(false);
-        });
+        setWindowClosedReloadCallback(modal, true);
 
         addOuterObject(metadataModal);
         setWindowClosedReloadCallback(metadataModal);
@@ -126,7 +123,7 @@ public class SAML2IdPsDirectoryPanel extends DirectoryPanel<
                 setFooterVisible(false);
             }
         };
-        templateModal.setWindowClosedCallback(target -> 
templateModal.show(false));
+        setWindowClosedReloadCallback(templateModal);
         templateModal.size(Modal.Size.Large);
         addOuterObject(templateModal);
 
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BatchesITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BatchesITCase.java
index 05d5f43420..20ac76a4b6 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BatchesITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BatchesITCase.java
@@ -83,31 +83,31 @@ public class BatchesITCase extends AbstractConsoleITCase {
                 + 
":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:4:"
                 + "action:action");
 
-        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:0:outer:form:content:status:"
                 + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
                 + "checkgroup:dataTable", WebMarkupContainer.class);
 
         component = findComponentByProp("resource",
-                TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
+                TAB_PANEL + "outerObjectsRepeater:0:outer:form:content:status:"
                 + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
                 + "checkgroup:dataTable", "resource-csv");
         assertNotNull(component);
 
         FormTester formTester = TESTER.newFormTester(
-                TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:"
+                TAB_PANEL + 
"outerObjectsRepeater:0:outer:form:content:status:firstLevelContainer:"
                 + 
"first:container:content:searchContainer:resultTable:tablePanel:groupForm");
         assertNotNull(formTester);
 
         formTester.select("checkgroup", 0);
 
-        TESTER.executeAjaxEvent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+        TESTER.executeAjaxEvent(TAB_PANEL + 
"outerObjectsRepeater:0:outer:form:content:status:"
                 + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:batchLink",
                 Constants.ON_CLICK);
 
-        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:0:outer:form:content:status:"
                 + "secondLevelContainer:second:container", 
WebMarkupContainer.class);
 
-        assertNotNull(findComponentByProp("resource", TAB_PANEL + 
"outerObjectsRepeater:2:outer:"
+        assertNotNull(findComponentByProp("resource", TAB_PANEL + 
"outerObjectsRepeater:0:outer:"
                 + "form:content:status:secondLevelContainer:second:container", 
"resource-csv"));
     }
 
@@ -137,12 +137,12 @@ public class BatchesITCase extends AbstractConsoleITCase {
                 + 
":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:3:"
                 + "action:action");
 
-        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:0:outer:form:content:status:"
                 + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
                 + "checkgroup:dataTable", WebMarkupContainer.class);
 
         component = findComponentByProp("resource",
-                TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:first:container:"
+                TAB_PANEL + 
"outerObjectsRepeater:0:outer:form:content:status:firstLevelContainer:first:container:"
                 + 
"content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable",
 resource);
 
         component = 
TESTER.getComponentFromLastRenderedPage(component.getPageRelativePath()
@@ -151,37 +151,37 @@ public class BatchesITCase extends AbstractConsoleITCase {
         assertEquals(resource, 
StatusBean.class.cast(component.getDefaultModelObject()).getResource());
 
         FormTester formTester = TESTER.newFormTester(
-                TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:"
+                TAB_PANEL + 
"outerObjectsRepeater:0:outer:form:content:status:firstLevelContainer:"
                 + 
"first:container:content:searchContainer:resultTable:tablePanel:groupForm");
         assertNotNull(formTester);
 
         formTester.select("checkgroup", index);
 
-        TESTER.executeAjaxEvent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+        TESTER.executeAjaxEvent(TAB_PANEL + 
"outerObjectsRepeater:0:outer:form:content:status:"
                 + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:batchLink",
                 Constants.ON_CLICK);
 
-        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:0:outer:form:content:status:"
                 + "secondLevelContainer:second:container", 
WebMarkupContainer.class);
 
         // suspend link
         TESTER.executeAjaxEvent(TAB_PANEL
-                + 
"outerObjectsRepeater:2:outer:form:content:status:secondLevelContainer:"
+                + 
"outerObjectsRepeater:0:outer:form:content:status:secondLevelContainer:"
                 + "second:container:actions:actionRepeater:0:action:action",
                 Constants.ON_CLICK);
 
         assertSuccessMessage();
         TESTER.cleanupFeedbackMessages();
 
-        TESTER.assertLabel(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+        TESTER.assertLabel(TAB_PANEL + 
"outerObjectsRepeater:0:outer:form:content:status:"
                 + 
"secondLevelContainer:second:container:selectedObjects:body:rows:1:cells:4:cell",
 "SUCCESS");
 
         TESTER.executeAjaxEvent(TAB_PANEL
-                + 
"outerObjectsRepeater:2:outer:form:content:status:secondLevelContainer:back",
+                + 
"outerObjectsRepeater:0:outer:form:content:status:secondLevelContainer:back",
                 Constants.ON_CLICK);
 
         component = findComponentByProp("resource",
-                TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:first:container:"
+                TAB_PANEL + 
"outerObjectsRepeater:0:outer:form:content:status:firstLevelContainer:first:container:"
                 + 
"content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable",
 resource);
 
         component = 
TESTER.getComponentFromLastRenderedPage(component.getPageRelativePath()
@@ -204,42 +204,42 @@ public class BatchesITCase extends AbstractConsoleITCase {
                 + 
":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:3:"
                 + "action:action");
 
-        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:0:outer:form:content:status:"
                 + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
                 + "checkgroup:dataTable", WebMarkupContainer.class);
 
         formTester = TESTER.newFormTester(
-                TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:"
+                TAB_PANEL + 
"outerObjectsRepeater:0:outer:form:content:status:firstLevelContainer:"
                 + 
"first:container:content:searchContainer:resultTable:tablePanel:groupForm");
         assertNotNull(formTester);
 
         formTester.select("checkgroup", index);
 
-        TESTER.executeAjaxEvent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+        TESTER.executeAjaxEvent(TAB_PANEL + 
"outerObjectsRepeater:0:outer:form:content:status:"
                 + 
"firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:batchLink",
                 Constants.ON_CLICK);
 
-        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:0:outer:form:content:status:"
                 + "secondLevelContainer:second:container", 
WebMarkupContainer.class);
 
         // suspend link
         TESTER.executeAjaxEvent(TAB_PANEL
-                + 
"outerObjectsRepeater:2:outer:form:content:status:secondLevelContainer:"
+                + 
"outerObjectsRepeater:0:outer:form:content:status:secondLevelContainer:"
                 + "second:container:actions:actionRepeater:1:action:action",
                 Constants.ON_CLICK);
 
         assertSuccessMessage();
         TESTER.cleanupFeedbackMessages();
 
-        TESTER.assertLabel(TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:"
+        TESTER.assertLabel(TAB_PANEL + 
"outerObjectsRepeater:0:outer:form:content:status:"
                 + 
"secondLevelContainer:second:container:selectedObjects:body:rows:1:cells:4:cell",
 "SUCCESS");
 
         TESTER.executeAjaxEvent(TAB_PANEL
-                + 
"outerObjectsRepeater:2:outer:form:content:status:secondLevelContainer:back",
+                + 
"outerObjectsRepeater:0:outer:form:content:status:secondLevelContainer:back",
                 Constants.ON_CLICK);
 
         component = findComponentByProp("resource",
-                TAB_PANEL + 
"outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:first:container:"
+                TAB_PANEL + 
"outerObjectsRepeater:0:outer:form:content:status:firstLevelContainer:first:container:"
                 + 
"content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable",
 resource);
 
         component = 
TESTER.getComponentFromLastRenderedPage(component.getPageRelativePath()
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/LinkedAccountsITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/LinkedAccountsITCase.java
index 74bcaaa44b..1bce33f970 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/LinkedAccountsITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/LinkedAccountsITCase.java
@@ -124,12 +124,14 @@ public class LinkedAccountsITCase extends 
AbstractConsoleITCase {
         TESTER.clickLink(TAB_PANEL + 
"outerObjectsRepeater:1:outer:container:content:togglePanelContainer:container:"
                 + "actions:actions:actionRepeater:6:action:action");
         // Search for user
-        TESTER.executeAjaxEvent(USER_SEARCH_FORM + "content:panelPlus:add", 
Constants.ON_CLICK);
-        FormTester formTester = TESTER.newFormTester(USER_SEARCH_FORM);
+        TESTER.executeAjaxEvent(USER_SEARCH_FORM.replace(":2:", ":0:") + 
"content:panelPlus:add", Constants.ON_CLICK);
+        FormTester formTester = 
TESTER.newFormTester(USER_SEARCH_FORM.replace(":2:", ":0:"));
 
-        DropDownChoice<?> type = (DropDownChoice<?>) 
TESTER.getComponentFromLastRenderedPage(USER_SEARCH_FORM
+        DropDownChoice<?> type = (DropDownChoice<?>) 
TESTER.getComponentFromLastRenderedPage(
+                USER_SEARCH_FORM.replace(":2:", ":0:")
                 + "content:view:0:panel:container:type:dropDownChoiceField");
-        TESTER.executeAjaxEvent(USER_SEARCH_FORM + 
"content:view:0:panel:container:type:dropDownChoiceField",
+        TESTER.executeAjaxEvent(USER_SEARCH_FORM.replace(":2:", ":0:")
+                + "content:view:0:panel:container:type:dropDownChoiceField",
                 Constants.ON_CHANGE);
         type.setModelValue(new String[] { "ATTRIBUTE" });
         type.setDefaultModelObject(SearchClause.Type.ATTRIBUTE);
@@ -149,32 +151,33 @@ public class LinkedAccountsITCase extends 
AbstractConsoleITCase {
         TESTER.assertNoErrorMessage();
 
         // Locate result in data table
-        Component comp = findComponentByProp("username", TAB_PANEL + 
SEARCH_PANEL + RESULT_DATA_TABLE, USER.
-                getUsername());
+        Component comp = findComponentByProp("username", TAB_PANEL + 
SEARCH_PANEL.replace(":2:", ":0:")
+                + RESULT_DATA_TABLE, USER.getUsername());
         TESTER.executeAjaxEvent(comp.getPageRelativePath(), 
Constants.ON_CLICK);
 
         // Select user
-        TESTER.clickLink(TAB_PANEL + SEARCH_PANEL + SELECT_USER_ACTION);
+        TESTER.clickLink(TAB_PANEL + SEARCH_PANEL.replace(":2:", ":0:") + 
SELECT_USER_ACTION);
 
         // move onto the next panel
-        TESTER.getComponentFromLastRenderedPage(TAB_PANEL + FORM + 
"view").setEnabled(false);
-        formTester = TESTER.newFormTester(TAB_PANEL + FORM);
+        TESTER.getComponentFromLastRenderedPage(TAB_PANEL + 
FORM.replace(":2:", ":0:") + "view").setEnabled(false);
+        formTester = TESTER.newFormTester(TAB_PANEL + FORM.replace(":2:", 
":0:"));
         formTester.submit("buttons:next");
 
         // Select a resource
-        comp = findComponentByProp("key", TAB_PANEL + FORM + 
RESOURCES_DATA_TABLE + "body:rows", "resource-ldap");
+        comp = findComponentByProp("key", TAB_PANEL + FORM.replace(":2:", 
":0:") + RESOURCES_DATA_TABLE + "body:rows",
+                "resource-ldap");
         assertNotNull(comp);
         TESTER.executeAjaxEvent(comp.getPageRelativePath(), 
Constants.ON_CLICK);
-        TESTER.clickLink(TAB_PANEL + FORM + SELECT_RESOURCE_ACTION);
+        TESTER.clickLink(TAB_PANEL + FORM.replace(":2:", ":0:") + 
SELECT_RESOURCE_ACTION);
 
         // move onto the next panel
-        TESTER.getComponentFromLastRenderedPage(TAB_PANEL + FORM + 
"view").setEnabled(false);
-        formTester = TESTER.newFormTester(TAB_PANEL + FORM);
+        TESTER.getComponentFromLastRenderedPage(TAB_PANEL + 
FORM.replace(":2:", ":0:") + "view").setEnabled(false);
+        formTester = TESTER.newFormTester(TAB_PANEL + FORM.replace(":2:", 
":0:"));
         formTester.submit("buttons:next");
 
         // Finish merge
-        TESTER.getComponentFromLastRenderedPage(TAB_PANEL + FORM + 
"view").setEnabled(false);
-        formTester = TESTER.newFormTester(TAB_PANEL + FORM);
+        TESTER.getComponentFromLastRenderedPage(TAB_PANEL + 
FORM.replace(":2:", ":0:") + "view").setEnabled(false);
+        formTester = TESTER.newFormTester(TAB_PANEL + FORM.replace(":2:", 
":0:"));
         formTester.submit("buttons:finish");
 
         UserService userService = 
SyncopeConsoleSession.get().getService(UserService.class);
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java
index fc1c7faed4..a74d6058fd 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java
@@ -1144,7 +1144,7 @@ public class SearchITCase extends AbstractITCase {
     }
 
     @Test
-    public void issueSYNCOPE1922() {
+    void issueSYNCOPE1922() {
         // 1. set encrypted value
         updateUser(new 
UserUR.Builder(USER_SERVICE.read("bellini").getKey()).plainAttr(
                 attrAddReplacePatch("obscure", "myobscurevalue")).build());

Reply via email to