From cc9e4f66216859e06232436564fb637515c1e54e Mon Sep 17 00:00:00 2001 From: David McKnight Date: Thu, 22 Feb 2007 14:11:39 +0000 Subject: [PATCH] [175106] force a synchronous connect before launchign the shell --- .../ui/actions/SystemCommandAction.java | 69 ++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) diff --git a/rse/plugins/org.eclipse.rse.shells.ui/src/org/eclipse/rse/shells/ui/actions/SystemCommandAction.java b/rse/plugins/org.eclipse.rse.shells.ui/src/org/eclipse/rse/shells/ui/actions/SystemCommandAction.java index 68a1ac22cf2..a284740a270 100644 --- a/rse/plugins/org.eclipse.rse.shells.ui/src/org/eclipse/rse/shells/ui/actions/SystemCommandAction.java +++ b/rse/plugins/org.eclipse.rse.shells.ui/src/org/eclipse/rse/shells/ui/actions/SystemCommandAction.java @@ -16,6 +16,7 @@ package org.eclipse.rse.shells.ui.actions; +import java.lang.reflect.InvocationTargetException; import java.util.Iterator; import org.eclipse.core.runtime.IAdaptable; @@ -26,7 +27,9 @@ import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.window.Window; import org.eclipse.rse.core.filters.ISystemFilterReference; import org.eclipse.rse.core.model.IHost; +import org.eclipse.rse.core.model.ISystemRegistry; import org.eclipse.rse.core.subsystems.ISubSystem; +import org.eclipse.rse.core.subsystems.SubSystem; import org.eclipse.rse.services.clientserver.PathUtility; import org.eclipse.rse.services.clientserver.messages.SystemMessage; import org.eclipse.rse.shells.ui.RemoteCommandHelpers; @@ -41,6 +44,8 @@ import org.eclipse.rse.ui.ISystemMessages; import org.eclipse.rse.ui.RSEUIPlugin; import org.eclipse.rse.ui.actions.SystemBaseAction; import org.eclipse.rse.ui.dialogs.SystemPromptDialog; +import org.eclipse.rse.ui.operations.SystemFetchOperation.PromptForPassword; +import org.eclipse.rse.ui.operations.SystemFetchOperation.UpdateRegistry; import org.eclipse.rse.ui.view.ISystemViewElementAdapter; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; @@ -51,6 +56,7 @@ import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; @@ -61,6 +67,43 @@ import org.eclipse.swt.widgets.Shell; */ public class SystemCommandAction extends SystemBaseAction { + + public class PromptForPassword implements Runnable + { + public SubSystem _ss; + public PromptForPassword(SubSystem ss) + { + _ss = ss; + } + + public void run() + { + try + { + _ss.promptForPassword(); + } + catch (Exception e) + { + + } + } + } + + public class UpdateRegistry implements Runnable + { + private SubSystem _ss; + public UpdateRegistry(SubSystem ss) + { + _ss = ss; + } + + public void run() + { + ISystemRegistry registry = RSEUIPlugin.getTheSystemRegistry(); + registry.connectedStatusChange(_ss, true, false); + } + } + private IRemoteFile _selected; private ISystemFilterReference _selectedFilterRef; @@ -68,6 +111,7 @@ public class SystemCommandAction extends SystemBaseAction private boolean _isShell; private IRemoteCmdSubSystem _cmdSubSystem; + /** * The command dialog used when running a command. @@ -492,7 +536,7 @@ public class SystemCommandAction extends SystemBaseAction } else { - cmdSubSystem.connect(); + connect(new NullProgressMonitor(), (SubSystem)cmdSubSystem); if (cmdSubSystem.isConnected()) { SystemCommandsUI commandsUI = SystemCommandsUI.getInstance(); @@ -512,6 +556,29 @@ public class SystemCommandAction extends SystemBaseAction } } + + private boolean connect(IProgressMonitor monitor, SubSystem ss) + { + if (!ss.isConnected()) + { + + Display dis = Display.getDefault(); + dis.syncExec(new PromptForPassword(ss)); + try + { + ss.getConnectorService().connect(monitor); + } + catch (InvocationTargetException exc) + { + } + catch (Exception e) + { + } + + dis.asyncExec(new UpdateRegistry(ss)); + } + return true; + } /** * shows the command in the remote shell view