diff --git a/cross/org.eclipse.cdt.launch.remote/plugin.xml b/cross/org.eclipse.cdt.launch.remote/plugin.xml index ded8010be4c..a89f8e996d1 100644 --- a/cross/org.eclipse.cdt.launch.remote/plugin.xml +++ b/cross/org.eclipse.cdt.launch.remote/plugin.xml @@ -43,14 +43,7 @@ Anna Dushistova (Mentor Graphics) - code restructuring id="org.eclipse.rse.remotecdt.launch.RemoteCMainTab" group="org.eclipse.cdt.launch.remoteApplicationRunLaunchTabGroup" name="Main" - class="org.eclipse.cdt.launch.remote.tabs.RemoteCMainTab"> - - - + class="org.eclipse.cdt.launch.remote.tabs.RemoteCDSFMainTab"> - - - - - - - - - - - - = 0 ? connectionCombo - .getItem(currentSelection) : ""; //$NON-NLS-1$ - if (connection_name.equals("")) { //$NON-NLS-1$ - setErrorMessage(CONNECTION_TEXT_ERROR); - retVal = false; - } - if (retVal) { - String name = remoteProgText.getText().trim(); - if (name.length() == 0) { - setErrorMessage(REMOTE_PROG_TEXT_ERROR); - retVal = false; - } - } - } - return retVal; - } - - protected void createRemoteConnectionGroup(Composite parent, int colSpan) { - Composite projComp = new Composite(parent, SWT.NONE); - GridLayout projLayout = new GridLayout(); - projLayout.numColumns = 5; - projLayout.marginHeight = 0; - projLayout.marginWidth = 0; - projComp.setLayout(projLayout); - GridData gd = new GridData(GridData.FILL_HORIZONTAL); - gd.horizontalSpan = colSpan; - projComp.setLayoutData(gd); - - connectionLabel = new Label(projComp, SWT.NONE); - connectionLabel.setText(Messages.RemoteCMainTab_Connection); - gd = new GridData(); - gd.horizontalSpan = 1; - connectionLabel.setLayoutData(gd); - - connectionCombo = new Combo(projComp, SWT.DROP_DOWN | SWT.READ_ONLY); - gd = new GridData(GridData.FILL_HORIZONTAL); - gd.horizontalSpan = 1; - connectionCombo.setLayoutData(gd); - connectionCombo.addModifyListener(new ModifyListener() { - - public void modifyText(ModifyEvent e) { - useDefaultsFromConnection(); - updateConnectionButtons(); - setDirty(true); - updateLaunchConfigurationDialog(); - } - }); - - newRemoteConnectionButton = createPushButton(projComp, - Messages.RemoteCMainTab_New, null); - newRemoteConnectionButton.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent evt) { - handleNewRemoteConnectionSelected(); - updateLaunchConfigurationDialog(); - updateConnectionPulldown(); - } - }); - - editRemoteConnectionButton = createPushButton(projComp, - Messages.RemoteCMainTab_Edit, null); - editRemoteConnectionButton.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent evt) { - handleEditRemoteConnectionSelected(); - } - }); - - remoteConnectionPropertiesButton = createPushButton(projComp, - Messages.RemoteCMainTab_Properties, null); - remoteConnectionPropertiesButton - .addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent evt) { - handleRemoteConnectionPropertiesSelected(); - } - }); - - updateConnectionPulldown(); - } - - /* - * createTargetExePath This creates the remote path user-editable textfield - * on the Main Tab. - */ - protected void createTargetExePathGroup(Composite parent) { - Composite mainComp = new Composite(parent, SWT.NONE); - GridLayout mainLayout = new GridLayout(); - mainLayout.numColumns = 2; - mainLayout.marginHeight = 0; - mainLayout.marginWidth = 0; - mainComp.setLayout(mainLayout); - GridData gd = new GridData(GridData.FILL_HORIZONTAL); - mainComp.setLayoutData(gd); - - remoteProgLabel = new Label(mainComp, SWT.NONE); - remoteProgLabel.setText(REMOTE_PROG_LABEL_TEXT); - gd = new GridData(); - gd.horizontalSpan = 2; - remoteProgLabel.setLayoutData(gd); - - remoteProgText = new Text(mainComp, SWT.SINGLE | SWT.BORDER); - gd = new GridData(GridData.FILL_HORIZONTAL); - gd.horizontalSpan = 1; - remoteProgText.setLayoutData(gd); - remoteProgText.addModifyListener(new ModifyListener() { - - public void modifyText(ModifyEvent evt) { - updateLaunchConfigurationDialog(); - } - }); - - remoteBrowseButton = createPushButton(mainComp, - Messages.RemoteCMainTab_Remote_Path_Browse_Button, null); - remoteBrowseButton.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent evt) { - handleRemoteBrowseSelected(); - updateLaunchConfigurationDialog(); - } - }); - - // Commands to run before execution - preRunLabel = new Label(mainComp, SWT.NONE); - preRunLabel.setText(PRE_RUN_LABEL_TEXT); - gd = new GridData(); - gd.horizontalSpan = 2; - preRunLabel.setLayoutData(gd); - - preRunText = new Text(mainComp, SWT.MULTI | SWT.BORDER); - gd = new GridData(GridData.FILL_HORIZONTAL); - gd.horizontalSpan = 2; - preRunText.setLayoutData(gd); - preRunText.addModifyListener(new ModifyListener() { - - public void modifyText(ModifyEvent evt) { - updateLaunchConfigurationDialog(); - } - }); - - } - - /* - * createDownloadOption This creates the skip download check button. - */ - protected void createDownloadOption(Composite parent) { - Composite mainComp = new Composite(parent, SWT.NONE); - GridLayout mainLayout = new GridLayout(); - mainLayout.marginHeight = 0; - mainLayout.marginWidth = 0; - mainComp.setLayout(mainLayout); - GridData gd = new GridData(GridData.FILL_HORIZONTAL); - mainComp.setLayoutData(gd); - - skipDownloadButton = createCheckButton(mainComp, - SKIP_DOWNLOAD_BUTTON_TEXT); - skipDownloadButton.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent evt) { - updateLaunchConfigurationDialog(); - } - }); - skipDownloadButton.setEnabled(true); - } - - /* - * performApply - * - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply - */ - @Override - public void performApply(ILaunchConfigurationWorkingCopy config) { - - int currentSelection = connectionCombo.getSelectionIndex(); - config.setAttribute( - IRemoteConnectionConfigurationConstants.ATTR_REMOTE_CONNECTION, - currentSelection >= 0 ? connectionCombo - .getItem(currentSelection) : null); - config.setAttribute( - IRemoteConnectionConfigurationConstants.ATTR_REMOTE_PATH, - remoteProgText.getText()); - config - .setAttribute( - IRemoteConnectionConfigurationConstants.ATTR_SKIP_DOWNLOAD_TO_TARGET, - skipDownloadButton.getSelection()); - config.setAttribute( - IRemoteConnectionConfigurationConstants.ATTR_PRERUN_COMMANDS, - preRunText.getText()); - super.performApply(config); - } - - /* - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom - */ - @Override - public void initializeFrom(ILaunchConfiguration config) { - isInitializing = true; - - String remoteConnection = null; - try { - remoteConnection = config - .getAttribute( - IRemoteConnectionConfigurationConstants.ATTR_REMOTE_CONNECTION, - ""); //$NON-NLS-1$ - } catch (CoreException ce) { - // Ignore - } - - String[] items = connectionCombo.getItems(); - int i = 0; - for (i = 0; i < items.length; i++) - if (items[i].equals(remoteConnection)) - break; - /* - * Select the last used connection in the connecion pulldown if it still - * exists. - */ - if (i < items.length) - connectionCombo.select(i); - else if (items.length > 0) - connectionCombo.select(0); - - super.initializeFrom(config); - - updateTargetProgFromConfig(config); - updateSkipDownloadFromConfig(config); - updateConnectionButtons(); - isInitializing = false; - } - - protected void handleNewRemoteConnectionSelected() { - if (action == null) { - action = new SystemNewConnectionAction(getControl().getShell(), - false, false, null); - } - - try { - action.run(); - } catch (Exception e) { - // Ignore - } - } - - /** - * Opens the SystemConnectionPropertyPage page for the selected connection. - */ - protected void handleEditRemoteConnectionSelected() { - IHost currentConnectionSelected = getCurrentConnection(); - PreferenceDialog dialog = PreferencesUtil.createPropertyDialogOn(getControl().getShell(), currentConnectionSelected, SYSTEM_PAGE_ID, null, null); - if (dialog != null) { - dialog.open(); - } - } - - protected IHost getCurrentConnection() { - int currentSelection = connectionCombo.getSelectionIndex(); - String remoteConnection = currentSelection >= 0 ? connectionCombo - .getItem(currentSelection) : null; - return RSEHelper.getRemoteConnectionByName(remoteConnection); - } - - protected void handleRemoteBrowseSelected() { - IHost currentConnectionSelected = getCurrentConnection(); - SystemRemoteFileDialog dlg = new SystemRemoteFileDialog(getControl() - .getShell(), - Messages.RemoteCMainTab_Remote_Path_Browse_Button_Title, - currentConnectionSelected); - dlg.setBlockOnOpen(true); - if (dlg.open() == Window.OK) { - Object retObj = dlg.getSelectedObject(); - if (retObj instanceof IRemoteFile) { - IRemoteFile selectedFile = (IRemoteFile) retObj; - remoteProgText.setText(selectedFile.getAbsolutePath()); - } - - } - } - - protected void handleRemoteConnectionPropertiesSelected() { - class RemoteConnectionPropertyDialog extends Dialog { - private IHost fHost; - boolean fbLocalHost; - private Button fSkipDownloadBtn; - private Text fWSRoot; - private String fDialogTitle; - - public RemoteConnectionPropertyDialog(Shell parentShell, - String dialogTitle, IHost host) { - super(parentShell); - fDialogTitle = dialogTitle; - fHost = host; - fbLocalHost = fHost.getSystemType().isLocal(); - } - - @Override - protected void configureShell(Shell shell) { - super.configureShell(shell); - shell.setText(fDialogTitle); - } - - @Override - protected Control createDialogArea(Composite parent) { - // create composite - Composite composite = (Composite) super - .createDialogArea(parent); - - Label label = new Label(composite, SWT.WRAP); - label.setText(Messages.RemoteCMainTab_Properties_Location); - GridData data = new GridData(GridData.GRAB_HORIZONTAL - | GridData.GRAB_VERTICAL - | GridData.HORIZONTAL_ALIGN_FILL - | GridData.VERTICAL_ALIGN_CENTER); - data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH); - label.setLayoutData(data); - label.setFont(parent.getFont()); - fWSRoot = new Text(composite, SWT.SINGLE | SWT.BORDER); - fWSRoot.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL - | GridData.HORIZONTAL_ALIGN_FILL)); - - fSkipDownloadBtn = new Button(composite, SWT.CHECK); - fSkipDownloadBtn - .setText(Messages.RemoteCMainTab_Properties_Skip_default); - if (!fbLocalHost) { - IPropertySet propertySet = fHost - .getPropertySet(IRemoteConnectionHostConstants.PI_REMOTE_CDT); - if (propertySet != null) { - String value = propertySet - .getPropertyValue(IRemoteConnectionHostConstants.REMOTE_WS_ROOT); - if (value != null) { - fWSRoot.setText(value); - } - fSkipDownloadBtn - .setSelection(Boolean - .valueOf( - propertySet - .getPropertyValue(IRemoteConnectionHostConstants.DEFAULT_SKIP_DOWNLOAD)) - .booleanValue()); - } - } else { - fSkipDownloadBtn.setEnabled(false); - fWSRoot.setEnabled(false); - } - applyDialogFont(composite); - return composite; - } - - @Override - protected void buttonPressed(int buttonId) { - if (!fbLocalHost && (buttonId == IDialogConstants.OK_ID)) { - IPropertySet propertySet = fHost - .getPropertySet(IRemoteConnectionHostConstants.PI_REMOTE_CDT); - if (propertySet == null) { - propertySet = fHost - .createPropertySet(IRemoteConnectionHostConstants.PI_REMOTE_CDT); - } - propertySet.addProperty( - IRemoteConnectionHostConstants.REMOTE_WS_ROOT, - fWSRoot.getText()); - propertySet - .addProperty( - IRemoteConnectionHostConstants.DEFAULT_SKIP_DOWNLOAD, - Boolean.toString(fSkipDownloadBtn - .getSelection())); - fHost.commit(); - } - super.buttonPressed(buttonId); - } - } - IHost currentConnectionSelected = getCurrentConnection(); - RemoteConnectionPropertyDialog dlg = new RemoteConnectionPropertyDialog( - getControl().getShell(), - Messages.RemoteCMainTab_Properties_title, - currentConnectionSelected); - dlg.setBlockOnOpen(true); - dlg.open(); - } - - protected void updateConnectionPulldown() { - if (!RSECorePlugin.isInitComplete(RSECorePlugin.INIT_MODEL)) - try { - RSECorePlugin.waitForInitCompletion(RSECorePlugin.INIT_MODEL); - } catch (InterruptedException e) { - return; - } - // already initialized - connectionCombo.removeAll(); - IHost[] connections = RSEHelper.getSuitableConnections(); - for (int i = 0; i < connections.length; i++) { - IRSESystemType sysType = connections[i].getSystemType(); - if (sysType != null && sysType.isEnabled()) { - connectionCombo.add(connections[i].getAliasName()); - } - } - - if (connections.length > 0) { - connectionCombo.select(connections.length - 1); - } - updateConnectionButtons(); - } - - private void updateConnectionButtons() { - if ((remoteConnectionPropertiesButton == null) - || remoteConnectionPropertiesButton.isDisposed()) { - return; - } - if ((editRemoteConnectionButton == null) - || editRemoteConnectionButton.isDisposed()) { - return; - } - boolean bEnable = false; - IHost currentConnectionSelected = getCurrentConnection(); - if (currentConnectionSelected != null) { - IRSESystemType sysType = currentConnectionSelected.getSystemType(); - if (sysType != null && sysType.isEnabled() && !sysType.isLocal()) { - bEnable = true; - } - } - remoteConnectionPropertiesButton.setEnabled(bEnable); - editRemoteConnectionButton.setEnabled(bEnable); - } - - protected void updateTargetProgFromConfig(ILaunchConfiguration config) { - String targetPath = null; - try { - targetPath = config.getAttribute( - IRemoteConnectionConfigurationConstants.ATTR_REMOTE_PATH, - REMOTE_PATH_DEFAULT); - } catch (CoreException e) { - // Ignore - } - remoteProgText.setText(targetPath); - - String prelaunchCmd = null; - try { - prelaunchCmd = config - .getAttribute( - IRemoteConnectionConfigurationConstants.ATTR_PRERUN_COMMANDS, - ""); //$NON-NLS-1$ - } catch (CoreException e) { - // Ignore - } - preRunText.setText(prelaunchCmd); - } - - protected void updateSkipDownloadFromConfig(ILaunchConfiguration config) { - boolean downloadToTarget = true; - try { - downloadToTarget = config - .getAttribute( - IRemoteConnectionConfigurationConstants.ATTR_SKIP_DOWNLOAD_TO_TARGET, - getDefaultSkipDownload()); - } catch (CoreException e) { - // Ignore for now - } - skipDownloadButton.setSelection(downloadToTarget); - } - - /* - * setLocalPathForRemotePath This function sets the remote path text field - * with the value of the local executable path. - */ - private void setLocalPathForRemotePath() { - String programName = fProgText.getText().trim(); - boolean bUpdateRemote = false; - - String remoteName = remoteProgText.getText().trim(); - String remoteWsRoot = getRemoteWSRoot(); - if (remoteName.length() == 0) { - bUpdateRemote = true; - } else if (remoteWsRoot.length() != 0) { - bUpdateRemote = remoteName.equals(remoteWsRoot); - } - - if (programName.length() != 0 && bUpdateRemote) { - IProject project = getCProject().getProject(); - IPath exePath = new Path(programName); - if (!exePath.isAbsolute()) { - exePath = project.getFile(programName).getLocation(); - - IPath wsRoot = project.getWorkspace().getRoot().getLocation(); - exePath = makeRelativeToWSRootLocation(exePath, remoteWsRoot, - wsRoot); - } - String path = exePath.toString(); - remoteProgText.setText(path); - } - } - - private void useDefaultsFromConnection() { - // During initialization, we don't want to use the default - // values of the connection, but we want to use the ones - // that are part of the configuration - if (isInitializing) return; - - if ((remoteProgText != null) && !remoteProgText.isDisposed()) { - String remoteName = remoteProgText.getText().trim(); - String remoteWsRoot = getRemoteWSRoot(); - if (remoteName.length() == 0) { - remoteProgText.setText(remoteWsRoot); - } else { - // try to use remote path - IPath wsRoot = getCProject().getProject().getWorkspace() - .getRoot().getLocation(); - IPath remotePath = makeRelativeToWSRootLocation(new Path( - remoteName), remoteWsRoot, wsRoot); - remoteProgText.setText(remotePath.toString()); - } - } - if ((skipDownloadButton != null) && !skipDownloadButton.isDisposed()) { - skipDownloadButton.setSelection(getDefaultSkipDownload()); - if(RSEHelper.getFileSubsystem(getCurrentConnection()) == null){ - skipDownloadButton.setEnabled(false); - } else { - skipDownloadButton.setEnabled(true); - } - } - if((remoteBrowseButton!=null) && !remoteBrowseButton.isDisposed()){ - if(RSEHelper.getFileSubsystem(getCurrentConnection()) == null){ - remoteBrowseButton.setEnabled(false); - } else { - remoteBrowseButton.setEnabled(true); - } - } - } - - private IPath makeRelativeToWSRootLocation(IPath exePath, - String remoteWsRoot, IPath wsRoot) { - if (remoteWsRoot.length() != 0) { - // use remoteWSRoot instead of Workspace Root - if (wsRoot.isPrefixOf(exePath)) { - return new Path(remoteWsRoot).append(exePath - .removeFirstSegments(wsRoot.segmentCount()).setDevice( - null)); - } - } - return exePath; - } - - private String getRemoteWSRoot() { - IHost host = getCurrentConnection(); - if (host != null) { - IPropertySet propertySet = host - .getPropertySet(IRemoteConnectionHostConstants.PI_REMOTE_CDT); - if (propertySet != null) { - String value = propertySet - .getPropertyValue(IRemoteConnectionHostConstants.REMOTE_WS_ROOT); - if (value != null) { - return value; - } - } - } - return ""; //$NON-NLS-1$ - } - - private boolean getDefaultSkipDownload() { - IHost host = getCurrentConnection(); - if (host != null) { - if(RSEHelper.getFileSubsystem(host) == null){ - return true; - } - IPropertySet propertySet = host - .getPropertySet(IRemoteConnectionHostConstants.PI_REMOTE_CDT); - if (propertySet != null) { - return Boolean - .valueOf( - propertySet - .getPropertyValue(IRemoteConnectionHostConstants.DEFAULT_SKIP_DOWNLOAD)) - .booleanValue(); - } - } - return SKIP_DOWNLOAD_TO_REMOTE_DEFAULT; - } - - @Override - public String getId() { - return "org.eclipse.rse.remotecdt.launch.RemoteCMainTab"; //$NON-NLS-1$ - } -}