1 package org
.argeo
.cms
.e4
.rap
;
3 import java
.util
.HashMap
;
6 import org
.argeo
.cms
.swt
.dialogs
.CmsFeedback
;
7 import org
.eclipse
.rap
.e4
.E4ApplicationConfig
;
8 import org
.eclipse
.rap
.rwt
.application
.Application
;
9 import org
.eclipse
.rap
.rwt
.application
.Application
.OperationMode
;
10 import org
.eclipse
.rap
.rwt
.application
.ApplicationConfiguration
;
11 import org
.eclipse
.rap
.rwt
.application
.ExceptionHandler
;
12 import org
.eclipse
.rap
.rwt
.client
.WebClient
;
13 import org
.osgi
.framework
.BundleContext
;
15 /** Base class for CMS RAP applications. */
16 public abstract class AbstractRapE4App
implements ApplicationConfiguration
{
19 private String lifeCycleUri
= "bundleclass://org.argeo.cms.e4.rap/org.argeo.cms.e4.rap.CmsLoginLifecycle";
21 private Map
<String
, String
> baseProperties
= new HashMap
<String
, String
>();
23 private BundleContext bundleContext
;
24 public final static String CONTEXT_NAME_PROPERTY
= "contextName";
25 private String contextName
;
28 * To be overridden in order to add multiple entry points, directly or using
29 * {@link #addE4EntryPoint(Application, String, String, Map)}.
31 protected void addEntryPoints(Application application
) {
34 public void configure(Application application
) {
35 application
.setExceptionHandler(new ExceptionHandler() {
38 public void handleException(Throwable throwable
) {
39 CmsFeedback
.show("Unexpected RWT exception", throwable
);
43 if (e4Xmi
!= null) {// backward compatibility
44 addE4EntryPoint(application
, path
, e4Xmi
, getBaseProperties());
46 addEntryPoints(application
);
50 protected Map
<String
, String
> getBaseProperties() {
51 return baseProperties
;
54 // protected void addEntryPoint(Application application, E4ApplicationConfig config, Map<String, String> properties) {
55 // CmsE4EntryPointFactory entryPointFactory = new CmsE4EntryPointFactory(config);
56 // application.addEntryPoint(path, entryPointFactory, properties);
57 // application.setOperationMode(OperationMode.SWT_COMPATIBILITY);
60 protected void addE4EntryPoint(Application application
, String path
, String e4Xmi
, Map
<String
, String
> properties
) {
61 E4ApplicationConfig config
= createE4ApplicationConfig(e4Xmi
);
62 CmsE4EntryPointFactory entryPointFactory
= new CmsE4EntryPointFactory(config
);
63 application
.addEntryPoint(path
, entryPointFactory
, properties
);
64 application
.setOperationMode(OperationMode
.SWT_COMPATIBILITY
);
68 * To be overridden for further configuration.
70 * @see E4ApplicationConfig
72 protected E4ApplicationConfig
createE4ApplicationConfig(String e4Xmi
) {
73 return new E4ApplicationConfig(e4Xmi
, lifeCycleUri
, null, null, false, true, true);
77 public void setPageTitle(String pageTitle
) {
78 if (pageTitle
!= null)
79 baseProperties
.put(WebClient
.PAGE_TITLE
, pageTitle
);
82 /** Returns a new map used to customise and entry point. */
83 public Map
<String
, String
> customise(String pageTitle
) {
84 Map
<String
, String
> custom
= new HashMap
<>(getBaseProperties());
85 if (pageTitle
!= null)
86 custom
.put(WebClient
.PAGE_TITLE
, pageTitle
);
91 public void setE4Xmi(String e4Xmi
) {
96 public void setPath(String path
) {
100 public void setLifeCycleUri(String lifeCycleUri
) {
101 this.lifeCycleUri
= lifeCycleUri
;
104 protected BundleContext
getBundleContext() {
105 return bundleContext
;
108 protected void setBundleContext(BundleContext bundleContext
) {
109 this.bundleContext
= bundleContext
;
112 public String
getContextName() {
116 public void setContextName(String contextName
) {
117 this.contextName
= contextName
;
120 public void init(BundleContext bundleContext
, Map
<String
, Object
> properties
) {
121 this.bundleContext
= bundleContext
;
122 for (String key
: properties
.keySet()) {
123 Object value
= properties
.get(key
);
125 baseProperties
.put(key
, value
.toString());
128 if (properties
.containsKey(CONTEXT_NAME_PROPERTY
)) {
129 assert properties
.get(CONTEXT_NAME_PROPERTY
) != null;
130 contextName
= properties
.get(CONTEXT_NAME_PROPERTY
).toString();
132 contextName
= "<unknown context>";
136 public void destroy(Map
<String
, Object
> properties
) {