You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2016/04/21 13:32:48 UTC
[2/2] syncope git commit: [SYNCOPE-834] Consolidating in a single
WebSocketBehavior
[SYNCOPE-834] Consolidating in a single WebSocketBehavior
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/c3441630
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/c3441630
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/c3441630
Branch: refs/heads/master
Commit: c34416301b17b148e937390e05a17122b848888e
Parents: c4be818
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Thu Apr 21 13:32:38 2016 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Thu Apr 21 13:32:38 2016 +0200
----------------------------------------------------------------------
.../client/console/SyncopeConsoleSession.java | 24 ++++-
.../syncope/client/console/pages/BasePage.java | 27 ++++++
.../client/console/widgets/ApprovalsWidget.java | 95 +++++++++-----------
.../client/console/widgets/JobWidget.java | 62 +++++--------
.../console/widgets/ReconciliationWidget.java | 87 +++++++-----------
5 files changed, 149 insertions(+), 146 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/c3441630/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java b/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
index 67d1238..95ff320 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
@@ -54,6 +54,7 @@ import org.apache.wicket.authroles.authorization.strategies.role.Roles;
import org.apache.wicket.request.Request;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.scheduling.concurrent.ThreadPoolExecutorFactoryBean;
public class SyncopeConsoleSession extends AuthenticatedWebSession {
@@ -61,20 +62,28 @@ public class SyncopeConsoleSession extends AuthenticatedWebSession {
private static final Logger LOG = LoggerFactory.getLogger(SyncopeConsoleSession.class);
+ private static final ThreadPoolExecutorFactoryBean THREAD_POOL_FACTORY;
+
public static final String AUTHENTICATED = "AUTHENTICATED";
public static final String MENU_COLLAPSE = "MENU_COLLAPSE";
+ static {
+ THREAD_POOL_FACTORY = new ThreadPoolExecutorFactoryBean();
+ THREAD_POOL_FACTORY.setThreadNamePrefix(SyncopeConsoleSession.class.getSimpleName());
+ THREAD_POOL_FACTORY.setDaemon(true);
+ }
+
private final PlatformInfo platformInfo;
private final List<String> domains;
private String domain;
- private final ScheduledExecutorService executorService = Executors.newScheduledThreadPool(5);
-
private final Map<Class<?>, Object> services = Collections.synchronizedMap(new HashMap<Class<?>, Object>());
+ private final ScheduledExecutorService executorService = Executors.newScheduledThreadPool(5, THREAD_POOL_FACTORY);
+
private SyncopeClient client;
private String username;
@@ -89,6 +98,8 @@ public class SyncopeConsoleSession extends AuthenticatedWebSession {
private NotificationPanel notificationPanel;
+ private boolean checkReconciliationJob = false;
+
public static SyncopeConsoleSession get() {
return (SyncopeConsoleSession) Session.get();
}
@@ -248,4 +259,13 @@ public class SyncopeConsoleSession extends AuthenticatedWebSession {
}
return notificationPanel;
}
+
+ public boolean isCheckReconciliationJob() {
+ return checkReconciliationJob;
+ }
+
+ public void setCheckReconciliationJob(final boolean checkReconciliationJob) {
+ this.checkReconciliationJob = checkReconciliationJob;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/c3441630/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
index 334b095..d504cef 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
@@ -20,6 +20,7 @@ package org.apache.syncope.client.console.pages;
import java.io.Serializable;
import java.util.List;
+import java.util.concurrent.TimeUnit;
import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
import org.apache.syncope.client.console.SyncopeConsoleApplication;
import org.apache.syncope.client.console.SyncopeConsoleSession;
@@ -31,6 +32,8 @@ import org.apache.syncope.client.console.topology.Topology;
import org.apache.syncope.client.console.wicket.markup.head.MetaHeaderItem;
import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
import org.apache.syncope.client.console.widgets.ApprovalsWidget;
+import org.apache.syncope.client.console.widgets.JobWidget;
+import org.apache.syncope.client.console.widgets.ReconciliationWidget;
import org.apache.syncope.common.lib.types.StandardEntitlement;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
@@ -52,6 +55,8 @@ import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.protocol.ws.api.WebSocketBehavior;
+import org.apache.wicket.protocol.ws.api.message.ConnectedMessage;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -83,6 +88,28 @@ public class BasePage extends WebPage implements IAjaxIndicatorAware {
public BasePage(final PageParameters parameters) {
super(parameters);
+ // Native WebSocket
+ add(new WebSocketBehavior() {
+
+ private static final long serialVersionUID = 3109256773218160485L;
+
+ @Override
+ protected void onConnect(final ConnectedMessage message) {
+ super.onConnect(message);
+
+ SyncopeConsoleSession.get().scheduleAtFixedRate(
+ new ApprovalsWidget.ApprovalInfoUpdater(message), 0, 30, TimeUnit.SECONDS);
+
+ if (BasePage.this instanceof Dashboard) {
+ SyncopeConsoleSession.get().scheduleAtFixedRate(
+ new JobWidget.JobInfoUpdater(message), 0, 10, TimeUnit.SECONDS);
+ SyncopeConsoleSession.get().scheduleAtFixedRate(
+ new ReconciliationWidget.ReconciliationJobInfoUpdater(message), 0, 10, TimeUnit.SECONDS);
+ }
+ }
+
+ });
+
body = new WebMarkupContainer("body");
Serializable leftMenuCollapse = SyncopeConsoleSession.get().getAttribute(SyncopeConsoleSession.MENU_COLLAPSE);
if ((leftMenuCollapse instanceof Boolean) && ((Boolean) leftMenuCollapse)) {
http://git-wip-us.apache.org/repos/asf/syncope/blob/c3441630/client/console/src/main/java/org/apache/syncope/client/console/widgets/ApprovalsWidget.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/widgets/ApprovalsWidget.java b/client/console/src/main/java/org/apache/syncope/client/console/widgets/ApprovalsWidget.java
index fd19e97..3e704c3 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/widgets/ApprovalsWidget.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/widgets/ApprovalsWidget.java
@@ -22,14 +22,13 @@ import java.io.Serializable;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
-import java.util.concurrent.TimeUnit;
import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
import org.apache.syncope.client.console.SyncopeConsoleSession;
import org.apache.syncope.client.console.pages.Approvals;
-import org.apache.syncope.client.console.rest.UserWorkflowRestClient;
import org.apache.syncope.common.lib.to.WorkflowFormTO;
import org.apache.syncope.common.lib.types.StandardEntitlement;
+import org.apache.syncope.common.rest.api.service.UserWorkflowService;
import org.apache.wicket.Application;
import org.apache.wicket.PageReference;
import org.apache.wicket.ThreadContext;
@@ -48,7 +47,6 @@ import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.protocol.ws.WebSocketSettings;
-import org.apache.wicket.protocol.ws.api.WebSocketBehavior;
import org.apache.wicket.protocol.ws.api.WebSocketPushBroadcaster;
import org.apache.wicket.protocol.ws.api.event.WebSocketPushPayload;
import org.apache.wicket.protocol.ws.api.message.ConnectedMessage;
@@ -63,7 +61,13 @@ public class ApprovalsWidget extends Panel {
private static final Logger LOG = LoggerFactory.getLogger(ApprovalsWidget.class);
- private static final int UPDATE_PERIOD = 30;
+ private static List<WorkflowFormTO> getLastApprovals() {
+ if (SyncopeConsoleSession.get().owns(StandardEntitlement.WORKFLOW_FORM_LIST)) {
+ return SyncopeConsoleSession.get().getService(UserWorkflowService.class).getForms();
+ } else {
+ return Collections.<WorkflowFormTO>emptyList();
+ }
+ }
private final Label linkApprovalsNumber;
@@ -175,51 +179,35 @@ public class ApprovalsWidget extends Panel {
BookmarkablePageLink<Object> approvals = BookmarkablePageLinkBuilder.build("approvalsLink", Approvals.class);
add(approvals);
MetaDataRoleAuthorizationStrategy.authorize(approvals, WebPage.ENABLE, StandardEntitlement.WORKFLOW_FORM_LIST);
-
- add(new WebSocketBehavior() {
-
- private static final long serialVersionUID = 7944352891541344021L;
-
- @Override
- protected void onConnect(final ConnectedMessage message) {
- super.onConnect(message);
- SyncopeConsoleSession.get().scheduleAtFixedRate(
- new ApprovalInfoUpdater(message), 0, UPDATE_PERIOD, TimeUnit.SECONDS);
- }
- });
- }
-
- private List<WorkflowFormTO> getLastApprovals() {
- if (SyncopeConsoleSession.get().owns(StandardEntitlement.WORKFLOW_FORM_LIST)) {
- return new UserWorkflowRestClient().getForms();
- } else {
- return Collections.<WorkflowFormTO>emptyList();
- }
}
@Override
public void onEvent(final IEvent<?> event) {
if (event.getPayload() instanceof WebSocketPushPayload) {
WebSocketPushPayload wsEvent = (WebSocketPushPayload) event.getPayload();
- if (wsEvent.getMessage() instanceof UpdateMessage) {
+ if (wsEvent.getMessage() instanceof ApprovalsWidgetMessage) {
+ List<WorkflowFormTO> updatedApprovals =
+ ((ApprovalsWidgetMessage) wsEvent.getMessage()).getUpdatedApprovals();
+ if (!lastApprovals.equals(updatedApprovals)) {
+ lastApprovals.clear();
+ lastApprovals.addAll(updatedApprovals);
- ApprovalsWidget.this.linkApprovalsNumber.
- setDefaultModelObject(ApprovalsWidget.this.lastApprovals.size());
- wsEvent.getHandler().add(ApprovalsWidget.this.linkApprovalsNumber);
+ ApprovalsWidget.this.linkApprovalsNumber.
+ setDefaultModelObject(ApprovalsWidget.this.lastApprovals.size());
+ wsEvent.getHandler().add(ApprovalsWidget.this.linkApprovalsNumber);
- ApprovalsWidget.this.headerApprovalsNumber.
- setDefaultModelObject(ApprovalsWidget.this.lastApprovals.size());
- wsEvent.getHandler().add(ApprovalsWidget.this.headerApprovalsNumber);
+ ApprovalsWidget.this.headerApprovalsNumber.
+ setDefaultModelObject(ApprovalsWidget.this.lastApprovals.size());
+ wsEvent.getHandler().add(ApprovalsWidget.this.headerApprovalsNumber);
- ApprovalsWidget.this.lastFive.removeAll();
- wsEvent.getHandler().add(ApprovalsWidget.this.lastApprovalsList);
+ ApprovalsWidget.this.lastFive.removeAll();
+ wsEvent.getHandler().add(ApprovalsWidget.this.lastApprovalsList);
+ }
}
- } else {
- super.onEvent(event);
}
}
- protected final class ApprovalInfoUpdater implements Runnable {
+ public static final class ApprovalInfoUpdater implements Runnable {
private final Application application;
@@ -239,20 +227,15 @@ public class ApprovalsWidget extends Panel {
ThreadContext.setApplication(application);
ThreadContext.setSession(session);
- final List<WorkflowFormTO> actual = getLastApprovals();
- Collections.sort(actual, new WorkflowFormComparator());
-
- if (!actual.equals(lastApprovals)) {
- LOG.debug("Update approvals");
-
- lastApprovals.clear();
- lastApprovals.addAll(actual);
+ List<WorkflowFormTO> updatedApprovals = getLastApprovals();
+ Collections.sort(updatedApprovals, new WorkflowFormComparator());
- WebSocketSettings settings = WebSocketSettings.Holder.get(application);
- WebSocketPushBroadcaster broadcaster =
- new WebSocketPushBroadcaster(settings.getConnectionRegistry());
- broadcaster.broadcast(new ConnectedMessage(application, session.getId(), key), new UpdateMessage());
- }
+ WebSocketSettings settings = WebSocketSettings.Holder.get(application);
+ WebSocketPushBroadcaster broadcaster =
+ new WebSocketPushBroadcaster(settings.getConnectionRegistry());
+ broadcaster.broadcast(
+ new ConnectedMessage(application, session.getId(), key),
+ new ApprovalsWidgetMessage(updatedApprovals));
} catch (Throwable t) {
LOG.error("Unexpected error while checking for updated approval info", t);
} finally {
@@ -261,13 +244,23 @@ public class ApprovalsWidget extends Panel {
}
}
- private static class UpdateMessage implements IWebSocketPushMessage, Serializable {
+ private static class ApprovalsWidgetMessage implements IWebSocketPushMessage, Serializable {
private static final long serialVersionUID = -824793424112532838L;
+ private final List<WorkflowFormTO> updatedApprovals;
+
+ ApprovalsWidgetMessage(final List<WorkflowFormTO> updatedApprovals) {
+ this.updatedApprovals = updatedApprovals;
+ }
+
+ public List<WorkflowFormTO> getUpdatedApprovals() {
+ return updatedApprovals;
+ }
+
}
- private class WorkflowFormComparator implements Comparator<WorkflowFormTO> {
+ private static class WorkflowFormComparator implements Comparator<WorkflowFormTO> {
@Override
public int compare(final WorkflowFormTO o1, final WorkflowFormTO o2) {
http://git-wip-us.apache.org/repos/asf/syncope/blob/c3441630/client/console/src/main/java/org/apache/syncope/client/console/widgets/JobWidget.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/widgets/JobWidget.java b/client/console/src/main/java/org/apache/syncope/client/console/widgets/JobWidget.java
index 5a50ebf..c91d7de 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/widgets/JobWidget.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/widgets/JobWidget.java
@@ -25,7 +25,6 @@ import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
-import java.util.concurrent.TimeUnit;
import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.client.console.SyncopeConsoleSession;
import org.apache.syncope.client.console.commons.DirectoryDataProvider;
@@ -62,7 +61,6 @@ import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.protocol.ws.WebSocketSettings;
-import org.apache.wicket.protocol.ws.api.WebSocketBehavior;
import org.apache.wicket.protocol.ws.api.WebSocketPushBroadcaster;
import org.apache.wicket.protocol.ws.api.event.WebSocketPushPayload;
import org.apache.wicket.protocol.ws.api.message.ConnectedMessage;
@@ -115,17 +113,6 @@ public class JobWidget extends BaseWidget {
recent = getRecent(SyncopeConsoleSession.get());
add(new AjaxBootstrapTabbedPanel<>("tabbedPanel", buildTabList(pageRef)));
-
- add(new WebSocketBehavior() {
-
- private static final long serialVersionUID = 7944352891541344021L;
-
- @Override
- protected void onConnect(final ConnectedMessage message) {
- super.onConnect(message);
- SyncopeConsoleSession.get().scheduleAtFixedRate(new JobInfoUpdater(message), 0, 10, TimeUnit.SECONDS);
- }
- });
}
private List<ITab> buildTabList(final PageReference pageRef) {
@@ -163,19 +150,24 @@ public class JobWidget extends BaseWidget {
if (event.getPayload() instanceof WebSocketPushPayload) {
WebSocketPushPayload wsEvent = (WebSocketPushPayload) event.getPayload();
if (wsEvent.getMessage() instanceof JobWidgetMessage) {
- available.clear();
- available.addAll(((JobWidgetMessage) wsEvent.getMessage()).getUpdatedAvailable());
-
- recent.clear();
- recent.addAll(((JobWidgetMessage) wsEvent.getMessage()).getUpdatedRecent());
-
- if (availableJobsPanel != null) {
- availableJobsPanel.modelChanged();
- wsEvent.getHandler().add(availableJobsPanel);
+ List<JobTO> updatedAvailable = ((JobWidgetMessage) wsEvent.getMessage()).getUpdatedAvailable();
+ if (!updatedAvailable.equals(available)) {
+ available.clear();
+ available.addAll(updatedAvailable);
+ if (availableJobsPanel != null) {
+ availableJobsPanel.modelChanged();
+ wsEvent.getHandler().add(availableJobsPanel);
+ }
}
- if (recentExecPanel != null) {
- recentExecPanel.modelChanged();
- wsEvent.getHandler().add(recentExecPanel);
+
+ List<ExecTO> updatedRecent = ((JobWidgetMessage) wsEvent.getMessage()).getUpdatedRecent();
+ if (!updatedRecent.equals(recent)) {
+ recent.clear();
+ recent.addAll(updatedRecent);
+ if (recentExecPanel != null) {
+ recentExecPanel.modelChanged();
+ wsEvent.getHandler().add(recentExecPanel);
+ }
}
}
} else if (event.getPayload() instanceof JobActionPanel.JobActionPayload) {
@@ -374,7 +366,7 @@ public class JobWidget extends BaseWidget {
}
}
- protected final class JobInfoUpdater implements Runnable {
+ public static final class JobInfoUpdater implements Runnable {
private final Application application;
@@ -394,18 +386,12 @@ public class JobWidget extends BaseWidget {
ThreadContext.setApplication(application);
ThreadContext.setSession(session);
- List<JobTO> updatedAvailable = getAvailable(session);
- List<ExecTO> updatedRecent = getRecent(session);
- if (!updatedAvailable.equals(available) || !updatedRecent.equals(recent)) {
- LOG.debug("Updated Job info found");
-
- WebSocketSettings webSocketSettings = WebSocketSettings.Holder.get(application);
- WebSocketPushBroadcaster broadcaster =
- new WebSocketPushBroadcaster(webSocketSettings.getConnectionRegistry());
- broadcaster.broadcast(
- new ConnectedMessage(application, session.getId(), key),
- new JobWidgetMessage(updatedAvailable, updatedRecent));
- }
+ WebSocketSettings webSocketSettings = WebSocketSettings.Holder.get(application);
+ WebSocketPushBroadcaster broadcaster =
+ new WebSocketPushBroadcaster(webSocketSettings.getConnectionRegistry());
+ broadcaster.broadcast(
+ new ConnectedMessage(application, session.getId(), key),
+ new JobWidgetMessage(getAvailable(session), getRecent(session)));
} catch (Throwable t) {
LOG.error("Unexpected error while checking for updated Job info", t);
} finally {
http://git-wip-us.apache.org/repos/asf/syncope/blob/c3441630/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java b/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java
index 743d321..fc2f270 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java
@@ -30,7 +30,6 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
-import java.util.concurrent.TimeUnit;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.IterableUtils;
import org.apache.commons.collections4.Predicate;
@@ -59,6 +58,7 @@ import org.apache.syncope.client.console.wizards.WizardMgtPanel;
import org.apache.syncope.common.lib.to.ExecTO;
import org.apache.syncope.common.lib.to.JobTO;
import org.apache.syncope.common.lib.to.ReportTO;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.ReportExecExportFormat;
import org.apache.syncope.common.rest.api.service.ReportService;
import org.apache.wicket.Application;
@@ -84,7 +84,6 @@ import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.protocol.ws.WebSocketSettings;
-import org.apache.wicket.protocol.ws.api.WebSocketBehavior;
import org.apache.wicket.protocol.ws.api.WebSocketPushBroadcaster;
import org.apache.wicket.protocol.ws.api.event.WebSocketPushPayload;
import org.apache.wicket.protocol.ws.api.message.ConnectedMessage;
@@ -111,8 +110,6 @@ public class ReconciliationWidget extends BaseWidget {
private final WebMarkupContainer overlay;
- private boolean checkReconciliationJob = false;
-
public ReconciliationWidget(final String id, final PageReference pageRef) {
super(id);
this.pageRef = pageRef;
@@ -140,21 +137,6 @@ public class ReconciliationWidget extends BaseWidget {
reportResult.setOutputMarkupId(true);
add(reportResult);
- if (reconciliationReport != null) {
- add(new WebSocketBehavior() {
-
- private static final long serialVersionUID = 3507933905864454312L;
-
- @Override
- protected void onConnect(final ConnectedMessage message) {
- super.onConnect(message);
-
- SyncopeConsoleSession.get().scheduleAtFixedRate(
- new ReconciliationJobInfoUpdater(message), 0, 10, TimeUnit.SECONDS);
- }
- });
- }
-
add(new IndicatorAjaxLink<Void>("refresh") {
private static final long serialVersionUID = -7978723352517770644L;
@@ -167,9 +149,7 @@ public class ReconciliationWidget extends BaseWidget {
overlay.setVisible(true);
target.add(ReconciliationWidget.this);
- synchronized (this) {
- checkReconciliationJob = true;
- }
+ SyncopeConsoleSession.get().setCheckReconciliationJob(true);
info(getString(Constants.OPERATION_SUCCEEDED));
} catch (Exception e) {
@@ -205,7 +185,7 @@ public class ReconciliationWidget extends BaseWidget {
return new ProgressesPanel(panelId, report.getRun(), progressBeans);
}
});
- tabs.add(new AbstractTab(new ResourceModel("users")) {
+ tabs.add(new AbstractTab(Model.of(AnyTypeKind.USER.name())) {
private static final long serialVersionUID = -6815067322125799251L;
@@ -214,7 +194,7 @@ public class ReconciliationWidget extends BaseWidget {
return new AnysReconciliationPanel(panelId, report.getUsers(), pageRef);
}
});
- tabs.add(new AbstractTab(new ResourceModel("groups")) {
+ tabs.add(new AbstractTab(Model.of(AnyTypeKind.GROUP.name())) {
private static final long serialVersionUID = -6815067322125799251L;
@@ -306,9 +286,7 @@ public class ReconciliationWidget extends BaseWidget {
wsEvent.getHandler().add(ReconciliationWidget.this);
- synchronized (this) {
- checkReconciliationJob = false;
- }
+ SyncopeConsoleSession.get().setCheckReconciliationJob(false);
}
}
}
@@ -485,7 +463,7 @@ public class ReconciliationWidget extends BaseWidget {
}
}
- protected final class ReconciliationJobInfoUpdater implements Runnable {
+ public static final class ReconciliationJobInfoUpdater implements Runnable {
private final String applicationName;
@@ -501,37 +479,36 @@ public class ReconciliationWidget extends BaseWidget {
@Override
public void run() {
- synchronized (ReconciliationWidget.this) {
- if (ReconciliationWidget.this.checkReconciliationJob) {
- try {
- Application application = Application.get(applicationName);
- ThreadContext.setApplication(application);
- ThreadContext.setSession(session);
+ if (session.isCheckReconciliationJob()) {
+ try {
+ final Application application = Application.get(applicationName);
+ ThreadContext.setApplication(application);
+ ThreadContext.setSession(session);
- JobTO reportJobTO = IterableUtils.find(session.getService(ReportService.class).listJobs(),
- new Predicate<JobTO>() {
+ JobTO reportJobTO = IterableUtils.find(session.getService(ReportService.class).listJobs(),
+ new Predicate<JobTO>() {
- @Override
- public boolean evaluate(final JobTO jobTO) {
- return SyncopeConsoleApplication.get().
- getReconciliationReportKey().equals(jobTO.getRefKey());
- }
- });
- if (reportJobTO != null && !reportJobTO.isRunning()) {
- LOG.debug("Report {} is not running", reconciliationReportKey);
-
- WebSocketSettings webSocketSettings = WebSocketSettings.Holder.get(application);
- WebSocketPushBroadcaster broadcaster =
- new WebSocketPushBroadcaster(webSocketSettings.getConnectionRegistry());
- broadcaster.broadcast(
- new ConnectedMessage(application, session.getId(), key),
- new ReconciliationJobNotRunningMessage());
+ @Override
+ public boolean evaluate(final JobTO jobTO) {
+ return SyncopeConsoleApplication.class.cast(application).
+ getReconciliationReportKey().equals(jobTO.getRefKey());
}
- } catch (Throwable t) {
- LOG.error("Unexpected error while checking for updated reconciliation job info", t);
- } finally {
- ThreadContext.detach();
+ });
+ if (reportJobTO != null && !reportJobTO.isRunning()) {
+ LOG.debug("Report {} is not running",
+ SyncopeConsoleApplication.class.cast(application).getReconciliationReportKey());
+
+ WebSocketSettings webSocketSettings = WebSocketSettings.Holder.get(application);
+ WebSocketPushBroadcaster broadcaster =
+ new WebSocketPushBroadcaster(webSocketSettings.getConnectionRegistry());
+ broadcaster.broadcast(
+ new ConnectedMessage(application, session.getId(), key),
+ new ReconciliationJobNotRunningMessage());
}
+ } catch (Throwable t) {
+ LOG.error("Unexpected error while checking for updated reconciliation job info", t);
+ } finally {
+ ThreadContext.detach();
}
}
}