From 5857e869a5760aeb6de2c32d32ed4de3e28b42b6 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Fri, 30 Sep 2016 09:57:44 +0000 Subject: [PATCH] Fix behaviour when CMS JCR context is not available. git-svn-id: https://svn.argeo.org/commons/trunk@9228 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../forms/EditableMultiStringProperty.java | 4 +- .../cms/maintenance/DeploymentEntryPoint.java | 2 - .../argeo/cms/ui/AbstractCmsEntryPoint.java | 12 ++- .../src/org/argeo/cms/util/SimpleApp.java | 73 +++++++------------ .../org/argeo/cms/util/SimpleErgonomics.java | 14 ++-- 5 files changed, 41 insertions(+), 64 deletions(-) diff --git a/org.argeo.cms.ui/src/org/argeo/cms/forms/EditableMultiStringProperty.java b/org.argeo.cms.ui/src/org/argeo/cms/forms/EditableMultiStringProperty.java index fdaa0365c..e02bdeb93 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/forms/EditableMultiStringProperty.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/forms/EditableMultiStringProperty.java @@ -31,7 +31,7 @@ public class EditableMultiStringProperty extends StyledControl implements private String propertyName; private String message; // TODO implement the ability to provide a list of legal values - private String[] possibleValues; +// private String[] possibleValues; private boolean canEdit; private SelectionListener removeValueSL; private List values; @@ -52,7 +52,7 @@ public class EditableMultiStringProperty extends StyledControl implements this.propertyName = propertyName; this.values = values; - this.possibleValues = possibleValues; +// this.possibleValues = possibleValues; this.message = addValueMsg; this.canEdit = removeValueSelectionListener != null; this.removeValueSL = removeValueSelectionListener; diff --git a/org.argeo.cms.ui/src/org/argeo/cms/maintenance/DeploymentEntryPoint.java b/org.argeo.cms.ui/src/org/argeo/cms/maintenance/DeploymentEntryPoint.java index 1769c6372..8dda4c476 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/maintenance/DeploymentEntryPoint.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/maintenance/DeploymentEntryPoint.java @@ -3,8 +3,6 @@ package org.argeo.cms.maintenance; import java.util.GregorianCalendar; import java.util.TimeZone; -import org.argeo.cms.auth.AuthConstants; -import org.argeo.cms.auth.CurrentUser; import org.argeo.cms.util.CmsUtils; import org.argeo.node.NodeConstants; import org.argeo.node.NodeDeployment; diff --git a/org.argeo.cms.ui/src/org/argeo/cms/ui/AbstractCmsEntryPoint.java b/org.argeo.cms.ui/src/org/argeo/cms/ui/AbstractCmsEntryPoint.java index 4729c5b75..a5fa5ef65 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/ui/AbstractCmsEntryPoint.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/ui/AbstractCmsEntryPoint.java @@ -38,6 +38,8 @@ import org.eclipse.swt.widgets.Shell; /** Manages history and navigation */ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implements CmsView { + private static final long serialVersionUID = 906558779562569784L; + private final Log log = LogFactory.getLog(AbstractCmsEntryPoint.class); private final Subject subject; @@ -191,10 +193,7 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implement try { node = session.getNode(nodePath); } catch (PathNotFoundException e) { - // logout(); - // session = repository.login(workspace); navigateTo("~"); - // throw e; } // refresh UI @@ -239,10 +238,7 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implement try { int firstSlash = state.indexOf('/'); if (firstSlash == 0) { - if (session.nodeExists(state)) - node = session.getNode(state); - else - throw new CmsException("Data " + state + " does not exist"); + node = session.getNode(state); page = ""; } else if (firstSlash > 0) { String prefix = state.substring(0, firstSlash); @@ -265,6 +261,8 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implement return title; } catch (Exception e) { log.error("Cannot set state '" + state + "'", e); + if (state.equals("") || newState.equals("~") || newState.equals(previousState)) + return "Unrecoverable exception : " + e.getClass().getSimpleName(); if (previousState.equals("")) previousState = "~"; navigateTo(previousState); 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..51aafcb23 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 @@ -70,10 +70,8 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration { public void configure(Application application) { try { - StyleSheetResourceLoader styleSheetRL = new StyleSheetResourceLoader( - bundleContext); - BundleResourceLoader bundleRL = new BundleResourceLoader( - bundleContext); + StyleSheetResourceLoader styleSheetRL = new StyleSheetResourceLoader(bundleContext); + BundleResourceLoader bundleRL = new BundleResourceLoader(bundleContext); application.setOperationMode(OperationMode.SWT_COMPATIBILITY); // application.setOperationMode(OperationMode.JEE_COMPATIBILITY); @@ -81,8 +79,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)); @@ -98,16 +95,15 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration { // 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 faviconRelPath = properties.get(WebClient.FAVICON); - application.addResource(faviconRelPath, - new BundleResourceLoader(bundleContext)); + application.addResource(faviconRelPath, new BundleResourceLoader(bundleContext)); if (log.isTraceEnabled()) log.trace("Favicon " + faviconRelPath); @@ -116,10 +112,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,9 +122,8 @@ 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); } @@ -149,8 +141,7 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration { } } 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; } } @@ -164,19 +155,16 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration { vm.checkout("/"); JcrUtils.mkdirs(session, 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 +176,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 +197,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 +205,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 +276,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 +286,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 +301,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 +328,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 +349,5 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration { private static String DEFAULT_LOADING_BODY = "" + "" - + ""; + + "\" width=\"32\" height=\"32\" style=\"margin: 16px 16px\"/>" + ""; } diff --git a/org.argeo.cms.ui/src/org/argeo/cms/util/SimpleErgonomics.java b/org.argeo.cms.ui/src/org/argeo/cms/util/SimpleErgonomics.java index 620bc5302..a16587a22 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/util/SimpleErgonomics.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/util/SimpleErgonomics.java @@ -2,6 +2,7 @@ package org.argeo.cms.util; import java.util.Map; +import javax.jcr.Node; import javax.jcr.Repository; import javax.jcr.RepositoryException; @@ -23,6 +24,8 @@ import org.eclipse.swt.widgets.Control; /** Simple header/body ergonomics. */ public class SimpleErgonomics extends AbstractCmsEntryPoint { + private static final long serialVersionUID = 8743413921359548523L; + private final static Log log = LogFactory.getLog(SimpleErgonomics.class); private boolean uiInitialized = false; @@ -36,8 +39,7 @@ public class SimpleErgonomics extends AbstractCmsEntryPoint { private CmsImageManager imageManager = new ImageManagerImpl(); private UxContext uxContext = null; - public SimpleErgonomics(Repository repository, String workspace, - String defaultPath, CmsUiProvider uiProvider, + public SimpleErgonomics(Repository repository, String workspace, String defaultPath, CmsUiProvider uiProvider, Map factoryProperties) { super(repository, workspace, defaultPath, factoryProperties); this.uiProvider = uiProvider; @@ -94,8 +96,7 @@ public class SimpleErgonomics extends AbstractCmsEntryPoint { // Exception Throwable exception = getException(); if (exception != null) { - SystemNotifications systemNotifications = new SystemNotifications( - bodyArea); + SystemNotifications systemNotifications = new SystemNotifications(bodyArea); systemNotifications.notifyException(exception); resetException(); return; @@ -108,7 +109,10 @@ public class SimpleErgonomics extends AbstractCmsEntryPoint { bodyArea.setLayout(CmsUtils.noSpaceGridLayout()); try { - uiProvider.createUi(bodyArea, getNode()); + Node node = getNode(); + if (node == null) + throw new CmsException("Context cannot be null"); + uiProvider.createUi(bodyArea, node); } catch (RepositoryException e) { throw new CmsException("Cannot refresh body", e); } -- 2.30.2