X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.ui%2Fsrc%2Forg%2Fargeo%2Fcms%2Futil%2FSimpleApp.java;h=327438b56c58b04690fa5321bf644756d93ed472;hb=92b77a90db637e71a7ccbc76fc12bad6ba4a289a;hp=a0dc732624051108ebf391a91a1c1d8b8de0cbc9;hpb=c5fa035468228d1f87ab5431a3fad17403eee1c3;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.ui/src/org/argeo/cms/util/SimpleApp.java b/org.argeo.cms.ui/src/org/argeo/cms/util/SimpleApp.java index a0dc73262..327438b56 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/util/SimpleApp.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/util/SimpleApp.java @@ -5,10 +5,12 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.Hashtable; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Set; import javax.jcr.Repository; import javax.jcr.RepositoryException; @@ -23,6 +25,8 @@ import org.argeo.cms.ui.CmsConstants; import org.argeo.cms.ui.CmsUiProvider; import org.argeo.cms.ui.LifeCycleUiProvider; import org.argeo.jcr.JcrUtils; +import org.argeo.node.NodeConstants; +import org.argeo.node.NodeUtils; import org.eclipse.rap.rwt.RWT; import org.eclipse.rap.rwt.application.Application; import org.eclipse.rap.rwt.application.Application.OperationMode; @@ -39,6 +43,7 @@ import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; +import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceRegistration; @@ -58,8 +63,8 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration { private Repository repository; private String workspace = null; private String jcrBasePath = "/"; - private List roPrincipals = Arrays.asList("anonymous", "everyone"); - private List rwPrincipals = Arrays.asList("everyone"); + private List roPrincipals = Arrays.asList(NodeConstants.ROLE_ANONYMOUS, NodeConstants.ROLE_USER); + private List rwPrincipals = Arrays.asList(NodeConstants.ROLE_USER); private CmsUiProvider header; private Map pages = new LinkedHashMap(); @@ -70,10 +75,7 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration { public void configure(Application application) { try { - StyleSheetResourceLoader styleSheetRL = new StyleSheetResourceLoader( - bundleContext); - BundleResourceLoader bundleRL = new BundleResourceLoader( - bundleContext); + BundleResourceLoader bundleRL = new BundleResourceLoader(bundleContext.getBundle()); application.setOperationMode(OperationMode.SWT_COMPATIBILITY); // application.setOperationMode(OperationMode.JEE_COMPATIBILITY); @@ -81,8 +83,7 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration { application.setExceptionHandler(new CmsExceptionHandler()); // loading animated gif - application.addResource(LOADING_IMAGE, - createResourceLoader(LOADING_IMAGE)); + application.addResource(LOADING_IMAGE, createResourceLoader(LOADING_IMAGE)); // empty image application.addResource(NO_IMAGE, createResourceLoader(NO_IMAGE)); @@ -95,19 +96,22 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration { Map defaultBranding = null; if (branding.containsKey("*")) defaultBranding = branding.get("*"); + String defaultTheme = defaultBranding.get(WebClient.THEME_ID); // entry points for (String page : pages.keySet()) { - Map properties = defaultBranding != null ? new HashMap( - defaultBranding) : new HashMap(); + Map properties = defaultBranding != null ? new HashMap(defaultBranding) + : new HashMap(); if (branding.containsKey(page)) { properties.putAll(branding.get(page)); } // favicon if (properties.containsKey(WebClient.FAVICON)) { + String themeId = defaultBranding.get(WebClient.THEME_ID); + Bundle themeBundle = ThemeUtils.findThemeBundle(bundleContext, themeId); String faviconRelPath = properties.get(WebClient.FAVICON); application.addResource(faviconRelPath, - new BundleResourceLoader(bundleContext)); + new BundleResourceLoader(themeBundle != null ? themeBundle : bundleContext.getBundle())); if (log.isTraceEnabled()) log.trace("Favicon " + faviconRelPath); @@ -116,10 +120,7 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration { // page title if (!properties.containsKey(WebClient.PAGE_TITLE)) { if (page.length() > 0) - properties.put( - WebClient.PAGE_TITLE, - Character.toUpperCase(page.charAt(0)) - + page.substring(1)); + properties.put(WebClient.PAGE_TITLE, Character.toUpperCase(page.charAt(0)) + page.substring(1)); } // default body HTML @@ -129,28 +130,38 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration { // // ADD ENTRY POINT // - application.addEntryPoint("/" + page, new CmsEntryPointFactory( - pages.get(page), repository, workspace, properties), - properties); + application.addEntryPoint("/" + page, + new CmsEntryPointFactory(pages.get(page), repository, workspace, properties), properties); log.info("Page /" + page); } - // stylesheets + // stylesheets and themes + Set themeBundles = new HashSet<>(); for (String themeId : styleSheets.keySet()) { + Bundle themeBundle = ThemeUtils.findThemeBundle(bundleContext, themeId); + StyleSheetResourceLoader styleSheetRL = new StyleSheetResourceLoader( + themeBundle != null ? themeBundle : bundleContext.getBundle()); + if (themeBundle != null) + themeBundles.add(themeBundle); List cssLst = styleSheets.get(themeId); if (log.isDebugEnabled()) log.debug("Theme " + themeId); for (String css : cssLst) { application.addStyleSheet(themeId, css, styleSheetRL); - if (log.isTraceEnabled()) - log.trace(" CSS " + css); + if (log.isDebugEnabled()) + log.debug(" CSS " + css); } } + for (Bundle themeBundle : themeBundles) { + BundleResourceLoader themeBRL = new BundleResourceLoader(themeBundle); + ThemeUtils.addThemeResources(application, themeBundle, themeBRL, "*.png"); + ThemeUtils.addThemeResources(application, themeBundle, themeBRL, "*.gif"); + ThemeUtils.addThemeResources(application, themeBundle, themeBRL, "*.jpg"); + } } catch (RuntimeException e) { // Easier access to initialisation errors - log.error("Unexpected exception when configuring RWT application.", - e); + log.error("Unexpected exception when configuring RWT application.", e); throw e; } } @@ -158,25 +169,24 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration { public void init() throws RepositoryException { Session session = null; try { - session = JcrUtils.loginOrCreateWorkspace(repository, workspace); + session = NodeUtils.openDataAdminSession(repository, workspace); + // session = JcrUtils.loginOrCreateWorkspace(repository, workspace); VersionManager vm = session.getWorkspace().getVersionManager(); - if (!vm.isCheckedOut("/")) - vm.checkout("/"); JcrUtils.mkdirs(session, jcrBasePath); + session.save(); + if (!vm.isCheckedOut(jcrBasePath)) + vm.checkout(jcrBasePath); for (String principal : rwPrincipals) - JcrUtils.addPrivilege(session, jcrBasePath, principal, - Privilege.JCR_WRITE); + JcrUtils.addPrivilege(session, jcrBasePath, principal, Privilege.JCR_WRITE); for (String principal : roPrincipals) - JcrUtils.addPrivilege(session, jcrBasePath, principal, - Privilege.JCR_READ); + JcrUtils.addPrivilege(session, jcrBasePath, principal, Privilege.JCR_READ); for (String pageName : pages.keySet()) { try { initPage(session, pages.get(pageName)); session.save(); } catch (Exception e) { - throw new CmsException( - "Cannot initialize page " + pageName, e); + throw new CmsException("Cannot initialize page " + pageName, e); } } @@ -188,8 +198,7 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration { register(); } - protected void initPage(Session adminSession, CmsUiProvider page) - throws RepositoryException { + protected void initPage(Session adminSession, CmsUiProvider page) throws RepositoryException { if (page instanceof LifeCycleUiProvider) ((LifeCycleUiProvider) page).init(adminSession); } @@ -210,8 +219,7 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration { Hashtable props = new Hashtable(); if (contextName != null) props.put("contextName", contextName); - appReg = bundleContext.registerService(ApplicationConfiguration.class, - this, props); + appReg = bundleContext.registerService(ApplicationConfiguration.class, this, props); if (log.isDebugEnabled()) log.debug("Registered " + (contextName == null ? "/" : contextName)); } @@ -219,8 +227,7 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration { protected void unregister() { appReg.unregister(); if (log.isDebugEnabled()) - log.debug("Unregistered " - + (contextName == null ? "/" : contextName)); + log.debug("Unregistered " + (contextName == null ? "/" : contextName)); } public void setRepository(Repository repository) { @@ -291,8 +298,8 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration { private final String workspace; private final Map properties; - public CmsEntryPointFactory(CmsUiProvider page, Repository repository, - String workspace, Map properties) { + public CmsEntryPointFactory(CmsUiProvider page, Repository repository, String workspace, + Map properties) { this.page = page; this.repository = repository; this.workspace = workspace; @@ -301,8 +308,8 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration { @Override public EntryPoint create() { - SimpleErgonomics entryPoint = new SimpleErgonomics(repository, - workspace, jcrBasePath, page, properties) { + SimpleErgonomics entryPoint = new SimpleErgonomics(repository, workspace, jcrBasePath, page, properties) { + private static final long serialVersionUID = -637940404865527290L; @Override protected void createAdminArea(Composite parent) { @@ -316,13 +323,8 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration { @Override public void widgetSelected(SelectionEvent e) { long timeBeforeReload = 1000; - RWT.getClient() - .getService(JavaScriptExecutor.class) - .execute( - "setTimeout(function() { " - + "location.reload();" - + "}," + timeBeforeReload - + ");"); + RWT.getClient().getService(JavaScriptExecutor.class).execute( + "setTimeout(function() { " + "location.reload();" + "}," + timeBeforeReload + ");"); reloadApp(); } }); @@ -348,10 +350,8 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration { private static ResourceLoader createResourceLoader(final String resourceName) { return new ResourceLoader() { - public InputStream getResourceAsStream(String resourceName) - throws IOException { - return getClass().getClassLoader().getResourceAsStream( - resourceName); + public InputStream getResourceAsStream(String resourceName) throws IOException { + return getClass().getClassLoader().getResourceAsStream(resourceName); } }; } @@ -371,6 +371,5 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration { private static String DEFAULT_LOADING_BODY = "" + "" - + ""; + + "\" width=\"32\" height=\"32\" style=\"margin: 16px 16px\"/>" + ""; }