/******************************************************************************* * Copyright (c) 2012 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation ******************************************************************************/ package org.eclipse.linuxtools.internal.profiling.launch.ui.rdt.proxy; import java.net.URI; import java.net.URISyntaxException; import org.eclipse.core.runtime.IStatus; import org.eclipse.linuxtools.profiling.launch.ui.IRemoteResourceSelectorProxy; import org.eclipse.remote.core.IRemoteConnection; import org.eclipse.remote.core.IRemoteConnectionType; import org.eclipse.remote.core.IRemoteFileService; import org.eclipse.remote.core.IRemoteServicesManager; import org.eclipse.remote.ui.IRemoteUIConstants; import org.eclipse.remote.ui.IRemoteUIFileService; import org.eclipse.swt.widgets.Shell; public class RDTResourceSelectorProxy implements IRemoteResourceSelectorProxy { private enum ResourceType { FILE, DIRECTORY } private URI getEmptyPathURI(String scheme) { try { return new URI(scheme, null, "/", null); //$NON-NLS-1$ } catch (URISyntaxException e) { Activator.log(IStatus.ERROR, Messages.RDTResourceSelectorProxy_URI_syntax_error, e); return null; } } private URI selectResource(String scheme, String initialPath, String prompt, Shell shell, ResourceType resourceType) { IRemoteUIFileService uiFileService; boolean schemeSwitch = false; URI uri; try { uri = new URI(initialPath); if (!scheme.equals(uri.getScheme())) { uri = getEmptyPathURI(scheme); schemeSwitch = true; } } catch (URISyntaxException e) { uri = getEmptyPathURI(scheme); schemeSwitch = true; } IRemoteServicesManager sm = Activator.getService(IRemoteServicesManager.class); IRemoteConnectionType ct = sm.getConnectionType(uri); IRemoteConnection connection = ct.getConnection(uri); IRemoteFileService fileService = connection.getService(IRemoteFileService.class); // If the user is switching schemes, start with an empty host and path uiFileService = ct.getService(IRemoteUIFileService.class); uiFileService.showConnections(true); if (!schemeSwitch) { uiFileService.setConnection(connection); } String selectedPath = null; switch (resourceType) { case FILE: selectedPath = uiFileService.browseFile(shell, prompt, uri.getPath(), IRemoteUIConstants.NONE); break; case DIRECTORY: selectedPath = uiFileService.browseDirectory(shell, prompt, uri.getPath(), IRemoteUIConstants.NONE); break; default: Activator.log(IStatus.ERROR, Messages.RDTResourceSelectorProxy_unsupported_resourceType + resourceType); return null; } URI selectedURI = null; if (selectedPath != null) { connection = uiFileService.getConnection(); fileService = connection.getService(IRemoteFileService.class); selectedURI = fileService.toURI(selectedPath); } return selectedURI; } @Override public URI selectFile(String scheme, String initialPath, String prompt, Shell shell) { return selectResource(scheme, initialPath, prompt, shell, ResourceType.FILE); } @Override public URI selectDirectory(String scheme, String initialPath, String prompt, Shell shell) { return selectResource(scheme, initialPath, prompt, shell, ResourceType.DIRECTORY); } }