use of org.eclipse.debug.core.ILaunchConfigurationType in project linuxtools by eclipse.
the class LaunchConfigurationUtils method createBuildImageLaunchConfiguration.
/**
* Creates a new {@link ILaunchConfiguration} to build an
* {@link IDockerImage} from a Dockerfile {@link IResource}.
*
* @param connection
* the connection to use to submit the build
* @param repoName
* the repo/name of the {@link IDockerImage} to build
* @param dockerfile
* the dockerfile to use to build the {@link IDockerImage}
* @return the created {@link ILaunchConfiguration}
* @throws CoreException
*/
public static ILaunchConfiguration createBuildImageLaunchConfiguration(final IDockerConnection connection, final String repoName, final IResource dockerfile) throws CoreException {
final ILaunchConfigurationType configType = LaunchConfigurationUtils.getLaunchConfigType(IBuildDockerImageLaunchConfigurationConstants.CONFIG_TYPE_ID);
final ILaunchConfigurationWorkingCopy wc = getLaunchConfigurationWorkingCopy(configType, createBuildImageLaunchConfigurationName(repoName, dockerfile));
wc.setAttribute(IBuildDockerImageLaunchConfigurationConstants.SOURCE_PATH_LOCATION, dockerfile.getFullPath().removeLastSegments(1).toString());
wc.setAttribute(IBuildDockerImageLaunchConfigurationConstants.SOURCE_PATH_WORKSPACE_RELATIVE_LOCATION, true);
wc.setAttribute(IDockerImageBuildOptions.DOCKER_CONNECTION, connection.getName());
wc.setAttribute(IDockerImageBuildOptions.REPO_NAME, repoName);
return wc.doSave();
}
use of org.eclipse.debug.core.ILaunchConfigurationType in project linuxtools by eclipse.
the class SystemTapScriptLaunchShortcut method findLaunchConfiguration.
private ILaunchConfiguration findLaunchConfiguration(String scriptPath, String scriptProject) {
ILaunchConfiguration configuration = null;
ArrayList<ILaunchConfiguration> candidateConfigurations = new ArrayList<>();
try {
ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager();
ILaunchConfiguration[] configs = launchManager.getLaunchConfigurations(getLaunchConfigType());
for (ILaunchConfiguration config : configs) {
if (config.getAttribute(SystemTapScriptLaunchConfigurationTab.SCRIPT_PATH_ATTR, "").equals(scriptPath)) {
// $NON-NLS-1$
candidateConfigurations.add(config);
}
}
int candidateCount = candidateConfigurations.size();
if (candidateCount == 0) {
LinkedList<String> configNames = new LinkedList<>();
configs = launchManager.getLaunchConfigurations();
for (ILaunchConfiguration config : configs) {
configNames.add(config.getName());
}
String configName = // $NON-NLS-1$ //$NON-NLS-2$
(scriptProject == null ? "" : scriptProject + " ") + Path.fromOSString(scriptPath).lastSegment();
String wcName = configName;
int conflict_index, conflict_count = 0;
while ((conflict_index = configNames.indexOf(wcName)) != -1) {
// $NON-NLS-1$
wcName = configName.concat(String.format(" (%d)", ++conflict_count));
configNames.remove(conflict_index);
}
ILaunchConfigurationType type = getLaunchConfigType();
ILaunchConfigurationWorkingCopy wc = type.newInstance(null, wcName);
wc.setAttribute(SystemTapScriptLaunchConfigurationTab.SCRIPT_PATH_ATTR, scriptPath);
configuration = wc.doSave();
} else if (candidateCount == 1) {
configuration = candidateConfigurations.get(0);
} else {
configuration = chooseConfiguration(candidateConfigurations, ILaunchManager.RUN_MODE);
}
} catch (CoreException e) {
ExceptionErrorDialog.openError(Messages.SystemTapScriptLaunchShortcut_couldNotFindConfig, e);
}
return configuration;
}
use of org.eclipse.debug.core.ILaunchConfigurationType in project linuxtools by eclipse.
the class VagrantConnection method rtCall.
private static void rtCall(String[] args, File vagrantDir, Map<String, String> environment) {
// org.eclipse.core.externaltools.internal.IExternalToolConstants
// $NON-NLS-1$
final String EXTERNAL_TOOLS = "org.eclipse.ui.externaltools.ProgramLaunchConfigurationType";
// $NON-NLS-1$
final String UI_PLUGIN_ID = "org.eclipse.ui.externaltools";
// $NON-NLS-1$
final String ATTR_LOCATION = UI_PLUGIN_ID + ".ATTR_LOCATION";
// $NON-NLS-1$
final String ATTR_TOOL_ARGUMENTS = UI_PLUGIN_ID + ".ATTR_TOOL_ARGUMENTS";
// $NON-NLS-1$
final String ATTR_WORKING_DIRECTORY = UI_PLUGIN_ID + ".ATTR_WORKING_DIRECTORY";
String arguments = Arrays.asList(args).stream().map(u -> u.toString()).collect(// $NON-NLS-1$
Collectors.joining(" "));
ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager();
ILaunchConfigurationType type = manager.getLaunchConfigurationType(EXTERNAL_TOOLS);
try {
// TODO: worth handling 'vagrant' (not on PATH) as an alias ?
String vagrantPath = findVagrantPath();
ILaunchConfigurationWorkingCopy wc = type.newInstance(null, VG);
wc.setAttribute(ATTR_LOCATION, vagrantPath);
wc.setAttribute(ATTR_TOOL_ARGUMENTS, arguments);
wc.setAttribute(ATTR_WORKING_DIRECTORY, vagrantDir != null ? vagrantDir.getAbsolutePath() : null);
wc.setAttribute(ILaunchManager.ATTR_ENVIRONMENT_VARIABLES, environment);
wc.launch(ILaunchManager.RUN_MODE, new NullProgressMonitor());
} catch (CoreException e1) {
Activator.log(e1);
}
}
use of org.eclipse.debug.core.ILaunchConfigurationType in project linuxtools by eclipse.
the class SystemTapLaunchShortcut method createConfiguration.
/**
* Allows null configurations to be launched. Any launch that uses a binary
* should never call this configuration with a null parameter, and any
* launch that does not use a binary should never call this function. The
* null handling is included for ease of testing.
*
* @param bin
* @param name
* - Customize the name based on the shortcut being launched
* @return A launch configuration, or null
*/
protected ILaunchConfigurationWorkingCopy createConfiguration(IBinary bin, String name) {
ILaunchConfigurationWorkingCopy wc = null;
if (bin != null) {
try {
String projectName = bin.getResource().getProjectRelativePath().toString();
ILaunchConfigurationType configType = getLaunchConfigType();
wc = configType.newInstance(null, getLaunchManager().generateLaunchConfigurationName(// $NON-NLS-1$
name + " - " + bin.getElementName()));
wc.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_NAME, projectName);
wc.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME, bin.getCProject().getElementName());
wc.setMappedResources(new IResource[] { bin.getResource(), bin.getResource().getProject() });
wc.setAttribute(ICDTLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, (String) null);
setDefaultProfileAttributes(wc);
} catch (CoreException e) {
e.printStackTrace();
}
} else {
try {
wc = getLaunchConfigType().newInstance(null, getLaunchManager().generateLaunchConfigurationName(name));
setDefaultProfileAttributes(wc);
} catch (CoreException e) {
e.printStackTrace();
return null;
}
}
return wc;
}
use of org.eclipse.debug.core.ILaunchConfigurationType in project linuxtools by eclipse.
the class JavaAppInContainerLaunchDelegate method launch.
/* (non-Javadoc)
* @see org.eclipse.debug.core.model.ILaunchConfigurationDelegate#launch(org.eclipse.debug.core.ILaunchConfiguration, java.lang.String, org.eclipse.debug.core.ILaunch, org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
public void launch(ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor) throws CoreException {
if (monitor == null) {
monitor = new NullProgressMonitor();
}
// $NON-NLS-1$
monitor.beginTask(NLS.bind("{0}...", new String[] { configuration.getName() }), 3);
// check for cancellation
if (monitor.isCanceled()) {
return;
}
String connectionURI = configuration.getAttribute(JavaLaunchConfigurationConstants.CONNECTION_URI, (String) null);
String imageID = configuration.getAttribute(JavaLaunchConfigurationConstants.IMAGE_ID, (String) null);
List<String> extraDirs = configuration.getAttribute(JavaLaunchConfigurationConstants.DIRS, Arrays.asList(new String[0]));
try {
DockerConnection conn = (DockerConnection) DockerConnectionManager.getInstance().getConnectionByUri(connectionURI);
if (conn == null) {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
MessageDialog.openError(Display.getDefault().getActiveShell(), Messages.JavaAppInContainerLaunchDelegate_connection_not_found_title, Messages.bind(Messages.JavaAppInContainerLaunchDelegate_connection_not_found_text, connectionURI));
}
});
return;
} else if (!conn.isOpen()) {
try {
conn.open(false);
} catch (DockerException e) {
}
if (!conn.isOpen()) {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
MessageDialog.openError(Display.getDefault().getActiveShell(), Messages.JavaAppInContainerLaunchDelegate_connection_not_active_title, Messages.bind(Messages.JavaAppInContainerLaunchDelegate_connection_not_active_text, connectionURI));
}
});
return;
}
}
IDockerImage img = conn.getImage(imageID);
if (img == null) {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
MessageDialog.openError(Display.getDefault().getActiveShell(), Messages.JavaAppInContainerLaunchDelegate_image_not_found_title, Messages.bind(Messages.JavaAppInContainerLaunchDelegate_image_not_found_text, imageID));
}
});
return;
}
// randomized port between 1025 and 65535
int port = ILaunchManager.DEBUG_MODE.equals(mode) ? (int) ((65535 - 1025) * Math.random()) + 1025 : -1;
monitor.subTask(Messages.JavaAppInContainerLaunchDelegate_Verifying_launch_attributes____1);
String mainTypeName = verifyMainTypeName(configuration);
IVMInstall vm = new ContainerVMInstall(configuration, img, port);
ContainerVMRunner runner = new ContainerVMRunner(vm);
File workingDir = verifyWorkingDirectory(configuration);
String workingDirName = null;
if (workingDir != null) {
workingDirName = workingDir.getAbsolutePath();
}
runner.setAdditionalDirectories(extraDirs);
// Environment variables
String[] envp = getEnvironment(configuration);
// Program & VM arguments
String pgmArgs = getProgramArguments(configuration);
String vmArgs = getVMArguments(configuration);
ExecutionArguments execArgs = new ExecutionArguments(vmArgs, pgmArgs);
// VM-specific attributes
Map<String, Object> vmAttributesMap = getVMSpecificAttributesMap(configuration);
// Classpath
String[] classpath = getClasspath(configuration);
if (Platform.OS_WIN32.equals(Platform.getOS())) {
for (int i = 0; i < classpath.length; i++) {
classpath[i] = UnixFile.convertDOSPathToUnixPath(classpath[i]);
}
}
// Create VM config
VMRunnerConfiguration runConfig = new VMRunnerConfiguration(mainTypeName, classpath);
runConfig.setProgramArguments(execArgs.getProgramArgumentsArray());
runConfig.setEnvironment(envp);
List<String> finalVMArgs = new ArrayList<>(Arrays.asList(execArgs.getVMArgumentsArray()));
if (ILaunchManager.DEBUG_MODE.equals(mode)) {
double version = getJavaVersion(conn, img);
if (version < 1.5) {
// $NON-NLS-1$
finalVMArgs.add("-Xdebug");
// $NON-NLS-1$
finalVMArgs.add("-Xnoagent");
}
// check if java 1.4 or greater
if (version < 1.4) {
// $NON-NLS-1$
finalVMArgs.add("-Djava.compiler=NONE");
}
if (version < 1.5) {
// $NON-NLS-1$
finalVMArgs.add("-Xrunjdwp:transport=dt_socket,server=y,address=" + port);
} else {
// $NON-NLS-1$
finalVMArgs.add("-agentlib:jdwp=transport=dt_socket,server=y,address=" + port);
}
}
runConfig.setVMArguments(finalVMArgs.toArray(new String[0]));
runConfig.setWorkingDirectory(workingDirName);
runConfig.setVMSpecificAttributesMap(vmAttributesMap);
// Bootpath
runConfig.setBootClassPath(getBootpath(configuration));
// check for cancellation
if (monitor.isCanceled()) {
return;
}
// stop in main
prepareStopInMain(configuration);
// done the verification phase
monitor.worked(1);
monitor.subTask(Messages.JavaAppInContainerLaunchDelegate_Creating_source_locator____2);
// set the default source locator if required
setDefaultSourceLocator(launch, configuration);
monitor.worked(1);
// Launch the configuration - 1 unit of work
runner.run(runConfig, launch, monitor);
// check for cancellation
if (monitor.isCanceled()) {
return;
}
if (ILaunchManager.DEBUG_MODE.equals(mode)) {
while (runner.getIPAddress() == null || !runner.isListening()) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
IDockerContainerInfo info = runner.getContainerInfo();
// $NON-NLS-1$
String configName = info.name().startsWith("/") ? info.name().substring(1) : info.name();
ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager();
ILaunchConfigurationType type = manager.getLaunchConfigurationType(IJavaLaunchConfigurationConstants.ID_REMOTE_JAVA_APPLICATION);
ILaunchConfiguration cfgForAttach = type.newInstance(null, configName);
ILaunchConfigurationWorkingCopy wc = cfgForAttach.getWorkingCopy();
String ip = runner.getIPAddress();
// Can we reach it ? Or is it on a different network.
if (!isListening(ip, port)) {
// If the daemon is reachable via TCP it should forward traffic.
if (conn.getSettings() instanceof TCPConnectionSettings) {
ip = ((TCPConnectionSettings) conn.getSettings()).getAddr();
if (!isListening(ip, port)) {
// Try to find some network interface that's listening
ip = getIPAddressListening(port);
if (!isListening(ip, port)) {
ip = null;
}
}
} else {
ip = null;
}
}
if (ip == null) {
String imageName = conn.getImage(imageID).repoTags().get(0);
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
MessageDialog.openError(Display.getDefault().getActiveShell(), Messages.JavaAppInContainerLaunchDelegate_session_unreachable_title, Messages.bind(Messages.JavaAppInContainerLaunchDelegate_session_unreachable_text, new Object[] { imageName, imageID, runner.getIPAddress() }));
}
});
return;
}
Map<String, String> map = new HashMap<>();
// $NON-NLS-1$
map.put("hostname", ip);
// $NON-NLS-1$
map.put("port", String.valueOf(port));
wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_CONNECT_MAP, map);
String projectName = configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, (String) null);
wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, projectName);
wc.doSave();
DebugUITools.launch(cfgForAttach, ILaunchManager.DEBUG_MODE);
}
} finally {
monitor.done();
}
}
Aggregations