| /******************************************************************************* |
| * Copyright (c) 2014 QNX Software Systems and others. |
| * |
| * This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License 2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * Doug Schaefer |
| *******************************************************************************/ |
| package org.eclipse.launchbar.ui; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.debug.core.DebugPlugin; |
| import org.eclipse.debug.core.ILaunchConfiguration; |
| import org.eclipse.debug.core.ILaunchConfigurationListener; |
| import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; |
| import org.eclipse.debug.core.ILaunchMode; |
| import org.eclipse.jface.wizard.IWizardContainer; |
| import org.eclipse.jface.wizard.Wizard; |
| import org.eclipse.jface.wizard.WizardDialog; |
| import org.eclipse.launchbar.ui.internal.Activator; |
| import org.eclipse.launchbar.ui.internal.Messages; |
| import org.eclipse.launchbar.ui.internal.dialogs.NewLaunchConfigEditPage; |
| import org.eclipse.launchbar.ui.internal.dialogs.NewLaunchConfigTypePage2; |
| |
| public class NewLaunchConfigWizard extends Wizard implements ILaunchConfigurationListener { |
| |
| private NewLaunchConfigTypePage2 typePage; |
| private NewLaunchConfigEditPage editPage; |
| |
| private List<ILaunchConfiguration> configsToDelete = new ArrayList<>(); |
| |
| public NewLaunchConfigWizard() { |
| editPage = new NewLaunchConfigEditPage(); |
| typePage = new NewLaunchConfigTypePage2(editPage); |
| |
| setWindowTitle(Messages.NewLaunchConfigWizard_0); |
| |
| // while the wizard is open, some ill behaved launch config tabs save the working copy. |
| // We need to make sure those saves are deleted when the dialog is finished. |
| // We also need to turn off listening in the tool bar manager so that we don't treat these |
| // as real launch configs. |
| DebugPlugin.getDefault().getLaunchManager().addLaunchConfigurationListener(this); |
| } |
| |
| @Override |
| public void setContainer(IWizardContainer wizardContainer) { |
| super.setContainer(wizardContainer); |
| |
| if (wizardContainer != null) { |
| // Edit page wants to know when it's about to change to itself |
| ((WizardDialog) wizardContainer).addPageChangingListener(editPage); |
| } |
| } |
| |
| @Override |
| public void addPages() { |
| addPage(typePage); |
| addPage(editPage); |
| } |
| |
| @Override |
| public boolean canFinish() { |
| if (getPage(editPage.getName()) == null) { |
| return false; |
| } |
| return super.canFinish(); |
| } |
| |
| public ILaunchConfigurationWorkingCopy getWorkingCopy() { |
| return editPage.getWorkingCopy(); |
| } |
| |
| public ILaunchMode getLaunchMode() { |
| // TODO we want to make sure the newly created config has the right mode |
| // selected in the launch bar |
| return null; |
| } |
| |
| @Override |
| public boolean performFinish() { |
| cleanUpConfigs(); |
| return editPage.performFinish(); |
| } |
| |
| @Override |
| public boolean performCancel() { |
| cleanUpConfigs(); |
| return super.performCancel(); |
| } |
| |
| void cleanUpConfigs() { |
| DebugPlugin.getDefault().getLaunchManager().removeLaunchConfigurationListener(this); |
| for (ILaunchConfiguration config : configsToDelete) { |
| try { |
| config.delete(); |
| } catch (CoreException e) { |
| Activator.log(e); |
| } |
| } |
| } |
| |
| @Override |
| public void launchConfigurationAdded(ILaunchConfiguration configuration) { |
| if (!configuration.isWorkingCopy()) |
| configsToDelete.add(configuration); |
| } |
| |
| @Override |
| public void launchConfigurationChanged(ILaunchConfiguration configuration) { |
| // Nothing to do |
| } |
| |
| @Override |
| public void launchConfigurationRemoved(ILaunchConfiguration configuration) { |
| if (!configuration.isWorkingCopy()) |
| configsToDelete.remove(configuration); |
| } |
| |
| } |