blob: 30c21a1a89c8dc88eeb85a233a8542fe7de3b801 [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2006 IBM Corporation 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:
// IBM Corporation - initial implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.authoring.ui.dialogs;
import org.eclipse.epf.authoring.ui.editors.AbstractDiagramEditor;
import org.eclipse.epf.authoring.ui.editors.BreakdownElementEditorInput;
import org.eclipse.epf.authoring.ui.editors.EditorChooser;
import org.eclipse.epf.authoring.ui.editors.ProcessEditor;
import org.eclipse.epf.common.ui.util.MsgBox;
import org.eclipse.epf.library.LibraryService;
import org.eclipse.epf.library.LibraryServiceUtil;
import org.eclipse.epf.library.ui.LibraryUIPlugin;
import org.eclipse.epf.library.ui.LibraryUIResources;
import org.eclipse.epf.library.ui.preferences.LibraryUIPreferences;
import org.eclipse.epf.uma.MethodConfiguration;
import org.eclipse.epf.uma.ProcessComponent;
import org.eclipse.epf.uma.util.Scope;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialogWithToggle;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorPart;
/**
* Prompts the user to switch the current Configuration to a recommended
* Configuration.
*
* @author Jeff Hardy
* @author Kelvin Low
* @since 1.0
*/
public class SwitchConfigDialog {
private Shell shell;
private IEditorPart part;
/**
* Creates a new instance.
*
* @param shell
* The parent shell.
* @param recommendedConfig
* The recommended configuration.
*/
public SwitchConfigDialog(Shell shell, IEditorPart part) {
this.shell = shell;
this.part = part;
}
/**
* Displays the dialog iff the given recommendedConfig is different than the
* currently selected config
*
* returns IDialogConstants.OK_ID if dialog wasn't shown, or if config was
* switched returns IDialogConstants.CANCEL_ID if dialog was shown and user
* did not click Yes
*/
public void execute() {
Display display = shell != null ? shell.getDisplay() : null;
if (display == null) {
display = MsgBox.getDisplay();
}
if (display == null) {
// could not get display
return;
}
display.asyncExec(new Runnable() {
public void run() {
Object obj = null;
if (part instanceof AbstractDiagramEditor) {
if (((AbstractDiagramEditor)part).isDisposed()) {
return;
}
BreakdownElementEditorInput input = (BreakdownElementEditorInput) ((IEditorPart) part)
.getEditorInput();
if (input.getSuppression().getProcess() != null) {
obj = input.getSuppression().getProcess().eContainer();
}
} else if (part instanceof ProcessEditor) {
if (((ProcessEditor)part).isDisposed()) {
return;
}
obj = EditorChooser.getInstance().getMethodEditorInput(part);
}
if (obj != null && obj instanceof ProcessComponent) {
MethodConfiguration recommendedConfig = ((ProcessComponent) obj).getProcess().getDefaultContext();
if (recommendedConfig instanceof Scope || recommendedConfig == null) {
return;
}
String switchConfigPref = LibraryUIPreferences.getSwitchConfig();
if (MessageDialogWithToggle.NEVER.equals(switchConfigPref)) {
// Call this to refresh active part if needed.
// TODO: Review implementation.
// LibraryService.getInstance().setCurrentMethodConfiguration(
// LibraryService.getInstance()
// .getCurrentMethodConfiguration());
return;
}
if (LibraryService.getInstance().getCurrentMethodConfiguration() != recommendedConfig) {
final String configName = recommendedConfig.getName();
if (MessageDialogWithToggle.PROMPT.equals(switchConfigPref)) {
MessageDialogWithToggle dialog = MessageDialogWithToggle
.openYesNoQuestion(shell,
LibraryUIResources.switchConfigDialog_title,
LibraryUIResources
.bind(
LibraryUIResources.switchConfigDialog_text,
configName),
null, false, LibraryUIPlugin.getDefault()
.getPreferenceStore(),
LibraryUIPreferences.getSwitchConfigPreferenceKey());
if (dialog.getReturnCode() == IDialogConstants.YES_ID) {
MethodConfiguration config = LibraryServiceUtil
.getMethodConfiguration(LibraryService
.getInstance().getCurrentMethodLibrary(),
configName);
LibraryService.getInstance().setCurrentMethodConfiguration(
config);
} else {
// Call this to refresh active part if needed.
// TODO: Review implementation.
LibraryService.getInstance().setCurrentMethodConfiguration(
LibraryService.getInstance()
.getCurrentMethodConfiguration());
}
} else if (MessageDialogWithToggle.ALWAYS.equals(switchConfigPref)) {
MethodConfiguration config = LibraryServiceUtil
.getMethodConfiguration(LibraryService.getInstance()
.getCurrentMethodLibrary(), configName);
LibraryService.getInstance().setCurrentMethodConfiguration(
config);
}
}
}
}
});
}
public static void run(Shell shell, IEditorPart part) {
SwitchConfigDialog dialog = new SwitchConfigDialog(Display
.getCurrent().getActiveShell(), (IEditorPart)part);
dialog.execute();
}
}