Make RAP Apps more extensible by entroducing multiple entry points.
authorMathieu Baudier <mbaudier@argeo.org>
Sun, 22 Sep 2019 09:29:39 +0000 (11:29 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Sun, 22 Sep 2019 09:29:39 +0000 (11:29 +0200)
org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/AbstractRapE4App.java

index 66c796b8359b291a261123e7bc98dac6071d71d2..1d70044b3e5d4edb800721dc311ad811aa1cec7f 100644 (file)
@@ -11,12 +11,14 @@ import org.eclipse.rap.rwt.application.ApplicationConfiguration;
 import org.eclipse.rap.rwt.application.ExceptionHandler;
 import org.eclipse.rap.rwt.client.WebClient;
 
+/** Base class for CMS RAP applications. */
 public abstract class AbstractRapE4App implements ApplicationConfiguration {
-       private String pageTitle;
        private String e4Xmi;
        private String path;
        private String lifeCycleUri = "bundleclass://org.argeo.cms.e4.rap/org.argeo.cms.e4.rap.CmsLoginLifecycle";
 
+       Map<String, String> baseProperties = new HashMap<String, String>();
+
        public void configure(Application application) {
                application.setExceptionHandler(new ExceptionHandler() {
 
@@ -26,20 +28,41 @@ public abstract class AbstractRapE4App implements ApplicationConfiguration {
                        }
                });
 
-               Map<String, String> properties = new HashMap<String, String>();
-               properties.put(WebClient.PAGE_TITLE, pageTitle);
-               E4ApplicationConfig config = new E4ApplicationConfig(e4Xmi, lifeCycleUri, null, null, false, true, true);
-               addEntryPoint(application, config, properties);
+               if (e4Xmi != null) {// backward compatibility
+                       addE4EntryPoint(application, path, e4Xmi, getBaseProperties());
+               } else {
+                       addEntryPoints(application);
+               }
+       }
+
+       /**
+        * To be overridden in order to add multiple entry points, directly or using
+        * {@link #addE4EntryPoint(Application, String, String, Map)}.
+        */
+       protected void addEntryPoints(Application application) {
+
        }
 
-       protected void addEntryPoint(Application application, E4ApplicationConfig config, Map<String, String> properties) {
+       protected Map<String, String> getBaseProperties() {
+               return baseProperties;
+       }
+
+//     protected void addEntryPoint(Application application, E4ApplicationConfig config, Map<String, String> properties) {
+//             CmsE4EntryPointFactory entryPointFactory = new CmsE4EntryPointFactory(config);
+//             application.addEntryPoint(path, entryPointFactory, properties);
+//             application.setOperationMode(OperationMode.SWT_COMPATIBILITY);
+//     }
+
+       protected void addE4EntryPoint(Application application, String path, String e4Xmi, Map<String, String> properties) {
+               E4ApplicationConfig config = new E4ApplicationConfig(e4Xmi, lifeCycleUri, null, null, false, true, true);
                CmsE4EntryPointFactory entryPointFactory = new CmsE4EntryPointFactory(config);
                application.addEntryPoint(path, entryPointFactory, properties);
                application.setOperationMode(OperationMode.SWT_COMPATIBILITY);
        }
 
        public void setPageTitle(String pageTitle) {
-               this.pageTitle = pageTitle;
+               if (pageTitle != null)
+                       baseProperties.put(WebClient.PAGE_TITLE, pageTitle);
        }
 
        public void setE4Xmi(String e4Xmi) {
@@ -54,4 +77,11 @@ public abstract class AbstractRapE4App implements ApplicationConfiguration {
                this.lifeCycleUri = lifeCycleUri;
        }
 
+       public void init(Map<String, Object> properties) {
+               for (String key : properties.keySet()) {
+                       Object value = properties.get(key);
+                       if (value != null)
+                               baseProperties.put(key, value.toString());
+               }
+       }
 }