X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.e4.rap%2Fsrc%2Forg%2Fargeo%2Fcms%2Fe4%2Frap%2FAbstractRapE4App.java;h=c293f1ab02524b4516a5f9ca00c9935aeef6b9eb;hb=08c2efb392a969f02008073f55d310c95bddade9;hp=da71e90ad43cad4d98466a0570c98c55eed0b859;hpb=06ec86e90b88db589d8928b80cbc236f1ea3b230;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/AbstractRapE4App.java b/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/AbstractRapE4App.java index da71e90ad..c293f1ab0 100644 --- a/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/AbstractRapE4App.java +++ b/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/AbstractRapE4App.java @@ -3,8 +3,6 @@ package org.argeo.cms.e4.rap; import java.util.HashMap; import java.util.Map; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.argeo.cms.ui.dialogs.CmsFeedback; import org.eclipse.rap.e4.E4ApplicationConfig; import org.eclipse.rap.rwt.application.Application; @@ -12,17 +10,14 @@ import org.eclipse.rap.rwt.application.Application.OperationMode; import org.eclipse.rap.rwt.application.ApplicationConfiguration; import org.eclipse.rap.rwt.application.ExceptionHandler; import org.eclipse.rap.rwt.client.WebClient; -import org.osgi.framework.BundleContext; -import org.osgi.framework.FrameworkUtil; +/** Base class for CMS RAP applications. */ public abstract class AbstractRapE4App implements ApplicationConfiguration { - private final static Log log = LogFactory.getLog(AbstractRapE4App.class); - - private final BundleContext bc = FrameworkUtil.getBundle(AbstractRapE4App.class).getBundleContext(); - - 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 baseProperties = new HashMap(); public void configure(Application application) { application.setExceptionHandler(new ExceptionHandler() { @@ -30,65 +25,87 @@ public abstract class AbstractRapE4App implements ApplicationConfiguration { @Override public void handleException(Throwable throwable) { CmsFeedback.show("Unexpected RWT exception", throwable); - // log.error("Unexpected RWT exception", throwable); - } }); - String lifeCycleUri = "bundleclass://" + bc.getBundle().getSymbolicName() + "/" - + CmsLoginLifecycle.class.getName(); - - Map properties = new HashMap(); - properties.put(WebClient.PAGE_TITLE, pageTitle); - E4ApplicationConfig config = new E4ApplicationConfig(e4Xmi, lifeCycleUri, null, false, true, true); - addEntryPoint(application, config, properties); - // config.isClearPersistedState(); - // E4EntryPointFactory entryPointFactory = new E4EntryPointFactory(config) { - // - // @Override - // public EntryPoint create() { - // Subject subject = new Subject(); - // EntryPoint ep = createEntryPoint(); - // EntryPoint authEp = new EntryPoint() { - // - // @Override - // public int createUI() { - // return Subject.doAs(subject, new PrivilegedAction() { - // - // @Override - // public Integer run() { - // return ep.createUI(); - // } - // - // }); - // } - // }; - // return authEp; - // } - // - // protected EntryPoint createEntryPoint() { - // return super.create(); - // } - // - // }; + 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 properties) { + protected Map getBaseProperties() { + return baseProperties; + } + +// protected void addEntryPoint(Application application, E4ApplicationConfig config, Map 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 properties) { + E4ApplicationConfig config = createE4ApplicationConfig(e4Xmi); CmsE4EntryPointFactory entryPointFactory = new CmsE4EntryPointFactory(config); application.addEntryPoint(path, entryPointFactory, properties); application.setOperationMode(OperationMode.SWT_COMPATIBILITY); } + /** + * To be overridden for further configuration. + * + * @see E4ApplicationConfig + */ + protected E4ApplicationConfig createE4ApplicationConfig(String e4Xmi) { + return new E4ApplicationConfig(e4Xmi, lifeCycleUri, null, null, false, true, true); + } + + @Deprecated public void setPageTitle(String pageTitle) { - this.pageTitle = pageTitle; + if (pageTitle != null) + baseProperties.put(WebClient.PAGE_TITLE, pageTitle); } + /** Returns a new map used to customise and entry point. */ + public Map customise(String pageTitle) { + Map custom = new HashMap<>(getBaseProperties()); + if (pageTitle != null) + custom.put(WebClient.PAGE_TITLE, pageTitle); + return custom; + } + + @Deprecated public void setE4Xmi(String e4Xmi) { this.e4Xmi = e4Xmi; } + @Deprecated public void setPath(String path) { this.path = path; } + public void setLifeCycleUri(String lifeCycleUri) { + this.lifeCycleUri = lifeCycleUri; + } + + public void init(Map properties) { + for (String key : properties.keySet()) { + Object value = properties.get(key); + if (value != null) + baseProperties.put(key, value.toString()); + } + } + + public void destroy(Map properties) { + + } }