blob: 4caf0e868bd1720261cda2889a92f575e207520f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 Red Hat.
* 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 java.util.function.Predicate;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.debug.ui.ILaunchShortcut;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.linuxtools.docker.core.DockerConnectionManager;
import org.eclipse.linuxtools.docker.core.DockerException;
import org.eclipse.linuxtools.docker.ui.Activator;
import org.eclipse.linuxtools.internal.docker.ui.commands.CommandUtils;
import org.eclipse.linuxtools.internal.docker.ui.wizards.DockerComposeUpDialog;
import org.eclipse.linuxtools.internal.docker.ui.wizards.NewDockerConnection;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.PlatformUI;
/**
* An {@link ILaunchShortcut} to run the {@code docker-compose up} command from
* a specified {@code docker-compose.yml} file.
*/
public class DockerComposeUpShortcut extends BaseResourceAwareLaunchShortcut {
@Override
protected void launch(IResource resource, String mode) {
// the predicate to apply on the launch configuration to find the
// matching candidates
final Predicate<ILaunchConfiguration> predicate = config -> {
try {
final String sourcePath = config.getAttribute(
IDockerComposeLaunchConfigurationConstants.WORKING_DIR,
""); //$NON-NLS-1$
final boolean workspaceRelative = config.getAttribute(
IDockerComposeLaunchConfigurationConstants.WORKING_DIR_WORKSPACE_RELATIVE_LOCATION,
false);
final IPath dockerfilePath = getPath(sourcePath,
workspaceRelative);
return dockerfilePath
.equals(resource.getLocation().removeLastSegments(1));
} catch (CoreException e) {
Activator.log(e);
return false;
}
};
final ILaunchConfiguration config = findLaunchConfiguration(
IDockerComposeLaunchConfigurationConstants.CONFIG_TYPE_ID,
resource, predicate);
if (config != null) {
DebugUITools.launch(config, mode);
} else {
Activator.log(new DockerException(LaunchMessages
.getString("DockerComposeUpShortcut.launchconfig.error"))); //$NON-NLS-1$
}
}
/**
* Create a launch configuration based on a {@code docker-compose.yml}
* resource, and optionally save it to the underlying resource.
*
* @param dockerComposeScript
* a {@code docker-compose.yml} file to use
*
* @return a launch configuration generated for the
* {@code docker-compose.yml}.
*/
@Override
protected ILaunchConfiguration createConfiguration(
final IResource dockerComposeScript) {
try {
if (!DockerConnectionManager.getInstance().hasConnections()) {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
final boolean confirm = MessageDialog.openQuestion(
PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getShell(),
LaunchMessages.getString(
"DockerComposeUpShortcut.no.connections.msg"), //$NON-NLS-1$
LaunchMessages.getString(
"DockerComposeUpShortcut.no.connections.desc")); //$NON-NLS-1$
if (confirm) {
final NewDockerConnection newConnWizard = new NewDockerConnection();
CommandUtils.openWizard(newConnWizard,
PlatformUI.getWorkbench()
.getActiveWorkbenchWindow()
.getShell());
}
}
});
return null;
} else {
final DockerComposeUpDialog dialog = new DockerComposeUpDialog(
getActiveWorkbenchShell());
final int result = dialog.open();
if (result == IDialogConstants.OK_ID) {
return LaunchConfigurationUtils
.createDockerComposeUpLaunchConfiguration(
dialog.getSelectedConnection(),
dockerComposeScript);
}
}
} catch (CoreException e) {
Activator.log(e);
}
return null;
}
}