| /** |
| * Copyright (c) 2013, 2015 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - Initial Implementation |
| * Patrick Tasse - [461541] fix handling of default attributes |
| */ |
| package org.eclipse.remote.internal.jsch.ui.wizards; |
| |
| import java.util.HashMap; |
| import java.util.Map; |
| import java.util.Set; |
| |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.jface.preference.PreferenceDialog; |
| import org.eclipse.jface.wizard.WizardPage; |
| import org.eclipse.remote.core.IRemoteConnection; |
| import org.eclipse.remote.core.IRemoteConnectionHostService; |
| import org.eclipse.remote.core.IRemoteConnectionType; |
| import org.eclipse.remote.core.IRemoteConnectionWorkingCopy; |
| import org.eclipse.remote.core.IRemotePortForwardingService; |
| import org.eclipse.remote.core.IRemoteServicesManager; |
| import org.eclipse.remote.core.exception.RemoteConnectionException; |
| import org.eclipse.remote.internal.jsch.core.Activator; |
| import org.eclipse.remote.internal.jsch.core.JSchConnection; |
| import org.eclipse.remote.internal.jsch.ui.messages.Messages; |
| import org.eclipse.remote.ui.widgets.RemoteConnectionWidget; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.ModifyEvent; |
| import org.eclipse.swt.events.ModifyListener; |
| import org.eclipse.swt.events.SelectionAdapter; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.events.SelectionListener; |
| import org.eclipse.swt.graphics.FontMetrics; |
| import org.eclipse.swt.graphics.GC; |
| import org.eclipse.swt.graphics.Point; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Button; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Group; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.Link; |
| import org.eclipse.swt.widgets.Text; |
| import org.eclipse.ui.dialogs.PreferencesUtil; |
| import org.eclipse.ui.forms.events.ExpansionEvent; |
| import org.eclipse.ui.forms.events.IExpansionListener; |
| import org.eclipse.ui.forms.widgets.ExpandableComposite; |
| |
| public class JSchConnectionPage extends WizardPage { |
| |
| private class DataModifyListener implements ModifyListener { |
| @Override |
| public synchronized void modifyText(ModifyEvent e) { |
| validateFields(); |
| getContainer().updateButtons(); |
| } |
| } |
| |
| private Text fConnectionName; |
| private Button fPasswordButton; |
| private Button fPublicKeyButton; |
| private Button fUseLoginShellButton; |
| private Text fHostText; |
| private Text fUserText; |
| private Text fPasswordText; |
| private Text fPassphraseText; |
| private Text fPortText; |
| private Text fTimeoutText; |
| private Text fLoginShellText; |
| |
| private String fInitialName = "Remote Host"; //$NON-NLS-1$ |
| private Set<String> fInvalidConnectionNames; |
| private final Map<String, String> fInitialAttributes = new HashMap<String, String>(); |
| private IRemoteConnectionWorkingCopy fConnection; |
| |
| private final IRemoteConnectionType fConnectionType; |
| |
| private final DataModifyListener fDataModifyListener = new DataModifyListener(); |
| private RemoteConnectionWidget fProxyConnectionWidget; |
| private Text fProxyCommandText; |
| private static final String PREFS_PAGE_ID_NET_PROXY = "org.eclipse.ui.net.NetPreferences"; //$NON-NLS-1$ |
| |
| public JSchConnectionPage(IRemoteConnectionType connectionType) { |
| super(Messages.JSchNewConnectionPage_New_Connection); |
| fConnectionType = connectionType; |
| setPageComplete(false); |
| } |
| |
| /** |
| * Create controls for the bottom (hideable) advanced composite |
| * |
| * @param mold |
| * |
| */ |
| private void createAdvancedControls(final Composite parent) { |
| ExpandableComposite expComp = new ExpandableComposite(parent, ExpandableComposite.TWISTIE); |
| expComp.setText(Messages.JSchNewConnectionPage_Advanced); |
| expComp.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); |
| expComp.setExpanded(false); |
| expComp.addExpansionListener(new IExpansionListener() { |
| |
| @Override |
| public void expansionStateChanged(ExpansionEvent e) { |
| for (int i = 0; i < 2; i++) { // sometimes the size compute isn't correct on first try |
| Point newSize = parent.computeSize(SWT.DEFAULT, SWT.DEFAULT); |
| Point currentSize = parent.getSize(); |
| int deltaY = newSize.y - currentSize.y; |
| Point shellSize = getShell().getSize(); |
| shellSize.y += deltaY; |
| getShell().setSize(shellSize); |
| getShell().layout(true, true); |
| } |
| } |
| |
| @Override |
| public void expansionStateChanging(ExpansionEvent e) { |
| // Ignore |
| } |
| }); |
| |
| Composite advancedComp = new Composite(expComp, SWT.NONE); |
| advancedComp.setLayout(new GridLayout(1, false)); |
| advancedComp.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); |
| |
| Group settingsComp = new Group(advancedComp, SWT.NONE); |
| settingsComp.setText(Messages.JSchConnectionPage_Settings0); |
| settingsComp.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); |
| settingsComp.setLayout(new GridLayout(2, false)); |
| |
| Label portLabel = new Label(settingsComp, SWT.NONE); |
| portLabel.setText(Messages.JSchNewConnectionPage_Port); |
| fPortText = new Text(settingsComp, SWT.BORDER | SWT.SINGLE); |
| fPortText.setText(Integer.toString(JSchConnection.DEFAULT_PORT)); |
| fPortText.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false)); |
| setTextFieldWidthInChars(fPortText, 5); |
| |
| Label timeoutLabel = new Label(settingsComp, SWT.NONE); |
| timeoutLabel.setText(Messages.JSchNewConnectionPage_Timeout); |
| fTimeoutText = new Text(settingsComp, SWT.BORDER | SWT.SINGLE); |
| fTimeoutText.setText(Integer.toString(JSchConnection.DEFAULT_TIMEOUT)); |
| fTimeoutText.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false)); |
| setTextFieldWidthInChars(fTimeoutText, 5); |
| |
| fUseLoginShellButton = new Button(settingsComp, SWT.CHECK); |
| fUseLoginShellButton.setText(Messages.JSchConnectionPage_0); |
| fUseLoginShellButton.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 2, 1)); |
| fUseLoginShellButton.addSelectionListener(new SelectionAdapter() { |
| |
| @Override |
| public void widgetSelected(SelectionEvent e) { |
| validateFields(); |
| updateEnablement(); |
| } |
| }); |
| Label loginShellLabel = new Label(settingsComp, SWT.NONE); |
| loginShellLabel.setText(Messages.JSchConnectionPage_1); |
| fLoginShellText = new Text(settingsComp, SWT.BORDER | SWT.SINGLE); |
| fLoginShellText.setText(JSchConnection.DEFAULT_LOGIN_SHELL_COMMAND); |
| fLoginShellText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); |
| fUseLoginShellButton.setSelection(JSchConnection.DEFAULT_USE_LOGIN_SHELL); |
| |
| Group proxyComp = new Group(advancedComp, SWT.NONE); |
| proxyComp.setText(Messages.JSchConnectionPage_Proxy); |
| proxyComp.setLayout(new GridLayout(1, false)); |
| proxyComp.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); |
| createProxyControls(proxyComp); |
| |
| expComp.setClient(advancedComp); |
| } |
| |
| private void createAuthControls(Composite parent) { |
| Composite controls = new Composite(parent, SWT.NONE); |
| controls.setLayout(new GridLayout(3, false)); |
| controls.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); |
| |
| Label hostLabel = new Label(controls, SWT.NONE); |
| hostLabel.setText(Messages.JSchNewConnectionPage_Host); |
| fHostText = new Text(controls, SWT.BORDER | SWT.SINGLE); |
| fHostText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); |
| |
| Label userLabel = new Label(controls, SWT.NONE); |
| userLabel.setText(Messages.JSchNewConnectionPage_User); |
| fUserText = new Text(controls, SWT.BORDER | SWT.SINGLE); |
| fUserText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); |
| |
| // Key option box |
| fPublicKeyButton = new Button(controls, SWT.RADIO); |
| fPublicKeyButton.setText(Messages.JSchNewConnectionPage_Public_key_based_authentication); |
| fPublicKeyButton.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 2, 1)); |
| fPublicKeyButton.addSelectionListener(new SelectionAdapter() { |
| @Override |
| public void widgetSelected(SelectionEvent e) { |
| validateFields(); |
| updateEnablement(); |
| } |
| }); |
| |
| Link link = new Link(controls, SWT.WRAP); |
| final GridData linkLayoutData = new GridData(GridData.FILL_HORIZONTAL); |
| link.setLayoutData(linkLayoutData); |
| final String PREFS_PAGE_ID_NET_SSH = "org.eclipse.jsch.ui.SSHPreferences"; //$NON-NLS-1$ |
| link.addSelectionListener(new SelectionListener() { |
| @Override |
| public void widgetSelected(SelectionEvent e) { |
| PreferenceDialog dlg = PreferencesUtil.createPreferenceDialogOn(getShell(), PREFS_PAGE_ID_NET_SSH, |
| new String[] { PREFS_PAGE_ID_NET_SSH }, null); |
| dlg.open(); |
| } |
| |
| @Override |
| public void widgetDefaultSelected(SelectionEvent e) { |
| // ignore |
| } |
| }); |
| link.setText(Messages.JSchConnectionPage_KeysAtSSH2); |
| |
| // Passphrase field |
| Label passphraseLabel = new Label(controls, SWT.NONE); |
| passphraseLabel.setText(Messages.JSchNewConnectionPage_Passphrase); |
| fPassphraseText = new Text(controls, SWT.BORDER | SWT.SINGLE | SWT.PASSWORD); |
| fPassphraseText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); |
| |
| // User option box |
| fPasswordButton = new Button(controls, SWT.RADIO); |
| fPasswordButton.setText(Messages.JSchNewConnectionPage_Password_based_authentication); |
| fPasswordButton.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 3, 1)); |
| fPasswordButton.addSelectionListener(new SelectionAdapter() { |
| @Override |
| public void widgetSelected(SelectionEvent e) { |
| validateFields(); |
| updateEnablement(); |
| } |
| }); |
| |
| // Password field |
| Label passwordLabel = new Label(controls, SWT.NONE); |
| passwordLabel.setText(Messages.JSchNewConnectionPage_Password); |
| fPasswordText = new Text(controls, SWT.BORDER | SWT.SINGLE | SWT.PASSWORD); |
| fPasswordText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); |
| |
| fPasswordButton.setSelection(JSchConnection.DEFAULT_IS_PASSWORD); |
| fPublicKeyButton.setSelection(!JSchConnection.DEFAULT_IS_PASSWORD); |
| controls.setTabList( |
| new Control[] { fHostText, fUserText, fPublicKeyButton, fPassphraseText, fPasswordButton, fPasswordText }); |
| } |
| |
| @Override |
| public void createControl(Composite parent) { |
| if (fConnection == null) { |
| setDescription(Messages.JSchNewConnectionPage_New_connection_properties); |
| setTitle(Messages.JSchNewConnectionPage_New_Connection); |
| setMessage(Messages.JSchConnectionPage_Initial_Message); |
| } else { |
| setDescription(Messages.JSchConnectionPage_Edit_properties_of_an_existing_connection); |
| setTitle(Messages.JSchConnectionPage_Edit_Connection); |
| } |
| setErrorMessage(null); |
| |
| GridLayout topLayout = new GridLayout(2, false); |
| final Composite topControl = new Composite(parent, SWT.NONE); |
| setControl(topControl); |
| topControl.setLayout(topLayout); |
| |
| Label label = new Label(topControl, SWT.NONE); |
| label.setText(Messages.JSchNewConnectionPage_Connection_name); |
| |
| fConnectionName = new Text(topControl, SWT.BORDER | SWT.SINGLE); |
| fConnectionName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); |
| fConnectionName.setEnabled(fConnection == null); |
| |
| final Group authGroup = new Group(topControl, SWT.NONE); |
| authGroup.setText(Messages.JSchNewConnectionPage_Host_information); |
| authGroup.setLayout(new GridLayout(1, false)); |
| authGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1)); |
| |
| createAuthControls(authGroup); |
| createAdvancedControls(authGroup); |
| |
| try { |
| loadValues(); |
| } catch (CoreException e) { |
| Activator.log(e.getStatus()); |
| } |
| |
| /* |
| * Register listeners after loading values so we don't trigger listeners |
| */ |
| registerListeners(); |
| |
| if (fConnection != null) { |
| validateFields(); |
| } |
| |
| updateEnablement(); |
| } |
| |
| /** |
| * Create controls for the bottom (hideable) proxy composite |
| * |
| * @param mold |
| * |
| */ |
| private void createProxyControls(final Composite proxyComp) { |
| Label lblConnection = new Label(proxyComp, SWT.WRAP); |
| lblConnection.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| lblConnection.setText(Messages.JSchConnectionPage_SelectConnection); |
| |
| fProxyConnectionWidget = new RemoteConnectionWidget(proxyComp, SWT.NONE, null, 0); |
| fProxyConnectionWidget.filterConnections(IRemoteConnectionHostService.class, IRemotePortForwardingService.class); |
| |
| Label lblCommand = new Label(proxyComp, SWT.WRAP); |
| lblCommand.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| lblCommand.setText(Messages.JSchConnectionPage_SelectCommand); |
| |
| fProxyCommandText = new Text(proxyComp, SWT.BORDER); |
| fProxyCommandText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| |
| Link link = new Link(proxyComp, SWT.WRAP); |
| final GridData linkLayoutData = new GridData(GridData.FILL_HORIZONTAL); |
| link.setLayoutData(linkLayoutData); |
| link.addSelectionListener(new SelectionListener() { |
| @Override |
| public void widgetSelected(SelectionEvent e) { |
| PreferenceDialog dlg = PreferencesUtil.createPreferenceDialogOn(getShell(), PREFS_PAGE_ID_NET_PROXY, |
| new String[] { PREFS_PAGE_ID_NET_PROXY }, null); |
| dlg.open(); |
| } |
| |
| @Override |
| public void widgetDefaultSelected(SelectionEvent e) { |
| // ignore |
| } |
| }); |
| |
| linkLayoutData.widthHint = 400; |
| link.setText(Messages.JSchConnectionPage_Help); |
| } |
| |
| public IRemoteConnectionWorkingCopy getConnection() { |
| return fConnection; |
| } |
| |
| /** |
| * Check if the connection name is invalid. This only applies to new connections (when fConnection is null). |
| * |
| * @param name |
| * connection name |
| * @return true if the name is invalid, false otherwise |
| */ |
| private boolean isInvalidName(String name) { |
| if (fConnection == null) { |
| if (fInvalidConnectionNames == null) { |
| return fConnectionType.getConnection(name) != null; |
| } |
| return fInvalidConnectionNames.contains(name); |
| } |
| return false; |
| } |
| |
| private void loadValues() throws CoreException { |
| IRemoteServicesManager manager = Activator.getService(IRemoteServicesManager.class); |
| if (fConnection != null) { |
| fConnectionName.setText(fConnection.getName()); |
| fHostText.setText(fConnection.getAttribute(JSchConnection.ADDRESS_ATTR)); |
| fUserText.setText(fConnection.getAttribute(JSchConnection.USERNAME_ATTR)); |
| String portStr = fConnection.getAttribute(JSchConnection.PORT_ATTR); |
| fPortText.setText(portStr.isEmpty() ? Integer.toString(JSchConnection.DEFAULT_PORT) : portStr); |
| String timeoutStr = fConnection.getAttribute(JSchConnection.TIMEOUT_ATTR); |
| fTimeoutText.setText(timeoutStr.isEmpty() ? Integer.toString(JSchConnection.DEFAULT_TIMEOUT) : timeoutStr); |
| String isPwdStr = fConnection.getAttribute(JSchConnection.IS_PASSWORD_ATTR); |
| boolean isPwd = isPwdStr.isEmpty() ? JSchConnection.DEFAULT_IS_PASSWORD : Boolean.parseBoolean(isPwdStr); |
| fPasswordButton.setSelection(isPwd); |
| fPublicKeyButton.setSelection(!isPwd); |
| fPasswordText.setText(fConnection.getSecureAttribute(JSchConnection.PASSWORD_ATTR)); |
| fPassphraseText.setText(fConnection.getSecureAttribute(JSchConnection.PASSPHRASE_ATTR)); |
| String useLoginShellStr = fConnection.getAttribute(JSchConnection.USE_LOGIN_SHELL_ATTR); |
| boolean useLoginShell = useLoginShellStr.isEmpty() ? JSchConnection.DEFAULT_USE_LOGIN_SHELL |
| : Boolean.parseBoolean(useLoginShellStr); |
| fUseLoginShellButton.setSelection(useLoginShell); |
| String loginShellStr = fConnection.getAttribute(JSchConnection.LOGIN_SHELL_COMMAND_ATTR); |
| fLoginShellText.setText(loginShellStr.isEmpty() ? JSchConnection.DEFAULT_LOGIN_SHELL_COMMAND : loginShellStr); |
| fProxyCommandText.setText(fConnection.getAttribute(JSchConnection.PROXYCOMMAND_ATTR)); |
| JSchConnection proxyConn = fConnection.getService(JSchConnection.class).getProxyConnection(); |
| if (proxyConn == null) { |
| // Use local connection |
| fProxyConnectionWidget.setConnection(manager.getLocalConnectionType().getConnections().get(0)); |
| } else { |
| fProxyConnectionWidget.setConnection(proxyConn.getRemoteConnection()); |
| } |
| } else { |
| fConnectionName.setText(fInitialName); |
| String host = fInitialAttributes.get(JSchConnection.ADDRESS_ATTR); |
| if (host != null) { |
| fHostText.setText(host); |
| } |
| String username = fInitialAttributes.get(JSchConnection.USERNAME_ATTR); |
| if (username != null) { |
| fUserText.setText(username); |
| } |
| String port = fInitialAttributes.get(JSchConnection.PORT_ATTR); |
| if (port != null) { |
| fPortText.setText(port); |
| } |
| String timeout = fInitialAttributes.get(JSchConnection.TIMEOUT_ATTR); |
| if (timeout != null) { |
| fTimeoutText.setText(timeout); |
| } |
| String isPwd = fInitialAttributes.get(JSchConnection.IS_PASSWORD_ATTR); |
| if (isPwd != null) { |
| fPasswordButton.setSelection(Boolean.parseBoolean(isPwd)); |
| } |
| String password = fInitialAttributes.get(JSchConnection.PASSWORD_ATTR); |
| if (password != null) { |
| fPasswordText.setText(password); |
| } |
| String passphrase = fInitialAttributes.get(JSchConnection.PASSPHRASE_ATTR); |
| if (passphrase != null) { |
| fPassphraseText.setText(passphrase); |
| } |
| String useLoginShell = fInitialAttributes.get(JSchConnection.USE_LOGIN_SHELL_ATTR); |
| if (useLoginShell != null) { |
| fUseLoginShellButton.setSelection(Boolean.parseBoolean(useLoginShell)); |
| } |
| String loginShell = fInitialAttributes.get(JSchConnection.LOGIN_SHELL_COMMAND_ATTR); |
| if (loginShell != null) { |
| fLoginShellText.setText(loginShell); |
| } |
| fProxyConnectionWidget.setConnection(manager.getLocalConnectionType().getConnections().get(0)); |
| } |
| } |
| |
| private void registerListeners() { |
| fConnectionName.addModifyListener(fDataModifyListener); |
| fHostText.addModifyListener(fDataModifyListener); |
| fUserText.addModifyListener(fDataModifyListener); |
| fPasswordText.addModifyListener(fDataModifyListener); |
| fPassphraseText.addModifyListener(fDataModifyListener); |
| fPortText.addModifyListener(fDataModifyListener); |
| fTimeoutText.addModifyListener(fDataModifyListener); |
| fLoginShellText.addModifyListener(fDataModifyListener); |
| fProxyCommandText.addModifyListener(fDataModifyListener); |
| fProxyConnectionWidget.addSelectionListener(new SelectionAdapter() { |
| @Override |
| public void widgetSelected(SelectionEvent e) { |
| validateFields(); |
| getContainer().updateButtons(); |
| } |
| }); |
| } |
| |
| public void setAddress(String address) { |
| fInitialAttributes.put(JSchConnection.ADDRESS_ATTR, address); |
| } |
| |
| public void setAttributes(Map<String, String> attributes) { |
| fInitialAttributes.putAll(attributes); |
| } |
| |
| public void setConnection(IRemoteConnectionWorkingCopy connection) { |
| fConnection = connection; |
| } |
| |
| public void setConnectionName(String name) { |
| fInitialName = name; |
| } |
| |
| public void setInvalidConnectionNames(Set<String> names) { |
| fInvalidConnectionNames = names; |
| } |
| |
| @Override |
| public void setPageComplete(boolean complete) { |
| super.setPageComplete(complete); |
| if (complete) { |
| storeValues(); |
| } |
| } |
| |
| public void setPort(int port) { |
| fInitialAttributes.put(JSchConnection.PORT_ATTR, Integer.toString(port)); |
| } |
| |
| private void setTextFieldWidthInChars(Text text, int chars) { |
| text.setTextLimit(chars); |
| Object data = text.getLayoutData(); |
| if (data instanceof GridData) { |
| GC gc = new GC(text); |
| FontMetrics fm = gc.getFontMetrics(); |
| int width = (int) (chars * fm.getAverageCharacterWidth()); |
| gc.dispose(); |
| ((GridData) data).widthHint = width; |
| } |
| } |
| |
| public void setUsername(String username) { |
| fInitialAttributes.put(JSchConnection.USERNAME_ATTR, username); |
| } |
| |
| private void storeValues() { |
| if (fConnection == null) { |
| try { |
| fConnection = fConnectionType.newConnection(fConnectionName.getText().trim()); |
| } catch (RemoteConnectionException e) { |
| Activator.log(e); |
| } |
| } |
| if (fConnection != null) { |
| fConnection.setName(fConnectionName.getText().trim()); |
| fConnection.setAttribute(JSchConnection.ADDRESS_ATTR, fHostText.getText().trim()); |
| fConnection.setAttribute(JSchConnection.USERNAME_ATTR, fUserText.getText().trim()); |
| fConnection.setSecureAttribute(JSchConnection.PASSWORD_ATTR, fPasswordText.getText().trim()); |
| fConnection.setSecureAttribute(JSchConnection.PASSPHRASE_ATTR, fPassphraseText.getText().trim()); |
| fConnection.setAttribute(JSchConnection.IS_PASSWORD_ATTR, Boolean.toString(fPasswordButton.getSelection())); |
| fConnection.setAttribute(JSchConnection.TIMEOUT_ATTR, fTimeoutText.getText().trim()); |
| fConnection.setAttribute(JSchConnection.PORT_ATTR, fPortText.getText().trim()); |
| fConnection.setAttribute(JSchConnection.PROXYCOMMAND_ATTR, fProxyCommandText.getText().trim()); |
| fConnection.setAttribute(JSchConnection.USE_LOGIN_SHELL_ATTR, Boolean.toString(fUseLoginShellButton.getSelection())); |
| fConnection.setAttribute(JSchConnection.LOGIN_SHELL_COMMAND_ATTR, fLoginShellText.getText().trim()); |
| IRemoteConnection proxyConnection = fProxyConnectionWidget.getConnection(); |
| IRemoteServicesManager manager = Activator.getService(IRemoteServicesManager.class); |
| String proxyConnectionName = ""; //$NON-NLS-1$ |
| if (proxyConnection != null && proxyConnection.getConnectionType() != manager.getLocalConnectionType()) { |
| proxyConnectionName = proxyConnection.getName(); |
| } |
| fConnection.setAttribute(JSchConnection.PROXYCONNECTION_ATTR, proxyConnectionName); |
| } |
| } |
| |
| private void updateEnablement() { |
| boolean isPasswordAuth = fPasswordButton.getSelection(); |
| fPasswordText.setEnabled(isPasswordAuth); |
| fPassphraseText.setEnabled(!isPasswordAuth); |
| fLoginShellText.setEnabled(fUseLoginShellButton.getSelection()); |
| } |
| |
| private String validateAdvanced() { |
| try { |
| Integer.parseInt(fPortText.getText().trim()); |
| } catch (NumberFormatException ne) { |
| return Messages.JSchNewConnectionPage_Port_is_not_valid; |
| } |
| try { |
| Integer.parseInt(fTimeoutText.getText().trim()); |
| } catch (NumberFormatException ne) { |
| return Messages.JSchNewConnectionPage_Timeout_is_not_valid; |
| } |
| return null; |
| } |
| |
| private void validateFields() { |
| String message = null; |
| if (fConnectionName.getText().trim().length() == 0) { |
| message = Messages.JSchNewConnectionPage_Please_enter_a_connection_name; |
| } else if (isInvalidName(fConnectionName.getText().trim())) { |
| message = Messages.JSchConnectionPage_A_connection_with_that_name_already_exists; |
| } else if (fHostText.getText().trim().length() == 0) { |
| message = Messages.JSchNewConnectionPage_Host_name_cannot_be_empty; |
| } else if (fUserText.getText().trim().length() == 0) { |
| message = Messages.JSchNewConnectionPage_User_name_cannot_be_empty; |
| } else if (fUseLoginShellButton.getSelection() && fLoginShellText.getText().trim().length() == 0) { |
| message = Messages.JSchConnectionPage_2; |
| } else if (fProxyConnectionWidget.getConnection() == null) { |
| message = Messages.JSchConnectionPage_selectProxyConnection; |
| } |
| if (message == null) { |
| message = validateAdvanced(); |
| } |
| |
| setErrorMessage(message); |
| setPageComplete(message == null); |
| } |
| |
| } |