diff options
author | Uwe Stieber | 2011-11-16 08:59:51 +0000 |
---|---|---|
committer | Uwe Stieber | 2011-11-16 08:59:51 +0000 |
commit | 8706fb04b6c1417ed8d5ece83bc9fca64ddfc3ce (patch) | |
tree | 35ff2855e92a05029eb1a01455c6018c573c7175 /target_explorer/plugins/org.eclipse.tcf.te.ui.terminals.ssh/src/org/eclipse/tcf/te/ui/terminals/ssh/controls/SshWizardConfigurationPanel.java | |
parent | 67449886c09c8ec4da4f39082373ab62ccc3d978 (diff) | |
download | org.eclipse.tcf-8706fb04b6c1417ed8d5ece83bc9fca64ddfc3ce.tar.gz org.eclipse.tcf-8706fb04b6c1417ed8d5ece83bc9fca64ddfc3ce.tar.xz org.eclipse.tcf-8706fb04b6c1417ed8d5ece83bc9fca64ddfc3ce.zip |
Target Explorer: Refactor name space from org.eclipse.tm.te.* to org.eclipse.tcf.te.*
Diffstat (limited to 'target_explorer/plugins/org.eclipse.tcf.te.ui.terminals.ssh/src/org/eclipse/tcf/te/ui/terminals/ssh/controls/SshWizardConfigurationPanel.java')
-rw-r--r-- | target_explorer/plugins/org.eclipse.tcf.te.ui.terminals.ssh/src/org/eclipse/tcf/te/ui/terminals/ssh/controls/SshWizardConfigurationPanel.java | 281 |
1 files changed, 281 insertions, 0 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui.terminals.ssh/src/org/eclipse/tcf/te/ui/terminals/ssh/controls/SshWizardConfigurationPanel.java b/target_explorer/plugins/org.eclipse.tcf.te.ui.terminals.ssh/src/org/eclipse/tcf/te/ui/terminals/ssh/controls/SshWizardConfigurationPanel.java new file mode 100644 index 000000000..96856d381 --- /dev/null +++ b/target_explorer/plugins/org.eclipse.tcf.te.ui.terminals.ssh/src/org/eclipse/tcf/te/ui/terminals/ssh/controls/SshWizardConfigurationPanel.java @@ -0,0 +1,281 @@ +/******************************************************************************* + * Copyright (c) 2011 Wind River Systems, Inc. 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: + * Wind River Systems - initial API and implementation + * Max Weninger (Wind River) - [361352] [TERMINALS][SSH] Add SSH terminal support + *******************************************************************************/ +package org.eclipse.tcf.te.ui.terminals.ssh.controls; + +import java.util.concurrent.atomic.AtomicReference; + +import org.eclipse.core.runtime.Assert; +import org.eclipse.equinox.security.storage.ISecurePreferences; +import org.eclipse.equinox.security.storage.SecurePreferencesFactory; +import org.eclipse.equinox.security.storage.StorageException; +import org.eclipse.jface.dialogs.IDialogSettings; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.TypedEvent; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage; +import org.eclipse.tm.internal.terminal.ssh.SshConnector; +import org.eclipse.tm.internal.terminal.ssh.SshSettings; +import org.eclipse.tcf.protocol.IPeer; +import org.eclipse.tcf.protocol.Protocol; +import org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer; +import org.eclipse.tcf.te.runtime.services.interfaces.constants.ITerminalsConnectorConstants; +import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerModel; +import org.eclipse.tcf.te.ui.controls.BaseDialogPageControl; +import org.eclipse.tcf.te.ui.terminals.panels.AbstractConfigurationPanel; +import org.eclipse.tcf.te.ui.wizards.interfaces.ISharedDataWizardPage; +import org.eclipse.ui.forms.widgets.FormToolkit; + +/** + * SSH wizard configuration panel implementation. + */ +@SuppressWarnings("restriction") +public class SshWizardConfigurationPanel extends AbstractConfigurationPanel implements ISharedDataWizardPage { + + private SshSettings sshSettings; + private ISettingsPage sshSettingsPage; + + /** + * Constructor. + * + * @param parentControl The parent control. Must not be <code>null</code>! + */ + public SshWizardConfigurationPanel(BaseDialogPageControl parentControl) { + super(parentControl); + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.ui.controls.interfaces.IWizardConfigurationPanel#setupPanel(org.eclipse.swt.widgets.Composite, org.eclipse.ui.forms.widgets.FormToolkit) + */ + @Override + public void setupPanel(Composite parent, FormToolkit toolkit) { + Composite panel = new Composite(parent, SWT.NONE); + panel.setLayout(new GridLayout()); + GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); + panel.setLayoutData(data); + + SshConnector conn = new SshConnector(); + sshSettings = (SshSettings) conn.getSshSettings(); + sshSettings.setHost(getHost()); + sshSettings.setUser(getDefaultUser()); + sshSettingsPage = conn.makeSettingsPage(); + sshSettingsPage.createControl(panel); + + setControl(panel); + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.ui.controls.interfaces.IWizardConfigurationPanel#dataChanged(org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer, org.eclipse.swt.events.TypedEvent) + */ + @Override + public boolean dataChanged(IPropertiesContainer data, TypedEvent e) { + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.ui.wizards.interfaces.ISharedDataWizardPage#setupData(org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer) + */ + @Override + public void setupData(IPropertiesContainer data) { + } + + /** + * Returns the default user name. + * + * @return The default user name. + */ + private String getDefaultUser(){ + return System.getProperty("user.name"); + } + + /** + * Returns the host name or IP from the current selection. + * + * @return The host name or IP. + */ + private String getHost() { + ISelection selection = getSelection(); + final AtomicReference<String> result = new AtomicReference<String>(); + if (selection instanceof IStructuredSelection && !selection.isEmpty()) { + Object element = ((IStructuredSelection) selection).getFirstElement(); + if (element instanceof IPeerModel) { + final IPeerModel peerModel = (IPeerModel) element; + if (Protocol.isDispatchThread()) { + result.set(peerModel.getPeer().getAttributes().get(IPeer.ATTR_IP_HOST)); + } + else { + Protocol.invokeAndWait(new Runnable() { + @Override + public void run() { + result.set(peerModel.getPeer().getAttributes().get(IPeer.ATTR_IP_HOST)); + } + }); + } + } + } + + return result.get(); + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.ui.wizards.interfaces.ISharedDataWizardPage#extractData(org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer) + */ + @Override + public void extractData(IPropertiesContainer data) { + // set the terminal connector id for ssh + data.setProperty(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID, "org.eclipse.tcf.internal.terminal.ssh.SshConnector"); + + // set the connector type for ssh + data.setProperty(ITerminalsConnectorConstants.PROP_CONNECTOR_TYPE_ID, "org.eclipse.tcf.te.ui.terminals.type.ssh"); + + sshSettingsPage.saveSettings(); + data.setProperty(ITerminalsConnectorConstants.PROP_IP_HOST,sshSettings.getHost()); + data.setProperty(ITerminalsConnectorConstants.PROP_IP_PORT, sshSettings.getPort()); + data.setProperty(ITerminalsConnectorConstants.PROP_TIMEOUT, sshSettings.getTimeout()); + data.setProperty(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE, sshSettings.getKeepalive()); + data.setProperty(ITerminalsConnectorConstants.PROP_SSH_PASSWORD, sshSettings.getPassword()); + data.setProperty(ITerminalsConnectorConstants.PROP_SSH_USER, sshSettings.getUser()); + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.ui.wizards.interfaces.ISharedDataWizardPage#initializeData(org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer) + */ + @Override + public void initializeData(IPropertiesContainer data) { + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.ui.wizards.interfaces.ISharedDataWizardPage#removeData(org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer) + */ + @Override + public void removeData(IPropertiesContainer data) { + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.ui.controls.interfaces.IWizardConfigurationPanel#doRestoreWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String) + */ + @Override + public void doRestoreWidgetValues(IDialogSettings settings, String idPrefix) { + String host = getHost(); + if (settings.get(getSettingsKeyWithPrefix(host, ITerminalsConnectorConstants.PROP_IP_HOST)) != null) { + sshSettings.setHost(settings.get(getSettingsKeyWithPrefix(host, ITerminalsConnectorConstants.PROP_IP_HOST))); + } + if (settings.get(getSettingsKeyWithPrefix(host, ITerminalsConnectorConstants.PROP_IP_PORT)) != null) { + sshSettings.setPort(settings.get(getSettingsKeyWithPrefix(host, ITerminalsConnectorConstants.PROP_IP_PORT))); + } + if (settings.get(getSettingsKeyWithPrefix(host, ITerminalsConnectorConstants.PROP_TIMEOUT)) != null) { + sshSettings.setTimeout(settings.get(getSettingsKeyWithPrefix(host, ITerminalsConnectorConstants.PROP_TIMEOUT))); + } + if (settings.get(getSettingsKeyWithPrefix(host, ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE)) != null) { + sshSettings.setKeepalive(settings.get(getSettingsKeyWithPrefix(host, ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE))); + } + if (settings.get(getSettingsKeyWithPrefix(host, ITerminalsConnectorConstants.PROP_SSH_USER)) != null) { + sshSettings.setUser(settings.get(getSettingsKeyWithPrefix(host, ITerminalsConnectorConstants.PROP_SSH_USER))); + } + String password = accessSecurePassword(sshSettings.getHost()); + if (password != null) { + sshSettings.setPassword(password); + } + // set settings in page + sshSettingsPage.loadSettings(); + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.ui.controls.interfaces.IWizardConfigurationPanel#doSaveWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String) + */ + @Override + public void doSaveWidgetValues(IDialogSettings settings, String idPrefix) { + // make sure the values are saved + // actually not needed since this is done before in extractData + sshSettingsPage.saveSettings(); + String host = getHost(); + settings.put(getSettingsKeyWithPrefix(host, ITerminalsConnectorConstants.PROP_IP_HOST), sshSettings.getHost()); + settings.put(getSettingsKeyWithPrefix(host, ITerminalsConnectorConstants.PROP_IP_PORT), sshSettings.getPort()); + settings.put(getSettingsKeyWithPrefix(host, ITerminalsConnectorConstants.PROP_TIMEOUT), sshSettings.getTimeout()); + settings.put(getSettingsKeyWithPrefix(host, ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE), sshSettings.getKeepalive()); + settings.put(getSettingsKeyWithPrefix(host, ITerminalsConnectorConstants.PROP_SSH_USER), sshSettings.getUser()); + + if(sshSettings.getPassword()!=null && sshSettings.getPassword().length()!=0){ + saveSecurePassword(host, sshSettings.getPassword()); + } + } + + /** + * Constructs the full settings key. + */ + private String getSettingsKeyWithPrefix(String host, String value) { + return host + "." + value; + } + + /** + * Save the password to the secure storage. + * + * @param host The host. Must not be <code>null</code>. + * @param password The password. Must not be <code>null</code>. + */ + private void saveSecurePassword(String host, String password) { + Assert.isNotNull(host); + Assert.isNotNull(password); + + // To access the secure storage, we need the preference instance + ISecurePreferences preferences = SecurePreferencesFactory.getDefault(); + if (preferences != null) { + // Construct the secure preferences node key + String nodeKey = "/Target Explorer SSH Password/" + host; + ISecurePreferences node = preferences.node(nodeKey); + if (node != null) { + try { + node.put("password", password, true); + } + catch (StorageException ex) { /* ignored on purpose */ } + } + } + } + + /** + * Reads the password from the secure storage. + * + * @param host The host. Must not be <code>null</code>. + * @return The password or <code>null</code>. + */ + private String accessSecurePassword(String host) { + Assert.isNotNull(host); + + // To access the secure storage, we need the preference instance + ISecurePreferences preferences = SecurePreferencesFactory.getDefault(); + if (preferences != null) { + // Construct the secure preferences node key + String nodeKey = "/Target Explorer SSH Password/" + host; + ISecurePreferences node = preferences.node(nodeKey); + if (node != null) { + String password = null; + try { + password = node.get("password", null); + } + catch (StorageException ex) { /* ignored on purpose */ } + + return password; + } + } + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.ui.controls.panels.AbstractWizardConfigurationPanel#isValid() + */ + @Override + public boolean isValid(){ + return sshSettingsPage.validateSettings(); + } +} |