/******************************************************************************* * Copyright (c) 2012 Red Hat Inc.. * 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: * Red Hat Incorporated - initial API and implementation *******************************************************************************/ package org.eclipse.linuxtools.internal.rdt.proxy; import java.net.URI; import org.eclipse.core.filesystem.IFileStore; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.linuxtools.profiling.launch.IRemoteFileProxy; import org.eclipse.remote.core.IRemoteConnection; import org.eclipse.remote.core.IRemoteFileService; import org.eclipse.remote.core.IRemoteResource; public class RDTFileProxy implements IRemoteFileProxy { private IProject project; private IRemoteFileService manager; private IRemoteResource remoteRes; private void initialize(URI uri) throws CoreException { IRemoteConnection connection = RDTProxyManager.getConnection(uri); if (connection != null) { manager = connection.getService(IRemoteFileService.class); } else { throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, Activator.getResourceString("Connection.error"))); //$NON-NLS-1$ } } public RDTFileProxy(URI uri) throws CoreException { initialize(uri); } public RDTFileProxy(IProject project) throws CoreException { this.project = project; URI uri = project.getLocationURI(); IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); IResource resource = workspaceRoot.findMember(project.getName()); if (resource != null) { remoteRes = resource.getAdapter(IRemoteResource.class); if (project.hasNature(RDTProxyManager.SYNC_NATURE)) { uri = remoteRes.getActiveLocationURI(); } } initialize(uri); } @Override public URI toURI(IPath path) { return manager.toURI(path); } @Override public URI toURI(String path) { return manager.toURI(path); } @Override public String toPath(URI uri) { return manager.toPath(uri); } @Override public String getDirectorySeparator() { return manager.getDirectorySeparator(); } @Override public IFileStore getResource(String path) { return manager.getResource(path); } @Override public URI getWorkingDir() { try { if (project.hasNature(RDTProxyManager.SYNC_NATURE)) return remoteRes.getActiveLocationURI(); } catch (CoreException e) { return project.getLocationURI(); } return project.getLocationURI(); } }