]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/UserMenu.java
RCP launch
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / UserMenu.java
1 package org.argeo.cms;
2
3 import org.eclipse.rap.rwt.RWT;
4 import org.eclipse.swt.SWT;
5 import org.eclipse.swt.events.MouseAdapter;
6 import org.eclipse.swt.events.MouseEvent;
7 import org.eclipse.swt.events.ShellAdapter;
8 import org.eclipse.swt.events.ShellEvent;
9 import org.eclipse.swt.events.TraverseEvent;
10 import org.eclipse.swt.events.TraverseListener;
11 import org.eclipse.swt.layout.GridData;
12 import org.eclipse.swt.layout.GridLayout;
13 import org.eclipse.swt.widgets.Control;
14 import org.eclipse.swt.widgets.Label;
15 import org.eclipse.swt.widgets.Shell;
16 import org.eclipse.swt.widgets.Text;
17 import org.springframework.security.core.context.SecurityContextHolder;
18
19 /** The site-related user menu */
20 public class UserMenu extends Shell implements CmsStyles {
21 private static final long serialVersionUID = -5788157651532106301L;
22
23 private CmsLogin cmsLogin;
24 private String username = null;
25
26 public UserMenu(CmsLogin cmsLogin, Control source) {
27 super(source.getDisplay(), SWT.NO_TRIM | SWT.BORDER | SWT.ON_TOP);
28 this.cmsLogin = cmsLogin;
29
30 setData(RWT.CUSTOM_VARIANT, CMS_USER_MENU);
31
32 username = SecurityContextHolder.getContext().getAuthentication()
33 .getName();
34 if (username.equals("anonymous")) {
35 username = null;
36 anonymousUi();
37 } else {
38 userUi();
39 }
40
41 pack();
42 layout();
43 setLocation(source.toDisplay(source.getSize().x - getSize().x,
44 source.getSize().y));
45
46 addShellListener(new ShellAdapter() {
47 private static final long serialVersionUID = 5178980294808435833L;
48
49 @Override
50 public void shellDeactivated(ShellEvent e) {
51 close();
52 dispose();
53 }
54
55 });
56
57 open();
58
59 }
60
61 protected void userUi() {
62 setLayout(new GridLayout());
63
64 Label l = new Label(this, SWT.NONE);
65 l.setData(RWT.CUSTOM_VARIANT, CMS_USER_MENU_ITEM);
66 l.setData(RWT.MARKUP_ENABLED, true);
67 l.setLayoutData(CmsUtils.fillWidth());
68 l.setText("<b>" + username + "</b>");
69
70 final CmsSession cmsSession = (CmsSession) getDisplay().getData(
71 CmsSession.KEY);
72 l = new Label(this, SWT.NONE);
73 l.setData(RWT.CUSTOM_VARIANT, CMS_USER_MENU_ITEM);
74 l.setText(CmsMsg.logout.lead());
75 GridData lData = CmsUtils.fillWidth();
76 lData.widthHint = 120;
77 l.setLayoutData(lData);
78
79 l.addMouseListener(new MouseAdapter() {
80 private static final long serialVersionUID = 6444395812777413116L;
81
82 public void mouseDown(MouseEvent e) {
83 SecurityContextHolder.getContext().setAuthentication(null);
84 close();
85 dispose();
86 cmsSession.authChange();
87 }
88 });
89 }
90
91 protected void anonymousUi() {
92 Integer textWidth = 150;
93 setData(RWT.CUSTOM_VARIANT, CMS_USER_MENU);
94 setLayout(new GridLayout(2, false));
95
96 new Label(this, SWT.NONE).setText(CmsMsg.username.lead());
97 final Text username = new Text(this, SWT.BORDER);
98 username.setData(RWT.CUSTOM_VARIANT, CMS_LOGIN_DIALOG_USERNAME);
99 GridData gd = CmsUtils.fillWidth();
100 gd.widthHint = textWidth;
101 username.setLayoutData(gd);
102
103 new Label(this, SWT.NONE).setText(CmsMsg.password.lead());
104 final Text password = new Text(this, SWT.BORDER | SWT.PASSWORD);
105 password.setData(RWT.CUSTOM_VARIANT, CMS_LOGIN_DIALOG_PASSWORD);
106 gd = CmsUtils.fillWidth();
107 gd.widthHint = textWidth;
108 password.setLayoutData(gd);
109
110 // Listeners
111 TraverseListener tl = new TraverseListener() {
112 private static final long serialVersionUID = -1158892811534971856L;
113
114 public void keyTraversed(TraverseEvent e) {
115 if (e.detail == SWT.TRAVERSE_RETURN)
116 login(username.getText(), password.getTextChars());
117 }
118 };
119 username.addTraverseListener(tl);
120 password.addTraverseListener(tl);
121 }
122
123 protected void login(String username, char[] password) {
124 CmsSession cmsSession = (CmsSession) getDisplay().getData(
125 CmsSession.KEY);
126 cmsLogin.logInWithPassword(username, password);
127 close();
128 dispose();
129 // refreshUi(source.getParent());
130 cmsSession.authChange();
131 }
132
133 }