| //------------------------------------------------------------------------------ |
| // 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(); |
| } |
| |
| } |