Rename CmsSession into CmsView, and make it exclusively related to the Display (and...
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 8 Oct 2015 09:40:53 +0000 (09:40 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 8 Oct 2015 09:40:53 +0000 (09:40 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@8461 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

12 files changed:
demo/log4j.properties
org.argeo.cms/src/org/argeo/cms/AbstractCmsEntryPoint.java
org.argeo.cms/src/org/argeo/cms/CmsSession.java [deleted file]
org.argeo.cms/src/org/argeo/cms/CmsView.java [new file with mode: 0644]
org.argeo.cms/src/org/argeo/cms/i18n/Msg.java
org.argeo.cms/src/org/argeo/cms/internal/text/AbstractTextViewer.java
org.argeo.cms/src/org/argeo/cms/text/Img.java
org.argeo.cms/src/org/argeo/cms/util/CmsUtils.java
org.argeo.cms/src/org/argeo/cms/util/CurrentUserUtils.java
org.argeo.cms/src/org/argeo/cms/util/SimpleApp.java
org.argeo.cms/src/org/argeo/cms/util/UserMenu.java
org.argeo.security.jackrabbit/src/org/argeo/security/jackrabbit/ArgeoSecurityManager.java

index da63069e9e37723a7426f83168aafa4d07e4fb88..41a9a484c03fa554b65cb7d9c08224634b6112de 100644 (file)
@@ -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
index 6ff18def0521a11eecd9e082a6ec488e3bcba171..446e076802e66bc06c7515f99e25116787d06ac7 100644 (file)
@@ -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<Void>() {
                        @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 (file)
index d36bed5..0000000
+++ /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<CmsSession> current = new ThreadLocal<CmsSession>();
-
-       // 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 (file)
index 0000000..ba960de
--- /dev/null
@@ -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();
+}
index dd38c7483563b3cd551cc69ccc25c49802565e0e..b87b7b3d5624b61fe7dc6591bb14f6b66eacf6f4 100644 (file)
@@ -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();
index 8aabd362a6343d30eb1df949150e8448c277db30..e296388249924075d9dc4ce94c33c5939f85984c 100644 (file)
@@ -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;
index 54f702bbafb90f656adc55dca09792078671d80b..638fae41d4d98609282524d0f7854d00275aad56 100644 (file)
@@ -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() + ']',
index 0eda74f53496be9ade00a176f3e05276c991f46c..d8cd171e2d0441e1bcb0f62352314b3ea6cb95d2 100644 (file)
@@ -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);
index a47cad0e873fab1e711c100efcd0c8f2b8536386..0ebac9dcc216536de5f1d1b830895193c89250c5 100644 (file)
@@ -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.");
                }
index c43ddd7864c1cfa16b1f1459dfb86f70417f1a1b..9f0e32037f7c9c78c3080ba8c97325f4a1d0a1ec 100644 (file)
@@ -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;
                }
 
index 3fef6792b610a4c48a0f66fd518ba2c73fbd6454..acbf1bebba61668fd936c5be597b24854f6ffb64 100644 (file)
@@ -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 {
                        //
index 0d9d980e0022382d89aaabfec79ba59ea70bb597..978be436b648623c1e6cf00199a226c26c96ace0 100644 (file)
@@ -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();