X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=swt%2Frap%2Forg.argeo.cms.swt.rap%2Fsrc%2Forg%2Fargeo%2Fcms%2Fweb%2FCmsWebEntryPoint.java;h=70f49f670054b82424104b68793fb1a190feaf30;hb=66a608fecdca2821928b4ae849b9babc195437f3;hp=477a6569dc5ed4e4d193e24be7493185dc67beaa;hpb=1bd165d6454edb8a600ece696fab2a293e9eaf27;p=lgpl%2Fargeo-commons.git diff --git a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/web/CmsWebEntryPoint.java b/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/web/CmsWebEntryPoint.java index 477a6569d..70f49f670 100644 --- a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/web/CmsWebEntryPoint.java +++ b/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/web/CmsWebEntryPoint.java @@ -3,9 +3,7 @@ package org.argeo.cms.web; import static org.eclipse.rap.rwt.internal.service.ContextProvider.getApplicationContext; import java.security.PrivilegedAction; -import java.util.HashMap; import java.util.Locale; -import java.util.Map; import java.util.UUID; import javax.security.auth.Subject; @@ -14,17 +12,17 @@ import javax.security.auth.login.LoginException; import org.argeo.api.cms.CmsApp; import org.argeo.api.cms.CmsAuth; +import org.argeo.api.cms.CmsEventBus; import org.argeo.api.cms.CmsLog; import org.argeo.api.cms.CmsSession; import org.argeo.api.cms.ux.CmsImageManager; -import org.argeo.api.cms.ux.CmsUi; import org.argeo.api.cms.ux.CmsView; -import org.argeo.api.cms.ux.UxContext; +import org.argeo.cms.CurrentUser; import org.argeo.cms.LocaleUtils; -import org.argeo.cms.auth.CurrentUser; import org.argeo.cms.auth.RemoteAuthCallbackHandler; import org.argeo.cms.servlet.ServletHttpRequest; import org.argeo.cms.servlet.ServletHttpResponse; +import org.argeo.cms.swt.AbstractSwtCmsView; import org.argeo.cms.swt.CmsSwtUtils; import org.argeo.cms.swt.SimpleSwtUxContext; import org.argeo.cms.swt.acr.AcrSwtImageManager; @@ -36,35 +34,20 @@ import org.eclipse.rap.rwt.client.service.BrowserNavigation; import org.eclipse.rap.rwt.client.service.BrowserNavigationEvent; import org.eclipse.rap.rwt.client.service.BrowserNavigationListener; import org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle; +import org.eclipse.rap.rwt.service.ServerPushSession; import org.eclipse.swt.SWT; import org.eclipse.swt.SWTError; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; -import org.osgi.service.event.Event; -import org.osgi.service.event.EventAdmin; /** The {@link CmsView} for a {@link CmsWebApp}. */ @SuppressWarnings("restriction") -public class CmsWebEntryPoint implements EntryPoint, CmsView, BrowserNavigationListener { +public class CmsWebEntryPoint extends AbstractSwtCmsView implements EntryPoint, CmsView, BrowserNavigationListener { private static final long serialVersionUID = 7733510691684570402L; private final static CmsLog log = CmsLog.getLog(CmsWebEntryPoint.class); - private EventAdmin eventAdmin; - private final CmsWebApp cmsWebApp; - private final String uiName; - - private LoginContext loginContext; - private String state; - private Throwable exception; - private UxContext uxContext; - private CmsImageManager imageManager; - - private Display display; - private CmsUi ui; - - private String uid; // Client services // private final JavaScriptExecutor jsExecutor; @@ -73,11 +56,13 @@ public class CmsWebEntryPoint implements EntryPoint, CmsView, BrowserNavigationL /** Experimental OS-like multi windows. */ private boolean multipleShells = false; + private ServerPushSession serverPushSession; + public CmsWebEntryPoint(CmsWebApp cmsWebApp, String uiName) { + super(uiName); assert cmsWebApp != null; assert uiName != null; this.cmsWebApp = cmsWebApp; - this.uiName = uiName; uid = UUID.randomUUID().toString(); // Initial login @@ -103,6 +88,7 @@ public class CmsWebEntryPoint implements EntryPoint, CmsView, BrowserNavigationL browserNavigation = RWT.getClient().getService(BrowserNavigation.class); if (browserNavigation != null) browserNavigation.addBrowserNavigationListener(this); + } protected void createContents(Composite parent) { @@ -125,6 +111,11 @@ public class CmsWebEntryPoint implements EntryPoint, CmsView, BrowserNavigationL ui = cmsWebApp.getCmsApp().initUi(parent); if (ui instanceof Composite) ((Composite) ui).setLayoutData(CmsSwtUtils.fillAll()); + serverPushSession = new ServerPushSession(); + + // required in order to doAs to work + // TODO check whether it would be worth optimising + serverPushSession.start(); // we need ui to be set before refresh so that CmsView can store UI context data // in it. cmsWebApp.getCmsApp().refreshUi(ui, null); @@ -136,19 +127,6 @@ public class CmsWebEntryPoint implements EntryPoint, CmsView, BrowserNavigationL }); } - protected Subject getSubject() { - return loginContext.getSubject(); - } - - public T doAs(PrivilegedAction action) { - return Subject.doAs(getSubject(), action); - } - - @Override - public boolean isAnonymous() { - return CurrentUser.isAnonymous(getSubject()); - } - @Override public synchronized void logout() { if (loginContext == null) @@ -189,10 +167,10 @@ public class CmsWebEntryPoint implements EntryPoint, CmsView, BrowserNavigationL return; } display.syncExec(() -> { -// CmsFeedback.show("Unexpected exception in CMS", e); - exception = e; - log.error("Unexpected exception in CMS", e); - doRefresh(); + // TODO internationalise + CmsFeedback.error("Unexpected exception", e); + // TODO report +// doRefresh(); }); } @@ -201,38 +179,28 @@ public class CmsWebEntryPoint implements EntryPoint, CmsView, BrowserNavigationL Subject.doAs(getSubject(), new PrivilegedAction() { @Override public Void run() { - if (exception != null) { - // TODO internationalise - CmsFeedback.show("Unexpected exception", exception); - exception = null; - // TODO report - } +// if (exception != null) { +// // TODO internationalise +// CmsFeedback.error("Unexpected exception", exception); +// exception = null; +// // TODO report +// } cmsWebApp.getCmsApp().refreshUi(ui, state); return null; } }); } - /** Sets the state of the entry point and retrieve the related JCR node. */ + /** Sets the state of the entry point and retrieve the related content. */ protected String setState(String newState) { cmsWebApp.getCmsApp().setState(ui, newState); state = newState; return null; } - @Override - public UxContext getUxContext() { - return uxContext; - } - - @Override - public String getUid() { - return uid; - } - @Override public void navigateTo(String state) { - exception = null; +// exception = null; String title = setState(state); if (title != null) doRefresh(); @@ -251,14 +219,13 @@ public class CmsWebEntryPoint implements EntryPoint, CmsView, BrowserNavigationL } @Override - public void sendEvent(String topic, Map properties) { - if (properties == null) - properties = new HashMap<>(); - if (properties.containsKey(CMS_VIEW_UID_PROPERTY) && !properties.get(CMS_VIEW_UID_PROPERTY).equals(uid)) - throw new IllegalArgumentException("Property " + CMS_VIEW_UID_PROPERTY + " is set to another CMS view uid (" - + properties.get(CMS_VIEW_UID_PROPERTY) + ") then " + uid); - properties.put(CMS_VIEW_UID_PROPERTY, uid); - eventAdmin.sendEvent(new Event(topic, properties)); + public CmsEventBus getCmsEventBus() { + return cmsWebApp.getCmsEventBus(); + } + + @Override + public CmsApp getCmsApp() { + return cmsWebApp.getCmsApp(); } @Override @@ -274,24 +241,6 @@ public class CmsWebEntryPoint implements EntryPoint, CmsView, BrowserNavigationL return cmsSession; } - @Override - public Object getData(String key) { - if (ui != null) { - return ui.getData(key); - } else { - throw new IllegalStateException("UI is not initialized"); - } - } - - @Override - public void setData(String key, Object value) { - if (ui != null) { - ui.setData(key, value); - } else { - throw new IllegalStateException("UI is not initialized"); - } - } - /* * EntryPoint IMPLEMENTATION */ @@ -334,9 +283,9 @@ public class CmsWebEntryPoint implements EntryPoint, CmsView, BrowserNavigationL } } else if (e instanceof ThreadDeath) { throw (ThreadDeath) e; - } else if (e instanceof Error) { - log.error("Unexpected error in event loop, shutting down...", e); - break eventLoop; +// } else if (e instanceof Error) { +// log.error("Unexpected error in event loop, shutting down...", e); +// break eventLoop; } else { log.error("Unexpected exception in event loop, ignoring it. " + e.getMessage()); continue eventLoop; @@ -360,9 +309,4 @@ public class CmsWebEntryPoint implements EntryPoint, CmsView, BrowserNavigationL } return shell; } - - public void setEventAdmin(EventAdmin eventAdmin) { - this.eventAdmin = eventAdmin; - } - }