X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Futil%2FUserMenu.java;h=a654dddd4054f7aa27b318352afe65d892a0ec29;hb=c9ad45317bcbe8940c9cc4d55ee47ae4b19f08c1;hp=98311560ac10e7bf21a4f6374456f31ac9f5366c;hpb=d546fc1b9e19a86eb0e33ac4be824b52239316fc;p=lgpl%2Fargeo-commons.git 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 98311560a..a654dddd4 100644 --- a/org.argeo.cms/src/org/argeo/cms/util/UserMenu.java +++ b/org.argeo.cms/src/org/argeo/cms/util/UserMenu.java @@ -1,143 +1,48 @@ package org.argeo.cms.util; -import static org.argeo.cms.internal.kernel.KernelConstants.SPRING_SECURITY_CONTEXT_KEY; - -import javax.servlet.http.HttpSession; - -import org.argeo.cms.CmsLogin; -import org.argeo.cms.CmsMsg; -import org.argeo.cms.CmsSession; -import org.argeo.cms.CmsStyles; -import org.eclipse.rap.rwt.RWT; +import org.argeo.cms.CmsException; +import org.argeo.cms.widgets.auth.CmsLoginShell; 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.Display; import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Text; -import org.springframework.security.core.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(); - } +public class UserMenu extends CmsLoginShell { + private final Control source; + + public UserMenu(Control source) { + super(CmsUtils.getCmsView()); + if (source == null) + throw new CmsException("Source control cannot be null."); + this.source = source; + open(); + } - pack(); - layout(); - setLocation(source.toDisplay(source.getSize().x - getSize().x, - source.getSize().y)); + @Override + protected Shell createShell() { + return new Shell(Display.getCurrent(), SWT.NO_TRIM | SWT.BORDER + | SWT.ON_TOP); + } - addShellListener(new ShellAdapter() { + @Override + public void open() { + Shell shell = getShell(); + shell.pack(); + shell.layout(); + shell.setLocation(source.toDisplay(source.getSize().x + - shell.getSize().x, source.getSize().y)); + shell.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("" + username + ""); - - 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); - HttpSession httpSession = RWT.getRequest().getSession(); - httpSession.removeAttribute(SPRING_SECURITY_CONTEXT_KEY); - close(); - dispose(); - cmsSession.authChange(); + closeShell(); } }); - } - - 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(); + super.open(); } }