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

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

commit 5d60a27dcd3db368e4aad1504a9e6db3c481cbcf
Author: Francesco Chicchiriccò <[email protected]>
AuthorDate: Wed Sep 16 11:03:36 2026 +0200

    [SYNCOPE-1995] Reworking webSocket-based timers for Tasks and Reports
---
 .../client/console/panels/DirectoryPanel.java      | 20 ++++++++++++
 .../client/console/panels/UserDirectoryPanel.java  | 36 ++++++++++++----------
 .../console/reports/ReportDirectoryPanel.java      | 13 +-------
 .../console/tasks/SchedTaskDirectoryPanel.java     | 13 +-------
 4 files changed, 42 insertions(+), 40 deletions(-)

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 ad1158cb8b..227f117fa9 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
@@ -24,6 +24,7 @@ import java.io.Serializable;
 import java.util.Collection;
 import java.util.List;
 import java.util.Optional;
+import java.util.concurrent.TimeUnit;
 import java.util.function.BiConsumer;
 import org.apache.syncope.client.console.PreferenceManager;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
@@ -32,6 +33,7 @@ import 
org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.Bas
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import 
org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksTogglePanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
+import org.apache.syncope.client.console.wicket.ws.BasePageWebSocketBehavior;
 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;
@@ -48,6 +50,7 @@ import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.protocol.ws.api.WebSocketRequestHandler;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -61,6 +64,23 @@ public abstract class DirectoryPanel<
 
     protected static final JsonMapper MAPPER = 
JsonMapper.builder().findAndAddModules().build();
 
+    protected class OnTimerUpdateResultTable extends 
BasePageWebSocketBehavior.OnTimerChild {
+
+        private static final long serialVersionUID = 532119924423529449L;
+
+        public OnTimerUpdateResultTable() {
+            super(10, TimeUnit.SECONDS);
+        }
+
+        @Override
+        protected void onTimer(final WebSocketRequestHandler handler) {
+            updateResultTable(false);
+            if (container.isVisibleInHierarchy()) {
+                handler.add(container);
+            }
+        }
+    }
+
     protected E restClient;
 
     /**
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 774f4e5324..1c444027b6 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
@@ -229,25 +229,29 @@ public class UserDirectoryPanel extends 
AnyDirectoryPanel<UserTO, UserRestClient
                         setRealm(realm);
             }
 
-            panel.add(new ActionLink<>() {
+            if (confParamOps.get(SyncopeConsoleSession.get().getDomain(),
+                    StandardConfParams.MFA_ENABLED, false, boolean.class)) {
 
-                private static final long serialVersionUID = 
-7978723352517770644L;
+                panel.add(new ActionLink<>() {
 
-                @Override
-                public void onClick(final AjaxRequestTarget target, final 
UserTO ignore) {
-                    try {
-                        mfaRestClient.dismiss(model.getObject().getUsername());
-
-                        
SyncopeConsoleSession.get().success(getString(Constants.OPERATION_SUCCEEDED));
-                        target.add(container);
-                    } catch (Exception e) {
-                        LOG.error("While dismissing MFA for {}", 
model.getObject().getuManager(), e);
-                        SyncopeConsoleSession.get().onException(e);
+                    private static final long serialVersionUID = 
-7978723352517770644L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target, final 
UserTO ignore) {
+                        try {
+                            
mfaRestClient.dismiss(model.getObject().getUsername());
+
+                            
SyncopeConsoleSession.get().success(getString(Constants.OPERATION_SUCCEEDED));
+                            target.add(container);
+                        } catch (Exception e) {
+                            LOG.error("While dismissing MFA for {}", 
model.getObject().getuManager(), e);
+                            SyncopeConsoleSession.get().onException(e);
+                        }
+                        ((BasePage) 
pageRef.getPage()).getNotificationPanel().refresh(target);
                     }
-                    ((BasePage) 
pageRef.getPage()).getNotificationPanel().refresh(target);
-                }
-            }, ActionType.DISMISS_MFA, IdRepoEntitlement.USER_UPDATE, true).
-                    setRealm(realm);
+                }, ActionType.DISMISS_MFA, IdRepoEntitlement.USER_UPDATE, 
true).
+                        setRealm(realm);
+            }
 
             
SyncopeWebApplication.get().getAnyDirectoryPanelAdditionalActionLinksProvider().get(
                     model,
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportDirectoryPanel.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportDirectoryPanel.java
index 4392e4ae4e..12dedca431 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportDirectoryPanel.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportDirectoryPanel.java
@@ -23,7 +23,6 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
-import java.util.concurrent.TimeUnit;
 import org.apache.commons.lang3.SerializationUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
@@ -67,7 +66,6 @@ import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.StringResourceModel;
-import org.apache.wicket.protocol.ws.api.WebSocketRequestHandler;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 
 /**
@@ -101,16 +99,7 @@ public abstract class ReportDirectoryPanel
 
         pageRef.getPage().getBehaviors().stream().
                 
filter(BasePageWebSocketBehavior.class::isInstance).map(BasePageWebSocketBehavior.class::cast).
-                findFirst().ifPresent(wsb -> wsb.add(new 
BasePageWebSocketBehavior.OnTimerChild(10, TimeUnit.SECONDS) {
-
-            private static final long serialVersionUID = -4661303265651934868L;
-
-            @Override
-            protected void onTimer(final WebSocketRequestHandler handler) {
-                container.modelChanged();
-                handler.add(container);
-            }
-        }));
+                findFirst().ifPresent(wsb -> wsb.add(new 
OnTimerUpdateResultTable()));
 
         startAt = new ReportStartAtTogglePanel(container, pageRef);
         addInnerObject(startAt);
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
index 94a6dda78e..175d360e70 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
@@ -24,7 +24,6 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
-import java.util.concurrent.TimeUnit;
 import org.apache.commons.lang3.SerializationUtils;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
@@ -69,7 +68,6 @@ import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.StringResourceModel;
-import org.apache.wicket.protocol.ws.api.WebSocketRequestHandler;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 
 /**
@@ -123,16 +121,7 @@ public abstract class SchedTaskDirectoryPanel<T extends 
SchedTaskTO>
 
         pageRef.getPage().getBehaviors().stream().
                 
filter(BasePageWebSocketBehavior.class::isInstance).map(BasePageWebSocketBehavior.class::cast).
-                findFirst().ifPresent(wsb -> wsb.add(new 
BasePageWebSocketBehavior.OnTimerChild(10, TimeUnit.SECONDS) {
-
-            private static final long serialVersionUID = 532119924423529449L;
-
-            @Override
-            protected void onTimer(final WebSocketRequestHandler handler) {
-                container.modelChanged();
-                handler.add(container);
-            }
-        }));
+                findFirst().ifPresent(wsb -> wsb.add(new 
OnTimerUpdateResultTable()));
 
         startAt = new TaskStartAtTogglePanel(container, pageRef);
         addInnerObject(startAt);

Reply via email to