From: Mathieu Baudier Date: Thu, 8 Oct 2015 09:40:53 +0000 (+0000) Subject: Rename CmsSession into CmsView, and make it exclusively related to the Display (and... X-Git-Tag: argeo-commons-2.1.30~114 X-Git-Url: https://git.argeo.org/?a=commitdiff_plain;h=384a3240883b5578a3d2e3d4a95a5307e9914d7d;p=lgpl%2Fargeo-commons.git Rename CmsSession into CmsView, and make it exclusively related to the Display (and not to the thread) git-svn-id: https://svn.argeo.org/commons/trunk@8461 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/demo/log4j.properties b/demo/log4j.properties index da63069e9..41a9a484c 100644 --- a/demo/log4j.properties +++ b/demo/log4j.properties @@ -3,6 +3,7 @@ log4j.rootLogger=WARN, development log4j.logger.org.argeo=DEBUG #log4j.logger.org.apache.jackrabbit.core.RepositoryImpl=DEBUG #log4j.logger.argeo.stats=DEBUG +#log4j.logger.org.eclipse.jetty.server.Server=DEBUG ## Appenders log4j.appender.console=org.apache.log4j.ConsoleAppender diff --git a/org.argeo.cms/src/org/argeo/cms/AbstractCmsEntryPoint.java b/org.argeo.cms/src/org/argeo/cms/AbstractCmsEntryPoint.java index 6ff18def0..446e07680 100644 --- a/org.argeo.cms/src/org/argeo/cms/AbstractCmsEntryPoint.java +++ b/org.argeo.cms/src/org/argeo/cms/AbstractCmsEntryPoint.java @@ -39,7 +39,7 @@ import org.eclipse.swt.widgets.Shell; /** Manages history and navigation */ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint - implements CmsSession { + implements CmsView { private final Log log = LogFactory.getLog(AbstractCmsEntryPoint.class); private final Subject subject; @@ -121,7 +121,7 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint @Override protected final void createContents(final Composite parent) { - getShell().getDisplay().setData(CmsSession.KEY, this); + getShell().getDisplay().setData(CmsView.KEY, this); Subject.doAs(subject, new PrivilegedAction() { @Override public Void run() { @@ -237,17 +237,17 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint }); } - @Override - public Object local(Msg msg) { - String key = msg.getId(); - int lastDot = key.lastIndexOf('.'); - String className = key.substring(0, lastDot); - String fieldName = key.substring(lastDot + 1); - Locale locale = RWT.getLocale(); - ResourceBundle rb = ResourceBundle.getBundle(className, locale, - msg.getClassLoader()); - return rb.getString(fieldName); - } +// @Override +// public Object local(Msg msg) { +// String key = msg.getId(); +// int lastDot = key.lastIndexOf('.'); +// String className = key.substring(0, lastDot); +// String fieldName = key.substring(lastDot + 1); +// Locale locale = RWT.getLocale(); +// ResourceBundle rb = ResourceBundle.getBundle(className, locale, +// msg.getClassLoader()); +// return rb.getString(fieldName); +// } /** Sets the state of the entry point and retrieve the related JCR node. */ protected synchronized String setState(String newState) { diff --git a/org.argeo.cms/src/org/argeo/cms/CmsSession.java b/org.argeo.cms/src/org/argeo/cms/CmsSession.java deleted file mode 100644 index d36bed576..000000000 --- a/org.argeo.cms/src/org/argeo/cms/CmsSession.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.argeo.cms; - -import javax.security.auth.Subject; - -import org.argeo.cms.i18n.Msg; - -/** Provides interaction with the CMS system. UNSTABLE API at this stage. */ -public interface CmsSession { - public final static String KEY = "org.argeo.connect.web.cmsSession"; - - final ThreadLocal current = new ThreadLocal(); - - // NAVIGATION - public void navigateTo(String state); - - // SECURITY - public void authChange(); - - public Subject getSubject(); - - // SERVICES - public void exception(Throwable e); - - public Object local(Msg msg); - - public CmsImageManager getImageManager(); -} diff --git a/org.argeo.cms/src/org/argeo/cms/CmsView.java b/org.argeo.cms/src/org/argeo/cms/CmsView.java new file mode 100644 index 000000000..ba960de33 --- /dev/null +++ b/org.argeo.cms/src/org/argeo/cms/CmsView.java @@ -0,0 +1,21 @@ +package org.argeo.cms; + +import javax.security.auth.Subject; + +/** Provides interaction with the CMS system. UNSTABLE API at this stage. */ +public interface CmsView { + public final static String KEY = "org.argeo.cms.view"; + + // NAVIGATION + public void navigateTo(String state); + + // SECURITY + public void authChange(); + + public Subject getSubject(); + + // SERVICES + public void exception(Throwable e); + + public CmsImageManager getImageManager(); +} diff --git a/org.argeo.cms/src/org/argeo/cms/i18n/Msg.java b/org.argeo.cms/src/org/argeo/cms/i18n/Msg.java index dd38c7483..b87b7b3d5 100644 --- a/org.argeo.cms/src/org/argeo/cms/i18n/Msg.java +++ b/org.argeo.cms/src/org/argeo/cms/i18n/Msg.java @@ -2,9 +2,10 @@ package org.argeo.cms.i18n; import java.lang.reflect.Field; import java.lang.reflect.Modifier; +import java.util.Locale; +import java.util.ResourceBundle; import org.argeo.cms.CmsException; -import org.argeo.cms.CmsSession; import org.eclipse.rap.rwt.RWT; /** A single message to be internationalised. */ @@ -53,8 +54,7 @@ public class Msg { } public Object local() { - CmsSession cmSession = CmsSession.current.get(); - Object local = cmSession.local(this); + Object local = local(this); if (local == null) local = getDefault(); if (local == null) @@ -62,6 +62,17 @@ public class Msg { return local; } + private static Object local(Msg msg) { + String key = msg.getId(); + int lastDot = key.lastIndexOf('.'); + String className = key.substring(0, lastDot); + String fieldName = key.substring(lastDot + 1); + Locale locale = RWT.getLocale(); + ResourceBundle rb = ResourceBundle.getBundle(className, locale, + msg.getClassLoader()); + return rb.getString(fieldName); + } + public static void init(Class clss) { final Field[] fieldArray = clss.getDeclaredFields(); ClassLoader loader = clss.getClassLoader(); diff --git a/org.argeo.cms/src/org/argeo/cms/internal/text/AbstractTextViewer.java b/org.argeo.cms/src/org/argeo/cms/internal/text/AbstractTextViewer.java index 8aabd362a..e29638824 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/text/AbstractTextViewer.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/text/AbstractTextViewer.java @@ -22,7 +22,6 @@ import org.argeo.cms.CmsEditable; import org.argeo.cms.CmsException; import org.argeo.cms.CmsImageManager; import org.argeo.cms.CmsNames; -import org.argeo.cms.CmsSession; import org.argeo.cms.CmsTypes; import org.argeo.cms.text.Img; import org.argeo.cms.text.Paragraph; @@ -64,7 +63,7 @@ public abstract class AbstractTextViewer extends AbstractPageViewer implements private final Section mainSection; private TextInterpreter textInterpreter = new TextInterpreterImpl(); - private CmsImageManager imageManager = CmsSession.current.get() + private CmsImageManager imageManager = CmsUtils.getCmsView() .getImageManager(); private FileUploadListener fileUploadListener; diff --git a/org.argeo.cms/src/org/argeo/cms/text/Img.java b/org.argeo.cms/src/org/argeo/cms/text/Img.java index 54f702bba..638fae41d 100644 --- a/org.argeo.cms/src/org/argeo/cms/text/Img.java +++ b/org.argeo.cms/src/org/argeo/cms/text/Img.java @@ -5,7 +5,6 @@ import javax.jcr.RepositoryException; import org.argeo.cms.CmsException; import org.argeo.cms.CmsImageManager; -import org.argeo.cms.CmsSession; import org.argeo.cms.internal.JcrFileUploadReceiver; import org.argeo.cms.util.CmsUtils; import org.argeo.cms.viewers.NodePart; @@ -51,7 +50,7 @@ public class Img extends EditableImage implements SectionPart, NodePart { Point preferredImageSize) throws RepositoryException { super(parent, swtStyle, imgNode, false, preferredImageSize); this.section = section; - imageManager = CmsSession.current.get().getImageManager(); + imageManager = CmsUtils.getCmsView().getImageManager(); CmsUtils.style(this, TextStyles.TEXT_IMG); } @@ -93,8 +92,7 @@ public class Img extends EditableImage implements SectionPart, NodePart { // FileDialog fileDialog = new FileDialog(getShell()); // fileDialog.open(); // String fileName = fileDialog.getFileName(); - CmsImageManager imageManager = CmsSession.current.get() - .getImageManager(); + CmsImageManager imageManager = CmsUtils.getCmsView().getImageManager(); Node node = getNode(); JcrFileUploadReceiver receiver = new JcrFileUploadReceiver( node.getParent(), node.getName() + '[' + node.getIndex() + ']', diff --git a/org.argeo.cms/src/org/argeo/cms/util/CmsUtils.java b/org.argeo.cms/src/org/argeo/cms/util/CmsUtils.java index 0eda74f53..d8cd171e2 100644 --- a/org.argeo.cms/src/org/argeo/cms/util/CmsUtils.java +++ b/org.argeo.cms/src/org/argeo/cms/util/CmsUtils.java @@ -10,6 +10,7 @@ import javax.jcr.RepositoryException; import org.apache.commons.io.IOUtils; import org.argeo.cms.CmsConstants; import org.argeo.cms.CmsException; +import org.argeo.cms.CmsView; import org.argeo.jcr.JcrUtils; import org.eclipse.rap.rwt.RWT; import org.eclipse.rap.rwt.service.ResourceManager; @@ -28,6 +29,17 @@ import org.eclipse.swt.widgets.Widget; /** Static utilities for the CMS framework. */ public class CmsUtils implements CmsConstants { + /** The CMS view related to this display. */ + public static CmsView getCmsView() { + Display display = Display.getCurrent(); + if (display == null) + throw new CmsException("No display available"); + CmsView cmsView = (CmsView) display.getData(CmsView.KEY); + if (cmsView == null) + throw new CmsException("No CMS view available"); + return cmsView; + } + /** @deprecated Use rowData16px() instead. GridData should not be reused. */ @Deprecated public static RowData ROW_DATA_16px = new RowData(16, 16); diff --git a/org.argeo.cms/src/org/argeo/cms/util/CurrentUserUtils.java b/org.argeo.cms/src/org/argeo/cms/util/CurrentUserUtils.java index a47cad0e8..0ebac9dcc 100644 --- a/org.argeo.cms/src/org/argeo/cms/util/CurrentUserUtils.java +++ b/org.argeo.cms/src/org/argeo/cms/util/CurrentUserUtils.java @@ -26,7 +26,6 @@ import javax.security.auth.Subject; import javax.security.auth.x500.X500Principal; import org.argeo.ArgeoException; -import org.argeo.cms.CmsSession; /** * Retrieves information about the current user. Not an API, can change without @@ -59,7 +58,7 @@ class CurrentUserUtils { public final static Subject getSubject() { Subject subject = Subject.getSubject(AccessController.getContext()); if (subject == null) { - subject = CmsSession.current.get().getSubject(); + subject = CmsUtils.getCmsView().getSubject(); if (subject == null) throw new ArgeoException("Not authenticated."); } diff --git a/org.argeo.cms/src/org/argeo/cms/util/SimpleApp.java b/org.argeo.cms/src/org/argeo/cms/util/SimpleApp.java index c43ddd786..9f0e32037 100644 --- a/org.argeo.cms/src/org/argeo/cms/util/SimpleApp.java +++ b/org.argeo.cms/src/org/argeo/cms/util/SimpleApp.java @@ -19,7 +19,6 @@ 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.CmsSession; import org.argeo.cms.CmsUiProvider; import org.argeo.cms.LifeCycleUiProvider; import org.argeo.jcr.JcrUtils; @@ -60,6 +59,8 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration, public void configure(Application application) { try { application.setOperationMode(OperationMode.SWT_COMPATIBILITY); + // application.setOperationMode(OperationMode.JEE_COMPATIBILITY); + application.setExceptionHandler(new CmsExceptionHandler()); // loading animated gif @@ -235,7 +236,7 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration, @Override public void handleException(Throwable throwable) { - CmsSession.current.get().exception(throwable); + CmsUtils.getCmsView().exception(throwable); } } @@ -261,7 +262,7 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration, // entryPoint.setState(""); entryPoint.setHeader(header); entryPoint.setHeaderHeight(headerHeight); - CmsSession.current.set(entryPoint); + // CmsSession.current.set(entryPoint); return entryPoint; } diff --git a/org.argeo.cms/src/org/argeo/cms/util/UserMenu.java b/org.argeo.cms/src/org/argeo/cms/util/UserMenu.java index 3fef6792b..acbf1bebb 100644 --- a/org.argeo.cms/src/org/argeo/cms/util/UserMenu.java +++ b/org.argeo.cms/src/org/argeo/cms/util/UserMenu.java @@ -21,7 +21,7 @@ import javax.servlet.http.HttpSession; import org.argeo.cms.CmsException; import org.argeo.cms.CmsMsg; -import org.argeo.cms.CmsSession; +import org.argeo.cms.CmsView; import org.argeo.cms.CmsStyles; import org.argeo.cms.KernelHeader; import org.argeo.cms.auth.ArgeoLoginContext; @@ -168,8 +168,8 @@ public class UserMenu extends Shell implements CmsStyles, CallbackHandler { } protected void login() { - CmsSession cmsSession = (CmsSession) getDisplay().getData( - CmsSession.KEY); + CmsView cmsSession = (CmsView) getDisplay().getData( + CmsView.KEY); Subject subject = cmsSession.getSubject(); try { // @@ -205,8 +205,8 @@ public class UserMenu extends Shell implements CmsStyles, CallbackHandler { } protected void logout() { - final CmsSession cmsSession = (CmsSession) getDisplay().getData( - CmsSession.KEY); + final CmsView cmsSession = (CmsView) getDisplay().getData( + CmsView.KEY); Subject subject = cmsSession.getSubject(); try { // diff --git a/org.argeo.security.jackrabbit/src/org/argeo/security/jackrabbit/ArgeoSecurityManager.java b/org.argeo.security.jackrabbit/src/org/argeo/security/jackrabbit/ArgeoSecurityManager.java index 0d9d980e0..978be436b 100644 --- a/org.argeo.security.jackrabbit/src/org/argeo/security/jackrabbit/ArgeoSecurityManager.java +++ b/org.argeo.security.jackrabbit/src/org/argeo/security/jackrabbit/ArgeoSecurityManager.java @@ -60,9 +60,12 @@ public class ArgeoSecurityManager extends DefaultSecurityManager { .getPrincipals(X500Principal.class); if (userPrincipal.isEmpty()) return super.getUserID(subject, workspaceName); - if (userPrincipal.size() > 1) - throw new RuntimeException("Multiple user principals " - + userPrincipal); + if (userPrincipal.size() > 1) { + StringBuilder buf = new StringBuilder(); + for (X500Principal principal : userPrincipal) + buf.append(' ').append('\"').append(principal).append('\"'); + throw new RuntimeException("Multiple user principals:" + buf); + } return userPrincipal.iterator().next().getName(); // Authentication authentication = SecurityContextHolder.getContext() // .getAuthentication();