]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.cms/src/org/argeo/cms/UserMenu.java
Move CMS to Commons
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / UserMenu.java
diff --git a/org.argeo.cms/src/org/argeo/cms/UserMenu.java b/org.argeo.cms/src/org/argeo/cms/UserMenu.java
new file mode 100644 (file)
index 0000000..57de515
--- /dev/null
@@ -0,0 +1,133 @@
+package org.argeo.cms;
+
+import org.eclipse.rap.rwt.RWT;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.ShellAdapter;
+import org.eclipse.swt.events.ShellEvent;
+import org.eclipse.swt.events.TraverseEvent;
+import org.eclipse.swt.events.TraverseListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.springframework.security.context.SecurityContextHolder;
+
+/** The site-related user menu */
+public class UserMenu extends Shell implements CmsStyles {
+       private static final long serialVersionUID = -5788157651532106301L;
+
+       private CmsLogin cmsLogin;
+       private String username = null;
+
+       public UserMenu(CmsLogin cmsLogin, Control source) {
+               super(source.getDisplay(), SWT.NO_TRIM | SWT.BORDER | SWT.ON_TOP);
+               this.cmsLogin = cmsLogin;
+
+               setData(RWT.CUSTOM_VARIANT, CMS_USER_MENU);
+
+               username = SecurityContextHolder.getContext().getAuthentication()
+                               .getName();
+               if (username.equals("anonymous")) {
+                       username = null;
+                       anonymousUi();
+               } else {
+                       userUi();
+               }
+
+               pack();
+               layout();
+               setLocation(source.toDisplay(source.getSize().x - getSize().x,
+                               source.getSize().y));
+
+               addShellListener(new ShellAdapter() {
+                       private static final long serialVersionUID = 5178980294808435833L;
+
+                       @Override
+                       public void shellDeactivated(ShellEvent e) {
+                               close();
+                               dispose();
+                       }
+
+               });
+
+               open();
+
+       }
+
+       protected void userUi() {
+               setLayout(new GridLayout());
+
+               Label l = new Label(this, SWT.NONE);
+               l.setData(RWT.CUSTOM_VARIANT, CMS_USER_MENU_ITEM);
+               l.setData(RWT.MARKUP_ENABLED, true);
+               l.setLayoutData(CmsUtils.fillWidth());
+               l.setText("<b>" + username + "</b>");
+
+               final CmsSession cmsSession = (CmsSession) getDisplay().getData(
+                               CmsSession.KEY);
+               l = new Label(this, SWT.NONE);
+               l.setData(RWT.CUSTOM_VARIANT, CMS_USER_MENU_ITEM);
+               l.setText(CmsMsg.logout.lead());
+               GridData lData = CmsUtils.fillWidth();
+               lData.widthHint = 120;
+               l.setLayoutData(lData);
+
+               l.addMouseListener(new MouseAdapter() {
+                       private static final long serialVersionUID = 6444395812777413116L;
+
+                       public void mouseDown(MouseEvent e) {
+                               SecurityContextHolder.getContext().setAuthentication(null);
+                               close();
+                               dispose();
+                               cmsSession.authChange();
+                       }
+               });
+       }
+
+       protected void anonymousUi() {
+               Integer textWidth = 150;
+               setData(RWT.CUSTOM_VARIANT, CMS_USER_MENU);
+               setLayout(new GridLayout(2, false));
+
+               new Label(this, SWT.NONE).setText(CmsMsg.username.lead());
+               final Text username = new Text(this, SWT.BORDER);
+               username.setData(RWT.CUSTOM_VARIANT, CMS_LOGIN_DIALOG_USERNAME);
+               GridData gd = CmsUtils.fillWidth();
+               gd.widthHint = textWidth;
+               username.setLayoutData(gd);
+
+               new Label(this, SWT.NONE).setText(CmsMsg.password.lead());
+               final Text password = new Text(this, SWT.BORDER | SWT.PASSWORD);
+               password.setData(RWT.CUSTOM_VARIANT, CMS_LOGIN_DIALOG_PASSWORD);
+               gd = CmsUtils.fillWidth();
+               gd.widthHint = textWidth;
+               password.setLayoutData(gd);
+
+               // Listeners
+               TraverseListener tl = new TraverseListener() {
+                       private static final long serialVersionUID = -1158892811534971856L;
+
+                       public void keyTraversed(TraverseEvent e) {
+                               if (e.detail == SWT.TRAVERSE_RETURN)
+                                       login(username.getText(), password.getTextChars());
+                       }
+               };
+               username.addTraverseListener(tl);
+               password.addTraverseListener(tl);
+       }
+
+       protected void login(String username, char[] password) {
+               CmsSession cmsSession = (CmsSession) getDisplay().getData(
+                               CmsSession.KEY);
+               cmsLogin.logInWithPassword(username, password);
+               close();
+               dispose();
+               // refreshUi(source.getParent());
+               cmsSession.authChange();
+       }
+
+}