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;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.argeo.cms.CmsConstants;
import org.argeo.cms.CmsException;
-import org.argeo.cms.CmsUiProvider;
-import org.argeo.cms.LifeCycleUiProvider;
+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.eclipse.rap.rwt.RWT;
import org.eclipse.rap.rwt.application.Application;
import org.eclipse.rap.rwt.application.Application.OperationMode;
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;
private Repository repository;
private String workspace = null;
private String jcrBasePath = "/";
- private List<String> roPrincipals = Arrays.asList("anonymous", "everyone");
- private List<String> rwPrincipals = Arrays.asList("everyone");
+ private List<String> roPrincipals = Arrays.asList(NodeConstants.ROLE_ANONYMOUS, NodeConstants.ROLE_USER);
+ private List<String> rwPrincipals = Arrays.asList(NodeConstants.ROLE_USER);
private CmsUiProvider header;
private Map<String, CmsUiProvider> pages = new LinkedHashMap<String, CmsUiProvider>();
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);
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));
Map<String, String> defaultBranding = null;
if (branding.containsKey("*"))
defaultBranding = branding.get("*");
+ String defaultTheme = defaultBranding.get(WebClient.THEME_ID);
// entry points
for (String page : pages.keySet()) {
- Map<String, String> properties = defaultBranding != null ? new HashMap<String, String>(
- defaultBranding) : new HashMap<String, String>();
+ Map<String, String> properties = defaultBranding != null ? new HashMap<String, String>(defaultBranding)
+ : new HashMap<String, String>();
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);
// 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
//
// 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<Bundle> 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<String> cssLst = styleSheets.get(themeId);
if (log.isDebugEnabled())
log.debug("Theme " + themeId);
}
}
+ 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;
}
}
try {
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);
}
}
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);
}
Hashtable<String, String> props = new Hashtable<String, String>();
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));
}
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) {
private final String workspace;
private final Map<String, String> properties;
- public CmsEntryPointFactory(CmsUiProvider page, Repository repository,
- String workspace, Map<String, String> properties) {
+ public CmsEntryPointFactory(CmsUiProvider page, Repository repository, String workspace,
+ Map<String, String> properties) {
this.page = page;
this.repository = repository;
this.workspace = workspace;
@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) {
@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();
}
});
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);
}
};
}
private static String DEFAULT_LOADING_BODY = "<div"
+ " style=\"position: absolute; left: 50%; top: 50%; margin: -32px -32px; width: 64px; height:64px\">"
+ "<img src=\"./rwt-resources/" + LOADING_IMAGE
- + "\" width=\"32\" height=\"32\" style=\"margin: 16px 16px\"/>"
- + "</div>";
+ + "\" width=\"32\" height=\"32\" style=\"margin: 16px 16px\"/>" + "</div>";
}