/** * Aptana Studio * Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the GNU Public License (GPL) v3 (with exceptions). * Please see the license.html included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ // $codepro.audit.disable unnecessaryExceptions // $codepro.audit.disable unnecessaryExceptions // $codepro.audit.disable exceptionUsage.exceptionCreation package com.aptana.ui.ftp.internal; import java.lang.reflect.InvocationTargetException; import java.net.URI; import java.text.MessageFormat; import java.util.Arrays; import java.util.regex.Pattern; import org.eclipse.core.filesystem.IFileStore; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.layout.PixelConverter; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.operation.ModalContext; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.window.Window; import org.eclipse.jface.wizard.ProgressMonitorPart; import org.eclipse.swt.SWT; import org.eclipse.swt.SWTException; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.forms.events.ExpansionAdapter; import org.eclipse.ui.forms.events.ExpansionEvent; import org.eclipse.ui.forms.widgets.ExpandableComposite; import com.aptana.core.CoreStrings; import com.aptana.core.logging.IdeLog; import com.aptana.core.util.StringUtil; import com.aptana.filesystem.ftp.IBaseFTPConnectionPoint; import com.aptana.filesystem.ftp.IFTPConstants; import com.aptana.filesystem.ftp.Policy; import com.aptana.ide.core.io.ConnectionContext; import com.aptana.ide.core.io.ConnectionPointType; import com.aptana.ide.core.io.ConnectionPointUtils; import com.aptana.ide.core.io.CoreIOPlugin; import com.aptana.ide.core.io.IBaseRemoteConnectionPoint; import com.aptana.ide.core.io.IConnectionPoint; import com.aptana.ide.ui.io.FileSystemUtils; import com.aptana.ide.ui.io.dialogs.FileTreeSelectionDialog; import com.aptana.ide.ui.io.dialogs.IDialogConstants; import com.aptana.ui.ftp.FTPUIPlugin; import com.aptana.ui.ftp.dialogs.Messages; import com.aptana.ui.util.UIUtils; /** * @author Max Stepanov */ public class FTPConnectionPropertyComposite extends Composite implements IOptionsComposite.IListener { public static interface IListener { public void setValid(boolean valid); public void error(String message); public void lockUI(boolean lock); public void layoutShell(); public boolean close(); } private static final String DEFAULT_NAME = Messages.FTPConnectionPointPropertyDialog_Title; private static final Pattern HOST_PATTERN = Pattern .compile("^(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})|([-\\w]+(\\.[-\\w]+)*)$"); //$NON-NLS-1$ protected IBaseRemoteConnectionPoint ftpConnectionPoint; protected IBaseRemoteConnectionPoint originalFtpConnectionPoint; private Text nameText; private Text hostText; private Combo loginCombo; private Button testButton; protected Label passwordLabel; protected Text passwordText; protected Button savePasswordButton; private Text remotePathText; private Button browseButton; protected ExpandableComposite optionsExpandable; protected IOptionsComposite advancedOptions; private ProgressMonitorPart progressMonitorPart; protected Font smallFont; private boolean isNew; private boolean connectionTested; private ModifyListener modifyListener; private SelectionListener selectionListener; private IListener listener; public FTPConnectionPropertyComposite(Composite parent, int style, IBaseRemoteConnectionPoint connectionPoint, IListener listener) { super(parent, style); setConnectionPoint(connectionPoint); this.listener = listener; PixelConverter converter = new PixelConverter(this); setLayout(GridLayoutFactory .swtDefaults() .margins(converter.convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN), converter.convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN)) .spacing(converter.convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING), converter.convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING)).numColumns(2) .create()); /* row 1 */ createSiteSection(this); Group group = new Group(this, SWT.NONE); group.setLayoutData(GridDataFactory.fillDefaults().span(2, 1).grab(true, false).create()); group.setLayout(GridLayoutFactory.swtDefaults().numColumns(3).create()); group.setText(Messages.FTPConnectionPointPropertyDialog_LBL_GroupInfo); /* row 2 */ Label label = new Label(group, SWT.NONE); label.setLayoutData(GridDataFactory .swtDefaults() .hint(new PixelConverter(label).convertHorizontalDLUsToPixels(IDialogConstants.LABEL_WIDTH), SWT.DEFAULT).create()); label.setText(StringUtil.makeFormLabel(Messages.FTPConnectionPointPropertyDialog_LBL_Server)); hostText = new Text(group, SWT.SINGLE | SWT.BORDER); hostText.setLayoutData(GridDataFactory .swtDefaults() .hint(new PixelConverter(hostText).convertHorizontalDLUsToPixels(IDialogConstants.ENTRY_FIELD_WIDTH), SWT.DEFAULT).span(2, 1).create()); /* row 3 */ new Label(group, SWT.NONE).setLayoutData(GridDataFactory.swtDefaults().create()); label = new Label(group, SWT.NONE); label.setLayoutData(GridDataFactory.swtDefaults().span(2, 1).create()); smallFont = JFaceResources.getTextFontDescriptor().increaseHeight(-2).createFont(getDisplay()); label.setFont(smallFont); label.setText(Messages.FTPConnectionPointPropertyDialog_LBL_Example); /* row 4 */ label = new Label(group, SWT.NONE); label.setLayoutData(GridDataFactory .swtDefaults() .hint(new PixelConverter(label).convertHorizontalDLUsToPixels(IDialogConstants.LABEL_WIDTH), SWT.DEFAULT).create()); label.setText(StringUtil.makeFormLabel(Messages.FTPConnectionPointPropertyDialog_LBL_Username)); loginCombo = new Combo(group, SWT.DROP_DOWN | SWT.BORDER); loginCombo.setLayoutData(GridDataFactory .swtDefaults() .hint(new PixelConverter(loginCombo).convertHorizontalDLUsToPixels(IDialogConstants.ENTRY_FIELD_WIDTH), SWT.DEFAULT).grab(true, false).create()); loginCombo.add(IFTPConstants.LOGIN_ANONYMOUS); testButton = new Button(group, SWT.PUSH); testButton.setText(Messages.FTPConnectionPointPropertyDialog_LBL_Test); testButton.setLayoutData(GridDataFactory .fillDefaults() .hint(Math.max( new PixelConverter(testButton).convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH), testButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x), SWT.DEFAULT).create()); /* row 5 */ createPasswordSection(group); /* row 6 */ label = new Label(group, SWT.NONE); label.setLayoutData(GridDataFactory .swtDefaults() .hint(new PixelConverter(label).convertHorizontalDLUsToPixels(IDialogConstants.LABEL_WIDTH), SWT.DEFAULT).create()); label.setText(StringUtil.makeFormLabel(Messages.FTPConnectionPointPropertyDialog_LBL_RemotePath)); remotePathText = new Text(group, SWT.SINGLE | SWT.BORDER); remotePathText.setLayoutData(GridDataFactory .swtDefaults() .hint(new PixelConverter(remotePathText) .convertHorizontalDLUsToPixels(IDialogConstants.ENTRY_FIELD_WIDTH), SWT.DEFAULT) .grab(true, false).create()); browseButton = new Button(group, SWT.PUSH); browseButton.setText('&' + StringUtil.ellipsify(CoreStrings.BROWSE)); browseButton.setLayoutData(GridDataFactory .fillDefaults() .hint(Math.max( new PixelConverter(browseButton).convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH), browseButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x), SWT.DEFAULT).create()); /* row 7 */ optionsExpandable = new ExpandableComposite(this, SWT.NONE, ExpandableComposite.TWISTIE | ExpandableComposite.FOCUS_TITLE); optionsExpandable.setText(Messages.FTPConnectionPointPropertyDialog_LBL_Options); optionsExpandable.setLayoutData(GridDataFactory.fillDefaults().span(2, 1).grab(true, true) .minSize(SWT.DEFAULT, SWT.DEFAULT).create()); Group optionsGroup = new Group(optionsExpandable, SWT.NONE); optionsGroup.setLayout(GridLayoutFactory.fillDefaults().create()); createAdvancedOptions(optionsGroup); optionsExpandable.setClient(optionsGroup); optionsExpandable.addExpansionListener(new ExpansionAdapter() { public void expansionStateChanged(ExpansionEvent e) { FTPConnectionPropertyComposite.this.listener.layoutShell(); } }); /* row 8 */ progressMonitorPart = new ProgressMonitorPart(this, GridLayoutFactory.fillDefaults().create()); progressMonitorPart.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).exclude(true).span(2, 1) .create()); /* -- */ addListeners(); passwordText.addSelectionListener(new SelectionAdapter() { @Override public void widgetDefaultSelected(SelectionEvent e) { e.doit = false; testConnection(); } }); testButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (testConnection()) { MessageDialog.openInformation( getShell(), Messages.FTPConnectionPointPropertyDialog_Succeed_Title, MessageFormat.format(Messages.FTPConnectionPointPropertyDialog_Succeed_Message, hostText.getText())); } } }); browseButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { browseConnection(); } }); if (ftpConnectionPoint == null) { isNew = true; ftpConnectionPoint = getOrCreateConnectionPoint(getConnectionPointType()); ftpConnectionPoint.setName(DEFAULT_NAME); } else { originalFtpConnectionPoint = ftpConnectionPoint; } loadPropertiesFrom(ftpConnectionPoint); connectionTested = !isNew; } public boolean completeConnection() { if (DEFAULT_NAME.equals(nameText.getText())) { nameText.setText(hostText.getText()); } if (!connectionTested) { if (!testConnection()) { MessageDialog dlg = new MessageDialog(getShell(), Messages.FTPConnectionPointPropertyDialog_ConfirmTitle, null, Messages.FTPConnectionPointPropertyDialog_ConfirmMessage, MessageDialog.QUESTION, new String[] { IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL, Messages.FTPConnectionPointPropertyDialog_LBL_Edit }, 2); int code = dlg.open(); switch (code) { case 1: return true; case 2: return false; default: } } } CoreIOPlugin.getAuthenticationManager().setPassword(getAuthId(ftpConnectionPoint), passwordText.getText().toCharArray(), savePasswordButton.getSelection()); boolean changed = savePropertiesTo(ftpConnectionPoint); if (isNew) { CoreIOPlugin.getConnectionPointManager().addConnectionPoint(ftpConnectionPoint); } else if (ftpConnectionPoint != originalFtpConnectionPoint) // $codepro.audit.disable useEquals { ftpConnectionPoint.setId(originalFtpConnectionPoint.getId()); CoreIOPlugin.getConnectionPointManager().removeConnectionPoint(originalFtpConnectionPoint); CoreIOPlugin.getConnectionPointManager().addConnectionPoint(ftpConnectionPoint); } else if (changed) { CoreIOPlugin.getConnectionPointManager().connectionPointChanged(ftpConnectionPoint); } return true; } public IBaseRemoteConnectionPoint getConnectionPoint() { return ftpConnectionPoint; } public void setConnectionPoint(IBaseRemoteConnectionPoint connectionPoint) { ftpConnectionPoint = connectionPoint; } public void setCanceled(boolean canceled) { progressMonitorPart.setCanceled(canceled); } @Override public void dispose() { if (smallFont != null) { smallFont.dispose(); smallFont = null; } super.dispose(); } public boolean isValid() { String message = null; String name = nameText.getText().trim(); if (name.length() == 0) { message = Messages.FTPConnectionPointPropertyDialog_ERR_NameEmpty; } else if ((originalFtpConnectionPoint == null || !name.equalsIgnoreCase(originalFtpConnectionPoint.getName())) && !ConnectionPointUtils.isConnectionPointNameUnique(nameText.getText())) { message = MessageFormat.format(Messages.FTPConnectionPointPropertyDialog_ERR_NameExists, name); } else if (!HOST_PATTERN.matcher(hostText.getText()).matches()) { message = Messages.FTPConnectionPointPropertyDialog_ERR_InvalidHost; } else if (loginCombo.getText().length() == 0) { message = Messages.FTPConnectionPointPropertyDialog_ERR_NoUsername; } else { message = advancedOptions.isValid(); } listener.error(message); return message == null; } public boolean testConnection(ConnectionContext context, final IConnectionRunnable connectRunnable) { // WORKAROUND: getting contents after the control is disabled will return empty string if not called here hostText.getText(); loginCombo.getText(); passwordText.getText(); remotePathText.getText(); lockUI(true); ((GridData) progressMonitorPart.getLayoutData()).exclude = false; listener.layoutShell(); try { final IBaseRemoteConnectionPoint connectionPoint = isNew ? ftpConnectionPoint : (IBaseRemoteConnectionPoint) CoreIOPlugin.getConnectionPointManager().cloneConnectionPoint( ftpConnectionPoint); savePropertiesTo(connectionPoint); if (context == null) { context = new ConnectionContext(); // $codepro.audit.disable questionableAssignment context.setBoolean(ConnectionContext.QUICK_CONNECT, true); } context.setBoolean(ConnectionContext.NO_PASSWORD_PROMPT, true); CoreIOPlugin.setConnectionContext(connectionPoint, context); ModalContext.run(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { try { try { if (connectRunnable != null) { connectRunnable.beforeConnect(connectionPoint); } connectionPoint.connect(monitor); if (connectRunnable != null) { connectRunnable.afterConnect(connectionPoint, monitor); } } finally { try { connectionPoint.disconnect(monitor); } catch (CoreException e) { IdeLog.logWarning(FTPUIPlugin.getDefault(), e); } } } catch (CoreException e) { throw new InvocationTargetException(e); } finally { CoreIOPlugin.clearConnectionContext(connectionPoint); monitor.done(); } } }, true, progressMonitorPart, getShell().getDisplay()); return connectionTested = true; } catch (InterruptedException e) { e.getCause(); } catch (InvocationTargetException e) { showErrorDialog(e.getTargetException()); } catch (CoreException e) { showErrorDialog(e); } finally { if (!progressMonitorPart.isDisposed()) { ((GridData) progressMonitorPart.getLayoutData()).exclude = true; listener.layoutShell(); lockUI(false); } } return false; } public void validate() { if (isDisposed()) { return; } boolean valid = isValid(); testButton.setEnabled(valid); browseButton.setEnabled(valid); advancedOptions.setValid(valid); listener.setValid(valid); } protected void createSiteSection(Composite parent) { Label label = new Label(parent, SWT.NONE); label.setLayoutData(GridDataFactory .swtDefaults() .hint(new PixelConverter(label).convertHorizontalDLUsToPixels(IDialogConstants.LABEL_WIDTH), SWT.DEFAULT).create()); label.setText(StringUtil.makeFormLabel(Messages.FTPConnectionPointPropertyDialog_LBL_SiteName)); nameText = new Text(parent, SWT.SINGLE | SWT.BORDER); nameText.setLayoutData(GridDataFactory .fillDefaults() .hint(new PixelConverter(nameText).convertHorizontalDLUsToPixels(IDialogConstants.ENTRY_FIELD_WIDTH), SWT.DEFAULT).grab(true, false).create()); } protected void createPasswordSection(Composite parent) { passwordLabel = new Label(parent, SWT.NONE); passwordLabel.setLayoutData(GridDataFactory .swtDefaults() .hint(new PixelConverter(passwordLabel).convertHorizontalDLUsToPixels(IDialogConstants.LABEL_WIDTH), SWT.DEFAULT).create()); passwordLabel.setText(StringUtil.makeFormLabel(Messages.FTPConnectionPointPropertyDialog_LBL_Password)); passwordText = new Text(parent, SWT.SINGLE | SWT.PASSWORD | SWT.BORDER); passwordText.setLayoutData(GridDataFactory .fillDefaults() .hint(new PixelConverter(passwordText) .convertHorizontalDLUsToPixels(IDialogConstants.ENTRY_FIELD_WIDTH), SWT.DEFAULT) .grab(true, false).create()); savePasswordButton = new Button(parent, SWT.CHECK); savePasswordButton.setLayoutData(GridDataFactory.fillDefaults().create()); savePasswordButton.setText(Messages.FTPConnectionPointPropertyDialog_LBL_Save); } protected void createAdvancedOptions(Composite parent) { advancedOptions = new FTPAdvancedOptionsComposite(parent, SWT.NONE, this); ((Composite) advancedOptions).setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create()); } protected ConnectionPointType getConnectionPointType() { if (ftpConnectionPoint != null) { return CoreIOPlugin.getConnectionPointManager().getType(ftpConnectionPoint); } return CoreIOPlugin.getConnectionPointManager().getType(IBaseFTPConnectionPoint.TYPE_FTP); } protected IBaseRemoteConnectionPoint getOrCreateConnectionPoint(ConnectionPointType connectionPointType) { if (!isNew) { if (CoreIOPlugin.getConnectionPointManager().getType(originalFtpConnectionPoint) .equals(connectionPointType)) { return originalFtpConnectionPoint; } } try { return (IBaseRemoteConnectionPoint) CoreIOPlugin.getConnectionPointManager().createConnectionPoint( connectionPointType); } catch (CoreException e) { IdeLog.logError(FTPUIPlugin.getDefault(), Messages.FTPConnectionPointPropertyDialog_ERR_FailedCreate, e); listener.close(); // $codepro.audit.disable closeInFinally throw new SWTException(e.getLocalizedMessage()); } } protected String getAuthId(IBaseRemoteConnectionPoint connectionPoint) { return Policy.generateAuthId(getConnectionPointType().getType().toUpperCase(), connectionPoint); } protected void lockUI(boolean lock) { listener.lockUI(lock); nameText.setEnabled(!lock); hostText.setEnabled(!lock); loginCombo.setEnabled(!lock); passwordText.setEnabled(!lock); savePasswordButton.setEnabled(!lock); remotePathText.setEnabled(!lock); remotePathText.setEnabled(!lock); testButton.setEnabled(!lock); browseButton.setEnabled(!lock); advancedOptions.lockUI(lock); } protected void loadPropertiesFrom(IBaseRemoteConnectionPoint connectionPoint) { removeListeners(); try { nameText.setText(valueOrEmpty(connectionPoint.getName())); hostText.setText(valueOrEmpty(connectionPoint.getHost())); remotePathText.setText(connectionPoint.getPath().toPortableString()); String login = connectionPoint.getLogin(); int index = loginCombo.indexOf(login); if (index >= 0) { loginCombo.select(index); } else { loginCombo.setText(login); } String authId = getAuthId(connectionPoint); boolean persistent = CoreIOPlugin.getAuthenticationManager().hasPersistent(authId); savePasswordButton.setSelection(persistent); char[] password = connectionPoint.getPassword(); if (persistent && password == null) { password = CoreIOPlugin.getAuthenticationManager().getPassword(authId); } if (password != null) { passwordText.setText(String.copyValueOf(password)); } advancedOptions.loadPropertiesFrom(connectionPoint); } finally { addListeners(); } } protected boolean savePropertiesTo(IBaseRemoteConnectionPoint connectionPoint) { boolean updated = false; String name = nameText.getText().trim(); if (!name.equals(connectionPoint.getName())) { connectionPoint.setName(name); updated = true; } String host = hostText.getText(); if (!host.equals(connectionPoint.getHost())) { connectionPoint.setHost(host); updated = true; } IPath path = Path.fromPortableString(remotePathText.getText()); if (!connectionPoint.getPath().equals(path)) { connectionPoint.setPath(path); updated = true; } String login = loginCombo.getText(); if (!login.equals(connectionPoint.getLogin())) { connectionPoint.setLogin(login); updated = true; } char[] password = passwordText.getText().toCharArray(); if (!Arrays.equals(password, connectionPoint.getPassword())) { connectionPoint.setPassword(password); updated = true; } if (advancedOptions.savePropertiesTo(connectionPoint)) { updated = true; } return updated; } protected void addListeners() { if (modifyListener == null) { modifyListener = new ModifyListener() { public void modifyText(ModifyEvent e) { validate(); if (e.widget != nameText) // $codepro.audit.disable useEquals { connectionTested = false; } } }; } nameText.addModifyListener(modifyListener); hostText.addModifyListener(modifyListener); loginCombo.addModifyListener(modifyListener); passwordText.addModifyListener(modifyListener); remotePathText.addModifyListener(modifyListener); if (selectionListener == null) { selectionListener = new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { validate(); } }; } loginCombo.addSelectionListener(selectionListener); } protected void removeListeners() { if (modifyListener != null) { nameText.removeModifyListener(modifyListener); hostText.removeModifyListener(modifyListener); loginCombo.removeModifyListener(modifyListener); passwordText.removeModifyListener(modifyListener); remotePathText.removeModifyListener(modifyListener); } if (selectionListener != null) { loginCombo.removeSelectionListener(selectionListener); } } private boolean testConnection() { return testConnection(null, null); } private void browseConnection() { testConnection(null, new IConnectionRunnable() { public void afterConnect(final IConnectionPoint connectionPoint, IProgressMonitor monitor) throws CoreException, InterruptedException { monitor.beginTask(Messages.FTPConnectionPointPropertyDialog_Task_Browse, IProgressMonitor.UNKNOWN); monitor.subTask(""); //$NON-NLS-1$ UIUtils.getDisplay().syncExec(new Runnable() { public void run() { showBrowseDialog(connectionPoint); } }); monitor.done(); } public void beforeConnect(IConnectionPoint connectionPoint) throws CoreException, InterruptedException { ((IBaseRemoteConnectionPoint) connectionPoint).setPath(Path.ROOT); } }); } private void showBrowseDialog(IConnectionPoint connectionPoint) { FileTreeSelectionDialog dlg = new FileTreeSelectionDialog(getShell(), false); dlg.setTitle(MessageFormat.format(Messages.FTPConnectionPointPropertyDialog_Title_Browse, ((IBaseRemoteConnectionPoint) connectionPoint).getHost())); dlg.setMessage(StringUtil.makeFormLabel(Messages.FTPConnectionPointPropertyDialog_Message_Browse)); dlg.setInput(connectionPoint); String pathString = remotePathText.getText(); try { IFileStore selection = connectionPoint.getRoot(); if (pathString.length() > 0) { selection = selection.getFileStore(Path.fromPortableString(pathString)); } dlg.setInitialSelection(selection); } catch (CoreException e) { IdeLog.logWarning(FTPUIPlugin.getDefault(), e); } if (dlg.open() == Window.OK) { URI uri = FileSystemUtils.getURI(dlg.getFirstResult()); if (uri != null) { String path = Path.fromPortableString(connectionPoint.getRootURI().relativize(uri).toString()) .makeAbsolute().toPortableString(); remotePathText.setText(path); } } } private void showErrorDialog(Throwable e) { String message = Messages.FTPConnectionPointPropertyDialog_DefaultErrorMsg; if (e instanceof CoreException) { message = ((CoreException) e).getStatus().getMessage(); } MessageDialog.openError(getShell(), Messages.FTPConnectionPointPropertyDialog_ErrorTitle, message); } private static String valueOrEmpty(String value) { if (value != null) { return value; } return ""; //$NON-NLS-1$ } }