Introduce CMS event bus and use it in UI.
[lgpl/argeo-commons.git] / swt / rcp / org.argeo.cms.swt.rcp / src / org / argeo / cms / ui / rcp / CmsRcpApp.java
index e25a9f71149b66d0aaf2168e4f0fe31e936e8e92..3cf243851cb2bd66483d381242b4ebc01ec7e924 100644 (file)
@@ -3,7 +3,6 @@ package org.argeo.cms.ui.rcp;
 import java.io.IOException;
 import java.io.InputStream;
 import java.security.PrivilegedAction;
-import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
 
@@ -13,13 +12,12 @@ 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.CmsTheme;
-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.swt.AbstractSwtCmsView;
 import org.argeo.cms.swt.CmsSwtUtils;
 import org.eclipse.e4.ui.css.core.engine.CSSEngine;
 import org.eclipse.e4.ui.css.core.engine.CSSErrorHandler;
@@ -27,39 +25,24 @@ import org.eclipse.e4.ui.css.swt.engine.CSSSWTEngineImpl;
 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;
 
 /** Runs a {@link CmsApp} as an SWT desktop application. */
 @SuppressWarnings("restriction")
-public class CmsRcpApp implements CmsView {
+public class CmsRcpApp extends AbstractSwtCmsView implements CmsView {
        private final static CmsLog log = CmsLog.getLog(CmsRcpApp.class);
 
-       // private BundleContext bundleContext =
-       // FrameworkUtil.getBundle(CmsRcpApp.class).getBundleContext();
-
        private Shell shell;
        private CmsApp cmsApp;
 
-       // CMS View
-       private String uid;
-       private LoginContext loginContext;
-
-       private EventAdmin eventAdmin;
-
        private CSSEngine cssEngine;
 
-       private CmsUi ui;
-       // TODO make it configurable
-       private String uiName = "desktop";
-
        public CmsRcpApp(String uiName) {
+               super(uiName);
                uid = UUID.randomUUID().toString();
-               this.uiName = uiName;
        }
 
        public void initRcpApp() {
-               Display display = Display.getCurrent();
+               display = Display.getCurrent();
                shell = new Shell(display);
                shell.setText("Argeo CMS");
                Composite parent = shell;
@@ -115,16 +98,6 @@ public class CmsRcpApp implements CmsView {
         * CMS VIEW
         */
 
-       @Override
-       public String getUid() {
-               return uid;
-       }
-
-       @Override
-       public UxContext getUxContext() {
-               throw new UnsupportedOperationException();
-       }
-
        @Override
        public void navigateTo(String state) {
                throw new UnsupportedOperationException();
@@ -149,35 +122,12 @@ public class CmsRcpApp implements CmsView {
                log.error("Unexpected exception in CMS RCP", e);
        }
 
-       @Override
-       public CmsImageManager getImageManager() {
-               throw new UnsupportedOperationException();
-       }
-
        @Override
        public CmsSession getCmsSession() {
                CmsSession cmsSession = cmsApp.getCmsContext().getCmsSession(getSubject());
                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");
-               }
-       }
-
        @Override
        public boolean isAnonymous() {
                return false;
@@ -189,29 +139,15 @@ public class CmsRcpApp implements CmsView {
                        cssEngine.applyStyles(node, true);
        }
 
-       @Override
-       public void sendEvent(String topic, Map<String, Object> 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 <T> T doAs(PrivilegedAction<T> action) {
-               return Subject.doAs(getSubject(), action);
-       }
-
-       protected Subject getSubject() {
-               return loginContext.getSubject();
-       }
-
        public Shell getShell() {
                return shell;
        }
 
+       @Override
+       public CmsEventBus getCmsEventBus() {
+               return cmsApp.getCmsContext().getCmsEventBus();
+       }
+
        /*
         * DEPENDENCY INJECTION
         */
@@ -223,8 +159,4 @@ public class CmsRcpApp implements CmsView {
                this.cmsApp = null;
        }
 
-       public void setEventAdmin(EventAdmin eventAdmin) {
-               this.eventAdmin = eventAdmin;
-       }
-
 }