package org.argeo.security.ui.rap;
+import java.security.PrivilegedAction;
import java.util.Locale;
+import javax.security.auth.Subject;
+import javax.security.auth.x500.X500Principal;
+
import org.argeo.cms.CmsMsg;
+import org.argeo.cms.auth.CurrentUser;
import org.argeo.cms.util.CmsUtils;
+import org.argeo.cms.util.LoginEntryPoint;
import org.eclipse.rap.rwt.RWT;
import org.eclipse.rap.rwt.client.service.JavaScriptExecutor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.PlatformUI;
-public class RapWorkbenchLogin extends WorkbenchLogin {
+public class RapWorkbenchLogin extends LoginEntryPoint {
// private final static Log log =
// LogFactory.getLog(RapWorkbenchLogin.class);
- @Override
- protected int createAndRunWorkbench(Display display, String username) {
- RapWorkbenchAdvisor workbenchAdvisor = createRapWorkbenchAdvisor(username);
- return PlatformUI.createAndRunWorkbench(display, workbenchAdvisor);
- }
-
/** Override to provide an application specific workbench advisor */
protected RapWorkbenchAdvisor createRapWorkbenchAdvisor(String username) {
return new RapWorkbenchAdvisor(username);
return returnCode;
}
+ @Override
+ protected int postLogin() {
+ final Display display = Display.getCurrent();
+ Subject subject = getSubject();
+ if (subject.getPrincipals(X500Principal.class).isEmpty()) {
+ RWT.getClient().getService(JavaScriptExecutor.class)
+ .execute("location.reload()");
+ }
+ //
+ // RUN THE WORKBENCH
+ //
+ Integer returnCode = null;
+ try {
+ returnCode = Subject.doAs(getSubject(),
+ new PrivilegedAction<Integer>() {
+ public Integer run() {
+ int result = createAndRunWorkbench(display,
+ CurrentUser.getUsername(getSubject()));
+ return new Integer(result);
+ }
+ });
+ // explicit workbench closing
+ logout();
+ } finally {
+ display.dispose();
+ }
+ return returnCode;
+ }
+
+ protected int createAndRunWorkbench(Display display, String username) {
+ RapWorkbenchAdvisor workbenchAdvisor = createRapWorkbenchAdvisor(username);
+ return PlatformUI.createAndRunWorkbench(display, workbenchAdvisor);
+ }
+
@Override
protected void extendsCredentialsBlock(Composite credentialsBlock,
Locale selectedLocale, SelectionListener loginSelectionListener) {
loginButton.addSelectionListener(loginSelectionListener);
}
+ @Override
+ protected Display createDisplay() {
+ return PlatformUI.createDisplay();
+ }
+
}