From 73eaca246f43a14a2403426f6344d06843e25fbc Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sun, 24 Jul 2022 13:22:15 +0200 Subject: [PATCH] Adapt to changes in Argeo Commons --- org.argeo.app.ui/OSGI-INF/cmsApp.xml | 1 - .../src/org/argeo/app/ui/EventRecorder.java | 11 +- .../src/org/argeo/app/ui/SuiteApp.java | 140 +++++++++--------- .../src/org/argeo/app/ui/SuiteUiUtils.java | 7 +- .../argeo/app/ui/publish/PublishingApp.java | 12 +- 5 files changed, 84 insertions(+), 87 deletions(-) diff --git a/org.argeo.app.ui/OSGI-INF/cmsApp.xml b/org.argeo.app.ui/OSGI-INF/cmsApp.xml index eae6c48..465f47f 100644 --- a/org.argeo.app.ui/OSGI-INF/cmsApp.xml +++ b/org.argeo.app.ui/OSGI-INF/cmsApp.xml @@ -3,7 +3,6 @@ - diff --git a/org.argeo.app.ui/src/org/argeo/app/ui/EventRecorder.java b/org.argeo.app.ui/src/org/argeo/app/ui/EventRecorder.java index 0607952..7c31601 100644 --- a/org.argeo.app.ui/src/org/argeo/app/ui/EventRecorder.java +++ b/org.argeo.app.ui/src/org/argeo/app/ui/EventRecorder.java @@ -1,11 +1,12 @@ package org.argeo.app.ui; +import java.util.Map; + +import org.argeo.api.cms.CmsEventSubscriber; import org.argeo.api.cms.CmsLog; -import org.osgi.service.event.Event; -import org.osgi.service.event.EventHandler; /** Record UI events. */ -public class EventRecorder implements EventHandler { +public class EventRecorder implements CmsEventSubscriber { private final static CmsLog log = CmsLog.getLog(EventRecorder.class); public void init() { @@ -17,9 +18,9 @@ public class EventRecorder implements EventHandler { } @Override - public void handleEvent(Event event) { + public void onEvent(String topic, Map properties) { if (log.isTraceEnabled()) - log.trace(event); + log.trace(topic + ": " + properties); } diff --git a/org.argeo.app.ui/src/org/argeo/app/ui/SuiteApp.java b/org.argeo.app.ui/src/org/argeo/app/ui/SuiteApp.java index b901a11..50a7f80 100644 --- a/org.argeo.app.ui/src/org/argeo/app/ui/SuiteApp.java +++ b/org.argeo.app.ui/src/org/argeo/app/ui/SuiteApp.java @@ -22,6 +22,7 @@ import org.argeo.api.acr.Content; import org.argeo.api.acr.ContentRepository; import org.argeo.api.acr.spi.ProvidedSession; import org.argeo.api.cms.CmsConstants; +import org.argeo.api.cms.CmsEventSubscriber; import org.argeo.api.cms.CmsLog; import org.argeo.api.cms.CmsSession; import org.argeo.api.cms.ux.CmsTheme; @@ -48,12 +49,10 @@ import org.argeo.util.LangUtils; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.osgi.framework.Constants; -import org.osgi.service.event.Event; -import org.osgi.service.event.EventHandler; import org.osgi.service.useradmin.User; /** The Argeo Suite App. */ -public class SuiteApp extends AbstractCmsApp implements EventHandler { +public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { private final static CmsLog log = CmsLog.getLog(SuiteApp.class); public final static String PUBLIC_BASE_PATH_PROPERTY = "publicBasePath"; @@ -99,6 +98,10 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { // private Repository repository; public void init(Map properties) { + for (SuiteEvent event : SuiteEvent.values()) { + getCmsContext().getCmsEventBus().addEventSubscriber(event.topic(), this); + } + if (log.isDebugEnabled()) log.info("Argeo Suite App started"); @@ -474,83 +477,84 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { */ @Override - public void handleEvent(Event event) { + public void onEvent(String topic, Map event) { // Specific UI related events SuiteUi ui = getRelatedUi(event); if (ui == null) return; - try { - String appTitle = ""; - if (ui.getTitle() != null) - appTitle = ui.getTitle().lead() + " - "; + ui.getCmsView().runAs(() -> { + try { + String appTitle = ""; + if (ui.getTitle() != null) + appTitle = ui.getTitle().lead() + " - "; // String currentLayerId = ui.getCurrentLayerId(); // SuiteLayer currentLayer = currentLayerId != null ? layersByPid.get(currentLayerId).get() : null; - if (SuiteUiUtils.isTopic(event, SuiteEvent.refreshPart)) { - Content node = getNode(ui, event); - if (node == null) - return; - CmsUiProvider uiProvider = findByType(uiProvidersByType, node); - SuiteLayer layer = findByType(layersByType, node); - ui.switchToLayer(layer, node); - ui.getCmsView().runAs(() -> layer.view(uiProvider, ui.getCurrentWorkArea(), node)); - ui.getCmsView().stateChanged(nodeToState(node), appTitle + CmsUxUtils.getTitle(node)); - } else if (SuiteUiUtils.isTopic(event, SuiteEvent.openNewPart)) { - Content node = getNode(ui, event); - if (node == null) - return; - CmsUiProvider uiProvider = findByType(uiProvidersByType, node); - SuiteLayer layer = findByType(layersByType, node); - ui.switchToLayer(layer, node); - ui.getCmsView().runAs(() -> layer.open(uiProvider, ui.getCurrentWorkArea(), node)); - ui.getCmsView().stateChanged(nodeToState(node), appTitle + CmsUxUtils.getTitle(node)); - } else if (SuiteUiUtils.isTopic(event, SuiteEvent.switchLayer)) { - String layerId = get(event, SuiteEvent.LAYER); - if (layerId != null) { + if (SuiteUiUtils.isTopic(topic, SuiteEvent.refreshPart)) { + Content node = getNode(ui, event); + if (node == null) + return; + CmsUiProvider uiProvider = findByType(uiProvidersByType, node); + SuiteLayer layer = findByType(layersByType, node); + ui.switchToLayer(layer, node); + layer.view(uiProvider, ui.getCurrentWorkArea(), node); + ui.getCmsView().stateChanged(nodeToState(node), appTitle + CmsUxUtils.getTitle(node)); + } else if (SuiteUiUtils.isTopic(topic, SuiteEvent.openNewPart)) { + Content node = getNode(ui, event); + if (node == null) + return; + CmsUiProvider uiProvider = findByType(uiProvidersByType, node); + SuiteLayer layer = findByType(layersByType, node); + ui.switchToLayer(layer, node); + layer.open(uiProvider, ui.getCurrentWorkArea(), node); + ui.getCmsView().stateChanged(nodeToState(node), appTitle + CmsUxUtils.getTitle(node)); + } else if (SuiteUiUtils.isTopic(topic, SuiteEvent.switchLayer)) { + String layerId = get(event, SuiteEvent.LAYER); + if (layerId != null) { // ui.switchToLayer(layerId, ui.getUserDir()); - SuiteLayer suiteLayer = findLayer(layerId); - if (suiteLayer == null) - throw new IllegalArgumentException("No layer '" + layerId + "' available."); - Localized layerTitle = suiteLayer.getTitle(); - // FIXME make sure we don't rebuild the work area twice - Composite workArea = ui.getCmsView().doAs(() -> ui.switchToLayer(layerId, ui.getUserDirNode())); - String title = null; - if (layerTitle != null) - title = layerTitle.lead(); - Content nodeFromState = getNode(ui, event); - if (nodeFromState != null && nodeFromState.getPath().equals(ui.getUserDirNode().getPath())) { - // default layer view is forced - String state = defaultLayerPid.equals(layerId) ? "~" : layerId; - ui.getCmsView().stateChanged(state, appTitle + title); - suiteLayer.view(null, workArea, nodeFromState); - } else { - Content layerCurrentContext = suiteLayer.getCurrentContext(workArea); - if (layerCurrentContext != null) { - // layer was already showing a context so we set the state to it - ui.getCmsView().stateChanged(nodeToState(layerCurrentContext), - appTitle + CmsUxUtils.getTitle(layerCurrentContext)); + SuiteLayer suiteLayer = findLayer(layerId); + if (suiteLayer == null) + throw new IllegalArgumentException("No layer '" + layerId + "' available."); + Localized layerTitle = suiteLayer.getTitle(); + // FIXME make sure we don't rebuild the work area twice + Composite workArea = ui.switchToLayer(layerId, ui.getUserDirNode()); + String title = null; + if (layerTitle != null) + title = layerTitle.lead(); + Content nodeFromState = getNode(ui, event); + if (nodeFromState != null && nodeFromState.getPath().equals(ui.getUserDirNode().getPath())) { + // default layer view is forced + String state = defaultLayerPid.equals(layerId) ? "~" : layerId; + ui.getCmsView().stateChanged(state, appTitle + title); + suiteLayer.view(null, workArea, nodeFromState); } else { - // no context was shown - ui.getCmsView().stateChanged(layerId, appTitle + title); + Content layerCurrentContext = suiteLayer.getCurrentContext(workArea); + if (layerCurrentContext != null) { + // layer was already showing a context so we set the state to it + ui.getCmsView().stateChanged(nodeToState(layerCurrentContext), + appTitle + CmsUxUtils.getTitle(layerCurrentContext)); + } else { + // no context was shown + ui.getCmsView().stateChanged(layerId, appTitle + title); + } + } + } else { + Content node = getNode(ui, event); + if (node != null) { + SuiteLayer layer = findByType(layersByType, node); + ui.switchToLayer(layer, node); } - } - } else { - Content node = getNode(ui, event); - if (node != null) { - SuiteLayer layer = findByType(layersByType, node); - ui.getCmsView().runAs(() -> ui.switchToLayer(layer, node)); } } - } - } catch (Exception e) { - log.error("Cannot handle event " + event, e); + } catch (Exception e) { + log.error("Cannot handle event " + event, e); // CmsView.getCmsView(ui).exception(e); - } - + } + }); } - private Content getNode(SuiteUi ui, Event event) { + private Content getNode(SuiteUi ui, Map event) { ProvidedSession contentSession = (ProvidedSession) CmsUxUtils.getContentSession(contentRepository, ui.getCmsView()); @@ -600,12 +604,12 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { return node; } - private SuiteUi getRelatedUi(Event event) { - return managedUis.get(get(event, CMS_VIEW_UID_PROPERTY)); + private SuiteUi getRelatedUi(Map eventProperties) { + return managedUis.get(get(eventProperties, CMS_VIEW_UID_PROPERTY)); } - public static String get(Event event, String key) { - Object value = event.getProperty(key); + public static String get(Map eventProperties, String key) { + Object value = eventProperties.get(key); if (value == null) return null; // throw new IllegalArgumentException("Property " + key + " must be set"); diff --git a/org.argeo.app.ui/src/org/argeo/app/ui/SuiteUiUtils.java b/org.argeo.app.ui/src/org/argeo/app/ui/SuiteUiUtils.java index a5205ee..3040d26 100644 --- a/org.argeo.app.ui/src/org/argeo/app/ui/SuiteUiUtils.java +++ b/org.argeo.app.ui/src/org/argeo/app/ui/SuiteUiUtils.java @@ -5,6 +5,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.nio.file.Files; import java.nio.file.Paths; +import java.util.Objects; import javax.jcr.Node; import javax.jcr.RepositoryException; @@ -45,7 +46,6 @@ import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; -import org.osgi.service.event.Event; /** UI utilities related to the APAF project. */ public class SuiteUiUtils { @@ -398,8 +398,9 @@ public class SuiteUiUtils { return coworker; } - public static boolean isTopic(Event event, CmsEvent cmsEvent) { - return event.getTopic().equals(cmsEvent.topic()); + public static boolean isTopic(String topic, CmsEvent cmsEvent) { + Objects.requireNonNull(topic); + return topic.equals(cmsEvent.topic()); } public static Button createLayerButton(Composite parent, String layer, Localized msg, CmsIcon icon, diff --git a/org.argeo.app.ui/src/org/argeo/app/ui/publish/PublishingApp.java b/org.argeo.app.ui/src/org/argeo/app/ui/publish/PublishingApp.java index c851b59..988b06f 100644 --- a/org.argeo.app.ui/src/org/argeo/app/ui/publish/PublishingApp.java +++ b/org.argeo.app.ui/src/org/argeo/app/ui/publish/PublishingApp.java @@ -12,9 +12,9 @@ import javax.jcr.Repository; import javax.jcr.Session; import org.argeo.api.cms.CmsApp; -import org.argeo.app.ui.SuiteApp; import org.argeo.api.cms.CmsLog; import org.argeo.api.cms.ux.CmsUi; +import org.argeo.app.ui.SuiteApp; import org.argeo.cms.AbstractCmsApp; import org.argeo.cms.ui.CmsUiProvider; import org.argeo.jcr.Jcr; @@ -23,14 +23,12 @@ import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.osgi.framework.Constants; -import org.osgi.service.event.Event; -import org.osgi.service.event.EventHandler; /** * A {@link CmsApp} dedicated to publishing, typically a public or internal web * site. */ -public class PublishingApp extends AbstractCmsApp implements EventHandler { +public class PublishingApp extends AbstractCmsApp { private final static CmsLog log = CmsLog.getLog(PublishingApp.class); private String pid; @@ -116,12 +114,6 @@ public class PublishingApp extends AbstractCmsApp implements EventHandler { this.landingPage = landingPage; } - @Override - public void handleEvent(Event event) { - // TODO listen to some events - - } - public Repository getRepository() { return repository; } -- 2.30.2