1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-21 21:52:10 +02:00

Bug 559474: Format all TM.terminal code to CDT standard

This is applying the per-project code formatting rules that would
be applied on save in the JDT editor

See also Bug 540373

Change-Id: Id04c972c3b3cb0a6ed1ab8581185359b7cf43f91
This commit is contained in:
Jonah Graham 2020-01-31 11:02:25 -05:00
parent 213770265a
commit c58c28b9cc
243 changed files with 8230 additions and 7835 deletions

View file

@ -1,13 +1,13 @@
################################################################################ ################################################################################
# Copyright (c) 2006, 2018 Wind River Systems, Inc. and others. # Copyright (c) 2006, 2018 Wind River Systems, Inc. and others.
# All rights reserved. This program and the accompanying materials # All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License 2.0 # are made available under the terms of the Eclipse Public License 2.0
# which accompanies this distribution, and is available at # which accompanies this distribution, and is available at
# https://www.eclipse.org/legal/epl-2.0/ # https://www.eclipse.org/legal/epl-2.0/
# #
# Contributors: # Contributors:
# Michael Scharf (Wind River) - initial API and implementation # Michael Scharf (Wind River) - initial API and implementation
# Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license # Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license
################################################################################ ################################################################################
bin.includes = feature.xml,\ bin.includes = feature.xml,\
feature.properties,\ feature.properties,\

View file

@ -1,13 +1,13 @@
################################################################################ ################################################################################
# Copyright (c) 2006, 2018 Wind River Systems, Inc. and others. # Copyright (c) 2006, 2018 Wind River Systems, Inc. and others.
# All rights reserved. This program and the accompanying materials # All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License 2.0 # are made available under the terms of the Eclipse Public License 2.0
# which accompanies this distribution, and is available at # which accompanies this distribution, and is available at
# https://www.eclipse.org/legal/epl-2.0/ # https://www.eclipse.org/legal/epl-2.0/
# #
# Contributors: # Contributors:
# Michael Scharf (Wind River) - initial API and implementation # Michael Scharf (Wind River) - initial API and implementation
# Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license # Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license
################################################################################ ################################################################################
bin.includes = feature.xml,\ bin.includes = feature.xml,\
feature.properties,\ feature.properties,\

View file

@ -1,13 +1,13 @@
################################################################################ ################################################################################
# Copyright (c) 2006, 2018 Wind River Systems, Inc. and others. # Copyright (c) 2006, 2018 Wind River Systems, Inc. and others.
# All rights reserved. This program and the accompanying materials # All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License 2.0 # are made available under the terms of the Eclipse Public License 2.0
# which accompanies this distribution, and is available at # which accompanies this distribution, and is available at
# https://www.eclipse.org/legal/epl-2.0/ # https://www.eclipse.org/legal/epl-2.0/
# #
# Contributors: # Contributors:
# Michael Scharf (Wind River) - initial API and implementation # Michael Scharf (Wind River) - initial API and implementation
# Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license # Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license
################################################################################ ################################################################################
bin.includes = feature.xml,\ bin.includes = feature.xml,\
feature.properties,\ feature.properties,\

View file

@ -6,7 +6,7 @@
# https://www.eclipse.org/legal/epl-2.0/ # https://www.eclipse.org/legal/epl-2.0/
# #
# SPDX-License-Identifier: EPL-2.0 # SPDX-License-Identifier: EPL-2.0
# #
# Contributors: # Contributors:
# Martin Oberhuber (Wind River) - initial API and implementation # Martin Oberhuber (Wind River) - initial API and implementation
############################################################################### ###############################################################################

View file

@ -1,13 +1,13 @@
################################################################################ ################################################################################
# Copyright (c) 2006, 2018 Wind River Systems, Inc. and others. # Copyright (c) 2006, 2018 Wind River Systems, Inc. and others.
# All rights reserved. This program and the accompanying materials # All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License 2.0 # are made available under the terms of the Eclipse Public License 2.0
# which accompanies this distribution, and is available at # which accompanies this distribution, and is available at
# https://www.eclipse.org/legal/epl-2.0/ # https://www.eclipse.org/legal/epl-2.0/
# #
# Contributors: # Contributors:
# Michael Scharf (Wind River) - initial API and implementation # Michael Scharf (Wind River) - initial API and implementation
# Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license # Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license
################################################################################ ################################################################################
bin.includes = feature.xml,\ bin.includes = feature.xml,\
feature.properties,\ feature.properties,\

View file

@ -6,7 +6,7 @@
# https://www.eclipse.org/legal/epl-2.0/ # https://www.eclipse.org/legal/epl-2.0/
# #
# SPDX-License-Identifier: EPL-2.0 # SPDX-License-Identifier: EPL-2.0
# #
# Contributors: # Contributors:
# Martin Oberhuber (Wind River) - initial API and implementation # Martin Oberhuber (Wind River) - initial API and implementation
############################################################################### ###############################################################################

View file

@ -6,10 +6,10 @@
# https://www.eclipse.org/legal/epl-2.0/ # https://www.eclipse.org/legal/epl-2.0/
# #
# SPDX-License-Identifier: EPL-2.0 # SPDX-License-Identifier: EPL-2.0
# #
# Contributors: # Contributors:
# Michael Scharf (Wind River) - initial API and implementation # Michael Scharf (Wind River) - initial API and implementation
# Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license # Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license
############################################################################### ###############################################################################
bin.includes = feature.xml,\ bin.includes = feature.xml,\
feature.properties feature.properties

View file

@ -6,7 +6,7 @@
# https://www.eclipse.org/legal/epl-2.0/ # https://www.eclipse.org/legal/epl-2.0/
# #
# SPDX-License-Identifier: EPL-2.0 # SPDX-License-Identifier: EPL-2.0
# #
# Contributors: # Contributors:
# Martin Oberhuber (Wind River) - initial API and implementation # Martin Oberhuber (Wind River) - initial API and implementation
############################################################################### ###############################################################################

View file

@ -6,10 +6,10 @@
# https://www.eclipse.org/legal/epl-2.0/ # https://www.eclipse.org/legal/epl-2.0/
# #
# SPDX-License-Identifier: EPL-2.0 # SPDX-License-Identifier: EPL-2.0
# #
# Contributors: # Contributors:
# Michael Scharf (Wind River) - initial API and implementation # Michael Scharf (Wind River) - initial API and implementation
# Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license # Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license
############################################################################### ###############################################################################
bin.includes = feature.xml,\ bin.includes = feature.xml,\
feature.properties,\ feature.properties,\

View file

@ -6,7 +6,7 @@
# https://www.eclipse.org/legal/epl-2.0/ # https://www.eclipse.org/legal/epl-2.0/
# #
# SPDX-License-Identifier: EPL-2.0 # SPDX-License-Identifier: EPL-2.0
# #
# Contributors: # Contributors:
# Martin Oberhuber (Wind River) - initial API and implementation # Martin Oberhuber (Wind River) - initial API and implementation
############################################################################### ###############################################################################

View file

@ -1,13 +1,13 @@
################################################################################ ################################################################################
# Copyright (c) 2006, 2018 Wind River Systems, Inc. and others. # Copyright (c) 2006, 2018 Wind River Systems, Inc. and others.
# All rights reserved. This program and the accompanying materials # All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License 2.0 # are made available under the terms of the Eclipse Public License 2.0
# which accompanies this distribution, and is available at # which accompanies this distribution, and is available at
# https://www.eclipse.org/legal/epl-2.0/ # https://www.eclipse.org/legal/epl-2.0/
# #
# Contributors: # Contributors:
# Michael Scharf (Wind River) - initial API and implementation # Michael Scharf (Wind River) - initial API and implementation
# Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license # Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license
################################################################################ ################################################################################
bin.includes = feature.xml,\ bin.includes = feature.xml,\
feature.properties,\ feature.properties,\

View file

@ -6,7 +6,7 @@
# https://www.eclipse.org/legal/epl-2.0/ # https://www.eclipse.org/legal/epl-2.0/
# #
# SPDX-License-Identifier: EPL-2.0 # SPDX-License-Identifier: EPL-2.0
# #
# Contributors: # Contributors:
# Martin Oberhuber (Wind River) - initial API and implementation # Martin Oberhuber (Wind River) - initial API and implementation
############################################################################### ###############################################################################

View file

@ -1,13 +1,13 @@
################################################################################ ################################################################################
# Copyright (c) 2006, 2018 Wind River Systems, Inc. and others. # Copyright (c) 2006, 2018 Wind River Systems, Inc. and others.
# All rights reserved. This program and the accompanying materials # All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License 2.0 # are made available under the terms of the Eclipse Public License 2.0
# which accompanies this distribution, and is available at # which accompanies this distribution, and is available at
# https://www.eclipse.org/legal/epl-2.0/ # https://www.eclipse.org/legal/epl-2.0/
# #
# Contributors: # Contributors:
# Michael Scharf (Wind River) - initial API and implementation # Michael Scharf (Wind River) - initial API and implementation
# Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license # Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license
################################################################################ ################################################################################
bin.includes = feature.xml,\ bin.includes = feature.xml,\
feature.properties,\ feature.properties,\

View file

@ -6,7 +6,7 @@
# https://www.eclipse.org/legal/epl-2.0/ # https://www.eclipse.org/legal/epl-2.0/
# #
# SPDX-License-Identifier: EPL-2.0 # SPDX-License-Identifier: EPL-2.0
# #
# Contributors: # Contributors:
# Martin Oberhuber (Wind River) - initial API and implementation # Martin Oberhuber (Wind River) - initial API and implementation
############################################################################### ###############################################################################

View file

@ -1,13 +1,13 @@
################################################################################ ################################################################################
# Copyright (c) 2006, 2018 Wind River Systems, Inc. and others. # Copyright (c) 2006, 2018 Wind River Systems, Inc. and others.
# All rights reserved. This program and the accompanying materials # All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License 2.0 # are made available under the terms of the Eclipse Public License 2.0
# which accompanies this distribution, and is available at # which accompanies this distribution, and is available at
# https://www.eclipse.org/legal/epl-2.0/ # https://www.eclipse.org/legal/epl-2.0/
# #
# Contributors: # Contributors:
# Michael Scharf (Wind River) - initial API and implementation # Michael Scharf (Wind River) - initial API and implementation
# Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license # Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license
################################################################################ ################################################################################
bin.includes = feature.xml,\ bin.includes = feature.xml,\
feature.properties feature.properties

View file

@ -6,7 +6,7 @@
# https://www.eclipse.org/legal/epl-2.0/ # https://www.eclipse.org/legal/epl-2.0/
# #
# SPDX-License-Identifier: EPL-2.0 # SPDX-License-Identifier: EPL-2.0
# #
# Contributors: # Contributors:
# Martin Oberhuber (Wind River) - initial API and implementation # Martin Oberhuber (Wind River) - initial API and implementation
############################################################################### ###############################################################################

View file

@ -1,13 +1,13 @@
################################################################################ ################################################################################
# Copyright (c) 2006, 2018 Wind River Systems, Inc. and others. # Copyright (c) 2006, 2018 Wind River Systems, Inc. and others.
# All rights reserved. This program and the accompanying materials # All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License 2.0 # are made available under the terms of the Eclipse Public License 2.0
# which accompanies this distribution, and is available at # which accompanies this distribution, and is available at
# https://www.eclipse.org/legal/epl-2.0/ # https://www.eclipse.org/legal/epl-2.0/
# #
# Contributors: # Contributors:
# Michael Scharf (Wind River) - initial API and implementation # Michael Scharf (Wind River) - initial API and implementation
# Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license # Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license
################################################################################ ################################################################################
bin.includes = feature.xml,\ bin.includes = feature.xml,\
feature.properties,\ feature.properties,\

View file

@ -6,7 +6,7 @@
# https://www.eclipse.org/legal/epl-2.0/ # https://www.eclipse.org/legal/epl-2.0/
# #
# SPDX-License-Identifier: EPL-2.0 # SPDX-License-Identifier: EPL-2.0
# #
# Contributors: # Contributors:
# Martin Oberhuber (Wind River) - initial API and implementation # Martin Oberhuber (Wind River) - initial API and implementation
############################################################################### ###############################################################################

View file

@ -69,13 +69,13 @@ public class Activator extends AbstractUIPlugin {
} }
@Override @Override
public void start(BundleContext context) throws Exception { public void start(BundleContext context) throws Exception {
super.start(context); super.start(context);
plugin = this; plugin = this;
} }
@Override @Override
public void stop(BundleContext context) throws Exception { public void stop(BundleContext context) throws Exception {
plugin = null; plugin = null;
super.stop(context); super.stop(context);
} }
@ -114,7 +114,8 @@ public class Activator extends AbstractUIPlugin {
if (exception instanceof CoreException) { if (exception instanceof CoreException) {
log(((CoreException) exception).getStatus()); log(((CoreException) exception).getStatus());
} else { } else {
log(new Status(IStatus.ERROR, plugin.getBundle().getSymbolicName(), exception.getLocalizedMessage(), exception)); log(new Status(IStatus.ERROR, plugin.getBundle().getSymbolicName(), exception.getLocalizedMessage(),
exception));
} }
} }

View file

@ -246,13 +246,10 @@ public class SerialSettingsPage extends AbstractSettingsPage {
settings.setStopBits(StopBits.fromStringIndex(stopBitsCombo.getSelectionIndex())); settings.setStopBits(StopBits.fromStringIndex(stopBitsCombo.getSelectionIndex()));
dialogSettings.put(SerialSettings.PORT_NAME_ATTR, portCombo.getText()); dialogSettings.put(SerialSettings.PORT_NAME_ATTR, portCombo.getText());
dialogSettings.put(SerialSettings.BAUD_RATE_ATTR, dialogSettings.put(SerialSettings.BAUD_RATE_ATTR, BaudRate.getStrings()[baudRateCombo.getSelectionIndex()]);
BaudRate.getStrings()[baudRateCombo.getSelectionIndex()]); dialogSettings.put(SerialSettings.BYTE_SIZE_ATTR, ByteSize.getStrings()[byteSizeCombo.getSelectionIndex()]);
dialogSettings.put(SerialSettings.BYTE_SIZE_ATTR,
ByteSize.getStrings()[byteSizeCombo.getSelectionIndex()]);
dialogSettings.put(SerialSettings.PARITY_ATTR, Parity.getStrings()[parityCombo.getSelectionIndex()]); dialogSettings.put(SerialSettings.PARITY_ATTR, Parity.getStrings()[parityCombo.getSelectionIndex()]);
dialogSettings.put(SerialSettings.STOP_BITS_ATTR, dialogSettings.put(SerialSettings.STOP_BITS_ATTR, StopBits.getStrings()[stopBitsCombo.getSelectionIndex()]);
StopBits.getStrings()[stopBitsCombo.getSelectionIndex()]);
} }
@Override @Override

View file

@ -81,7 +81,7 @@ public class UIPlugin extends AbstractUIPlugin {
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/ */
@Override @Override
public void start(BundleContext context) throws Exception { public void start(BundleContext context) throws Exception {
super.start(context); super.start(context);
plugin = this; plugin = this;
} }
@ -90,7 +90,7 @@ public class UIPlugin extends AbstractUIPlugin {
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/ */
@Override @Override
public void stop(BundleContext context) throws Exception { public void stop(BundleContext context) throws Exception {
plugin = null; plugin = null;
scopedPreferences = null; scopedPreferences = null;
traceHandler = null; traceHandler = null;

View file

@ -44,18 +44,18 @@ public class LocalWizardConfigurationPanel extends AbstractExtendedConfiguration
* *
* @param container The configuration panel container or <code>null</code>. * @param container The configuration panel container or <code>null</code>.
*/ */
public LocalWizardConfigurationPanel(IConfigurationPanelContainer container) { public LocalWizardConfigurationPanel(IConfigurationPanelContainer container) {
super(container); super(container);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setupPanel(org.eclipse.swt.widgets.Composite) * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setupPanel(org.eclipse.swt.widgets.Composite)
*/ */
@Override @Override
public void setupPanel(Composite parent) { public void setupPanel(Composite parent) {
Composite panel = new Composite(parent, SWT.NONE); Composite panel = new Composite(parent, SWT.NONE);
panel.setLayout(new GridLayout()); panel.setLayout(new GridLayout());
panel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); panel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
// Create the encoding selection combo // Create the encoding selection combo
createEncodingUI(panel, false); createEncodingUI(panel, false);
@ -66,13 +66,14 @@ public class LocalWizardConfigurationPanel extends AbstractExtendedConfiguration
setEncoding("UTF-8"); //$NON-NLS-1$ setEncoding("UTF-8"); //$NON-NLS-1$
} else { } else {
String encoding = WorkbenchEncoding.getWorkbenchDefaultEncoding(); String encoding = WorkbenchEncoding.getWorkbenchDefaultEncoding();
if (encoding != null && !"".equals(encoding)) setEncoding(encoding); //$NON-NLS-1$ if (encoding != null && !"".equals(encoding)) //$NON-NLS-1$
setEncoding(encoding);
} }
// Fill the rest of the panel with a label to be able to // Fill the rest of the panel with a label to be able to
// set a height and width hint for the dialog // set a height and width hint for the dialog
Label label = new Label(panel, SWT.HORIZONTAL); Label label = new Label(panel, SWT.HORIZONTAL);
GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true); GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
layoutData.widthHint = 300; layoutData.widthHint = 300;
layoutData.heightHint = 80; layoutData.heightHint = 80;
label.setLayoutData(layoutData); label.setLayoutData(layoutData);
@ -82,36 +83,39 @@ public class LocalWizardConfigurationPanel extends AbstractExtendedConfiguration
resource = getSelectionResource(); resource = getSelectionResource();
} }
setControl(panel); setControl(panel);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#setupData(java.util.Map) * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#setupData(java.util.Map)
*/ */
@Override @Override
public void setupData(Map<String, Object> data) { public void setupData(Map<String, Object> data) {
if (data == null) return; if (data == null)
return;
String value = (String)data.get(ITerminalsConnectorConstants.PROP_ENCODING); String value = (String) data.get(ITerminalsConnectorConstants.PROP_ENCODING);
if (value != null) setEncoding(value); if (value != null)
} setEncoding(value);
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#extractData(java.util.Map) * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#extractData(java.util.Map)
*/ */
@Override @Override
public void extractData(Map<String, Object> data) { public void extractData(Map<String, Object> data) {
// set the terminal connector id for local terminal // set the terminal connector id for local terminal
data.put(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID, "org.eclipse.tm.terminal.connector.local.LocalConnector"); //$NON-NLS-1$ data.put(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID,
"org.eclipse.tm.terminal.connector.local.LocalConnector"); //$NON-NLS-1$
// Store the encoding // Store the encoding
data.put(ITerminalsConnectorConstants.PROP_ENCODING, getEncoding()); data.put(ITerminalsConnectorConstants.PROP_ENCODING, getEncoding());
Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$ Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$
if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) { if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
// if we have a IResource selection use the location for working directory // if we have a IResource selection use the location for working directory
if (resource instanceof org.eclipse.core.resources.IResource){ if (resource instanceof org.eclipse.core.resources.IResource) {
String dir = ((org.eclipse.core.resources.IResource)resource).getProject().getLocation().toString(); String dir = ((org.eclipse.core.resources.IResource) resource).getProject().getLocation().toString();
data.put(ITerminalsConnectorConstants.PROP_PROCESS_WORKING_DIR, dir); data.put(ITerminalsConnectorConstants.PROP_PROCESS_WORKING_DIR, dir);
} }
} }
@ -121,21 +125,21 @@ public class LocalWizardConfigurationPanel extends AbstractExtendedConfiguration
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#fillSettingsForHost(java.lang.String) * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#fillSettingsForHost(java.lang.String)
*/ */
@Override @Override
protected void fillSettingsForHost(String host){ protected void fillSettingsForHost(String host) {
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#saveSettingsForHost(boolean) * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#saveSettingsForHost(boolean)
*/ */
@Override @Override
protected void saveSettingsForHost(boolean add){ protected void saveSettingsForHost(boolean add) {
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#isValid() * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#isValid()
*/ */
@Override @Override
public boolean isValid(){ public boolean isValid() {
return true; return true;
} }
@ -143,16 +147,16 @@ public class LocalWizardConfigurationPanel extends AbstractExtendedConfiguration
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#doSaveWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String) * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#doSaveWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String)
*/ */
@Override @Override
public void doSaveWidgetValues(IDialogSettings settings, String idPrefix) { public void doSaveWidgetValues(IDialogSettings settings, String idPrefix) {
// Save the encodings widget values // Save the encodings widget values
doSaveEncodingsWidgetValues(settings, idPrefix); doSaveEncodingsWidgetValues(settings, idPrefix);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#doRestoreWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String) * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#doRestoreWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String)
*/ */
@Override @Override
public void doRestoreWidgetValues(IDialogSettings settings, String idPrefix) { public void doRestoreWidgetValues(IDialogSettings settings, String idPrefix) {
// Restore the encodings widget values // Restore the encodings widget values
doRestoreEncodingsWidgetValues(settings, idPrefix); doRestoreEncodingsWidgetValues(settings, idPrefix);
} }
@ -161,17 +165,17 @@ public class LocalWizardConfigurationPanel extends AbstractExtendedConfiguration
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#getHostFromSettings() * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#getHostFromSettings()
*/ */
@Override @Override
protected String getHostFromSettings() { protected String getHostFromSettings() {
return null; return null;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#isWithHostList() * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#isWithHostList()
*/ */
@Override @Override
public boolean isWithHostList() { public boolean isWithHostList() {
return false; return false;
} }
/** /**
* Returns the IResource from the current selection * Returns the IResource from the current selection
@ -184,11 +188,12 @@ public class LocalWizardConfigurationPanel extends AbstractExtendedConfiguration
if (selection instanceof IStructuredSelection && !selection.isEmpty()) { if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
Object element = ((IStructuredSelection) selection).getFirstElement(); Object element = ((IStructuredSelection) selection).getFirstElement();
if (element instanceof org.eclipse.core.resources.IResource){ if (element instanceof org.eclipse.core.resources.IResource) {
return ((org.eclipse.core.resources.IResource)element); return ((org.eclipse.core.resources.IResource) element);
} }
if (element instanceof IAdaptable) { if (element instanceof IAdaptable) {
return (org.eclipse.core.resources.IResource) ((IAdaptable) element).getAdapter(org.eclipse.core.resources.IResource.class); return (org.eclipse.core.resources.IResource) ((IAdaptable) element)
.getAdapter(org.eclipse.core.resources.IResource.class);
} }
} }
return null; return null;

View file

@ -104,7 +104,8 @@ public class LocalLauncherDelegate extends AbstractLauncherDelegate {
} else { } else {
encoding = WorkbenchEncoding.getWorkbenchDefaultEncoding(); encoding = WorkbenchEncoding.getWorkbenchDefaultEncoding();
} }
if (encoding != null && !"".equals(encoding)) properties.put(ITerminalsConnectorConstants.PROP_ENCODING, encoding); //$NON-NLS-1$ if (encoding != null && !"".equals(encoding)) //$NON-NLS-1$
properties.put(ITerminalsConnectorConstants.PROP_ENCODING, encoding);
} }
// For local terminals, force a new terminal tab each time it is launched, // For local terminals, force a new terminal tab each time it is launched,
@ -115,9 +116,11 @@ public class LocalLauncherDelegate extends AbstractLauncherDelegate {
// Initialize the local terminal working directory. // Initialize the local terminal working directory.
// By default, start the local terminal in the users home directory // By default, start the local terminal in the users home directory
String initialCwd = org.eclipse.tm.terminal.view.ui.activator.UIPlugin.getScopedPreferences().getString(IPreferenceKeys.PREF_LOCAL_TERMINAL_INITIAL_CWD); String initialCwd = org.eclipse.tm.terminal.view.ui.activator.UIPlugin.getScopedPreferences()
.getString(IPreferenceKeys.PREF_LOCAL_TERMINAL_INITIAL_CWD);
String cwd = null; String cwd = null;
if (initialCwd == null || IPreferenceKeys.PREF_INITIAL_CWD_USER_HOME.equals(initialCwd) || "".equals(initialCwd.trim())) { //$NON-NLS-1$ if (initialCwd == null || IPreferenceKeys.PREF_INITIAL_CWD_USER_HOME.equals(initialCwd)
|| "".equals(initialCwd.trim())) { //$NON-NLS-1$
cwd = System.getProperty("user.home"); //$NON-NLS-1$ cwd = System.getProperty("user.home"); //$NON-NLS-1$
} else if (IPreferenceKeys.PREF_INITIAL_CWD_ECLIPSE_HOME.equals(initialCwd)) { } else if (IPreferenceKeys.PREF_INITIAL_CWD_ECLIPSE_HOME.equals(initialCwd)) {
String eclipseHomeLocation = System.getProperty("eclipse.home.location"); //$NON-NLS-1$ String eclipseHomeLocation = System.getProperty("eclipse.home.location"); //$NON-NLS-1$
@ -126,16 +129,18 @@ public class LocalLauncherDelegate extends AbstractLauncherDelegate {
URI uri = URIUtil.fromString(eclipseHomeLocation); URI uri = URIUtil.fromString(eclipseHomeLocation);
File f = URIUtil.toFile(uri); File f = URIUtil.toFile(uri);
cwd = f.getAbsolutePath(); cwd = f.getAbsolutePath();
} catch (URISyntaxException ex) { /* ignored on purpose */ } } catch (URISyntaxException ex) {
/* ignored on purpose */ }
} }
} else if (IPreferenceKeys.PREF_INITIAL_CWD_ECLIPSE_WS.equals(initialCwd)) { } else if (IPreferenceKeys.PREF_INITIAL_CWD_ECLIPSE_WS.equals(initialCwd)) {
Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$ Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$
if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) { if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
if (org.eclipse.core.resources.ResourcesPlugin.getWorkspace() != null if (org.eclipse.core.resources.ResourcesPlugin.getWorkspace() != null
&& org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot() != null && org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot() != null
&& org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot().getLocation() != null) { && org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot().getLocation() != null) {
cwd = org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot().getLocation().toOSString(); cwd = org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot().getLocation()
} .toOSString();
}
} }
} else { } else {
try { try {
@ -161,28 +166,39 @@ public class LocalLauncherDelegate extends AbstractLauncherDelegate {
// If the current selection resolved to an folder, default the working directory // If the current selection resolved to an folder, default the working directory
// to that folder and update the terminal title // to that folder and update the terminal title
ISelectionService service = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService(); ISelectionService service = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService();
if ((service != null && service.getSelection() != null) || properties.containsKey(ITerminalsConnectorConstants.PROP_SELECTION)) { if ((service != null && service.getSelection() != null)
ISelection selection = (ISelection)properties.get(ITerminalsConnectorConstants.PROP_SELECTION); || properties.containsKey(ITerminalsConnectorConstants.PROP_SELECTION)) {
if (selection == null) selection = service.getSelection(); ISelection selection = (ISelection) properties.get(ITerminalsConnectorConstants.PROP_SELECTION);
if (selection == null)
selection = service.getSelection();
if (selection instanceof IStructuredSelection && !selection.isEmpty()) { if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
String dir = null; String dir = null;
Iterator<?> iter = ((IStructuredSelection)selection).iterator(); Iterator<?> iter = ((IStructuredSelection) selection).iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
Object element = iter.next(); Object element = iter.next();
Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$ Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$
if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) { if (bundle != null && bundle.getState() != Bundle.UNINSTALLED
&& bundle.getState() != Bundle.STOPPING) {
// If the element is not an IResource, try to adapt to IResource // If the element is not an IResource, try to adapt to IResource
if (!(element instanceof org.eclipse.core.resources.IResource)) { if (!(element instanceof org.eclipse.core.resources.IResource)) {
Object adapted = element instanceof IAdaptable ? ((IAdaptable)element).getAdapter(org.eclipse.core.resources.IResource.class) : null; Object adapted = element instanceof IAdaptable
if (adapted == null) adapted = Platform.getAdapterManager().getAdapter(element, org.eclipse.core.resources.IResource.class); ? ((IAdaptable) element).getAdapter(org.eclipse.core.resources.IResource.class)
if (adapted != null) element = adapted; : null;
if (adapted == null)
adapted = Platform.getAdapterManager().getAdapter(element,
org.eclipse.core.resources.IResource.class);
if (adapted != null)
element = adapted;
} }
if (element instanceof org.eclipse.core.resources.IResource && ((org.eclipse.core.resources.IResource)element).exists()) { if (element instanceof org.eclipse.core.resources.IResource
IPath location = ((org.eclipse.core.resources.IResource)element).getLocation(); && ((org.eclipse.core.resources.IResource) element).exists()) {
if (location == null) continue; IPath location = ((org.eclipse.core.resources.IResource) element).getLocation();
if (location.toFile().isFile()) location = location.removeLastSegments(1); if (location == null)
continue;
if (location.toFile().isFile())
location = location.removeLastSegments(1);
if (location.toFile().isDirectory() && location.toFile().canRead()) { if (location.toFile().isDirectory() && location.toFile().canRead()) {
dir = location.toFile().getAbsolutePath(); dir = location.toFile().getAbsolutePath();
break; break;
@ -190,7 +206,7 @@ public class LocalLauncherDelegate extends AbstractLauncherDelegate {
} }
if (element instanceof IPath || element instanceof File) { if (element instanceof IPath || element instanceof File) {
File f = element instanceof IPath ? ((IPath)element).toFile() : (File)element; File f = element instanceof IPath ? ((IPath) element).toFile() : (File) element;
if (f.isDirectory() && f.canRead()) { if (f.isDirectory() && f.canRead()) {
dir = f.getAbsolutePath(); dir = f.getAbsolutePath();
break; break;
@ -225,14 +241,16 @@ public class LocalLauncherDelegate extends AbstractLauncherDelegate {
private String getTerminalTitle(Map<String, Object> properties) { private String getTerminalTitle(Map<String, Object> properties) {
// Try to see if the user set a title explicitly via the properties map. // Try to see if the user set a title explicitly via the properties map.
String title = getDefaultTerminalTitle(properties); String title = getDefaultTerminalTitle(properties);
if (title != null) return title; if (title != null)
return title;
try { try {
String hostname = InetAddress.getLocalHost().getHostName(); String hostname = InetAddress.getLocalHost().getHostName();
if (hostname != null && !"".equals(hostname.trim())) { //$NON-NLS-1$ if (hostname != null && !"".equals(hostname.trim())) { //$NON-NLS-1$
return hostname; return hostname;
} }
} catch (UnknownHostException e) { /* ignored on purpose */ } } catch (UnknownHostException e) {
/* ignored on purpose */ }
return "Local"; //$NON-NLS-1$ return "Local"; //$NON-NLS-1$
} }
@ -245,7 +263,7 @@ public class LocalLauncherDelegate extends AbstractLauncherDelegate {
if (IMementoHandler.class.equals(adapter)) { if (IMementoHandler.class.equals(adapter)) {
return mementoHandler; return mementoHandler;
} }
return super.getAdapter(adapter); return super.getAdapter(adapter);
} }
/** /**
@ -264,7 +282,8 @@ public class LocalLauncherDelegate extends AbstractLauncherDelegate {
} }
} }
if (shell == null) { if (shell == null) {
shell = org.eclipse.tm.terminal.view.ui.activator.UIPlugin.getScopedPreferences().getString(IPreferenceKeys.PREF_LOCAL_TERMINAL_DEFAULT_SHELL_UNIX); shell = org.eclipse.tm.terminal.view.ui.activator.UIPlugin.getScopedPreferences()
.getString(IPreferenceKeys.PREF_LOCAL_TERMINAL_DEFAULT_SHELL_UNIX);
if (shell == null || "".equals(shell)) { //$NON-NLS-1$ if (shell == null || "".equals(shell)) { //$NON-NLS-1$
if (System.getenv("SHELL") != null && !"".equals(System.getenv("SHELL").trim())) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ if (System.getenv("SHELL") != null && !"".equals(System.getenv("SHELL").trim())) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
shell = System.getenv("SHELL").trim(); //$NON-NLS-1$ shell = System.getenv("SHELL").trim(); //$NON-NLS-1$
@ -280,13 +299,14 @@ public class LocalLauncherDelegate extends AbstractLauncherDelegate {
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#createTerminalConnector(java.util.Map) * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#createTerminalConnector(java.util.Map)
*/ */
@Override @Override
public ITerminalConnector createTerminalConnector(Map<String, Object> properties) { public ITerminalConnector createTerminalConnector(Map<String, Object> properties) {
Assert.isNotNull(properties); Assert.isNotNull(properties);
// Check for the terminal connector id // Check for the terminal connector id
String connectorId = (String)properties.get(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID); String connectorId = (String) properties.get(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID);
if (connectorId == null) connectorId = "org.eclipse.tm.terminal.connector.local.LocalConnector"; //$NON-NLS-1$ if (connectorId == null)
connectorId = "org.eclipse.tm.terminal.connector.local.LocalConnector"; //$NON-NLS-1$
// Extract the process properties using defaults // Extract the process properties using defaults
String image; String image;
@ -295,17 +315,19 @@ public class LocalLauncherDelegate extends AbstractLauncherDelegate {
File defaultShell = defaultShell(); File defaultShell = defaultShell();
image = defaultShell.isAbsolute() ? defaultShell.getAbsolutePath() : defaultShell.getPath(); image = defaultShell.isAbsolute() ? defaultShell.getAbsolutePath() : defaultShell.getPath();
} else { } else {
image = (String)properties.get(ITerminalsConnectorConstants.PROP_PROCESS_PATH); image = (String) properties.get(ITerminalsConnectorConstants.PROP_PROCESS_PATH);
} }
String arguments = (String)properties.get(ITerminalsConnectorConstants.PROP_PROCESS_ARGS); String arguments = (String) properties.get(ITerminalsConnectorConstants.PROP_PROCESS_ARGS);
if (arguments == null && !Platform.OS_WIN32.equals(Platform.getOS())) { if (arguments == null && !Platform.OS_WIN32.equals(Platform.getOS())) {
arguments = org.eclipse.tm.terminal.view.ui.activator.UIPlugin.getScopedPreferences().getString(IPreferenceKeys.PREF_LOCAL_TERMINAL_DEFAULT_SHELL_UNIX_ARGS); arguments = org.eclipse.tm.terminal.view.ui.activator.UIPlugin.getScopedPreferences()
.getString(IPreferenceKeys.PREF_LOCAL_TERMINAL_DEFAULT_SHELL_UNIX_ARGS);
} }
// Determine if a PTY will be used // Determine if a PTY will be used
boolean isUsingPTY = (properties.get(ITerminalsConnectorConstants.PROP_PROCESS_OBJ) == null && PTY.isSupported(PTY.Mode.TERMINAL)) boolean isUsingPTY = (properties.get(ITerminalsConnectorConstants.PROP_PROCESS_OBJ) == null
|| properties.get(ITerminalsConnectorConstants.PROP_PTY_OBJ) instanceof PTY; && PTY.isSupported(PTY.Mode.TERMINAL))
|| properties.get(ITerminalsConnectorConstants.PROP_PTY_OBJ) instanceof PTY;
boolean localEcho = false; boolean localEcho = false;
if (!properties.containsKey(ITerminalsConnectorConstants.PROP_LOCAL_ECHO) if (!properties.containsKey(ITerminalsConnectorConstants.PROP_LOCAL_ECHO)
@ -315,7 +337,7 @@ public class LocalLauncherDelegate extends AbstractLauncherDelegate {
localEcho = !isUsingPTY; localEcho = !isUsingPTY;
} }
} else { } else {
localEcho = ((Boolean)properties.get(ITerminalsConnectorConstants.PROP_LOCAL_ECHO)).booleanValue(); localEcho = ((Boolean) properties.get(ITerminalsConnectorConstants.PROP_LOCAL_ECHO)).booleanValue();
} }
String lineSeparator = null; String lineSeparator = null;
@ -323,28 +345,32 @@ public class LocalLauncherDelegate extends AbstractLauncherDelegate {
|| !(properties.get(ITerminalsConnectorConstants.PROP_LINE_SEPARATOR) instanceof String)) { || !(properties.get(ITerminalsConnectorConstants.PROP_LINE_SEPARATOR) instanceof String)) {
// No line separator will be set if a PTY is used // No line separator will be set if a PTY is used
if (!isUsingPTY) { if (!isUsingPTY) {
lineSeparator = Platform.OS_WIN32.equals(Platform.getOS()) ? ILineSeparatorConstants.LINE_SEPARATOR_CRLF : ILineSeparatorConstants.LINE_SEPARATOR_LF; lineSeparator = Platform.OS_WIN32.equals(Platform.getOS()) ? ILineSeparatorConstants.LINE_SEPARATOR_CRLF
: ILineSeparatorConstants.LINE_SEPARATOR_LF;
} }
} else { } else {
lineSeparator = (String)properties.get(ITerminalsConnectorConstants.PROP_LINE_SEPARATOR); lineSeparator = (String) properties.get(ITerminalsConnectorConstants.PROP_LINE_SEPARATOR);
} }
Process process = (Process)properties.get(ITerminalsConnectorConstants.PROP_PROCESS_OBJ); Process process = (Process) properties.get(ITerminalsConnectorConstants.PROP_PROCESS_OBJ);
PTY pty = (PTY)properties.get(ITerminalsConnectorConstants.PROP_PTY_OBJ); PTY pty = (PTY) properties.get(ITerminalsConnectorConstants.PROP_PTY_OBJ);
ITerminalServiceOutputStreamMonitorListener[] stdoutListeners = (ITerminalServiceOutputStreamMonitorListener[])properties.get(ITerminalsConnectorConstants.PROP_STDOUT_LISTENERS); ITerminalServiceOutputStreamMonitorListener[] stdoutListeners = (ITerminalServiceOutputStreamMonitorListener[]) properties
ITerminalServiceOutputStreamMonitorListener[] stderrListeners = (ITerminalServiceOutputStreamMonitorListener[])properties.get(ITerminalsConnectorConstants.PROP_STDERR_LISTENERS); .get(ITerminalsConnectorConstants.PROP_STDOUT_LISTENERS);
String workingDir = (String)properties.get(ITerminalsConnectorConstants.PROP_PROCESS_WORKING_DIR); ITerminalServiceOutputStreamMonitorListener[] stderrListeners = (ITerminalServiceOutputStreamMonitorListener[]) properties
.get(ITerminalsConnectorConstants.PROP_STDERR_LISTENERS);
String workingDir = (String) properties.get(ITerminalsConnectorConstants.PROP_PROCESS_WORKING_DIR);
String[] envp = null; String[] envp = null;
if (properties.containsKey(ITerminalsConnectorConstants.PROP_PROCESS_ENVIRONMENT) && if (properties.containsKey(ITerminalsConnectorConstants.PROP_PROCESS_ENVIRONMENT)
properties.get(ITerminalsConnectorConstants.PROP_PROCESS_ENVIRONMENT) != null && && properties.get(ITerminalsConnectorConstants.PROP_PROCESS_ENVIRONMENT) != null
properties.get(ITerminalsConnectorConstants.PROP_PROCESS_ENVIRONMENT) instanceof String[]){ && properties.get(ITerminalsConnectorConstants.PROP_PROCESS_ENVIRONMENT) instanceof String[]) {
envp = (String[])properties.get(ITerminalsConnectorConstants.PROP_PROCESS_ENVIRONMENT); envp = (String[]) properties.get(ITerminalsConnectorConstants.PROP_PROCESS_ENVIRONMENT);
} }
// Set the ECLIPSE_HOME and ECLIPSE_WORKSPACE environment variables // Set the ECLIPSE_HOME and ECLIPSE_WORKSPACE environment variables
List<String> envpList = new ArrayList<String>(); List<String> envpList = new ArrayList<String>();
if (envp != null) envpList.addAll(Arrays.asList(envp)); if (envp != null)
envpList.addAll(Arrays.asList(envp));
// ECLIPSE_HOME // ECLIPSE_HOME
String eclipseHomeLocation = System.getProperty("eclipse.home.location"); //$NON-NLS-1$ String eclipseHomeLocation = System.getProperty("eclipse.home.location"); //$NON-NLS-1$
@ -353,21 +379,23 @@ public class LocalLauncherDelegate extends AbstractLauncherDelegate {
URI uri = URIUtil.fromString(eclipseHomeLocation); URI uri = URIUtil.fromString(eclipseHomeLocation);
File f = URIUtil.toFile(uri); File f = URIUtil.toFile(uri);
envpList.add("ECLIPSE_HOME=" + f.getAbsolutePath()); //$NON-NLS-1$ envpList.add("ECLIPSE_HOME=" + f.getAbsolutePath()); //$NON-NLS-1$
} catch (URISyntaxException e) { /* ignored on purpose */ } } catch (URISyntaxException e) {
/* ignored on purpose */ }
} }
// ECLIPSE_WORKSPACE // ECLIPSE_WORKSPACE
Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$ Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$
if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) { if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
if (org.eclipse.core.resources.ResourcesPlugin.getWorkspace() != null if (org.eclipse.core.resources.ResourcesPlugin.getWorkspace() != null
&& org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot() != null && org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot() != null
&& org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot().getLocation() != null) { && org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot().getLocation() != null) {
envpList.add("ECLIPSE_WORKSPACE=" + org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot().getLocation().toOSString()); //$NON-NLS-1$ envpList.add("ECLIPSE_WORKSPACE=" + org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot() //$NON-NLS-1$
} .getLocation().toOSString());
}
} }
// Convert back into a string array // Convert back into a string array
envp = envpList.toArray(new String[envpList.size()]); envp = envpList.toArray(new String[envpList.size()]);
Assert.isTrue(image != null || process != null); Assert.isTrue(image != null || process != null);
@ -389,7 +417,8 @@ public class LocalLauncherDelegate extends AbstractLauncherDelegate {
if (properties.containsKey(ITerminalsConnectorConstants.PROP_PROCESS_MERGE_ENVIRONMENT)) { if (properties.containsKey(ITerminalsConnectorConstants.PROP_PROCESS_MERGE_ENVIRONMENT)) {
Object value = properties.get(ITerminalsConnectorConstants.PROP_PROCESS_MERGE_ENVIRONMENT); Object value = properties.get(ITerminalsConnectorConstants.PROP_PROCESS_MERGE_ENVIRONMENT);
processSettings.setMergeWithNativeEnvironment(value instanceof Boolean ? ((Boolean)value).booleanValue() : false); processSettings
.setMergeWithNativeEnvironment(value instanceof Boolean ? ((Boolean) value).booleanValue() : false);
} }
// And save the settings to the store // And save the settings to the store

View file

@ -46,10 +46,12 @@ public class LocalLauncherHandler extends AbstractHandler {
if (!(selection instanceof IStructuredSelection)) { if (!(selection instanceof IStructuredSelection)) {
IEditorInput input = HandlerUtil.getActiveEditorInput(event); IEditorInput input = HandlerUtil.getActiveEditorInput(event);
if (input instanceof IPathEditorInput) { if (input instanceof IPathEditorInput) {
IPath path = ((IPathEditorInput)input).getPath(); IPath path = ((IPathEditorInput) input).getPath();
if (path != null) { if (path != null) {
if (path.toFile().isFile()) path = path.removeLastSegments(1); if (path.toFile().isFile())
if (path.toFile().isDirectory() && path.toFile().canRead()) selection = new StructuredSelection(path); path = path.removeLastSegments(1);
if (path.toFile().isDirectory() && path.toFile().canRead())
selection = new StructuredSelection(path);
} }
} }
} }

View file

@ -113,7 +113,7 @@ public class ProcessConnector extends AbstractStreamsConnector {
pty = new PTY(PTY.Mode.TERMINAL); pty = new PTY(PTY.Mode.TERMINAL);
// Initialize the terminal size // Initialize the terminal size
VT100Emulator text = ((VT100TerminalControl)control).getTerminalText(); VT100Emulator text = ((VT100TerminalControl) control).getTerminalText();
text.fontChanged(); text.fontChanged();
} catch (IOException e) { } catch (IOException e) {
// PTY not supported // PTY not supported
@ -129,13 +129,13 @@ public class ProcessConnector extends AbstractStreamsConnector {
command.append(arguments.trim()); command.append(arguments.trim());
} }
File workingDir =null; File workingDir = null;
if (settings.getWorkingDir()!=null){ if (settings.getWorkingDir() != null) {
workingDir = new File(settings.getWorkingDir()); workingDir = new File(settings.getWorkingDir());
} }
String[] envp = null; String[] envp = null;
if (settings.getEnvironment()!=null){ if (settings.getEnvironment() != null) {
envp = settings.getEnvironment(); envp = settings.getEnvironment();
} }
@ -165,7 +165,8 @@ public class ProcessConnector extends AbstractStreamsConnector {
} }
// Execute the process // Execute the process
process = ProcessFactory.getFactory().exec(argv.toArray(new String[argv.size()]), envp, workingDir, pty); process = ProcessFactory.getFactory().exec(argv.toArray(new String[argv.size()]), envp, workingDir,
pty);
} else { } else {
// No PTY -> just execute via the standard Java Runtime implementation. // No PTY -> just execute via the standard Java Runtime implementation.
process = Runtime.getRuntime().exec(command.toString(), envp, workingDir); process = Runtime.getRuntime().exec(command.toString(), envp, workingDir);
@ -177,11 +178,9 @@ public class ProcessConnector extends AbstractStreamsConnector {
lineSeparator = System.getProperty("line.separator"); //$NON-NLS-1$ lineSeparator = System.getProperty("line.separator"); //$NON-NLS-1$
if ("\r".equals(lineSeparator)) { //$NON-NLS-1$ if ("\r".equals(lineSeparator)) { //$NON-NLS-1$
lineSeparator = ILineSeparatorConstants.LINE_SEPARATOR_CR; lineSeparator = ILineSeparatorConstants.LINE_SEPARATOR_CR;
} } else if ("\n".equals(lineSeparator)) { //$NON-NLS-1$
else if ("\n".equals(lineSeparator)) { //$NON-NLS-1$
lineSeparator = ILineSeparatorConstants.LINE_SEPARATOR_LF; lineSeparator = ILineSeparatorConstants.LINE_SEPARATOR_LF;
} } else {
else {
lineSeparator = ILineSeparatorConstants.LINE_SEPARATOR_CRLF; lineSeparator = ILineSeparatorConstants.LINE_SEPARATOR_CRLF;
} }
} }
@ -196,7 +195,8 @@ public class ProcessConnector extends AbstractStreamsConnector {
control.setVT100LineWrapping(true); control.setVT100LineWrapping(true);
// connect the streams // connect the streams
connectStreams(control, process.getOutputStream(), process.getInputStream(), (pty == null ? process.getErrorStream() : null), settings.isLocalEcho(), lineSeparator); connectStreams(control, process.getOutputStream(), process.getInputStream(),
(pty == null ? process.getErrorStream() : null), settings.isLocalEcho(), lineSeparator);
// Set the terminal control state to CONNECTED // Set the terminal control state to CONNECTED
control.setState(TerminalState.CONNECTED); control.setState(TerminalState.CONNECTED);
@ -209,7 +209,8 @@ public class ProcessConnector extends AbstractStreamsConnector {
disconnect(); disconnect();
// Lookup the tab item // Lookup the tab item
CTabItem item = ConsoleManager.getInstance().findConsole(control); CTabItem item = ConsoleManager.getInstance().findConsole(control);
if (item != null) item.dispose(); if (item != null)
item.dispose();
// Get the error message from the exception // Get the error message from the exception
String msg = e.getLocalizedMessage() != null ? e.getLocalizedMessage() : ""; //$NON-NLS-1$ String msg = e.getLocalizedMessage() != null ? e.getLocalizedMessage() : ""; //$NON-NLS-1$
Assert.isNotNull(msg); Assert.isNotNull(msg);
@ -225,10 +226,10 @@ public class ProcessConnector extends AbstractStreamsConnector {
private static String getTermVariable(String[] envp) { private static String getTermVariable(String[] envp) {
if (envp != null && !Platform.OS_WIN32.equals(Platform.getOS())) if (envp != null && !Platform.OS_WIN32.equals(Platform.getOS()))
for (String var : envp) for (String var : envp)
if (var.startsWith("TERM=")) //$NON-NLS-1$ if (var.startsWith("TERM=")) //$NON-NLS-1$
return var.substring(5); return var.substring(5);
return "xterm"; //$NON-NLS-1$ return "xterm"; //$NON-NLS-1$
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#isLocalEcho() * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#isLocalEcho()
@ -252,7 +253,10 @@ public class ProcessConnector extends AbstractStreamsConnector {
if (!isWindows) { if (!isWindows) {
// Destroy the process first, except on windows (Bug 465674) // Destroy the process first, except on windows (Bug 465674)
if (process != null) { process.destroy(); process = null; } if (process != null) {
process.destroy();
process = null;
}
} }
// Dispose the streams // Dispose the streams
@ -260,7 +264,10 @@ public class ProcessConnector extends AbstractStreamsConnector {
if (isWindows) { if (isWindows) {
// On Windows destroy the process after closing streams // On Windows destroy the process after closing streams
if (process != null) { process.destroy(); process = null; } if (process != null) {
process.destroy();
process = null;
}
} }
// Set the terminal control state to CLOSED. // Set the terminal control state to CLOSED.
@ -274,7 +281,7 @@ public class ProcessConnector extends AbstractStreamsConnector {
*/ */
@Override @Override
public void setDefaultSettings() { public void setDefaultSettings() {
settings.load(new NullSettingsStore()); settings.load(new NullSettingsStore());
} }
/* (non-Javadoc) /* (non-Javadoc)

View file

@ -72,26 +72,29 @@ public class ProcessLauncherDelegate extends AbstractLauncherDelegate {
Assert.isNotNull(properties); Assert.isNotNull(properties);
// Check for the terminal connector id // Check for the terminal connector id
String connectorId = (String)properties.get(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID); String connectorId = (String) properties.get(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID);
if (connectorId == null) connectorId = "org.eclipse.tm.terminal.connector.process.ProcessConnector"; //$NON-NLS-1$ if (connectorId == null)
connectorId = "org.eclipse.tm.terminal.connector.process.ProcessConnector"; //$NON-NLS-1$
// Extract the process properties // Extract the process properties
String image = (String)properties.get(ITerminalsConnectorConstants.PROP_PROCESS_PATH); String image = (String) properties.get(ITerminalsConnectorConstants.PROP_PROCESS_PATH);
String arguments = (String)properties.get(ITerminalsConnectorConstants.PROP_PROCESS_ARGS); String arguments = (String) properties.get(ITerminalsConnectorConstants.PROP_PROCESS_ARGS);
Process process = (Process)properties.get(ITerminalsConnectorConstants.PROP_PROCESS_OBJ); Process process = (Process) properties.get(ITerminalsConnectorConstants.PROP_PROCESS_OBJ);
PTY pty = (PTY)properties.get(ITerminalsConnectorConstants.PROP_PTY_OBJ); PTY pty = (PTY) properties.get(ITerminalsConnectorConstants.PROP_PTY_OBJ);
Object value = properties.get(ITerminalsConnectorConstants.PROP_LOCAL_ECHO); Object value = properties.get(ITerminalsConnectorConstants.PROP_LOCAL_ECHO);
boolean localEcho = value instanceof Boolean ? ((Boolean)value).booleanValue() : false; boolean localEcho = value instanceof Boolean ? ((Boolean) value).booleanValue() : false;
String lineSeparator = (String)properties.get(ITerminalsConnectorConstants.PROP_LINE_SEPARATOR); String lineSeparator = (String) properties.get(ITerminalsConnectorConstants.PROP_LINE_SEPARATOR);
ITerminalServiceOutputStreamMonitorListener[] stdoutListeners = (ITerminalServiceOutputStreamMonitorListener[])properties.get(ITerminalsConnectorConstants.PROP_STDOUT_LISTENERS); ITerminalServiceOutputStreamMonitorListener[] stdoutListeners = (ITerminalServiceOutputStreamMonitorListener[]) properties
ITerminalServiceOutputStreamMonitorListener[] stderrListeners = (ITerminalServiceOutputStreamMonitorListener[])properties.get(ITerminalsConnectorConstants.PROP_STDERR_LISTENERS); .get(ITerminalsConnectorConstants.PROP_STDOUT_LISTENERS);
String workingDir = (String)properties.get(ITerminalsConnectorConstants.PROP_PROCESS_WORKING_DIR); ITerminalServiceOutputStreamMonitorListener[] stderrListeners = (ITerminalServiceOutputStreamMonitorListener[]) properties
.get(ITerminalsConnectorConstants.PROP_STDERR_LISTENERS);
String workingDir = (String) properties.get(ITerminalsConnectorConstants.PROP_PROCESS_WORKING_DIR);
String[] envp = null; String[] envp = null;
if (properties.containsKey(ITerminalsConnectorConstants.PROP_PROCESS_ENVIRONMENT) && if (properties.containsKey(ITerminalsConnectorConstants.PROP_PROCESS_ENVIRONMENT)
properties.get(ITerminalsConnectorConstants.PROP_PROCESS_ENVIRONMENT) != null && && properties.get(ITerminalsConnectorConstants.PROP_PROCESS_ENVIRONMENT) != null
properties.get(ITerminalsConnectorConstants.PROP_PROCESS_ENVIRONMENT) instanceof String[]){ && properties.get(ITerminalsConnectorConstants.PROP_PROCESS_ENVIRONMENT) instanceof String[]) {
envp = (String[])properties.get(ITerminalsConnectorConstants.PROP_PROCESS_ENVIRONMENT); envp = (String[]) properties.get(ITerminalsConnectorConstants.PROP_PROCESS_ENVIRONMENT);
} }
Assert.isTrue(image != null || process != null); Assert.isTrue(image != null || process != null);
@ -114,7 +117,8 @@ public class ProcessLauncherDelegate extends AbstractLauncherDelegate {
if (properties.containsKey(ITerminalsConnectorConstants.PROP_PROCESS_MERGE_ENVIRONMENT)) { if (properties.containsKey(ITerminalsConnectorConstants.PROP_PROCESS_MERGE_ENVIRONMENT)) {
value = properties.get(ITerminalsConnectorConstants.PROP_PROCESS_MERGE_ENVIRONMENT); value = properties.get(ITerminalsConnectorConstants.PROP_PROCESS_MERGE_ENVIRONMENT);
processSettings.setMergeWithNativeEnvironment(value instanceof Boolean ? ((Boolean)value).booleanValue() : false); processSettings
.setMergeWithNativeEnvironment(value instanceof Boolean ? ((Boolean) value).booleanValue() : false);
} }
// And save the settings to the store // And save the settings to the store

View file

@ -13,7 +13,6 @@ package org.eclipse.tm.terminal.connector.process;
import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.Assert;
/** /**
* Process monitor implementation. * Process monitor implementation.
*/ */
@ -27,82 +26,84 @@ public class ProcessMonitor {
// Flag to mark the monitor disposed // Flag to mark the monitor disposed
private boolean disposed; private boolean disposed;
/**
* Constructor.
*
* @param processConnector The parent process connector. Must not be <code>null</code>.
*/
public ProcessMonitor(ProcessConnector processConnector) {
super();
/** Assert.isNotNull(processConnector);
* Constructor.
*
* @param processConnector The parent process connector. Must not be <code>null</code>.
*/
public ProcessMonitor(ProcessConnector processConnector) {
super();
Assert.isNotNull(processConnector);
this.processConnector = processConnector; this.processConnector = processConnector;
// Query the monitored process for easier access // Query the monitored process for easier access
this.process = processConnector.getProcess(); this.process = processConnector.getProcess();
} }
/** /**
* Dispose the process monitor. * Dispose the process monitor.
*/ */
public void dispose() { public void dispose() {
// Set the disposed status // Set the disposed status
disposed = true; disposed = true;
// Not initialized -> return immediately // Not initialized -> return immediately
if (thread == null) return; if (thread == null)
return;
// Copy the reference // Copy the reference
final Thread oldThread = thread; final Thread oldThread = thread;
// Unlink the monitor from the thread // Unlink the monitor from the thread
thread = null; thread = null;
// And interrupt the writer thread // And interrupt the writer thread
oldThread.interrupt(); oldThread.interrupt();
} }
/** /**
* Starts the terminal output stream monitor. * Starts the terminal output stream monitor.
*/ */
public void startMonitoring() { public void startMonitoring() {
// If already initialized -> return immediately // If already initialized -> return immediately
if (thread != null) return; if (thread != null)
return;
// Create a new runnable which is constantly reading from the stream // Create a new runnable which is constantly reading from the stream
Runnable runnable = new Runnable() { Runnable runnable = new Runnable() {
@Override @Override
public void run() { public void run() {
monitorProcess(); monitorProcess();
} }
}; };
// Create the monitor thread // Create the monitor thread
thread = new Thread(runnable, "Terminal Process Monitor Thread"); //$NON-NLS-1$ thread = new Thread(runnable, "Terminal Process Monitor Thread"); //$NON-NLS-1$
// Configure the monitor thread // Configure the monitor thread
thread.setDaemon(true); thread.setDaemon(true);
// Start the processing // Start the processing
thread.start(); thread.start();
} }
/** /**
* Monitors the associated system process, waiting for it to terminate, * Monitors the associated system process, waiting for it to terminate,
* and notifies the associated process monitor's. * and notifies the associated process monitor's.
*/ */
public void monitorProcess() { public void monitorProcess() {
// If already disposed -> return immediately // If already disposed -> return immediately
if (disposed) return; if (disposed)
return;
try { try {
// Wait for the monitored process to terminate // Wait for the monitored process to terminate
process.waitFor(); process.waitFor();
} catch (InterruptedException ie) { } catch (InterruptedException ie) {
// clear interrupted state // clear interrupted state
Thread.interrupted(); Thread.interrupted();
} finally { } finally {
// Dispose the parent process connector // Dispose the parent process connector
if (!disposed) if (!disposed)
processConnector.disconnect(); processConnector.disconnect();
} }
} }
} }

View file

@ -113,7 +113,8 @@ public class ProcessSettings {
public void setPTY(PTY pty) { public void setPTY(PTY pty) {
this.pty = pty; this.pty = pty;
// If the PTY is set to "null", the local echo will be set to "true" // If the PTY is set to "null", the local echo will be set to "true"
if (pty == null) setLocalEcho(true); if (pty == null)
setLocalEcho(true);
} }
/** /**
@ -265,15 +266,18 @@ public class ProcessSettings {
image = store.get("Path", null);//$NON-NLS-1$ image = store.get("Path", null);//$NON-NLS-1$
arguments = store.get("Arguments", null); //$NON-NLS-1$ arguments = store.get("Arguments", null); //$NON-NLS-1$
localEcho = Boolean.parseBoolean(store.get("LocalEcho", Boolean.FALSE.toString())); //$NON-NLS-1$ localEcho = Boolean.parseBoolean(store.get("LocalEcho", Boolean.FALSE.toString())); //$NON-NLS-1$
mergeWithNativeEnvironment = Boolean.parseBoolean(store.get("MergeWithNativeEnvironment", Boolean.FALSE.toString())); //$NON-NLS-1$ mergeWithNativeEnvironment = Boolean
.parseBoolean(store.get("MergeWithNativeEnvironment", Boolean.FALSE.toString())); //$NON-NLS-1$
lineSeparator = store.get("LineSeparator", null); //$NON-NLS-1$ lineSeparator = store.get("LineSeparator", null); //$NON-NLS-1$
workingDir = store.get("WorkingDir", null); //$NON-NLS-1$ workingDir = store.get("WorkingDir", null); //$NON-NLS-1$
if (store instanceof SettingsStore) { if (store instanceof SettingsStore) {
process = (Process)((SettingsStore)store).getSettings().get("Process"); //$NON-NLS-1$ process = (Process) ((SettingsStore) store).getSettings().get("Process"); //$NON-NLS-1$
pty = (PTY)((SettingsStore)store).getSettings().get("PTY"); //$NON-NLS-1$ pty = (PTY) ((SettingsStore) store).getSettings().get("PTY"); //$NON-NLS-1$
stdoutListeners = (ITerminalServiceOutputStreamMonitorListener[])((SettingsStore)store).getSettings().get("StdOutListeners"); //$NON-NLS-1$ stdoutListeners = (ITerminalServiceOutputStreamMonitorListener[]) ((SettingsStore) store).getSettings()
stderrListeners = (ITerminalServiceOutputStreamMonitorListener[])((SettingsStore)store).getSettings().get("StdErrListeners"); //$NON-NLS-1$ .get("StdOutListeners"); //$NON-NLS-1$
environment = (String[])((SettingsStore)store).getSettings().get("Environment"); //$NON-NLS-1$ stderrListeners = (ITerminalServiceOutputStreamMonitorListener[]) ((SettingsStore) store).getSettings()
.get("StdErrListeners"); //$NON-NLS-1$
environment = (String[]) ((SettingsStore) store).getSettings().get("Environment"); //$NON-NLS-1$
} }
} }
@ -291,11 +295,11 @@ public class ProcessSettings {
store.put("LineSeparator", lineSeparator); //$NON-NLS-1$ store.put("LineSeparator", lineSeparator); //$NON-NLS-1$
store.put("WorkingDir", workingDir); //$NON-NLS-1$ store.put("WorkingDir", workingDir); //$NON-NLS-1$
if (store instanceof SettingsStore) { if (store instanceof SettingsStore) {
((SettingsStore)store).getSettings().put("Process", process); //$NON-NLS-1$ ((SettingsStore) store).getSettings().put("Process", process); //$NON-NLS-1$
((SettingsStore)store).getSettings().put("PTY", pty); //$NON-NLS-1$ ((SettingsStore) store).getSettings().put("PTY", pty); //$NON-NLS-1$
((SettingsStore)store).getSettings().put("StdOutListeners", stdoutListeners); //$NON-NLS-1$ ((SettingsStore) store).getSettings().put("StdOutListeners", stdoutListeners); //$NON-NLS-1$
((SettingsStore)store).getSettings().put("StdErrListeners", stderrListeners); //$NON-NLS-1$ ((SettingsStore) store).getSettings().put("StdErrListeners", stderrListeners); //$NON-NLS-1$
((SettingsStore)store).getSettings().put("Environment", environment); //$NON-NLS-1$ ((SettingsStore) store).getSettings().put("Environment", environment); //$NON-NLS-1$
} }
} }
} }

View file

@ -69,7 +69,8 @@ public class ProcessSettingsPage extends AbstractSettingsPage {
// The entry fields shall be properly aligned // The entry fields shall be properly aligned
Composite panel = new Composite(composite, SWT.NONE); Composite panel = new Composite(composite, SWT.NONE);
GridLayout layout = new GridLayout(2, false); GridLayout layout = new GridLayout(2, false);
layout.marginWidth = 0; layout.marginHeight = 0; layout.marginWidth = 0;
layout.marginHeight = 0;
panel.setLayout(layout); panel.setLayout(layout);
panel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); panel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
@ -80,7 +81,8 @@ public class ProcessSettingsPage extends AbstractSettingsPage {
// Text field and browse button are aligned it their own panel // Text field and browse button are aligned it their own panel
Composite innerPanel = new Composite(panel, SWT.NONE); Composite innerPanel = new Composite(panel, SWT.NONE);
layout = new GridLayout(2, false); layout = new GridLayout(2, false);
layout.marginWidth = 0; layout.marginHeight = 0; layout.marginWidth = 0;
layout.marginHeight = 0;
innerPanel.setLayout(layout); innerPanel.setLayout(layout);
innerPanel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); innerPanel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
@ -127,7 +129,8 @@ public class ProcessSettingsPage extends AbstractSettingsPage {
*/ */
protected void onBrowseButtonSelected(SelectionEvent e) { protected void onBrowseButtonSelected(SelectionEvent e) {
// Determine the shell // Determine the shell
Shell shell = e != null ? e.widget.getDisplay().getActiveShell() : PlatformUI.getWorkbench().getDisplay().getActiveShell(); Shell shell = e != null ? e.widget.getDisplay().getActiveShell()
: PlatformUI.getWorkbench().getDisplay().getActiveShell();
// create a standard file dialog // create a standard file dialog
FileDialog dialog = new FileDialog(shell, SWT.OPEN); FileDialog dialog = new FileDialog(shell, SWT.OPEN);
@ -141,7 +144,8 @@ public class ProcessSettingsPage extends AbstractSettingsPage {
IPath filePath = new Path(selectedFile); IPath filePath = new Path(selectedFile);
// If the selected file points to an directory, use the directory as is // If the selected file points to an directory, use the directory as is
IPath filterPath = filePath.toFile().isDirectory() ? filePath : filePath.removeLastSegments(1); IPath filterPath = filePath.toFile().isDirectory() ? filePath : filePath.removeLastSegments(1);
String filterFileName = filePath.toFile().isDirectory() || !filePath.toFile().exists() ? null : filePath.lastSegment(); String filterFileName = filePath.toFile().isDirectory() || !filePath.toFile().exists() ? null
: filePath.lastSegment();
if (!filterPath.isEmpty()) { if (!filterPath.isEmpty()) {
dialog.setFilterPath(filterPath.toString()); dialog.setFilterPath(filterPath.toString());
@ -152,7 +156,8 @@ public class ProcessSettingsPage extends AbstractSettingsPage {
} else { } else {
Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$ Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$
if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) { if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
dialog.setFilterPath(org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot().getLocation().toOSString()); dialog.setFilterPath(
org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot().getLocation().toOSString());
} }
} }

View file

@ -69,7 +69,7 @@ public class UIPlugin extends AbstractUIPlugin {
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/ */
@Override @Override
public void start(BundleContext context) throws Exception { public void start(BundleContext context) throws Exception {
super.start(context); super.start(context);
plugin = this; plugin = this;
} }
@ -78,7 +78,7 @@ public class UIPlugin extends AbstractUIPlugin {
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/ */
@Override @Override
public void stop(BundleContext context) throws Exception { public void stop(BundleContext context) throws Exception {
plugin = null; plugin = null;
super.stop(context); super.stop(context);
} }

View file

@ -13,7 +13,6 @@ package org.eclipse.tm.terminal.connector.process.help;
import org.eclipse.tm.terminal.connector.process.activator.UIPlugin; import org.eclipse.tm.terminal.connector.process.activator.UIPlugin;
/** /**
* Context help id definitions. * Context help id definitions.
*/ */

View file

@ -1,9 +1,9 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2015, 2018 IBM Corporation and others. * Copyright (c) 2015, 2018 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0 * are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/ * https://www.eclipse.org/legal/epl-2.0/
*******************************************************************************/ *******************************************************************************/
package org.eclipse.tm.terminal.connector.remote; package org.eclipse.tm.terminal.connector.remote;
@ -13,14 +13,14 @@ public interface IRemoteSettings {
/** /**
* Get the connection type ID for the connection (e.g. local, ssh, etc.) * Get the connection type ID for the connection (e.g. local, ssh, etc.)
* *
* @return connection type ID. * @return connection type ID.
*/ */
String getConnectionTypeId(); String getConnectionTypeId();
/** /**
* Get the connection name for the target system. * Get the connection name for the target system.
* *
* @return connection name * @return connection name
*/ */
String getConnectionName(); String getConnectionName();

View file

@ -1,9 +1,9 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2015, 2018 IBM Corporation and others. * Copyright (c) 2015, 2018 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0 * are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/ * https://www.eclipse.org/legal/epl-2.0/
*******************************************************************************/ *******************************************************************************/
package org.eclipse.tm.terminal.connector.remote; package org.eclipse.tm.terminal.connector.remote;
@ -16,7 +16,7 @@ public interface IRemoteTerminalParser {
/** /**
* Initialize the remote shell. This method will be called after the connection has been initialized. Implementors can assume * Initialize the remote shell. This method will be called after the connection has been initialized. Implementors can assume
* that the connection is open when this is called. * that the connection is open when this is called.
* *
* @param connection * @param connection
* terminal shell connection * terminal shell connection
* @return IRemoteProcess a remote process corresponding to the remote shell * @return IRemoteProcess a remote process corresponding to the remote shell
@ -28,7 +28,7 @@ public interface IRemoteTerminalParser {
/** /**
* Parse the input stream. This method will be called with a buffer of characters read from the input stream. If the method * Parse the input stream. This method will be called with a buffer of characters read from the input stream. If the method
* returns true, the characters will be displayed in the terminal view, otherwise they will be ignored. * returns true, the characters will be displayed in the terminal view, otherwise they will be ignored.
* *
* @param buf * @param buf
* buffer containing characters from the terminal input stream * buffer containing characters from the terminal input stream
* @return true if the characters should be displayed in the terminal * @return true if the characters should be displayed in the terminal

View file

@ -50,7 +50,7 @@ public class RemoteWizardConfigurationPanel extends AbstractExtendedConfiguratio
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
* @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setupPanel(org.eclipse.swt.widgets.Composite) * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setupPanel(org.eclipse.swt.widgets.Composite)
*/ */
@Override @Override
@ -88,7 +88,7 @@ public class RemoteWizardConfigurationPanel extends AbstractExtendedConfiguratio
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#setupData(java.util.Map) * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#setupData(java.util.Map)
*/ */
@Override @Override
@ -117,7 +117,7 @@ public class RemoteWizardConfigurationPanel extends AbstractExtendedConfiguratio
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#extractData(java.util.Map) * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#extractData(java.util.Map)
*/ */
@Override @Override
@ -141,7 +141,7 @@ public class RemoteWizardConfigurationPanel extends AbstractExtendedConfiguratio
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#fillSettingsForHost(java.lang.String) * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#fillSettingsForHost(java.lang.String)
*/ */
@Override @Override
@ -150,7 +150,7 @@ public class RemoteWizardConfigurationPanel extends AbstractExtendedConfiguratio
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#saveSettingsForHost(boolean) * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#saveSettingsForHost(boolean)
*/ */
@Override @Override
@ -159,7 +159,7 @@ public class RemoteWizardConfigurationPanel extends AbstractExtendedConfiguratio
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#isValid() * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#isValid()
*/ */
@Override @Override
@ -169,7 +169,7 @@ public class RemoteWizardConfigurationPanel extends AbstractExtendedConfiguratio
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#doSaveWidgetValues(org.eclipse.jface.dialogs. * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#doSaveWidgetValues(org.eclipse.jface.dialogs.
* IDialogSettings, java.lang.String) * IDialogSettings, java.lang.String)
*/ */
@ -181,7 +181,7 @@ public class RemoteWizardConfigurationPanel extends AbstractExtendedConfiguratio
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#getHostFromSettings() * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#getHostFromSettings()
*/ */
@Override @Override

View file

@ -1,9 +1,9 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2015, 2018 IBM Corporation and others. * Copyright (c) 2015, 2018 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0 * are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/ * https://www.eclipse.org/legal/epl-2.0/
*******************************************************************************/ *******************************************************************************/
package org.eclipse.tm.terminal.connector.remote.internal; package org.eclipse.tm.terminal.connector.remote.internal;
@ -45,7 +45,7 @@ public class Activator extends Plugin {
/** /**
* Returns the shared instance * Returns the shared instance
* *
* @return the shared instance * @return the shared instance
*/ */
public static Activator getDefault() { public static Activator getDefault() {
@ -54,7 +54,7 @@ public class Activator extends Plugin {
/** /**
* Returns an image descriptor for the image file at the given plug-in relative path. * Returns an image descriptor for the image file at the given plug-in relative path.
* *
* @param path * @param path
* the path * the path
* @return the image descriptor * @return the image descriptor
@ -65,7 +65,7 @@ public class Activator extends Plugin {
/** /**
* Create log entry from an IStatus * Create log entry from an IStatus
* *
* @param status * @param status
* status to log * status to log
*/ */
@ -75,7 +75,7 @@ public class Activator extends Plugin {
/** /**
* Create log entry from a string * Create log entry from a string
* *
* @param msg * @param msg
* message to log * message to log
*/ */
@ -85,7 +85,7 @@ public class Activator extends Plugin {
/** /**
* Create log entry from a Throwable * Create log entry from a Throwable
* *
* @param e * @param e
* throwable to log * throwable to log
*/ */
@ -97,7 +97,7 @@ public class Activator extends Plugin {
/** /**
* Generate a unique identifier * Generate a unique identifier
* *
* @return unique identifier string * @return unique identifier string
*/ */
public static String getUniqueIdentifier() { public static String getUniqueIdentifier() {

View file

@ -6,7 +6,7 @@
* https://www.eclipse.org/legal/epl-2.0/ * https://www.eclipse.org/legal/epl-2.0/
* *
* SPDX-License-Identifier: EPL-2.0 * SPDX-License-Identifier: EPL-2.0
* *
* Contributors: * Contributors:
* IBM Corporation - initial API and implementation * IBM Corporation - initial API and implementation
*******************************************************************************/ *******************************************************************************/
@ -103,7 +103,8 @@ public class ArgumentParser {
* string. Allows escaping. * string. Allows escaping.
*/ */
iterator.next(); // Skip quote iterator.next(); // Skip quote
quoted_reader: while ((iterator.current() != CharacterIterator.DONE) && (iterator.current() != '"')) { quoted_reader: while ((iterator.current() != CharacterIterator.DONE)
&& (iterator.current() != '"')) {
char innerChar = iterator.current(); char innerChar = iterator.current();
switch (innerChar) { switch (innerChar) {
case '\\': case '\\':
@ -177,7 +178,7 @@ public class ArgumentParser {
/** /**
* Convert all tokens in a full command line that can be executed in a * Convert all tokens in a full command line that can be executed in a
* shell. * shell.
* *
* @param fullEscape * @param fullEscape
* If every special character shall be escaped. If false, only * If every special character shall be escaped. If false, only
* white spaces are escaped and the shell will interpret the * white spaces are escaped and the shell will interpret the
@ -254,7 +255,7 @@ public class ArgumentParser {
/** /**
* Returns a List of all entries of the command line. * Returns a List of all entries of the command line.
* *
* @return The Array * @return The Array
*/ */
public String[] getTokenArray() { public String[] getTokenArray() {
@ -263,7 +264,7 @@ public class ArgumentParser {
/** /**
* Returns a List of all entries of the command line. * Returns a List of all entries of the command line.
* *
* @return The List * @return The List
*/ */
public List<String> getTokenList() { public List<String> getTokenList() {
@ -273,7 +274,7 @@ public class ArgumentParser {
/** /**
* Returns the command of the command line, assuming that the first entry is * Returns the command of the command line, assuming that the first entry is
* always the command. * always the command.
* *
* @return The command or null if the command lines has no command nor * @return The command or null if the command lines has no command nor
* arguments. * arguments.
*/ */
@ -287,7 +288,7 @@ public class ArgumentParser {
/** /**
* Returns the command of the command line, assuming that the first entry is * Returns the command of the command line, assuming that the first entry is
* always the command. * always the command.
* *
* @return The command or null if the command lines has no command nor * @return The command or null if the command lines has no command nor
* arguments. * arguments.
* @param fullEscape * @param fullEscape
@ -305,7 +306,7 @@ public class ArgumentParser {
/** /**
* Returns a list of all arguments, assuming that the first entry is the * Returns a list of all arguments, assuming that the first entry is the
* command name. * command name.
* *
* @return The Array or null if the command lines has no command nor * @return The Array or null if the command lines has no command nor
* arguments. * arguments.
*/ */
@ -319,7 +320,7 @@ public class ArgumentParser {
/** /**
* Returns a list of all arguments, assuming that the first entry is the * Returns a list of all arguments, assuming that the first entry is the
* command name. * command name.
* *
* @return The List or null if the command lines has no command nor * @return The List or null if the command lines has no command nor
* arguments. * arguments.
*/ */
@ -332,7 +333,7 @@ public class ArgumentParser {
/** /**
* Returns the total number of entries. * Returns the total number of entries.
* *
* @return the total number of entries * @return the total number of entries
*/ */
public int getSize() { public int getSize() {

View file

@ -64,7 +64,7 @@ public class RemoteConnectionManager extends Job {
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
* @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor) * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
*/ */
@Override @Override
@ -79,15 +79,15 @@ public class RemoteConnectionManager extends Job {
remoteConnection = connType.getConnection(connector.getRemoteSettings().getConnectionName()); remoteConnection = connType.getConnection(connector.getRemoteSettings().getConnectionName());
} }
if (remoteConnection == null) { if (remoteConnection == null) {
return new Status(IStatus.ERROR, Activator.getUniqueIdentifier(), return new Status(IStatus.ERROR, Activator.getUniqueIdentifier(), NLS
NLS.bind(Messages.RemoteConnectionManager_0, connector.getRemoteSettings().getConnectionName())); .bind(Messages.RemoteConnectionManager_0, connector.getRemoteSettings().getConnectionName()));
} }
if (!remoteConnection.isOpen()) { if (!remoteConnection.isOpen()) {
remoteConnection.open(monitor); remoteConnection.open(monitor);
if (!remoteConnection.isOpen()) { if (!remoteConnection.isOpen()) {
return new Status(IStatus.ERROR, Activator.getUniqueIdentifier(), return new Status(IStatus.ERROR, Activator.getUniqueIdentifier(), NLS.bind(
NLS.bind(Messages.RemoteConnectionManager_1, connector.getRemoteSettings().getConnectionName())); Messages.RemoteConnectionManager_1, connector.getRemoteSettings().getConnectionName()));
} }
} }
@ -104,7 +104,8 @@ public class RemoteConnectionManager extends Job {
String terminalShellCommand = prefs.get(IRemoteTerminalConstants.PREF_TERMINAL_SHELL_COMMAND, ""); //$NON-NLS-1$ String terminalShellCommand = prefs.get(IRemoteTerminalConstants.PREF_TERMINAL_SHELL_COMMAND, ""); //$NON-NLS-1$
if ("".equals(terminalShellCommand) //$NON-NLS-1$ if ("".equals(terminalShellCommand) //$NON-NLS-1$
&& remoteConnection.hasService(IRemoteCommandShellService.class)) { && remoteConnection.hasService(IRemoteCommandShellService.class)) {
IRemoteCommandShellService cmdShellSvc = remoteConnection.getService(IRemoteCommandShellService.class); IRemoteCommandShellService cmdShellSvc = remoteConnection
.getService(IRemoteCommandShellService.class);
synchronized (this) { synchronized (this) {
remoteProcess = cmdShellSvc.getCommandShell(IRemoteProcessBuilder.ALLOCATE_PTY); remoteProcess = cmdShellSvc.getCommandShell(IRemoteProcessBuilder.ALLOCATE_PTY);
} }
@ -117,7 +118,8 @@ public class RemoteConnectionManager extends Job {
.getProcessBuilder(new ArgumentParser(terminalShellCommand).getTokenList()); .getProcessBuilder(new ArgumentParser(terminalShellCommand).getTokenList());
remoteProcess = processBuilder.start(IRemoteProcessBuilder.ALLOCATE_PTY); remoteProcess = processBuilder.start(IRemoteProcessBuilder.ALLOCATE_PTY);
} else { } else {
return new Status(IStatus.ERROR, Activator.getUniqueIdentifier(), Messages.RemoteConnectionManager_2); return new Status(IStatus.ERROR, Activator.getUniqueIdentifier(),
Messages.RemoteConnectionManager_2);
} }
} }
@ -164,7 +166,7 @@ public class RemoteConnectionManager extends Job {
/** /**
* Read the data from the connection and display it in the terminal. * Read the data from the connection and display it in the terminal.
* *
* @param in * @param in
* @throws IOException * @throws IOException
*/ */

View file

@ -38,7 +38,7 @@ public class RemoteConnector extends TerminalConnectorImpl {
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
* @see * @see
* org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#connect(org.eclipse.tm.internal.terminal. * org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#connect(org.eclipse.tm.internal.terminal.
* provisional.api.ITerminalControl) * provisional.api.ITerminalControl)
@ -53,7 +53,7 @@ public class RemoteConnector extends TerminalConnectorImpl {
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
* @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#doDisconnect() * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#doDisconnect()
*/ */
@Override @Override
@ -67,7 +67,7 @@ public class RemoteConnector extends TerminalConnectorImpl {
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
* @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#getSettingsSummary() * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#getSettingsSummary()
*/ */
@Override @Override
@ -77,7 +77,7 @@ public class RemoteConnector extends TerminalConnectorImpl {
/** /**
* Return the Remote Settings. * Return the Remote Settings.
* *
* @return the settings for a concrete connection. * @return the settings for a concrete connection.
*/ */
public IRemoteSettings getRemoteSettings() { public IRemoteSettings getRemoteSettings() {
@ -86,7 +86,7 @@ public class RemoteConnector extends TerminalConnectorImpl {
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
* @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#getTerminalToRemoteStream() * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#getTerminalToRemoteStream()
*/ */
@Override @Override
@ -119,7 +119,7 @@ public class RemoteConnector extends TerminalConnectorImpl {
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
* @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#setTerminalSize(int, int) * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#setTerminalSize(int, int)
*/ */
@Override @Override

View file

@ -1,9 +1,9 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2015, 2018 IBM Corporation and others. * Copyright (c) 2015, 2018 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0 * are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/ * https://www.eclipse.org/legal/epl-2.0/
*******************************************************************************/ *******************************************************************************/
package org.eclipse.tm.terminal.connector.remote.internal; package org.eclipse.tm.terminal.connector.remote.internal;

View file

@ -40,7 +40,8 @@ public class RemoteSettingsPage extends AbstractSettingsPage {
if (fTerminalSettings != null && fRemoteConnectionWidget != null && !fRemoteConnectionWidget.isDisposed()) { if (fTerminalSettings != null && fRemoteConnectionWidget != null && !fRemoteConnectionWidget.isDisposed()) {
if (fRemoteConnectionWidget.getConnection() != null) { if (fRemoteConnectionWidget.getConnection() != null) {
if (fRemoteConnectionWidget.getConnection().getConnectionType() != null) { if (fRemoteConnectionWidget.getConnection().getConnectionType() != null) {
fTerminalSettings.setConnectionTypeId(fRemoteConnectionWidget.getConnection().getConnectionType().getId()); fTerminalSettings
.setConnectionTypeId(fRemoteConnectionWidget.getConnection().getConnectionType().getId());
} }
fTerminalSettings.setConnectionName(fRemoteConnectionWidget.getConnection().getName()); fTerminalSettings.setConnectionName(fRemoteConnectionWidget.getConnection().getName());
} }
@ -50,7 +51,8 @@ public class RemoteSettingsPage extends AbstractSettingsPage {
@Override @Override
public void loadSettings() { public void loadSettings() {
if (fTerminalSettings != null && fRemoteConnectionWidget != null && !fRemoteConnectionWidget.isDisposed()) { if (fTerminalSettings != null && fRemoteConnectionWidget != null && !fRemoteConnectionWidget.isDisposed()) {
fRemoteConnectionWidget.setConnection(fTerminalSettings.getConnectionTypeId(), fTerminalSettings.getConnectionName()); fRemoteConnectionWidget.setConnection(fTerminalSettings.getConnectionTypeId(),
fTerminalSettings.getConnectionName());
} }
} }

View file

@ -98,7 +98,8 @@ public class RemoteLauncherDelegate extends AbstractLauncherDelegate {
private String getTerminalTitle(Map<String, Object> properties) { private String getTerminalTitle(Map<String, Object> properties) {
// Try to see if the user set a title explicitly via the properties map. // Try to see if the user set a title explicitly via the properties map.
String title = getDefaultTerminalTitle(properties); String title = getDefaultTerminalTitle(properties);
if (title != null) return title; if (title != null)
return title;
String connection = (String) properties.get(IRemoteSettings.CONNECTION_NAME); String connection = (String) properties.get(IRemoteSettings.CONNECTION_NAME);
@ -107,7 +108,7 @@ public class RemoteLauncherDelegate extends AbstractLauncherDelegate {
String date = format.format(new Date(System.currentTimeMillis())); String date = format.format(new Date(System.currentTimeMillis()));
return NLS.bind(Messages.RemoteLauncherDelegate_terminalTitle, new String[] { connection, date }); return NLS.bind(Messages.RemoteLauncherDelegate_terminalTitle, new String[] { connection, date });
} }
return Messages.RemoteLauncherDelegate_terminalTitle_default; return Messages.RemoteLauncherDelegate_terminalTitle_default;
} }

View file

@ -26,7 +26,7 @@ public class RemoteMementoHandler implements IMementoHandler {
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
* @see org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler#saveState(org.eclipse.ui.IMemento, java.util.Map) * @see org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler#saveState(org.eclipse.ui.IMemento, java.util.Map)
*/ */
@Override @Override
@ -37,14 +37,15 @@ public class RemoteMementoHandler implements IMementoHandler {
// Do not write the terminal title to the memento -> needs to // Do not write the terminal title to the memento -> needs to
// be recreated at the time of restoration. // be recreated at the time of restoration.
memento.putString(IRemoteSettings.CONNECTION_NAME, (String) properties.get(IRemoteSettings.CONNECTION_NAME)); memento.putString(IRemoteSettings.CONNECTION_NAME, (String) properties.get(IRemoteSettings.CONNECTION_NAME));
memento.putString(IRemoteSettings.CONNECTION_TYPE_ID, (String) properties.get(IRemoteSettings.CONNECTION_TYPE_ID)); memento.putString(IRemoteSettings.CONNECTION_TYPE_ID,
(String) properties.get(IRemoteSettings.CONNECTION_TYPE_ID));
memento.putString(ITerminalsConnectorConstants.PROP_ENCODING, memento.putString(ITerminalsConnectorConstants.PROP_ENCODING,
(String) properties.get(ITerminalsConnectorConstants.PROP_ENCODING)); (String) properties.get(ITerminalsConnectorConstants.PROP_ENCODING));
} }
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
* @see org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler#restoreState(org.eclipse.ui.IMemento, java.util.Map) * @see org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler#restoreState(org.eclipse.ui.IMemento, java.util.Map)
*/ */
@Override @Override
@ -55,6 +56,7 @@ public class RemoteMementoHandler implements IMementoHandler {
// Restore the terminal properties from the memento // Restore the terminal properties from the memento
properties.put(IRemoteSettings.CONNECTION_NAME, memento.getString(IRemoteSettings.CONNECTION_NAME)); properties.put(IRemoteSettings.CONNECTION_NAME, memento.getString(IRemoteSettings.CONNECTION_NAME));
properties.put(IRemoteSettings.CONNECTION_TYPE_ID, memento.getString(IRemoteSettings.CONNECTION_TYPE_ID)); properties.put(IRemoteSettings.CONNECTION_TYPE_ID, memento.getString(IRemoteSettings.CONNECTION_TYPE_ID));
properties.put(ITerminalsConnectorConstants.PROP_ENCODING, memento.getString(ITerminalsConnectorConstants.PROP_ENCODING)); properties.put(ITerminalsConnectorConstants.PROP_ENCODING,
memento.getString(ITerminalsConnectorConstants.PROP_ENCODING));
} }
} }

View file

@ -23,7 +23,7 @@ public class Messages extends NLS {
public static String RemoteTerminalPreferencePage_0; public static String RemoteTerminalPreferencePage_0;
public static String TERMINAL_EXCEPTION; public static String TERMINAL_EXCEPTION;
public static String RemoteLauncherDelegate_terminalTitle; public static String RemoteLauncherDelegate_terminalTitle;
public static String RemoteLauncherDelegate_terminalTitle_default; public static String RemoteLauncherDelegate_terminalTitle_default;

View file

@ -70,28 +70,28 @@ public class UIPlugin extends AbstractUIPlugin {
return traceHandler; return traceHandler;
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
//<copied code from org.eclipse.team.cvs.ssh2/CVSSSH2Plugin (Copyright IBM)> //<copied code from org.eclipse.team.cvs.ssh2/CVSSSH2Plugin (Copyright IBM)>
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Override @Override
public void start(BundleContext context) throws Exception { public void start(BundleContext context) throws Exception {
super.start(context); super.start(context);
plugin = this; plugin = this;
tracker = new ServiceTracker(getBundle().getBundleContext(), IJSchService.class.getName(), null); tracker = new ServiceTracker(getBundle().getBundleContext(), IJSchService.class.getName(), null);
tracker.open(); tracker.open();
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/ */
@Override @Override
public void stop(BundleContext context) throws Exception { public void stop(BundleContext context) throws Exception {
try { try {
SshConnection.shutdown(); SshConnection.shutdown();
tracker.close(); tracker.close();
@ -106,13 +106,13 @@ public class UIPlugin extends AbstractUIPlugin {
* @return An instance of IJSchService, or <code>null</code> if no * @return An instance of IJSchService, or <code>null</code> if no
* IJschService service is available. * IJschService service is available.
*/ */
public IJSchService getJSchService() { public IJSchService getJSchService() {
return (IJSchService)tracker.getService(); return (IJSchService) tracker.getService();
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
//<copied code from org.eclipse.team.cvs.ssh2/CVSSSH2Plugin (Copyright IBM)> //<copied code from org.eclipse.team.cvs.ssh2/CVSSSH2Plugin (Copyright IBM)>
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#initializeImageRegistry(org.eclipse.jface.resource.ImageRegistry) * @see org.eclipse.ui.plugin.AbstractUIPlugin#initializeImageRegistry(org.eclipse.jface.resource.ImageRegistry)

View file

@ -10,17 +10,16 @@
* Contributors: * Contributors:
* IBM Corporation - initial API and implementation * IBM Corporation - initial API and implementation
* Martin Oberhuber (Wind River) - extracted from various team.cvs plugins * Martin Oberhuber (Wind River) - extracted from various team.cvs plugins
* Martin Oberhuber (Wind River) - [175686] Adapted to new IJSchService API * Martin Oberhuber (Wind River) - [175686] Adapted to new IJSchService API
*******************************************************************************/ *******************************************************************************/
package org.eclipse.tm.terminal.connector.ssh.connector; package org.eclipse.tm.terminal.connector.ssh.connector;
/** /**
* Defines the constants used by the terminal.ssh Plugin * Defines the constants used by the terminal.ssh Plugin
*/ */
public interface ISshConstants { public interface ISshConstants {
// These are from cvs.ui.IHelpContextIds // These are from cvs.ui.IHelpContextIds
public static final String CVSUIPREFIX = "org.eclipse.team.cvs.ui."; //$NON-NLS-1$ public static final String CVSUIPREFIX = "org.eclipse.team.cvs.ui."; //$NON-NLS-1$
public static final String HELP_USER_VALIDATION_DIALOG = CVSUIPREFIX + "user_validation_dialog_context"; //$NON-NLS-1$ public static final String HELP_USER_VALIDATION_DIALOG = CVSUIPREFIX + "user_validation_dialog_context"; //$NON-NLS-1$
public static final String HELP_KEYBOARD_INTERACTIVE_DIALOG = CVSUIPREFIX + "keyboard_interactive_dialog_context"; //$NON-NLS-1$ public static final String HELP_KEYBOARD_INTERACTIVE_DIALOG = CVSUIPREFIX + "keyboard_interactive_dialog_context"; //$NON-NLS-1$

View file

@ -1,11 +1,11 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2006, 2018 Wind River Systems, Inc. and others. * Copyright (c) 2006, 2018 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0 * are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/ * https://www.eclipse.org/legal/epl-2.0/
* *
* Contributors: * Contributors:
* Michael Scharf (Wind River) - initial API and implementation * Michael Scharf (Wind River) - initial API and implementation
* Martin Oberhuber (Wind River) - fixed copyright headers and beautified * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
* Johnson Ma (Wind River) - [218880] Add UI setting for ssh keepalives * Johnson Ma (Wind River) - [218880] Add UI setting for ssh keepalives
@ -18,26 +18,26 @@ public interface ISshSettings {
public static int DEFAULT_SSH_PORT = 22; public static int DEFAULT_SSH_PORT = 22;
/** /**
* Get the host name or IP address of remote system to connect. * Get the host name or IP address of remote system to connect.
* @return host name or IP address of the remote system. * @return host name or IP address of the remote system.
*/ */
String getHost(); String getHost();
/** /**
* Get the login name for connecting to the remote system. * Get the login name for connecting to the remote system.
* @return remote login name * @return remote login name
*/ */
String getUser(); String getUser();
/** /**
* Get the password for connecting to the remote system. * Get the password for connecting to the remote system.
* May be empty if connecting via SSH public key authentication * May be empty if connecting via SSH public key authentication
* (with or without passphrase). * (with or without passphrase).
* @return password to use * @return password to use
*/ */
String getPassword(); String getPassword();
/** /**
* Get the timeout (in seconds) after which the SSH connection is assumed dead. * Get the timeout (in seconds) after which the SSH connection is assumed dead.
* @return timeout (in seconds) for the SSH connection. * @return timeout (in seconds) for the SSH connection.
@ -47,9 +47,9 @@ public interface ISshSettings {
/** /**
* Get the keepalive interval (in seconds). * Get the keepalive interval (in seconds).
* After this time of inactivity, the SSH connector will send a message to the * After this time of inactivity, the SSH connector will send a message to the
* remote system in order to avoid timeouts on the remote. A maximum of 6 * remote system in order to avoid timeouts on the remote. A maximum of 6
* keepalive messages will be sent if enabled. When set to 0, the keepalive * keepalive messages will be sent if enabled. When set to 0, the keepalive
* feature is disabled. * feature is disabled.
* @return interval (in seconds) for keepalive messages. * @return interval (in seconds) for keepalive messages.
*/ */
int getKeepalive(); int getKeepalive();

View file

@ -33,161 +33,164 @@ import org.eclipse.ui.PlatformUI;
* A dialog for keyboad-interactive authentication for the ssh2 connection. * A dialog for keyboad-interactive authentication for the ssh2 connection.
*/ */
public class KeyboardInteractiveDialog extends TrayDialog { public class KeyboardInteractiveDialog extends TrayDialog {
// widgets // widgets
private Text[] texts; private Text[] texts;
protected String domain; protected String domain;
protected String destination; protected String destination;
protected String name; protected String name;
protected String instruction; protected String instruction;
protected String lang; protected String lang;
protected String[] prompt; protected String[] prompt;
protected boolean[] echo; protected boolean[] echo;
private String message; private String message;
private String[] result; private String[] result;
/** /**
* Creates a nwe KeyboardInteractiveDialog. * Creates a nwe KeyboardInteractiveDialog.
* *
* @param parentShell the parent shell * @param parentShell the parent shell
* @param connectionId an id for the connection * @param connectionId an id for the connection
* @param destination the location * @param destination the location
* @param name the name * @param name the name
* @param instruction the instruction * @param instruction the instruction
* @param prompt the titles for textfields * @param prompt the titles for textfields
* @param echo '*' should be used or not * @param echo '*' should be used or not
*/ */
public KeyboardInteractiveDialog(Shell parentShell, public KeyboardInteractiveDialog(Shell parentShell, String connectionId, String destination, String name,
String connectionId, String instruction, String[] prompt, boolean[] echo) {
String destination, super(parentShell);
String name, this.domain = connectionId;
String instruction, this.destination = destination;
String[] prompt, this.name = name;
boolean[] echo){ this.instruction = instruction;
super(parentShell); this.prompt = prompt;
this.domain=connectionId; this.echo = echo;
this.destination=destination; this.message = NLS.bind(SshMessages.KeyboardInteractiveDialog_message,
this.name=name; new String[] { destination + (name != null && name.length() > 0 ? ": " + name : "") }); //NON-NLS-1$ //$NON-NLS-1$ //$NON-NLS-2$
this.instruction=instruction; }
this.prompt=prompt;
this.echo=echo;
this.message=NLS.bind(SshMessages.KeyboardInteractiveDialog_message, new String[] { destination+(name!=null && name.length()>0 ? ": "+name : "") }); //NON-NLS-1$ //$NON-NLS-1$ //$NON-NLS-2$
}
/**
* @see Window#configureShell
*/
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText(message);
}
/**
* @see Window#create
*/
@Override
public void create() {
super.create();
if(texts.length>0){
texts[0].setFocus();
}
}
/**
* @see Dialog#createDialogArea
*/
@Override
protected Control createDialogArea(Composite parent) {
Composite main=new Composite(parent, SWT.NONE);
GridLayout layout=new GridLayout();
layout.numColumns=3;
main.setLayout(layout);
main.setLayoutData(new GridData(GridData.FILL_BOTH));
// set F1 help /**
PlatformUI.getWorkbench().getHelpSystem().setHelp(main, ISshConstants.HELP_KEYBOARD_INTERACTIVE_DIALOG); * @see Window#configureShell
*/
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText(message);
}
if (message!=null) { /**
Label messageLabel=new Label(main, SWT.WRAP); * @see Window#create
messageLabel.setText(message); */
GridData data=new GridData(GridData.FILL_HORIZONTAL); @Override
data.horizontalSpan=3; public void create() {
messageLabel.setLayoutData(data); super.create();
} if (texts.length > 0) {
if(domain!=null){ texts[0].setFocus();
Label label = new Label(main, SWT.WRAP); }
label.setText(NLS.bind(SshMessages.KeyboardInteractiveDialog_labelConnection, new String[] { domain })); }
GridData data=new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan=3;
label.setLayoutData(data);
}
if (instruction!=null && instruction.length()>0) {
Label messageLabel=new Label(main, SWT.WRAP);
messageLabel.setText(instruction);
GridData data=new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan=3;
messageLabel.setLayoutData(data);
}
createPasswordFields(main);
return main;
}
/**
* Creates the widgets that represent the entry area.
*
* @param parent the parent of the widgets
*/
@SuppressWarnings("unused")
protected void createPasswordFields(Composite parent) {
texts=new Text[prompt.length];
for(int i=0; i<prompt.length; i++){ /**
new Label(parent, SWT.NONE).setText(prompt[i]); * @see Dialog#createDialogArea
texts[i]=new Text(parent, SWT.BORDER); */
GridData data=new GridData(GridData.FILL_HORIZONTAL); @Override
data.widthHint=convertHorizontalDLUsToPixels(IDialogConstants.ENTRY_FIELD_WIDTH); protected Control createDialogArea(Composite parent) {
texts[i].setLayoutData(data); Composite main = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = 3;
main.setLayout(layout);
main.setLayoutData(new GridData(GridData.FILL_BOTH));
if(!echo[i]){ // set F1 help
texts[i].setEchoChar('*'); PlatformUI.getWorkbench().getHelpSystem().setHelp(main, ISshConstants.HELP_KEYBOARD_INTERACTIVE_DIALOG);
}
new Label(parent, SWT.NONE);
}
} if (message != null) {
/** Label messageLabel = new Label(main, SWT.WRAP);
* Returns the entered values, or null messageLabel.setText(message);
* if the user cancelled. GridData data = new GridData(GridData.FILL_HORIZONTAL);
* data.horizontalSpan = 3;
* @return the entered values messageLabel.setLayoutData(data);
*/ }
public String[] getResult() { if (domain != null) {
return result; Label label = new Label(main, SWT.WRAP);
} label.setText(NLS.bind(SshMessages.KeyboardInteractiveDialog_labelConnection, new String[] { domain }));
/** GridData data = new GridData(GridData.FILL_HORIZONTAL);
* Notifies that the ok button of this dialog has been pressed. data.horizontalSpan = 3;
* <p> label.setLayoutData(data);
* The default implementation of this framework method sets }
* this dialog's return code to <code>Window.OK</code> if (instruction != null && instruction.length() > 0) {
* and closes the dialog. Subclasses may override. Label messageLabel = new Label(main, SWT.WRAP);
* </p> messageLabel.setText(instruction);
*/ GridData data = new GridData(GridData.FILL_HORIZONTAL);
@Override data.horizontalSpan = 3;
protected void okPressed() { messageLabel.setLayoutData(data);
result=new String[prompt.length]; }
for(int i=0; i<texts.length; i++){ createPasswordFields(main);
result[i]=texts[i].getText(); return main;
} }
super.okPressed();
} /**
/** * Creates the widgets that represent the entry area.
* Notifies that the cancel button of this dialog has been pressed. *
* <p> * @param parent the parent of the widgets
* The default implementation of this framework method sets */
* this dialog's return code to <code>Window.CANCEL</code> @SuppressWarnings("unused")
* and closes the dialog. Subclasses may override. protected void createPasswordFields(Composite parent) {
* </p> texts = new Text[prompt.length];
*/
@Override for (int i = 0; i < prompt.length; i++) {
protected void cancelPressed() { new Label(parent, SWT.NONE).setText(prompt[i]);
result=null; texts[i] = new Text(parent, SWT.BORDER);
super.cancelPressed(); GridData data = new GridData(GridData.FILL_HORIZONTAL);
} data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.ENTRY_FIELD_WIDTH);
texts[i].setLayoutData(data);
if (!echo[i]) {
texts[i].setEchoChar('*');
}
new Label(parent, SWT.NONE);
}
}
/**
* Returns the entered values, or null
* if the user cancelled.
*
* @return the entered values
*/
public String[] getResult() {
return result;
}
/**
* Notifies that the ok button of this dialog has been pressed.
* <p>
* The default implementation of this framework method sets
* this dialog's return code to <code>Window.OK</code>
* and closes the dialog. Subclasses may override.
* </p>
*/
@Override
protected void okPressed() {
result = new String[prompt.length];
for (int i = 0; i < texts.length; i++) {
result[i] = texts[i].getText();
}
super.okPressed();
}
/**
* Notifies that the cancel button of this dialog has been pressed.
* <p>
* The default implementation of this framework method sets
* this dialog's return code to <code>Window.CANCEL</code>
* and closes the dialog. Subclasses may override.
* </p>
*/
@Override
protected void cancelPressed() {
result = null;
super.cancelPressed();
}
} }

View file

@ -54,8 +54,9 @@ public class SshConnection extends Thread {
private final SshConnector fConn; private final SshConnector fConn;
private Session fSession; private Session fSession;
private boolean fDisconnectHasBeenCalled; private boolean fDisconnectHasBeenCalled;
protected SshConnection(SshConnector conn,ITerminalControl control) {
super("SshConnection-"+fgNo++); //$NON-NLS-1$ protected SshConnection(SshConnector conn, ITerminalControl control) {
super("SshConnection-" + fgNo++); //$NON-NLS-1$
fControl = control; fControl = control;
fConn = conn; fConn = conn;
fControl.setState(TerminalState.CONNECTING); fControl.setState(TerminalState.CONNECTING);
@ -72,19 +73,20 @@ public class SshConnection extends Thread {
* the Jsch config (for instance, in order to switch off strict * the Jsch config (for instance, in order to switch off strict
* host key checking or in order to add specific ciphers). * host key checking or in order to add specific ciphers).
*/ */
protected Session createSession(String username, String password, String hostname, int port, UserInfo wrapperUI, IProgressMonitor monitor) throws JSchException { protected Session createSession(String username, String password, String hostname, int port, UserInfo wrapperUI,
IJSchService service = UIPlugin.getDefault().getJSchService(); IProgressMonitor monitor) throws JSchException {
if (service == null) IJSchService service = UIPlugin.getDefault().getJSchService();
return null; if (service == null)
Session session = service.createSession(hostname, port, username); return null;
//session.setTimeout(getSshTimeoutInMillis()); Session session = service.createSession(hostname, port, username);
session.setTimeout(0); //never time out on the session //session.setTimeout(getSshTimeoutInMillis());
session.setServerAliveCountMax(6); //give up after 6 tries (remote will be dead after 30 min) session.setTimeout(0); //never time out on the session
if (password != null) session.setServerAliveCountMax(6); //give up after 6 tries (remote will be dead after 30 min)
if (password != null)
session.setPassword(password); session.setPassword(password);
session.setUserInfo(wrapperUI); session.setUserInfo(wrapperUI);
return session; return session;
} }
public static void shutdown() { public static void shutdown() {
//TODO: Store all Jsch sessions in a pool and disconnect them on shutdown //TODO: Store all Jsch sessions in a pool and disconnect them on shutdown
@ -95,7 +97,7 @@ public class SshConnection extends Thread {
//---------------------------------------------------------------------- //----------------------------------------------------------------------
@Override @Override
public void run() { public void run() {
boolean connectSucceeded = false; boolean connectSucceeded = false;
String host = ""; //$NON-NLS-1$ String host = ""; //$NON-NLS-1$
int port = ISshSettings.DEFAULT_SSH_PORT; int port = ISshSettings.DEFAULT_SSH_PORT;
@ -107,32 +109,31 @@ public class SshConnection extends Thread {
String password = fConn.getSshSettings().getPassword(); String password = fConn.getSshSettings().getPassword();
port = fConn.getSshSettings().getPort(); port = fConn.getSshSettings().getPort();
UserInfo ui=new MyUserInfo(null, user, password); UserInfo ui = new MyUserInfo(null, user, password);
Session session = createSession(user, password, host, port, Session session = createSession(user, password, host, port, ui, new NullProgressMonitor());
ui, new NullProgressMonitor());
synchronized (this) { synchronized (this) {
fSession = session; fSession = session;
} }
//java.util.Hashtable config=new java.util.Hashtable(); //java.util.Hashtable config=new java.util.Hashtable();
//config.put("StrictHostKeyChecking", "no"); //config.put("StrictHostKeyChecking", "no");
//session.setConfig(config); //session.setConfig(config);
//ui.aboutToConnect(); //ui.aboutToConnect();
if (nKeepalive > 0) { if (nKeepalive > 0) {
session.setServerAliveInterval(nKeepalive); //default is 5 minutes session.setServerAliveInterval(nKeepalive); //default is 5 minutes
} }
// dont try to connect if disconnect has been requested already // dont try to connect if disconnect has been requested already
synchronized (this) { synchronized (this) {
if (fDisconnectHasBeenCalled) if (fDisconnectHasBeenCalled)
return; return;
} }
session.connect(nTimeout); // making connection with timeout. session.connect(nTimeout); // making connection with timeout.
// if we got disconnected, do not continue // if we got disconnected, do not continue
if(!isSessionConnected()) if (!isSessionConnected())
return; return;
ChannelShell channel=(ChannelShell) session.openChannel("shell"); //$NON-NLS-1$ ChannelShell channel = (ChannelShell) session.openChannel("shell"); //$NON-NLS-1$
channel.setPtyType("xterm"); //$NON-NLS-1$ channel.setPtyType("xterm"); //$NON-NLS-1$
// TERM=xterm implies VT100 line wrapping mode // TERM=xterm implies VT100 line wrapping mode
fControl.setVT100LineWrapping(true); fControl.setVT100LineWrapping(true);
@ -195,18 +196,19 @@ public class SshConnection extends Thread {
void disconnect() { void disconnect() {
interrupt(); interrupt();
synchronized (this) { synchronized (this) {
fDisconnectHasBeenCalled=true; fDisconnectHasBeenCalled = true;
if(fSession!=null) { if (fSession != null) {
try { try {
fSession.disconnect(); fSession.disconnect();
} catch (Exception e) { } catch (Exception e) {
// Ignore NPE due to bug in JSch if disconnecting // Ignore NPE due to bug in JSch if disconnecting
// while not yet authenticated // while not yet authenticated
} }
fSession=null; fSession = null;
} }
} }
} }
/** /**
* Read the data from the ssh connection and display it in the terminal. * Read the data from the ssh connection and display it in the terminal.
* @param in * @param in
@ -214,45 +216,47 @@ public class SshConnection extends Thread {
*/ */
private void readDataForever(InputStream in) throws IOException { private void readDataForever(InputStream in) throws IOException {
// read the data // read the data
byte bytes[]=new byte[32*1024]; byte bytes[] = new byte[32 * 1024];
int n; int n;
// read until the thread gets interrupted.... // read until the thread gets interrupted....
while( (n=in.read(bytes))!=-1) { while ((n = in.read(bytes)) != -1) {
fControl.getRemoteToTerminalOutputStream().write(bytes,0,n); fControl.getRemoteToTerminalOutputStream().write(bytes, 0, n);
} }
} }
protected static Display getStandardDisplay() { protected static Display getStandardDisplay() {
Display display = Display.getCurrent(); Display display = Display.getCurrent();
if( display==null ) { if (display == null) {
display = Display.getDefault(); display = Display.getDefault();
} }
return display; return display;
} }
private class MyUserInfo implements UserInfo, UIKeyboardInteractive { private class MyUserInfo implements UserInfo, UIKeyboardInteractive {
/* default */ final String fConnectionId; /* default */ final String fConnectionId;
/* default */ final String fUser; /* default */ final String fUser;
private String fPassword; private String fPassword;
private String fPassphrase; private String fPassphrase;
private int fAttemptCount; private int fAttemptCount;
public MyUserInfo(String connectionId, String user, String password) { public MyUserInfo(String connectionId, String user, String password) {
fConnectionId = connectionId; fConnectionId = connectionId;
fUser = user; fUser = user;
fPassword = password; fPassword = password;
} }
@Override @Override
public String getPassword() { public String getPassword() {
return fPassword; return fPassword;
} }
@Override @Override
public boolean promptYesNo(final String str) { public boolean promptYesNo(final String str) {
//need to switch to UI thread for prompting //need to switch to UI thread for prompting
final boolean[] retval = new boolean[1]; final boolean[] retval = new boolean[1];
Display.getDefault().syncExec(new Runnable() { Display.getDefault().syncExec(new Runnable() {
@Override @Override
public void run() { public void run() {
// [168197] Replace JFace MessagDialog by SWT MessageBox // [168197] Replace JFace MessagDialog by SWT MessageBox
//retval[0] = MessageDialog.openQuestion(null, SshMessages.WARNING, str); //retval[0] = MessageDialog.openQuestion(null, SshMessages.WARNING, str);
if (isSessionConnected()) { if (isSessionConnected()) {
@ -267,11 +271,12 @@ public class SshConnection extends Thread {
}); });
return retval[0]; return retval[0];
} }
private String promptSecret(final String message) { private String promptSecret(final String message) {
final String[] retval = new String[1]; final String[] retval = new String[1];
getStandardDisplay().syncExec(new Runnable() { getStandardDisplay().syncExec(new Runnable() {
@Override @Override
public void run() { public void run() {
if (isSessionConnected()) { if (isSessionConnected()) {
UserValidationDialog uvd = new UserValidationDialog(null, fConnectionId, fUser, message); UserValidationDialog uvd = new UserValidationDialog(null, fConnectionId, fUser, message);
uvd.setUsernameMutable(false); uvd.setUsernameMutable(false);
@ -287,29 +292,33 @@ public class SshConnection extends Thread {
}); });
return retval[0]; return retval[0];
} }
@Override @Override
public String getPassphrase() { public String getPassphrase() {
return fPassphrase; return fPassphrase;
} }
@Override @Override
public boolean promptPassphrase(String message) { public boolean promptPassphrase(String message) {
fPassphrase = promptSecret(message); fPassphrase = promptSecret(message);
return (fPassphrase!=null); return (fPassphrase != null);
} }
@Override @Override
public boolean promptPassword(final String message) { public boolean promptPassword(final String message) {
String _password = promptSecret(message); String _password = promptSecret(message);
if (_password!=null) { if (_password != null) {
fPassword=_password; fPassword = _password;
return true; return true;
} }
return false; return false;
} }
@Override @Override
public void showMessage(final String message) { public void showMessage(final String message) {
Display.getDefault().syncExec(new Runnable() { Display.getDefault().syncExec(new Runnable() {
@Override @Override
public void run() { public void run() {
// [168197] Replace JFace MessagDialog by SWT MessageBox // [168197] Replace JFace MessagDialog by SWT MessageBox
// MessageDialog.openInformation(null, SshMessages.INFO, message); // MessageDialog.openInformation(null, SshMessages.INFO, message);
if (isSessionConnected()) { if (isSessionConnected()) {
@ -321,50 +330,50 @@ public class SshConnection extends Thread {
} }
}); });
} }
@Override @Override
public String[] promptKeyboardInteractive(final String destination, public String[] promptKeyboardInteractive(final String destination, final String name, final String instruction,
final String name, final String instruction, final String[] prompt, final boolean[] echo) {
final String[] prompt, final boolean[] echo) if (prompt.length == 0) {
{ // No need to prompt, just return an empty String array
if (prompt.length == 0) { return new String[0];
// No need to prompt, just return an empty String array }
return new String[0]; try {
} if (fAttemptCount == 0 && fPassword != null && prompt.length == 1
try{ && prompt[0].trim().equalsIgnoreCase("password:")) { //$NON-NLS-1$
if (fAttemptCount == 0 && fPassword != null && prompt.length == 1 && prompt[0].trim().equalsIgnoreCase("password:")) { //$NON-NLS-1$ // Return the provided password the first time but always prompt on subsequent tries
// Return the provided password the first time but always prompt on subsequent tries fAttemptCount++;
fAttemptCount++; return new String[] { fPassword };
return new String[] { fPassword }; }
} final String[][] finResult = new String[1][];
final String[][] finResult = new String[1][]; getStandardDisplay().syncExec(new Runnable() {
getStandardDisplay().syncExec(new Runnable() { @Override
@Override public void run() {
public void run() { if (isSessionConnected()) {
if (isSessionConnected()) { KeyboardInteractiveDialog dialog = new KeyboardInteractiveDialog(null, fConnectionId,
KeyboardInteractiveDialog dialog = new KeyboardInteractiveDialog(null, fConnectionId, destination, name, instruction, prompt, echo); destination, name, instruction, prompt, echo);
dialog.open(); dialog.open();
finResult[0] = dialog.getResult(); finResult[0] = dialog.getResult();
} else { } else {
finResult[0] = null; // indicate cancel to JSch finResult[0] = null; // indicate cancel to JSch
} }
} }
}); });
String[] result=finResult[0]; String[] result = finResult[0];
if (result == null) if (result == null)
return null; // cancelled return null; // cancelled
if (result.length == 1 && prompt.length == 1 && prompt[0].trim().equalsIgnoreCase("password:")) { //$NON-NLS-1$ if (result.length == 1 && prompt.length == 1 && prompt[0].trim().equalsIgnoreCase("password:")) { //$NON-NLS-1$
fPassword = result[0]; fPassword = result[0];
} }
fAttemptCount++; fAttemptCount++;
return result; return result;
} } catch (OperationCanceledException e) {
catch(OperationCanceledException e){
return null; return null;
} }
} }
} }
private void connectFailed(String terminalText, String msg) { private void connectFailed(String terminalText, String msg) {
Logger.log(terminalText); Logger.log(terminalText);
fControl.displayTextInTerminal(terminalText); fControl.displayTextInTerminal(terminalText);
// fControl.setMsg(msg); // fControl.setMsg(msg);

View file

@ -36,24 +36,29 @@ public class SshConnector extends TerminalConnectorImpl {
private final SshSettings fSettings; private final SshSettings fSettings;
private int fWidth; private int fWidth;
private int fHeight; private int fHeight;
public SshConnector() { public SshConnector() {
this(new SshSettings()); this(new SshSettings());
} }
public SshConnector(SshSettings settings) { public SshConnector(SshSettings settings) {
fSettings=settings; fSettings = settings;
} }
@Override @Override
public void initialize() throws Exception { public void initialize() throws Exception {
fJsch=new JSch(); fJsch = new JSch();
} }
@Override @Override
public void connect(ITerminalControl control) { public void connect(ITerminalControl control) {
super.connect(control); super.connect(control);
fConnection = new SshConnection(this,control); fConnection = new SshConnection(this, control);
fConnection.start(); fConnection.start();
} }
@Override @Override
synchronized public void doDisconnect() { synchronized public void doDisconnect() {
fConnection.disconnect(); fConnection.disconnect();
if (getInputStream() != null) { if (getInputStream() != null) {
try { try {
@ -71,28 +76,34 @@ public class SshConnector extends TerminalConnectorImpl {
} }
} }
} }
@Override @Override
public void setTerminalSize(int newWidth, int newHeight) { public void setTerminalSize(int newWidth, int newHeight) {
if(fChannel!=null && (newWidth!=fWidth || newHeight!=fHeight)) { if (fChannel != null && (newWidth != fWidth || newHeight != fHeight)) {
//avoid excessive communications due to change size requests by caching previous size //avoid excessive communications due to change size requests by caching previous size
fChannel.setPtySize(newWidth, newHeight, 8*newWidth, 8*newHeight); fChannel.setPtySize(newWidth, newHeight, 8 * newWidth, 8 * newHeight);
fWidth=newWidth; fWidth = newWidth;
fHeight=newHeight; fHeight = newHeight;
} }
} }
public InputStream getInputStream() { public InputStream getInputStream() {
return fInputStream; return fInputStream;
} }
@Override @Override
public OutputStream getTerminalToRemoteStream() { public OutputStream getTerminalToRemoteStream() {
return fOutputStream; return fOutputStream;
} }
void setInputStream(InputStream inputStream) { void setInputStream(InputStream inputStream) {
fInputStream = inputStream; fInputStream = inputStream;
} }
void setOutputStream(OutputStream outputStream) { void setOutputStream(OutputStream outputStream) {
fOutputStream = outputStream; fOutputStream = outputStream;
} }
/** /**
* Return the SSH Settings. * Return the SSH Settings.
* *
@ -102,31 +113,38 @@ public class SshConnector extends TerminalConnectorImpl {
public ISshSettings getSshSettings() { public ISshSettings getSshSettings() {
return fSettings; return fSettings;
} }
@Override @Override
public void setDefaultSettings() { public void setDefaultSettings() {
fSettings.load(new NullSettingsStore()); fSettings.load(new NullSettingsStore());
} }
@Override @Override
public String getSettingsSummary() { public String getSettingsSummary() {
return fSettings.getSummary(); return fSettings.getSummary();
} }
@Override @Override
public void load(ISettingsStore store) { public void load(ISettingsStore store) {
fSettings.load(store); fSettings.load(store);
} }
@Override @Override
public void save(ISettingsStore store) { public void save(ISettingsStore store) {
fSettings.save(store); fSettings.save(store);
} }
protected JSch getJsch() { protected JSch getJsch() {
return fJsch; return fJsch;
} }
ChannelShell getChannel() { ChannelShell getChannel() {
return fChannel; return fChannel;
} }
void setChannel(ChannelShell channel) { void setChannel(ChannelShell channel) {
fChannel = channel; fChannel = channel;
fWidth=-1; fWidth = -1;
fHeight=-1; fHeight = -1;
} }
} }

View file

@ -59,7 +59,7 @@ public class SshMessages extends NLS {
public static String java_net_SocketException; public static String java_net_SocketException;
public static String java_net_NoRouteToHostException; public static String java_net_NoRouteToHostException;
// <Copied from org.eclipse.team.cvs.core / CVSCommunicationException (c) IBM 2000, 2007> // <Copied from org.eclipse.team.cvs.core / CVSCommunicationException (c) IBM 2000, 2007>
public static String getMessageFor(Throwable throwable) { public static String getMessageFor(Throwable throwable) {
String message = getMessage(getMessageKey(throwable)); String message = getMessage(getMessageKey(throwable));
@ -96,4 +96,4 @@ public class SshMessages extends NLS {
// </Copied from org.eclipse.team.cvs.core / Policy> // </Copied from org.eclipse.team.cvs.core / Policy>
} }

View file

@ -8,7 +8,7 @@
# SPDX-License-Identifier: EPL-2.0 # SPDX-License-Identifier: EPL-2.0
# #
# Contributors: # Contributors:
# Michael Scharf (Wind River) - initial API and implementation # Michael Scharf (Wind River) - initial API and implementation
# Martin Oberhuber (Wind River) - fixed copyright headers and beautified # Martin Oberhuber (Wind River) - fixed copyright headers and beautified
# Johnson Ma (Wind River) - [218880] Add UI setting for ssh keepalives # Johnson Ma (Wind River) - [218880] Add UI setting for ssh keepalives
# Martin Oberhuber (Wind River) - [206919] Improve SSH Terminal Error Reporting (Adopting code from org.eclipse.team.cvs.core) # Martin Oberhuber (Wind River) - [206919] Improve SSH Terminal Error Reporting (Adopting code from org.eclipse.team.cvs.core)
@ -52,4 +52,4 @@ java_net_UnknownHostException=Cannot locate host: {0}
java_net_ConnectException=Cannot connect to host: {0} java_net_ConnectException=Cannot connect to host: {0}
java_net_SocketException=Socket Exception: {0} java_net_SocketException=Socket Exception: {0}
java_net_NoRouteToHostException={0} java_net_NoRouteToHostException={0}
#</Copied> from org.eclipse.team.cvs.core #</Copied> from org.eclipse.team.cvs.core

View file

@ -19,14 +19,15 @@ package org.eclipse.tm.terminal.connector.ssh.connector;
import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore; import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
public class SshSettings implements ISshSettings { public class SshSettings implements ISshSettings {
protected String fHost; protected String fHost;
protected String fUser; protected String fUser;
protected String fPassword; protected String fPassword;
protected String fPort; protected String fPort;
protected String fTimeout; protected String fTimeout;
protected String fKeepalive; protected String fKeepalive;
@Override @Override
public String getHost() { public String getHost() {
return fHost; return fHost;
} }
@ -35,16 +36,16 @@ public class SshSettings implements ISshSettings {
} }
@Override @Override
public String getSummary() { public String getSummary() {
String settings = getUser()+'@'+getHost(); String settings = getUser() + '@' + getHost();
if(getPort()!=ISshSettings.DEFAULT_SSH_PORT) { if (getPort() != ISshSettings.DEFAULT_SSH_PORT) {
settings += ":" + getPort(); //$NON-NLS-1$ settings += ":" + getPort(); //$NON-NLS-1$
} }
return settings; return settings;
} }
@Override @Override
public void load(ISettingsStore store) { public void load(ISettingsStore store) {
fHost = store.get("Host", "");//$NON-NLS-1$ //$NON-NLS-2$ fHost = store.get("Host", "");//$NON-NLS-1$ //$NON-NLS-2$
fUser = store.get("User", "");//$NON-NLS-1$ //$NON-NLS-2$ fUser = store.get("User", "");//$NON-NLS-1$ //$NON-NLS-2$
// ISettingsStore providers have to make sure that // ISettingsStore providers have to make sure that
@ -57,7 +58,7 @@ public class SshSettings implements ISshSettings {
} }
@Override @Override
public void save(ISettingsStore store) { public void save(ISettingsStore store) {
store.put("Host", fHost);//$NON-NLS-1$ store.put("Host", fHost);//$NON-NLS-1$
store.put("User", fUser);//$NON-NLS-1$ store.put("User", fUser);//$NON-NLS-1$
store.put("Port", fPort);//$NON-NLS-1$ store.put("Port", fPort);//$NON-NLS-1$
@ -68,15 +69,15 @@ public class SshSettings implements ISshSettings {
store.put("Keepalive", fKeepalive);//$NON-NLS-1$ store.put("Keepalive", fKeepalive);//$NON-NLS-1$
} }
@Override @Override
public int getTimeout() { public int getTimeout() {
try { try {
return Integer.parseInt(fTimeout); return Integer.parseInt(fTimeout);
} catch (NumberFormatException numberFormatException) { } catch (NumberFormatException numberFormatException) {
return 10; return 10;
} }
} }
public String getTimeoutString() { public String getTimeoutString() {
return fTimeout; return fTimeout;
} }
@ -86,13 +87,14 @@ public class SshSettings implements ISshSettings {
} }
@Override @Override
public int getKeepalive() { public int getKeepalive() {
try { try {
return Integer.parseInt(fKeepalive); return Integer.parseInt(fKeepalive);
} catch (NumberFormatException numberFormatException) { } catch (NumberFormatException numberFormatException) {
return 300; return 300;
} }
} }
public String getKeepaliveString() { public String getKeepaliveString() {
return fKeepalive; return fKeepalive;
} }
@ -102,15 +104,16 @@ public class SshSettings implements ISshSettings {
} }
@Override @Override
public String getUser() { public String getUser() {
return fUser; return fUser;
} }
public void setUser(String user) { public void setUser(String user) {
fUser = user; fUser = user;
} }
@Override @Override
public int getPort() { public int getPort() {
try { try {
return Integer.parseInt(fPort); return Integer.parseInt(fPort);
} catch (NumberFormatException numberFormatException) { } catch (NumberFormatException numberFormatException) {
@ -127,7 +130,7 @@ public class SshSettings implements ISshSettings {
} }
@Override @Override
public String getPassword() { public String getPassword() {
return fPassword; return fPassword;
} }

View file

@ -37,10 +37,11 @@ public class SshSettingsPage extends AbstractSettingsPage {
private Text fPassword; private Text fPassword;
public SshSettingsPage(SshSettings settings) { public SshSettingsPage(SshSettings settings) {
fTerminalSettings=settings; fTerminalSettings = settings;
} }
@Override @Override
public void saveSettings() { public void saveSettings() {
fTerminalSettings.setHost(fHostText.getText()); fTerminalSettings.setHost(fHostText.getText());
fTerminalSettings.setUser(fUser.getText()); fTerminalSettings.setUser(fUser.getText());
fTerminalSettings.setPassword(fPassword.getText()); fTerminalSettings.setPassword(fPassword.getText());
@ -50,23 +51,25 @@ public class SshSettingsPage extends AbstractSettingsPage {
} }
@Override @Override
public void loadSettings() { public void loadSettings() {
if(fTerminalSettings!=null) { if (fTerminalSettings != null) {
fHostText.setText(get(fTerminalSettings.getHost(),""));//$NON-NLS-1$ fHostText.setText(get(fTerminalSettings.getHost(), ""));//$NON-NLS-1$
fTimeout.setText(get(fTerminalSettings.getTimeoutString(),"0"));//$NON-NLS-1$ fTimeout.setText(get(fTerminalSettings.getTimeoutString(), "0"));//$NON-NLS-1$
fKeepalive.setText(get(fTerminalSettings.getKeepaliveString(),"300"));//$NON-NLS-1$ fKeepalive.setText(get(fTerminalSettings.getKeepaliveString(), "300"));//$NON-NLS-1$
fUser.setText(get(fTerminalSettings.getUser(),""));//$NON-NLS-1$ fUser.setText(get(fTerminalSettings.getUser(), ""));//$NON-NLS-1$
fPort.setText(get(fTerminalSettings.getPortString(), String.valueOf(ISshSettings.DEFAULT_SSH_PORT))); fPort.setText(get(fTerminalSettings.getPortString(), String.valueOf(ISshSettings.DEFAULT_SSH_PORT)));
fPassword.setText(get(fTerminalSettings.getPassword(),""));//$NON-NLS-1$ fPassword.setText(get(fTerminalSettings.getPassword(), ""));//$NON-NLS-1$
} }
} }
String get(String value, String def) { String get(String value, String def) {
if(value==null || value.length()==0) if (value == null || value.length() == 0)
return def; return def;
return value; return value;
} }
@Override @Override
public boolean validateSettings() { public boolean validateSettings() {
String message = null; String message = null;
int messageType = IMessageProvider.NONE; int messageType = IMessageProvider.NONE;
boolean valid = true; boolean valid = true;
@ -75,7 +78,10 @@ public class SshSettingsPage extends AbstractSettingsPage {
String m = "Please enter a host IP or name."; //$NON-NLS-1$ String m = "Please enter a host IP or name."; //$NON-NLS-1$
int mt = IMessageProvider.INFORMATION; int mt = IMessageProvider.INFORMATION;
updateControlDecoration(fHostText, m, mt); updateControlDecoration(fHostText, m, mt);
if (mt > messageType) { message = m; messageType = mt; } if (mt > messageType) {
message = m;
messageType = mt;
}
valid = false; valid = false;
} else { } else {
@ -85,7 +91,10 @@ public class SshSettingsPage extends AbstractSettingsPage {
String m = "Please enter a username."; //$NON-NLS-1$ String m = "Please enter a username."; //$NON-NLS-1$
int mt = IMessageProvider.INFORMATION; int mt = IMessageProvider.INFORMATION;
updateControlDecoration(fUser, m, mt); updateControlDecoration(fUser, m, mt);
if (mt > messageType) { message = m; messageType = mt; } if (mt > messageType) {
message = m;
messageType = mt;
}
valid = false; valid = false;
} else { } else {
@ -97,7 +106,10 @@ public class SshSettingsPage extends AbstractSettingsPage {
String m = "Invalid network port. Must be between 0 and 65535."; //$NON-NLS-1$ String m = "Invalid network port. Must be between 0 and 65535."; //$NON-NLS-1$
int mt = IMessageProvider.ERROR; int mt = IMessageProvider.ERROR;
updateControlDecoration(fPort, m, mt); updateControlDecoration(fPort, m, mt);
if (mt > messageType) { message = m; messageType = mt; } if (mt > messageType) {
message = m;
messageType = mt;
}
valid = false; valid = false;
} else { } else {
@ -108,7 +120,10 @@ public class SshSettingsPage extends AbstractSettingsPage {
String m = "Invalid timeout. Must be greater than 0."; //$NON-NLS-1$ String m = "Invalid timeout. Must be greater than 0."; //$NON-NLS-1$
int mt = IMessageProvider.ERROR; int mt = IMessageProvider.ERROR;
updateControlDecoration(fTimeout, m, mt); updateControlDecoration(fTimeout, m, mt);
if (mt > messageType) { message = m; messageType = mt; } if (mt > messageType) {
message = m;
messageType = mt;
}
valid = false; valid = false;
} else { } else {
@ -119,7 +134,10 @@ public class SshSettingsPage extends AbstractSettingsPage {
String m = "Invalid keep alive. Must be greater than 0."; //$NON-NLS-1$ String m = "Invalid keep alive. Must be greater than 0."; //$NON-NLS-1$
int mt = IMessageProvider.ERROR; int mt = IMessageProvider.ERROR;
updateControlDecoration(fKeepalive, m, mt); updateControlDecoration(fKeepalive, m, mt);
if (mt > messageType) { message = m; messageType = mt; } if (mt > messageType) {
message = m;
messageType = mt;
}
valid = false; valid = false;
} else { } else {
@ -132,8 +150,9 @@ public class SshSettingsPage extends AbstractSettingsPage {
setMessage(message, messageType); setMessage(message, messageType);
return valid; return valid;
} }
@Override @Override
public void createControl(Composite parent) { public void createControl(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE); Composite composite = new Composite(parent, SWT.NONE);
GridLayout gridLayout = new GridLayout(2, false); GridLayout gridLayout = new GridLayout(2, false);
GridData gridData = new GridData(GridData.FILL_HORIZONTAL); GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
@ -144,13 +163,14 @@ public class SshSettingsPage extends AbstractSettingsPage {
fHostText = createTextField(composite, SshMessages.HOST); fHostText = createTextField(composite, SshMessages.HOST);
fUser = createTextField(composite, SshMessages.USER); fUser = createTextField(composite, SshMessages.USER);
fPassword = createTextField(composite, SshMessages.PASSWORD,SWT.PASSWORD); fPassword = createTextField(composite, SshMessages.PASSWORD, SWT.PASSWORD);
fTimeout = createTextField(composite, SshMessages.TIMEOUT); fTimeout = createTextField(composite, SshMessages.TIMEOUT);
fKeepalive = createTextField(composite, SshMessages.KEEPALIVE); fKeepalive = createTextField(composite, SshMessages.KEEPALIVE);
fKeepalive.setToolTipText(SshMessages.KEEPALIVE_Tooltip); fKeepalive.setToolTipText(SshMessages.KEEPALIVE_Tooltip);
fPort = createTextField(composite, SshMessages.PORT); fPort = createTextField(composite, SshMessages.PORT);
loadSettings(); loadSettings();
} }
private Text createTextField(Composite composite, String labelTxt, int textOptions) { private Text createTextField(Composite composite, String labelTxt, int textOptions) {
GridData gridData; GridData gridData;
// Add label // Add label
@ -159,17 +179,18 @@ public class SshSettingsPage extends AbstractSettingsPage {
// Add control // Add control
gridData = new GridData(GridData.FILL_HORIZONTAL); gridData = new GridData(GridData.FILL_HORIZONTAL);
final Text text= new Text(composite, SWT.BORDER | textOptions); final Text text = new Text(composite, SWT.BORDER | textOptions);
text.setLayoutData(gridData); text.setLayoutData(gridData);
text.addModifyListener(new ModifyListener() { text.addModifyListener(new ModifyListener() {
@Override @Override
public void modifyText(ModifyEvent e) { public void modifyText(ModifyEvent e) {
fireListeners(text); fireListeners(text);
} }
}); });
createControlDecoration(text); createControlDecoration(text);
return text; return text;
} }
private Text createTextField(Composite composite, String labelTxt) { private Text createTextField(Composite composite, String labelTxt) {
return createTextField(composite, labelTxt, 0); return createTextField(composite, labelTxt, 0);
} }

View file

@ -62,26 +62,28 @@ public class UserValidationDialog extends TrayDialog {
*/ */
public UserValidationDialog(Shell parentShell, String location, String defaultName, String message) { public UserValidationDialog(Shell parentShell, String location, String defaultName, String message) {
super(parentShell); super(parentShell);
setShellStyle(getShellStyle() | SWT.RESIZE); setShellStyle(getShellStyle() | SWT.RESIZE);
this.defaultUsername = defaultName; this.defaultUsername = defaultName;
this.domain = location; this.domain = location;
this.message = message; this.message = message;
} }
/** /**
* @see Window#configureShell * @see Window#configureShell
*/ */
@Override @Override
protected void configureShell(Shell newShell) { protected void configureShell(Shell newShell) {
super.configureShell(newShell); super.configureShell(newShell);
newShell.setText(SshMessages.UserValidationDialog_required); newShell.setText(SshMessages.UserValidationDialog_required);
// set F1 help // set F1 help
PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, ISshConstants.HELP_USER_VALIDATION_DIALOG); PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, ISshConstants.HELP_USER_VALIDATION_DIALOG);
} }
/** /**
* @see Window#create * @see Window#create
*/ */
@Override @Override
public void create() { public void create() {
super.create(); super.create();
// add some default values // add some default values
usernameField.setText(defaultUsername); usernameField.setText(defaultUsername);
@ -100,7 +102,7 @@ public class UserValidationDialog extends TrayDialog {
* @see Dialog#createDialogArea * @see Dialog#createDialogArea
*/ */
@Override @Override
protected Control createDialogArea(Composite parent) { protected Control createDialogArea(Composite parent) {
Composite top = new Composite(parent, SWT.NONE); Composite top = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout(); GridLayout layout = new GridLayout();
layout.numColumns = 2; layout.numColumns = 2;
@ -142,7 +144,8 @@ public class UserValidationDialog extends TrayDialog {
if (isUsernameMutable) { if (isUsernameMutable) {
label.setText(NLS.bind(SshMessages.UserValidationDialog_labelUser, new String[] { domain })); label.setText(NLS.bind(SshMessages.UserValidationDialog_labelUser, new String[] { domain }));
} else { } else {
label.setText(NLS.bind(SshMessages.UserValidationDialog_labelPassword, (new Object[]{defaultUsername, domain}))); label.setText(NLS.bind(SshMessages.UserValidationDialog_labelPassword,
(new Object[] { defaultUsername, domain })));
} }
data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
data.horizontalSpan = 2; data.horizontalSpan = 2;
@ -152,7 +155,7 @@ public class UserValidationDialog extends TrayDialog {
createUsernameFields(main); createUsernameFields(main);
createPasswordFields(main); createPasswordFields(main);
if(domain != null) { if (domain != null) {
allowCachingButton = new Button(main, SWT.CHECK); allowCachingButton = new Button(main, SWT.CHECK);
allowCachingButton.setText(SshMessages.UserValidationDialog_6); allowCachingButton.setText(SshMessages.UserValidationDialog_6);
data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
@ -160,7 +163,7 @@ public class UserValidationDialog extends TrayDialog {
allowCachingButton.setLayoutData(data); allowCachingButton.setLayoutData(data);
allowCachingButton.addSelectionListener(new SelectionAdapter() { allowCachingButton.addSelectionListener(new SelectionAdapter() {
@Override @Override
public void widgetSelected(SelectionEvent e) { public void widgetSelected(SelectionEvent e) {
allowCaching = allowCachingButton.getSelection(); allowCaching = allowCachingButton.getSelection();
} }
}); });
@ -175,7 +178,8 @@ public class UserValidationDialog extends TrayDialog {
warningComposite.setLayoutData(data); warningComposite.setLayoutData(data);
Label warningLabel = new Label(warningComposite, SWT.NONE); Label warningLabel = new Label(warningComposite, SWT.NONE);
warningLabel.setImage(getImage(DLG_IMG_MESSAGE_WARNING)); warningLabel.setImage(getImage(DLG_IMG_MESSAGE_WARNING));
warningLabel.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING | GridData.HORIZONTAL_ALIGN_BEGINNING)); warningLabel.setLayoutData(
new GridData(GridData.VERTICAL_ALIGN_BEGINNING | GridData.HORIZONTAL_ALIGN_BEGINNING));
Label warningText = new Label(warningComposite, SWT.WRAP); Label warningText = new Label(warningComposite, SWT.WRAP);
warningText.setText(SshMessages.UserValidationDialog_7); warningText.setText(SshMessages.UserValidationDialog_7);
data = new GridData(GridData.FILL_HORIZONTAL); data = new GridData(GridData.FILL_HORIZONTAL);
@ -183,7 +187,7 @@ public class UserValidationDialog extends TrayDialog {
warningText.setLayoutData(data); warningText.setLayoutData(data);
} }
Dialog.applyDialogFont(parent); Dialog.applyDialogFont(parent);
return main; return main;
} }
@ -202,6 +206,7 @@ public class UserValidationDialog extends TrayDialog {
data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.ENTRY_FIELD_WIDTH); data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.ENTRY_FIELD_WIDTH);
passwordField.setLayoutData(data); passwordField.setLayoutData(data);
} }
/** /**
* Creates the three widgets that represent the user name entry area. * Creates the three widgets that represent the user name entry area.
* *
@ -255,12 +260,13 @@ public class UserValidationDialog extends TrayDialog {
* </p> * </p>
*/ */
@Override @Override
protected void okPressed() { protected void okPressed() {
password = passwordField.getText(); password = passwordField.getText();
username = usernameField.getText(); username = usernameField.getText();
super.okPressed(); super.okPressed();
} }
/** /**
* Sets whether or not the username field should be mutable. * Sets whether or not the username field should be mutable.
* This method must be called before create(), otherwise it * This method must be called before create(), otherwise it
@ -276,8 +282,8 @@ public class UserValidationDialog extends TrayDialog {
* @see org.eclipse.jface.dialogs.Dialog#close() * @see org.eclipse.jface.dialogs.Dialog#close()
*/ */
@Override @Override
public boolean close() { public boolean close() {
if(keyLockImage != null) { if (keyLockImage != null) {
keyLockImage.dispose(); keyLockImage.dispose();
} }
return super.close(); return super.close();

View file

@ -50,7 +50,7 @@ public class SshWizardConfigurationPanel extends AbstractExtendedConfigurationPa
private static final String SAVE_USER = "saveUser"; //$NON-NLS-1$ private static final String SAVE_USER = "saveUser"; //$NON-NLS-1$
private static final String SAVE_PASSWORD = "savePassword"; //$NON-NLS-1$ private static final String SAVE_PASSWORD = "savePassword"; //$NON-NLS-1$
private SshSettings sshSettings; private SshSettings sshSettings;
private ISettingsPage sshSettingsPage; private ISettingsPage sshSettingsPage;
private Button userButton; private Button userButton;
private Button passwordButton; private Button passwordButton;
@ -61,8 +61,8 @@ public class SshWizardConfigurationPanel extends AbstractExtendedConfigurationPa
* @param container The configuration panel container or <code>null</code>. * @param container The configuration panel container or <code>null</code>.
*/ */
public SshWizardConfigurationPanel(IConfigurationPanelContainer container) { public SshWizardConfigurationPanel(IConfigurationPanelContainer container) {
super(container); super(container);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setupPanel(org.eclipse.swt.widgets.Composite) * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setupPanel(org.eclipse.swt.widgets.Composite)
@ -75,7 +75,8 @@ public class SshWizardConfigurationPanel extends AbstractExtendedConfigurationPa
panel.setLayoutData(data); panel.setLayoutData(data);
// Create the host selection combo // Create the host selection combo
if (isWithoutSelection()) createHostsUI(panel, true); if (isWithoutSelection())
createHostsUI(panel, true);
SshConnector conn = new SshConnector(); SshConnector conn = new SshConnector();
sshSettings = (SshSettings) conn.getSshSettings(); sshSettings = (SshSettings) conn.getSshSettings();
@ -84,7 +85,7 @@ public class SshWizardConfigurationPanel extends AbstractExtendedConfigurationPa
sshSettingsPage = new SshSettingsPage(sshSettings); sshSettingsPage = new SshSettingsPage(sshSettings);
if (sshSettingsPage instanceof AbstractSettingsPage) { if (sshSettingsPage instanceof AbstractSettingsPage) {
((AbstractSettingsPage)sshSettingsPage).setHasControlDecoration(true); ((AbstractSettingsPage) sshSettingsPage).setHasControlDecoration(true);
} }
sshSettingsPage.createControl(panel); sshSettingsPage.createControl(panel);
@ -92,7 +93,8 @@ public class SshWizardConfigurationPanel extends AbstractExtendedConfigurationPa
sshSettingsPage.addListener(new ISettingsPage.Listener() { sshSettingsPage.addListener(new ISettingsPage.Listener() {
@Override @Override
public void onSettingsPageChanged(Control control) { public void onSettingsPageChanged(Control control) {
if (getContainer() != null) getContainer().validate(); if (getContainer() != null)
getContainer().validate();
} }
}); });
@ -110,34 +112,42 @@ public class SshWizardConfigurationPanel extends AbstractExtendedConfigurationPa
*/ */
@Override @Override
public void setupData(Map<String, Object> data) { public void setupData(Map<String, Object> data) {
if (data == null || sshSettings == null || sshSettingsPage == null) return; if (data == null || sshSettings == null || sshSettingsPage == null)
return;
String value = (String)data.get(ITerminalsConnectorConstants.PROP_IP_HOST); String value = (String) data.get(ITerminalsConnectorConstants.PROP_IP_HOST);
if (value != null) sshSettings.setHost(value); if (value != null)
sshSettings.setHost(value);
Object v = data.get(ITerminalsConnectorConstants.PROP_IP_PORT); Object v = data.get(ITerminalsConnectorConstants.PROP_IP_PORT);
value = v != null ? v.toString() : null; value = v != null ? v.toString() : null;
if (value != null) sshSettings.setPort(value); if (value != null)
sshSettings.setPort(value);
v = data.get(ITerminalsConnectorConstants.PROP_TIMEOUT); v = data.get(ITerminalsConnectorConstants.PROP_TIMEOUT);
value = v != null ? v.toString() : null; value = v != null ? v.toString() : null;
if (value != null) sshSettings.setTimeout(value); if (value != null)
sshSettings.setTimeout(value);
v = data.get(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE); v = data.get(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE);
value = v != null ? v.toString() : null; value = v != null ? v.toString() : null;
if (value != null) sshSettings.setKeepalive(value); if (value != null)
sshSettings.setKeepalive(value);
value = (String)data.get(ITerminalsConnectorConstants.PROP_SSH_PASSWORD); value = (String) data.get(ITerminalsConnectorConstants.PROP_SSH_PASSWORD);
if (value != null) sshSettings.setPassword(value); if (value != null)
sshSettings.setPassword(value);
value = (String)data.get(ITerminalsConnectorConstants.PROP_SSH_USER); value = (String) data.get(ITerminalsConnectorConstants.PROP_SSH_USER);
if (value != null) sshSettings.setUser(value); if (value != null)
sshSettings.setUser(value);
value = (String)data.get(ITerminalsConnectorConstants.PROP_ENCODING); value = (String) data.get(ITerminalsConnectorConstants.PROP_ENCODING);
if (value != null) setEncoding(value); if (value != null)
setEncoding(value);
sshSettingsPage.loadSettings(); sshSettingsPage.loadSettings();
} }
/** /**
* Returns the default user name. * Returns the default user name.
@ -151,7 +161,8 @@ public class SshWizardConfigurationPanel extends AbstractExtendedConfigurationPa
ITerminalContextPropertiesProvider provider = TerminalContextPropertiesProviderFactory.getProvider(element); ITerminalContextPropertiesProvider provider = TerminalContextPropertiesProviderFactory.getProvider(element);
if (provider != null) { if (provider != null) {
Object user = provider.getProperty(element, IContextPropertiesConstants.PROP_DEFAULT_USER); Object user = provider.getProperty(element, IContextPropertiesConstants.PROP_DEFAULT_USER);
if (user instanceof String) return ((String) user).trim(); if (user instanceof String)
return ((String) user).trim();
} }
} }
@ -163,20 +174,22 @@ public class SshWizardConfigurationPanel extends AbstractExtendedConfigurationPa
*/ */
@Override @Override
public void extractData(Map<String, Object> data) { public void extractData(Map<String, Object> data) {
if (data == null) return; if (data == null)
return;
// set the terminal connector id for ssh // set the terminal connector id for ssh
data.put(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID, "org.eclipse.tm.terminal.connector.ssh.SshConnector"); //$NON-NLS-1$ data.put(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID,
"org.eclipse.tm.terminal.connector.ssh.SshConnector"); //$NON-NLS-1$
sshSettingsPage.saveSettings(); sshSettingsPage.saveSettings();
data.put(ITerminalsConnectorConstants.PROP_IP_HOST,sshSettings.getHost()); data.put(ITerminalsConnectorConstants.PROP_IP_HOST, sshSettings.getHost());
data.put(ITerminalsConnectorConstants.PROP_IP_PORT, Integer.valueOf(sshSettings.getPort())); data.put(ITerminalsConnectorConstants.PROP_IP_PORT, Integer.valueOf(sshSettings.getPort()));
data.put(ITerminalsConnectorConstants.PROP_TIMEOUT, Integer.valueOf(sshSettings.getTimeout())); data.put(ITerminalsConnectorConstants.PROP_TIMEOUT, Integer.valueOf(sshSettings.getTimeout()));
data.put(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE, Integer.valueOf(sshSettings.getKeepalive())); data.put(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE, Integer.valueOf(sshSettings.getKeepalive()));
data.put(ITerminalsConnectorConstants.PROP_SSH_PASSWORD, sshSettings.getPassword()); data.put(ITerminalsConnectorConstants.PROP_SSH_PASSWORD, sshSettings.getPassword());
data.put(ITerminalsConnectorConstants.PROP_SSH_USER, sshSettings.getUser()); data.put(ITerminalsConnectorConstants.PROP_SSH_USER, sshSettings.getUser());
data.put(ITerminalsConnectorConstants.PROP_ENCODING, getEncoding()); data.put(ITerminalsConnectorConstants.PROP_ENCODING, getEncoding());
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#fillSettingsForHost(java.lang.String) * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#fillSettingsForHost(java.lang.String)
@ -185,8 +198,8 @@ public class SshWizardConfigurationPanel extends AbstractExtendedConfigurationPa
protected void fillSettingsForHost(String host) { protected void fillSettingsForHost(String host) {
boolean saveUser = true; boolean saveUser = true;
boolean savePassword = false; boolean savePassword = false;
if (host != null && host.length() != 0){ if (host != null && host.length() != 0) {
if (hostSettingsMap.containsKey(host)){ if (hostSettingsMap.containsKey(host)) {
Map<String, String> hostSettings = hostSettingsMap.get(host); Map<String, String> hostSettings = hostSettingsMap.get(host);
if (hostSettings.get(ITerminalsConnectorConstants.PROP_IP_HOST) != null) { if (hostSettings.get(ITerminalsConnectorConstants.PROP_IP_HOST) != null) {
sshSettings.setHost(hostSettings.get(ITerminalsConnectorConstants.PROP_IP_HOST)); sshSettings.setHost(hostSettings.get(ITerminalsConnectorConstants.PROP_IP_HOST));
@ -206,7 +219,7 @@ public class SshWizardConfigurationPanel extends AbstractExtendedConfigurationPa
if (hostSettings.get(SAVE_PASSWORD) != null) { if (hostSettings.get(SAVE_PASSWORD) != null) {
savePassword = new Boolean(hostSettings.get(SAVE_PASSWORD)).booleanValue(); savePassword = new Boolean(hostSettings.get(SAVE_PASSWORD)).booleanValue();
} }
if (!savePassword){ if (!savePassword) {
sshSettings.setPassword(""); //$NON-NLS-1$ sshSettings.setPassword(""); //$NON-NLS-1$
} else { } else {
String password = accessSecurePassword(sshSettings.getHost()); String password = accessSecurePassword(sshSettings.getHost());
@ -218,7 +231,8 @@ public class SshWizardConfigurationPanel extends AbstractExtendedConfigurationPa
String encoding = hostSettings.get(ITerminalsConnectorConstants.PROP_ENCODING); String encoding = hostSettings.get(ITerminalsConnectorConstants.PROP_ENCODING);
if (encoding == null || "null".equals(encoding)) { //$NON-NLS-1$ if (encoding == null || "null".equals(encoding)) { //$NON-NLS-1$
String defaultEncoding = getSelectionEncoding(); String defaultEncoding = getSelectionEncoding();
encoding = defaultEncoding != null && !"".equals(defaultEncoding.trim()) ? defaultEncoding.trim() : "ISO-8859-1"; //$NON-NLS-1$ //$NON-NLS-2$ encoding = defaultEncoding != null && !"".equals(defaultEncoding.trim()) ? defaultEncoding.trim() //$NON-NLS-1$
: "ISO-8859-1"; //$NON-NLS-1$
} }
setEncoding(encoding); setEncoding(encoding);
} else { } else {
@ -238,10 +252,10 @@ public class SshWizardConfigurationPanel extends AbstractExtendedConfigurationPa
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel#doSaveWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String) * @see org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel#doSaveWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String)
*/ */
@Override @Override
public void doSaveWidgetValues(IDialogSettings settings, String idPrefix) { public void doSaveWidgetValues(IDialogSettings settings, String idPrefix) {
saveSettingsForHost(true); saveSettingsForHost(true);
super.doSaveWidgetValues(settings, idPrefix); super.doSaveWidgetValues(settings, idPrefix);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#saveSettingsForHost(boolean) * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#saveSettingsForHost(boolean)
@ -252,20 +266,20 @@ public class SshWizardConfigurationPanel extends AbstractExtendedConfigurationPa
boolean savePassword = passwordButton.getSelection(); boolean savePassword = passwordButton.getSelection();
String host = getHostFromSettings(); String host = getHostFromSettings();
if (host != null && host.length() != 0) { if (host != null && host.length() != 0) {
if (hostSettingsMap.containsKey(host)){ if (hostSettingsMap.containsKey(host)) {
Map<String, String> hostSettings = hostSettingsMap.get(host); Map<String, String> hostSettings = hostSettingsMap.get(host);
hostSettings.put(ITerminalsConnectorConstants.PROP_IP_HOST, sshSettings.getHost()); hostSettings.put(ITerminalsConnectorConstants.PROP_IP_HOST, sshSettings.getHost());
hostSettings.put(ITerminalsConnectorConstants.PROP_IP_PORT, Integer.toString(sshSettings.getPort())); hostSettings.put(ITerminalsConnectorConstants.PROP_IP_PORT, Integer.toString(sshSettings.getPort()));
hostSettings.put(ITerminalsConnectorConstants.PROP_TIMEOUT, Integer.toString(sshSettings.getTimeout())); hostSettings.put(ITerminalsConnectorConstants.PROP_TIMEOUT, Integer.toString(sshSettings.getTimeout()));
hostSettings.put(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE, Integer.toString(sshSettings.getKeepalive())); hostSettings.put(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE,
Integer.toString(sshSettings.getKeepalive()));
if (saveUser) { if (saveUser) {
if (sshSettings.getUser() != null) { if (sshSettings.getUser() != null) {
hostSettings.put(ITerminalsConnectorConstants.PROP_SSH_USER, sshSettings.getUser()); hostSettings.put(ITerminalsConnectorConstants.PROP_SSH_USER, sshSettings.getUser());
} else { } else {
hostSettings.remove(ITerminalsConnectorConstants.PROP_SSH_USER); hostSettings.remove(ITerminalsConnectorConstants.PROP_SSH_USER);
} }
} } else {
else {
hostSettings.remove(ITerminalsConnectorConstants.PROP_SSH_USER); hostSettings.remove(ITerminalsConnectorConstants.PROP_SSH_USER);
} }
@ -280,18 +294,20 @@ public class SshWizardConfigurationPanel extends AbstractExtendedConfigurationPa
hostSettings.put(SAVE_USER, Boolean.toString(saveUser)); hostSettings.put(SAVE_USER, Boolean.toString(saveUser));
hostSettings.put(SAVE_PASSWORD, Boolean.toString(savePassword)); hostSettings.put(SAVE_PASSWORD, Boolean.toString(savePassword));
if (savePassword && sshSettings.getPassword() != null && sshSettings.getPassword().length() != 0){ if (savePassword && sshSettings.getPassword() != null && sshSettings.getPassword().length() != 0) {
saveSecurePassword(host, sshSettings.getPassword()); saveSecurePassword(host, sshSettings.getPassword());
} }
// maybe unchecked the password button - so try to remove a saved password - if any // maybe unchecked the password button - so try to remove a saved password - if any
if (!savePassword) removeSecurePassword(host); if (!savePassword)
removeSecurePassword(host);
} else if (add) { } else if (add) {
Map<String, String> hostSettings = new HashMap<String, String>(); Map<String, String> hostSettings = new HashMap<String, String>();
hostSettings.put(ITerminalsConnectorConstants.PROP_IP_HOST, sshSettings.getHost()); hostSettings.put(ITerminalsConnectorConstants.PROP_IP_HOST, sshSettings.getHost());
hostSettings.put(ITerminalsConnectorConstants.PROP_IP_PORT, Integer.toString(sshSettings.getPort())); hostSettings.put(ITerminalsConnectorConstants.PROP_IP_PORT, Integer.toString(sshSettings.getPort()));
hostSettings.put(ITerminalsConnectorConstants.PROP_TIMEOUT, Integer.toString(sshSettings.getTimeout())); hostSettings.put(ITerminalsConnectorConstants.PROP_TIMEOUT, Integer.toString(sshSettings.getTimeout()));
hostSettings.put(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE, Integer.toString(sshSettings.getKeepalive())); hostSettings.put(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE,
Integer.toString(sshSettings.getKeepalive()));
if (saveUser) { if (saveUser) {
if (sshSettings.getUser() != null) { if (sshSettings.getUser() != null) {
hostSettings.put(ITerminalsConnectorConstants.PROP_SSH_USER, sshSettings.getUser()); hostSettings.put(ITerminalsConnectorConstants.PROP_SSH_USER, sshSettings.getUser());
@ -302,7 +318,7 @@ public class SshWizardConfigurationPanel extends AbstractExtendedConfigurationPa
hostSettings.put(SAVE_PASSWORD, Boolean.toString(savePassword)); hostSettings.put(SAVE_PASSWORD, Boolean.toString(savePassword));
hostSettingsMap.put(host, hostSettings); hostSettingsMap.put(host, hostSettings);
if (savePassword && sshSettings.getPassword() != null && sshSettings.getPassword().length() != 0){ if (savePassword && sshSettings.getPassword() != null && sshSettings.getPassword().length() != 0) {
saveSecurePassword(host, sshSettings.getPassword()); saveSecurePassword(host, sshSettings.getPassword());
} }
} }
@ -328,8 +344,8 @@ public class SshWizardConfigurationPanel extends AbstractExtendedConfigurationPa
if (node != null) { if (node != null) {
try { try {
node.put("password", password, true); //$NON-NLS-1$ node.put("password", password, true); //$NON-NLS-1$
} } catch (StorageException ex) {
catch (StorageException ex) { /* ignored on purpose */ } /* ignored on purpose */ }
} }
} }
} }
@ -353,8 +369,8 @@ public class SshWizardConfigurationPanel extends AbstractExtendedConfigurationPa
String password = null; String password = null;
try { try {
password = node.get("password", null); //$NON-NLS-1$ password = node.get("password", null); //$NON-NLS-1$
} } catch (StorageException ex) {
catch (StorageException ex) { /* ignored on purpose */ } /* ignored on purpose */ }
return password; return password;
} }
@ -385,7 +401,7 @@ public class SshWizardConfigurationPanel extends AbstractExtendedConfigurationPa
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#isValid() * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#isValid()
*/ */
@Override @Override
public boolean isValid(){ public boolean isValid() {
return isEncodingValid() && sshSettingsPage.validateSettings(); return isEncodingValid() && sshSettingsPage.validateSettings();
} }
@ -393,10 +409,10 @@ public class SshWizardConfigurationPanel extends AbstractExtendedConfigurationPa
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#getHostFromSettings() * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#getHostFromSettings()
*/ */
@Override @Override
protected String getHostFromSettings() { protected String getHostFromSettings() {
sshSettingsPage.saveSettings(); sshSettingsPage.saveSettings();
return sshSettings.getHost(); return sshSettings.getHost();
} }
private void createSaveButtonsUI(final Composite parent, boolean separator) { private void createSaveButtonsUI(final Composite parent, boolean separator) {
Assert.isNotNull(parent); Assert.isNotNull(parent);

View file

@ -92,24 +92,26 @@ public class SshLauncherDelegate extends AbstractLauncherDelegate {
* *
* @return The terminal title string or <code>null</code>. * @return The terminal title string or <code>null</code>.
*/ */
private String getTerminalTitle(Map<String, Object> properties) { private String getTerminalTitle(Map<String, Object> properties) {
// Try to see if the user set a title explicitly via the properties map. // Try to see if the user set a title explicitly via the properties map.
String title = getDefaultTerminalTitle(properties); String title = getDefaultTerminalTitle(properties);
if (title != null) return title; if (title != null)
return title;
//No title,try to calculate the title //No title,try to calculate the title
String host = (String)properties.get(ITerminalsConnectorConstants.PROP_IP_HOST); String host = (String) properties.get(ITerminalsConnectorConstants.PROP_IP_HOST);
String user = (String)properties.get(ITerminalsConnectorConstants.PROP_SSH_USER); String user = (String) properties.get(ITerminalsConnectorConstants.PROP_SSH_USER);
Object value = properties.get(ITerminalsConnectorConstants.PROP_IP_PORT); Object value = properties.get(ITerminalsConnectorConstants.PROP_IP_PORT);
String port = value != null ? value.toString() : null; String port = value != null ? value.toString() : null;
if (host != null && user!= null) { if (host != null && user != null) {
DateFormat format = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); DateFormat format = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
String date = format.format(new Date(System.currentTimeMillis())); String date = format.format(new Date(System.currentTimeMillis()));
if (port != null && Integer.valueOf(port).intValue() != ISshSettings.DEFAULT_SSH_PORT) { if (port != null && Integer.valueOf(port).intValue() != ISshSettings.DEFAULT_SSH_PORT) {
return NLS.bind(Messages.SshLauncherDelegate_terminalTitle_port, new String[]{user, host, port, date}); return NLS.bind(Messages.SshLauncherDelegate_terminalTitle_port,
new String[] { user, host, port, date });
} }
return NLS.bind(Messages.SshLauncherDelegate_terminalTitle, new String[]{user, host, date}); return NLS.bind(Messages.SshLauncherDelegate_terminalTitle, new String[] { user, host, date });
} }
return Messages.SshLauncherDelegate_terminalTitle_default; return Messages.SshLauncherDelegate_terminalTitle_default;
@ -118,40 +120,42 @@ public class SshLauncherDelegate extends AbstractLauncherDelegate {
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.core.runtime.PlatformObject#getAdapter(java.lang.Class) * @see org.eclipse.core.runtime.PlatformObject#getAdapter(java.lang.Class)
*/ */
@Override @Override
public Object getAdapter(Class adapter) { public Object getAdapter(Class adapter) {
if (IMementoHandler.class.equals(adapter)) { if (IMementoHandler.class.equals(adapter)) {
return mementoHandler; return mementoHandler;
} }
return super.getAdapter(adapter); return super.getAdapter(adapter);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#createTerminalConnector(java.util.Map) * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#createTerminalConnector(java.util.Map)
*/ */
@Override @Override
public ITerminalConnector createTerminalConnector(Map<String, Object> properties) { public ITerminalConnector createTerminalConnector(Map<String, Object> properties) {
Assert.isNotNull(properties); Assert.isNotNull(properties);
// Check for the terminal connector id // Check for the terminal connector id
String connectorId = (String)properties.get(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID); String connectorId = (String) properties.get(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID);
if (connectorId == null) connectorId = "org.eclipse.tm.terminal.connector.ssh.SshConnector"; //$NON-NLS-1$ if (connectorId == null)
connectorId = "org.eclipse.tm.terminal.connector.ssh.SshConnector"; //$NON-NLS-1$
// Extract the ssh properties // Extract the ssh properties
String host = (String)properties.get(ITerminalsConnectorConstants.PROP_IP_HOST); String host = (String) properties.get(ITerminalsConnectorConstants.PROP_IP_HOST);
Object value = properties.get(ITerminalsConnectorConstants.PROP_IP_PORT); Object value = properties.get(ITerminalsConnectorConstants.PROP_IP_PORT);
String port = value != null ? value.toString() : null; String port = value != null ? value.toString() : null;
value = properties.get(ITerminalsConnectorConstants.PROP_TIMEOUT); value = properties.get(ITerminalsConnectorConstants.PROP_TIMEOUT);
String timeout = value != null ? value.toString() : null; String timeout = value != null ? value.toString() : null;
value = properties.get(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE); value = properties.get(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE);
String keepAlive = value != null ? value.toString() : null; String keepAlive = value != null ? value.toString() : null;
String password = (String)properties.get(ITerminalsConnectorConstants.PROP_SSH_PASSWORD); String password = (String) properties.get(ITerminalsConnectorConstants.PROP_SSH_PASSWORD);
String user = (String)properties.get(ITerminalsConnectorConstants.PROP_SSH_USER); String user = (String) properties.get(ITerminalsConnectorConstants.PROP_SSH_USER);
int portOffset = 0; int portOffset = 0;
if (properties.get(ITerminalsConnectorConstants.PROP_IP_PORT_OFFSET) instanceof Integer) { if (properties.get(ITerminalsConnectorConstants.PROP_IP_PORT_OFFSET) instanceof Integer) {
portOffset = ((Integer)properties.get(ITerminalsConnectorConstants.PROP_IP_PORT_OFFSET)).intValue(); portOffset = ((Integer) properties.get(ITerminalsConnectorConstants.PROP_IP_PORT_OFFSET)).intValue();
if (portOffset < 0) portOffset = 0; if (portOffset < 0)
portOffset = 0;
} }
// The real port to connect to is port + portOffset // The real port to connect to is port + portOffset

View file

@ -26,7 +26,6 @@ import org.eclipse.ui.IMemento;
*/ */
public class SshMementoHandler implements IMementoHandler { public class SshMementoHandler implements IMementoHandler {
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler#saveState(org.eclipse.ui.IMemento, java.util.Map) * @see org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler#saveState(org.eclipse.ui.IMemento, java.util.Map)
*/ */
@ -37,15 +36,21 @@ public class SshMementoHandler implements IMementoHandler {
// Do not write the terminal title to the memento -> needs to // Do not write the terminal title to the memento -> needs to
// be recreated at the time of restoration. // be recreated at the time of restoration.
memento.putString(ITerminalsConnectorConstants.PROP_IP_HOST, (String)properties.get(ITerminalsConnectorConstants.PROP_IP_HOST)); memento.putString(ITerminalsConnectorConstants.PROP_IP_HOST,
(String) properties.get(ITerminalsConnectorConstants.PROP_IP_HOST));
Object value = properties.get(ITerminalsConnectorConstants.PROP_IP_PORT); Object value = properties.get(ITerminalsConnectorConstants.PROP_IP_PORT);
memento.putInteger(ITerminalsConnectorConstants.PROP_IP_PORT, value instanceof Integer ? ((Integer)value).intValue() : -1); memento.putInteger(ITerminalsConnectorConstants.PROP_IP_PORT,
value instanceof Integer ? ((Integer) value).intValue() : -1);
value = properties.get(ITerminalsConnectorConstants.PROP_TIMEOUT); value = properties.get(ITerminalsConnectorConstants.PROP_TIMEOUT);
memento.putInteger(ITerminalsConnectorConstants.PROP_TIMEOUT, value instanceof Integer ? ((Integer)value).intValue() : -1); memento.putInteger(ITerminalsConnectorConstants.PROP_TIMEOUT,
value instanceof Integer ? ((Integer) value).intValue() : -1);
value = properties.get(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE); value = properties.get(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE);
memento.putInteger(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE, value instanceof Integer ? ((Integer)value).intValue() : -1); memento.putInteger(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE,
memento.putString(ITerminalsConnectorConstants.PROP_SSH_USER, (String)properties.get(ITerminalsConnectorConstants.PROP_SSH_USER)); value instanceof Integer ? ((Integer) value).intValue() : -1);
memento.putString(ITerminalsConnectorConstants.PROP_ENCODING, (String)properties.get(ITerminalsConnectorConstants.PROP_ENCODING)); memento.putString(ITerminalsConnectorConstants.PROP_SSH_USER,
(String) properties.get(ITerminalsConnectorConstants.PROP_SSH_USER));
memento.putString(ITerminalsConnectorConstants.PROP_ENCODING,
(String) properties.get(ITerminalsConnectorConstants.PROP_ENCODING));
// The password is stored within the Eclipse secure preferences -> no need to store it to the memento // The password is stored within the Eclipse secure preferences -> no need to store it to the memento
// //
@ -55,22 +60,22 @@ public class SshMementoHandler implements IMementoHandler {
String password = properties.getStringProperty(ITerminalsConnectorConstants.PROP_SSH_PASSWORD); String password = properties.getStringProperty(ITerminalsConnectorConstants.PROP_SSH_PASSWORD);
if (password != null) { if (password != null) {
try { try {
// Generate a temporary key. In practice, you would save this key. // Generate a temporary key. In practice, you would save this key.
// See also Encrypting with DES Using a Pass Phrase. // See also Encrypting with DES Using a Pass Phrase.
// SecretKey key = KeyGenerator.getInstance("DESede").generateKey(); // SecretKey key = KeyGenerator.getInstance("DESede").generateKey();
SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede"); //$NON-NLS-1$ SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede"); //$NON-NLS-1$
SecretKey key = factory.generateSecret(new DESKeySpec((ITerminalsConnectorConstants.PROP_SSH_PASSWORD + ".SshMementoHandler").getBytes("UTF-8"))); //$NON-NLS-1$ //$NON-NLS-2$ SecretKey key = factory.generateSecret(new DESKeySpec((ITerminalsConnectorConstants.PROP_SSH_PASSWORD + ".SshMementoHandler").getBytes("UTF-8"))); //$NON-NLS-1$ //$NON-NLS-2$
Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); //$NON-NLS-1$ Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); //$NON-NLS-1$
cipher.init(Cipher.ENCRYPT_MODE, key); cipher.init(Cipher.ENCRYPT_MODE, key);
String encrypedPwd = new String(Base64.encode(cipher.doFinal(password.getBytes("UTF-8")))); //$NON-NLS-1$ String encrypedPwd = new String(Base64.encode(cipher.doFinal(password.getBytes("UTF-8")))); //$NON-NLS-1$
memento.putString(ITerminalsConnectorConstants.PROP_SSH_PASSWORD, encrypedPwd); memento.putString(ITerminalsConnectorConstants.PROP_SSH_PASSWORD, encrypedPwd);
} }
catch (Exception e) { catch (Exception e) {
if (Platform.inDebugMode()) e.printStackTrace(); if (Platform.inDebugMode()) e.printStackTrace();
} }
} }
*/ */
} }
@ -84,50 +89,57 @@ public class SshMementoHandler implements IMementoHandler {
Assert.isNotNull(properties); Assert.isNotNull(properties);
// Restore the terminal properties from the memento // Restore the terminal properties from the memento
properties.put(ITerminalsConnectorConstants.PROP_IP_HOST, memento.getString(ITerminalsConnectorConstants.PROP_IP_HOST)); properties.put(ITerminalsConnectorConstants.PROP_IP_HOST,
properties.put(ITerminalsConnectorConstants.PROP_IP_PORT, memento.getInteger(ITerminalsConnectorConstants.PROP_IP_PORT)); memento.getString(ITerminalsConnectorConstants.PROP_IP_HOST));
properties.put(ITerminalsConnectorConstants.PROP_TIMEOUT, memento.getInteger(ITerminalsConnectorConstants.PROP_TIMEOUT)); properties.put(ITerminalsConnectorConstants.PROP_IP_PORT,
properties.put(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE, memento.getInteger(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE)); memento.getInteger(ITerminalsConnectorConstants.PROP_IP_PORT));
properties.put(ITerminalsConnectorConstants.PROP_SSH_USER, memento.getString(ITerminalsConnectorConstants.PROP_SSH_USER)); properties.put(ITerminalsConnectorConstants.PROP_TIMEOUT,
properties.put(ITerminalsConnectorConstants.PROP_ENCODING, memento.getString(ITerminalsConnectorConstants.PROP_ENCODING)); memento.getInteger(ITerminalsConnectorConstants.PROP_TIMEOUT));
properties.put(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE,
memento.getInteger(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE));
properties.put(ITerminalsConnectorConstants.PROP_SSH_USER,
memento.getString(ITerminalsConnectorConstants.PROP_SSH_USER));
properties.put(ITerminalsConnectorConstants.PROP_ENCODING,
memento.getString(ITerminalsConnectorConstants.PROP_ENCODING));
// The password is stored within the Eclipse secure preferences -> restore it from there // The password is stored within the Eclipse secure preferences -> restore it from there
// To access the secure storage, we need the preference instance // To access the secure storage, we need the preference instance
String password = null; String password = null;
ISecurePreferences preferences = SecurePreferencesFactory.getDefault(); ISecurePreferences preferences = SecurePreferencesFactory.getDefault();
if (preferences != null && (String)properties.get(ITerminalsConnectorConstants.PROP_IP_HOST) != null) { if (preferences != null && (String) properties.get(ITerminalsConnectorConstants.PROP_IP_HOST) != null) {
// Construct the secure preferences node key // Construct the secure preferences node key
String nodeKey = "/Target Explorer SSH Password/" + (String)properties.get(ITerminalsConnectorConstants.PROP_IP_HOST); //$NON-NLS-1$ String nodeKey = "/Target Explorer SSH Password/" //$NON-NLS-1$
+ (String) properties.get(ITerminalsConnectorConstants.PROP_IP_HOST);
ISecurePreferences node = preferences.node(nodeKey); ISecurePreferences node = preferences.node(nodeKey);
if (node != null) { if (node != null) {
try { try {
password = node.get("password", null); //$NON-NLS-1$ password = node.get("password", null); //$NON-NLS-1$
} } catch (StorageException ex) {
catch (StorageException ex) { /* ignored on purpose */ } /* ignored on purpose */ }
} }
} }
// Example of restoring the password from an 3DES encrypted string. Do not remove! // Example of restoring the password from an 3DES encrypted string. Do not remove!
/* /*
String encrypedPwd = memento.getString(ITerminalsConnectorConstants.PROP_SSH_PASSWORD); String encrypedPwd = memento.getString(ITerminalsConnectorConstants.PROP_SSH_PASSWORD);
if (encrypedPwd != null) { if (encrypedPwd != null) {
try { try {
SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede"); //$NON-NLS-1$ SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede"); //$NON-NLS-1$
SecretKey key = factory.generateSecret(new DESKeySpec((ITerminalsConnectorConstants.PROP_SSH_PASSWORD + ".SshMementoHandler").getBytes("UTF-8"))); //$NON-NLS-1$ //$NON-NLS-2$ SecretKey key = factory.generateSecret(new DESKeySpec((ITerminalsConnectorConstants.PROP_SSH_PASSWORD + ".SshMementoHandler").getBytes("UTF-8"))); //$NON-NLS-1$ //$NON-NLS-2$
Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); //$NON-NLS-1$ Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); //$NON-NLS-1$
cipher.init(Cipher.DECRYPT_MODE, key); cipher.init(Cipher.DECRYPT_MODE, key);
byte[] encBytes = Base64.decode(encrypedPwd.getBytes("UTF-8")); //$NON-NLS-1$ byte[] encBytes = Base64.decode(encrypedPwd.getBytes("UTF-8")); //$NON-NLS-1$
byte[] decBytes = cipher.doFinal(encBytes); byte[] decBytes = cipher.doFinal(encBytes);
password = new String(decBytes); password = new String(decBytes);
} }
catch (Exception e) { catch (Exception e) {
if (Platform.inDebugMode()) e.printStackTrace(); if (Platform.inDebugMode()) e.printStackTrace();
} }
} }
*/ */
properties.put(ITerminalsConnectorConstants.PROP_SSH_PASSWORD, password); properties.put(ITerminalsConnectorConstants.PROP_SSH_PASSWORD, password);
} }

View file

@ -69,7 +69,7 @@ public class UIPlugin extends AbstractUIPlugin {
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/ */
@Override @Override
public void start(BundleContext context) throws Exception { public void start(BundleContext context) throws Exception {
super.start(context); super.start(context);
plugin = this; plugin = this;
} }
@ -78,7 +78,7 @@ public class UIPlugin extends AbstractUIPlugin {
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/ */
@Override @Override
public void stop(BundleContext context) throws Exception { public void stop(BundleContext context) throws Exception {
plugin = null; plugin = null;
super.stop(context); super.stop(context);
} }

View file

@ -30,13 +30,19 @@ public interface ITelnetSettings {
static final String EOL_CRLF = "CR+LF"; //$NON-NLS-1$ static final String EOL_CRLF = "CR+LF"; //$NON-NLS-1$
String getHost(); String getHost();
int getNetworkPort(); int getNetworkPort();
int getTimeout(); int getTimeout();
/** /**
* @since 4.2 * @since 4.2
*/ */
String getEndOfLine(); String getEndOfLine();
String getSummary(); String getSummary();
void load(ISettingsStore store); void load(ISettingsStore store);
void save(ISettingsStore store); void save(ISettingsStore store);
} }

View file

@ -22,17 +22,15 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
public class NetworkPortMap { public class NetworkPortMap {
public static final String PROP_NAMETGTCONS = "tgtcons"; //$NON-NLS-1$ public static final String PROP_NAMETGTCONS = "tgtcons"; //$NON-NLS-1$
public static final String PROP_NAMETELNET = "telnet"; //$NON-NLS-1$ public static final String PROP_NAMETELNET = "telnet"; //$NON-NLS-1$
public static final String PROP_VALUENET = "1233"; //$NON-NLS-1$ public static final String PROP_VALUENET = "1233"; //$NON-NLS-1$
public static final String PROP_VALUETGTCONS = "1232"; //$NON-NLS-1$ public static final String PROP_VALUETGTCONS = "1232"; //$NON-NLS-1$
public static final String PROP_VALUETELNET = "23"; //$NON-NLS-1$ public static final String PROP_VALUETELNET = "23"; //$NON-NLS-1$
String[][] fPortMap=new String[][] { String[][] fPortMap = new String[][] {
// portName, port // portName, port
{PROP_NAMETGTCONS, PROP_VALUETGTCONS}, { PROP_NAMETGTCONS, PROP_VALUETGTCONS }, { PROP_NAMETELNET, PROP_VALUETELNET } };
{PROP_NAMETELNET, PROP_VALUETELNET}
};
public String getDefaultNetworkPort() { public String getDefaultNetworkPort() {
return PROP_VALUETELNET; return PROP_VALUETELNET;
@ -40,7 +38,7 @@ public class NetworkPortMap {
public String findPortName(String strPort) { public String findPortName(String strPort) {
for (int i = 0; i < fPortMap.length; i++) { for (int i = 0; i < fPortMap.length; i++) {
if(fPortMap[i][1].equals(strPort)) if (fPortMap[i][1].equals(strPort))
return fPortMap[i][0]; return fPortMap[i][0];
} }
return null; return null;
@ -48,14 +46,14 @@ public class NetworkPortMap {
public String findPort(String strPortName) { public String findPort(String strPortName) {
for (int i = 0; i < fPortMap.length; i++) { for (int i = 0; i < fPortMap.length; i++) {
if(fPortMap[i][0].equals(strPortName)) if (fPortMap[i][0].equals(strPortName))
return fPortMap[i][1]; return fPortMap[i][1];
} }
return null; return null;
} }
public List<String> getNameTable() { public List<String> getNameTable() {
List<String> names=new ArrayList<String>(); List<String> names = new ArrayList<String>();
for (int i = 0; i < fPortMap.length; i++) { for (int i = 0; i < fPortMap.length; i++) {
names.add(fPortMap[i][0]); names.add(fPortMap[i][0]);
} }

View file

@ -8,10 +8,10 @@
* SPDX-License-Identifier: EPL-2.0 * SPDX-License-Identifier: EPL-2.0
* *
* Contributors: * Contributors:
* Fran Litterio (Wind River) - initial API and implementation * Fran Litterio (Wind River) - initial API and implementation
* Helmut Haigermoser (Wind River) - repackaged * Helmut Haigermoser (Wind River) - repackaged
* Ted Williams (Wind River) - repackaged into org.eclipse namespace * Ted Williams (Wind River) - repackaged into org.eclipse namespace
* Michael Scharf (Wind River) - split into core, view and connector plugins * Michael Scharf (Wind River) - split into core, view and connector plugins
* Martin Oberhuber (Wind River) - fixed copyright headers and beautified * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
*******************************************************************************/ *******************************************************************************/
package org.eclipse.tm.terminal.connector.telnet.connector; package org.eclipse.tm.terminal.connector.telnet.connector;
@ -22,75 +22,73 @@ package org.eclipse.tm.terminal.connector.telnet.connector;
* interface. The meanings of these constants are defined in the various TELNET RFCs * interface. The meanings of these constants are defined in the various TELNET RFCs
* (RFC 854 to RFC 861, and others). * (RFC 854 to RFC 861, and others).
*/ */
interface TelnetCodes interface TelnetCodes {
{ /** Command code: Subnegotiation End. */
/** Command code: Subnegotiation End. */ static final byte TELNET_SE = (byte) 240;
static final byte TELNET_SE = (byte)240;
/** Command code: No-op. */ /** Command code: No-op. */
static final byte TELNET_NOP = (byte)241; static final byte TELNET_NOP = (byte) 241;
/** Command code: Data Mark. */ /** Command code: Data Mark. */
static final byte TELNET_DM = (byte)242; static final byte TELNET_DM = (byte) 242;
/** Command code: Break. */ /** Command code: Break. */
static final byte TELNET_BREAK = (byte)243; static final byte TELNET_BREAK = (byte) 243;
/** Command code: Interrupt Process. */ /** Command code: Interrupt Process. */
static final byte TELNET_IP = (byte)244; static final byte TELNET_IP = (byte) 244;
/** Command code: Abort Output. */ /** Command code: Abort Output. */
static final byte TELNET_AO = (byte)245; static final byte TELNET_AO = (byte) 245;
/** Command code: Are You There. */ /** Command code: Are You There. */
static final byte TELNET_AYT = (byte)246; static final byte TELNET_AYT = (byte) 246;
/** Command code: Erase Character. */ /** Command code: Erase Character. */
static final byte TELNET_EC = (byte)247; static final byte TELNET_EC = (byte) 247;
/** Command code: Erase Line. */ /** Command code: Erase Line. */
static final byte TELNET_EL = (byte)248; static final byte TELNET_EL = (byte) 248;
/** Command code: Go Ahead. */ /** Command code: Go Ahead. */
static final byte TELNET_GA = (byte)249; static final byte TELNET_GA = (byte) 249;
/** Command code: Subnegotiation Begin. */ /** Command code: Subnegotiation Begin. */
static final byte TELNET_SB = (byte)250; static final byte TELNET_SB = (byte) 250;
/** Command code: Will. */ /** Command code: Will. */
static final byte TELNET_WILL = (byte)251; static final byte TELNET_WILL = (byte) 251;
/** Command code: Won't. */ /** Command code: Won't. */
static final byte TELNET_WONT = (byte)252; static final byte TELNET_WONT = (byte) 252;
/** Command code: Do. */ /** Command code: Do. */
static final byte TELNET_DO = (byte)253; static final byte TELNET_DO = (byte) 253;
/** Command code: Don't. */ /** Command code: Don't. */
static final byte TELNET_DONT = (byte)254; static final byte TELNET_DONT = (byte) 254;
/** Command code: Interpret As Command. */ /** Command code: Interpret As Command. */
static final byte TELNET_IAC = (byte)255; static final byte TELNET_IAC = (byte) 255;
/** Command code: IS. */ /** Command code: IS. */
static final byte TELNET_IS = 0; static final byte TELNET_IS = 0;
/** Command code: SEND. */ /** Command code: SEND. */
static final byte TELNET_SEND = 1; static final byte TELNET_SEND = 1;
/** Option code: Transmit Binary option. */
static final byte TELNET_OPTION_TRANSMIT_BINARY = 0;
/** Option code: Transmit Binary option. */ /** Option code: Echo option. */
static final byte TELNET_OPTION_TRANSMIT_BINARY = 0; static final byte TELNET_OPTION_ECHO = 1;
/** Option code: Echo option. */ /** Option code: Suppress Go Ahead option. */
static final byte TELNET_OPTION_ECHO = 1; static final byte TELNET_OPTION_SUPPRESS_GA = 3;
/** Option code: Suppress Go Ahead option. */ /** Option code: Terminal Type */
static final byte TELNET_OPTION_SUPPRESS_GA = 3; static final byte TELNET_OPTION_TERMINAL_TYPE = 24;
/** Option code: Terminal Type */ /** Option code: Negotitate About Window Size (NAWS) */
static final byte TELNET_OPTION_TERMINAL_TYPE = 24; static final byte TELNET_OPTION_NAWS = 31;
/** Option code: Negotitate About Window Size (NAWS) */
static final byte TELNET_OPTION_NAWS = 31;
} }

View file

@ -32,13 +32,15 @@ import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
class TelnetConnectWorker extends Thread { class TelnetConnectWorker extends Thread {
private final ITerminalControl fControl; private final ITerminalControl fControl;
private final TelnetConnector fConn; private final TelnetConnector fConn;
protected TelnetConnectWorker(TelnetConnector conn,ITerminalControl control) {
protected TelnetConnectWorker(TelnetConnector conn, ITerminalControl control) {
fControl = control; fControl = control;
fConn = conn; fConn = conn;
fControl.setState(TerminalState.CONNECTING); fControl.setState(TerminalState.CONNECTING);
} }
@Override @Override
public void run() { public void run() {
// Retry the connect with after a little pause in case the // Retry the connect with after a little pause in case the
// remote telnet server isn't ready. ConnectExceptions might // remote telnet server isn't ready. ConnectExceptions might
// happen if the telnet server process did not initialized itself. // happen if the telnet server process did not initialized itself.
@ -48,14 +50,18 @@ class TelnetConnectWorker extends Thread {
while (remaining >= 0) { while (remaining >= 0) {
// Pause before we re-try if the remaining tries are less than the initial value // Pause before we re-try if the remaining tries are less than the initial value
if (remaining < 10) try { Thread.sleep(500); } catch (InterruptedException e) { /* ignored on purpose */ } if (remaining < 10)
try {
Thread.sleep(500);
} catch (InterruptedException e) {
/* ignored on purpose */ }
try { try {
int nTimeout = fConn.getTelnetSettings().getTimeout() * 1000; int nTimeout = fConn.getTelnetSettings().getTimeout() * 1000;
String strHost = fConn.getTelnetSettings().getHost(); String strHost = fConn.getTelnetSettings().getHost();
int nPort = fConn.getTelnetSettings().getNetworkPort(); int nPort = fConn.getTelnetSettings().getNetworkPort();
InetSocketAddress address = new InetSocketAddress(strHost, nPort); InetSocketAddress address = new InetSocketAddress(strHost, nPort);
Socket socket=new Socket(); Socket socket = new Socket();
socket.connect(address, nTimeout); socket.connect(address, nTimeout);
@ -74,7 +80,7 @@ class TelnetConnectWorker extends Thread {
fConn.setSocket(socket); fConn.setSocket(socket);
TelnetConnection connection=new TelnetConnection(fConn, socket); TelnetConnection connection = new TelnetConnection(fConn, socket);
socket.setKeepAlive(true); socket.setKeepAlive(true);
fConn.setTelnetConnection(connection); fConn.setTelnetConnection(connection);
connection.start(); connection.start();
@ -85,21 +91,22 @@ class TelnetConnectWorker extends Thread {
// the DNS will fix itself // the DNS will fix itself
remaining = 0; remaining = 0;
//Construct error message and signal failed //Construct error message and signal failed
String txt="Unknown host: " + ex.getMessage(); //$NON-NLS-1$ String txt = "Unknown host: " + ex.getMessage(); //$NON-NLS-1$
connectFailed(txt,"Unknown host: " + ex.getMessage() + "\n"); //$NON-NLS-1$ //$NON-NLS-2$ connectFailed(txt, "Unknown host: " + ex.getMessage() + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
} catch (SocketTimeoutException socketTimeoutException) { } catch (SocketTimeoutException socketTimeoutException) {
// Time out occurred. No re-try in this case either. Time out can // Time out occurred. No re-try in this case either. Time out can
// be increased by the user. Multiplying the timeout with the remaining // be increased by the user. Multiplying the timeout with the remaining
// counter is not desired. // counter is not desired.
remaining = 0; remaining = 0;
// Construct error message and signal failed // Construct error message and signal failed
connectFailed(socketTimeoutException.getMessage(), "Connection Error!\n" + socketTimeoutException.getMessage()); //$NON-NLS-1$ connectFailed(socketTimeoutException.getMessage(),
"Connection Error!\n" + socketTimeoutException.getMessage()); //$NON-NLS-1$
} catch (ConnectException connectException) { } catch (ConnectException connectException) {
// In case of a ConnectException, do a re-try. The server could have been // In case of a ConnectException, do a re-try. The server could have been
// simply not ready yet and the worker would give up to early. If the terminal // simply not ready yet and the worker would give up to early. If the terminal
// control is already closed (disconnected), don't print "Connection refused" errors // control is already closed (disconnected), don't print "Connection refused" errors
if (remaining == 0 && TerminalState.CLOSED != fControl.getState()) { if (remaining == 0 && TerminalState.CLOSED != fControl.getState()) {
connectFailed(connectException.getMessage(),"Connection refused!"); //$NON-NLS-1$ connectFailed(connectException.getMessage(), "Connection refused!"); //$NON-NLS-1$
} }
} catch (Exception exception) { } catch (Exception exception) {
// Any other exception on connect. No re-try in this case either // Any other exception on connect. No re-try in this case either
@ -107,7 +114,7 @@ class TelnetConnectWorker extends Thread {
// Log the exception // Log the exception
Logger.logException(exception); Logger.logException(exception);
// And signal failed // And signal failed
connectFailed(exception.getMessage(),""); //$NON-NLS-1$ connectFailed(exception.getMessage(), ""); //$NON-NLS-1$
} finally { } finally {
remaining--; remaining--;
} }

View file

@ -297,7 +297,7 @@ public class TelnetConnection extends Thread implements TelnetCodes {
* display. * display.
*/ */
@Override @Override
public void run() { public void run() {
Logger.log("Entered"); //$NON-NLS-1$ Logger.log("Entered"); //$NON-NLS-1$
try { try {
@ -335,7 +335,8 @@ public class TelnetConnection extends Thread implements TelnetCodes {
// A "socket closed" exception is normal here. It's caused by the // A "socket closed" exception is normal here. It's caused by the
// user clicking the disconnect button on the Terminal view toolbar. // user clicking the disconnect button on the Terminal view toolbar.
if (message != null && !message.equalsIgnoreCase("Socket closed") && !message.equalsIgnoreCase("Connection reset")) //$NON-NLS-1$ //$NON-NLS-2$ if (message != null && !message.equalsIgnoreCase("Socket closed") //$NON-NLS-1$
&& !message.equalsIgnoreCase("Connection reset")) //$NON-NLS-1$
{ {
Logger.logException(ex); Logger.logException(ex);
} }
@ -345,8 +346,14 @@ public class TelnetConnection extends Thread implements TelnetCodes {
} finally { } finally {
// Tell the ITerminalControl object that the connection is closed. // Tell the ITerminalControl object that the connection is closed.
terminalControl.setState(TerminalState.CLOSED); terminalControl.setState(TerminalState.CLOSED);
try { inputStream.close(); } catch(IOException ioe) { /*ignore*/ } try {
try { outputStream.close(); } catch(IOException ioe) { /*ignore*/ } inputStream.close();
} catch (IOException ioe) {
/*ignore*/ }
try {
outputStream.close();
} catch (IOException ioe) {
/*ignore*/ }
} }
} }

View file

@ -73,21 +73,24 @@ public class TelnetConnector extends TerminalConnectorImpl {
public TelnetConnector() { public TelnetConnector() {
this(new TelnetSettings()); this(new TelnetSettings());
} }
public TelnetConnector(TelnetSettings settings) { public TelnetConnector(TelnetSettings settings) {
fSettings=settings; fSettings = settings;
} }
@Override @Override
public void connect(ITerminalControl control) { public void connect(ITerminalControl control) {
super.connect(control); super.connect(control);
fWidth=-1; fWidth = -1;
fHeight=-1; fHeight = -1;
// TERM=xterm implies VT100 line wrapping mode // TERM=xterm implies VT100 line wrapping mode
control.setVT100LineWrapping(true); control.setVT100LineWrapping(true);
TelnetConnectWorker worker = new TelnetConnectWorker(this,control); TelnetConnectWorker worker = new TelnetConnectWorker(this, control);
worker.start(); worker.start();
} }
@Override @Override
public void doDisconnect() { public void doDisconnect() {
if (getSocket() != null) { if (getSocket() != null) {
try { try {
getSocket().close(); getSocket().close();
@ -113,31 +116,37 @@ public class TelnetConnector extends TerminalConnectorImpl {
} }
cleanSocket(); cleanSocket();
} }
@Override @Override
public boolean isLocalEcho() { public boolean isLocalEcho() {
if(fTelnetConnection==null) if (fTelnetConnection == null)
return false; return false;
return fTelnetConnection.localEcho(); return fTelnetConnection.localEcho();
} }
@Override @Override
public void setTerminalSize(int newWidth, int newHeight) { public void setTerminalSize(int newWidth, int newHeight) {
if(fTelnetConnection!=null && (newWidth!=fWidth || newHeight!=fHeight)) { if (fTelnetConnection != null && (newWidth != fWidth || newHeight != fHeight)) {
//avoid excessive communications due to change size requests by caching previous size //avoid excessive communications due to change size requests by caching previous size
fTelnetConnection.setTerminalSize(newWidth, newHeight); fTelnetConnection.setTerminalSize(newWidth, newHeight);
fWidth=newWidth; fWidth = newWidth;
fHeight=newHeight; fHeight = newHeight;
} }
} }
public InputStream getInputStream() { public InputStream getInputStream() {
return fInputStream; return fInputStream;
} }
@Override @Override
public OutputStream getTerminalToRemoteStream() { public OutputStream getTerminalToRemoteStream() {
return fOutputStream; return fOutputStream;
} }
private void setInputStream(InputStream inputStream) { private void setInputStream(InputStream inputStream) {
fInputStream = inputStream; fInputStream = inputStream;
} }
private void setOutputStream(OutputStream outputStream) { private void setOutputStream(OutputStream outputStream) {
if (outputStream == null) { if (outputStream == null) {
fOutputStream = null; fOutputStream = null;
@ -146,6 +155,7 @@ public class TelnetConnector extends TerminalConnectorImpl {
// translate CR to telnet end-of-line sequence - RFC 854 // translate CR to telnet end-of-line sequence - RFC 854
fOutputStream = new TelnetOutputStream(outputStream, fSettings.getEndOfLine()); fOutputStream = new TelnetOutputStream(outputStream, fSettings.getEndOfLine());
} }
Socket getSocket() { Socket getSocket() {
return fSocket; return fSocket;
} }
@ -154,13 +164,13 @@ public class TelnetConnector extends TerminalConnectorImpl {
* sets the socket to null * sets the socket to null
*/ */
void cleanSocket() { void cleanSocket() {
fSocket=null; fSocket = null;
setInputStream(null); setInputStream(null);
setOutputStream(null); setOutputStream(null);
} }
void setSocket(Socket socket) throws IOException { void setSocket(Socket socket) throws IOException {
if(socket==null) { if (socket == null) {
cleanSocket(); cleanSocket();
} else { } else {
fSocket = socket; fSocket = socket;
@ -169,35 +179,44 @@ public class TelnetConnector extends TerminalConnectorImpl {
} }
} }
public void setTelnetConnection(TelnetConnection connection) { public void setTelnetConnection(TelnetConnection connection) {
fTelnetConnection=connection; fTelnetConnection = connection;
} }
public void displayTextInTerminal(String text) { public void displayTextInTerminal(String text) {
fControl.displayTextInTerminal(text); fControl.displayTextInTerminal(text);
} }
public OutputStream getRemoteToTerminalOutputStream () {
public OutputStream getRemoteToTerminalOutputStream() {
return fControl.getRemoteToTerminalOutputStream(); return fControl.getRemoteToTerminalOutputStream();
} }
public void setState(TerminalState state) { public void setState(TerminalState state) {
fControl.setState(state); fControl.setState(state);
} }
public ITelnetSettings getTelnetSettings() { public ITelnetSettings getTelnetSettings() {
return fSettings; return fSettings;
} }
@Override @Override
public void setDefaultSettings() { public void setDefaultSettings() {
fSettings.load(new NullSettingsStore()); fSettings.load(new NullSettingsStore());
} }
@Override @Override
public String getSettingsSummary() { public String getSettingsSummary() {
return fSettings.getSummary(); return fSettings.getSummary();
} }
@Override @Override
public void load(ISettingsStore store) { public void load(ISettingsStore store) {
fSettings.load(store); fSettings.load(store);
} }
@Override @Override
public void save(ISettingsStore store) { public void save(ISettingsStore store) {
fSettings.save(store); fSettings.save(store);
} }
} }

View file

@ -28,4 +28,4 @@ public class TelnetMessages extends NLS {
*/ */
public static String END_OF_LINE; public static String END_OF_LINE;
} }

View file

@ -13,7 +13,7 @@
# Helmut Haigermoser and Ted Williams. # Helmut Haigermoser and Ted Williams.
# #
# Contributors: # Contributors:
# Michael Scharf (Wind River) - split into core, view and connector plugins # Michael Scharf (Wind River) - split into core, view and connector plugins
# Martin Oberhuber (Wind River) - fixed copyright headers and beautified # Martin Oberhuber (Wind River) - fixed copyright headers and beautified
############################################################################### ###############################################################################
PORT = Port PORT = Port

View file

@ -43,207 +43,204 @@ import org.eclipse.tm.internal.terminal.provisional.api.Logger;
* *
* @author Fran Litterio (francis.litterio@windriver.com) * @author Fran Litterio (francis.litterio@windriver.com)
*/ */
class TelnetOption implements TelnetCodes class TelnetOption implements TelnetCodes {
{ /**
/** * This array of Strings maps an integer TELNET option code value to the symbolic
* This array of Strings maps an integer TELNET option code value to the symbolic * name of the option. Array elements of the form "?" represent unassigned option
* name of the option. Array elements of the form "?" represent unassigned option * values.
* values. */
*/ protected static final String[] optionNames = { "BINARY", // 0 //$NON-NLS-1$
protected static final String[] optionNames = "ECHO", // 1 //$NON-NLS-1$
{ "RECONNECTION", // 2 //$NON-NLS-1$
"BINARY", // 0 //$NON-NLS-1$ "SUPPRESS GO AHEAD", // 3 //$NON-NLS-1$
"ECHO", // 1 //$NON-NLS-1$ "MSG SIZE NEGOTIATION", // 4 //$NON-NLS-1$
"RECONNECTION", // 2 //$NON-NLS-1$ "STATUS", // 5 //$NON-NLS-1$
"SUPPRESS GO AHEAD", // 3 //$NON-NLS-1$ "TIMING MARK", // 6 //$NON-NLS-1$
"MSG SIZE NEGOTIATION", // 4 //$NON-NLS-1$ "REMOTE CTRL TRANS+ECHO", // 7 //$NON-NLS-1$
"STATUS", // 5 //$NON-NLS-1$ "OUTPUT LINE WIDTH", // 8 //$NON-NLS-1$
"TIMING MARK", // 6 //$NON-NLS-1$ "OUTPUT PAGE SIZE", // 9 //$NON-NLS-1$
"REMOTE CTRL TRANS+ECHO", // 7 //$NON-NLS-1$ "OUTPUT CR DISPOSITION", // 10 //$NON-NLS-1$
"OUTPUT LINE WIDTH", // 8 //$NON-NLS-1$ "OUTPUT HORIZ TABSTOPS", // 11 //$NON-NLS-1$
"OUTPUT PAGE SIZE", // 9 //$NON-NLS-1$ "OUTPUT HORIZ TAB DISPOSITION", // 12 //$NON-NLS-1$
"OUTPUT CR DISPOSITION", // 10 //$NON-NLS-1$ "OUTPUT FORMFEED DISPOSITION", // 13 //$NON-NLS-1$
"OUTPUT HORIZ TABSTOPS", // 11 //$NON-NLS-1$ "OUTPUT VERTICAL TABSTOPS", // 14 //$NON-NLS-1$
"OUTPUT HORIZ TAB DISPOSITION", // 12 //$NON-NLS-1$ "OUTPUT VT DISPOSITION", // 15 //$NON-NLS-1$
"OUTPUT FORMFEED DISPOSITION", // 13 //$NON-NLS-1$ "OUTPUT LF DISPOSITION", // 16 //$NON-NLS-1$
"OUTPUT VERTICAL TABSTOPS", // 14 //$NON-NLS-1$ "EXTENDED ASCII", // 17 //$NON-NLS-1$
"OUTPUT VT DISPOSITION", // 15 //$NON-NLS-1$ "LOGOUT", // 18 //$NON-NLS-1$
"OUTPUT LF DISPOSITION", // 16 //$NON-NLS-1$ "BYTE MACRO", // 19 //$NON-NLS-1$
"EXTENDED ASCII", // 17 //$NON-NLS-1$ "DATA ENTRY TERMINAL", // 20 //$NON-NLS-1$
"LOGOUT", // 18 //$NON-NLS-1$ "SUPDUP", // 21 //$NON-NLS-1$
"BYTE MACRO", // 19 //$NON-NLS-1$ "SUPDUP OUTPUT", // 22 //$NON-NLS-1$
"DATA ENTRY TERMINAL", // 20 //$NON-NLS-1$ "SEND LOCATION", // 23 //$NON-NLS-1$
"SUPDUP", // 21 //$NON-NLS-1$ "TERMINAL TYPE", // 24 //$NON-NLS-1$
"SUPDUP OUTPUT", // 22 //$NON-NLS-1$ "END OF RECORD", // 25 //$NON-NLS-1$
"SEND LOCATION", // 23 //$NON-NLS-1$ "TACACS USER IDENTIFICATION", // 26 //$NON-NLS-1$
"TERMINAL TYPE", // 24 //$NON-NLS-1$ "OUTPUT MARKING", // 27 //$NON-NLS-1$
"END OF RECORD", // 25 //$NON-NLS-1$ "TERMINAL LOCATION NUMBER", // 28 //$NON-NLS-1$
"TACACS USER IDENTIFICATION", // 26 //$NON-NLS-1$ "3270 REGIME", // 29 //$NON-NLS-1$
"OUTPUT MARKING", // 27 //$NON-NLS-1$ "X.3 PAD", // 30 //$NON-NLS-1$
"TERMINAL LOCATION NUMBER", // 28 //$NON-NLS-1$ "NEGOTIATE ABOUT WINDOW SIZE", // 31 //$NON-NLS-1$
"3270 REGIME", // 29 //$NON-NLS-1$ "TERMINAL SPEED", // 32 //$NON-NLS-1$
"X.3 PAD", // 30 //$NON-NLS-1$ "REMOTE FLOW CONTROL", // 33 //$NON-NLS-1$
"NEGOTIATE ABOUT WINDOW SIZE", // 31 //$NON-NLS-1$ "LINEMODE", // 34 //$NON-NLS-1$
"TERMINAL SPEED", // 32 //$NON-NLS-1$ "X DISPLAY LOCATION", // 35 //$NON-NLS-1$
"REMOTE FLOW CONTROL", // 33 //$NON-NLS-1$ "ENVIRONMENT OPTION", // 36 //$NON-NLS-1$
"LINEMODE", // 34 //$NON-NLS-1$ "AUTHENTICATION OPTION", // 37 //$NON-NLS-1$
"X DISPLAY LOCATION", // 35 //$NON-NLS-1$ "ENCRYPTION OPTION", // 38 //$NON-NLS-1$
"ENVIRONMENT OPTION", // 36 //$NON-NLS-1$ "NEW ENVIRONMENT OPTION", // 39 //$NON-NLS-1$
"AUTHENTICATION OPTION", // 37 //$NON-NLS-1$ "TN3270E", // 40 //$NON-NLS-1$
"ENCRYPTION OPTION", // 38 //$NON-NLS-1$ "XAUTH", // 41 //$NON-NLS-1$
"NEW ENVIRONMENT OPTION", // 39 //$NON-NLS-1$ "CHARSET", // 42 //$NON-NLS-1$
"TN3270E", // 40 //$NON-NLS-1$ "REMOTE SERIAL PORT", // 43 //$NON-NLS-1$
"XAUTH", // 41 //$NON-NLS-1$ "COM PORT CONTROL OPTION", // 44 //$NON-NLS-1$
"CHARSET", // 42 //$NON-NLS-1$ "SUPPRESS LOCAL ECHO", // 45 //$NON-NLS-1$
"REMOTE SERIAL PORT", // 43 //$NON-NLS-1$ "START TLS", // 46 //$NON-NLS-1$
"COM PORT CONTROL OPTION", // 44 //$NON-NLS-1$ "KERMIT", // 47 //$NON-NLS-1$
"SUPPRESS LOCAL ECHO", // 45 //$NON-NLS-1$ "SEND URL", // 48 //$NON-NLS-1$
"START TLS", // 46 //$NON-NLS-1$ "FORWARD X", // 49 //$NON-NLS-1$
"KERMIT", // 47 //$NON-NLS-1$ "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", // 50 ... //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
"SEND URL", // 48 //$NON-NLS-1$ "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
"FORWARD X", // 49 //$NON-NLS-1$ "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", // 50 ... //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ "?", "?", "?", "?", "?", "?", "?", // ... 137 //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ "TELOPT PRAGMA LOGON", // 138 //$NON-NLS-1$
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ "TELOPT SSPI LOGON", // 139 //$NON-NLS-1$
"?", "?", "?", "?", "?", "?", "?", // ... 137 //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ "TELOPT PRAGMA HEARTBEAT", // 140 //$NON-NLS-1$
"TELOPT PRAGMA LOGON", // 138 //$NON-NLS-1$ "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", // 141 ... //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
"TELOPT SSPI LOGON", // 139 //$NON-NLS-1$ "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
"TELOPT PRAGMA HEARTBEAT", // 140 //$NON-NLS-1$ "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", // 141 ... //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ "?", "?", "?", "?", // ... 254 //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ "EXTENDED OPTIONS LIST" // 255 //$NON-NLS-1$
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ };
"?", "?", "?", "?", // ... 254 //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
"EXTENDED OPTIONS LIST" // 255 //$NON-NLS-1$
};
/** /**
* Negotiation state: Negotiation not yet started for this option. <p> * Negotiation state: Negotiation not yet started for this option. <p>
* *
* This constant and the others having similar names represent the states of a * This constant and the others having similar names represent the states of a
* finite state automaton (FSA) that tracks the negotiation state of this option. * finite state automaton (FSA) that tracks the negotiation state of this option.
* The initial state is NEGOTIATION_NOT_STARTED. The state machine is as follows * The initial state is NEGOTIATION_NOT_STARTED. The state machine is as follows
* (with transitions labeled with letters in parentheses): <p> * (with transitions labeled with letters in parentheses): <p>
* *
* <pre> * <pre>
* NEGOTIATION_NOT_STARTED -----> {@link #NEGOTIATION_IN_PROGRESS} * NEGOTIATION_NOT_STARTED -----> {@link #NEGOTIATION_IN_PROGRESS}
* | (A) | ^ * | (A) | ^
* (C)| (B)| |(D) * (C)| (B)| |(D)
* | V | * | V |
* +--------> {@link #NEGOTIATION_DONE} * +--------> {@link #NEGOTIATION_DONE}
* </pre> <p> * </pre> <p>
* *
* Once the FSA leaves state NEGOTIATION_NOT_STARTED, it never returns to that * Once the FSA leaves state NEGOTIATION_NOT_STARTED, it never returns to that
* state. Transition A happens when the local endpoint sends an option command * state. Transition A happens when the local endpoint sends an option command
* before receiving a command for the same option from the remote endpoint. <p> * before receiving a command for the same option from the remote endpoint. <p>
* *
* Transition B happens when the local endpoint receives a reply to an option * Transition B happens when the local endpoint receives a reply to an option
* command sent earlier by the local endpoint. Receipt of that reply terminates * command sent earlier by the local endpoint. Receipt of that reply terminates
* the negotiation. <p> * the negotiation. <p>
* *
* Transition D happens after negotiation is done and "something changes" (see the * Transition D happens after negotiation is done and "something changes" (see the
* RFCs for the definition of "something changes"). Either endpoint can * RFCs for the definition of "something changes"). Either endpoint can
* re-negotiate an option after a previous negotiation, but only if some external * re-negotiate an option after a previous negotiation, but only if some external
* influence (such as the user or the OS) causes it to do so. Re-negotiation must * influence (such as the user or the OS) causes it to do so. Re-negotiation must
* start more than {@link #NEGOTIATION_IGNORE_DURATION} milliseconds after the FSA * start more than {@link #NEGOTIATION_IGNORE_DURATION} milliseconds after the FSA
* enters state NEGOTIATION_DONE or it will be ignored. This is how this client * enters state NEGOTIATION_DONE or it will be ignored. This is how this client
* prevents negotiation loops. <p> * prevents negotiation loops. <p>
* *
* Transition C happens when the local endpoint receives an option command from the * Transition C happens when the local endpoint receives an option command from the
* remote endpoint before sending a command for the same option. In that case, the * remote endpoint before sending a command for the same option. In that case, the
* local endpoint replies immediately with an option command and the negotiation * local endpoint replies immediately with an option command and the negotiation
* terminates. <p> * terminates. <p>
* *
* Some TELNET servers (e.g., the Solaris server), after sending WILL and receiving * Some TELNET servers (e.g., the Solaris server), after sending WILL and receiving
* DONT, will reply with a superfluous WONT. Any such superfluous option command * DONT, will reply with a superfluous WONT. Any such superfluous option command
* received from the remote endpoint while the option's FSA is in state * received from the remote endpoint while the option's FSA is in state
* {@link #NEGOTIATION_DONE} will be ignored by the local endpoint. * {@link #NEGOTIATION_DONE} will be ignored by the local endpoint.
*/ */
protected static final int NEGOTIATION_NOT_STARTED = 0; protected static final int NEGOTIATION_NOT_STARTED = 0;
/** Negotiation state: Negotiation is in progress for this option. */ /** Negotiation state: Negotiation is in progress for this option. */
protected static final int NEGOTIATION_IN_PROGRESS = 1; protected static final int NEGOTIATION_IN_PROGRESS = 1;
/** Negotiation state: Negotiation has terminated for this option. */ /** Negotiation state: Negotiation has terminated for this option. */
protected static final int NEGOTIATION_DONE = 2; protected static final int NEGOTIATION_DONE = 2;
/** /**
* The number of milliseconds following the end of negotiation of this option * The number of milliseconds following the end of negotiation of this option
* before which the remote endpoint can re-negotiate the option. Any option * before which the remote endpoint can re-negotiate the option. Any option
* command received from the remote endpoint before this time passes is ignored. * command received from the remote endpoint before this time passes is ignored.
* This is used to prevent option negotiation loops. * This is used to prevent option negotiation loops.
* *
* @see #ignoreNegotiation() * @see #ignoreNegotiation()
* @see #negotiationCompletionTime * @see #negotiationCompletionTime
*/ */
protected static final int NEGOTIATION_IGNORE_DURATION = 30000; protected static final int NEGOTIATION_IGNORE_DURATION = 30000;
/** /**
* This field holds the current negotiation state for this option. * This field holds the current negotiation state for this option.
*/ */
protected int negotiationState = NEGOTIATION_NOT_STARTED; protected int negotiationState = NEGOTIATION_NOT_STARTED;
/** /**
* This field holds the time when negotiation of this option most recently * This field holds the time when negotiation of this option most recently
* terminated (i.e., entered state {@link #NEGOTIATION_DONE}). This is used to * terminated (i.e., entered state {@link #NEGOTIATION_DONE}). This is used to
* determine whether an option command received from the remote endpoint after * determine whether an option command received from the remote endpoint after
* negotiation has terminated for this option is to be ignored or interpreted as * negotiation has terminated for this option is to be ignored or interpreted as
* the start of a new negotiation. * the start of a new negotiation.
* *
* @see #NEGOTIATION_IGNORE_DURATION * @see #NEGOTIATION_IGNORE_DURATION
*/ */
protected Date negotiationCompletionTime = new Date(0); protected Date negotiationCompletionTime = new Date(0);
/** /**
* Holds the total number of negotiations that have completed for this option. * Holds the total number of negotiations that have completed for this option.
*/ */
protected int negotiationCount = 0; protected int negotiationCount = 0;
/** /**
* Holds the integer code representing the option. * Holds the integer code representing the option.
*/ */
protected byte option = 0; protected byte option = 0;
/** /**
* Holds the OutputStream object that allows data to be sent to the remote endpoint * Holds the OutputStream object that allows data to be sent to the remote endpoint
* of the TELNET connection. * of the TELNET connection.
*/ */
protected OutputStream outputStream; protected OutputStream outputStream;
/** /**
* True if this option is for the local endpoint, false for the remote endpoint. * True if this option is for the local endpoint, false for the remote endpoint.
*/ */
protected boolean local = true; protected boolean local = true;
/** /**
* This field is true if the option is enabled, false if it is disabled. All * This field is true if the option is enabled, false if it is disabled. All
* options are initially disabled until they are negotiated to be enabled. <p> * options are initially disabled until they are negotiated to be enabled. <p>
*/ */
protected boolean enabled = false; protected boolean enabled = false;
/** /**
* This field is true if the client desires the option to be enabled, false if the * This field is true if the client desires the option to be enabled, false if the
* client desires the option to be disabled. This field does not represent the * client desires the option to be disabled. This field does not represent the
* remote's endpoints desire (as expressed via WILL and WONT commands) -- it * remote's endpoints desire (as expressed via WILL and WONT commands) -- it
* represnet the local endpoint's desire. <p> * represnet the local endpoint's desire. <p>
* *
* @see #setDesired(boolean) * @see #setDesired(boolean)
*/ */
protected boolean desired = false; protected boolean desired = false;
/** /**
* Constructor. <p> * Constructor. <p>
* *
* @param option The integer code of this option. * @param option The integer code of this option.
@ -251,8 +248,7 @@ class TelnetOption implements TelnetCodes
* @param local Whether this option is for the local or remote endpoint. * @param local Whether this option is for the local or remote endpoint.
* @param outputStream A stream used to negotiate with the remote endpoint. * @param outputStream A stream used to negotiate with the remote endpoint.
*/ */
TelnetOption(byte option, boolean desired, boolean local, TelnetOption(byte option, boolean desired, boolean local, OutputStream outputStream) {
OutputStream outputStream) {
this.option = option; this.option = option;
this.desired = desired; this.desired = desired;
this.local = local; this.local = local;
@ -333,12 +329,10 @@ class TelnetOption implements TelnetCodes
public void negotiate() { public void negotiate() {
if (negotiationState == NEGOTIATION_NOT_STARTED && desired) { if (negotiationState == NEGOTIATION_NOT_STARTED && desired) {
if (local) { if (local) {
Logger Logger.log("Starting negotiation for local option " + optionName()); //$NON-NLS-1$
.log("Starting negotiation for local option " + optionName()); //$NON-NLS-1$
sendWill(); sendWill();
} else { } else {
Logger Logger.log("Starting negotiation for remote option " + optionName()); //$NON-NLS-1$
.log("Starting negotiation for remote option " + optionName()); //$NON-NLS-1$
sendDo(); sendDo();
} }
@ -352,8 +346,7 @@ class TelnetOption implements TelnetCodes
*/ */
public void handleWill() { public void handleWill() {
if (negotiationState == NEGOTIATION_DONE && ignoreNegotiation()) { if (negotiationState == NEGOTIATION_DONE && ignoreNegotiation()) {
Logger Logger.log("Ignoring superfluous WILL command from remote endpoint."); //$NON-NLS-1$
.log("Ignoring superfluous WILL command from remote endpoint."); //$NON-NLS-1$
return; return;
} }
@ -403,8 +396,7 @@ class TelnetOption implements TelnetCodes
*/ */
public void handleWont() { public void handleWont() {
if (negotiationState == NEGOTIATION_DONE && ignoreNegotiation()) { if (negotiationState == NEGOTIATION_DONE && ignoreNegotiation()) {
Logger Logger.log("Ignoring superfluous WONT command from remote endpoint."); //$NON-NLS-1$
.log("Ignoring superfluous WONT command from remote endpoint."); //$NON-NLS-1$
return; return;
} }
@ -481,8 +473,7 @@ class TelnetOption implements TelnetCodes
*/ */
public void handleDont() { public void handleDont() {
if (negotiationState == NEGOTIATION_DONE && ignoreNegotiation()) { if (negotiationState == NEGOTIATION_DONE && ignoreNegotiation()) {
Logger Logger.log("Ignoring superfluous DONT command from remote endpoint."); //$NON-NLS-1$
.log("Ignoring superfluous DONT command from remote endpoint."); //$NON-NLS-1$
return; return;
} }
@ -520,9 +511,8 @@ class TelnetOption implements TelnetCodes
case TELNET_OPTION_TERMINAL_TYPE: case TELNET_OPTION_TERMINAL_TYPE:
if (subnegotiationData[1] != TELNET_SEND) { if (subnegotiationData[1] != TELNET_SEND) {
// This should never happen! // This should never happen!
Logger Logger.log("Invalid TERMINAL-TYPE subnegotiation command from remote endpoint: " + //$NON-NLS-1$
.log("Invalid TERMINAL-TYPE subnegotiation command from remote endpoint: " + //$NON-NLS-1$ (subnegotiationData[1] & 0xff));
(subnegotiationData[1] & 0xff));
break; break;
} }
@ -531,8 +521,7 @@ class TelnetOption implements TelnetCodes
// //
// IAC SB TERMINAL-TYPE IS x t e r m IAC SE // IAC SB TERMINAL-TYPE IS x t e r m IAC SE
byte[] terminalTypeData = { TELNET_IAC, TELNET_SB, byte[] terminalTypeData = { TELNET_IAC, TELNET_SB, TELNET_OPTION_TERMINAL_TYPE, TELNET_IS, (byte) 'x',
TELNET_OPTION_TERMINAL_TYPE, TELNET_IS, (byte) 'x',
(byte) 't', (byte) 'e', (byte) 'r', (byte) 'm', TELNET_IAC, TELNET_SE }; (byte) 't', (byte) 'e', (byte) 'r', (byte) 'm', TELNET_IAC, TELNET_SE };
try { try {
@ -545,8 +534,7 @@ class TelnetOption implements TelnetCodes
default: default:
// This should never happen! // This should never happen!
Logger Logger.log("SHOULD NOT BE REACHED: Called for option " + optionName()); //$NON-NLS-1$
.log("SHOULD NOT BE REACHED: Called for option " + optionName()); //$NON-NLS-1$
break; break;
} }
} }
@ -567,8 +555,7 @@ class TelnetOption implements TelnetCodes
// IAC SB NAWS <width-highbyte> <width-lowbyte> <height-highbyte> // IAC SB NAWS <width-highbyte> <width-lowbyte> <height-highbyte>
// <height-lowbyte> IAC SE // <height-lowbyte> IAC SE
final byte[] NAWSData = { TELNET_IAC, TELNET_SB, TELNET_OPTION_NAWS, 0, final byte[] NAWSData = { TELNET_IAC, TELNET_SB, TELNET_OPTION_NAWS, 0, 0, 0, 0, TELNET_IAC, TELNET_SE };
0, 0, 0, TELNET_IAC, TELNET_SE };
int width = ((Integer) subnegotiationData[0]).intValue(); int width = ((Integer) subnegotiationData[0]).intValue();
int height = ((Integer) subnegotiationData[1]).intValue(); int height = ((Integer) subnegotiationData[1]).intValue();
@ -577,17 +564,16 @@ class TelnetOption implements TelnetCodes
NAWSData[5] = (byte) ((height >>> 8) & 0xff); // High order byte of height. NAWSData[5] = (byte) ((height >>> 8) & 0xff); // High order byte of height.
NAWSData[6] = (byte) (height & 0xff); // Low order byte of height. NAWSData[6] = (byte) (height & 0xff); // Low order byte of height.
Logger Logger.log("sending terminal size to remote endpoint: width = " + width + //$NON-NLS-1$
.log("sending terminal size to remote endpoint: width = " + width + //$NON-NLS-1$ ", height = " + height + "."); //$NON-NLS-1$ //$NON-NLS-2$
", height = " + height + "."); //$NON-NLS-1$ //$NON-NLS-2$
// Send the NAWS data in a new thread. The current thread is the display // Send the NAWS data in a new thread. The current thread is the display
// thread, and calls to write() can block, but blocking the display thread // thread, and calls to write() can block, but blocking the display thread
// is _bad_ (it hangs the GUI). // is _bad_ (it hangs the GUI).
Thread t=new Thread() { Thread t = new Thread() {
@Override @Override
public void run() { public void run() {
try { try {
outputStream.write(NAWSData); outputStream.write(NAWSData);
} catch (IOException ex) { } catch (IOException ex) {
@ -602,8 +588,7 @@ class TelnetOption implements TelnetCodes
default: default:
// This should never happen! // This should never happen!
Logger Logger.log("SHOULD NOT BE REACHED: Called for option " + optionName()); //$NON-NLS-1$
.log("SHOULD NOT BE REACHED: Called for option " + optionName()); //$NON-NLS-1$
break; break;
} }
} }

View file

@ -13,7 +13,7 @@
* Helmut Haigermoser and Ted Williams. * Helmut Haigermoser and Ted Williams.
* *
* Contributors: * Contributors:
* Michael Scharf (Wind River) - extracted from TerminalProperties * Michael Scharf (Wind River) - extracted from TerminalProperties
* Martin Oberhuber (Wind River) - fixed copyright headers and beautified * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
*******************************************************************************/ *******************************************************************************/
package org.eclipse.tm.terminal.connector.telnet.connector; package org.eclipse.tm.terminal.connector.telnet.connector;

View file

@ -24,13 +24,14 @@ import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
* @noreference This class is not intended to be referenced by clients. * @noreference This class is not intended to be referenced by clients.
*/ */
public class TelnetSettings implements ITelnetSettings { public class TelnetSettings implements ITelnetSettings {
protected String fHost; protected String fHost;
protected String fNetworkPort; protected String fNetworkPort;
protected String fTimeout; protected String fTimeout;
protected String fEndOfLine = EOL_CRNUL; protected String fEndOfLine = EOL_CRNUL;
private final TelnetProperties fProperties=new TelnetProperties(); private final TelnetProperties fProperties = new TelnetProperties();
@Override @Override
public String getHost() { public String getHost() {
return fHost; return fHost;
} }
@ -43,7 +44,7 @@ public class TelnetSettings implements ITelnetSettings {
} }
@Override @Override
public int getNetworkPort() { public int getNetworkPort() {
try { try {
return Integer.parseInt(fNetworkPort); return Integer.parseInt(fNetworkPort);
} catch (NumberFormatException numberFormatException) { } catch (NumberFormatException numberFormatException) {
@ -56,20 +57,20 @@ public class TelnetSettings implements ITelnetSettings {
} }
@Override @Override
public String getSummary() { public String getSummary() {
return getHost() + ":" + getNetworkPortString(); //$NON-NLS-1$ return getHost() + ":" + getNetworkPortString(); //$NON-NLS-1$
} }
@Override @Override
public void load(ISettingsStore store) { public void load(ISettingsStore store) {
fHost = store.get("Host", fProperties.getDefaultHost());//$NON-NLS-1$ fHost = store.get("Host", fProperties.getDefaultHost());//$NON-NLS-1$
fNetworkPort = store.get("NetworkPort", fProperties.getDefaultNetworkPort());//$NON-NLS-1$ fNetworkPort = store.get("NetworkPort", fProperties.getDefaultNetworkPort());//$NON-NLS-1$
fTimeout = store.get("Timeout","10");//$NON-NLS-1$ //$NON-NLS-2$ fTimeout = store.get("Timeout", "10");//$NON-NLS-1$ //$NON-NLS-2$
fEndOfLine = store.get("EndOfLine", EOL_CRNUL);//$NON-NLS-1$ fEndOfLine = store.get("EndOfLine", EOL_CRNUL);//$NON-NLS-1$
} }
@Override @Override
public void save(ISettingsStore store) { public void save(ISettingsStore store) {
store.put("Host", fHost);//$NON-NLS-1$ store.put("Host", fHost);//$NON-NLS-1$
store.put("NetworkPort", fNetworkPort);//$NON-NLS-1$ store.put("NetworkPort", fNetworkPort);//$NON-NLS-1$
store.put("Timeout", fTimeout);//$NON-NLS-1$ store.put("Timeout", fTimeout);//$NON-NLS-1$
@ -79,14 +80,16 @@ public class TelnetSettings implements ITelnetSettings {
public TelnetProperties getProperties() { public TelnetProperties getProperties() {
return fProperties; return fProperties;
} }
@Override @Override
public int getTimeout() { public int getTimeout() {
try { try {
return Integer.parseInt(fTimeout); return Integer.parseInt(fTimeout);
} catch (NumberFormatException numberFormatException) { } catch (NumberFormatException numberFormatException) {
return 10; return 10;
} }
} }
public String getTimeoutString() { public String getTimeoutString() {
return fTimeout; return fTimeout;
} }

View file

@ -48,10 +48,11 @@ public class TelnetSettingsPage extends AbstractSettingsPage {
private final TelnetSettings fTerminalSettings; private final TelnetSettings fTerminalSettings;
public TelnetSettingsPage(TelnetSettings settings) { public TelnetSettingsPage(TelnetSettings settings) {
fTerminalSettings=settings; fTerminalSettings = settings;
} }
@Override @Override
public void saveSettings() { public void saveSettings() {
fTerminalSettings.setHost(fHostText.getText()); fTerminalSettings.setHost(fHostText.getText());
fTerminalSettings.setTimeout(fTimeout.getText()); fTerminalSettings.setTimeout(fTimeout.getText());
fTerminalSettings.setNetworkPort(getNetworkPort()); fTerminalSettings.setNetworkPort(getNetworkPort());
@ -59,31 +60,34 @@ public class TelnetSettingsPage extends AbstractSettingsPage {
} }
@Override @Override
public void loadSettings() { public void loadSettings() {
if(fTerminalSettings!=null) { if (fTerminalSettings != null) {
setHost(fTerminalSettings.getHost()); setHost(fTerminalSettings.getHost());
setTimeout(fTerminalSettings.getTimeoutString()); setTimeout(fTerminalSettings.getTimeoutString());
setNetworkPort(fTerminalSettings.getNetworkPortString()); setNetworkPort(fTerminalSettings.getNetworkPortString());
setEndOfLine(fTerminalSettings.getEndOfLine()); setEndOfLine(fTerminalSettings.getEndOfLine());
} }
} }
private void setHost(String strHost) { private void setHost(String strHost) {
if(strHost==null) if (strHost == null)
strHost=""; //$NON-NLS-1$ strHost = ""; //$NON-NLS-1$
fHostText.setText(strHost); fHostText.setText(strHost);
} }
private void setTimeout(String timeout) { private void setTimeout(String timeout) {
if(timeout==null || timeout.length()==0) if (timeout == null || timeout.length() == 0)
timeout="5"; //$NON-NLS-1$ timeout = "5"; //$NON-NLS-1$
fTimeout.setText(timeout); fTimeout.setText(timeout);
} }
private void setNetworkPort(String strNetworkPort) { private void setNetworkPort(String strNetworkPort) {
if (strNetworkPort!=null) { if (strNetworkPort != null) {
String strPortName = getNetworkPortMap().findPortName(strNetworkPort); String strPortName = getNetworkPortMap().findPortName(strNetworkPort);
if(strPortName==null) { if (strPortName == null) {
strPortName=strNetworkPort; //fallback to verbatim port if not found strPortName = strNetworkPort; //fallback to verbatim port if not found
} }
int nIndex = fNetworkPortCombo.indexOf(strPortName); int nIndex = fNetworkPortCombo.indexOf(strPortName);
@ -94,23 +98,28 @@ public class TelnetSettingsPage extends AbstractSettingsPage {
} }
} }
} }
private String getNetworkPort() { private String getNetworkPort() {
String portText = fNetworkPortCombo.getText().trim(); String portText = fNetworkPortCombo.getText().trim();
String mappedPort = getNetworkPortMap().findPort(portText); String mappedPort = getNetworkPortMap().findPort(portText);
return mappedPort!=null ? mappedPort : portText; return mappedPort != null ? mappedPort : portText;
} }
private NetworkPortMap getNetworkPortMap() { private NetworkPortMap getNetworkPortMap() {
return fTerminalSettings.getProperties().getNetworkPortMap(); return fTerminalSettings.getProperties().getNetworkPortMap();
} }
private void setEndOfLine(String eol) { private void setEndOfLine(String eol) {
int idx = fEndOfLineCombo.indexOf(eol); int idx = fEndOfLineCombo.indexOf(eol);
fEndOfLineCombo.select(idx >= 0 ? idx : 0); fEndOfLineCombo.select(idx >= 0 ? idx : 0);
} }
private String getEndOfLine() { private String getEndOfLine() {
return fEndOfLineCombo.getText(); return fEndOfLineCombo.getText();
} }
@Override @Override
public boolean validateSettings() { public boolean validateSettings() {
String message = null; String message = null;
int messageType = IMessageProvider.NONE; int messageType = IMessageProvider.NONE;
boolean valid = true; boolean valid = true;
@ -119,7 +128,10 @@ public class TelnetSettingsPage extends AbstractSettingsPage {
String m = "Please enter a host IP or name."; //$NON-NLS-1$ String m = "Please enter a host IP or name."; //$NON-NLS-1$
int mt = IMessageProvider.INFORMATION; int mt = IMessageProvider.INFORMATION;
updateControlDecoration(fHostText, m, mt); updateControlDecoration(fHostText, m, mt);
if (mt > messageType) { message = m; messageType = mt; } if (mt > messageType) {
message = m;
messageType = mt;
}
valid = false; valid = false;
} else { } else {
@ -132,7 +144,10 @@ public class TelnetSettingsPage extends AbstractSettingsPage {
String m = "Invalid network port. Must be between 0 and 65535."; //$NON-NLS-1$ String m = "Invalid network port. Must be between 0 and 65535."; //$NON-NLS-1$
int mt = IMessageProvider.ERROR; int mt = IMessageProvider.ERROR;
updateControlDecoration(fNetworkPortCombo, m, mt); updateControlDecoration(fNetworkPortCombo, m, mt);
if (mt > messageType) { message = m; messageType = mt; } if (mt > messageType) {
message = m;
messageType = mt;
}
valid = false; valid = false;
} else { } else {
@ -144,7 +159,10 @@ public class TelnetSettingsPage extends AbstractSettingsPage {
String m = "Invalid timeout. Must be greater than 0."; //$NON-NLS-1$ String m = "Invalid timeout. Must be greater than 0."; //$NON-NLS-1$
int mt = IMessageProvider.ERROR; int mt = IMessageProvider.ERROR;
updateControlDecoration(fTimeout, m, mt); updateControlDecoration(fTimeout, m, mt);
if (mt > messageType) { message = m; messageType = mt; } if (mt > messageType) {
message = m;
messageType = mt;
}
valid = false; valid = false;
} else { } else {
@ -160,7 +178,7 @@ public class TelnetSettingsPage extends AbstractSettingsPage {
} }
@Override @Override
public void createControl(Composite parent) { public void createControl(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE); Composite composite = new Composite(parent, SWT.NONE);
GridLayout gridLayout = new GridLayout(2, false); GridLayout gridLayout = new GridLayout(2, false);
GridData gridData = new GridData(GridData.FILL_HORIZONTAL); GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
@ -179,7 +197,7 @@ public class TelnetSettingsPage extends AbstractSettingsPage {
fHostText.setLayoutData(gridData); fHostText.setLayoutData(gridData);
fHostText.addModifyListener(new ModifyListener() { fHostText.addModifyListener(new ModifyListener() {
@Override @Override
public void modifyText(ModifyEvent e) { public void modifyText(ModifyEvent e) {
fireListeners(fHostText); fireListeners(fHostText);
} }
}); });
@ -195,13 +213,13 @@ public class TelnetSettingsPage extends AbstractSettingsPage {
fNetworkPortCombo.setLayoutData(gridData); fNetworkPortCombo.setLayoutData(gridData);
fNetworkPortCombo.addModifyListener(new ModifyListener() { fNetworkPortCombo.addModifyListener(new ModifyListener() {
@Override @Override
public void modifyText(ModifyEvent e) { public void modifyText(ModifyEvent e) {
fireListeners(fNetworkPortCombo); fireListeners(fNetworkPortCombo);
} }
}); });
fNetworkPortCombo.addSelectionListener(new SelectionAdapter() { fNetworkPortCombo.addSelectionListener(new SelectionAdapter() {
@Override @Override
public void widgetSelected(SelectionEvent e) { public void widgetSelected(SelectionEvent e) {
fireListeners(fNetworkPortCombo); fireListeners(fNetworkPortCombo);
} }
}); });
@ -216,7 +234,7 @@ public class TelnetSettingsPage extends AbstractSettingsPage {
fTimeout.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); fTimeout.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
fTimeout.addModifyListener(new ModifyListener() { fTimeout.addModifyListener(new ModifyListener() {
@Override @Override
public void modifyText(ModifyEvent e) { public void modifyText(ModifyEvent e) {
fireListeners(fTimeout); fireListeners(fTimeout);
} }
}); });
@ -228,7 +246,7 @@ public class TelnetSettingsPage extends AbstractSettingsPage {
fEndOfLineCombo.setLayoutData(gridData); fEndOfLineCombo.setLayoutData(gridData);
fEndOfLineCombo.addSelectionListener(new SelectionAdapter() { fEndOfLineCombo.addSelectionListener(new SelectionAdapter() {
@Override @Override
public void widgetSelected(SelectionEvent e) { public void widgetSelected(SelectionEvent e) {
fireListeners(fEndOfLineCombo); fireListeners(fEndOfLineCombo);
} }
}); });
@ -236,6 +254,7 @@ public class TelnetSettingsPage extends AbstractSettingsPage {
loadSettings(); loadSettings();
} }
private void loadCombo(Combo ctlCombo, List<String> table) { private void loadCombo(Combo ctlCombo, List<String> table) {
for (Iterator<String> iter = table.iterator(); iter.hasNext();) { for (Iterator<String> iter = table.iterator(); iter.hasNext();) {
String label = iter.next(); String label = iter.next();

View file

@ -36,7 +36,7 @@ import org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel
*/ */
public class TelnetWizardConfigurationPanel extends AbstractExtendedConfigurationPanel { public class TelnetWizardConfigurationPanel extends AbstractExtendedConfigurationPanel {
public TelnetSettings telnetSettings; public TelnetSettings telnetSettings;
private ISettingsPage telnetSettingsPage; private ISettingsPage telnetSettingsPage;
/** /**
@ -45,8 +45,8 @@ public class TelnetWizardConfigurationPanel extends AbstractExtendedConfiguratio
* @param container The configuration panel container or <code>null</code>. * @param container The configuration panel container or <code>null</code>.
*/ */
public TelnetWizardConfigurationPanel(IConfigurationPanelContainer container) { public TelnetWizardConfigurationPanel(IConfigurationPanelContainer container) {
super(container); super(container);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setupPanel(org.eclipse.swt.widgets.Composite) * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setupPanel(org.eclipse.swt.widgets.Composite)
@ -59,7 +59,8 @@ public class TelnetWizardConfigurationPanel extends AbstractExtendedConfiguratio
panel.setLayoutData(data); panel.setLayoutData(data);
// Create the host selection combo // Create the host selection combo
if (isWithoutSelection()) createHostsUI(panel, true); if (isWithoutSelection())
createHostsUI(panel, true);
TelnetConnector conn = new TelnetConnector(); TelnetConnector conn = new TelnetConnector();
telnetSettings = (TelnetSettings) conn.getTelnetSettings(); telnetSettings = (TelnetSettings) conn.getTelnetSettings();
@ -69,7 +70,7 @@ public class TelnetWizardConfigurationPanel extends AbstractExtendedConfiguratio
telnetSettingsPage = new TelnetSettingsPage(telnetSettings); telnetSettingsPage = new TelnetSettingsPage(telnetSettings);
if (telnetSettingsPage instanceof AbstractSettingsPage) { if (telnetSettingsPage instanceof AbstractSettingsPage) {
((AbstractSettingsPage)telnetSettingsPage).setHasControlDecoration(true); ((AbstractSettingsPage) telnetSettingsPage).setHasControlDecoration(true);
} }
telnetSettingsPage.createControl(panel); telnetSettingsPage.createControl(panel);
@ -78,7 +79,8 @@ public class TelnetWizardConfigurationPanel extends AbstractExtendedConfiguratio
@Override @Override
public void onSettingsPageChanged(Control control) { public void onSettingsPageChanged(Control control) {
if (getContainer() != null) getContainer().validate(); if (getContainer() != null)
getContainer().validate();
} }
}); });
@ -93,54 +95,62 @@ public class TelnetWizardConfigurationPanel extends AbstractExtendedConfiguratio
*/ */
@Override @Override
public void setupData(Map<String, Object> data) { public void setupData(Map<String, Object> data) {
if (data == null || telnetSettings == null || telnetSettingsPage == null) return; if (data == null || telnetSettings == null || telnetSettingsPage == null)
return;
String value = (String)data.get(ITerminalsConnectorConstants.PROP_IP_HOST); String value = (String) data.get(ITerminalsConnectorConstants.PROP_IP_HOST);
if (value != null) telnetSettings.setHost(value); if (value != null)
telnetSettings.setHost(value);
Object v = data.get(ITerminalsConnectorConstants.PROP_IP_PORT); Object v = data.get(ITerminalsConnectorConstants.PROP_IP_PORT);
value = v != null ? v.toString() : null; value = v != null ? v.toString() : null;
if (value != null) telnetSettings.setNetworkPort(value); if (value != null)
telnetSettings.setNetworkPort(value);
v = data.get(ITerminalsConnectorConstants.PROP_TIMEOUT); v = data.get(ITerminalsConnectorConstants.PROP_TIMEOUT);
value = v != null ? v.toString() : null; value = v != null ? v.toString() : null;
if (value != null) telnetSettings.setTimeout(value); if (value != null)
telnetSettings.setTimeout(value);
v = data.get(ITerminalsConnectorConstants.PROP_TELNET_EOL); v = data.get(ITerminalsConnectorConstants.PROP_TELNET_EOL);
value = v != null ? v.toString() : null; value = v != null ? v.toString() : null;
if (value != null) telnetSettings.setEndOfLine(value); if (value != null)
telnetSettings.setEndOfLine(value);
value = (String)data.get(ITerminalsConnectorConstants.PROP_ENCODING); value = (String) data.get(ITerminalsConnectorConstants.PROP_ENCODING);
if (value != null) setEncoding(value); if (value != null)
setEncoding(value);
telnetSettingsPage.loadSettings(); telnetSettingsPage.loadSettings();
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#extractData(java.util.Map) * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#extractData(java.util.Map)
*/ */
@Override @Override
public void extractData(Map<String, Object> data) { public void extractData(Map<String, Object> data) {
if (data == null) return; if (data == null)
return;
// set the terminal connector id for ssh // set the terminal connector id for ssh
data.put(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID, "org.eclipse.tm.terminal.connector.telnet.TelnetConnector"); //$NON-NLS-1$ data.put(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID,
"org.eclipse.tm.terminal.connector.telnet.TelnetConnector"); //$NON-NLS-1$
telnetSettingsPage.saveSettings(); telnetSettingsPage.saveSettings();
data.put(ITerminalsConnectorConstants.PROP_IP_HOST,telnetSettings.getHost()); data.put(ITerminalsConnectorConstants.PROP_IP_HOST, telnetSettings.getHost());
data.put(ITerminalsConnectorConstants.PROP_IP_PORT, Integer.valueOf(telnetSettings.getNetworkPort())); data.put(ITerminalsConnectorConstants.PROP_IP_PORT, Integer.valueOf(telnetSettings.getNetworkPort()));
data.put(ITerminalsConnectorConstants.PROP_TIMEOUT, Integer.valueOf(telnetSettings.getTimeout())); data.put(ITerminalsConnectorConstants.PROP_TIMEOUT, Integer.valueOf(telnetSettings.getTimeout()));
data.put(ITerminalsConnectorConstants.PROP_TELNET_EOL, telnetSettings.getEndOfLine()); data.put(ITerminalsConnectorConstants.PROP_TELNET_EOL, telnetSettings.getEndOfLine());
data.put(ITerminalsConnectorConstants.PROP_ENCODING, getEncoding()); data.put(ITerminalsConnectorConstants.PROP_ENCODING, getEncoding());
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#fillSettingsForHost(java.lang.String) * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#fillSettingsForHost(java.lang.String)
*/ */
@Override @Override
protected void fillSettingsForHost(String host){ protected void fillSettingsForHost(String host) {
if (host != null && host.length() != 0){ if (host != null && host.length() != 0) {
if (hostSettingsMap.containsKey(host)){ if (hostSettingsMap.containsKey(host)) {
Map<String, String> hostSettings = hostSettingsMap.get(host); Map<String, String> hostSettings = hostSettingsMap.get(host);
if (hostSettings.get(ITerminalsConnectorConstants.PROP_IP_HOST) != null) { if (hostSettings.get(ITerminalsConnectorConstants.PROP_IP_HOST) != null) {
telnetSettings.setHost(hostSettings.get(ITerminalsConnectorConstants.PROP_IP_HOST)); telnetSettings.setHost(hostSettings.get(ITerminalsConnectorConstants.PROP_IP_HOST));
@ -171,18 +181,20 @@ public class TelnetWizardConfigurationPanel extends AbstractExtendedConfiguratio
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#saveSettingsForHost(boolean) * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#saveSettingsForHost(boolean)
*/ */
@Override @Override
protected void saveSettingsForHost(boolean add){ protected void saveSettingsForHost(boolean add) {
String host = getHostFromSettings(); String host = getHostFromSettings();
if(host != null && host.length() != 0) { if (host != null && host.length() != 0) {
Map<String, String> hostSettings = hostSettingsMap.get(host); Map<String, String> hostSettings = hostSettingsMap.get(host);
if (hostSettings == null && !add) { if (hostSettings == null && !add) {
hostSettings=new HashMap<String, String>(); hostSettings = new HashMap<String, String>();
hostSettingsMap.put(host, hostSettings); hostSettingsMap.put(host, hostSettings);
} }
if (hostSettings != null) { if (hostSettings != null) {
hostSettings.put(ITerminalsConnectorConstants.PROP_IP_HOST, telnetSettings.getHost()); hostSettings.put(ITerminalsConnectorConstants.PROP_IP_HOST, telnetSettings.getHost());
hostSettings.put(ITerminalsConnectorConstants.PROP_IP_PORT, Integer.toString(telnetSettings.getNetworkPort())); hostSettings.put(ITerminalsConnectorConstants.PROP_IP_PORT,
hostSettings.put(ITerminalsConnectorConstants.PROP_TIMEOUT, Integer.toString(telnetSettings.getTimeout())); Integer.toString(telnetSettings.getNetworkPort()));
hostSettings.put(ITerminalsConnectorConstants.PROP_TIMEOUT,
Integer.toString(telnetSettings.getTimeout()));
hostSettings.put(ITerminalsConnectorConstants.PROP_TELNET_EOL, telnetSettings.getEndOfLine()); hostSettings.put(ITerminalsConnectorConstants.PROP_TELNET_EOL, telnetSettings.getEndOfLine());
if (getEncoding() != null) { if (getEncoding() != null) {
hostSettings.put(ITerminalsConnectorConstants.PROP_ENCODING, getEncoding()); hostSettings.put(ITerminalsConnectorConstants.PROP_ENCODING, getEncoding());
@ -195,7 +207,7 @@ public class TelnetWizardConfigurationPanel extends AbstractExtendedConfiguratio
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#isValid() * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#isValid()
*/ */
@Override @Override
public boolean isValid(){ public boolean isValid() {
return isEncodingValid() && telnetSettingsPage.validateSettings(); return isEncodingValid() && telnetSettingsPage.validateSettings();
} }
@ -203,17 +215,17 @@ public class TelnetWizardConfigurationPanel extends AbstractExtendedConfiguratio
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#doSaveWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String) * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#doSaveWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String)
*/ */
@Override @Override
public void doSaveWidgetValues(IDialogSettings settings, String idPrefix) { public void doSaveWidgetValues(IDialogSettings settings, String idPrefix) {
saveSettingsForHost(true); saveSettingsForHost(true);
super.doSaveWidgetValues(settings, idPrefix); super.doSaveWidgetValues(settings, idPrefix);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#getHostFromSettings() * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#getHostFromSettings()
*/ */
@Override @Override
protected String getHostFromSettings() { protected String getHostFromSettings() {
telnetSettingsPage.saveSettings(); telnetSettingsPage.saveSettings();
return telnetSettings.getHost(); return telnetSettings.getHost();
} }
} }

View file

@ -91,18 +91,19 @@ public class TelnetLauncherDelegate extends AbstractLauncherDelegate {
* *
* @return The terminal title string or <code>null</code>. * @return The terminal title string or <code>null</code>.
*/ */
private String getTerminalTitle(Map<String, Object> properties) { private String getTerminalTitle(Map<String, Object> properties) {
// Try to see if the user set a title explicitly via the properties map. // Try to see if the user set a title explicitly via the properties map.
String title = getDefaultTerminalTitle(properties); String title = getDefaultTerminalTitle(properties);
if (title != null) return title; if (title != null)
return title;
//No title,try to calculate the title //No title,try to calculate the title
String host = (String)properties.get(ITerminalsConnectorConstants.PROP_IP_HOST); String host = (String) properties.get(ITerminalsConnectorConstants.PROP_IP_HOST);
if (host != null) { if (host != null) {
DateFormat format = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); DateFormat format = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
String date = format.format(new Date(System.currentTimeMillis())); String date = format.format(new Date(System.currentTimeMillis()));
return NLS.bind(Messages.TelnetLauncherDelegate_terminalTitle, new String[]{host, date}); return NLS.bind(Messages.TelnetLauncherDelegate_terminalTitle, new String[] { host, date });
} }
return Messages.TelnetLauncherDelegate_terminalTitle_default; return Messages.TelnetLauncherDelegate_terminalTitle_default;
@ -116,32 +117,34 @@ public class TelnetLauncherDelegate extends AbstractLauncherDelegate {
if (IMementoHandler.class.equals(adapter)) { if (IMementoHandler.class.equals(adapter)) {
return mementoHandler; return mementoHandler;
} }
return super.getAdapter(adapter); return super.getAdapter(adapter);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#createTerminalConnector(java.util.Map) * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#createTerminalConnector(java.util.Map)
*/ */
@Override @Override
public ITerminalConnector createTerminalConnector(Map<String, Object> properties) { public ITerminalConnector createTerminalConnector(Map<String, Object> properties) {
Assert.isNotNull(properties); Assert.isNotNull(properties);
// Check for the terminal connector id // Check for the terminal connector id
String connectorId = (String)properties.get(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID); String connectorId = (String) properties.get(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID);
if (connectorId == null) connectorId = "org.eclipse.tm.terminal.connector.telnet.TelnetConnector"; //$NON-NLS-1$ if (connectorId == null)
connectorId = "org.eclipse.tm.terminal.connector.telnet.TelnetConnector"; //$NON-NLS-1$
// Extract the telnet properties // Extract the telnet properties
String host = (String)properties.get(ITerminalsConnectorConstants.PROP_IP_HOST); String host = (String) properties.get(ITerminalsConnectorConstants.PROP_IP_HOST);
Object value = properties.get(ITerminalsConnectorConstants.PROP_IP_PORT); Object value = properties.get(ITerminalsConnectorConstants.PROP_IP_PORT);
String port = value != null ? value.toString() : null; String port = value != null ? value.toString() : null;
value = properties.get(ITerminalsConnectorConstants.PROP_TIMEOUT); value = properties.get(ITerminalsConnectorConstants.PROP_TIMEOUT);
String timeout = value != null ? value.toString() : null; String timeout = value != null ? value.toString() : null;
String endOfLine = (String)properties.get(ITerminalsConnectorConstants.PROP_TELNET_EOL); String endOfLine = (String) properties.get(ITerminalsConnectorConstants.PROP_TELNET_EOL);
int portOffset = 0; int portOffset = 0;
if (properties.get(ITerminalsConnectorConstants.PROP_IP_PORT_OFFSET) instanceof Integer) { if (properties.get(ITerminalsConnectorConstants.PROP_IP_PORT_OFFSET) instanceof Integer) {
portOffset = ((Integer)properties.get(ITerminalsConnectorConstants.PROP_IP_PORT_OFFSET)).intValue(); portOffset = ((Integer) properties.get(ITerminalsConnectorConstants.PROP_IP_PORT_OFFSET)).intValue();
if (portOffset < 0) portOffset = 0; if (portOffset < 0)
portOffset = 0;
} }
// The real port to connect to is port + portOffset // The real port to connect to is port + portOffset

View file

@ -33,12 +33,16 @@ public class TelnetMementoHandler implements IMementoHandler {
// Do not write the terminal title to the memento -> needs to // Do not write the terminal title to the memento -> needs to
// be recreated at the time of restoration. // be recreated at the time of restoration.
memento.putString(ITerminalsConnectorConstants.PROP_IP_HOST, (String)properties.get(ITerminalsConnectorConstants.PROP_IP_HOST)); memento.putString(ITerminalsConnectorConstants.PROP_IP_HOST,
(String) properties.get(ITerminalsConnectorConstants.PROP_IP_HOST));
Object value = properties.get(ITerminalsConnectorConstants.PROP_IP_PORT); Object value = properties.get(ITerminalsConnectorConstants.PROP_IP_PORT);
memento.putInteger(ITerminalsConnectorConstants.PROP_IP_PORT, value instanceof Integer ? ((Integer)value).intValue() : -1); memento.putInteger(ITerminalsConnectorConstants.PROP_IP_PORT,
value instanceof Integer ? ((Integer) value).intValue() : -1);
value = properties.get(ITerminalsConnectorConstants.PROP_TIMEOUT); value = properties.get(ITerminalsConnectorConstants.PROP_TIMEOUT);
memento.putInteger(ITerminalsConnectorConstants.PROP_TIMEOUT, value instanceof Integer ? ((Integer)value).intValue() : -1); memento.putInteger(ITerminalsConnectorConstants.PROP_TIMEOUT,
memento.putString(ITerminalsConnectorConstants.PROP_ENCODING, (String)properties.get(ITerminalsConnectorConstants.PROP_ENCODING)); value instanceof Integer ? ((Integer) value).intValue() : -1);
memento.putString(ITerminalsConnectorConstants.PROP_ENCODING,
(String) properties.get(ITerminalsConnectorConstants.PROP_ENCODING));
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -50,9 +54,13 @@ public class TelnetMementoHandler implements IMementoHandler {
Assert.isNotNull(properties); Assert.isNotNull(properties);
// Restore the terminal properties from the memento // Restore the terminal properties from the memento
properties.put(ITerminalsConnectorConstants.PROP_IP_HOST, memento.getString(ITerminalsConnectorConstants.PROP_IP_HOST)); properties.put(ITerminalsConnectorConstants.PROP_IP_HOST,
properties.put(ITerminalsConnectorConstants.PROP_IP_PORT, memento.getInteger(ITerminalsConnectorConstants.PROP_IP_PORT)); memento.getString(ITerminalsConnectorConstants.PROP_IP_HOST));
properties.put(ITerminalsConnectorConstants.PROP_TIMEOUT, memento.getInteger(ITerminalsConnectorConstants.PROP_TIMEOUT)); properties.put(ITerminalsConnectorConstants.PROP_IP_PORT,
properties.put(ITerminalsConnectorConstants.PROP_ENCODING, memento.getString(ITerminalsConnectorConstants.PROP_ENCODING)); memento.getInteger(ITerminalsConnectorConstants.PROP_IP_PORT));
properties.put(ITerminalsConnectorConstants.PROP_TIMEOUT,
memento.getInteger(ITerminalsConnectorConstants.PROP_TIMEOUT));
properties.put(ITerminalsConnectorConstants.PROP_ENCODING,
memento.getString(ITerminalsConnectorConstants.PROP_ENCODING));
} }
} }

View file

@ -13,7 +13,7 @@
# Helmut Haigermoser and Ted Williams. # Helmut Haigermoser and Ted Williams.
# #
# Contributors: # Contributors:
# Michael Scharf (Wind River) - split into core, view and connector plugins # Michael Scharf (Wind River) - split into core, view and connector plugins
# Martin Oberhuber (Wind River) - fixed copyright headers and beautified # Martin Oberhuber (Wind River) - fixed copyright headers and beautified
# Anna Dushistova (MontaVista) - added icons # Anna Dushistova (MontaVista) - added icons
############################################################################### ###############################################################################
@ -31,9 +31,9 @@ bin.includes = .,\
css/,\ css/,\
about.mappings,\ about.mappings,\
cdt_logo_icon32.png cdt_logo_icon32.png
source.. = src/ source.. = src/
output.. = bin/ output.. = bin/
src.includes = schema/,\ src.includes = schema/,\
about.html about.html

View file

@ -13,7 +13,7 @@
# Helmut Haigermoser and Ted Williams. # Helmut Haigermoser and Ted Williams.
# #
# Contributors: # Contributors:
# Michael Scharf (Wind River) - split into core, view and connector plugins # Michael Scharf (Wind River) - split into core, view and connector plugins
# Martin Oberhuber (Wind River) - fixed copyright headers and beautified # Martin Oberhuber (Wind River) - fixed copyright headers and beautified
# Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget # Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget
############################################################################### ###############################################################################

View file

@ -10,7 +10,7 @@
* Contributors: * Contributors:
* Michael Scharf (Wind River) - initial API and implementation * Michael Scharf (Wind River) - initial API and implementation
* Michael Scharf (Wind River) - [200541] Extract from TerminalConnectorExtension.TerminalConnectorProxy * Michael Scharf (Wind River) - [200541] Extract from TerminalConnectorExtension.TerminalConnectorProxy
* Martin Oberhuber (Wind River) - [225853][api] Provide more default functionality in TerminalConnectorImpl * Martin Oberhuber (Wind River) - [225853][api] Provide more default functionality in TerminalConnectorImpl
* Uwe Stieber (Wind River) - [282996] [terminal][api] Add "hidden" attribute to terminal connector extension point * Uwe Stieber (Wind River) - [282996] [terminal][api] Add "hidden" attribute to terminal connector extension point
*******************************************************************************/ *******************************************************************************/
package org.eclipse.tm.internal.terminal.connector; package org.eclipse.tm.internal.terminal.connector;
@ -65,6 +65,7 @@ public class TerminalConnector implements ITerminalConnector {
*/ */
TerminalConnectorImpl makeConnector() throws Exception; TerminalConnectorImpl makeConnector() throws Exception;
} }
/** /**
* The factory for creating impl instances. * The factory for creating impl instances.
*/ */
@ -95,6 +96,7 @@ public class TerminalConnector implements ITerminalConnector {
* This keeps the value until the connector is created. * This keeps the value until the connector is created.
*/ */
private ISettingsStore fStore; private ISettingsStore fStore;
/** /**
* Constructor for the terminal connector. * Constructor for the terminal connector.
* *
@ -104,119 +106,138 @@ public class TerminalConnector implements ITerminalConnector {
* this ID. * this ID.
* @param name translatable name to display the connector in the UI. * @param name translatable name to display the connector in the UI.
*/ */
public TerminalConnector(TerminalConnector.Factory terminalConnectorFactory, String id, String name, boolean hidden) { public TerminalConnector(TerminalConnector.Factory terminalConnectorFactory, String id, String name,
boolean hidden) {
fTerminalConnectorFactory = terminalConnectorFactory; fTerminalConnectorFactory = terminalConnectorFactory;
fId = id; fId = id;
fName = name; fName = name;
fHidden = hidden; fHidden = hidden;
} }
public String getInitializationErrorMessage() { public String getInitializationErrorMessage() {
getConnectorImpl(); getConnectorImpl();
if(fException!=null) if (fException != null)
return fException.getLocalizedMessage(); return fException.getLocalizedMessage();
return null; return null;
} }
public String getId() { public String getId() {
return fId; return fId;
} }
public String getName() { public String getName() {
return fName; return fName;
} }
public boolean isHidden() { public boolean isHidden() {
return fHidden; return fHidden;
} }
private TerminalConnectorImpl getConnectorImpl() { private TerminalConnectorImpl getConnectorImpl() {
if(!isInitialized()) { if (!isInitialized()) {
try { try {
fConnector=fTerminalConnectorFactory.makeConnector(); fConnector = fTerminalConnectorFactory.makeConnector();
fConnector.initialize(); fConnector.initialize();
} catch (Exception e) { } catch (Exception e) {
fException=e; fException = e;
fConnector=new TerminalConnectorImpl(){ fConnector = new TerminalConnectorImpl() {
public void connect(ITerminalControl control) { public void connect(ITerminalControl control) {
// super.connect(control); // super.connect(control);
control.setState(TerminalState.CLOSED); control.setState(TerminalState.CLOSED);
control.setMsg(getInitializationErrorMessage()); control.setMsg(getInitializationErrorMessage());
} }
public OutputStream getTerminalToRemoteStream() { public OutputStream getTerminalToRemoteStream() {
return null; return null;
} }
public String getSettingsSummary() { public String getSettingsSummary() {
return null; return null;
}}; }
};
// that's the place where we log the exception // that's the place where we log the exception
Logger.logException(e); Logger.logException(e);
} }
if(fConnector!=null && fStore!=null) if (fConnector != null && fStore != null)
fConnector.load(fStore); fConnector.load(fStore);
} }
return fConnector; return fConnector;
} }
public boolean isInitialized() { public boolean isInitialized() {
return fConnector!=null || fException!=null; return fConnector != null || fException != null;
} }
public void connect(ITerminalControl control) { public void connect(ITerminalControl control) {
getConnectorImpl().connect(control); getConnectorImpl().connect(control);
} }
public void disconnect() { public void disconnect() {
getConnectorImpl().disconnect(); getConnectorImpl().disconnect();
} }
public OutputStream getTerminalToRemoteStream() { public OutputStream getTerminalToRemoteStream() {
return getConnectorImpl().getTerminalToRemoteStream(); return getConnectorImpl().getTerminalToRemoteStream();
} }
public String getSettingsSummary() { public String getSettingsSummary() {
if(fConnector!=null) if (fConnector != null)
return getConnectorImpl().getSettingsSummary(); return getConnectorImpl().getSettingsSummary();
else else
return TerminalMessages.NotInitialized; return TerminalMessages.NotInitialized;
} }
public boolean isLocalEcho() { public boolean isLocalEcho() {
return getConnectorImpl().isLocalEcho(); return getConnectorImpl().isLocalEcho();
} }
public void load(ISettingsStore store) { public void load(ISettingsStore store) {
if(fConnector==null) { if (fConnector == null) {
fStore=store; fStore = store;
} else { } else {
getConnectorImpl().load(store); getConnectorImpl().load(store);
} }
} }
@Override @Override
public void setDefaultSettings() { public void setDefaultSettings() {
getConnectorImpl().setDefaultSettings(); getConnectorImpl().setDefaultSettings();
} }
public void save(ISettingsStore store) { public void save(ISettingsStore store) {
// no need to save the settings: it cannot have changed // no need to save the settings: it cannot have changed
// because we are not initialized.... // because we are not initialized....
if(fConnector!=null) if (fConnector != null)
getConnectorImpl().save(store); getConnectorImpl().save(store);
} }
public void setTerminalSize(int newWidth, int newHeight) { public void setTerminalSize(int newWidth, int newHeight) {
// we assume that setTerminalSize is called also after // we assume that setTerminalSize is called also after
// the terminal has been initialized. Else we would have to cache // the terminal has been initialized. Else we would have to cache
// the values.... // the values....
if(fConnector!=null) { if (fConnector != null) {
fConnector.setTerminalSize(newWidth, newHeight); fConnector.setTerminalSize(newWidth, newHeight);
} }
} }
public Object getAdapter(Class adapter) { public Object getAdapter(Class adapter) {
TerminalConnectorImpl connector=null; TerminalConnectorImpl connector = null;
if(isInitialized()) if (isInitialized())
connector=getConnectorImpl(); connector = getConnectorImpl();
// if we cannot create the connector then we cannot adapt... // if we cannot create the connector then we cannot adapt...
if(connector!=null) { if (connector != null) {
// maybe the connector is adaptable // maybe the connector is adaptable
if(connector instanceof IAdaptable) { if (connector instanceof IAdaptable) {
Object result =((IAdaptable)connector).getAdapter(adapter); Object result = ((IAdaptable) connector).getAdapter(adapter);
// Not sure if the next block is needed.... // Not sure if the next block is needed....
if(result==null) if (result == null)
//defer to the platform //defer to the platform
result= Platform.getAdapterManager().getAdapter(connector, adapter); result = Platform.getAdapterManager().getAdapter(connector, adapter);
if(result!=null) if (result != null)
return result; return result;
} }
// maybe the real adapter is what we need.... // maybe the real adapter is what we need....
if(adapter.isInstance(connector)) if (adapter.isInstance(connector))
return connector; return connector;
} }
// maybe we have to be adapted.... // maybe we have to be adapted....

View file

@ -29,19 +29,22 @@ public class TerminalToRemoteInjectionOutputStream extends FilterOutputStream {
*/ */
static abstract public class Interceptor { static abstract public class Interceptor {
protected OutputStream fOriginal; protected OutputStream fOriginal;
/** /**
* @param original the injection into the original stream begins * @param original the injection into the original stream begins
* @throws IOException * @throws IOException
*/ */
public void begin(OutputStream original) throws IOException { public void begin(OutputStream original) throws IOException {
fOriginal=original; fOriginal = original;
} }
/** /**
* @param b a byte was written to the {@link TerminalToRemoteInjectionOutputStream}. * @param b a byte was written to the {@link TerminalToRemoteInjectionOutputStream}.
* @throws IOException * @throws IOException
*/ */
public void write(int b) throws IOException { public void write(int b) throws IOException {
} }
/** /**
* @param b bytes written to the {@link TerminalToRemoteInjectionOutputStream}. * @param b bytes written to the {@link TerminalToRemoteInjectionOutputStream}.
* @param off the start offset in the data. * @param off the start offset in the data.
@ -50,122 +53,144 @@ public class TerminalToRemoteInjectionOutputStream extends FilterOutputStream {
*/ */
public void write(byte[] b, int off, int len) throws IOException { public void write(byte[] b, int off, int len) throws IOException {
} }
/** /**
* The injection into the normal stream ends. * The injection into the normal stream ends.
* @throws IOException * @throws IOException
*/ */
public void close() throws IOException { public void close() throws IOException {
} }
public void flush() { public void flush() {
} }
} }
static public class BufferInterceptor extends Interceptor { static public class BufferInterceptor extends Interceptor {
private final ByteArrayOutputStream fBuffer=new ByteArrayOutputStream(); private final ByteArrayOutputStream fBuffer = new ByteArrayOutputStream();
public void close() throws IOException {
fOriginal.write(fBuffer.toByteArray()); public void close() throws IOException {
fOriginal.write(fBuffer.toByteArray());
} }
public void write(byte[] b, int off, int len) throws IOException { public void write(byte[] b, int off, int len) throws IOException {
fBuffer.write(b, off, len); fBuffer.write(b, off, len);
} }
public void write(int b) throws IOException { public void write(int b) throws IOException {
fBuffer.write(b); fBuffer.write(b);
} }
} }
private class TerminalFilterOutputStream extends OutputStream { private class TerminalFilterOutputStream extends OutputStream {
final private Object fLock=TerminalToRemoteInjectionOutputStream.this; final private Object fLock = TerminalToRemoteInjectionOutputStream.this;
public void close() throws IOException { public void close() throws IOException {
synchronized(fLock) { synchronized (fLock) {
if(fInjection==this) { if (fInjection == this) {
flush(); flush();
ungrabOutput(); ungrabOutput();
} }
} }
} }
public void write(byte[] b, int off, int len) throws IOException { public void write(byte[] b, int off, int len) throws IOException {
synchronized(fLock) { synchronized (fLock) {
checkStream(); checkStream();
out.write(b, off, len); out.write(b, off, len);
} }
} }
public void write(byte[] b) throws IOException { public void write(byte[] b) throws IOException {
synchronized(fLock) { synchronized (fLock) {
checkStream(); checkStream();
out.write(b); out.write(b);
} }
} }
public void flush() throws IOException { public void flush() throws IOException {
synchronized(fLock) { synchronized (fLock) {
checkStream(); checkStream();
out.flush(); out.flush();
} }
} }
public void write(int b) throws IOException { public void write(int b) throws IOException {
synchronized(fLock) { synchronized (fLock) {
checkStream(); checkStream();
out.write(b); out.write(b);
} }
} }
private void checkStream() throws IOException { private void checkStream() throws IOException {
if(fInjection!=this) if (fInjection != this)
throw new IOException("Stream is closed"); //$NON-NLS-1$ throw new IOException("Stream is closed"); //$NON-NLS-1$
} }
} }
private Interceptor fInterceptor;
private TerminalFilterOutputStream fInjection; private Interceptor fInterceptor;
private TerminalFilterOutputStream fInjection;
public TerminalToRemoteInjectionOutputStream(OutputStream out) { public TerminalToRemoteInjectionOutputStream(OutputStream out) {
super(out); super(out);
} }
synchronized protected void ungrabOutput() throws IOException { synchronized protected void ungrabOutput() throws IOException {
if(fInterceptor!=null) { if (fInterceptor != null) {
fInterceptor.close(); fInterceptor.close();
fInterceptor=null; fInterceptor = null;
fInjection=null; fInjection = null;
} }
} }
/**
* There can only be one injection stream active at a time. You must call close on the /**
* returned output stream to end the injection. * There can only be one injection stream active at a time. You must call close on the
* @param interceptor This is used handle bytes sent while the injection stream is active. * returned output stream to end the injection.
* @return a output stream that can be used to write to the decorated stream. * @param interceptor This is used handle bytes sent while the injection stream is active.
* @throws IOException * @return a output stream that can be used to write to the decorated stream.
*/ * @throws IOException
public synchronized OutputStream grabOutput(Interceptor interceptor) throws IOException { */
if(fInjection!=null) { public synchronized OutputStream grabOutput(Interceptor interceptor) throws IOException {
throw new IOException("Buffer in use"); //$NON-NLS-1$ if (fInjection != null) {
} throw new IOException("Buffer in use"); //$NON-NLS-1$
fInterceptor=interceptor; }
fInterceptor.begin(out); fInterceptor = interceptor;
fInjection=new TerminalFilterOutputStream(); fInterceptor.begin(out);
return fInjection; fInjection = new TerminalFilterOutputStream();
} return fInjection;
/** See {@link #grabOutput(TerminalToRemoteInjectionOutputStream.Interceptor)}.
* @return injection output stream
* @throws IOException
*/
public synchronized OutputStream grabOutput() throws IOException {
return grabOutput(new BufferInterceptor());
}
synchronized public void close() throws IOException {
if(fInjection!=null) {
fInjection.close();
}
super.close();
} }
/** See {@link #grabOutput(TerminalToRemoteInjectionOutputStream.Interceptor)}.
* @return injection output stream
* @throws IOException
*/
public synchronized OutputStream grabOutput() throws IOException {
return grabOutput(new BufferInterceptor());
}
synchronized public void close() throws IOException {
if (fInjection != null) {
fInjection.close();
}
super.close();
}
synchronized public void flush() throws IOException { synchronized public void flush() throws IOException {
if(fInterceptor!=null) if (fInterceptor != null)
fInterceptor.flush(); fInterceptor.flush();
out.flush(); out.flush();
} }
synchronized public void write(byte[] b, int off, int len) throws IOException {
if(fInterceptor!=null) synchronized public void write(byte[] b, int off, int len) throws IOException {
fInterceptor.write(b, off, len); if (fInterceptor != null)
else fInterceptor.write(b, off, len);
out.write(b, off, len); else
out.write(b, off, len);
} }
synchronized public void write(int b) throws IOException { synchronized public void write(int b) throws IOException {
if(fInterceptor!=null) if (fInterceptor != null)
fInterceptor.write(b); fInterceptor.write(b);
else else
out.write(b); out.write(b);
} }
} }

View file

@ -41,8 +41,6 @@ import org.eclipse.swt.widgets.Sash;
import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.fieldassist.ContentAssistCommandAdapter; import org.eclipse.ui.fieldassist.ContentAssistCommandAdapter;
/** /**
* Manages the Command History for the command line input * Manages the Command History for the command line input
* of the terminal control. * of the terminal control.
@ -60,16 +58,16 @@ public class CommandInputFieldWithHistory implements ICommandInputField {
private class FieldAssist implements IContentProposalProvider { private class FieldAssist implements IContentProposalProvider {
public IContentProposal[] getProposals(String contents, int position) { public IContentProposal[] getProposals(String contents, int position) {
String prefix=contents.substring(0, position); String prefix = contents.substring(0, position);
List<Proposal> result=new ArrayList<Proposal>(); List<Proposal> result = new ArrayList<Proposal>();
// show an entry only once // show an entry only once
Set<String> seen=new HashSet<String>(); Set<String> seen = new HashSet<String>();
for (Iterator<String> iterator = fHistory.iterator(); iterator.hasNext();) { for (Iterator<String> iterator = fHistory.iterator(); iterator.hasNext();) {
String history = iterator.next(); String history = iterator.next();
if(history.startsWith(prefix) && !seen.contains(history)) { if (history.startsWith(prefix) && !seen.contains(history)) {
// the content is the rest of the history item // the content is the rest of the history item
String content=history.substring(prefix.length()); String content = history.substring(prefix.length());
result.add(new Proposal(content,history)); result.add(new Proposal(content, history));
// don't add this proposal again // don't add this proposal again
seen.add(history); seen.add(history);
} }
@ -78,14 +76,17 @@ public class CommandInputFieldWithHistory implements ICommandInputField {
} }
} }
private static class Proposal implements IContentProposal { private static class Proposal implements IContentProposal {
private final String fContent; private final String fContent;
private final String fLabel; private final String fLabel;
Proposal(String content, String label) { Proposal(String content, String label) {
fContent= content; fContent = content;
fLabel= label; fLabel = label;
} }
public String getContent() { public String getContent() {
return fContent; return fContent;
} }
@ -103,7 +104,7 @@ public class CommandInputFieldWithHistory implements ICommandInputField {
} }
} }
final List<String> fHistory=new ArrayList<String>(); final List<String> fHistory = new ArrayList<String>();
/** /**
* Keeps a modifiable history while in history editing mode * Keeps a modifiable history while in history editing mode
*/ */
@ -111,7 +112,7 @@ public class CommandInputFieldWithHistory implements ICommandInputField {
/** /**
* The current position in the edit history * The current position in the edit history
*/ */
private int fEditHistoryPos=0; private int fEditHistoryPos = 0;
/** /**
* The limit of the history. * The limit of the history.
*/ */
@ -122,9 +123,11 @@ public class CommandInputFieldWithHistory implements ICommandInputField {
private Text fInputField; private Text fInputField;
private Sash fSash; private Sash fSash;
private Composite fPanel; private Composite fPanel;
public CommandInputFieldWithHistory(int maxHistorySize) { public CommandInputFieldWithHistory(int maxHistorySize) {
fMaxSize=maxHistorySize; fMaxSize = maxHistorySize;
} }
/** /**
* Add a line to the history. * Add a line to the history.
* @param line The line to be added to the history. * @param line The line to be added to the history.
@ -132,16 +135,17 @@ public class CommandInputFieldWithHistory implements ICommandInputField {
protected void pushLine(String line) { protected void pushLine(String line) {
endHistoryMode(); endHistoryMode();
// anything to remember? // anything to remember?
if(line==null || line.trim().length()==0) if (line == null || line.trim().length() == 0)
return; return;
fHistory.add(0,line); fHistory.add(0, line);
// ignore if the same as last // ignore if the same as last
if(fHistory.size()>1 && line.equals(fHistory.get(1))) if (fHistory.size() > 1 && line.equals(fHistory.get(1)))
fHistory.remove(0); fHistory.remove(0);
// limit the history size. // limit the history size.
if(fHistory.size()>=fMaxSize) if (fHistory.size() >= fMaxSize)
fHistory.remove(fHistory.size()-1); fHistory.remove(fHistory.size() - 1);
} }
/** /**
* Sets the history * Sets the history
* @param history or null * @param history or null
@ -149,34 +153,36 @@ public class CommandInputFieldWithHistory implements ICommandInputField {
public void setHistory(String history) { public void setHistory(String history) {
endHistoryMode(); endHistoryMode();
fHistory.clear(); fHistory.clear();
if(history==null) if (history == null)
return; return;
// add history entries separated by '\n' // add history entries separated by '\n'
// fHistory.addAll(Arrays.asList(history.split("\n"))); //$NON-NLS-1$ // fHistory.addAll(Arrays.asList(history.split("\n"))); //$NON-NLS-1$
//<J2ME CDC-1.1 Foundation-1.1 variant> //<J2ME CDC-1.1 Foundation-1.1 variant>
StringTokenizer tok=new StringTokenizer(history,"\n"); //$NON-NLS-1$ StringTokenizer tok = new StringTokenizer(history, "\n"); //$NON-NLS-1$
while(tok.hasMoreElements()) while (tok.hasMoreElements())
fHistory.add((String) tok.nextElement()); fHistory.add((String) tok.nextElement());
//</J2ME CDC-1.1 Foundation-1.1 variant> //</J2ME CDC-1.1 Foundation-1.1 variant>
} }
/** /**
* @return the current content of the history buffer and new line separated list * @return the current content of the history buffer and new line separated list
*/ */
public String getHistory() { public String getHistory() {
StringBuffer buff=new StringBuffer(); StringBuffer buff = new StringBuffer();
boolean sep=false; boolean sep = false;
for (Iterator<String> iterator = fHistory.iterator(); iterator.hasNext();) { for (Iterator<String> iterator = fHistory.iterator(); iterator.hasNext();) {
String line=iterator.next(); String line = iterator.next();
if(line.length()>0) { if (line.length() > 0) {
if(sep) if (sep)
buff.append("\n"); //$NON-NLS-1$ buff.append("\n"); //$NON-NLS-1$
else else
sep=true; sep = true;
buff.append(line); buff.append(line);
} }
} }
return buff.toString(); return buff.toString();
} }
/** /**
* @param currLine Line of text to be moved in history * @param currLine Line of text to be moved in history
* @param count (+1 or -1) for forward and backward movement. -1 goes back * @param count (+1 or -1) for forward and backward movement. -1 goes back
@ -184,22 +190,23 @@ public class CommandInputFieldWithHistory implements ICommandInputField {
* if the limit is reached. * if the limit is reached.
*/ */
public String move(String currLine, int count) { public String move(String currLine, int count) {
if(!inHistoryMode()) { if (!inHistoryMode()) {
fEditedHistory=new ArrayList<Object>(fHistory.size()+1); fEditedHistory = new ArrayList<Object>(fHistory.size() + 1);
fEditedHistory.add(currLine); fEditedHistory.add(currLine);
fEditedHistory.addAll(fHistory); fEditedHistory.addAll(fHistory);
fEditHistoryPos=0; fEditHistoryPos = 0;
} }
fEditedHistory.set(fEditHistoryPos,currLine); fEditedHistory.set(fEditHistoryPos, currLine);
if(fEditHistoryPos+count>=fEditedHistory.size()) if (fEditHistoryPos + count >= fEditedHistory.size())
return null; return null;
if(fEditHistoryPos+count<0) if (fEditHistoryPos + count < 0)
return null; return null;
fEditHistoryPos+=count; fEditHistoryPos += count;
return (String) fEditedHistory.get(fEditHistoryPos); return (String) fEditedHistory.get(fEditHistoryPos);
} }
private boolean inHistoryMode() { private boolean inHistoryMode() {
return fEditedHistory!=null; return fEditedHistory != null;
} }
/** /**
@ -207,41 +214,43 @@ public class CommandInputFieldWithHistory implements ICommandInputField {
* @return the string to be shown in the command line * @return the string to be shown in the command line
*/ */
protected String escape() { protected String escape() {
if(!inHistoryMode()) if (!inHistoryMode())
return null; return null;
String line= (String) fEditedHistory.get(0); String line = (String) fEditedHistory.get(0);
endHistoryMode(); endHistoryMode();
return line; return line;
} }
/** /**
* End history editing * End history editing
*/ */
private void endHistoryMode() { private void endHistoryMode() {
fEditedHistory=null; fEditedHistory = null;
fEditHistoryPos=0; fEditHistoryPos = 0;
} }
public void createControl(final Composite parent,final ITerminalViewControl terminal) {
// fSash = new Sash(parent,SWT.HORIZONTAL|SWT.SMOOTH); public void createControl(final Composite parent, final ITerminalViewControl terminal) {
fSash = new Sash(parent,SWT.HORIZONTAL); // fSash = new Sash(parent,SWT.HORIZONTAL|SWT.SMOOTH);
fSash = new Sash(parent, SWT.HORIZONTAL);
final GridData gd_sash = new GridData(SWT.FILL, SWT.CENTER, true, false); final GridData gd_sash = new GridData(SWT.FILL, SWT.CENTER, true, false);
gd_sash.heightHint=5; gd_sash.heightHint = 5;
fSash.setLayoutData(gd_sash); fSash.setLayoutData(gd_sash);
fSash.addListener (SWT.Selection, new Listener () { fSash.addListener(SWT.Selection, new Listener() {
public void handleEvent (Event e) { public void handleEvent(Event e) {
if (e.detail == SWT.DRAG) { if (e.detail == SWT.DRAG) {
// don't redraw during drag, it causes paint errors - bug 220971 // don't redraw during drag, it causes paint errors - bug 220971
return; return;
} }
// no idea why this is needed // no idea why this is needed
GridData gdata = (GridData) fInputField.getLayoutData(); GridData gdata = (GridData) fInputField.getLayoutData();
Rectangle sashRect = fSash.getBounds (); Rectangle sashRect = fSash.getBounds();
Rectangle containerRect = parent.getClientArea (); Rectangle containerRect = parent.getClientArea();
int h=fInputField.getLineHeight(); int h = fInputField.getLineHeight();
// make sure the input filed height is a multiple of the line height // make sure the input filed height is a multiple of the line height
gdata.heightHint = Math.max(((containerRect.height-e.y-sashRect.height)/h)*h,h); gdata.heightHint = Math.max(((containerRect.height - e.y - sashRect.height) / h) * h, h);
// do not show less then one line // do not show less then one line
e.y=Math.min(e.y,containerRect.height-h); e.y = Math.min(e.y, containerRect.height - h);
fInputField.setLayoutData(gdata); fInputField.setLayoutData(gdata);
parent.layout(); parent.layout();
// else the content assist icon will be replicated // else the content assist icon will be replicated
@ -250,17 +259,20 @@ public class CommandInputFieldWithHistory implements ICommandInputField {
}); });
fPanel = new Composite(parent, SWT.NONE); fPanel = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout(); GridLayout layout = new GridLayout();
layout.marginWidth = 0; layout.marginHeight = 0; layout.marginTop = 0; layout.marginBottom = 2; layout.marginWidth = 0;
layout.marginHeight = 0;
layout.marginTop = 0;
layout.marginBottom = 2;
fPanel.setLayout(layout); fPanel.setLayout(layout);
fPanel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); fPanel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
fInputField=new Text(fPanel, SWT.MULTI|SWT.BORDER|SWT.WRAP|SWT.V_SCROLL); fInputField = new Text(fPanel, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
GridData data=new GridData(SWT.FILL, SWT.FILL, true, false); GridData data = new GridData(SWT.FILL, SWT.FILL, true, false);
boolean installDecoration=true; boolean installDecoration = true;
if(installDecoration) { if (installDecoration) {
// The ContentAssistCommandAdapter says: "The client is responsible for // The ContentAssistCommandAdapter says: "The client is responsible for
// ensuring that adequate space is reserved for the decoration." // ensuring that adequate space is reserved for the decoration."
// TODO: what is the "adequate space"??? // TODO: what is the "adequate space"???
data.horizontalIndent=6; data.horizontalIndent = 6;
} }
fInputField.setLayoutData(data); fInputField.setLayoutData(data);
fInputField.setFont(terminal.getFont()); fInputField.setFont(terminal.getFont());
@ -268,57 +280,56 @@ public class CommandInputFieldWithHistory implements ICommandInputField {
// Else the ENTER key is sent *first* to the input field // Else the ENTER key is sent *first* to the input field
// and then to the field assist popup. // and then to the field assist popup.
// (https://bugs.eclipse.org/bugs/show_bug.cgi?id=211659) // (https://bugs.eclipse.org/bugs/show_bug.cgi?id=211659)
new ContentAssistCommandAdapter( new ContentAssistCommandAdapter(fInputField, new TextContentAdapter(), new FieldAssist(), null, null,
fInputField,
new TextContentAdapter(),
new FieldAssist(),
null,
null,
installDecoration); installDecoration);
fInputField.addKeyListener(new KeyListener(){ fInputField.addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e) { public void keyPressed(KeyEvent e) {
// if the field assist has handled the key already then // if the field assist has handled the key already then
// ignore it (https://bugs.eclipse.org/bugs/show_bug.cgi?id=211659) // ignore it (https://bugs.eclipse.org/bugs/show_bug.cgi?id=211659)
if(!e.doit) if (!e.doit)
return; return;
if(e.character==SWT.CR || e.character==SWT.LF) { if (e.character == SWT.CR || e.character == SWT.LF) {
e.doit=false; e.doit = false;
String line=fInputField.getText(); String line = fInputField.getText();
if(!terminal.pasteString(line+'\r')) if (!terminal.pasteString(line + '\r'))
return; return;
pushLine(line); pushLine(line);
setCommand("");//$NON-NLS-1$ setCommand("");//$NON-NLS-1$
} else if(e.keyCode==SWT.ARROW_UP || e.keyCode==SWT.PAGE_UP) { } else if (e.keyCode == SWT.ARROW_UP || e.keyCode == SWT.PAGE_UP) {
e.doit=false; e.doit = false;
setCommand(move(fInputField.getText(),1)); setCommand(move(fInputField.getText(), 1));
} else if(e.keyCode==SWT.ARROW_DOWN || e.keyCode==SWT.PAGE_DOWN) { } else if (e.keyCode == SWT.ARROW_DOWN || e.keyCode == SWT.PAGE_DOWN) {
e.doit=false; e.doit = false;
setCommand(move(fInputField.getText(),-1)); setCommand(move(fInputField.getText(), -1));
} else if(e.keyCode==SWT.ESC) { } else if (e.keyCode == SWT.ESC) {
e.doit=false; e.doit = false;
setCommand(escape()); setCommand(escape());
} }
} }
private void setCommand(String line) { private void setCommand(String line) {
if(line==null) if (line == null)
return; return;
fInputField.setText(line); fInputField.setText(line);
fInputField.setSelection(fInputField.getCharCount()); fInputField.setSelection(fInputField.getCharCount());
} }
public void keyReleased(KeyEvent e) { public void keyReleased(KeyEvent e) {
} }
}); });
} }
public void setFont(Font font) { public void setFont(Font font) {
fInputField.setFont(font); fInputField.setFont(font);
fInputField.getParent().layout(true); fInputField.getParent().layout(true);
} }
public void dispose() { public void dispose() {
fSash.dispose(); fSash.dispose();
fSash=null; fSash = null;
fPanel.dispose(); fPanel.dispose();
fPanel=null; fPanel = null;
fInputField.dispose(); fInputField.dispose();
fInputField=null; fInputField = null;
} }
} }

View file

@ -1,11 +1,11 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2007, 2018 Wind River Systems, Inc. and others. * Copyright (c) 2007, 2018 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0 * are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/ * https://www.eclipse.org/legal/epl-2.0/
* *
* Contributors: * Contributors:
* Michael Scharf (Wind River) - initial implementation * Michael Scharf (Wind River) - initial implementation
*******************************************************************************/ *******************************************************************************/
package org.eclipse.tm.internal.terminal.control; package org.eclipse.tm.internal.terminal.control;
@ -23,8 +23,9 @@ public interface ICommandInputField {
* @param terminal * @param terminal
*/ */
void createControl(Composite parent, ITerminalViewControl terminal); void createControl(Composite parent, ITerminalViewControl terminal);
void dispose(); void dispose();
/** /**
* Sets the font of a control created with {@link #createControl(Composite, ITerminalViewControl)} * Sets the font of a control created with {@link #createControl(Composite, ITerminalViewControl)}
* @param control * @param control

View file

@ -13,7 +13,7 @@ package org.eclipse.tm.internal.terminal.control;
/** /**
* Terminal listener allowing to listen to terminal selection changes. * Terminal listener allowing to listen to terminal selection changes.
* *
* @since 4.1 * @since 4.1
*/ */
public interface ITerminalListener2 extends ITerminalListener { public interface ITerminalListener2 extends ITerminalListener {

View file

@ -17,7 +17,7 @@ import org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly;
* Terminal specific version of {@link org.eclipse.swt.events.MouseListener} * Terminal specific version of {@link org.eclipse.swt.events.MouseListener}
* @since 4.1 * @since 4.1
*/ */
public interface ITerminalMouseListener { public interface ITerminalMouseListener {
/** /**
* Invoked when a double-click has happend inside the terminal control.<br> * Invoked when a double-click has happend inside the terminal control.<br>
* <br> * <br>
@ -26,6 +26,7 @@ public interface ITerminalMouseListener {
* @param button see {@link org.eclipse.swt.events.MouseEvent#button} for the meaning of the button values * @param button see {@link org.eclipse.swt.events.MouseEvent#button} for the meaning of the button values
*/ */
void mouseDoubleClick(ITerminalTextDataReadOnly terminalText, int line, int column, int button); void mouseDoubleClick(ITerminalTextDataReadOnly terminalText, int line, int column, int button);
/** /**
* Invoked when a mouse button is pushed down inside the terminal control.<br> * Invoked when a mouse button is pushed down inside the terminal control.<br>
* <br> * <br>
@ -34,6 +35,7 @@ public interface ITerminalMouseListener {
* @param button see {@link org.eclipse.swt.events.MouseEvent#button} for the meaning of the button values * @param button see {@link org.eclipse.swt.events.MouseEvent#button} for the meaning of the button values
*/ */
void mouseDown(ITerminalTextDataReadOnly terminalText, int line, int column, int button); void mouseDown(ITerminalTextDataReadOnly terminalText, int line, int column, int button);
/** /**
* Invoked when a mouse button is released inside the terminal control.<br> * Invoked when a mouse button is released inside the terminal control.<br>
* <br> * <br>

View file

@ -50,13 +50,15 @@ public interface ITerminalViewControl {
*/ */
String getEncoding(); String getEncoding();
boolean isEmpty(); boolean isEmpty();
/**
* Sets the Terminal font /**
* @deprecated use {@link #setFont(String)} in order to support bold and italic variants of the given font * Sets the Terminal font
* @param font * @deprecated use {@link #setFont(String)} in order to support bold and italic variants of the given font
*/ * @param font
*/
void setFont(Font font); void setFont(Font font);
/** /**
* Sets the font for the Terminal, using a JFace symbolic font name, such * Sets the font for the Terminal, using a JFace symbolic font name, such
* that bold and italic variants can be leveraged. * that bold and italic variants can be leveraged.
@ -64,51 +66,74 @@ public interface ITerminalViewControl {
* @param fontName * @param fontName
*/ */
void setFont(String fontName); void setFont(String fontName);
void setInvertedColors(boolean invert); void setInvertedColors(boolean invert);
Font getFont(); Font getFont();
/** /**
* @return the text control * @return the text control
*/ */
Control getControl(); Control getControl();
/** /**
* @return the root of all controls * @return the root of all controls
*/ */
Control getRootControl(); Control getRootControl();
boolean isDisposed();
void selectAll(); boolean isDisposed();
void clearTerminal();
void copy(); void selectAll();
void paste();
String getSelection(); void clearTerminal();
TerminalState getState();
Clipboard getClipboard(); void copy();
void disconnectTerminal();
void disposeTerminal(); void paste();
String getSettingsSummary();
ITerminalConnector[] getConnectors(); String getSelection();
void setFocus();
ITerminalConnector getTerminalConnector(); TerminalState getState();
void setConnector(ITerminalConnector connector);
void connectTerminal(); Clipboard getClipboard();
/**
* @param write a single character to terminal void disconnectTerminal();
*/
void sendKey(char arg0); void disposeTerminal();
String getSettingsSummary();
ITerminalConnector[] getConnectors();
void setFocus();
ITerminalConnector getTerminalConnector();
void setConnector(ITerminalConnector connector);
void connectTerminal();
/**
* @param write a single character to terminal
*/
void sendKey(char arg0);
/** /**
* @param string write string to terminal * @param string write string to terminal
*/ */
public boolean pasteString(String string); public boolean pasteString(String string);
boolean isConnected(); boolean isConnected();
/** /**
* @param inputField null means no input field is shown * @param inputField null means no input field is shown
*/ */
void setCommandInputField(ICommandInputField inputField); void setCommandInputField(ICommandInputField inputField);
/**
* @return null or the current input field /**
*/ * @return null or the current input field
ICommandInputField getCommandInputField(); */
ICommandInputField getCommandInputField();
/** /**
* @return the maximum number of lines to display * @return the maximum number of lines to display
@ -121,13 +146,16 @@ public interface ITerminalViewControl {
* in the terminal view. -1 means unlimited. * in the terminal view. -1 means unlimited.
*/ */
public void setBufferLineLimit(int bufferLineLimit); public void setBufferLineLimit(int bufferLineLimit);
boolean isScrollLock(); boolean isScrollLock();
void setScrollLock(boolean on); void setScrollLock(boolean on);
/** /**
* @since 4.1 * @since 4.1
*/ */
void addMouseListener(ITerminalMouseListener listener); void addMouseListener(ITerminalMouseListener listener);
/** /**
* @since 4.1 * @since 4.1
*/ */

View file

@ -1,11 +1,11 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2006, 2018 Wind River Systems, Inc. and others. * Copyright (c) 2006, 2018 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0 * are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/ * https://www.eclipse.org/legal/epl-2.0/
* *
* Contributors: * Contributors:
* Michael Scharf (Wind River) - initial API and implementation * Michael Scharf (Wind River) - initial API and implementation
* Martin Oberhuber (Wind River) - fixed copyright headers and beautified * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
* Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget * Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget
@ -23,7 +23,8 @@ public class TerminalViewControlFactory {
* @param wndParent The Window parent to embed the Terminal in. * @param wndParent The Window parent to embed the Terminal in.
* @param connectors Provided connectors. * @param connectors Provided connectors.
*/ */
public static ITerminalViewControl makeControl(ITerminalListener target, Composite wndParent, ITerminalConnector[] connectors) { public static ITerminalViewControl makeControl(ITerminalListener target, Composite wndParent,
ITerminalConnector[] connectors) {
return makeControl(target, wndParent, connectors, false); return makeControl(target, wndParent, connectors, false);
} }
@ -32,12 +33,13 @@ public class TerminalViewControlFactory {
* @param target Callback for notifying the owner of Terminal state changes. * @param target Callback for notifying the owner of Terminal state changes.
* @param wndParent The Window parent to embed the Terminal in. * @param wndParent The Window parent to embed the Terminal in.
* @param connectors Provided connectors. * @param connectors Provided connectors.
* @param useCommonPrefs If <code>true</code>, the Terminal widget will pick up settings * @param useCommonPrefs If <code>true</code>, the Terminal widget will pick up settings
* from the <code>org.eclipse.tm.terminal.TerminalPreferencePage</code> Preference page. * from the <code>org.eclipse.tm.terminal.TerminalPreferencePage</code> Preference page.
* Otherwise, clients need to maintain settings themselves. * Otherwise, clients need to maintain settings themselves.
* @since 3.2 * @since 3.2
*/ */
public static ITerminalViewControl makeControl(ITerminalListener target, Composite wndParent, ITerminalConnector[] connectors, boolean useCommonPrefs) { public static ITerminalViewControl makeControl(ITerminalListener target, Composite wndParent,
ITerminalConnector[] connectors, boolean useCommonPrefs) {
return new VT100TerminalControl(target, wndParent, connectors, useCommonPrefs); return new VT100TerminalControl(target, wndParent, connectors, useCommonPrefs);
} }

View file

@ -32,13 +32,11 @@ public abstract class AbstractTerminalAction extends Action {
this(null, strId, 0); this(null, strId, 0);
} }
public AbstractTerminalAction(ITerminalViewControl target, public AbstractTerminalAction(ITerminalViewControl target, String strId) {
String strId) {
this(target, strId, 0); this(target, strId, 0);
} }
public AbstractTerminalAction(ITerminalViewControl target, public AbstractTerminalAction(ITerminalViewControl target, String strId, int style) {
String strId, int style) {
super("", style); //$NON-NLS-1$ super("", style); //$NON-NLS-1$
fTarget = target; fTarget = target;
@ -48,27 +46,20 @@ public abstract class AbstractTerminalAction extends Action {
abstract public void run(); abstract public void run();
protected void setupAction(String strText, String strToolTip, protected void setupAction(String strText, String strToolTip, String strImage, String strEnabledImage,
String strImage, String strEnabledImage, String strDisabledImage, String strDisabledImage, boolean bEnabled) {
boolean bEnabled) { setupAction(strText, strToolTip, strImage, strEnabledImage, strDisabledImage, bEnabled,
setupAction(strText, strToolTip, strImage, strEnabledImage, TerminalPlugin.getDefault().getImageRegistry());
strDisabledImage, bEnabled, TerminalPlugin.getDefault()
.getImageRegistry());
} }
protected void setupAction(String strText, String strToolTip, protected void setupAction(String strText, String strToolTip, String strHoverImage, String strEnabledImage,
String strHoverImage, String strEnabledImage, String strDisabledImage, boolean bEnabled, ImageRegistry imageRegistry) {
String strDisabledImage, boolean bEnabled, setupAction(strText, strToolTip, imageRegistry.getDescriptor(strHoverImage),
ImageRegistry imageRegistry) { imageRegistry.getDescriptor(strEnabledImage), imageRegistry.getDescriptor(strDisabledImage), bEnabled);
setupAction(strText, strToolTip, imageRegistry
.getDescriptor(strHoverImage), imageRegistry
.getDescriptor(strEnabledImage), imageRegistry
.getDescriptor(strDisabledImage), bEnabled);
} }
protected void setupAction(String strText, String strToolTip, protected void setupAction(String strText, String strToolTip, ImageDescriptor hoverImage,
ImageDescriptor hoverImage, ImageDescriptor enabledImage, ImageDescriptor enabledImage, ImageDescriptor disabledImage, boolean bEnabled) {
ImageDescriptor disabledImage, boolean bEnabled) {
setText(strText); setText(strText);
setToolTipText(strToolTip); setToolTipText(strToolTip);
setEnabled(bEnabled); setEnabled(bEnabled);
@ -85,7 +76,7 @@ public abstract class AbstractTerminalAction extends Action {
/** /**
* Return the terminal instance on which the action should operate. * Return the terminal instance on which the action should operate.
* *
* @return the terminal instance on which the action should operate. * @return the terminal instance on which the action should operate.
*/ */
protected ITerminalViewControl getTarget() { protected ITerminalViewControl getTarget() {

View file

@ -23,8 +23,7 @@ import org.eclipse.osgi.util.NLS;
public class ActionMessages extends NLS { public class ActionMessages extends NLS {
static { static {
NLS.initializeMessages(ActionMessages.class.getName(), NLS.initializeMessages(ActionMessages.class.getName(), ActionMessages.class);
ActionMessages.class);
} }
public static String COPY; public static String COPY;

View file

@ -13,7 +13,7 @@
# Helmut Haigermoser and Ted Williams. # Helmut Haigermoser and Ted Williams.
# #
# Contributors: # Contributors:
# Michael Scharf (Wind River) - split into core, view and connector plugins # Michael Scharf (Wind River) - split into core, view and connector plugins
# Martin Oberhuber (Wind River) - fixed copyright headers and beautified # Martin Oberhuber (Wind River) - fixed copyright headers and beautified
# Anna Dushistova (MontaVista) - [227537] moved actions from terminal.view to terminal plugin # Anna Dushistova (MontaVista) - [227537] moved actions from terminal.view to terminal plugin
############################################################################### ###############################################################################

View file

@ -23,7 +23,7 @@ public interface ImageConsts {
public final static String IMAGE_DIR_ROOT = "icons/"; //$NON-NLS-1$ public final static String IMAGE_DIR_ROOT = "icons/"; //$NON-NLS-1$
public final static String IMAGE_DIR_LOCALTOOL = IMAGE_DIR_ROOT + "clcl16/"; // basic colors - size 16x16 //$NON-NLS-1$ public final static String IMAGE_DIR_LOCALTOOL = IMAGE_DIR_ROOT + "clcl16/"; // basic colors - size 16x16 //$NON-NLS-1$
public final static String IMAGE_DIR_DLCL = IMAGE_DIR_ROOT + "dlcl16/"; // disabled - size 16x16 //$NON-NLS-1$ public final static String IMAGE_DIR_DLCL = IMAGE_DIR_ROOT + "dlcl16/"; // disabled - size 16x16 //$NON-NLS-1$
public final static String IMAGE_DIR_ELCL = IMAGE_DIR_ROOT+ "elcl16/"; // enabled - size 16x16 //$NON-NLS-1$ public final static String IMAGE_DIR_ELCL = IMAGE_DIR_ROOT + "elcl16/"; // enabled - size 16x16 //$NON-NLS-1$
public static final String IMAGE_CLCL_CLEAR_ALL = "ImageClclClearAll"; //$NON-NLS-1$ public static final String IMAGE_CLCL_CLEAR_ALL = "ImageClclClearAll"; //$NON-NLS-1$

View file

@ -26,19 +26,15 @@ public class TerminalActionClearAll extends AbstractTerminalAction {
public TerminalActionClearAll() { public TerminalActionClearAll() {
super(TerminalActionClearAll.class.getName()); super(TerminalActionClearAll.class.getName());
setupAction(ActionMessages.CLEARALL, ActionMessages.CLEARALL, setupAction(ActionMessages.CLEARALL, ActionMessages.CLEARALL, ImageConsts.IMAGE_CLCL_CLEAR_ALL,
ImageConsts.IMAGE_CLCL_CLEAR_ALL, ImageConsts.IMAGE_ELCL_CLEAR_ALL, ImageConsts.IMAGE_DLCL_CLEAR_ALL, false);
ImageConsts.IMAGE_ELCL_CLEAR_ALL,
ImageConsts.IMAGE_DLCL_CLEAR_ALL, false);
} }
public TerminalActionClearAll(ITerminalViewControl target) { public TerminalActionClearAll(ITerminalViewControl target) {
super(target, TerminalActionClearAll.class.getName()); super(target, TerminalActionClearAll.class.getName());
setupAction(ActionMessages.CLEARALL, ActionMessages.CLEARALL, setupAction(ActionMessages.CLEARALL, ActionMessages.CLEARALL, ImageConsts.IMAGE_CLCL_CLEAR_ALL,
ImageConsts.IMAGE_CLCL_CLEAR_ALL, ImageConsts.IMAGE_ELCL_CLEAR_ALL, ImageConsts.IMAGE_DLCL_CLEAR_ALL, false);
ImageConsts.IMAGE_ELCL_CLEAR_ALL,
ImageConsts.IMAGE_DLCL_CLEAR_ALL, false);
} }
public void run() { public void run() {

View file

@ -29,20 +29,18 @@ public class TerminalActionCopy extends AbstractTerminalAction {
super(TerminalActionCopy.class.getName()); super(TerminalActionCopy.class.getName());
setActionDefinitionId("org.eclipse.tm.terminal.copy"); //$NON-NLS-1$ setActionDefinitionId("org.eclipse.tm.terminal.copy"); //$NON-NLS-1$
ISharedImages si = PlatformUI.getWorkbench().getSharedImages(); ISharedImages si = PlatformUI.getWorkbench().getSharedImages();
setupAction(ActionMessages.COPY, ActionMessages.COPY, si setupAction(ActionMessages.COPY, ActionMessages.COPY, si.getImageDescriptor(ISharedImages.IMG_TOOL_COPY),
.getImageDescriptor(ISharedImages.IMG_TOOL_COPY), si si.getImageDescriptor(ISharedImages.IMG_TOOL_COPY),
.getImageDescriptor(ISharedImages.IMG_TOOL_COPY), si si.getImageDescriptor(ISharedImages.IMG_TOOL_COPY_DISABLED), true);
.getImageDescriptor(ISharedImages.IMG_TOOL_COPY_DISABLED), true);
} }
public TerminalActionCopy(ITerminalViewControl target) { public TerminalActionCopy(ITerminalViewControl target) {
super(target, TerminalActionCopy.class.getName()); super(target, TerminalActionCopy.class.getName());
setActionDefinitionId("org.eclipse.tm.terminal.copy"); //$NON-NLS-1$ setActionDefinitionId("org.eclipse.tm.terminal.copy"); //$NON-NLS-1$
ISharedImages si = PlatformUI.getWorkbench().getSharedImages(); ISharedImages si = PlatformUI.getWorkbench().getSharedImages();
setupAction(ActionMessages.COPY, ActionMessages.COPY, si setupAction(ActionMessages.COPY, ActionMessages.COPY, si.getImageDescriptor(ISharedImages.IMG_TOOL_COPY),
.getImageDescriptor(ISharedImages.IMG_TOOL_COPY), si si.getImageDescriptor(ISharedImages.IMG_TOOL_COPY),
.getImageDescriptor(ISharedImages.IMG_TOOL_COPY), si si.getImageDescriptor(ISharedImages.IMG_TOOL_COPY_DISABLED), true);
.getImageDescriptor(ISharedImages.IMG_TOOL_COPY_DISABLED), true);
} }
public void run() { public void run() {

View file

@ -27,19 +27,17 @@ public class TerminalActionCut extends AbstractTerminalAction {
public TerminalActionCut() { public TerminalActionCut() {
super(TerminalActionCut.class.getName()); super(TerminalActionCut.class.getName());
ISharedImages si = PlatformUI.getWorkbench().getSharedImages(); ISharedImages si = PlatformUI.getWorkbench().getSharedImages();
setupAction(ActionMessages.CUT, ActionMessages.CUT, si setupAction(ActionMessages.CUT, ActionMessages.CUT, si.getImageDescriptor(ISharedImages.IMG_TOOL_CUT),
.getImageDescriptor(ISharedImages.IMG_TOOL_CUT), si si.getImageDescriptor(ISharedImages.IMG_TOOL_CUT),
.getImageDescriptor(ISharedImages.IMG_TOOL_CUT), si si.getImageDescriptor(ISharedImages.IMG_TOOL_CUT_DISABLED), true);
.getImageDescriptor(ISharedImages.IMG_TOOL_CUT_DISABLED), true);
} }
public TerminalActionCut(ITerminalViewControl target) { public TerminalActionCut(ITerminalViewControl target) {
super(target, TerminalActionCut.class.getName()); super(target, TerminalActionCut.class.getName());
ISharedImages si = PlatformUI.getWorkbench().getSharedImages(); ISharedImages si = PlatformUI.getWorkbench().getSharedImages();
setupAction(ActionMessages.CUT, ActionMessages.CUT, si setupAction(ActionMessages.CUT, ActionMessages.CUT, si.getImageDescriptor(ISharedImages.IMG_TOOL_CUT),
.getImageDescriptor(ISharedImages.IMG_TOOL_CUT), si si.getImageDescriptor(ISharedImages.IMG_TOOL_CUT),
.getImageDescriptor(ISharedImages.IMG_TOOL_CUT), si si.getImageDescriptor(ISharedImages.IMG_TOOL_CUT_DISABLED), true);
.getImageDescriptor(ISharedImages.IMG_TOOL_CUT_DISABLED), true);
} }
public void run() { public void run() {

View file

@ -33,22 +33,18 @@ public class TerminalActionPaste extends AbstractTerminalAction {
super(TerminalActionPaste.class.getName()); super(TerminalActionPaste.class.getName());
setActionDefinitionId("org.eclipse.tm.terminal.paste"); //$NON-NLS-1$ setActionDefinitionId("org.eclipse.tm.terminal.paste"); //$NON-NLS-1$
ISharedImages si = PlatformUI.getWorkbench().getSharedImages(); ISharedImages si = PlatformUI.getWorkbench().getSharedImages();
setupAction(ActionMessages.PASTE, ActionMessages.PASTE, setupAction(ActionMessages.PASTE, ActionMessages.PASTE, si.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE),
si.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE), si.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE),
si.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE), si.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE_DISABLED), false);
si.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE_DISABLED),
false);
} }
public TerminalActionPaste(ITerminalViewControl target) { public TerminalActionPaste(ITerminalViewControl target) {
super(target, TerminalActionPaste.class.getName()); super(target, TerminalActionPaste.class.getName());
setActionDefinitionId("org.eclipse.tm.terminal.paste"); //$NON-NLS-1$ setActionDefinitionId("org.eclipse.tm.terminal.paste"); //$NON-NLS-1$
ISharedImages si = PlatformUI.getWorkbench().getSharedImages(); ISharedImages si = PlatformUI.getWorkbench().getSharedImages();
setupAction(ActionMessages.PASTE, ActionMessages.PASTE, setupAction(ActionMessages.PASTE, ActionMessages.PASTE, si.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE),
si.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE), si.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE),
si.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE), si.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE_DISABLED), false);
si.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE_DISABLED),
false);
} }
public void run() { public void run() {
@ -62,8 +58,7 @@ public class TerminalActionPaste extends AbstractTerminalAction {
ITerminalViewControl target = getTarget(); ITerminalViewControl target = getTarget();
boolean bEnabled = target != null && target.getClipboard() != null && !target.getClipboard().isDisposed(); boolean bEnabled = target != null && target.getClipboard() != null && !target.getClipboard().isDisposed();
if (bEnabled) { if (bEnabled) {
String strText = (String) target.getClipboard().getContents( String strText = (String) target.getClipboard().getContents(TextTransfer.getInstance());
TextTransfer.getInstance());
bEnabled = ((strText != null) && (!strText.equals("")) && (target.getState() == TerminalState.CONNECTED));//$NON-NLS-1$ bEnabled = ((strText != null) && (!strText.equals("")) && (target.getState() == TerminalState.CONNECTED));//$NON-NLS-1$
} }
setEnabled(bEnabled); setEnabled(bEnabled);

View file

@ -27,15 +27,13 @@ public class TerminalActionSelectAll extends AbstractTerminalAction {
public TerminalActionSelectAll() { public TerminalActionSelectAll() {
super(TerminalActionSelectAll.class.getName()); super(TerminalActionSelectAll.class.getName());
setupAction(ActionMessages.SELECTALL, ActionMessages.SELECTALL, setupAction(ActionMessages.SELECTALL, ActionMessages.SELECTALL, (ImageDescriptor) null, null, null, false);
(ImageDescriptor) null, null, null, false);
} }
public TerminalActionSelectAll(ITerminalViewControl target) { public TerminalActionSelectAll(ITerminalViewControl target) {
super(target, TerminalActionSelectAll.class.getName()); super(target, TerminalActionSelectAll.class.getName());
setupAction(ActionMessages.SELECTALL, ActionMessages.SELECTALL, setupAction(ActionMessages.SELECTALL, ActionMessages.SELECTALL, (ImageDescriptor) null, null, null, false);
(ImageDescriptor) null, null, null, false);
} }
public void run() { public void run() {

View file

@ -1,11 +1,11 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2006, 2018 Wind River Systems, Inc. and others. * Copyright (c) 2006, 2018 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0 * are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/ * https://www.eclipse.org/legal/epl-2.0/
* *
* Contributors: * Contributors:
* Michael Scharf (Wind River) - initial API and implementation * Michael Scharf (Wind River) - initial API and implementation
* Martin Oberhuber (Wind River) - fixed copyright headers and beautified * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
* Anton Leherbauer (Wind River) - [458398] Add support for normal/application cursor keys mode * Anton Leherbauer (Wind River) - [458398] Add support for normal/application cursor keys mode
@ -23,19 +23,21 @@ import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
* *
*/ */
public interface ITerminalControlForText { public interface ITerminalControlForText {
TerminalState getState(); TerminalState getState();
void setState(TerminalState state); void setState(TerminalState state);
void setTerminalTitle(String title); void setTerminalTitle(String title);
ITerminalConnector getTerminalConnector(); ITerminalConnector getTerminalConnector();
OutputStream getOutputStream(); OutputStream getOutputStream();
/** /**
* Enable/disable Application Cursor Keys mode (DECCKM) * Enable/disable Application Cursor Keys mode (DECCKM)
* @param enable * @param enable
*/ */
void enableApplicationCursorKeys(boolean enable); void enableApplicationCursorKeys(boolean enable);
} }

View file

@ -1,11 +1,11 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2006, 2018 Wind River Systems, Inc. and others. * Copyright (c) 2006, 2018 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0 * are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/ * https://www.eclipse.org/legal/epl-2.0/
* *
* Contributors: * Contributors:
* Michael Scharf (Wind River) - initial API and implementation * Michael Scharf (Wind River) - initial API and implementation
* Martin Oberhuber (Wind River) - fixed copyright headers and beautified * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
* Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget * Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget
@ -19,14 +19,14 @@ public class TerminalMessages extends NLS {
NLS.initializeMessages(TerminalMessages.class.getName(), TerminalMessages.class); NLS.initializeMessages(TerminalMessages.class.getName(), TerminalMessages.class);
} }
public static String TerminalError; public static String TerminalError;
public static String SocketError; public static String SocketError;
public static String IOError; public static String IOError;
public static String CannotConnectTo; public static String CannotConnectTo;
public static String NotInitialized; public static String NotInitialized;
//Preference Page //Preference Page
public static String INVERT_COLORS; public static String INVERT_COLORS;
public static String BUFFERLINES; public static String BUFFERLINES;
} }

View file

@ -13,7 +13,7 @@
# Helmut Haigermoser and Ted Williams. # Helmut Haigermoser and Ted Williams.
# #
# Contributors: # Contributors:
# Michael Scharf (Wind River) - split into core, view and connector plugins # Michael Scharf (Wind River) - split into core, view and connector plugins
# Martin Oberhuber (Wind River) - fixed copyright headers and beautified # Martin Oberhuber (Wind River) - fixed copyright headers and beautified
# Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget # Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget
############################################################################### ###############################################################################

View file

@ -31,14 +31,15 @@ import org.osgi.framework.BundleContext;
public class TerminalPlugin extends AbstractUIPlugin { public class TerminalPlugin extends AbstractUIPlugin {
private static TerminalPlugin plugin; private static TerminalPlugin plugin;
public static final String PLUGIN_ID = "org.eclipse.tm.terminal.control"; //$NON-NLS-1$ public static final String PLUGIN_ID = "org.eclipse.tm.terminal.control"; //$NON-NLS-1$
public static final String HELP_VIEW = PLUGIN_ID + ".terminal_view"; //$NON-NLS-1$ public static final String HELP_VIEW = PLUGIN_ID + ".terminal_view"; //$NON-NLS-1$
/** /**
* The constructor. * The constructor.
*/ */
public TerminalPlugin() { public TerminalPlugin() {
} }
/** /**
* Returns the shared instance. * Returns the shared instance.
*/ */
@ -50,7 +51,7 @@ public class TerminalPlugin extends AbstractUIPlugin {
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/ */
@Override @Override
public void start(BundleContext context) throws Exception { public void start(BundleContext context) throws Exception {
super.start(context); super.start(context);
plugin = this; plugin = this;
} }
@ -59,7 +60,7 @@ public class TerminalPlugin extends AbstractUIPlugin {
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/ */
@Override @Override
public void stop(BundleContext context) throws Exception { public void stop(BundleContext context) throws Exception {
plugin = null; plugin = null;
super.stop(context); super.stop(context);
} }
@ -73,20 +74,24 @@ public class TerminalPlugin extends AbstractUIPlugin {
} }
@Override @Override
protected void initializeImageRegistry(ImageRegistry imageRegistry) { protected void initializeImageRegistry(ImageRegistry imageRegistry) {
try { try {
// Local toolbars // Local toolbars
putImageInRegistry(imageRegistry, ImageConsts.IMAGE_CLCL_CLEAR_ALL, ImageConsts.IMAGE_DIR_LOCALTOOL + "clear_co.gif"); //$NON-NLS-1$ putImageInRegistry(imageRegistry, ImageConsts.IMAGE_CLCL_CLEAR_ALL,
ImageConsts.IMAGE_DIR_LOCALTOOL + "clear_co.gif"); //$NON-NLS-1$
// Enabled local toolbars // Enabled local toolbars
putImageInRegistry(imageRegistry, ImageConsts.IMAGE_ELCL_CLEAR_ALL, ImageConsts.IMAGE_DIR_ELCL + "clear_co.gif"); //$NON-NLS-1$ putImageInRegistry(imageRegistry, ImageConsts.IMAGE_ELCL_CLEAR_ALL,
ImageConsts.IMAGE_DIR_ELCL + "clear_co.gif"); //$NON-NLS-1$
// Disabled local toolbars // Disabled local toolbars
putImageInRegistry(imageRegistry, ImageConsts.IMAGE_DLCL_CLEAR_ALL, ImageConsts.IMAGE_DIR_DLCL + "clear_co.gif"); //$NON-NLS-1$ putImageInRegistry(imageRegistry, ImageConsts.IMAGE_DLCL_CLEAR_ALL,
ImageConsts.IMAGE_DIR_DLCL + "clear_co.gif"); //$NON-NLS-1$
} catch (MalformedURLException malformedURLException) { } catch (MalformedURLException malformedURLException) {
malformedURLException.printStackTrace(); malformedURLException.printStackTrace();
} }
} }
protected void putImageInRegistry(ImageRegistry imageRegistry, String strKey, String relativePath) throws MalformedURLException { protected void putImageInRegistry(ImageRegistry imageRegistry, String strKey, String relativePath)
throws MalformedURLException {
URL url = TerminalPlugin.getDefault().getBundle().getEntry(relativePath); URL url = TerminalPlugin.getDefault().getBundle().getEntry(relativePath);
ImageDescriptor imageDescriptor = ImageDescriptor.createFromURL(url); ImageDescriptor imageDescriptor = ImageDescriptor.createFromURL(url);
imageRegistry.put(strKey, imageDescriptor); imageRegistry.put(strKey, imageDescriptor);

View file

@ -33,7 +33,7 @@ class EditActionAccelerators {
private void addAccelerator(String commandId) { private void addAccelerator(String commandId) {
TriggerSequence[] bindings = bindingsFor(commandId); TriggerSequence[] bindings = bindingsFor(commandId);
for (int i=0; i<bindings.length; ++i) { for (int i = 0; i < bindings.length; ++i) {
if (bindings[i] instanceof KeySequence) { if (bindings[i] instanceof KeySequence) {
KeyStroke[] keyStrokes = ((KeySequence) bindings[i]).getKeyStrokes(); KeyStroke[] keyStrokes = ((KeySequence) bindings[i]).getKeyStrokes();
if (keyStrokes.length != 0) { if (keyStrokes.length != 0) {

View file

@ -1,11 +1,11 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2007, 2018 Wind River Systems, Inc. and others. * Copyright (c) 2007, 2018 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0 * are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/ * https://www.eclipse.org/legal/epl-2.0/
* *
* Contributors: * Contributors:
* Michael Scharf (Wind River) - initial API and implementation * Michael Scharf (Wind River) - initial API and implementation
* Anton Leherbauer (Wind River) - [433751] Add option to enable VT100 line wrapping mode * Anton Leherbauer (Wind River) - [433751] Add option to enable VT100 line wrapping mode
* Anton Leherbauer (Wind River) - [458218] Add support for ANSI insert mode * Anton Leherbauer (Wind River) - [458218] Add support for ANSI insert mode
@ -73,17 +73,17 @@ public interface IVT100EmulatorBackend {
void eraseLineToCursor(); void eraseLineToCursor();
/** /**
* Inserts n lines at line with cursor. Lines displayed below cursor move down. * Inserts n lines at line with cursor. Lines displayed below cursor move down.
* Lines moved past the bottom margin are lost. This sequence is ignored when * Lines moved past the bottom margin are lost. This sequence is ignored when
* cursor is outside scrolling region. * cursor is outside scrolling region.
* @param n the number of lines to insert * @param n the number of lines to insert
*/ */
void insertLines(int n); void insertLines(int n);
/** /**
* Deletes n characters, starting with the character at cursor position. * Deletes n characters, starting with the character at cursor position.
* When a character is deleted, all characters to the right of cursor move * When a character is deleted, all characters to the right of cursor move
* left. This creates a space character at right margin. This character * left. This creates a space character at right margin. This character
* has same character attribute as the last character moved left. * has same character attribute as the last character moved left.
* @param n * @param n
* 012345 * 012345
@ -92,9 +92,9 @@ public interface IVT100EmulatorBackend {
void deleteCharacters(int n); void deleteCharacters(int n);
/** /**
* Deletes n lines, starting at line with cursor. As lines are deleted, * Deletes n lines, starting at line with cursor. As lines are deleted,
* lines displayed below cursor move up. Lines added to bottom of screen * lines displayed below cursor move up. Lines added to bottom of screen
* have spaces with same character attributes as last line moved up. This * have spaces with same character attributes as last line moved up. This
* sequence is ignored when cursor is outside scrolling region. * sequence is ignored when cursor is outside scrolling region.
* @param n the number of lines to delete * @param n the number of lines to delete
*/ */
@ -117,7 +117,7 @@ public interface IVT100EmulatorBackend {
* view, wrapping text at the right edge of the screen and overwriting text * view, wrapping text at the right edge of the screen and overwriting text
* when the cursor is not at the very end of the screen's text. * when the cursor is not at the very end of the screen's text.
* <p> * <p>
* *
* There are never any ANSI control characters or escape sequences in the * There are never any ANSI control characters or escape sequences in the
* text being displayed by this method (this includes newlines, carriage * text being displayed by this method (this includes newlines, carriage
* returns, and tabs). * returns, and tabs).
@ -134,7 +134,7 @@ public interface IVT100EmulatorBackend {
* first column of the next line, as if a carriage return (CR) and a NL were * first column of the next line, as if a carriage return (CR) and a NL were
* written. * written.
* <p> * <p>
* *
* UNIX terminals typically display a NL character as a CR followed by a NL * UNIX terminals typically display a NL character as a CR followed by a NL
* because the terminal device typically has the ONLCR attribute bit set * because the terminal device typically has the ONLCR attribute bit set
* (see the termios(4) man page for details), which causes the terminal * (see the termios(4) man page for details), which causes the terminal
@ -151,7 +151,7 @@ public interface IVT100EmulatorBackend {
* This method returns the relative line number of the line containing the * This method returns the relative line number of the line containing the
* cursor. The returned line number is relative to the topmost visible line, * cursor. The returned line number is relative to the topmost visible line,
* which has relative line number 0. * which has relative line number 0.
* *
* @return The relative line number of the line containing the cursor. * @return The relative line number of the line containing the cursor.
*/ */
int getCursorLine(); int getCursorLine();
@ -181,7 +181,7 @@ public interface IVT100EmulatorBackend {
* If enabled, writing to the rightmost column does not cause * If enabled, writing to the rightmost column does not cause
* an immediate wrap to the next line. Instead the line wrap occurs on the * an immediate wrap to the next line. Instead the line wrap occurs on the
* next output character. * next output character.
* *
* @param enable whether to enable or disable VT100 line wrapping mode * @param enable whether to enable or disable VT100 line wrapping mode
*/ */
void setVT100LineWrapping(boolean enable); void setVT100LineWrapping(boolean enable);
@ -193,14 +193,14 @@ public interface IVT100EmulatorBackend {
/** /**
* Enables/disables insert mode (IRM). * Enables/disables insert mode (IRM).
* *
* @param enable whether to enable insert mode * @param enable whether to enable insert mode
*/ */
void setInsertMode(boolean enable); void setInsertMode(boolean enable);
/** /**
* Set scrolling region. Negative values reset the scroll region. * Set scrolling region. Negative values reset the scroll region.
* *
* @param top top line of scroll region * @param top top line of scroll region
* @param bottom bottom line of scroll region * @param bottom bottom line of scroll region
*/ */
@ -208,14 +208,14 @@ public interface IVT100EmulatorBackend {
/** /**
* Scroll text upwards. * Scroll text upwards.
* *
* @param lines number of lines to scroll * @param lines number of lines to scroll
*/ */
void scrollUp(int lines); void scrollUp(int lines);
/** /**
* Scroll text downwards. * Scroll text downwards.
* *
* @param lines number of lines to scroll * @param lines number of lines to scroll
*/ */
void scrollDown(int lines); void scrollDown(int lines);

View file

@ -1,11 +1,11 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2007, 2018 Wind River Systems, Inc. and others. * Copyright (c) 2007, 2018 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0 * are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/ * https://www.eclipse.org/legal/epl-2.0/
* *
* Contributors: * Contributors:
* Michael Scharf (Wind River) - initial API and implementation * Michael Scharf (Wind River) - initial API and implementation
*******************************************************************************/ *******************************************************************************/
package org.eclipse.tm.internal.terminal.emulator; package org.eclipse.tm.internal.terminal.emulator;
@ -23,25 +23,25 @@ public class LoggingOutputStream extends FilterOutputStream {
} }
public void write(byte[] b, int off, int len) throws IOException { public void write(byte[] b, int off, int len) throws IOException {
if(Logger.isLogEnabled()) if (Logger.isLogEnabled())
Logger.log("Received " + len + " bytes: '" + //$NON-NLS-1$ //$NON-NLS-2$ Logger.log("Received " + len + " bytes: '" + //$NON-NLS-1$ //$NON-NLS-2$
Logger.encode(new String(b, 0, len)) + "'"); //$NON-NLS-1$ Logger.encode(new String(b, 0, len)) + "'"); //$NON-NLS-1$
// we cannot call super.write, because this would call our write // we cannot call super.write, because this would call our write
// which logs character by character..... // which logs character by character.....
//super.write(b, off, len); //super.write(b, off, len);
if ((off | len | (b.length - (len + off)) | (off + len)) < 0) if ((off | len | (b.length - (len + off)) | (off + len)) < 0)
throw new IndexOutOfBoundsException(); throw new IndexOutOfBoundsException();
for (int i = 0 ; i < len ; i++) { for (int i = 0; i < len; i++) {
super.write(b[off + i]); super.write(b[off + i]);
} }
} }
public void write(int b) throws IOException { public void write(int b) throws IOException {
if(Logger.isLogEnabled()) if (Logger.isLogEnabled())
Logger.log("Received " + 1 + " bytes: '" + //$NON-NLS-1$ //$NON-NLS-2$ Logger.log("Received " + 1 + " bytes: '" + //$NON-NLS-1$ //$NON-NLS-2$
Logger.encode(new String(new byte[]{(byte)b}, 0, 1)) + "'"); //$NON-NLS-1$ Logger.encode(new String(new byte[] { (byte) b }, 0, 1)) + "'"); //$NON-NLS-1$
super.write(b); super.write(b);
} }

View file

@ -1,11 +1,11 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2007, 2018 Wind River Systems, Inc. and others. * Copyright (c) 2007, 2018 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0 * are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/ * https://www.eclipse.org/legal/epl-2.0/
* *
* Contributors: * Contributors:
* Michael Scharf (Wind River) - initial API and implementation * Michael Scharf (Wind River) - initial API and implementation
* Anton Leherbauer (Wind River) - [433751] Add option to enable VT100 line wrapping mode * Anton Leherbauer (Wind River) - [433751] Add option to enable VT100 line wrapping mode
* Anton Leherbauer (Wind River) - [458218] Add support for ANSI insert mode * Anton Leherbauer (Wind River) - [458218] Add support for ANSI insert mode
@ -20,13 +20,14 @@ import org.eclipse.tm.terminal.model.Style;
public class VT100BackendTraceDecorator implements IVT100EmulatorBackend { public class VT100BackendTraceDecorator implements IVT100EmulatorBackend {
final IVT100EmulatorBackend fBackend; final IVT100EmulatorBackend fBackend;
final PrintStream fWriter; final PrintStream fWriter;
public VT100BackendTraceDecorator(IVT100EmulatorBackend backend, PrintStream out) { public VT100BackendTraceDecorator(IVT100EmulatorBackend backend, PrintStream out) {
fBackend = backend; fBackend = backend;
fWriter=out; fWriter = out;
} }
public void appendString(String buffer) { public void appendString(String buffer) {
fWriter.println("appendString(\""+buffer+"\")"); //$NON-NLS-1$ //$NON-NLS-2$ fWriter.println("appendString(\"" + buffer + "\")"); //$NON-NLS-1$ //$NON-NLS-2$
fBackend.appendString(buffer); fBackend.appendString(buffer);
} }
@ -36,12 +37,12 @@ public class VT100BackendTraceDecorator implements IVT100EmulatorBackend {
} }
public void deleteCharacters(int n) { public void deleteCharacters(int n) {
fWriter.println("deleteCharacters("+n+")"); //$NON-NLS-1$ //$NON-NLS-2$ fWriter.println("deleteCharacters(" + n + ")"); //$NON-NLS-1$ //$NON-NLS-2$
fBackend.deleteCharacters(n); fBackend.deleteCharacters(n);
} }
public void deleteLines(int n) { public void deleteLines(int n) {
fWriter.println("deleteLines("+n+")"); //$NON-NLS-1$ //$NON-NLS-2$ fWriter.println("deleteLines(" + n + ")"); //$NON-NLS-1$ //$NON-NLS-2$
fBackend.deleteLines(n); fBackend.deleteLines(n);
} }
@ -100,12 +101,12 @@ public class VT100BackendTraceDecorator implements IVT100EmulatorBackend {
} }
public void insertCharacters(int charactersToInsert) { public void insertCharacters(int charactersToInsert) {
fWriter.println("insertCharacters("+charactersToInsert+")"); //$NON-NLS-1$ //$NON-NLS-2$ fWriter.println("insertCharacters(" + charactersToInsert + ")"); //$NON-NLS-1$ //$NON-NLS-2$
fBackend.insertCharacters(charactersToInsert); fBackend.insertCharacters(charactersToInsert);
} }
public void insertLines(int n) { public void insertLines(int n) {
fWriter.println("insertLines("+n+")"); //$NON-NLS-1$ //$NON-NLS-2$ fWriter.println("insertLines(" + n + ")"); //$NON-NLS-1$ //$NON-NLS-2$
fBackend.insertLines(n); fBackend.insertLines(n);
} }
@ -115,37 +116,37 @@ public class VT100BackendTraceDecorator implements IVT100EmulatorBackend {
} }
public void setCursor(int targetLine, int targetColumn) { public void setCursor(int targetLine, int targetColumn) {
fWriter.println("setCursor("+targetLine+", "+targetColumn+")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ fWriter.println("setCursor(" + targetLine + ", " + targetColumn + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
fBackend.setCursor(targetLine, targetColumn); fBackend.setCursor(targetLine, targetColumn);
} }
public void setCursorColumn(int targetColumn) { public void setCursorColumn(int targetColumn) {
fWriter.println("setCursorColumn("+targetColumn+")"); //$NON-NLS-1$ //$NON-NLS-2$ fWriter.println("setCursorColumn(" + targetColumn + ")"); //$NON-NLS-1$ //$NON-NLS-2$
fBackend.setCursorColumn(targetColumn); fBackend.setCursorColumn(targetColumn);
} }
public void setCursorLine(int targetLine) { public void setCursorLine(int targetLine) {
fWriter.println("setCursorLine("+targetLine+")"); //$NON-NLS-1$ //$NON-NLS-2$ fWriter.println("setCursorLine(" + targetLine + ")"); //$NON-NLS-1$ //$NON-NLS-2$
fBackend.setCursorLine(targetLine); fBackend.setCursorLine(targetLine);
} }
public void setDefaultStyle(Style defaultStyle) { public void setDefaultStyle(Style defaultStyle) {
fWriter.println("setDefaultStyle("+defaultStyle+")"); //$NON-NLS-1$ //$NON-NLS-2$ fWriter.println("setDefaultStyle(" + defaultStyle + ")"); //$NON-NLS-1$ //$NON-NLS-2$
fBackend.setDefaultStyle(defaultStyle); fBackend.setDefaultStyle(defaultStyle);
} }
public void setDimensions(int lines, int cols) { public void setDimensions(int lines, int cols) {
fWriter.println("setDimensions("+lines+","+cols+")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ fWriter.println("setDimensions(" + lines + "," + cols + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
fBackend.setDimensions(lines, cols); fBackend.setDimensions(lines, cols);
} }
public void setStyle(Style style) { public void setStyle(Style style) {
fWriter.println("setStyle("+style+")"); //$NON-NLS-1$ //$NON-NLS-2$ fWriter.println("setStyle(" + style + ")"); //$NON-NLS-1$ //$NON-NLS-2$
fBackend.setStyle(style); fBackend.setStyle(style);
} }
public void setVT100LineWrapping(boolean enable) { public void setVT100LineWrapping(boolean enable) {
fWriter.println("setVT100LineWrapping("+enable+")"); //$NON-NLS-1$ //$NON-NLS-2$ fWriter.println("setVT100LineWrapping(" + enable + ")"); //$NON-NLS-1$ //$NON-NLS-2$
fBackend.setVT100LineWrapping(enable); fBackend.setVT100LineWrapping(enable);
} }
@ -154,22 +155,22 @@ public class VT100BackendTraceDecorator implements IVT100EmulatorBackend {
} }
public void setInsertMode(boolean enable) { public void setInsertMode(boolean enable) {
fWriter.println("setInsertMode("+enable+")"); //$NON-NLS-1$ //$NON-NLS-2$ fWriter.println("setInsertMode(" + enable + ")"); //$NON-NLS-1$ //$NON-NLS-2$
fBackend.setInsertMode(enable); fBackend.setInsertMode(enable);
} }
public void setScrollRegion(int top, int bottom) { public void setScrollRegion(int top, int bottom) {
fWriter.println("setScrollRegion("+top+','+bottom+")"); //$NON-NLS-1$ //$NON-NLS-2$ fWriter.println("setScrollRegion(" + top + ',' + bottom + ")"); //$NON-NLS-1$ //$NON-NLS-2$
fBackend.setScrollRegion(top, bottom); fBackend.setScrollRegion(top, bottom);
} }
public void scrollUp(int lines) { public void scrollUp(int lines) {
fWriter.println("scrollUp("+lines+")"); //$NON-NLS-1$ //$NON-NLS-2$ fWriter.println("scrollUp(" + lines + ")"); //$NON-NLS-1$ //$NON-NLS-2$
fBackend.scrollUp(lines); fBackend.scrollUp(lines);
} }
public void scrollDown(int lines) { public void scrollDown(int lines) {
fWriter.println("scrollDown("+lines+")"); //$NON-NLS-1$ //$NON-NLS-2$ fWriter.println("scrollDown(" + lines + ")"); //$NON-NLS-1$ //$NON-NLS-2$
fBackend.scrollDown(lines); fBackend.scrollDown(lines);
} }

Some files were not shown because too many files have changed in this diff Show more