]> git.argeo.org Git - lgpl/argeo-commons.git/blob - workbench/rap/RapWorkbenchLogin.java
Prepare next development cycle
[lgpl/argeo-commons.git] / workbench / rap / RapWorkbenchLogin.java
1 package org.argeo.cms.ui.workbench.rap;
2
3 import java.security.PrivilegedAction;
4 import java.util.Locale;
5
6 import javax.security.auth.Subject;
7 import javax.security.auth.x500.X500Principal;
8
9 import org.argeo.cms.CmsMsg;
10 import org.argeo.cms.auth.CurrentUser;
11 import org.argeo.cms.util.CmsUtils;
12 import org.argeo.cms.util.LoginEntryPoint;
13 import org.eclipse.rap.rwt.RWT;
14 import org.eclipse.rap.rwt.client.service.JavaScriptExecutor;
15 import org.eclipse.swt.SWT;
16 import org.eclipse.swt.events.SelectionListener;
17 import org.eclipse.swt.widgets.Button;
18 import org.eclipse.swt.widgets.Composite;
19 import org.eclipse.swt.widgets.Display;
20 import org.eclipse.ui.PlatformUI;
21
22 public class RapWorkbenchLogin extends LoginEntryPoint {
23 // private final static Log log =
24 // LogFactory.getLog(RapWorkbenchLogin.class);
25
26 /** Override to provide an application specific workbench advisor */
27 protected RapWorkbenchAdvisor createRapWorkbenchAdvisor(String username) {
28 return new RapWorkbenchAdvisor(username);
29 }
30
31 @Override
32 public int createUI() {
33 JavaScriptExecutor jsExecutor = RWT.getClient().getService(JavaScriptExecutor.class);
34 int returnCode;
35 try {
36 returnCode = super.createUI();
37 } finally {
38 // always reload
39 // TODO optimise?
40 jsExecutor.execute("location.reload()");
41 }
42 return returnCode;
43 }
44
45 @Override
46 protected int postLogin() {
47 Subject subject = getSubject();
48 final Display display = Display.getCurrent();
49 if (subject.getPrincipals(X500Principal.class).isEmpty()) {
50 RWT.getClient().getService(JavaScriptExecutor.class).execute("location.reload()");
51 }
52 //
53 // RUN THE WORKBENCH
54 //
55 Integer returnCode = null;
56 try {
57 returnCode = Subject.doAs(subject, new PrivilegedAction<Integer>() {
58 public Integer run() {
59 int result = createAndRunWorkbench(display, CurrentUser.getUsername(subject));
60 return new Integer(result);
61 }
62 });
63 // explicit workbench closing
64 logout();
65 } finally {
66 display.dispose();
67 }
68 return returnCode;
69 }
70
71 protected int createAndRunWorkbench(Display display, String username) {
72 RapWorkbenchAdvisor workbenchAdvisor = createRapWorkbenchAdvisor(username);
73 return PlatformUI.createAndRunWorkbench(display, workbenchAdvisor);
74 }
75
76 @Override
77 protected void extendsCredentialsBlock(Composite credentialsBlock, Locale selectedLocale,
78 SelectionListener loginSelectionListener) {
79 // Button loginButton = new Button(credentialsBlock, SWT.PUSH);
80 // loginButton.setText(CmsMsg.login.lead(selectedLocale));
81 // loginButton.setLayoutData(CmsUtils.fillWidth());
82 // loginButton.addSelectionListener(loginSelectionListener);
83 }
84
85 @Override
86 protected Display createDisplay() {
87 return PlatformUI.createDisplay();
88 }
89
90 }