/******************************************************************************* * Copyright (c) 2015, 2016 Red Hat Inc. 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: * Red Hat - Initial Contribution *******************************************************************************/ package org.eclipse.linuxtools.internal.docker.ui.launch; import static org.eclipse.linuxtools.docker.core.IDockerImageBuildOptions.DOCKER_CONNECTION; import static org.eclipse.linuxtools.docker.core.IDockerImageBuildOptions.FORCE_RM_INTERMEDIATE_CONTAINERS; import static org.eclipse.linuxtools.docker.core.IDockerImageBuildOptions.NO_CACHE; import static org.eclipse.linuxtools.docker.core.IDockerImageBuildOptions.QUIET_BUILD; import static org.eclipse.linuxtools.docker.core.IDockerImageBuildOptions.REPO_NAME; import static org.eclipse.linuxtools.docker.core.IDockerImageBuildOptions.RM_INTERMEDIATE_CONTAINERS; import static org.eclipse.linuxtools.internal.docker.ui.launch.IBuildDockerImageLaunchConfigurationConstants.SOURCE_PATH_LOCATION; import static org.eclipse.linuxtools.internal.docker.ui.launch.IBuildDockerImageLaunchConfigurationConstants.SOURCE_PATH_WORKSPACE_RELATIVE_LOCATION; import java.util.HashMap; import java.util.Map; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.model.ILaunchConfigurationDelegate; import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.ILaunchGroup; import org.eclipse.linuxtools.docker.core.DockerConnectionManager; import org.eclipse.linuxtools.docker.core.IDockerConnection; import org.eclipse.linuxtools.internal.docker.ui.jobs.BuildDockerImageJob; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.PlatformUI; /** * The {@link ILaunchConfigurationDelegate} to trigger the build of a Docker * Image. * */ public class BuildDockerImageLaunchConfigurationDelegate implements ILaunchConfigurationDelegate { @Override public void launch(final ILaunchConfiguration configuration, final String mode, final ILaunch launch, final IProgressMonitor monitor) throws CoreException { final String sourcePathLocation = configuration .getAttribute(SOURCE_PATH_LOCATION, (String) null); final boolean sourcePathWorkspaceRelativeLocation = configuration .getAttribute(SOURCE_PATH_WORKSPACE_RELATIVE_LOCATION, false); final IPath sourcePath = BuildDockerImageUtils.getPath( sourcePathLocation, sourcePathWorkspaceRelativeLocation); final String connectionName = configuration .getAttribute(DOCKER_CONNECTION, (String) null); final String repoName = configuration.getAttribute(REPO_NAME, (String) null); final IDockerConnection connection = DockerConnectionManager .getInstance().getConnectionByName(connectionName); final Map<String, Object> buildOptions = new HashMap<>(); buildOptions.put(QUIET_BUILD, configuration.getAttribute(QUIET_BUILD, false)); buildOptions.put(NO_CACHE, configuration.getAttribute(NO_CACHE, false)); buildOptions.put(RM_INTERMEDIATE_CONTAINERS, configuration .getAttribute(RM_INTERMEDIATE_CONTAINERS, true)); buildOptions.put(FORCE_RM_INTERMEDIATE_CONTAINERS, configuration .getAttribute(FORCE_RM_INTERMEDIATE_CONTAINERS, false)); if (connection != null && sourcePath != null) { final Job buildImageJob = new BuildDockerImageJob(connection, sourcePath, repoName, buildOptions); buildImageJob.schedule(); } else { final ILaunchGroup launchGroup = DebugUITools .getLaunchGroup(configuration, "run"); //$NON-NLS-1$ // prompt the user with the launch configuration editor Display.getDefault() .syncExec(() -> DebugUITools.openLaunchConfigurationDialog( PlatformUI.getWorkbench().getActiveWorkbenchWindow() .getShell(), configuration, launchGroup.getIdentifier(), null)); } } }