package org.eclipse.dltk.internal.ui.rse; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.dltk.core.internal.rse.DLTKRSEPlugin; import org.eclipse.dltk.core.internal.rse.RSEEnvironment; import org.eclipse.dltk.ui.environment.IEnvironmentUI; import org.eclipse.jface.window.Window; import org.eclipse.rse.core.filters.ISystemFilter; import org.eclipse.rse.core.filters.ISystemFilterReference; import org.eclipse.rse.files.ui.dialogs.SystemRemoteFileDialog; import org.eclipse.rse.files.ui.dialogs.SystemRemoteFolderDialog; import org.eclipse.rse.services.clientserver.messages.SystemMessageException; import org.eclipse.rse.subsystems.files.core.model.RemoteFileUtility; import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile; import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFileSubSystem; import org.eclipse.swt.widgets.Shell; public class RSEEnvironmentUI implements IEnvironmentUI { private RSEEnvironment environment; public RSEEnvironmentUI(RSEEnvironment environment) { this.environment = environment; } @Override public String selectFolder(Shell shell) { return selectFolder(shell, null); } @Override public String selectFolder(Shell shell, String initialFolder) { if (!environment.connect(true)) { return null; } SystemRemoteFolderDialog dialog = new SystemRemoteFolderDialog(shell); dialog.setDefaultSystemConnection(this.environment.getHost(), true); if (initialFolder != null && initialFolder.length() != 0) { final IRemoteFileSubSystem fs = RemoteFileUtility .getFileSubSystem(environment.getHost()); if (fs != null) { try { final IRemoteFile remoteFile = fs.getRemoteFileObject( initialFolder, new NullProgressMonitor()); if (remoteFile != null && remoteFile.exists()) { dialog.setPreSelection(remoteFile); } } catch (SystemMessageException e) { DLTKRSEPlugin.log(e); } } } if (dialog.open() == Window.OK) { Object selectedObject = dialog.getSelectedObject(); if (selectedObject instanceof IRemoteFile) { IRemoteFile file = (IRemoteFile) selectedObject; return file.getAbsolutePath(); } else if (selectedObject instanceof ISystemFilterReference) { final ISystemFilter filter = ((ISystemFilterReference) selectedObject) .getReferencedFilter(); if (filter != null && filter.getFilterStringCount() == 1) { final String filterString = filter.getFilterStrings()[0]; if (filterString.endsWith(FILTER_STD_SUFFIX)) { final IRemoteFileSubSystem fs = RemoteFileUtility .getFileSubSystem(environment.getHost()); if (fs != null) { try { final IRemoteFile remoteFile = fs .getRemoteFileObject(filterString .substring(0, filterString .length() - FILTER_STD_SUFFIX .length()), new NullProgressMonitor()); if (remoteFile != null) { return remoteFile.getAbsolutePath(); } } catch (SystemMessageException e) { DLTKRSEPlugin.log(e); } } } } } } return null; } private static final String FILTER_STD_SUFFIX = "/*"; //$NON-NLS-1$ @Override public String selectFile(Shell shell, int fileType) { return selectFile(shell, fileType, null); } /** * @since 2.0 */ @Override public String selectFile(Shell shell, int fileType, String initialSelection) { if (!environment.connect(true)) { return null; } SystemRemoteFileDialog dialog = new SystemRemoteFileDialog(shell); dialog.setDefaultSystemConnection(this.environment.getHost(), true); if (initialSelection != null && initialSelection.length() != 0) { final IRemoteFileSubSystem fs = RemoteFileUtility .getFileSubSystem(environment.getHost()); if (fs != null) { try { final IRemoteFile remoteFile = fs.getRemoteFileObject( initialSelection, new NullProgressMonitor()); if (remoteFile != null && remoteFile.exists()) { dialog.setPreSelection(remoteFile); } } catch (SystemMessageException e) { DLTKRSEPlugin.log(e); } } } if (dialog.open() == Window.OK) { Object selectedObject = dialog.getSelectedObject(); if (selectedObject instanceof IRemoteFile) { IRemoteFile file = (IRemoteFile) selectedObject; return file.getAbsolutePath(); } } return null; } }