import org.apache.commons.logging.LogFactory;
import org.argeo.cms.e4.rap.AbstractRapE4App;
import org.argeo.cms.ui.util.CmsTheme;
+import org.argeo.util.LangUtils;
import org.eclipse.rap.rwt.application.ApplicationConfiguration;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.service.cm.ConfigurationException;
import org.osgi.service.cm.ManagedServiceFactory;
+/**
+ * Managed service factory deploying Argeo RAP app based on OSGi configurations.
+ */
public class AppDeployer implements ManagedServiceFactory {
+ public final static String CMS_THEME_BUNDLE_PROPERTY = "argeo.cms.theme.bundle";
+ public final static String DEFAULT_CMS_THEME_BUNDLE = "org.argeo.theme.argeo2";
+
private final static Log log = LogFactory.getLog(AppDeployer.class);
private BundleContext bundleContext;
public void init(BundleContext bundleContext, Map<String, String> properties) {
this.bundleContext = bundleContext;
- deploy(findBundle("org.argeo.suite.studio", null));
- deploy(findBundle("org.argeo.suite.docs", null));
+ deploy(findBundle("org.argeo.suite.studio", null), properties);
+ deploy(findBundle("org.argeo.suite.docs", null), properties);
}
public void destroy() {
@Override
public void updated(String pid, Dictionary<String, ?> properties) throws ConfigurationException {
Bundle bundle = findBundle(pid, properties);
- deploy(bundle);
+ deploy(bundle, LangUtils.dictToStringMap(properties));
}
- protected void deploy(Bundle bundle) {
- CmsTheme cmsTheme = new CmsTheme(bundleContext, "org.argeo.theme.argeo2");
+ protected void deploy(Bundle bundle, Map<String, String> properties) {
+ CmsTheme cmsTheme;
+ if (properties.containsKey(CMS_THEME_BUNDLE_PROPERTY)) {
+ String cmsThemeBundle = properties.get(CMS_THEME_BUNDLE_PROPERTY);
+ cmsTheme = new CmsTheme(bundleContext, cmsThemeBundle);
+ } else {
+ cmsTheme = new CmsTheme(bundleContext, DEFAULT_CMS_THEME_BUNDLE);
+ }
- ArgeoRapApp app = new ArgeoRapApp(bundle, cmsTheme);
+ ArgeoRapApp app = new ArgeoRapApp(bundleContext, bundle, cmsTheme);
Hashtable<String, String> props = new Hashtable<String, String>();
props.put(AbstractRapE4App.CONTEXT_NAME_PROPERTY, app.getContextName());
package org.argeo.suite.e4.rap.settings;
+import static org.argeo.suite.e4.rap.settings.AppDeployer.CMS_THEME_BUNDLE_PROPERTY;
+import static org.argeo.suite.e4.rap.settings.AppDeployer.DEFAULT_CMS_THEME_BUNDLE;
+
import java.util.Enumeration;
+import java.util.Map;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.logging.Log;
import org.eclipse.rap.rwt.application.Application;
import org.eclipse.rap.rwt.client.WebClient;
import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
/** Argeo RAP app. */
public class ArgeoRapApp extends AbstractRapE4App {
private final static Log log = LogFactory.getLog(ArgeoRapApp.class);
- private Bundle bundle;
private CmsTheme cmsTheme;
private String baseE4xmi = "/e4xmi";
+ private Bundle bundle;
- public ArgeoRapApp(Bundle bundle, CmsTheme cmsTheme) {
- this.bundle = bundle;
+ public ArgeoRapApp(BundleContext bundleContext, Bundle bundle, CmsTheme cmsTheme) {
+ setBundleContext(bundleContext);
this.cmsTheme = cmsTheme;
+ this.bundle = bundle;
setLifeCycleUri("bundleclass://org.argeo.suite.e4.rap/org.argeo.suite.e4.rap.ArgeoSuiteLoginLifecycle");
String contextName = "argeo/" + FilenameUtils.getExtension(bundle.getSymbolicName());
setContextName(contextName);
}
+ public ArgeoRapApp() {
+ setLifeCycleUri("bundleclass://org.argeo.suite.e4.rap/org.argeo.suite.e4.rap.ArgeoSuiteLoginLifecycle");
+ }
+
+ @Override
+ public void init(BundleContext bundleContext, Map<String, Object> properties) {
+ super.init(bundleContext, properties);
+ // super must be first
+ if (getBaseProperties().containsKey(CMS_THEME_BUNDLE_PROPERTY)) {
+ String cmsThemeBundle = getBaseProperties().get(CMS_THEME_BUNDLE_PROPERTY);
+ cmsTheme = new CmsTheme(getBundleContext(), cmsThemeBundle);
+ } else {
+ cmsTheme = new CmsTheme(getBundleContext(), DEFAULT_CMS_THEME_BUNDLE);
+ }
+ bundle = bundleContext.getBundle();
+ }
+
@Override
protected void addEntryPoints(Application application) {
if (cmsTheme != null)