Run callback handler dialog in UI thread
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 8 Nov 2012 18:23:44 +0000 (18:23 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 8 Nov 2012 18:23:44 +0000 (18:23 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@5751 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

security/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/SecurityUiPlugin.java

index b5bff60284622f128c207151902e07feb24fe0aa..bf172aafcc0a80e8421049f4b96d6348141e10d9 100644 (file)
@@ -21,8 +21,10 @@ import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.CallbackHandler;
 import javax.security.auth.callback.UnsupportedCallbackException;
 
+import org.argeo.ArgeoException;
 import org.argeo.security.ui.dialogs.DefaultLoginDialog;
 import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
@@ -46,11 +48,27 @@ public class SecurityUiPlugin extends AbstractUIPlugin {
                super.start(context);
                plugin = this;
 
+               final Display display = Display.getCurrent();
                defaultCallbackHandler = new CallbackHandler() {
-                       public void handle(Callback[] callbacks) throws IOException,
+                       public void handle(final Callback[] callbacks) throws IOException,
                                        UnsupportedCallbackException {
-                               DefaultLoginDialog dialog = new DefaultLoginDialog();
-                               dialog.handle(callbacks);
+
+                               if (display != null) // RCP
+                                       display.syncExec(new Runnable() {
+                                               public void run() {
+                                                       DefaultLoginDialog dialog = new DefaultLoginDialog();
+                                                       try {
+                                                               dialog.handle(callbacks);
+                                                       } catch (IOException e) {
+                                                               throw new ArgeoException("Cannot open dialog",
+                                                                               e);
+                                                       }
+                                               }
+                                       });
+                               else {// RAP
+                                       DefaultLoginDialog dialog = new DefaultLoginDialog();
+                                       dialog.handle(callbacks);
+                               }
                        }
                };
                defaultCallbackHandlerReg = context.registerService(