package org.eclipse.dltk.debug.ui.launchConfigurations; import org.eclipse.core.runtime.IStatus; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.dltk.debug.core.DLTKDebugPlugin; import org.eclipse.dltk.debug.ui.messages.DLTKLaunchConfigurationsMessages; import org.eclipse.dltk.internal.launching.LaunchConfigurationUtils; import org.eclipse.dltk.launching.ScriptLaunchConfigurationConstants; import org.eclipse.dltk.ui.preferences.FieldValidators; import org.eclipse.dltk.ui.util.SWTFactory; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Text; public abstract class RemoteLaunchConfigurationTab extends ScriptLaunchConfigurationTab { private static int DEFAULT_PORT = 10000; private static String DEFAULT_IDEKEY = "idekey"; //$NON-NLS-1$ protected Text port; protected Text ideKey; protected Text timeoutText; protected Text remoteWorkingDir; protected Button stripSourceFolders; public RemoteLaunchConfigurationTab(String mode) { super(mode); } /* * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getName() */ public String getName() { return DLTKLaunchConfigurationsMessages.remoteTab_title; } /* * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#getImage() */ @Override public Image getImage() { return DebugUITools.getImage(IDebugUIConstants.IMG_LCL_DISCONNECT); } /* * @see * org.eclipse.dltk.debug.ui.launchConfigurations.ScriptLaunchConfigurationTab * #doInitializeForm(org.eclipse.debug.core.ILaunchConfiguration) */ protected void doInitializeForm(ILaunchConfiguration config) { port.setText(LaunchConfigurationUtils.getString(config, ScriptLaunchConfigurationConstants.ATTR_DLTK_DBGP_PORT, Integer .toString(getDefaultPort()))); ideKey.setText(LaunchConfigurationUtils.getString(config, ScriptLaunchConfigurationConstants.ATTR_DLTK_DBGP_SESSION_ID, getDefaultIDEKey())); timeoutText.setText(Integer .toString(LaunchConfigurationUtils.getConnectionTimeout(config, getDefaultRemoteTimeout()) / 1000)); remoteWorkingDir .setText(LaunchConfigurationUtils .getString( config, ScriptLaunchConfigurationConstants.ATTR_DLTK_DBGP_REMOTE_WORKING_DIR, getDefaultRemoteWorkingDir())); stripSourceFolders .setSelection(LaunchConfigurationUtils .getBoolean( config, ScriptLaunchConfigurationConstants.ATTR_DLTK_DBGP_STRIP_SOURCE_FOLDERS, getDefaultStripSourceFolders())); } /** * Override this method to configure other default port. */ protected int getDefaultPort() { return DEFAULT_PORT; } /** * Override this method to configure other default ide key. */ protected String getDefaultIDEKey() { return DEFAULT_IDEKEY; } /** * Override this method to configure other default remote working dir. */ protected String getDefaultRemoteWorkingDir() { return "";//$NON-NLS-1$ } protected boolean getDefaultStripSourceFolders() { return false; } /* * @see * org.eclipse.dltk.debug.ui.launchConfigurations.ScriptLaunchConfigurationTab * #doPerformApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) */ protected void doPerformApply(ILaunchConfigurationWorkingCopy config) { config.setAttribute( ScriptLaunchConfigurationConstants.ATTR_DLTK_DBGP_PORT, port .getText().trim()); config.setAttribute( ScriptLaunchConfigurationConstants.ATTR_DLTK_DBGP_SESSION_ID, ideKey.getText().trim()); int timeout; try { timeout = Integer.parseInt(timeoutText.getText().trim()); } catch (NumberFormatException e) { timeout = getDefaultRemoteTimeout() / 1000; } config .setAttribute( ScriptLaunchConfigurationConstants.ATTR_DLTK_DBGP_WAITING_TIMEOUT, timeout * 1000); config .setAttribute( ScriptLaunchConfigurationConstants.ATTR_DLTK_DBGP_REMOTE_WORKING_DIR, remoteWorkingDir.getText().trim()); config .setAttribute( ScriptLaunchConfigurationConstants.ATTR_DLTK_DBGP_STRIP_SOURCE_FOLDERS, stripSourceFolders.getSelection()); } private int getDefaultRemoteTimeout() { return DLTKDebugPlugin.getConnectionTimeout() * 3; } protected boolean validate() { return super.validate() && validatePort() && validateIdeKey() && validateRemoteWorkingDir(); } protected boolean validatePort() { IStatus result = FieldValidators.PORT_VALIDATOR .validate(port.getText()); if (!result.isOK()) { setErrorMessage(result.getMessage()); return false; } return true; } protected boolean validateIdeKey() { String key = ideKey.getText().trim(); if (key.length() == 0) { setErrorMessage(DLTKLaunchConfigurationsMessages.remoteError_ideKeyEmpty); return false; } return true; } protected boolean validateRemoteWorkingDir() { // XXX: what validation should be done on this? return true; } /* * @see * org.eclipse.dltk.debug.ui.launchConfigurations.ScriptLaunchConfigurationTab * #doCreateControl(org.eclipse.swt.widgets.Composite) */ protected void doCreateControl(Composite composite) { Group group = SWTFactory .createGroup( composite, DLTKLaunchConfigurationsMessages.remoteTab_connectionProperties, 2, 1, GridData.FILL_HORIZONTAL); SWTFactory.createLabel(group, DLTKLaunchConfigurationsMessages.remoteTab_connectionPort, 1); port = SWTFactory.createText(group, SWT.BORDER, 1, EMPTY_STRING); port.addModifyListener(getWidgetListener()); SWTFactory.createLabel(group, DLTKLaunchConfigurationsMessages.remoteTab_connectionIdeKey, 1); ideKey = SWTFactory.createText(group, SWT.BORDER, 1, EMPTY_STRING); ideKey.addModifyListener(getWidgetListener()); SWTFactory.createLabel(group, DLTKLaunchConfigurationsMessages.remoteTab_timeout, 1); timeoutText = SWTFactory.createText(group, SWT.BORDER, 1, EMPTY_STRING); timeoutText.addModifyListener(getWidgetListener()); SWTFactory.createHorizontalSpacer(composite, 1); group = SWTFactory.createGroup(composite, DLTKLaunchConfigurationsMessages.remoteTab_remoteSourceMapping, 1, 1, GridData.FILL_HORIZONTAL); SWTFactory.createLabel(group, DLTKLaunchConfigurationsMessages.remoteTab_remoteWorkingDir, 1); remoteWorkingDir = SWTFactory.createText(group, SWT.BORDER, 1, EMPTY_STRING); remoteWorkingDir.addModifyListener(getWidgetListener()); stripSourceFolders = createCheckButton(group, DLTKLaunchConfigurationsMessages.remoteTab_scriptSourceFolders); stripSourceFolders.addSelectionListener(getWidgetListener()); } }