| package org.eclipse.linuxtools.profiling.launch; |
| |
| import java.net.URI; |
| import java.net.URISyntaxException; |
| |
| import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants; |
| import org.eclipse.core.filesystem.IFileInfo; |
| import org.eclipse.core.filesystem.IFileStore; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.ResourcesPlugin; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.debug.core.ILaunchConfiguration; |
| import org.eclipse.linuxtools.internal.profiling.launch.ProfileLaunchPlugin; |
| |
| /** |
| * @since 1.1 |
| */ |
| public class ConfigUtils { |
| |
| private final static String EMPTY_STRING = ""; //$NON-NLS-1$ |
| |
| private ILaunchConfiguration config; |
| |
| public ConfigUtils(ILaunchConfiguration config) { |
| this.config = config; |
| } |
| |
| /** |
| * Get if the executable shall be copied to remote target before launch. |
| * |
| * @return To copy executable or not. |
| * @throws CoreException |
| */ |
| public boolean getCopyExecutable() |
| throws CoreException { |
| boolean copyExecutable = config.getAttribute( |
| RemoteProxyCMainTab.ATTR_ENABLE_COPY_FROM_EXE, false); |
| return copyExecutable; |
| } |
| |
| /** |
| * Get the absolute path of the executable to copy from. If the executable is |
| * on a remote machine, this is the path to the executable on that machine. |
| * |
| * @throws CoreException |
| */ |
| public String getCopyFromExecutablePath() |
| throws CoreException { |
| String executablePath = config.getAttribute( |
| RemoteProxyCMainTab.ATTR_COPY_FROM_EXE_NAME, EMPTY_STRING); |
| return executablePath; |
| } |
| |
| /** |
| * Get the absolute path of the executable to launch. If the executable is |
| * on a remote machine, this is the path to the executable on that machine. |
| * |
| * @throws CoreException |
| */ |
| public String getExecutablePath() |
| throws CoreException { |
| String executablePath = config.getAttribute( |
| ICDTLaunchConfigurationConstants.ATTR_PROGRAM_NAME, EMPTY_STRING); |
| return executablePath; |
| } |
| |
| /** |
| * Verify the validity of executable path. If the executable is to be |
| * copied, then no additional verification is required. Otherwise, the path |
| * must point to an existing file. |
| * |
| * @param monitor |
| * progress monitor |
| * @return IPath representing path to the executable (either local or |
| * remote) |
| * @throws CoreException |
| * if the resource can't be found or the monitor was canceled. |
| * @since 5.0 |
| */ |
| public IPath verifyExecutablePath( |
| IProgressMonitor monitor) throws CoreException { |
| String executablePath = getExecutablePath(); |
| URI executableURI; |
| |
| try { |
| executableURI = new URI(executablePath); |
| } catch (URISyntaxException e) { |
| return null; |
| } |
| RemoteConnection rc = new RemoteConnection(executableURI); |
| IFileStore fs = rc.getRmtFileProxy().getResource(executableURI.getPath()); |
| IFileInfo fi = fs.fetchInfo(); |
| |
| if (fi.exists()) |
| return Path.fromOSString(executableURI.getPath()); |
| else |
| return null; |
| } |
| |
| /** |
| * Get the working directory path for the application launch |
| * |
| * @return The working directory. |
| * @throws CoreException |
| * @since 5.0 |
| */ |
| public String getWorkingDirectory() |
| throws CoreException { |
| String workingDirectory = config.getAttribute( |
| RemoteProxyCMainTab.ATTR_REMOTE_WORKING_DIRECTORY_NAME, EMPTY_STRING); |
| if (workingDirectory.length() == 0) |
| return null; |
| URI workingDirectoryURI; |
| try { |
| workingDirectoryURI = new URI(workingDirectory); |
| } catch (URISyntaxException e) { |
| // Just treat it as unusable. |
| return null; |
| } |
| return workingDirectoryURI.getPath(); |
| } |
| |
| /** |
| * Verify that the project exists prior to the launch. |
| * |
| * @return The existing project. |
| * @throws CoreException |
| */ |
| protected IProject verifyProject(ILaunchConfiguration configuration) throws CoreException { |
| String proName = getProjectName(configuration); |
| if (proName == null) { |
| throw new CoreException(new Status(IStatus.ERROR, ProfileLaunchPlugin.PLUGIN_ID, |
| "Messages.AbstractParallelLaunchConfigurationDelegate_Project_not_specified")); //$NON-NLS-1$ |
| } |
| |
| IProject project = getProject(proName); |
| if (project == null || !project.exists() || !project.isOpen()) { |
| throw new CoreException(new Status(IStatus.ERROR, ProfileLaunchPlugin.PLUGIN_ID, |
| "Messages.AbstractParallelLaunchConfigurationDelegate_Project_does_not_exist_or_is_not_a_project")); //$NON-NLS-1$ |
| } |
| |
| return project; |
| } |
| |
| /** |
| * Get the IProject object from the project name. |
| * |
| * @param project |
| * name of the project |
| * @return IProject resource |
| */ |
| public static IProject getProject(String project) { |
| return ResourcesPlugin.getWorkspace().getRoot().getProject(project); |
| } |
| |
| /** |
| * Get the name of the project |
| * |
| * @return The name of the project. |
| * @throws CoreException |
| */ |
| public String getProjectName() throws CoreException { |
| return getProjectName(config); |
| } |
| |
| public static String getProjectName(ILaunchConfiguration configuration) |
| throws CoreException { |
| return configuration.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME, (String) null); |
| } |
| |
| |
| } |