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

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

commit 091050d20a0b8a0ad04e5bcabdf8219fc677f530
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      |  35 ++++---
 .../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    |  11 +-
 .../wicket/markup/html/form/ActionLink.java        |   3 -
 .../markup/html/form/ActionLinksTogglePanel.java   |  12 ++-
 .../wicket/markup/html/form/ActionPanel.java       |  18 +---
 .../syncope/client/console/widgets/JobWidget.java  |   4 +-
 .../org/apache/syncope/core/logic/UserLogic.java   |   3 +-
 .../core/persistence/jpa/inner/AnySearchTest.java  | 113 +++++++++------------
 .../persistence/neo4j/inner/AnySearchTest.java     |  84 +++++++++++----
 .../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 +-
 36 files changed, 241 insertions(+), 242 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 fa3dde612d..ed955350ac 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
@@ -80,10 +80,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 8701492598..d546ea7884 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 735d7cc99b..279fa58bb0 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
@@ -111,11 +111,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 e21795f5ba..c6683bba7f 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
@@ -66,11 +66,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 1ed239555c..f5fa77fbf0 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();
@@ -344,7 +356,6 @@ public abstract class DirectoryPanel<
     @Override
     public void onEvent(final IEvent<?> event) {
         if (event.getPayload() instanceof final EventDataWrapper data) {
-
             if (data.getRows() < 1) {
                 updateResultTable(data.isCreate());
             } else {
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 6565ca4b1a..24fc357842 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
@@ -70,15 +70,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 f081fec8e8..79afc603d7 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 e2ca9f4c09..4924685f17 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 e2248a7f53..46f156ddb2 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;
@@ -143,8 +144,8 @@ public class BaseModal<T extends Serializable> extends 
Modal<T> {
     }
 
     public BaseModal<T> setContent(final ModalPanel component) {
-        if (component instanceof Panel) {
-            return setInternalContent(Panel.class.cast(component));
+        if (component instanceof Panel panel) {
+            return setInternalContent(panel);
         }
         throw new IllegalArgumentException("Panel instance is required");
     }
@@ -185,9 +186,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() {
@@ -360,7 +359,7 @@ public class BaseModal<T extends Serializable> extends 
Modal<T> {
                 + (showImmediately() ? ".show()" : "")
                 + ";";
     }
-    
+
     /**
      * adds close handler to initializer script, if use of close handler has 
been defined.
      *
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 a04d0a9b27..faaaf2f3d4 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
@@ -129,9 +129,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 7f42f86846..983c6f039d 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 final UserTO userTO) {
             header = userTO.getUsername();
@@ -104,19 +105,20 @@ public class ActionLinksTogglePanel<T extends 
Serializable> extends TogglePanel<
         } else if (modelObject instanceof final CommandWrapper commandWrapper) 
{
             header = commandWrapper.getCommand().getKey();
         } else if (modelObject instanceof final JobTO jobTO) {
-            header = jobTO.getRefKey() == null
-                    ? jobTO.getRefDesc() : jobTO.getRefKey();
+            header = jobTO.getRefKey() == null ? jobTO.getRefDesc() : 
jobTO.getRefKey();
         } else if (modelObject instanceof final ToggleableTarget 
toggleableTarget) {
             header = toggleableTarget.getAnyType();
         } else if (modelObject instanceof final Domain domain) {
             header = domain.getKey();
         } else if (modelObject instanceof final CommandTO commandTO) {
             header = commandTO.getKey();
+        } else if (modelObject instanceof final NetworkService networkService) 
{
+            header = networkService.getAddress();
         } else if (modelObject instanceof final NamedEntityTO entity) {
             header = entity.getName();
         } else if (modelObject instanceof final EntityTO entityTO) {
             header = entityTO.getKey();
-        } else if (modelObject instanceof final EntityWrapper entityWrapper) {
+        } else if (modelObject instanceof final EntityWrapper<?> 
entityWrapper) {
             EntityTO inner = entityWrapper.getInnerObject();
             header = inner instanceof final NamedEntityTO namedEntityTO ? 
namedEntityTO.getName() : inner.getKey();
         } else {
@@ -133,7 +135,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..8b7e01ed8a 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,24 +169,16 @@ 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();
         // ---------------------------
     }
 
     protected void beforeOnClick(final AjaxRequestTarget target) {
-        switch (this.action.getType()) {
-            case DELETE:
-            case CREATE:
-            case MEMBERS:
-            case MAPPING:
-            case SET_LATEST_SYNC_TOKEN:
-            case REMOVE_SYNC_TOKEN:
-            case EDIT_APPROVAL:
-            case CLAIM:
+        switch (action.getType()) {
+            case DELETE, CREATE, MEMBERS, MAPPING, SET_LATEST_SYNC_TOKEN, 
REMOVE_SYNC_TOKEN, EDIT_APPROVAL, CLAIM ->
                 send(this, Broadcast.BUBBLE, new 
ActionLinksTogglePanel.ActionLinkToggleCloseEventPayload(target));
-                break;
-            default:
-                break;
+            default -> {
+            }
         }
     }
 }
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/JobWidget.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/JobWidget.java
index 59f219287b..f5556a5556 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/JobWidget.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/JobWidget.java
@@ -273,11 +273,11 @@ public class JobWidget extends BaseWidget {
 
     @Override
     public void onEvent(final IEvent<?> event) {
-        if (event.getPayload() instanceof JobActionPanel.JobActionPayload) {
+        if (event.getPayload() instanceof JobActionPanel.JobActionPayload 
payload) {
             available.clear();
             available.addAll(getUpdatedAvailable());
             availableJobsPanel.modelChanged();
-            
JobActionPanel.JobActionPayload.class.cast(event.getPayload()).getTarget().add(availableJobsPanel);
+            payload.getTarget().add(availableJobsPanel);
         }
     }
 
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 ffcbaa991d..f419e91a2a 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
@@ -591,8 +591,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 1a1f45812c..a7e2b750d5 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
@@ -58,6 +58,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.AnyUtils;
 import org.apache.syncope.core.persistence.api.entity.PlainAttr;
 import org.apache.syncope.core.persistence.api.entity.PlainSchema;
 import org.apache.syncope.core.persistence.api.entity.anyobject.AMembership;
@@ -960,50 +961,44 @@ public class AnySearchTest extends AbstractTest {
     }
 
     @Test
-    public void issueSYNCOPE1906() {
-        User bellini = userDAO.findByUsername("bellini").orElseThrow();
-
+    void issueSYNCOPE1906() {
         PlainSchema ctypeSchema = 
plainSchemaDAO.findById("ctype").orElseThrow();
-        assertNotNull(ctypeSchema);
-
-        userDAO.save(addPlainAttr(bellini, ctypeSchema, "aa1"));
-
-        User puccini = userDAO.findByUsername("puccini").orElseThrow();
-        assertNotNull(bellini);
 
-        userDAO.save(addPlainAttr(puccini, ctypeSchema, "aa2"));
+        AnyUtils anyUtils = anyUtilsFactory.getInstance(AnyTypeKind.USER);
 
-        User verdi = userDAO.findByUsername("verdi").orElseThrow();
-        assertNotNull(verdi);
+        anyUtils.addAttr(validator, userDAO.findKey("bellini").orElseThrow(), 
ctypeSchema, "aa1");
+        assertEquals("aa1", userDAO.findByUsername("bellini").orElseThrow().
+                
getPlainAttr("ctype").orElseThrow().getValues().getFirst().getValueAsString());
 
-        userDAO.save(addPlainAttr(verdi, ctypeSchema, "aa3"));
+        anyUtils.addAttr(validator, userDAO.findKey("puccini").orElseThrow(), 
ctypeSchema, "aa2");
+        assertEquals("aa2", userDAO.findByUsername("puccini").orElseThrow().
+                
getPlainAttr("ctype").orElseThrow().getValues().getFirst().getValueAsString());
 
-        User vivaldi = userDAO.findByUsername("vivaldi").orElseThrow();
-        assertNotNull(vivaldi);
+        anyUtils.addAttr(validator, userDAO.findKey("verdi").orElseThrow(), 
ctypeSchema, "aa3");
+        assertEquals("aa3", userDAO.findByUsername("verdi").orElseThrow().
+                
getPlainAttr("ctype").orElseThrow().getValues().getFirst().getValueAsString());
 
-        userDAO.save(addPlainAttr(vivaldi, ctypeSchema, "aa4"));
+        anyUtils.removeAttr(userDAO.findKey("vivaldi").orElseThrow(), 
ctypeSchema);
+        anyUtils.addAttr(validator, userDAO.findKey("vivaldi").orElseThrow(), 
ctypeSchema, "aa4");
+        assertEquals("aa4", userDAO.findByUsername("vivaldi").orElseThrow().
+                
getPlainAttr("ctype").orElseThrow().getValues().getFirst().getValueAsString());
 
-        User rossini = userDAO.findByUsername("rossini").orElseThrow();
-        assertNotNull(rossini);
-
-        userDAO.save(addPlainAttr(rossini, ctypeSchema, "aa5"));
+        anyUtils.removeAttr(userDAO.findKey("rossini").orElseThrow(), 
ctypeSchema);
+        anyUtils.addAttr(validator, userDAO.findKey("rossini").orElseThrow(), 
ctypeSchema, "aa5");
+        assertEquals("aa5", userDAO.findByUsername("rossini").orElseThrow().
+                
getPlainAttr("ctype").orElseThrow().getValues().getFirst().getValueAsString());
 
         entityManager.flush();
 
-        AnyCond idCond = new AnyCond(AttrCond.Type.ISNOTNULL);
-        idCond.setSchema("id");
-
-        List<User> users =
-                searchDAO.search(SearchCond.of(idCond), List.of(new 
Sort.Order(Sort.Direction.DESC, "ctype")),
-                        AnyTypeKind.USER);
+        AnyCond keyCond = new AnyCond(AttrCond.Type.ISNOTNULL);
+        keyCond.setSchema("key");
 
-        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.of(keyCond), List.of(new 
Sort.Order(Sort.Direction.DESC, "ctype")), AnyTypeKind.USER);
+        assertEquals(
+                List.of("rossini", "vivaldi", "verdi", "puccini", "bellini"),
+                users.stream().map(User::getUsername).toList());
 
-        // order by ctype even not searching by it
         AttrCond surnameCond = new AttrCond(AttrCond.Type.ILIKE);
         surnameCond.setSchema("surname");
         surnameCond.setExpression("%ini");
@@ -1011,50 +1006,34 @@ public class AnySearchTest extends AbstractTest {
         AttrCond coolCond = new AttrCond(AttrCond.Type.ISNULL);
         coolCond.setSchema("cool");
 
-        users = searchDAO.search(SearchCond.and(SearchCond.of(surnameCond), 
SearchCond.of(coolCond)),
+        // order by ctype even not searching by it
+        users = searchDAO.search(
+                SearchCond.and(SearchCond.of(surnameCond), 
SearchCond.of(coolCond)),
                 List.of(new Sort.Order(Sort.Direction.DESC, "ctype")), 
AnyTypeKind.USER);
-
-        assertFalse(users.isEmpty());
         assertEquals(2, users.size());
-        
-        // order by unique attribute
-        users = searchDAO.search(SearchCond.of(idCond), List.of(new 
Sort.Order(Sort.Direction.DESC, "fullname")),
-                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());
+        // order by unique attribute
+        users = searchDAO.search(
+                SearchCond.of(keyCond), List.of(new 
Sort.Order(Sort.Direction.DESC, "fullname")), AnyTypeKind.USER);
+        assertEquals(
+                List.of("bellini", "verdi", "rossini", "puccini", "vivaldi"),
+                users.stream().map(User::getUsername).toList());
     }
 
     @Test
-    public void issueSYNCOPE1922() {
-        User bellini = userDAO.findByUsername("bellini").orElseThrow();
-
-        PlainSchema obscureSchema = 
plainSchemaDAO.findById("obscure").orElseThrow();
-
-        userDAO.save(addPlainAttr(bellini, obscureSchema, "myobscurevalue"));
+    void issueSYNCOPE1922() {
+        anyUtilsFactory.getInstance(AnyTypeKind.USER).addAttr(
+                validator,
+                userDAO.findKey("bellini").orElseThrow(),
+                plainSchemaDAO.findById("obscure").orElseThrow(),
+                "myobscurevalue");
 
         entityManager.flush();
 
-        AttrCond obscureCond = new AttrCond(AttrCond.Type.EQ);
-        obscureCond.setSchema("obscure");
-        obscureCond.setExpression("myobscurevalue");
-
-        assertThrows(IllegalArgumentException.class,
-                () -> searchDAO.search(SearchCond.of(obscureCond), 
AnyTypeKind.USER));
-    }
-
-    private User addPlainAttr(final User user, final PlainSchema plainSchema, 
final String value) {
-        user.getPlainAttr(plainSchema.getKey())
-                .ifPresentOrElse(ctype -> 
ctype.getValues().get(0).setStringValue(value), () -> {
-                    PlainAttr attr = new PlainAttr();
-                    attr.setPlainSchema(plainSchema);
-                    attr.add(validator, value);
+        AttrCond cond = new AttrCond(AttrCond.Type.EQ);
+        cond.setSchema("obscure");
+        cond.setExpression("myobscurevalue");
 
-                    user.add(attr);
-                });
-        return user;
+        assertThrows(IllegalArgumentException.class, () -> 
searchDAO.search(SearchCond.of(cond), AnyTypeKind.USER));
     }
 }
diff --git 
a/core/persistence-neo4j/src/test/java/org/apache/syncope/core/persistence/neo4j/inner/AnySearchTest.java
 
b/core/persistence-neo4j/src/test/java/org/apache/syncope/core/persistence/neo4j/inner/AnySearchTest.java
index 5f8060b022..d83ea87dcf 100644
--- 
a/core/persistence-neo4j/src/test/java/org/apache/syncope/core/persistence/neo4j/inner/AnySearchTest.java
+++ 
b/core/persistence-neo4j/src/test/java/org/apache/syncope/core/persistence/neo4j/inner/AnySearchTest.java
@@ -58,6 +58,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.AnyUtils;
 import org.apache.syncope.core.persistence.api.entity.PlainAttr;
 import org.apache.syncope.core.persistence.api.entity.PlainSchema;
 import org.apache.syncope.core.persistence.api.entity.anyobject.AMembership;
@@ -986,30 +987,75 @@ public class AnySearchTest extends AbstractTest {
     }
 
     @Test
-    public void issueSYNCOPE1922() {
-        User bellini = userDAO.findByUsername("bellini").orElseThrow();
+    void issueSYNCOPE1906() {
+        PlainSchema ctypeSchema = 
plainSchemaDAO.findById("ctype").orElseThrow();
 
-        PlainSchema obscureSchema = 
plainSchemaDAO.findById("obscure").orElseThrow();
+        AnyUtils anyUtils = anyUtilsFactory.getInstance(AnyTypeKind.USER);
 
-        userDAO.save(addPlainAttr(bellini, obscureSchema, "myobscurevalue"));
+        anyUtils.addAttr(validator, userDAO.findKey("bellini").orElseThrow(), 
ctypeSchema, "aa1");
+        assertEquals("aa1", userDAO.findByUsername("bellini").orElseThrow().
+                
getPlainAttr("ctype").orElseThrow().getValues().getFirst().getValueAsString());
 
-        AttrCond obscureCond = new AttrCond(AttrCond.Type.EQ);
-        obscureCond.setSchema("obscure");
-        obscureCond.setExpression("myobscurevalue");
+        anyUtils.addAttr(validator, userDAO.findKey("puccini").orElseThrow(), 
ctypeSchema, "aa2");
+        assertEquals("aa2", userDAO.findByUsername("puccini").orElseThrow().
+                
getPlainAttr("ctype").orElseThrow().getValues().getFirst().getValueAsString());
 
-        assertThrows(IllegalArgumentException.class,
-                () -> searchDAO.search(SearchCond.of(obscureCond), 
AnyTypeKind.USER));
-    }
+        anyUtils.addAttr(validator, userDAO.findKey("verdi").orElseThrow(), 
ctypeSchema, "aa3");
+        assertEquals("aa3", userDAO.findByUsername("verdi").orElseThrow().
+                
getPlainAttr("ctype").orElseThrow().getValues().getFirst().getValueAsString());
+
+        anyUtils.removeAttr(userDAO.findKey("vivaldi").orElseThrow(), 
ctypeSchema);
+        anyUtils.addAttr(validator, userDAO.findKey("vivaldi").orElseThrow(), 
ctypeSchema, "aa4");
+        assertEquals("aa4", userDAO.findByUsername("vivaldi").orElseThrow().
+                
getPlainAttr("ctype").orElseThrow().getValues().getFirst().getValueAsString());
+
+        anyUtils.removeAttr(userDAO.findKey("rossini").orElseThrow(), 
ctypeSchema);
+        anyUtils.addAttr(validator, userDAO.findKey("rossini").orElseThrow(), 
ctypeSchema, "aa5");
+        assertEquals("aa5", userDAO.findByUsername("rossini").orElseThrow().
+                
getPlainAttr("ctype").orElseThrow().getValues().getFirst().getValueAsString());
+
+        AnyCond keyCond = new AnyCond(AttrCond.Type.ISNOTNULL);
+        keyCond.setSchema("key");
+
+        List<User> users = searchDAO.search(
+                SearchCond.of(keyCond), List.of(new 
Sort.Order(Sort.Direction.DESC, "ctype")), AnyTypeKind.USER);
+        assertEquals(
+                List.of("rossini", "vivaldi", "verdi", "puccini", "bellini"),
+                users.stream().map(User::getUsername).toList());
+
+        AttrCond surnameCond = new AttrCond(AttrCond.Type.ILIKE);
+        surnameCond.setSchema("surname");
+        surnameCond.setExpression("%ini");
 
-    protected User addPlainAttr(final User user, final PlainSchema 
plainSchema, final String value) {
-        user.getPlainAttr(plainSchema.getKey())
-                .ifPresentOrElse(ctype -> 
ctype.getValues().get(0).setStringValue(value), () -> {
-                    PlainAttr attr = new PlainAttr();
-                    attr.setPlainSchema(plainSchema);
-                    attr.add(validator, value);
+        AttrCond coolCond = new AttrCond(AttrCond.Type.ISNULL);
+        coolCond.setSchema("cool");
 
-                    user.add(attr);
-                });
-        return user;
+        // order by ctype even not searching by it
+        users = searchDAO.search(
+                SearchCond.and(SearchCond.of(surnameCond), 
SearchCond.of(coolCond)),
+                List.of(new Sort.Order(Sort.Direction.DESC, "ctype")), 
AnyTypeKind.USER);
+        assertEquals(2, users.size());
+
+        // order by unique attribute
+        users = searchDAO.search(
+                SearchCond.of(keyCond), List.of(new 
Sort.Order(Sort.Direction.DESC, "fullname")), AnyTypeKind.USER);
+        assertEquals(
+                List.of("bellini", "verdi", "rossini", "puccini", "vivaldi"),
+                users.stream().map(User::getUsername).toList());
+    }
+
+    @Test
+    void issueSYNCOPE1922() {
+        anyUtilsFactory.getInstance(AnyTypeKind.USER).addAttr(
+                validator,
+                userDAO.findKey("bellini").orElseThrow(),
+                plainSchemaDAO.findById("obscure").orElseThrow(),
+                "myobscurevalue");
+
+        AttrCond cond = new AttrCond(AttrCond.Type.EQ);
+        cond.setSchema("obscure");
+        cond.setExpression("myobscurevalue");
+
+        assertThrows(IllegalArgumentException.class, () -> 
searchDAO.search(SearchCond.of(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 001493347f..ddce479d77 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
                 components.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 4e735fe356..c7d9e92723 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 fceb950a64..d7f0557a9e 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 becfc268c6..8a0fc795fa 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 7b4a0891bd..ac40b32bbd 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
@@ -1165,7 +1165,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