X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.ui.rap%2Fsrc%2Forg%2Fargeo%2Fsecurity%2Fui%2Frap%2FRapWorkbenchLogin.java;h=7bf487a887d02369c14ba4bb935056cdbd1efb20;hb=8260f4470f514ea347ca53f5b4dfc632c4a4de66;hp=8c380bd3ed991d38aec307f737b7f851fb777dc0;hpb=739faf3400e7f2f1b2bf06bd1ccf9da042c78f5b;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.ui.rap/src/org/argeo/security/ui/rap/RapWorkbenchLogin.java b/org.argeo.security.ui.rap/src/org/argeo/security/ui/rap/RapWorkbenchLogin.java index 8c380bd3e..7bf487a88 100644 --- a/org.argeo.security.ui.rap/src/org/argeo/security/ui/rap/RapWorkbenchLogin.java +++ b/org.argeo.security.ui.rap/src/org/argeo/security/ui/rap/RapWorkbenchLogin.java @@ -1,20 +1,28 @@ 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.events.SelectionListener; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; 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); @@ -34,4 +42,52 @@ public class RapWorkbenchLogin extends WorkbenchLogin { 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() { + 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) { + Button loginButton = new Button(credentialsBlock, SWT.PUSH); + loginButton.setText(CmsMsg.login.lead(selectedLocale)); + loginButton.setLayoutData(CmsUtils.fillWidth()); + loginButton.addSelectionListener(loginSelectionListener); + } + + @Override + protected Display createDisplay() { + return PlatformUI.createDisplay(); + } + }