| //------------------------------------------------------------------------------ |
| // 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.editors; |
| |
| import java.lang.reflect.InvocationTargetException; |
| import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.Collection; |
| import java.util.EventObject; |
| import java.util.HashMap; |
| import java.util.HashSet; |
| import java.util.Iterator; |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.MultiStatus; |
| import org.eclipse.core.runtime.NullProgressMonitor; |
| import org.eclipse.core.runtime.OperationCanceledException; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.emf.common.CommonPlugin; |
| import org.eclipse.emf.common.command.Command; |
| import org.eclipse.emf.common.command.CommandStack; |
| import org.eclipse.emf.common.command.CommandStackListener; |
| import org.eclipse.emf.common.command.UnexecutableCommand; |
| import org.eclipse.emf.common.notify.Adapter; |
| import org.eclipse.emf.common.notify.AdapterFactory; |
| import org.eclipse.emf.common.notify.Notification; |
| import org.eclipse.emf.common.notify.impl.AdapterImpl; |
| import org.eclipse.emf.common.notify.impl.NotificationImpl; |
| import org.eclipse.emf.common.ui.viewer.IViewerProvider; |
| import org.eclipse.emf.common.util.BasicEList; |
| import org.eclipse.emf.common.util.EList; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.InternalEObject; |
| import org.eclipse.emf.ecore.impl.ENotificationImpl; |
| import org.eclipse.emf.ecore.resource.Resource; |
| import org.eclipse.emf.edit.command.CommandParameter; |
| import org.eclipse.emf.edit.command.CreateChildCommand; |
| import org.eclipse.emf.edit.command.SetCommand; |
| import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain; |
| import org.eclipse.emf.edit.domain.EditingDomain; |
| import org.eclipse.emf.edit.domain.IEditingDomainProvider; |
| import org.eclipse.emf.edit.provider.AdapterFactoryTreeIterator; |
| import org.eclipse.emf.edit.provider.ComposedAdapterFactory; |
| import org.eclipse.emf.edit.provider.DelegatingWrapperItemProvider; |
| import org.eclipse.emf.edit.provider.IChangeNotifier; |
| import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; |
| import org.eclipse.emf.edit.provider.ITreeItemContentProvider; |
| import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory; |
| import org.eclipse.emf.edit.provider.ViewerNotification; |
| import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory; |
| import org.eclipse.emf.edit.ui.action.CommandActionHandler; |
| import org.eclipse.emf.edit.ui.action.CopyAction; |
| import org.eclipse.emf.edit.ui.action.CutAction; |
| import org.eclipse.emf.edit.ui.action.DeleteAction; |
| import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor; |
| import org.eclipse.emf.edit.ui.action.PasteAction; |
| import org.eclipse.emf.edit.ui.dnd.LocalTransfer; |
| import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider; |
| import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; |
| import org.eclipse.epf.authoring.ui.AuthoringUIPlugin; |
| import org.eclipse.epf.authoring.ui.AuthoringUIResources; |
| import org.eclipse.epf.authoring.ui.actions.IWorkbenchPartAction; |
| import org.eclipse.epf.authoring.ui.actions.LibraryValidateAction; |
| import org.eclipse.epf.authoring.ui.actions.MethodLibraryActionBarContributor; |
| import org.eclipse.epf.authoring.ui.actions.ProcessAutoSynchronizeAction; |
| import org.eclipse.epf.authoring.ui.actions.SynchronizationAction; |
| import org.eclipse.epf.authoring.ui.actions.UpdateSuppressionFromBaseAction; |
| import org.eclipse.epf.authoring.ui.dialogs.DialogHelper; |
| import org.eclipse.epf.authoring.ui.dialogs.UserDefinedDiagramDialog; |
| import org.eclipse.epf.authoring.ui.dnd.EditingDomainTableTreeViewerDropAdapter; |
| import org.eclipse.epf.authoring.ui.forms.DeliveryProcessDescription; |
| import org.eclipse.epf.authoring.ui.forms.IExtensionFormPage; |
| import org.eclipse.epf.authoring.ui.forms.ProcessBreakdownStructureFormPage; |
| import org.eclipse.epf.authoring.ui.forms.ProcessDescription; |
| import org.eclipse.epf.authoring.ui.preferences.ApplicationPreferenceConstants; |
| import org.eclipse.epf.authoring.ui.properties.EPFPropertySheetPage; |
| import org.eclipse.epf.authoring.ui.providers.ProcessEditorPageProvider; |
| import org.eclipse.epf.authoring.ui.util.UIHelper; |
| import org.eclipse.epf.authoring.ui.views.LibraryView; |
| import org.eclipse.epf.authoring.ui.views.ProcessViewer; |
| import org.eclipse.epf.authoring.ui.views.ViewHelper; |
| import org.eclipse.epf.diagram.add.part.ActivityDetailDiagramEditorPlugin; |
| import org.eclipse.epf.diagram.core.part.DiagramEditorInput; |
| import org.eclipse.epf.diagram.core.part.util.DiagramEditorUtil; |
| import org.eclipse.epf.diagram.core.services.DiagramHelper; |
| import org.eclipse.epf.diagram.model.util.GraphicalDataHelper; |
| import org.eclipse.epf.diagram.model.util.GraphicalDataManager; |
| import org.eclipse.epf.diagram.wpdd.part.WPDDiagramEditorPlugin; |
| import org.eclipse.epf.diagramming.part.EPFDiagramEditorPlugin; |
| import org.eclipse.epf.library.ILibraryManager; |
| import org.eclipse.epf.library.ILibraryServiceListener; |
| import org.eclipse.epf.library.LibraryPlugin; |
| import org.eclipse.epf.library.LibraryService; |
| import org.eclipse.epf.library.configuration.ProcessAuthoringConfigurator; |
| import org.eclipse.epf.library.edit.IAdapterFactoryProvider; |
| import org.eclipse.epf.library.edit.IFilter; |
| import org.eclipse.epf.library.edit.LibraryEditResources; |
| import org.eclipse.epf.library.edit.TngAdapterFactory; |
| import org.eclipse.epf.library.edit.command.CommandStackChangedEvent; |
| import org.eclipse.epf.library.edit.command.IActionManager; |
| import org.eclipse.epf.library.edit.command.IResourceAwareCommand; |
| import org.eclipse.epf.library.edit.command.ResourceAwarePasteFromClipboardCommand; |
| import org.eclipse.epf.library.edit.process.ActivityWrapperItemProvider; |
| import org.eclipse.epf.library.edit.process.BreakdownElementWrapperItemProvider; |
| import org.eclipse.epf.library.edit.process.IBSItemProvider; |
| import org.eclipse.epf.library.edit.process.command.ActivityDropCommand; |
| import org.eclipse.epf.library.edit.process.command.ContributeToActivityCommand; |
| import org.eclipse.epf.library.edit.process.command.LocallyReplaceAndDeepCopyCommand; |
| import org.eclipse.epf.library.edit.process.command.ReplaceActivityCommand; |
| import org.eclipse.epf.library.edit.ui.IActionTypeProvider; |
| import org.eclipse.epf.library.edit.ui.UserInteractionHelper; |
| import org.eclipse.epf.library.edit.util.ConfigurableComposedAdapterFactory; |
| import org.eclipse.epf.library.edit.util.EditingDomainComposedAdapterFactory; |
| import org.eclipse.epf.library.edit.util.ExposedAdapterFactory; |
| import org.eclipse.epf.library.edit.util.IDiagramManager; |
| import org.eclipse.epf.library.edit.util.ProcessUtil; |
| import org.eclipse.epf.library.edit.util.Suppression; |
| import org.eclipse.epf.library.edit.util.TngUtil; |
| import org.eclipse.epf.library.edit.util.Suppression.SuppressionCommand; |
| import org.eclipse.epf.library.edit.validation.DependencyChecker; |
| import org.eclipse.epf.library.events.ILibraryChangeListener; |
| import org.eclipse.epf.library.prefs.PreferenceUtil; |
| import org.eclipse.epf.library.ui.LibraryUIImages; |
| import org.eclipse.epf.library.ui.actions.LibraryLockingOperationRunner; |
| import org.eclipse.epf.library.ui.actions.ProcessDeleteAction; |
| import org.eclipse.epf.library.util.ResourceUtil; |
| import org.eclipse.epf.persistence.FileManager; |
| import org.eclipse.epf.persistence.MultiFileXMIResourceImpl; |
| import org.eclipse.epf.persistence.refresh.RefreshJob; |
| import org.eclipse.epf.uma.Activity; |
| import org.eclipse.epf.uma.BreakdownElement; |
| import org.eclipse.epf.uma.CapabilityPattern; |
| import org.eclipse.epf.uma.DeliveryProcess; |
| import org.eclipse.epf.uma.Descriptor; |
| import org.eclipse.epf.uma.Diagram; |
| import org.eclipse.epf.uma.MethodConfiguration; |
| import org.eclipse.epf.uma.MethodElement; |
| import org.eclipse.epf.uma.MethodLibrary; |
| import org.eclipse.epf.uma.Milestone; |
| import org.eclipse.epf.uma.Process; |
| import org.eclipse.epf.uma.ProcessComponent; |
| import org.eclipse.epf.uma.RoleDescriptor; |
| import org.eclipse.epf.uma.TaskDescriptor; |
| import org.eclipse.epf.uma.UmaPackage; |
| import org.eclipse.epf.uma.VariabilityElement; |
| import org.eclipse.epf.uma.VariabilityType; |
| import org.eclipse.epf.uma.WorkBreakdownElement; |
| import org.eclipse.epf.uma.WorkProductDescriptor; |
| import org.eclipse.epf.uma.edit.domain.TraceableAdapterFactoryEditingDomain; |
| import org.eclipse.epf.uma.util.UmaUtil; |
| import org.eclipse.epf.validation.LibraryEValidator; |
| import org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint; |
| import org.eclipse.jface.action.Action; |
| import org.eclipse.jface.action.IAction; |
| import org.eclipse.jface.action.IMenuListener; |
| import org.eclipse.jface.action.IMenuManager; |
| import org.eclipse.jface.action.IToolBarManager; |
| import org.eclipse.jface.action.MenuManager; |
| import org.eclipse.jface.action.Separator; |
| import org.eclipse.jface.dialogs.Dialog; |
| import org.eclipse.jface.operation.IRunnableWithProgress; |
| import org.eclipse.jface.preference.IPreferenceStore; |
| import org.eclipse.jface.util.IPropertyChangeListener; |
| import org.eclipse.jface.util.PropertyChangeEvent; |
| import org.eclipse.jface.viewers.AbstractTreeViewer; |
| import org.eclipse.jface.viewers.ArrayContentProvider; |
| import org.eclipse.jface.viewers.IContentProvider; |
| import org.eclipse.jface.viewers.ILabelProvider; |
| import org.eclipse.jface.viewers.ISelection; |
| import org.eclipse.jface.viewers.ISelectionChangedListener; |
| import org.eclipse.jface.viewers.ISelectionProvider; |
| import org.eclipse.jface.viewers.IStructuredContentProvider; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jface.viewers.SelectionChangedEvent; |
| import org.eclipse.jface.viewers.StructuredSelection; |
| import org.eclipse.jface.viewers.StructuredViewer; |
| import org.eclipse.jface.viewers.TreeViewer; |
| import org.eclipse.jface.viewers.Viewer; |
| import org.eclipse.swt.custom.BusyIndicator; |
| import org.eclipse.swt.dnd.DND; |
| import org.eclipse.swt.dnd.DropTargetEvent; |
| import org.eclipse.swt.dnd.Transfer; |
| import org.eclipse.swt.graphics.Image; |
| import org.eclipse.swt.graphics.Point; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.swt.widgets.Menu; |
| import org.eclipse.swt.widgets.Widget; |
| import org.eclipse.ui.IActionBars; |
| import org.eclipse.ui.IEditorInput; |
| import org.eclipse.ui.IEditorPart; |
| import org.eclipse.ui.IEditorReference; |
| import org.eclipse.ui.IEditorSite; |
| import org.eclipse.ui.IPartListener; |
| import org.eclipse.ui.IViewSite; |
| import org.eclipse.ui.IWorkbenchActionConstants; |
| import org.eclipse.ui.IWorkbenchPart; |
| import org.eclipse.ui.PartInitException; |
| import org.eclipse.ui.actions.ActionFactory; |
| import org.eclipse.ui.actions.BaseSelectionListenerAction; |
| import org.eclipse.ui.dialogs.ListSelectionDialog; |
| import org.eclipse.ui.forms.editor.IFormPage; |
| import org.eclipse.ui.ide.IGotoMarker; |
| import org.eclipse.ui.views.properties.IPropertySheetPage; |
| import org.eclipse.ui.views.properties.PropertySheet; |
| import org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor; |
| |
| import com.ibm.icu.util.StringTokenizer; |
| |
| /** |
| * Editor for process authoring. |
| * |
| * @author Phong Nguyen Le |
| * @author Shilpa Toraskar |
| * @author Jinhua Xi |
| * @since 1.0 |
| */ |
| public class ProcessEditor extends MethodElementEditor implements |
| IEditingDomainProvider, IMenuListener, ISelectionProvider, |
| IViewerProvider, ITabbedPropertySheetPageContributor { |
| |
| /** |
| * The editor ID. |
| */ |
| public static final String EDITOR_ID = ProcessEditor.class.getName(); |
| |
| public static final String WORKFLOW_EDITOR_ID = GraphicalWorkflowEditor.class |
| .getName(); |
| |
| public static final String ACTIVITY_DETAIL_DIAGRAM_EDITOR_ID = ActivityDetailDiagramEditor.class |
| .getName(); |
| |
| public static final String WPDEPENDENCY_EDITOR_ID = GraphicalWPDependencyEditor.class |
| .getName(); |
| |
| /** Column descriptor constants */ |
| public static final ColumnDescriptor COL_DESC_NAME = new ColumnDescriptor( |
| IBSItemProvider.COL_NAME, ProcessUtil.getColumnDisplayName(IBSItemProvider.COL_NAME), |
| 3, 200, true, ColumnDescriptor.CELL_EDITOR_TYPE_TEXT); |
| |
| public static final ColumnDescriptor COL_DESC_ID = new ColumnDescriptor( |
| IBSItemProvider.COL_ID, ProcessUtil.getColumnDisplayName(IBSItemProvider.COL_ID), |
| 0, 40, true, ColumnDescriptor.CELL_EDITOR_TYPE_NONE); |
| |
| public static final ColumnDescriptor COL_DESC_PREFIX = new ColumnDescriptor( |
| IBSItemProvider.COL_PREFIX, |
| ProcessUtil.getColumnDisplayName(IBSItemProvider.COL_PREFIX), 0, 80, true, |
| ColumnDescriptor.CELL_EDITOR_TYPE_TEXT); |
| |
| public static final ColumnDescriptor COL_DESC_MODEL_INFO = new ColumnDescriptor( |
| IBSItemProvider.COL_MODEL_INFO, |
| ProcessUtil.getColumnDisplayName(IBSItemProvider.COL_MODEL_INFO), 0, 120, true, |
| ColumnDescriptor.CELL_EDITOR_TYPE_NONE); |
| |
| public static final ColumnDescriptor COL_DESC_TYPE = new ColumnDescriptor( |
| IBSItemProvider.COL_TYPE, ProcessUtil.getColumnDisplayName(IBSItemProvider.COL_TYPE), |
| 0, 80, true, ColumnDescriptor.CELL_EDITOR_TYPE_NONE); |
| |
| public static final ColumnDescriptor COL_DESC_PREDECESSORS = new ColumnDescriptor( |
| IBSItemProvider.COL_PREDECESSORS, |
| ProcessUtil.getColumnDisplayName(IBSItemProvider.COL_PREDECESSORS), 2, 100, true, |
| ColumnDescriptor.CELL_EDITOR_TYPE_TEXT); |
| |
| public static final ColumnDescriptor COL_DESC_IS_REPEATABLE = new ColumnDescriptor( |
| IBSItemProvider.COL_IS_REPEATABLE, |
| ProcessUtil.getColumnDisplayName(IBSItemProvider.COL_IS_REPEATABLE), 1, 60, true, |
| ColumnDescriptor.CELL_EDITOR_TYPE_CHECK_BOOLEAN); |
| |
| public static final ColumnDescriptor COL_DESC_IS_ONGOING = new ColumnDescriptor( |
| IBSItemProvider.COL_IS_ONGOING, |
| ProcessUtil.getColumnDisplayName(IBSItemProvider.COL_IS_ONGOING), 1, 60, true, |
| ColumnDescriptor.CELL_EDITOR_TYPE_CHECK_BOOLEAN); |
| |
| public static final ColumnDescriptor COL_DESC_IS_EVENT_DRIVEN = new ColumnDescriptor( |
| IBSItemProvider.COL_IS_EVENT_DRIVEN, |
| ProcessUtil.getColumnDisplayName(IBSItemProvider.COL_IS_EVENT_DRIVEN), 1, 60, true, |
| ColumnDescriptor.CELL_EDITOR_TYPE_CHECK_BOOLEAN); |
| |
| public static final ColumnDescriptor COL_DESC_TEAM = new ColumnDescriptor( |
| IBSItemProvider.COL_TEAMS, ProcessUtil.getColumnDisplayName(IBSItemProvider.COL_TEAMS), |
| 1, 100, true, ColumnDescriptor.CELL_EDITOR_TYPE_TEXT); |
| |
| public static final ColumnDescriptor COL_DESC_ENTRY_STATE = new ColumnDescriptor( |
| IBSItemProvider.COL_ENTRY_STATE, |
| ProcessUtil.getColumnDisplayName(IBSItemProvider.COL_ENTRY_STATE), 1, 60, true, |
| ColumnDescriptor.CELL_EDITOR_TYPE_TEXT); |
| |
| public static final ColumnDescriptor COL_DESC_EXIT_STATE = new ColumnDescriptor( |
| IBSItemProvider.COL_EXIT_STATE, |
| ProcessUtil.getColumnDisplayName(IBSItemProvider.COL_EXIT_STATE), 1, 60, true, |
| ColumnDescriptor.CELL_EDITOR_TYPE_TEXT); |
| |
| public static final ColumnDescriptor COL_DESC_PRESENTATION_NAME = new ColumnDescriptor( |
| IBSItemProvider.COL_PRESENTATION_NAME, |
| ProcessUtil.getColumnDisplayName(IBSItemProvider.COL_PRESENTATION_NAME), 3, 200, true, |
| ColumnDescriptor.CELL_EDITOR_TYPE_TEXT); |
| |
| public static final ColumnDescriptor COL_DESC_DELIVERABLE = new ColumnDescriptor( |
| IBSItemProvider.COL_DELIVERABLE, |
| ProcessUtil.getColumnDisplayName(IBSItemProvider.COL_DELIVERABLE), 1, 100, true, |
| ColumnDescriptor.CELL_EDITOR_TYPE_TEXT); |
| |
| public static final ColumnDescriptor COL_DESC_IS_OPTIONAL = new ColumnDescriptor( |
| IBSItemProvider.COL_IS_OPTIONAL, |
| ProcessUtil.getColumnDisplayName(IBSItemProvider.COL_IS_OPTIONAL), 1, 60, true, |
| ColumnDescriptor.CELL_EDITOR_TYPE_CHECK_BOOLEAN); |
| |
| public static final ColumnDescriptor COL_DESC_IS_PLANNED = new ColumnDescriptor( |
| IBSItemProvider.COL_IS_PLANNED, |
| ProcessUtil.getColumnDisplayName(IBSItemProvider.COL_IS_PLANNED), 1, 60, true, |
| ColumnDescriptor.CELL_EDITOR_TYPE_CHECK_BOOLEAN); |
| |
| public static final ColumnDescriptor COL_DESC_HAS_MULTIPLE_OCCURRENCES = new ColumnDescriptor( |
| IBSItemProvider.COL_HAS_MULTIPLE_OCCURRENCES, |
| ProcessUtil.getColumnDisplayName(IBSItemProvider.COL_HAS_MULTIPLE_OCCURRENCES), 1, 60, |
| true, ColumnDescriptor.CELL_EDITOR_TYPE_CHECK_BOOLEAN); |
| |
| public static final String WBS_FORM_ID = "wbs"; //$NON-NLS-1$ |
| |
| public static final String TA_FORM_ID = "tbs"; //$NON-NLS-1$ |
| |
| public static final String WPBS_FORM_ID = "wpbs"; //$NON-NLS-1$ |
| |
| public static final String CONSOLIDATED_FORM_ID = "consolidated"; //$NON-NLS-1$ |
| |
| // change the default order based on 152867 - Publish option and prefrences |
| /* WBS: Presentation Name, Index, Predecessors, Model Info, Type, Planned, |
| Repeatable, Multiple Occurrences, Ongoing, Event-driven, Optional |
| TA: Presentation Name, Model Info, Team, Type, Planned, Multiple |
| Occurrences, Optional |
| Work Product Usage: Presentation Name, Model Info, Entry State, Exit State, |
| Deliverable, Type, Planned, Multiple Occurrences, Optional |
| */ |
| // Jinhua Xi, 08/21/2006 |
| |
| // the default list must be available in the library plugin as well. |
| // duplicate definition for now, will need to merge together later |
| // see PreferenceConstants.org.eclipse.epf.library.prefs |
| |
| public static final List DEFAULT_TBS_COLUMNS = Arrays |
| .asList(new ColumnDescriptor[] { |
| COL_DESC_PRESENTATION_NAME, |
| // COL_DESC_ID, |
| //COL_DESC_PREFIX, |
| COL_DESC_MODEL_INFO, COL_DESC_TEAM, COL_DESC_TYPE, |
| COL_DESC_IS_PLANNED, |
| COL_DESC_HAS_MULTIPLE_OCCURRENCES, COL_DESC_IS_OPTIONAL }); |
| |
| public static final List DEFAULT_WPBS_COLUMNS = Arrays |
| .asList(new ColumnDescriptor[] { |
| COL_DESC_PRESENTATION_NAME, |
| // COL_DESC_ID, |
| //COL_DESC_PREFIX, |
| COL_DESC_MODEL_INFO, COL_DESC_ENTRY_STATE, |
| COL_DESC_EXIT_STATE, |
| COL_DESC_DELIVERABLE, COL_DESC_TYPE, |
| COL_DESC_IS_PLANNED, COL_DESC_HAS_MULTIPLE_OCCURRENCES, COL_DESC_IS_OPTIONAL }); |
| |
| public static final List DEFAULT_WBS_COLUMNS = Arrays |
| .asList(new ColumnDescriptor[] { COL_DESC_PRESENTATION_NAME, |
| COL_DESC_ID, |
| //COL_DESC_PREFIX, |
| COL_DESC_PREDECESSORS, COL_DESC_MODEL_INFO, |
| COL_DESC_TYPE, COL_DESC_IS_PLANNED, |
| COL_DESC_IS_REPEATABLE, COL_DESC_HAS_MULTIPLE_OCCURRENCES, COL_DESC_IS_ONGOING, |
| COL_DESC_IS_EVENT_DRIVEN, COL_DESC_IS_OPTIONAL |
| }); |
| |
| |
| public static final List ALL_WBS_COLUMNS = new ArrayList( |
| DEFAULT_WBS_COLUMNS); |
| |
| public static final List ALL_TBS_COLUMNS = new ArrayList( |
| DEFAULT_TBS_COLUMNS); |
| |
| public static final List ALL_WPBS_COLUMNS = new ArrayList( |
| DEFAULT_WPBS_COLUMNS); |
| |
| public static final Map idToColumnDescriptorMap = new HashMap(); |
| static { |
| ALL_WBS_COLUMNS.add(COL_DESC_PREFIX); |
| ALL_TBS_COLUMNS.add(COL_DESC_PREFIX); |
| ALL_WPBS_COLUMNS.add(COL_DESC_PREFIX); |
| |
| ProcessEditor.idToColumnDescriptorMap.put(COL_DESC_NAME.id, |
| COL_DESC_NAME); |
| ProcessEditor.idToColumnDescriptorMap.put(COL_DESC_ID.id, COL_DESC_ID); |
| ProcessEditor.idToColumnDescriptorMap.put(COL_DESC_PREFIX.id, |
| COL_DESC_PREFIX); |
| ProcessEditor.idToColumnDescriptorMap.put(COL_DESC_MODEL_INFO.id, |
| COL_DESC_MODEL_INFO); |
| ProcessEditor.idToColumnDescriptorMap.put(COL_DESC_TYPE.id, |
| COL_DESC_TYPE); |
| ProcessEditor.idToColumnDescriptorMap.put(COL_DESC_PREDECESSORS.id, |
| COL_DESC_PREDECESSORS); |
| ProcessEditor.idToColumnDescriptorMap.put(COL_DESC_IS_REPEATABLE.id, |
| COL_DESC_IS_REPEATABLE); |
| ProcessEditor.idToColumnDescriptorMap.put(COL_DESC_IS_ONGOING.id, |
| COL_DESC_IS_ONGOING); |
| ProcessEditor.idToColumnDescriptorMap.put(COL_DESC_IS_EVENT_DRIVEN.id, |
| COL_DESC_IS_EVENT_DRIVEN); |
| ProcessEditor.idToColumnDescriptorMap.put(COL_DESC_TEAM.id, |
| COL_DESC_TEAM); |
| ProcessEditor.idToColumnDescriptorMap.put(COL_DESC_ENTRY_STATE.id, |
| COL_DESC_ENTRY_STATE); |
| ProcessEditor.idToColumnDescriptorMap.put(COL_DESC_EXIT_STATE.id, |
| COL_DESC_EXIT_STATE); |
| ProcessEditor.idToColumnDescriptorMap.put( |
| COL_DESC_PRESENTATION_NAME.id, COL_DESC_PRESENTATION_NAME); |
| ProcessEditor.idToColumnDescriptorMap.put(COL_DESC_DELIVERABLE.id, |
| COL_DESC_DELIVERABLE); |
| ProcessEditor.idToColumnDescriptorMap.put(COL_DESC_IS_OPTIONAL.id, |
| COL_DESC_IS_OPTIONAL); |
| ProcessEditor.idToColumnDescriptorMap.put(COL_DESC_IS_PLANNED.id, |
| COL_DESC_IS_PLANNED); |
| ProcessEditor.idToColumnDescriptorMap.put( |
| COL_DESC_HAS_MULTIPLE_OCCURRENCES.id, |
| COL_DESC_HAS_MULTIPLE_OCCURRENCES); |
| |
| ALL_WBS_COLUMNS.add(COL_DESC_NAME); |
| ALL_TBS_COLUMNS.add(COL_DESC_NAME); |
| ALL_WPBS_COLUMNS.add(COL_DESC_NAME); |
| } |
| |
| private static boolean addAdapterFactoryListeners = false; |
| |
| /** |
| * Action bar contribtutor for process editor |
| * |
| * |
| */ |
| public static class BSActionBarContributor extends |
| MethodLibraryActionBarContributor { |
| private Collection registeredActions = new ArrayList(); |
| |
| private boolean locked; |
| |
| private IAction rollupAction = new Action( |
| AuthoringUIResources.ProcessEditor_Action_RollUp) { |
| |
| public void run() { |
| boolean wasRolledUp = bsItemProvider.isRolledUp(); |
| bsItemProvider.setRolledUp(!bsItemProvider.isRolledUp()); |
| ((IChangeNotifier) bsItemProvider) |
| .fireNotifyChanged(new ViewerNotification( |
| new ENotificationImpl( |
| (InternalEObject) selectedActivity, |
| Notification.ADD, null, null, null, |
| false), selectedActivity, true, false)); |
| |
| if (bsItemProvider instanceof DelegatingWrapperItemProvider) { |
| // Refreshing for green activities during rollup |
| DelegatingWrapperItemProvider provider = (DelegatingWrapperItemProvider) bsItemProvider; |
| provider.fireNotifyChanged(new ViewerNotification( |
| new NotificationImpl(Notification.SET, provider, |
| provider), provider, true, false)); |
| } |
| if (wasRolledUp) { |
| ProcessViewer viewer = (ProcessViewer) ((ProcessEditor) activeEditor).currentViewer; |
| viewer.expandToLevel(selectedActivity, |
| AbstractTreeViewer.ALL_LEVELS); |
| |
| // eventhough we switched off creating new activities in |
| // WBS, |
| // user can still create thru AD. Hence we need to update |
| // IDs |
| // afterwards |
| doRefresh(); |
| } |
| } |
| |
| }; |
| |
| private IAction moveUpAction = new Action( |
| AuthoringUIResources.ProcessEditor_Action_MoveUp, |
| AuthoringUIPlugin.getDefault().getImageDescriptor( |
| "full/etool16/move_up.gif")) { //$NON-NLS-1$ |
| public void run() { |
| bsItemProvider.moveUp(selectedBreakdownElement, |
| getActionManager()); |
| refreshMoveButtonActions(); |
| } |
| }; |
| |
| private IAction moveDownAction = new Action( |
| AuthoringUIResources.ProcessEditor_Action_MoveDown, |
| AuthoringUIPlugin.getDefault().getImageDescriptor( |
| "full/etool16/move_down.gif")) { //$NON-NLS-1$ |
| public void run() { |
| bsItemProvider.moveDown(selectedBreakdownElement, |
| getActionManager()); |
| refreshMoveButtonActions(); |
| } |
| }; |
| |
| private IAction preferenceAction = new Action( |
| AuthoringUIResources.ProcessEditor_Action_Preferences) { |
| public void run() { |
| // open process preference page |
| org.eclipse.ui.dialogs.PreferencesUtil |
| .createPreferenceDialogOn( |
| getActiveEditor().getEditorSite().getShell(), |
| "org.eclipse.epf.authoring.ui.preferences.ProcessEditorPreferencePage", //$NON-NLS-1$ |
| null, null).open(); |
| } |
| }; |
| |
| |
| private IAction openBaseActivity = new Action( |
| AuthoringUIResources.ProcessEditor_Action_OpenBaseActivity) { |
| public void run() { |
| VariabilityElement base = selectedActivity |
| .getVariabilityBasedOnElement(); |
| Process proc = TngUtil |
| .getOwningProcess((BreakdownElement) base); |
| try { |
| int id = ((ProcessEditor) activeEditor).getActivePage(); |
| ISelection selection = new StructuredSelection(base); |
| |
| // ProcessEditorInput input = new ProcessEditorInput( |
| // (MethodElement) proc.eContainer()); |
| // input.setInitialSelection(selection); |
| // input.setActivePage(id); |
| // |
| // ProcessEditor editor = (ProcessEditor) |
| // getPage().findEditor(input); |
| // if(editor != null) { |
| // // select the base activity after the editor is opened |
| // // |
| // Viewer viewer = editor.bsPages[id].getViewer(); |
| // getPage().activate(editor); |
| // editor.setActivePage(id); |
| // viewer.setSelection(selection, true); |
| // } |
| // else { |
| // editor = (ProcessEditor) getPage().openEditor(input, |
| // EDITOR_ID); |
| // } |
| |
| IEditorInput input = new MethodElementEditorInput( |
| (MethodElement) proc.eContainer()); |
| ProcessEditor editor = (ProcessEditor) getPage() |
| .openEditor(input, EDITOR_ID); |
| editor.setActivePage(id); |
| editor.bsPages[id - 1].getViewer().setSelection(selection, |
| true); |
| } catch (PartInitException e) { |
| AuthoringUIPlugin.getDefault().getLogger().logError(e); |
| } |
| } |
| }; |
| |
| private IAction openWorkflowEditorAction = new Action( |
| AuthoringUIResources.ProcessEditor_Action_OpenActivityDiagram) { |
| public void run() { |
| try { |
| try { |
| IEditorPart parent = getPage().getActiveEditor(); |
| IEditorInput input = new GraphicalWorkflowEditor.EditorInput( |
| selectedObject, getSuppression()); |
| IEditorPart part = getPage().openEditor(input, |
| WORKFLOW_EDITOR_ID); |
| if (part instanceof AbstractDiagramEditor) { |
| AbstractDiagramEditor editor = (AbstractDiagramEditor) part; |
| editor.setParentEditor(parent); |
| } |
| } catch (PartInitException exception) { |
| AuthoringUIPlugin.getDefault().getLogger().logError( |
| exception); |
| } |
| } catch (RuntimeException e) { |
| AuthoringUIPlugin.getDefault().getLogger().logError(e); |
| } |
| } |
| }; |
| private IAction newActivityDiagramEditor = new Action(AuthoringUIResources. |
| ProcessEditor_Action_OpenActivityDiagram |
| ) { |
| public void run() { |
| openDiagram(IDiagramManager.ACTIVITY_DIAGRAM); |
| } |
| }; |
| |
| private IAction newActivityDetailDiagramEditor = new Action( |
| AuthoringUIResources.ProcessEditor_Action_OpenActivityDetailDiagram) { |
| public void run() { |
| openDiagram(IDiagramManager.ACTIVITY_DETAIL_DIAGRAM); |
| } |
| }; |
| |
| private IAction newWPDiagramEditor = new Action( |
| AuthoringUIResources.ProcessEditor_Action_OpenWorkProductDependencyDiagram) { |
| public void run() { |
| openDiagram(IDiagramManager.WORK_PRODUCT_DEPENDENCY_DIAGRAM); |
| } |
| }; |
| |
| // Open workflow detail action |
| // |
| private IAction openWorkflowDetailEditorAction = new Action( |
| AuthoringUIResources.ProcessEditor_Action_OpenActivityDetailDiagram) { |
| public void run() { |
| try { |
| try { |
| IEditorPart parent = getPage().getActiveEditor(); |
| IEditorInput input = new ActivityDetailDiagramEditor.EditorInput( |
| selectedObject, getSuppression()); |
| IEditorPart part = getPage().openEditor(input, |
| ACTIVITY_DETAIL_DIAGRAM_EDITOR_ID); |
| if (part instanceof AbstractDiagramEditor) { |
| AbstractDiagramEditor editor = (AbstractDiagramEditor) part; |
| editor.setParentEditor(parent); |
| } |
| } catch (PartInitException exception) { |
| exception.printStackTrace(); |
| } |
| } catch (RuntimeException e) { |
| e.printStackTrace(); |
| } |
| |
| } |
| }; |
| |
| private IAction openWPDependencyEditorAction = new Action( |
| AuthoringUIResources.ProcessEditor_Action_OpenWorkProductDependencyDiagram) { |
| public void run() { |
| try { |
| try { |
| IEditorPart parent = getPage().getActiveEditor(); |
| MethodElementEditorInput input = new BreakdownElementEditorInput( |
| selectedObject, getSuppression()) { |
| }; |
| IEditorPart part = getPage().openEditor(input, |
| WPDEPENDENCY_EDITOR_ID); |
| if (part instanceof AbstractDiagramEditor) { |
| AbstractDiagramEditor editor = (AbstractDiagramEditor) part; |
| editor.setParentEditor(parent); |
| } |
| } catch (PartInitException exception) { |
| exception.printStackTrace(); |
| } |
| } catch (RuntimeException e) { |
| e.printStackTrace(); |
| } |
| } |
| }; |
| |
| private IAction replaceAction = new Action( |
| AuthoringUIResources.ProcessEditor_Action_Replace) { |
| public void run() { |
| IResourceAwareCommand cmd = null; |
| try { |
| cmd = new ReplaceActivityCommand( |
| (BreakdownElementWrapperItemProvider) bsItemProvider); |
| getActionManager().execute(cmd); |
| } catch (Exception e) { |
| AuthoringUIPlugin.getDefault().getLogger().logError(e); |
| } finally { |
| if (cmd != null) { |
| try { |
| cmd.dispose(); |
| } catch (Exception e) { |
| AuthoringUIPlugin.getDefault().getLogger() |
| .logError(e); |
| } |
| } |
| } |
| } |
| }; |
| |
| private IAction localReplacementAndDeepCopy = new Action( |
| LibraryEditResources.localReplacementAndDeepCopy_text) { |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jface.action.Action#run() |
| */ |
| public void run() { |
| Runnable runnable = new Runnable() { |
| |
| public void run() { |
| IResourceAwareCommand cmd = null; |
| try { |
| cmd = new LocallyReplaceAndDeepCopyCommand( |
| (BreakdownElementWrapperItemProvider) bsItemProvider); |
| getActionManager().execute(cmd); |
| } catch (Exception e) { |
| AuthoringUIPlugin.getDefault().getLogger() |
| .logError(e); |
| } finally { |
| if (cmd != null) { |
| try { |
| cmd.dispose(); |
| } catch (Exception e) { |
| AuthoringUIPlugin.getDefault().getLogger() |
| .logError(e); |
| } |
| } |
| } |
| } |
| |
| }; |
| |
| UserInteractionHelper.runInUI(runnable, getText()); |
| } |
| }; |
| |
| private IAction contributeAction = new Action( |
| AuthoringUIResources.ProcessEditor_Action_Contribute) { |
| public void run() { |
| IResourceAwareCommand cmd = null; |
| try { |
| cmd = new ContributeToActivityCommand( |
| (BreakdownElementWrapperItemProvider) bsItemProvider); |
| getActionManager().execute(cmd); |
| // ProcessUtil.contributeToActivity((BreakdownElementWrapperItemProvider)bsItemProvider, |
| // ((ProcessFormEditor)activeEditor).editingDomain.getAdapterFactory()); |
| } catch (Exception e) { |
| AuthoringUIPlugin.getDefault().getLogger().logError(e); |
| } finally { |
| if (cmd != null) { |
| try { |
| cmd.dispose(); |
| } catch (Exception e) { |
| AuthoringUIPlugin.getDefault().getLogger() |
| .logError(e); |
| } |
| } |
| } |
| } |
| }; |
| |
| private class EditorSuppressionCommand extends SuppressionCommand { |
| EditorSuppressionCommand(Suppression suppression, List selection, |
| boolean suppressed) { |
| super(suppression, selection, suppressed); |
| } |
| |
| private void refresh() { |
| if (!getResult().isEmpty()) { |
| ProcessEditor editor = (ProcessEditor) getActiveEditor(); |
| if (isReadOnlyElementAffected()) { |
| if (hasInherited(selection)) { |
| editor.refreshAllProcessEditors(); |
| } else { |
| editor.doRefreshAll(false); |
| } |
| } |
| editor.firePropertyChange(PROP_DIRTY); |
| |
| // Do Diagram Editors refresh |
| List list = new ArrayList(); |
| for (Iterator iter = selection.iterator(); iter.hasNext();) { |
| Object element = iter.next(); |
| UIHelper.closeDiagramEditors(element, list); |
| UIHelper.refreshOpenDiagramEditorsOfParent(element, list); |
| list.clear(); |
| } |
| } |
| } |
| |
| /** |
| * @see org.eclipse.epf.library.edit.util.Suppression.SuppressionCommand#didExecute() |
| */ |
| protected void didExecute() { |
| refresh(); |
| } |
| |
| /** |
| * @see org.eclipse.epf.library.edit.util.Suppression.SuppressionCommand#didUndo() |
| */ |
| protected void didUndo() { |
| refresh(); |
| } |
| |
| } |
| |
| private IAction suppressTaskAction = new Action( |
| AuthoringUIResources.ProcessEditor_Action_Suppress_Task) { |
| |
| public void run() { |
| // check if suppressing the selected elements will cause |
| // duplicate descriptors. |
| // If so, prompt user to delete the duplicates before |
| // continuing. |
| // |
| |
| final List taskDescriptors = ProcessUtil.getTaskDescriptors(selection); |
| Collection duplicates = ProcessUtil |
| .getDuplicateDescriptorsAfterSuppress(taskDescriptors); |
| if (!duplicates.isEmpty()) { |
| MultiStatus status = new MultiStatus(AuthoringUIPlugin |
| .getDefault().getId(), 0, "", null); //$NON-NLS-1$ |
| for (Iterator iter = duplicates.iterator(); iter.hasNext();) { |
| Descriptor desc = (Descriptor) iter.next(); |
| String descTxt = TngUtil.getTypeText(desc) |
| + ": " + desc.getPresentationName(); //$NON-NLS-1$ |
| status.add(new Status(IStatus.INFO, AuthoringUIPlugin |
| .getDefault().getId(), 0, descTxt, null)); |
| } |
| if (AuthoringUIPlugin |
| .getDefault() |
| .getMsgDialog() |
| .displayConfirmation( |
| getText(), |
| AuthoringUIResources.ProcessEditor_promptToDeleteBeforeSuppress, |
| status) == Dialog.CANCEL) { |
| return; |
| } |
| |
| // delete duplicate descriptors |
| Command cmd = null; |
| try { |
| cmd = ProcessDeleteAction.delete(duplicates); |
| } catch (OperationCanceledException e) { |
| return; |
| } |
| finally { |
| if(cmd != null) |
| try { cmd.dispose(); } catch(Exception e) {} |
| } |
| } |
| |
| BusyIndicator.showWhile(getActiveEditor().getEditorSite() |
| .getShell().getDisplay(), new Runnable() { |
| |
| public void run() { |
| EditorSuppressionCommand cmd = new EditorSuppressionCommand( |
| getSuppression(), taskDescriptors, true); |
| cmd.setLabel(getText()); |
| getActionManager().execute(cmd); |
| } |
| }); |
| |
| boolean show = true; |
| // update context bar menu after performing suppress |
| if (getAdapterFactory() == TngAdapterFactory.INSTANCE |
| .getWBS_ComposedAdapterFactory()) { |
| for (int i = 0; i < selection.size(); i++) { |
| if (!(selection.get(i) instanceof Activity || selection |
| .get(i) instanceof ActivityWrapperItemProvider)) |
| show = false; |
| } |
| } else |
| show = false; |
| |
| revealTaskAction.setEnabled(show); |
| suppressTaskAction.setEnabled(show); |
| |
| // enable synchronize actions correctly |
| autoSynchronize.setEnabled(autoSynchronize |
| .updateSelection(new StructuredSelection(selection |
| .toArray()))); |
| manualSynchronizeAction.setEnabled(manualSynchronizeAction |
| .updateSelection(new StructuredSelection(selection |
| .toArray()))); |
| } |
| }; |
| |
| private IAction suppressAction = new Action( |
| AuthoringUIResources.ProcessEditor_Action_Suppress) { |
| |
| public void run() { |
| // check if suppressing the selected elements will cause |
| // duplicate descriptors. |
| // If so, prompt user to delete the duplicates before |
| // continuing. |
| // |
| Collection duplicates = ProcessUtil |
| .getDuplicateDescriptorsAfterSuppress(selection); |
| if (!duplicates.isEmpty()) { |
| MultiStatus status = new MultiStatus(AuthoringUIPlugin |
| .getDefault().getId(), 0, "", null); //$NON-NLS-1$ |
| for (Iterator iter = duplicates.iterator(); iter.hasNext();) { |
| Descriptor desc = (Descriptor) iter.next(); |
| String descTxt = TngUtil.getTypeText(desc) |
| + ": " + desc.getPresentationName(); //$NON-NLS-1$ |
| status.add(new Status(IStatus.INFO, AuthoringUIPlugin |
| .getDefault().getId(), 0, descTxt, null)); |
| } |
| if (AuthoringUIPlugin |
| .getDefault() |
| .getMsgDialog() |
| .displayConfirmation( |
| getText(), |
| AuthoringUIResources.ProcessEditor_promptToDeleteBeforeSuppress, |
| status) == Dialog.CANCEL) { |
| return; |
| } |
| |
| // delete duplicate descriptors |
| Command cmd = null; |
| try { |
| cmd = ProcessDeleteAction.delete(duplicates); |
| } catch (OperationCanceledException e) { |
| return; |
| } |
| finally { |
| if(cmd != null) |
| try { cmd.dispose(); } catch(Exception e) {} |
| } |
| } |
| |
| // final ProcessEditor editor = (ProcessEditor) |
| // getActiveEditor(); |
| |
| BusyIndicator.showWhile(getActiveEditor().getEditorSite() |
| .getShell().getDisplay(), new Runnable() { |
| |
| public void run() { |
| // if (getSuppression().suppress(selection)) { |
| // if (hasInherited(selection)) { |
| // editor.refreshAllProcessEditors(); |
| // } else { |
| // editor.doRefreshAll(false); |
| // } |
| // } |
| // editor.firePropertyChange(PROP_DIRTY); |
| |
| EditorSuppressionCommand cmd = new EditorSuppressionCommand( |
| getSuppression(), selection, true); |
| cmd.setLabel(getText()); |
| getActionManager().execute(cmd); |
| } |
| |
| }); |
| |
| // update context bar menu after performing suppress |
| revealAction.setEnabled(getSuppression().canReveal(selection)); |
| suppressAction.setEnabled(getSuppression().canSuppress( |
| selection)); |
| |
| // enable synchronize actions correctly |
| autoSynchronize.setEnabled(autoSynchronize |
| .updateSelection(new StructuredSelection(selection |
| .toArray()))); |
| manualSynchronizeAction.setEnabled(manualSynchronizeAction |
| .updateSelection(new StructuredSelection(selection |
| .toArray()))); |
| } |
| }; |
| |
| private UpdateSuppressionFromBaseAction updateSuppressionFromBaseAction = new UpdateSuppressionFromBaseAction(); |
| |
| private IAction revealAction = new Action( |
| AuthoringUIResources.ProcessEditor_Action_Reveal) { |
| |
| public void run() { |
| if (canReveal(selection, getAdapterFactory(), getSuppression())) { |
| // final ProcessEditor editor = (ProcessEditor) |
| // getActiveEditor(); |
| |
| BusyIndicator.showWhile(getActiveEditor().getEditorSite() |
| .getShell().getDisplay(), new Runnable() { |
| |
| public void run() { |
| // if (getSuppression().reveal(selection)) { |
| // if (hasInherited(selection)) { |
| // editor.refreshAllProcessEditors(); |
| // } else { |
| // editor.doRefreshAll(false); |
| // } |
| // } |
| // editor.firePropertyChange(PROP_DIRTY); |
| |
| EditorSuppressionCommand cmd = new EditorSuppressionCommand( |
| getSuppression(), selection, false); |
| cmd.setLabel(getText()); |
| getActionManager().execute(cmd); |
| } |
| |
| }); |
| // update context bar menu after performing reveal |
| revealAction.setEnabled(getSuppression().canReveal( |
| selection)); |
| suppressAction.setEnabled(getSuppression().canSuppress( |
| selection)); |
| // enable synchronize actions correctly |
| autoSynchronize.setEnabled(autoSynchronize |
| .updateSelection(new StructuredSelection(selection |
| .toArray()))); |
| manualSynchronizeAction.setEnabled(manualSynchronizeAction |
| .updateSelection(new StructuredSelection(selection |
| .toArray()))); |
| } |
| } |
| }; |
| |
| private IAction revealTaskAction = new Action( |
| AuthoringUIResources.ProcessEditor_Action_Reveal_Task) { |
| |
| public void run() { |
| final List taskDescriptors = ProcessUtil.getTaskDescriptors(selection); |
| if (canReveal(taskDescriptors, getAdapterFactory(), getSuppression())) { |
| |
| BusyIndicator.showWhile(getActiveEditor().getEditorSite() |
| .getShell().getDisplay(), new Runnable() { |
| |
| public void run() { |
| EditorSuppressionCommand cmd = new EditorSuppressionCommand( |
| getSuppression(), taskDescriptors, false); |
| cmd.setLabel(getText()); |
| getActionManager().execute(cmd); |
| } |
| |
| }); |
| |
| // enable synchronize actions correctly |
| autoSynchronize.setEnabled(autoSynchronize |
| .updateSelection(new StructuredSelection(selection |
| .toArray()))); |
| manualSynchronizeAction.setEnabled(manualSynchronizeAction |
| .updateSelection(new StructuredSelection(selection |
| .toArray()))); |
| } |
| } |
| }; |
| |
| private IBSItemProvider bsItemProvider = null; |
| |
| private Object selectedElement = null; |
| |
| private Activity selectedActivity = null; |
| |
| private BreakdownElement selectedBreakdownElement = null; |
| |
| private List selection; |
| |
| private IAction suppressDiagramAction = new Action( |
| AuthoringUIResources.ProcessEditor_Action_Suppress2) { |
| public boolean isEnabled() { |
| if (!super.isEnabled()) { |
| return false; |
| } |
| return !(bsItemProvider instanceof BreakdownElementWrapperItemProvider && ((BreakdownElementWrapperItemProvider) bsItemProvider) |
| .isReadOnly()); |
| } |
| |
| public void run() { |
| if (!promptSaveActiveEditor()) { |
| return; |
| } |
| |
| IStructuredContentProvider contentProvider = new ArrayContentProvider(); |
| |
| ILabelProvider labelProvider = new AdapterFactoryLabelProvider( |
| TngUtil.umaItemProviderAdapterFactory) { |
| public String getColumnText(Object object, int columnIndex) { |
| return GraphicalDataHelper |
| .getDiagramTypeText((Diagram) object); |
| } |
| }; |
| |
| Collection diagrams = GraphicalDataHelper |
| .getDiagrams(selectedActivity); |
| ArrayList unsuppressedDiagrams = new ArrayList(); |
| for (Iterator iter = diagrams.iterator(); iter.hasNext();) { |
| Diagram diagram = (Diagram) iter.next(); |
| if (!diagram.getSuppressed().booleanValue()) { |
| unsuppressedDiagrams.add(diagram); |
| } |
| } |
| |
| ListSelectionDialog dlg = new ListSelectionDialog( |
| activeEditor.getEditorSite().getShell(), |
| diagrams, |
| contentProvider, |
| labelProvider, |
| AuthoringUIResources.ProcessEditor_SuppressDialog_Message); |
| dlg.setInitialElementSelections(unsuppressedDiagrams); |
| dlg |
| .setTitle(AuthoringUIResources.ProcessEditor_SuppressDialog_Title); |
| dlg.setBlockOnOpen(true); |
| dlg.open(); |
| |
| Object[] diagramsToReveal = dlg.getResult(); |
| |
| if (diagramsToReveal == null) { |
| return; |
| } |
| |
| boolean changed = true; |
| |
| // check if there is really any change |
| // |
| if (diagramsToReveal.length == unsuppressedDiagrams.size()) { |
| for (int i = 0; i < diagramsToReveal.length; i++) { |
| if (!unsuppressedDiagrams.contains(diagramsToReveal[i])) { |
| changed = false; |
| break; |
| } |
| } |
| } |
| |
| if (changed) { |
| for (Iterator iter = diagrams.iterator(); iter.hasNext();) { |
| Diagram diagram = (Diagram) iter.next(); |
| diagram.setSuppressed(Boolean.TRUE); |
| } |
| |
| for (int i = 0; i < diagramsToReveal.length; i++) { |
| Diagram diagram = (Diagram) diagramsToReveal[i]; |
| diagram.setSuppressed(Boolean.FALSE); |
| } |
| |
| // save the editor |
| // |
| saveActiveEditor(); |
| } |
| } |
| }; |
| |
| |
| |
| private IAction newSuppressDiagramAction = new Action( |
| AuthoringUIResources.ProcessEditor_Action_Suppress2) { |
| public boolean isEnabled() { |
| if (!super.isEnabled()) { |
| return false; |
| } |
| return !(bsItemProvider instanceof BreakdownElementWrapperItemProvider && ((BreakdownElementWrapperItemProvider) bsItemProvider) |
| .isReadOnly()); |
| } |
| |
| public void run() { |
| if (!promptSaveActiveEditor()) { |
| return; |
| } |
| |
| IStructuredContentProvider contentProvider = new ArrayContentProvider(); |
| |
| ILabelProvider labelProvider = new AdapterFactoryLabelProvider( |
| TngUtil.umaItemProviderAdapterFactory) { |
| public String getColumnText(Object object, int columnIndex) { |
| //TODO: Change to exact string. |
| return DiagramHelper.getDiagramTypeString((org.eclipse.gmf.runtime.notation.Diagram)object); |
| } |
| }; |
| |
| Collection diagrams = DiagramHelper.getDiagrams(selectedActivity); |
| ArrayList unsuppressedDiagrams = new ArrayList(); |
| for (Iterator iter = diagrams.iterator(); iter.hasNext();) { |
| org.eclipse.gmf.runtime.notation.Diagram diagram = (org.eclipse.gmf.runtime.notation.Diagram) iter.next(); |
| |
| //TODO: do get Unsuppressed list. |
| |
| // if (!diagram.getSuppressed().booleanValue()) { |
| // unsuppressedDiagrams.add(diagram); |
| // } |
| } |
| |
| ListSelectionDialog dlg = new ListSelectionDialog( |
| activeEditor.getEditorSite().getShell(), |
| diagrams, |
| contentProvider, |
| labelProvider, |
| AuthoringUIResources.ProcessEditor_SuppressDialog_Message); |
| dlg.setInitialElementSelections(unsuppressedDiagrams); |
| dlg |
| .setTitle(AuthoringUIResources.ProcessEditor_SuppressDialog_Title); |
| dlg.setBlockOnOpen(true); |
| dlg.open(); |
| |
| Object[] diagramsToReveal = dlg.getResult(); |
| |
| if (diagramsToReveal == null) { |
| return; |
| } |
| |
| boolean changed = true; |
| |
| // check if there is really any change |
| // |
| if (diagramsToReveal.length == unsuppressedDiagrams.size()) { |
| for (int i = 0; i < diagramsToReveal.length; i++) { |
| if (!unsuppressedDiagrams.contains(diagramsToReveal[i])) { |
| changed = false; |
| break; |
| } |
| } |
| } |
| |
| if (changed) { |
| for (Iterator iter = diagrams.iterator(); iter.hasNext();) { |
| org.eclipse.gmf.runtime.notation.Diagram diagram = (org.eclipse.gmf.runtime.notation.Diagram) iter.next(); |
| //TODO: set Suppression. |
| //diagram.setSuppressed(Boolean.TRUE); |
| } |
| |
| for (int i = 0; i < diagramsToReveal.length; i++) { |
| org.eclipse.gmf.runtime.notation.Diagram diagram = (org.eclipse.gmf.runtime.notation.Diagram) diagramsToReveal[i]; |
| //TODO: set Suppression. |
| //diagram.setSuppressed(Boolean.FALSE); |
| } |
| |
| // save the editor |
| // |
| saveActiveEditor(); |
| } |
| } |
| }; |
| |
| |
| private IAction newAssignUserDiagram = new Action( |
| AuthoringUIResources.ProcessEditor_Action_AssignUserDiagram) { |
| /** |
| * @see org.eclipse.jface.action.Action#run() |
| */ |
| public void run() { |
| //TODO: necessary changes UserDefinedDiagramDialog's DiagramInfo. |
| UserDefinedDiagramDialog dialog = new UserDefinedDiagramDialog( |
| Display.getCurrent().getActiveShell(), activeEditor, |
| selectedActivity, getProcess().getDefaultContext(), TngUtil.isWrapped(selectedObject)); |
| dialog.open(); |
| } |
| }; |
| |
| private IAction newSuppressAllDiagrams = new Action( |
| AuthoringUIResources.ProcessEditor_Action_SuppressAll) { |
| public void run() { |
| newSetAllDiagramSuppressed(true); |
| } |
| }; |
| |
| private IAction newRevealAllDiagrams = new Action( |
| AuthoringUIResources.ProcessEditor_Action_RevealAll) { |
| public void run() { |
| newSetAllDiagramSuppressed(false); |
| } |
| }; |
| |
| |
| |
| private IAction suppressAllDiagrams = new Action( |
| AuthoringUIResources.ProcessEditor_Action_SuppressAll) { |
| public void run() { |
| setAllDiagramSuppressed(true); |
| } |
| }; |
| |
| private IAction revealAllDiagrams = new Action( |
| AuthoringUIResources.ProcessEditor_Action_RevealAll) { |
| public void run() { |
| setAllDiagramSuppressed(false); |
| } |
| }; |
| |
| private IAction addAction = new Action( |
| AuthoringUIResources.ProcessEditor_Action_Add) { |
| public void run() { |
| LibraryLockingOperationRunner runner = new LibraryLockingOperationRunner(); |
| runner.run(new IRunnableWithProgress() { |
| |
| public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { |
| AdapterFactory adapterFactory = getAdapterFactory(); |
| if (adapterFactory != null) { |
| MethodConfiguration config = LibraryService.getInstance() |
| .getCurrentMethodConfiguration(); |
| if (config == null) { |
| config = TngUtil.getOwningProcess( |
| selectedBreakdownElement).getDefaultContext(); |
| } |
| List selection = DialogHelper.selectElementsFor( |
| selectedBreakdownElement, config, adapterFactory); |
| |
| if (selection == null || selection.isEmpty()) { |
| return; |
| } |
| |
| Object adapter = adapterFactory.adapt( |
| selectedBreakdownElement, |
| IEditingDomainItemProvider.class); |
| if (adapter instanceof IBSItemProvider) { |
| IResourceAwareCommand cmd = ((IBSItemProvider) adapter) |
| .createDropCommand(selectedBreakdownElement, |
| selection); |
| getActionManager().execute(cmd); |
| } |
| } |
| } |
| |
| }); |
| |
| } |
| }; |
| |
| private IAction copyActivityAction = new Action( |
| AuthoringUIResources.ProcessEditor_Action_Copy) { |
| public void run() { |
| MethodConfiguration config = LibraryService.getInstance() |
| .getCurrentMethodConfiguration(); |
| if (config == null) { |
| config = TngUtil.getOwningProcess(selectedActivity) |
| .getDefaultContext(); |
| } |
| List selection = DialogHelper.selectActivitiesFor( |
| selectedActivity, config, IActionTypeProvider.COPY); |
| |
| if (selection == null || selection.isEmpty()) { |
| return; |
| } else { |
| for (Iterator itor=selection.iterator(); itor.hasNext();) { |
| Object o = itor.next(); |
| |
| if (o instanceof Activity) { |
| Activity act = (Activity) o; |
| |
| // Process proc = TngUtil.getOwningProcess(selectedBreakdownElement); |
| // if (DependencyChecker.hasCyclicDependency(act, proc)) { |
| // Object[] args = { selectedActivity.getName(), |
| // act.getName() }; |
| // String message = AuthoringUIResources |
| // .bind( |
| // AuthoringUIResources.apply_pattern_error_msg, |
| // args); |
| // |
| // String title = AuthoringUIResources.apply_pattern_error_title; |
| // AuthoringUIPlugin.getDefault().getMsgDialog() |
| // .displayError(title, message, ""); //$NON-NLS-1$ |
| // itor.remove(); |
| // } |
| // else if (ProcessUtil.hasContributorOrReplacer(act)) { |
| // Object[] args = { selectedActivity.getName(), |
| // act.getName() }; |
| // String message = AuthoringUIResources |
| // .bind( |
| // AuthoringUIResources.activity_variability_error_msg, |
| // args); |
| // |
| // String title = AuthoringUIResources.activity_variability_error_title; |
| // AuthoringUIPlugin.getDefault().getMsgDialog() |
| // .displayError(title, message, ""); //$NON-NLS-1$ |
| // |
| // itor.remove(); |
| // return; |
| // } |
| |
| IStatus status = DependencyChecker.checkCircularDependency(act, selectedActivity); |
| if(!status.isOK()) { |
| String title = AuthoringUIResources.activity_variability_error_title; |
| AuthoringUIPlugin.getDefault().getMsgDialog() |
| .displayError(title, status.getMessage()); |
| itor.remove(); |
| } |
| } |
| if(selection.isEmpty()) { |
| return; |
| } |
| } |
| } |
| |
| ActivityDropCommand cmd = new ActivityDropCommand( |
| selectedActivity, selection, null, getAdapterFactory()); |
| IStatus status = cmd.checkCopy(); |
| if(!status.isOK()) { |
| String title = AuthoringUIResources.activity_variability_error_title; |
| AuthoringUIPlugin.getDefault().getMsgDialog() |
| .displayError(title, status.getMessage()); |
| return; |
| } |
| cmd.setType(IActionTypeProvider.COPY); |
| getActionManager().execute(cmd); |
| } |
| }; |
| |
| private IAction extendActivityAction = new Action( |
| AuthoringUIResources.ProcessEditor_Action_Extend) { |
| public void run() { |
| MethodConfiguration config = LibraryService.getInstance() |
| .getCurrentMethodConfiguration(); |
| if (config == null) { |
| config = TngUtil.getOwningProcess(selectedActivity) |
| .getDefaultContext(); |
| } |
| List selection = DialogHelper.selectActivitiesFor( |
| selectedActivity, config, IActionTypeProvider.EXTEND); |
| |
| if (selection == null || selection.isEmpty()) { |
| return; |
| } |
| else { |
| for (Iterator itor=selection.iterator(); itor.hasNext();) { |
| Object o = itor.next(); |
| |
| if (o instanceof Activity) { |
| Activity act = (Activity) o; |
| |
| // Process proc = TngUtil.getOwningProcess(selectedBreakdownElement); |
| // if (DependencyChecker.hasCyclicDependency(act, proc)) { |
| // Object[] args = { selectedActivity.getName(), |
| // act.getName() }; |
| // String message = AuthoringUIResources |
| // .bind( |
| // AuthoringUIResources.apply_pattern_error_msg, |
| // args); |
| // |
| // String title = AuthoringUIResources.apply_pattern_error_title; |
| // AuthoringUIPlugin.getDefault().getMsgDialog() |
| // .displayError(title, message, ""); //$NON-NLS-1$ |
| // itor.remove(); |
| // } |
| // else if (ProcessUtil.hasContributorOrReplacer(act)) { |
| // Object[] args = { selectedActivity.getName(), |
| // act.getName() }; |
| // String message = AuthoringUIResources |
| // .bind( |
| // AuthoringUIResources.activity_variability_error_msg, |
| // args); |
| // |
| // String title = AuthoringUIResources.activity_variability_error_title; |
| // AuthoringUIPlugin.getDefault().getMsgDialog() |
| // .displayError(title, message, ""); //$NON-NLS-1$ |
| // |
| // itor.remove(); |
| // return; |
| // } |
| |
| IStatus status = DependencyChecker.newCheckAct ? |
| DependencyChecker.checkCircularDependencyAfterFilterSelection |
| (act, selectedActivity, VariabilityType.EXTENDS_LITERAL) |
| : DependencyChecker.checkCircularDependency(act, selectedActivity); |
| if(!status.isOK()) { |
| String title = AuthoringUIResources.activity_variability_error_title; |
| AuthoringUIPlugin.getDefault().getMsgDialog() |
| .displayError(title, status); |
| itor.remove(); |
| } |
| } |
| if(selection.isEmpty()) { |
| return; |
| } |
| } |
| } |
| ActivityDropCommand cmd = new ActivityDropCommand( |
| selectedActivity, selection, null, getAdapterFactory()); |
| IStatus status = cmd.checkExtend(); |
| if(!status.isOK()) { |
| String title = AuthoringUIResources.activity_variability_error_title; |
| AuthoringUIPlugin.getDefault().getMsgDialog() |
| .displayError(title, status.getMessage()); |
| return; |
| } |
| cmd.setType(IActionTypeProvider.EXTEND); |
| getActionManager().execute(cmd); |
| } |
| }; |
| |
| private IAction deepCopyActivityAction = new Action( |
| AuthoringUIResources.ProcessEditor_action_deepCopy) { |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jface.action.Action#run() |
| */ |
| public void run() { |
| LibraryLockingOperationRunner runner = new LibraryLockingOperationRunner(); |
| runner.run(new IRunnableWithProgress() { |
| |
| public void run(IProgressMonitor monitor) |
| throws InvocationTargetException, |
| InterruptedException { |
| MethodConfiguration config = LibraryService |
| .getInstance().getCurrentMethodConfiguration(); |
| if (config == null) { |
| config = TngUtil.getOwningProcess(selectedActivity) |
| .getDefaultContext(); |
| } |
| List selection = DialogHelper.selectActivitiesFor( |
| selectedActivity, config, |
| IActionTypeProvider.DEEP_COPY); |
| |
| if (selection == null || selection.isEmpty()) { |
| return; |
| } |
| else { |
| for (Iterator itor=selection.iterator(); itor.hasNext();) { |
| Object o = itor.next(); |
| |
| if (o instanceof Activity) { |
| Activity act = (Activity) o; |
| |
| // Process proc = TngUtil.getOwningProcess(selectedBreakdownElement); |
| // if (ProcessUtil.hasCyclicDependency(act, proc)) { |
| // Object[] args = { selectedActivity.getName(), |
| // act.getName() }; |
| // String message = AuthoringUIResources |
| // .bind( |
| // AuthoringUIResources.apply_pattern_error_msg, |
| // args); |
| // |
| // String title = AuthoringUIResources.apply_pattern_error_title; |
| // AuthoringUIPlugin.getDefault().getMsgDialog() |
| // .displayError(title, message, ""); //$NON-NLS-1$ |
| // itor.remove(); |
| // } |
| |
| IStatus status = DependencyChecker.checkCircularDependency(act, selectedActivity); |
| if(!status.isOK()) { |
| String title = AuthoringUIResources.activity_variability_error_title; |
| AuthoringUIPlugin.getDefault().getMsgDialog() |
| .displayError(title, status.getMessage()); |
| itor.remove(); |
| } |
| } |
| if(selection.isEmpty()) { |
| return; |
| } |
| } |
| } |
| |
| ActivityDropCommand cmd = new ActivityDropCommand( |
| selectedActivity, selection, null, |
| getAdapterFactory()); |
| cmd.setType(IActionTypeProvider.DEEP_COPY); |
| getActionManager().execute(cmd); |
| |
| } |
| }); |
| } |
| }; |
| |
| private Object selectedObject; |
| |
| private IAction expandAllAction = new Action( |
| AuthoringUIResources.ProcessFormEditor_expanAllActionLabel) { |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jface.action.Action#run() |
| */ |
| public void run() { |
| Viewer viewer = ((ProcessEditor) activeEditor).currentViewer; |
| if (viewer instanceof TreeViewer) { |
| ((TreeViewer) viewer).expandToLevel(selectedObject, |
| AbstractTreeViewer.ALL_LEVELS); |
| } |
| } |
| }; |
| |
| private IAction collapseAllAction = new Action( |
| AuthoringUIResources.ProcessFormEditor_collapseAllActionLabel) { |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jface.action.Action#run() |
| */ |
| public void run() { |
| Viewer viewer = ((ProcessEditor) activeEditor).currentViewer; |
| if (viewer instanceof TreeViewer) { |
| ((TreeViewer) viewer).collapseToLevel(selectedObject, |
| AbstractTreeViewer.ALL_LEVELS); |
| } |
| } |
| }; |
| |
| private SynchronizationAction manualSynchronizeAction = new SynchronizationAction() { |
| public void run() { |
| super.run(); |
| |
| // refresh properties view after synch |
| EPFPropertySheetPage page = (EPFPropertySheetPage) ((ProcessEditor) activeEditor) |
| .getPropertySheetPage(); |
| if (page != null) { |
| page.refresh(); |
| } |
| } |
| }; |
| |
| private ProcessAutoSynchronizeAction autoSynchronize = new ProcessAutoSynchronizeAction() { |
| private void superRun() { |
| super.run(); |
| } |
| |
| /** |
| * @see org.eclipse.epf.authoring.ui.actions.ProcessAutoSynchronizeAction#run() |
| */ |
| public void run() { |
| LibraryLockingOperationRunner runner = new LibraryLockingOperationRunner(); |
| runner.run(new IRunnableWithProgress() { |
| |
| public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { |
| if (!AuthoringUIPlugin |
| .getDefault() |
| .getMsgDialog() |
| .displayConfirmation( |
| AuthoringUIResources.ProcessEditor_defaultSynchronization, |
| AuthoringUIResources.ProcessEditor_confirmAutoSynch)) { |
| return; |
| } |
| // ((SynchronizeCommand)command).setUIContext(getActiveEditor().getSite().getShell()); |
| superRun(); |
| |
| // refresh properties view after synch |
| EPFPropertySheetPage page = (EPFPropertySheetPage)((ProcessEditor) activeEditor).getPropertySheetPage(); |
| if (page != null) { |
| page.refresh(); |
| } |
| } |
| }); |
| |
| } |
| }; |
| |
| private IAction showInLibraryView = new Action( |
| AuthoringUIResources.ProcessEditor_Action_ShowLinkedElementinLibraryView, |
| AuthoringUIPlugin.getDefault().getImageDescriptor( |
| "full/etool16/show_linked_element.gif")) { //$NON-NLS-1$ //) |
| |
| public void run() { |
| final Object linkedElement = ProcessUtil |
| .getAssociatedElement((Descriptor) selectedBreakdownElement); |
| if (linkedElement != null) { |
| Display.getCurrent().asyncExec(new Runnable() { |
| |
| public void run() { |
| LibraryView.getView().setSelectionToViewer( |
| linkedElement); |
| } |
| |
| }); |
| } |
| } |
| |
| }; |
| |
| private IAction assignUserDiagram = new Action( |
| AuthoringUIResources.ProcessEditor_Action_AssignUserDiagram) { |
| /** |
| * @see org.eclipse.jface.action.Action#run() |
| */ |
| public void run() { |
| UserDefinedDiagramDialog dialog = new UserDefinedDiagramDialog( |
| Display.getCurrent().getActiveShell(), activeEditor, |
| selectedActivity, getProcess().getDefaultContext(), TngUtil.isWrapped(selectedObject)); |
| |
| dialog.open(); |
| } |
| }; |
| |
| // private IAction activityDetailDiagramInfo = new ActivityDetailDiagramInfoAction(){ |
| // public Object getObject() { |
| // return selectedActivity; |
| // } |
| // public IWorkbenchPage getPagex() { |
| // // TODO Auto-generated method stub |
| // return getPage(); |
| // } |
| // }; |
| |
| private boolean oldLocked; |
| |
| public BSActionBarContributor() { |
| super(AuthoringUIResources.ProcessEditor); |
| |
| // don't show validate action |
| // |
| validateAction = null; |
| |
| // set disabled image descriptors |
| moveUpAction.setDisabledImageDescriptor(AuthoringUIPlugin |
| .getDefault().getImageDescriptor( |
| "full/etool16/move_up_disabled.gif")); //$NON-NLS-1$ |
| moveDownAction.setDisabledImageDescriptor(AuthoringUIPlugin |
| .getDefault().getImageDescriptor( |
| "full/etool16/move_down_disabled.gif")); //$NON-NLS-1$ |
| showInLibraryView.setDisabledImageDescriptor(AuthoringUIPlugin |
| .getDefault().getImageDescriptor( |
| "full/etool16/show_linked_element_disabled.gif")); //$NON-NLS-1$ |
| } |
| |
| private static PreferencesHint getDiagramPreferencesHint(int diagramType) { |
| switch(diagramType) { |
| case IDiagramManager.ACTIVITY_DIAGRAM: |
| return EPFDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT; |
| case IDiagramManager.ACTIVITY_DETAIL_DIAGRAM: |
| return ActivityDetailDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT; |
| case IDiagramManager.WORK_PRODUCT_DEPENDENCY_DIAGRAM: |
| return WPDDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT; |
| } |
| return null; |
| } |
| |
| protected void openDiagram(int diagramType) { |
| try { |
| DiagramEditorInput input = new org.eclipse.epf.diagram.core.part.DiagramEditorInput( |
| selectedObject, getSuppression(), diagramType); |
| DiagramEditorUtil.openDiagramEditor(getPage(), input, getDiagramPreferencesHint(diagramType), new NullProgressMonitor()); |
| } catch (RuntimeException e) { |
| AuthoringUIPlugin.getDefault().getLogger().logError(e); |
| } |
| } |
| |
| protected void registerAction(IAction action) { |
| if (action != null && !registeredActions.contains(action)) { |
| registeredActions.add(action); |
| } |
| } |
| |
| private void registerActions() { |
| registerAction(autoSynchronize); |
| registerAction(manualSynchronizeAction); |
| registerAction(updateSuppressionFromBaseAction); |
| } |
| |
| /** |
| * @see org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor#update() |
| */ |
| public void update() { |
| super.update(); |
| |
| ISelectionProvider selectionProvider = activeEditor instanceof ISelectionProvider ? (ISelectionProvider) activeEditor |
| : activeEditor.getEditorSite().getSelectionProvider(); |
| ISelection selection = selectionProvider.getSelection(); |
| IStructuredSelection structuredSelection = selection instanceof IStructuredSelection ? (IStructuredSelection) selection |
| : StructuredSelection.EMPTY; |
| |
| for (Iterator iter = registeredActions.iterator(); iter.hasNext();) { |
| Object action = (Object) iter.next(); |
| if (action instanceof CommandActionHandler) { |
| ((CommandActionHandler) action) |
| .updateSelection(structuredSelection); |
| } |
| } |
| } |
| |
| /** |
| * @see org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor#activate() |
| */ |
| public void activate() { |
| manualSynchronizeAction.setProcess(getProcess()); |
| ISelectionProvider selectionProvider = activeEditor instanceof ISelectionProvider ? (ISelectionProvider) activeEditor |
| : activeEditor.getEditorSite().getSelectionProvider(); |
| for (Iterator iter = registeredActions.iterator(); iter.hasNext();) { |
| Object action = (Object) iter.next(); |
| if (action instanceof IWorkbenchPartAction) { |
| ((IWorkbenchPartAction) action) |
| .setActiveWorkbenchPart(activeEditor); |
| } |
| if (action instanceof ISelectionChangedListener) { |
| selectionProvider |
| .addSelectionChangedListener((ISelectionChangedListener) action); |
| } |
| } |
| super.activate(); |
| |
| // call set Active page explicitly in order to get correct action |
| // bars |
| setActivePage(activeEditor); |
| } |
| |
| /** |
| * @see org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor#deactivate() |
| */ |
| public void deactivate() { |
| super.deactivate(); |
| |
| ISelectionProvider selectionProvider = activeEditor instanceof ISelectionProvider ? (ISelectionProvider) activeEditor |
| : activeEditor.getEditorSite().getSelectionProvider(); |
| |
| for (Iterator iter = registeredActions.iterator(); iter.hasNext();) { |
| Object action = (Object) iter.next(); |
| if (action instanceof IWorkbenchPartAction) { |
| ((IWorkbenchPartAction) action) |
| .setActiveWorkbenchPart(null); |
| } |
| if (action instanceof ISelectionChangedListener) { |
| selectionProvider |
| .removeSelectionChangedListener((ISelectionChangedListener) action); |
| } |
| } |
| } |
| |
| /** |
| * @see org.eclipse.epf.authoring.ui.actions.MethodLibraryActionBarContributor#init(org.eclipse.ui.IActionBars) |
| */ |
| public void init(IActionBars actionBars) { |
| super.init(actionBars); |
| registerActions(); |
| contributeToToolBar(actionBars.getToolBarManager()); |
| } |
| |
| private IActionManager getActionManager() { |
| return ((MethodElementEditor) activeEditor).getActionManager(); |
| } |
| |
| private AdapterFactory getAdapterFactory() { |
| return ((ProcessEditor) activeEditor).getAdapterFactory(); |
| } |
| |
| private void setAllDiagramSuppressed(final boolean suppressed) { |
| String title = AuthoringUIResources.processFormEditorSaveDialog_title; |
| String message = AuthoringUIResources.processFormEditorSaveDialog_message1; |
| |
| if (!AuthoringUIPlugin.getDefault().getMsgDialog() |
| .displayConfirmation(title, message)) { |
| return; |
| } |
| |
| BusyIndicator.showWhile(activeEditor.getEditorSite().getShell() |
| .getDisplay(), new Runnable() { |
| |
| public void run() { |
| GraphicalDataHelper.setAllDiagramSuppressed(getProcess(), |
| suppressed); |
| doSaveActiveEditor(); |
| } |
| |
| }); |
| } |
| |
| private void newSetAllDiagramSuppressed(final boolean suppressed) { |
| String title = AuthoringUIResources.processFormEditorSaveDialog_title; |
| String message = AuthoringUIResources.processFormEditorSaveDialog_message1; |
| |
| if (!AuthoringUIPlugin.getDefault().getMsgDialog() |
| .displayConfirmation(title, message)) { |
| return; |
| } |
| |
| BusyIndicator.showWhile(activeEditor.getEditorSite().getShell() |
| .getDisplay(), new Runnable() { |
| |
| public void run() { |
| DiagramHelper.setAllDiagramSuppressed(getProcess(), |
| suppressed); |
| doSaveActiveEditor(); |
| } |
| |
| }); |
| } |
| |
| |
| private boolean promptSaveActiveEditor() { |
| String title = AuthoringUIResources.processFormEditorSaveDialog_title; |
| String message = AuthoringUIResources.processFormEditorSaveDialog_message2; |
| if (activeEditor.isDirty()) { |
| return AuthoringUIPlugin.getDefault().getMsgDialog() |
| .displayConfirmation(title, message); |
| } |
| return true; |
| } |
| |
| private void saveActiveEditor() { |
| // save the editor |
| // |
| BusyIndicator.showWhile(activeEditor.getEditorSite().getShell() |
| .getDisplay(), new Runnable() { |
| |
| public void run() { |
| doSaveActiveEditor(); |
| } |
| |
| }); |
| } |
| |
| private void doSaveActiveEditor() { |
| ((ProcessEditor) activeEditor).resourcesToSave.add(getProcess() |
| .eResource()); |
| activeEditor.doSave(new NullProgressMonitor()); |
| } |
| |
| protected DeleteAction createDeleteAction() { |
| return new ProcessDeleteAction() { |
| protected void saveCurrentEditor() { |
| if (activeEditor.isDirty()) { |
| BusyIndicator.showWhile(activeEditor.getEditorSite() |
| .getShell().getDisplay(), new Runnable() { |
| |
| public void run() { |
| activeEditor.doSave(new NullProgressMonitor()); |
| } |
| |
| }); |
| } |
| } |
| |
| public void run() { |
| IFormPage activePage = ((ProcessEditor) activeEditor) |
| .getActivePageInstance(); |
| if (activePage != null) { |
| String id = activePage.getId(); |
| if (id == ProcessEditor.WBS_FORM_ID |
| || id == ProcessEditor.TA_FORM_ID |
| || id == ProcessEditor.WPBS_FORM_ID |
| || id == ProcessEditor.CONSOLIDATED_FORM_ID) { |
| // for all other pages, disable DELETE |
| super.run(); |
| } |
| } |
| } |
| }; |
| } |
| |
| protected CutAction createCutAction() { |
| return new CutAction() { |
| public boolean updateSelection(IStructuredSelection selection) { |
| return super.updateSelection(ProcessDeleteAction |
| .filterSelection(selection)); |
| } |
| }; |
| } |
| |
| protected PasteAction createPasteAction() { |
| return new PasteAction() { |
| public boolean updateSelection(IStructuredSelection selection) { |
| return super.updateSelection(ProcessDeleteAction |
| .filterSelection(selection)); |
| } |
| |
| /** |
| * Overrided to use ResourceAwarePasteFromClipboardCommand |
| * |
| * @see org.eclipse.emf.edit.ui.action.PasteAction#createCommand(java.util.Collection) |
| * @see org.eclipse.epf.library.edit.command.ResourceAwarePasteFromClipboardCommand |
| */ |
| public Command createCommand(Collection selection) { |
| if (selection.size() == 1) |
| { |
| return new ResourceAwarePasteFromClipboardCommand(domain, selection.iterator().next(), null, CommandParameter.NO_INDEX); |
| } |
| else |
| { |
| return UnexecutableCommand.INSTANCE; |
| } |
| } |
| }; |
| } |
| |
| protected CopyAction createCopyAction() { |
| return new CopyAction() { |
| |
| public void run() { |
| if (domain instanceof TraceableAdapterFactoryEditingDomain) { |
| ((TraceableAdapterFactoryEditingDomain) domain) |
| .resetCopyMaps(); |
| } |
| super.run(); |
| } |
| |
| public boolean updateSelection(IStructuredSelection selection) { |
| // // disallow copying multiple elements for now until we |
| // find a right way |
| // // to keep the copy to original map |
| // // |
| // if(selection.size() > 1) { |
| // return false; |
| // } |
| |
| return super.updateSelection(selection); |
| } |
| }; |
| } |
| |
| /** |
| * @see org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor#addGlobalActions(org.eclipse.jface.action.IMenuManager) |
| */ |
| protected void addGlobalActions(IMenuManager menuManager) { |
| super.addGlobalActions(menuManager); |
| menuManager.insertAfter( |
| "additions", new Separator("fixed-additions")); //$NON-NLS-1$ //$NON-NLS-2$ |
| // menuManager.insertBefore("fixed-additions", |
| // insertNewPhaseAction); |
| } |
| |
| public void contributeToToolBar(IToolBarManager toolBarManager) { |
| super.contributeToToolBar(toolBarManager); |
| |
| moveUpAction |
| .setToolTipText(AuthoringUIResources.ProcessEditor_Action_MoveUp); |
| moveDownAction |
| .setToolTipText(AuthoringUIResources.ProcessEditor_Action_MoveDown); |
| showInLibraryView |
| .setToolTipText(AuthoringUIResources.ProcessEditor_Action_ShowLinkedElementinLibraryView); |
| toolBarManager.add(moveUpAction); |
| toolBarManager.add(moveDownAction); |
| toolBarManager.add(showInLibraryView); |
| } |
| |
| /** |
| * @see org.eclipse.jface.action.IMenuListener#menuAboutToShow(org.eclipse.jface.action.IMenuManager) |
| */ |
| public void menuAboutToShow(IMenuManager menuManager) { |
| IFormPage activePage = ((ProcessEditor) activeEditor) |
| .getActivePageInstance(); |
| if (activePage instanceof ProcessBreakdownStructureFormPage |
| && ((ProcessBreakdownStructureFormPage) activePage) |
| .basicIsReadOnly()) { |
| menuManager.add(new Separator( |
| IWorkbenchActionConstants.MB_ADDITIONS)); |
| menuManager.add(showInLibraryView); |
| if (bsItemProvider != null |
| // && ((ITreeItemContentProvider) |
| // bsItemProvider).hasChildren(selectedObject) |
| ) { |
| menuManager.add(expandAllAction); |
| menuManager.add(collapseAllAction); |
| } |
| menuManager.add(new Separator()); |
| refreshViewerAction.setEnabled(refreshViewerAction.isEnabled()); |
| menuManager.add(refreshViewerAction); |
| menuManager.add(showPropertiesViewAction); |
| return; |
| } |
| |
| ISelectionProvider selectionProvider = (ISelectionProvider) activeEditor; |
| |
| if (selectedActivity == null |
| && (selectionProvider.getSelection() == null || selectionProvider |
| .getSelection().isEmpty())) { |
| // fake a selection change event with the process selected if no |
| // element is selected yet. |
| // |
| selectionChanged(new SelectionChangedEvent(selectionProvider, |
| new StructuredSelection(getProcess()))); |
| } |
| // disable all new action if it's rolled up |
| boolean isRolledUP = bsItemProvider != null |
| && bsItemProvider.isRolledUp(); |
| super.setEnabled(!isRolledUP); |
| super.menuAboutToShow(menuManager); |
| |
| // add markers |
| // |
| menuManager.insertAfter("fixed-additions", new Separator("preference")); //$NON-NLS-1$ //$NON-NLS-2$ |
| menuManager.appendToGroup("preference", preferenceAction); //$NON-NLS-1$ |
| |
| menuManager.insertAfter("fixed-additions", new Separator("open")); //$NON-NLS-1$ //$NON-NLS-2$ |
| |
| if (bsItemProvider instanceof BreakdownElementWrapperItemProvider |
| && TngUtil.unwrap(bsItemProvider) instanceof Activity) { |
| menuManager.insertBefore(IWorkbenchActionConstants.MB_ADDITIONS, contributeAction); |
| menuManager.insertBefore(IWorkbenchActionConstants.MB_ADDITIONS, replaceAction); |
| menuManager.insertBefore( |
| IWorkbenchActionConstants.MB_ADDITIONS, localReplacementAndDeepCopy); |
| } |
| |
| if (!isRolledUP) { |
| if (createChildActions != null && !createChildActions.isEmpty()) { |
| menuManager.insertBefore(IWorkbenchActionConstants.MB_ADDITIONS, addAction); |
| } |
| } |
| |
| suppressTaskAction.setEnabled(!isRolledUP && suppressTaskAction.isEnabled()); |
| revealTaskAction.setEnabled(!isRolledUP && revealTaskAction.isEnabled()); |
| if (revealAction.isEnabled()) { |
| menuManager.insertBefore("fixed-additions", revealAction); //$NON-NLS-1$ |
| } |
| if (revealTaskAction.isEnabled()) { |
| menuManager.insertBefore("fixed-additions", revealTaskAction); //$NON-NLS-1$ |
| } |
| if (suppressAction.isEnabled()) { |
| menuManager.insertBefore("fixed-additions", suppressAction); //$NON-NLS-1$ |
| } |
| if (suppressTaskAction.isEnabled()) { |
| menuManager.insertBefore("fixed-additions", suppressTaskAction); //$NON-NLS-1$ |
| } |
| if (updateSuppressionFromBaseAction.isEnabled()) { |
| menuManager.insertBefore( |
| "fixed-additions", updateSuppressionFromBaseAction); //$NON-NLS-1$ |
| } |
| |
| if ((selectedBreakdownElement != null) && (bsItemProvider != null)) { |
| if (moveUpAction.isEnabled()) { |
| menuManager.insertBefore("fixed-additions", moveUpAction); //$NON-NLS-1$ |
| } |
| if (moveDownAction.isEnabled()) { |
| menuManager.insertBefore("fixed-additions", moveDownAction); //$NON-NLS-1$ |
| } |
| } |
| |
| menuManager.appendToGroup("open", showInLibraryView); //$NON-NLS-1$ |
| |
| if ((selectedActivity != null) && (bsItemProvider != null)) { |
| if (bsItemProvider.isRolledUp()) { |
| rollupAction |
| .setText(AuthoringUIResources.ProcessEditor_Action_RollDown); |
| } else { |
| rollupAction |
| .setText(AuthoringUIResources.ProcessEditor_Action_RollUp); |
| } |
| menuManager.appendToGroup("open", rollupAction); //$NON-NLS-1$ |
| } |
| |
| if (selectedObject instanceof Activity) { |
| // "Reuse" menu |
| // |
| MenuManager reuseSubMenu = new MenuManager( |
| AuthoringUIResources.ProcessEditor_Action_ApplyPattern); |
| reuseSubMenu.add(copyActivityAction); |
| reuseSubMenu.add(extendActivityAction); |
| reuseSubMenu.add(deepCopyActivityAction); |
| |
| menuManager.insertBefore(IWorkbenchActionConstants.MB_ADDITIONS, reuseSubMenu); |
| } |
| |
| if (autoSynchronize.isEnabled()) { |
| menuManager.insertBefore(IWorkbenchActionConstants.MB_ADDITIONS, autoSynchronize); |
| } |
| if (manualSynchronizeAction.isEnabled()) { |
| menuManager.insertBefore(IWorkbenchActionConstants.MB_ADDITIONS, manualSynchronizeAction); |
| } |
| |
| if (!(selectedElement instanceof Milestone)) { |
| MenuManager diagramSubMenu = new MenuManager( |
| AuthoringUIResources.ProcessEditor_Action_Diagrams); |
| if (selectedActivity != null) { |
| if (selectedActivity.getVariabilityBasedOnElement() != null) { |
| menuManager.appendToGroup("open", openBaseActivity); //$NON-NLS-1$ |
| } |
| |
| diagramSubMenu.add(openWorkflowEditorAction); |
| diagramSubMenu.add(openWorkflowDetailEditorAction); |
| diagramSubMenu.add(openWPDependencyEditorAction); |
| diagramSubMenu.add(suppressDiagramAction); |
| diagramSubMenu.add(assignUserDiagram); |
| } |
| if (selectedActivity == getProcess()) { |
| diagramSubMenu.add(suppressAllDiagrams); |
| diagramSubMenu.add(revealAllDiagrams); |
| } |
| // Enable this code if ActivityDetailDiagramInfoDialog is need. |
| // if(selectedActivity != null){ |
| // diagramSubMenu.add(new Separator()); |
| // diagramSubMenu.add(activityDetailDiagramInfo); |
| // } |
| menuManager.appendToGroup("open", diagramSubMenu); //$NON-NLS-1$ |
| |
| MenuManager newDiagramSubMenu = new MenuManager( |
| "New Diagrams"); //$NON-NLS-1$ |
| if(selectedActivity != null){ |
| newDiagramSubMenu.add(newActivityDiagramEditor); |
| newDiagramSubMenu.add(newActivityDetailDiagramEditor); |
| newDiagramSubMenu.add(newWPDiagramEditor); |
| newDiagramSubMenu.add(newSuppressDiagramAction); |
| newDiagramSubMenu.add(newAssignUserDiagram); |
| |
| } |
| |
| if (selectedActivity == getProcess()) { |
| newDiagramSubMenu.add(newSuppressAllDiagrams); |
| newDiagramSubMenu.add(newRevealAllDiagrams); |
| } |
| menuManager.appendToGroup("open", newDiagramSubMenu); //$NON-NLS-1$ |
| } |
| |
| if (bsItemProvider != null |
| // this is an expensive check, removed it |
| // |
| // && ((ITreeItemContentProvider) |
| // bsItemProvider).hasChildren(selectedObject) |
| ) { |
| menuManager.appendToGroup("open", expandAllAction); //$NON-NLS-1$ |
| menuManager.appendToGroup("open", collapseAllAction); //$NON-NLS-1$ |
| } |
| } |
| |
| /** |
| * @return |
| */ |
| private Process getProcess() { |
| return ((ProcessComponent) ((MethodElementEditorInput) activeEditor |
| .getEditorInput()).getMethodElement()).getProcess(); |
| } |
| |
| private Suppression getSuppression() { |
| return ((ProcessEditor) activeEditor).suppression; |
| } |
| |
| private void depopulateDynamicMenuItems() { |
| // Remove any menu items for old selection. |
| // |
| if (createChildMenuManager != null) { |
| depopulateManager(createChildMenuManager, createChildActions); |
| } |
| if (createSiblingMenuManager != null) { |
| depopulateManager(createSiblingMenuManager, |
| createSiblingActions); |
| } |
| createChildActions = null; |
| createSiblingActions = null; |
| } |
| |
| /** |
| * Set action state to enabled or disabled |
| * |
| * @param locked |
| */ |
| private void setActionState() { |
| if (locked) { |
| // disable modifying actions |
| pasteAction.setEnabled(false); |
| cutAction.setEnabled(false); |
| deleteAction.setEnabled(false); |
| autoSynchronize.setEnabled(false); |
| manualSynchronizeAction.setEnabled(false); |
| updateSuppressionFromBaseAction.setEnabled(false); |
| } else if (!oldLocked) { |
| // update state of modifying actions |
| // |
| IStructuredSelection selection = (IStructuredSelection) selectionProvider |
| .getSelection(); |
| cutAction.setEnabled(cutAction.updateSelection(selection)); |
| pasteAction.setEnabled(pasteAction.updateSelection(selection)); |
| deleteAction |
| .setEnabled(deleteAction.updateSelection(selection)); |
| autoSynchronize.setEnabled(autoSynchronize |
| .updateSelection(selection)); |
| manualSynchronizeAction.setEnabled(manualSynchronizeAction |
| .updateSelection(selection)); |
| updateSuppressionFromBaseAction |
| .setEnabled(updateSuppressionFromBaseAction |
| .updateSelection(selection)); |
| } |
| |
| boolean enabled = !locked; |
| |
| addAction.setEnabled(enabled); |
| contributeAction.setEnabled(enabled); |
| |
| // state of these actions is set in updateActions() |
| // |
| // moveDownAction.setEnabled(enabled); |
| // moveUpAction.setEnabled(enabled); |
| // revealAction.setEnabled(enabled); |
| // suppressAction.setEnabled(enabled); |
| replaceAction.setEnabled(enabled); |
| localReplacementAndDeepCopy.setEnabled(enabled); |
| revealAllDiagrams.setEnabled(enabled); |
| suppressAllDiagrams.setEnabled(enabled); |
| suppressDiagramAction.setEnabled(enabled); |
| copyActivityAction.setEnabled(enabled); |
| extendActivityAction.setEnabled(enabled); |
| deepCopyActivityAction.setEnabled(enabled); |
| } |
| |
| protected Collection generateCreateChildActions(Collection descriptors, |
| ISelection selection) { |
| if (locked) { |
| return null; |
| } |
| return super.generateCreateChildActions(descriptors, selection); |
| } |
| |
| protected Collection generateCreateSiblingActions( |
| Collection descriptors, ISelection selection) { |
| if (locked) { |
| return null; |
| } |
| return super.generateCreateSiblingActions(descriptors, selection); |
| } |
| |
| |
| /** |
| * @see org.eclipse.epf.authoring.ui.actions.MethodLibraryActionBarContributor#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent) |
| */ |
| public void selectionChanged(SelectionChangedEvent event) { |
| ISelection sel = event.getSelection(); |
| if (sel instanceof IStructuredSelection) { |
| IStructuredSelection structuredSelection = (IStructuredSelection) sel; |
| oldLocked = locked; |
| locked = ViewHelper.isLocked(structuredSelection); |
| |
| selection = ((IStructuredSelection) sel).toList(); |
| if (selection.size() == 1) { |
| selectedObject = ((IStructuredSelection) sel) |
| .getFirstElement(); |
| Object obj = TngUtil.unwrap(selectedObject); |
| super.selectionChanged(event); |
| selectedElement = obj; |
| if (obj instanceof Activity) { |
| selectedActivity = (Activity) obj; |
| } else { |
| // depopulateDynamicMenuItems(); |
| // bsItemProvider = null; |
| selectedActivity = null; |
| } |
| AdapterFactoryEditingDomain domain = (AdapterFactoryEditingDomain) ((IEditingDomainProvider) activeEditorPart) |
| .getEditingDomain(); |
| Object providerObj = domain.getAdapterFactory().adapt( |
| selectedObject, ITreeItemContentProvider.class); |
| if (providerObj instanceof IBSItemProvider) |
| bsItemProvider = (IBSItemProvider) providerObj; |
| |
| if (obj instanceof BreakdownElement) { |
| selectedBreakdownElement = (BreakdownElement) obj; |
| } else { |
| selectedBreakdownElement = null; |
| } |
| } else { |
| depopulateDynamicMenuItems(); |
| bsItemProvider = null; |
| selectedElement = null; |
| selectedActivity = null; |
| selectedBreakdownElement = null; |
| selectedObject = null; |
| } |
| |
| updateActions(); |
| |
| } else { |
| depopulateDynamicMenuItems(); |
| bsItemProvider = null; |
| selectedElement = null; |
| selectedActivity = null; |
| selectedBreakdownElement = null; |
| } |
| |
| // // test code |
| // // |
| // if(selectedActivity != null) { |
| // for (Iterator iter = |
| // selectedActivity.eClass().getEAllAttributes().iterator(); |
| // iter.hasNext();) { |
| // EAttribute attrib = (EAttribute) iter.next(); |
| // if(String.class.isAssignableFrom(attrib.getEAttributeType().getInstanceClass())) |
| // { |
| // List values = |
| // ConfigurationHelper.getStringAttribute(selectedActivity, attrib); |
| // System.out.println(); |
| // System.out.println(attrib.getName() + ": " + values); |
| // } |
| // } |
| // } |
| } |
| |
| /** |
| * Updates actions including enabling/disabling them based on selection |
| */ |
| private void updateActions() { |
| showInLibraryView |
| .setEnabled(selectedBreakdownElement instanceof Descriptor |
| && ProcessUtil |
| .getAssociatedElement((Descriptor) selectedBreakdownElement) != null); |
| |
| if (!locked && selection != null && !selection.isEmpty()) { |
| if (selection.size() == 1) { |
| if (getSuppression().canReveal(selection)) { |
| revealAction.setEnabled(true); |
| suppressAction.setEnabled(false); |
| } else if (getSuppression().canSuppress(selection)) { |
| suppressAction.setEnabled(true); |
| revealAction.setEnabled(false); |
| } else { |
| revealAction.setEnabled(false); |
| suppressAction.setEnabled(false); |
| } |
| } else { |
| revealAction.setEnabled(getSuppression().canReveal( |
| selection)); |
| suppressAction.setEnabled(getSuppression().canSuppress( |
| selection)); |
| } |
| |
| // Action Enable/Disable for Suppress Task/Reveal Task context menu |
| boolean show = true; |
| for (int i = 0; i < selection.size(); i++) { |
| if (getAdapterFactory() == TngAdapterFactory.INSTANCE |
| .getWBS_ComposedAdapterFactory()) { |
| |
| if (!(selection.get(i) instanceof Activity || selection |
| .get(i) instanceof ActivityWrapperItemProvider)) { |
| show = false; |
| break; |
| } |
| } else |
| show = false; |
| } |
| if (show) { |
| List taskDescriptors = ProcessUtil.getTaskDescriptors(selection); |
| suppressTaskAction.setEnabled(getSuppression().canSuppress(taskDescriptors)); |
| revealTaskAction.setEnabled(getSuppression().canReveal(taskDescriptors)); |
| } |
| else { |
| suppressTaskAction.setEnabled(false); |
| revealTaskAction.setEnabled(false); |
| } |
| |
| // boolean hasInherited = false; |
| // for (Iterator iter = selection.iterator(); iter.hasNext();) { |
| // Object item = iter.next(); |
| // if (item instanceof BreakdownElementWrapperItemProvider |
| // && ((BreakdownElementWrapperItemProvider) item) |
| // .isReadOnly()) { |
| // hasInherited = true; |
| // break; |
| // } |
| // } |
| // updateSuppressionFromBaseAction.setEnabled(hasInherited); |
| } else { |
| revealAction.setEnabled(false); |
| suppressAction.setEnabled(false); |
| suppressTaskAction.setEnabled(false); |
| revealTaskAction.setEnabled(false); |
| } |
| |
| if (!locked) { |
| refreshMoveButtonActions(); |
| } else { |
| moveUpAction.setEnabled(false); |
| moveDownAction.setEnabled(false); |
| } |
| |
| // Set Activity Detail Diagram Action enable state. |
| if (selectedObject instanceof Activity |
| || selectedObject instanceof ActivityWrapperItemProvider) |
| setActionStateForADD(); |
| |
| // change action state for locked plugin |
| setActionState(); |
| } |
| |
| public void setActivePage(IEditorPart part) { |
| if (this.activeEditor != null) { |
| int page = ((ProcessEditor) this.activeEditor).getActivePage(); |
| IActionBars actionBars = this.activeEditor.getEditorSite() |
| .getActionBars(); |
| |
| if (page == 0) { |
| actionBars.setGlobalActionHandler(ActionFactory.DELETE |
| .getId(), null); |
| actionBars.setGlobalActionHandler( |
| ActionFactory.CUT.getId(), null); |
| actionBars.setGlobalActionHandler(ActionFactory.COPY |
| .getId(), null); |
| actionBars.setGlobalActionHandler(ActionFactory.PASTE |
| .getId(), null); |
| actionBars.setGlobalActionHandler(ActionFactory.UNDO |
| .getId(), null); |
| actionBars.setGlobalActionHandler(ActionFactory.REDO |
| .getId(), null); |
| } else { |
| actionBars.setGlobalActionHandler(ActionFactory.DELETE |
| .getId(), deleteAction); |
| actionBars.setGlobalActionHandler( |
| ActionFactory.CUT.getId(), cutAction); |
| actionBars.setGlobalActionHandler(ActionFactory.COPY |
| .getId(), copyAction); |
| actionBars.setGlobalActionHandler(ActionFactory.PASTE |
| .getId(), pasteAction); |
| actionBars.setGlobalActionHandler(ActionFactory.UNDO |
| .getId(), undoAction); |
| actionBars.setGlobalActionHandler(ActionFactory.REDO |
| .getId(), redoAction); |
| } |
| actionBars.updateActionBars(); |
| } |
| } |
| |
| protected void doRefresh() { |
| // update IDs |
| // |
| AdapterFactory adapterFactory = getAdapterFactory(); |
| if (adapterFactory == TngAdapterFactory.INSTANCE |
| .getWBS_ComposedAdapterFactory() |
| || adapterFactory == TngAdapterFactory.INSTANCE |
| .getProcessComposedAdapterFactory()) { |
| Process proc = getProcess(); |
| ProcessUtil.updateIDs(adapterFactory, proc); |
| ProcessUtil.refreshPredeccessorLists(adapterFactory, proc); |
| } |
| |
| super.doRefresh(); |
| } |
| |
| private void refreshMoveButtonActions() { |
| if ((selectedBreakdownElement != null) && (bsItemProvider != null)) { |
| moveUpAction.setEnabled(!bsItemProvider.isFirstElement(selectedBreakdownElement)); |
| moveDownAction.setEnabled(!bsItemProvider.isLastElement(selectedBreakdownElement)); |
| } |
| } |
| |
| /* |
| * Set Action state for Activity Detail Diagram in Context Menu on |
| * selection of Activity. If an Activity consist atleast one |
| * taskdescriptor and its primary performer in current configuration, |
| * then state is enabled else state is disabled in context menu (process |
| * editor). |
| */ |
| private void setActionStateForADD() { |
| |
| // set ADD Action state false |
| openWorkflowDetailEditorAction.setEnabled(false); |
| |
| // set AD Action state true always |
| openWorkflowEditorAction.setEnabled(true); |
| |
| // set WPD Diagram Menu Action state tru always |
| openWPDependencyEditorAction.setEnabled(true); |
| |
| if (selectedObject != null) { |
| |
| if (getSuppression().isSuppressed(selectedObject)) { |
| openWorkflowDetailEditorAction.setEnabled(false); |
| openWorkflowEditorAction.setEnabled(false); |
| openWPDependencyEditorAction.setEnabled(false); |
| return; |
| } |
| |
| Activity activity = null; |
| List list = new ArrayList(); |
| |
| if (selectedObject instanceof Activity) { |
| activity = selectedActivity; |
| } else if (selectedObject instanceof ActivityWrapperItemProvider) { |
| activity = (Activity) ((ActivityWrapperItemProvider) selectedObject) |
| .getValue(); |
| } |
| if (activity == null) |
| return; |
| |
| while (!activity.getVariabilityType().equals( |
| VariabilityType.NA_LITERAL)) { |
| |
| VariabilityElement ve = activity |
| .getVariabilityBasedOnElement(); |
| // If Activity is set to local contribution, |
| // need to get breakdown elements of local contributed |
| // activity + base activity. And base activity breakdown |
| // elements |
| // are collected after while loop ends) |
| // if (VariabilityType.CONTRIBUTES_LITERAL.equals(activity |
| // .getVariabilityType())) { |
| // list.addAll(activity.getBreakdownElements()); |
| // } |
| list.addAll(activity.getBreakdownElements()); |
| |
| if ((ve != null) && (ve instanceof Activity)) { |
| activity = (Activity) ve; |
| } else { |
| break; |
| } |
| } |
| |
| // For AD diagram menu option, if Base Activity donot have any |
| // AD diagram, donot show AD diagram option in context menu for |
| // readonly activity. |
| Diagram diagram = GraphicalDataManager.getInstance() |
| .getUMADiagram(activity, |
| GraphicalDataHelper.ACTIVITY_DIAGRAM, false); |
| if (diagram == null |
| && selectedObject instanceof ActivityWrapperItemProvider) { |
| openWorkflowEditorAction.setEnabled(false); |
| } |
| |
| // For WPD diagram menu option, if Base Activity donot have any |
| // WPD diagram, donot show WPD diagram option in context menu |
| // for readonly activity. |
| diagram = GraphicalDataManager.getInstance().getUMADiagram( |
| activity, |
| GraphicalDataHelper.WORK_PRODUCT_DEPENDENCY_DIAGRAM, |
| false); |
| if (diagram == null |
| && selectedObject instanceof ActivityWrapperItemProvider) { |
| openWPDependencyEditorAction.setEnabled(false); |
| } |
| |
| // Collect the breakdown elements to verifty taskdescriptors are |
| // not. |
| list.addAll(activity.getBreakdownElements()); |
| |
| // For ADD diagram menu option, if Base Activity donot have any |
| // ADD diagram, donot show ADD diagram option in context menu |
| // for |
| // readonly activity. |
| diagram = GraphicalDataManager.getInstance().getUMADiagram( |
| activity, GraphicalDataHelper.ACTIVITY_DETAIL_DIAGRAM, |
| false); |
| if (diagram == null |
| && selectedObject instanceof ActivityWrapperItemProvider) { |
| openWorkflowDetailEditorAction.setEnabled(false); |
| } else { |
| // Iterate through the List, to find taskdescriptor and has |
| // primary role within current configuration. |
| // then enable the action. |
| for (Iterator iterator = list.iterator(); iterator |
| .hasNext();) { |
| Object obj = iterator.next(); |
| if (obj instanceof TaskDescriptor) { |
| if (!getSuppression().isSuppressed(obj)) { |
| Object e = ((TaskDescriptor) obj) |
| .getPerformedPrimarilyBy(); |
| AdapterFactoryEditingDomain domain = (AdapterFactoryEditingDomain) ((IEditingDomainProvider) activeEditorPart) |
| .getEditingDomain(); |
| AdapterFactory factory = domain |
| .getAdapterFactory(); |
| if (factory instanceof ExposedAdapterFactory) { |
| IFilter filter = ((ExposedAdapterFactory) factory) |
| .getFilter(); |
| if (filter != null |
| && filter.accept(e) |
| && !getSuppression() |
| .isSuppressed(e)) { |
| openWorkflowDetailEditorAction |
| .setEnabled(true); |
| break; |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| private class ProcessEditorDropAdapter extends |
| EditingDomainTableTreeViewerDropAdapter { |
| |
| /** |
| * @param domain |
| * @param viewer |
| */ |
| public ProcessEditorDropAdapter(EditingDomain domain, Viewer viewer) { |
| super(domain, viewer); |
| } |
| |
| /** |
| * @see org.eclipse.epf.authoring.ui.dnd.EditingDomainTableTreeViewerDropAdapter#getDropTarget(org.eclipse.swt.widgets.Widget) |
| */ |
| protected Object getDropTarget(Widget item) { |
| Object target = super.getDropTarget(item); |
| if (target == null && selectedProcessComponent != null) { |
| target = selectedProcessComponent.getProcess(); |
| } |
| return target; |
| } |
| |
| /** |
| * @see org.eclipse.epf.authoring.ui.dnd.EditingDomainTableTreeViewerDropAdapter#drop(org.eclipse.swt.dnd.DropTargetEvent) |
| */ |
| public void drop(DropTargetEvent event) { |
| if (currentViewer instanceof IActionTypeProvider) { |
| ((IActionTypeProvider) currentViewer).setInputData(new Point( |
| event.x, event.y)); |
| } |
| super.drop(event); |
| } |
| } |
| |
| private ComposedAdapterFactory adapterFactory; |
| |
| private AdapterFactoryEditingDomain editingDomain; |
| |
| private Viewer currentViewer; |
| |
| private ISelectionChangedListener selectionChangedListener; |
| |
| private Collection selectionChangedListeners = new ArrayList(); |
| |
| private ISelection viewSelection; |
| |
| private ProcessComponent selectedProcessComponent; |
| |
| private Process selectedProcess; |
| |
| private Adapter processComponentListener = new AdapterImpl() { |
| /** |
| * @see org.eclipse.emf.common.notify.impl.AdapterImpl#notifyChanged(org.eclipse.emf.common.notify.Notification) |
| */ |
| public void notifyChanged(Notification msg) { |
| switch (msg.getFeatureID(ProcessComponent.class)) { |
| case UmaPackage.PROCESS_COMPONENT__NAME: |
| String name = msg.getNewStringValue(); |
| if (name == null) |
| name = ""; //$NON-NLS-1$ |
| setPartName(name); |
| |
| if (pages != null) { |
| for (Iterator iter = pages.iterator(); iter.hasNext();) { |
| Object page = iter.next(); |
| if (page instanceof ProcessDescription) { |
| ((ProcessDescription) page) |
| .refreshElementName(name); |
| } |
| |
| } |
| } |
| |
| break; |
| } |
| } |
| }; |
| |
| private AdapterFactoryContentProvider propContentProvider; |
| |
| private MethodConfiguration currentConfig; |
| |
| private ILibraryChangeListener libraryListener = new ILibraryChangeListener() { |
| |
| public void libraryChanged(int option, Collection collection) { |
| switch (option) { |
| // case ILibraryChangeListener.OPTION_LOADED: |
| // // close all open diagram editors |
| // // |
| // IEditorReference[] editorRefs = |
| // getSite().getPage().getEditorReferences(); |
| // for (int i = 0; i < editorRefs.length; i++) { |
| // IEditorPart editorPart = editorRefs[i].getEditor(false); |
| // if(editorPart instanceof GraphicalWorkflowEditor |
| // || editorPart instanceof ProcessFormEditor) { |
| // getSite().getPage().closeEditor(editorPart, true); |
| // } |
| // } |
| // getSite().getPage().closeEditor(ProcessFormEditor.this, true); |
| case ILibraryChangeListener.OPTION_CHANGED: { |
| if (collection != null && collection.contains(currentConfig)) { |
| MethodConfiguration config = ProcessAuthoringConfigurator.INSTANCE |
| .getMethodConfiguration(); |
| try { |
| ProcessAuthoringConfigurator.INSTANCE |
| .setMethodConfiguration(currentConfig); |
| refreshAll(); |
| } finally { |
| ProcessAuthoringConfigurator.INSTANCE |
| .setMethodConfiguration(config); |
| } |
| } |
| break; |
| } |
| // handled by libSvcListener |
| // case ILibraryChangeListener.OPTION_CONFIGURATION_SELECTED: { |
| // configChanged(); |
| // break; |
| // } |
| |
| } |
| |
| } |
| |
| }; |
| |
| private ILibraryServiceListener libSvcListener = new ILibraryServiceListener() { |
| |
| public void configurationSet(MethodConfiguration config) { |
| configChanged(); |
| } |
| |
| public void libraryClosed(MethodLibrary library) { |
| } |
| |
| public void libraryCreated(MethodLibrary library) { |
| } |
| |
| public void libraryOpened(MethodLibrary library) { |
| } |
| |
| public void libraryReopened(MethodLibrary library) { |
| } |
| |
| public void librarySet(MethodLibrary library) { |
| } |
| |
| }; |
| |
| private ProcessBreakdownStructureFormPage WBSTab; |
| |
| private ProcessBreakdownStructureFormPage OBSTab; |
| |
| private ProcessBreakdownStructureFormPage PBSTab; |
| |
| private ProcessBreakdownStructureFormPage procTab; |
| |
| private ProcessBreakdownStructureFormPage[] extensionTabs = null; |
| |
| private ProcessBreakdownStructureFormPage[] bsPages; |
| |
| private EPFPropertySheetPage propertySheetPage; |
| |
| public Collection resourcesToSave = new ArrayList(); |
| |
| // private boolean firstExpanded = false; |
| |
| /** |
| * a listener that is interested in part activation events. |
| */ |
| private IPartListener partActivationListener = new IPartListener() { |
| |
| public void partActivated(IWorkbenchPart part) { |
| if (part instanceof PropertySheet) { |
| removePropertiesDropDownMenu(part); |
| } |
| } |
| |
| public void partBroughtToTop(IWorkbenchPart part) { |
| // if(!firstExpanded) { |
| // synchronized(ProcessFormEditor.this) { |
| // if(firstExpanded) { |
| // ((AbstractTreeViewer) WBSTab.getViewer()).expandAll(); |
| // ((AbstractTreeViewer) OBSTab.getViewer()).expandAll(); |
| // ((AbstractTreeViewer) PBSTab.getViewer()).expandAll(); |
| // firstExpanded = true; |
| // } |
| // } |
| // } |
| } |
| |
| public void partClosed(IWorkbenchPart part) { |
| if (part instanceof PropertySheet) { |
| propertySheetPage = null; |
| } |
| } |
| |
| public void partDeactivated(IWorkbenchPart part) { |
| } |
| |
| public void partOpened(IWorkbenchPart part) { |
| if (part instanceof PropertySheet) { |
| removePropertiesDropDownMenu(part); |
| } |
| } |
| }; |
| |
| private IPropertyChangeListener prefStoreListener; |
| |
| // private ProcessConfigurator configurator; |
| |
| private Suppression suppression; |
| |
| private boolean synchronizingSelection; |
| |
| private boolean inputChanged; |
| |
| public static final IAdapterFactoryProvider adapterFactoryProvider = new IAdapterFactoryProvider() { |
| |
| public AdapterFactory getCBSAdapterFactory() { |
| return TngAdapterFactory.INSTANCE.getProcessComposedAdapterFactory(); |
| } |
| |
| public AdapterFactory getTBSAdapterFactory() { |
| return TngAdapterFactory.INSTANCE.getOBS_ComposedAdapterFactory(); |
| } |
| |
| public AdapterFactory getWBSAdapterFactory() { |
| return TngAdapterFactory.INSTANCE.getWBS_ComposedAdapterFactory(); |
| } |
| |
| public AdapterFactory getWPBSAdapterFactory() { |
| return TngAdapterFactory.INSTANCE.getPBS_ComposedAdapterFactory(); |
| } |
| }; |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.epf.authoring.ui.editors.MethodElementEditor#isValidateResourcesBeforeSaveRequired() |
| */ |
| protected boolean isValidateResourcesBeforeSaveRequired() { |
| return true; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.epf.authoring.ui.editors.MethodElementEditor#createValidateResourceAction() |
| */ |
| protected LibraryValidateAction createValidateResourceAction() { |
| LibraryValidateAction validateAction = super.createValidateResourceAction(); |
| validateAction.putContextData(LibraryEValidator.CTX_ADAPTER_FACTORY_PROVIDER, |
| adapterFactoryProvider); |
| return validateAction; |
| } |
| |
| protected void inputChanged(Object newInput) { |
| inputChanged = false; |
| if (!(newInput instanceof MethodElementEditorInput)) |
| return; |
| MethodElementEditorInput methodElementInput = (MethodElementEditorInput) newInput; |
| |
| Object obj = methodElementInput.getMethodElement(); |
| if (obj instanceof ProcessComponent) { |
| selectedProcessComponent = (ProcessComponent) obj; |
| selectedProcess = (Process) ProcessUtil |
| .getTopBreakdownElement(selectedProcessComponent); |
| suppression = Suppression.getSuppression(selectedProcess); |
| |
| // for (Iterator iter = pages.iterator(); iter.hasNext();) { |
| // Object page = iter.next(); |
| // if(page instanceof ProcessBreakdownStructureFormPage) { |
| // ((ProcessBreakdownStructureFormPage)page).setProcess(proc); |
| // } |
| // } |
| |
| WBSTab.setProcess(selectedProcess); |
| OBSTab.setProcess(selectedProcess); |
| PBSTab.setProcess(selectedProcess); |
| procTab.setProcess(selectedProcess); |
| if (extensionTabs != null) { |
| for (int i = 0; i < extensionTabs.length; i++) { |
| if (extensionTabs[i] != null) { |
| extensionTabs[i].setProcess(selectedProcess); |
| } |
| } |
| } |
| |
| } |
| } |
| |
| // private String getTitlePrefix() { |
| // IEditorInput input = getEditorInput(); |
| // if (input instanceof MethodElementEditorInput) { |
| // Object obj = ((MethodElementEditorInput) input).getMethodElement(); |
| // if (obj instanceof ProcessComponent) { |
| // ProcessComponent pc = (ProcessComponent) obj; |
| // Process proc = pc.getProcess(); |
| // if (proc instanceof CapabilityPattern) { |
| // return LibraryUIText.TEXT_CAPABILITY_PATTERN; |
| // } else if (proc instanceof DeliveryProcess) { |
| // return LibraryUIText.TEXT_DELIVERY_PROCESS; |
| // } else if (proc instanceof ProcessContribution) { |
| // return LibraryUIText.TEXT_PROCESS_CONTRIBUTION; |
| // } |
| // } |
| // } |
| // return AuthoringUIResources |
| // .getString("AuthoringUI.ProcessEditor.Title"); //$NON-NLS-1$ |
| // } |
| |
| private Image getProcTitleImage() { |
| IEditorInput input = getEditorInput(); |
| if (input instanceof MethodElementEditorInput) { |
| Object obj = ((MethodElementEditorInput) input).getMethodElement(); |
| if (obj instanceof ProcessComponent) { |
| ProcessComponent pc = (ProcessComponent) obj; |
| Process proc = pc.getProcess(); |
| if (proc instanceof CapabilityPattern) { |
| return LibraryUIImages.IMG_CAPABILITY_PATTERN; |
| } else if (proc instanceof DeliveryProcess) { |
| return LibraryUIImages.IMG_DELIVERY_PROCESS; |
| } |
| } |
| } |
| return LibraryUIImages.IMG_PROCESS; |
| } |
| |
| /** |
| * Remove Properties view drop down menu |
| * |
| * @param part |
| */ |
| private void removePropertiesDropDownMenu(IWorkbenchPart part) { |
| if (part instanceof PropertySheet) { |
| IViewSite view = ((PropertySheet) part).getViewSite(); |
| |
| IMenuManager menuMgr = view.getActionBars().getMenuManager(); |
| // IContributionItem[] items = menuMgr.getItems(); |
| // for (int i=0; i < items.length; i++) |
| // { |
| // System.out.println("Id =" + i + " " + items[i].getId() + "$"); |
| // } |
| menuMgr.removeAll(); |
| menuMgr.updateAll(true); |
| } |
| } |
| |
| /** |
| * @see org.eclipse.ui.forms.editor.FormEditor#init(org.eclipse.ui.IEditorSite, |
| * org.eclipse.ui.IEditorInput) |
| */ |
| public void init(IEditorSite site, IEditorInput input) |
| throws PartInitException { |
| super.init(site, input); |
| |
| // TODO: need revisit |
| // site.setSelectionProvider(new FormEditorSelectionProvider(this)); |
| // actionManager = getActionManager(); |
| |
| List factories = new ArrayList(); |
| factories.add(new ResourceItemProviderAdapterFactory()); |
| factories.add(new ReflectiveItemProviderAdapterFactory()); |
| |
| adapterFactory = new ComposedAdapterFactory(factories); |
| |
| // Create the command stack that will notify this editor as commands are |
| // executed. |
| // |
| CommandStack commandStack = actionMgr.getCommandStack(); // new |
| // BasicCommandStack(); |
| |
| // Add a listener to set the most recent command's affected objects to |
| // be the selection of the viewer with focus. |
| // |
| commandStack.addCommandStackListener(new CommandStackListener() { |
| public void commandStackChanged(final EventObject event) { |
| boolean run = false; |
| if (event instanceof CommandStackChangedEvent) { |
| switch (((CommandStackChangedEvent) event).getType()) { |
| case CommandStackChangedEvent.EXECUTED: |
| case CommandStackChangedEvent.UNDO: |
| run = true; |
| break; |
| } |
| } else { |
| run = true; |
| } |
| if (run) { |
| Display.getCurrent().asyncExec(new Runnable() { |
| public void run() { |
| firePropertyChange(IEditorPart.PROP_DIRTY); |
| |
| // Try to select the affected objects. |
| // |
| Command mostRecentCommand = ((CommandStack) event |
| .getSource()).getMostRecentCommand(); |
| if (mostRecentCommand != null) { |
| if (mostRecentCommand instanceof CreateChildCommand |
| && currentViewer instanceof ProcessViewer) { |
| Object[] arr = mostRecentCommand |
| .getAffectedObjects().toArray(); |
| if (arr.length == 1) { |
| ProcessViewer viewer = (ProcessViewer) currentViewer; |
| viewer.editElement(arr[0], 0); |
| } |
| } else { |
| if (!(TngUtil.unwrap(mostRecentCommand) instanceof SetCommand)) { |
| setSelectionToViewer(mostRecentCommand |
| .getAffectedObjects()); |
| } |
| |
| } |
| } |
| // if (propertySheetPage != null) { |
| // propertySheetPage.refresh(); |
| // } |
| } |
| }); |
| } |
| } |
| }); |
| |
| // Create the editing domain with a special command stack. |
| editingDomain = new TraceableAdapterFactoryEditingDomain( |
| adapterFactory, commandStack); |
| |
| LibraryService.getInstance().addListener(libSvcListener); |
| ILibraryManager manager = (ILibraryManager) LibraryService |
| .getInstance().getCurrentLibraryManager(); |
| if (manager != null) { |
| manager.addListener(libraryListener); |
| manager.startListeningTo(actionMgr.getCommandStack()); |
| |
| // TODO: need to revisit this code |
| if (!addAdapterFactoryListeners) { |
| addAdapterFactoryListeners = true; |
| manager.startListeningTo(TngAdapterFactory.INSTANCE |
| .getWBS_ComposedAdapterFactory()); |
| manager.startListeningTo(TngAdapterFactory.INSTANCE |
| .getOBS_ComposedAdapterFactory()); |
| manager.startListeningTo(TngAdapterFactory.INSTANCE |
| .getPBS_ComposedAdapterFactory()); |
| } |
| } |
| |
| setPartName(input.getName()); |
| setTitleImage(getProcTitleImage()); |
| |
| // get method element object from Editor input |
| MethodElementEditorInput methodElementInput = (MethodElementEditorInput) input; |
| elementObj = methodElementInput.getMethodElement(); |
| |
| if (elementObj instanceof ProcessComponent) { |
| selectedProcessComponent = ((ProcessComponent) elementObj); |
| selectedProcess = selectedProcessComponent.getProcess(); |
| } |
| |
| if (selectedProcessComponent != null) { |
| selectedProcessComponent.eAdapters().add(processComponentListener); |
| } |
| |
| // listen to resource change to update dirty flag |
| // |
| // addResourceChangedListener(); |
| |
| // add part listener to listen to propertySheet close event |
| getSite().getWorkbenchWindow().getPartService().addPartListener( |
| partActivationListener); |
| |
| // inputChanged(input); |
| |
| // listen to the change of column list in preference store |
| // |
| if (prefStoreListener == null) { |
| prefStoreListener = new IPropertyChangeListener() { |
| |
| public void propertyChange(PropertyChangeEvent event) { |
| ProcessBreakdownStructureFormPage page = null; |
| if (event.getProperty().equals( |
| ApplicationPreferenceConstants.PREF_WBS_COLUMNS)) { |
| page = WBSTab; |
| } else if (event.getProperty().equals( |
| ApplicationPreferenceConstants.PREF_TBS_COLUMNS)) { |
| page = OBSTab; |
| } else if (event.getProperty().equals( |
| ApplicationPreferenceConstants.PREF_WPBS_COLUMNS)) { |
| page = PBSTab; |
| } |
| if (page != null) { |
| ColumnDescriptor[] cols = toColumnDescriptors(getPreferenceStore().getString( |
| event.getProperty())); |
| page.updateColumns(cols); |
| if (page == WBSTab || page == OBSTab) { |
| // update consolidated view as well |
| // |
| // get WBS columns |
| List list = toColumnDescriptorList(getPreferenceStore() |
| .getString(ApplicationPreferenceConstants.PREF_WBS_COLUMNS)); |
| |
| // get TBS columns |
| ColumnDescriptor[] teamColumnDescriptors = toColumnDescriptors(getPreferenceStore() |
| .getString(ApplicationPreferenceConstants.PREF_TBS_COLUMNS)); |
| |
| // if TBS columns has TEAM column then add to consolidated view |
| for (int i = 0; i < teamColumnDescriptors.length; i++) { |
| ColumnDescriptor colDesc = teamColumnDescriptors[i]; |
| if (colDesc == COL_DESC_TEAM) { |
| list.add(colDesc); |
| break; |
| } |
| } |
| |
| ColumnDescriptor[] columns = new ColumnDescriptor[list.size()]; |
| list.toArray(columns); |
| procTab.updateColumns(columns); |
| } |
| } |
| } |
| |
| }; |
| } |
| |
| getPreferenceStore() |
| .addPropertyChangeListener(prefStoreListener); |
| |
| } |
| |
| /** |
| * This sets the selection into whichever viewer is active. |
| * |
| */ |
| public void setSelectionToViewer(Collection collection) { |
| // System.out.println(getClass().getName() + ".setSelectionToViewer: |
| // selection="+collection); |
| final Collection theSelection = collection; |
| // Make sure it's okay. |
| // |
| if (theSelection != null && !theSelection.isEmpty()) { |
| // I don't know if this should be run this deferred |
| // because we might have to give the editor a chance to process the |
| // viewer update events |
| // and hence to update the views first. |
| // |
| // |
| Runnable runnable = new Runnable() { |
| public void run() { |
| // Try to select the items in the current content viewer of |
| // the editor. |
| // |
| if (currentViewer != null) { |
| currentViewer.setSelection(new StructuredSelection( |
| theSelection.toArray()), true); |
| |
| } |
| } |
| }; |
| runnable.run(); |
| } |
| } |
| |
| public EditingDomainActionBarContributor getActionBarContributor() { |
| return (EditingDomainActionBarContributor) getEditorSite() |
| .getActionBarContributor(); |
| } |
| |
| public void dispose() { |
| getPreferenceStore() |
| .removePropertyChangeListener(prefStoreListener); |
| |
| // ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener); |
| // |
| // getSite().getPage().removePartListener(partListener); |
| |
| adapterFactory.dispose(); |
| |
| if (getActionBarContributor().getActiveEditor() == this) { |
| getActionBarContributor().setActiveEditor(null); |
| } |
| |
| if (propertySheetPage != null) { |
| propertySheetPage.dispose(); |
| } |
| |
| ILibraryManager manager = LibraryService.getInstance() |
| .getCurrentLibraryManager(); |
| if (manager != null) { |
| manager.removeListener(libraryListener); |
| manager.stopListeningTo(editingDomain.getCommandStack()); |
| } |
| LibraryService.getInstance().removeListener(libSvcListener); |
| |
| if (selectedProcessComponent != null) { |
| selectedProcessComponent.eAdapters().remove( |
| processComponentListener); |
| } |
| |
| // removeResourceChangedListener(); |
| |
| getSite().getWorkbenchWindow().getPartService().removePartListener( |
| partActivationListener); |
| |
| boolean saveNeeded = isDirty(); |
| |
| super.dispose(); |
| |
| // call this to set modified flag of suppression to false |
| // |
| suppression.saveIsDone(); |
| |
| if (saveNeeded) { |
| // user discarded all the changes, save the resources after changes |
| // are undone. |
| // TODO: reload the process component resource instead since it is |
| // not shared. |
| // |
| // for (Iterator iter = resources.iterator(); iter.hasNext();) { |
| // Resource resource = (Resource) iter.next(); |
| // saveResource(resource); |
| // } |
| } |
| } |
| |
| private void addDescriptionPage() throws PartInitException { |
| if (selectedProcess instanceof DeliveryProcess) { |
| // Delivery Process |
| addPage(0, new DeliveryProcessDescription(this)); |
| } else { |
| // Capability Pattern |
| // Process Contribution |
| addPage(0, new ProcessDescription(this)); |
| } |
| } |
| |
| /** |
| * @see org.eclipse.ui.forms.editor.FormEditor#addPages() |
| */ |
| protected void addPages() { |
| try { |
| addDescriptionPage(); |
| |
| AdapterFactory adapterFactory; |
| |
| // create DND transfer objects |
| // int dndOperations = DND.DROP_COPY | DND.DROP_LINK; |
| // Transfer[] transfers = new Transfer[] |
| // {LocalTransfer.getInstance() }; |
| |
| // preference is managed by library plugin, |
| // since this preferences is also used for browsing and publishing |
| // Jinhua Xi 08/21/2006 |
| // IPreferenceStore store = AuthoringUIPlugin.getDefault() |
| // .getPreferenceStore(); |
| PreferenceUtil.validatePreferences(); |
| IPreferenceStore store = getPreferenceStore(); |
| |
| List pages = new ArrayList(); |
| |
| // WBS tab |
| WBSTab = new ProcessBreakdownStructureFormPage(this, WBS_FORM_ID, |
| AuthoringUIResources.ProcessEditor_WorkBreakdownStructure); //$NON-NLS-1$ |
| ColumnDescriptor[] columnDescriptors = toColumnDescriptors(store |
| .getString(ApplicationPreferenceConstants.PREF_WBS_COLUMNS)); |
| adapterFactory = TngAdapterFactory.INSTANCE |
| .getWBS_ComposedAdapterFactory(); |
| currentConfig = LibraryService.getInstance() |
| .getCurrentMethodConfiguration(); |
| ProcessAuthoringConfigurator.INSTANCE |
| .setMethodConfiguration(currentConfig); |
| if (adapterFactory instanceof ConfigurableComposedAdapterFactory) { |
| ((ConfigurableComposedAdapterFactory) adapterFactory) |
| .setFilter(ProcessAuthoringConfigurator.INSTANCE); |
| } |
| WBSTab.setAdapterFactory(adapterFactory); |
| WBSTab.setColumnDescriptors(columnDescriptors); |
| int id = addPage(WBSTab.createControl(getContainer())); |
| setPageText(id, WBSTab.getTitle()); |
| WBSTab.setTabIndex(id); |
| StructuredViewer viewer = (StructuredViewer) WBSTab.getViewer(); |
| createContextMenuFor(viewer); |
| pages.add(WBSTab); |
| // viewer.addDropSupport(dndOperations, transfers, new |
| // ProcessEditorDropAdapter(editingDomain, viewer)); |
| // viewer.addDoubleClickListener(new IDoubleClickListener() |
| // { |
| // public void doubleClick(DoubleClickEvent event) |
| // { |
| // UIActionDispatcher.getInstance().handleDoubleClickEvent(event); |
| // // System.out.println("double clicked ..."); |
| // // |
| // // StructuredSelection selection = (StructuredSelection) |
| // event.getSelection(); |
| // // System.out.println("sel"+selection.getFirstElement()); |
| // // |
| // ProductEditorView.getView().getProductViewer().setInput(selection.getFirstElement()); |
| // } |
| // }); |
| // addPage(WBSTab); |
| |
| // OBS tab |
| OBSTab = new ProcessBreakdownStructureFormPage(this, TA_FORM_ID, |
| AuthoringUIResources.ProcessEditor_TeamAllocation); //$NON-NLS-1$ |
| columnDescriptors = toColumnDescriptors(store |
| .getString(ApplicationPreferenceConstants.PREF_TBS_COLUMNS)); |
| // setColumnIndexToNameMap(TngAdapterFactory.INSTANCE.getOBS_AdapterFactories(), |
| // columnDescriptors); |
| adapterFactory = TngAdapterFactory.INSTANCE |
| .getOBS_ComposedAdapterFactory(); |
| if (adapterFactory instanceof ConfigurableComposedAdapterFactory) { |
| ((ConfigurableComposedAdapterFactory) adapterFactory) |
| .setFilter(ProcessAuthoringConfigurator.INSTANCE); |
| } |
| OBSTab.setAdapterFactory(adapterFactory); |
| OBSTab.setColumnDescriptors(columnDescriptors); |
| id = addPage(OBSTab.createControl(getContainer())); |
| setPageText(id, OBSTab.getTitle()); |
| OBSTab.setTabIndex(id); |
| viewer = (StructuredViewer) OBSTab.getViewer(); |
| createContextMenuFor(viewer); |
| pages.add(OBSTab); |
| // viewer.addDropSupport(dndOperations, transfers, new |
| // ProcessEditorDropAdapter(editingDomain, viewer)); |
| // addPage(OBSTab); |
| |
| // PBS tab |
| PBSTab = new ProcessBreakdownStructureFormPage(this, WPBS_FORM_ID, |
| AuthoringUIResources.ProcessEditor_WorkProductUsage); //$NON-NLS-1$ |
| columnDescriptors = toColumnDescriptors(store |
| .getString(ApplicationPreferenceConstants.PREF_WPBS_COLUMNS)); |
| // setColumnIndexToNameMap(TngAdapterFactory.INSTANCE.getPBS_AdapterFactories(), |
| // columnDescriptors); |
| adapterFactory = TngAdapterFactory.INSTANCE |
| .getPBS_ComposedAdapterFactory(); |
| if (adapterFactory instanceof ConfigurableComposedAdapterFactory) { |
| ((ConfigurableComposedAdapterFactory) adapterFactory) |
| .setFilter(ProcessAuthoringConfigurator.INSTANCE); |
| } |
| PBSTab.setAdapterFactory(adapterFactory); |
| PBSTab.setColumnDescriptors(columnDescriptors); |
| id = addPage(PBSTab.createControl(getContainer())); |
| setPageText(id, PBSTab.getTitle()); |
| PBSTab.setTabIndex(id); |
| viewer = (StructuredViewer) PBSTab.getViewer(); |
| createContextMenuFor(viewer); |
| pages.add(PBSTab); |
| // viewer.addDropSupport(dndOperations, transfers, new |
| // ProcessEditorDropAdapter(editingDomain, viewer)); |
| // addPage(PBSTab); |
| |
| // consolidated tab |
| procTab = new ProcessBreakdownStructureFormPage(this, |
| CONSOLIDATED_FORM_ID, |
| AuthoringUIResources.ProcessEditor_ConsolidatedView); //$NON-NLS-1$ |
| procTab.setReadOnly(true); |
| adapterFactory = TngAdapterFactory.INSTANCE |
| .getProcessComposedAdapterFactory(); |
| if (adapterFactory instanceof ConfigurableComposedAdapterFactory) { |
| ((ConfigurableComposedAdapterFactory) adapterFactory) |
| .setFilter(ProcessAuthoringConfigurator.INSTANCE); |
| } |
| procTab.setAdapterFactory(adapterFactory); |
| // columnDescriptors = toColumnDescriptors(store |
| // .getString(ApplicationPreferenceConstants.PREF_WBS_COLUMNS)); |
| // |
| // get WBS columns |
| List list = toColumnDescriptorList(store |
| .getString(ApplicationPreferenceConstants.PREF_WBS_COLUMNS)); |
| |
| // get TBS columns |
| ColumnDescriptor[] teamColumnDescriptors = toColumnDescriptors(store |
| .getString(ApplicationPreferenceConstants.PREF_TBS_COLUMNS)); |
| |
| // if TBS columns has TEAM column then add to consolidated view |
| for (int i = 0; i < teamColumnDescriptors.length; i++) { |
| ColumnDescriptor colDesc = teamColumnDescriptors[i]; |
| if (colDesc == COL_DESC_TEAM) { |
| list.add(colDesc); |
| break; |
| } |
| } |
| |
| ColumnDescriptor[] columns = new ColumnDescriptor[list.size()]; |
| list.toArray(columns); |
| procTab.setColumnDescriptors(columns); |
| |
| id = addPage(procTab.createControl(getContainer())); |
| setPageText(id, procTab.getTitle()); |
| procTab.setTabIndex(id); |
| viewer = (StructuredViewer) procTab.getViewer(); |
| createContextMenuFor(viewer); |
| pages.add(procTab); |
| |
| // check for extenstion point and add the page if there |
| List pageProviders = ProcessEditorPageProvider.getInstance() |
| .getPageProviders(); |
| |
| if (pageProviders != null && pageProviders.size() > 0) { |
| try { |
| extensionTabs = new ProcessBreakdownStructureFormPage[pageProviders |
| .size()]; |
| for (int i = 0; i < pageProviders.size(); i++) { |
| Object page = pageProviders.get(i); |
| if (page instanceof IExtensionFormPage) { |
| |
| IExtensionFormPage formPage = (IExtensionFormPage) page; |
| IFormPage control = formPage.setEditor(this); |
| formPage.setInput(selectedProcess); |
| ProcessBreakdownStructureFormPage extendedPage = null; |
| if (control instanceof ProcessBreakdownStructureFormPage) { |
| extendedPage = (ProcessBreakdownStructureFormPage) control; |
| extensionTabs[i] = extendedPage; |
| } |
| |
| id = addPage(extendedPage |
| .createControl(getContainer())); |
| setPageText(id, extendedPage.getTitle()); |
| extendedPage.setTabIndex(id); |
| viewer = (StructuredViewer) extendedPage |
| .getViewer(); |
| createContextMenuFor(viewer); |
| |
| pages.add(extendedPage); |
| } |
| } |
| } catch (Exception e) { |
| e.printStackTrace(); |
| } |
| } |
| |
| bsPages = new ProcessBreakdownStructureFormPage[pages.size()]; |
| for (int i = 0; i < pages.size(); i++) { |
| bsPages[i] = (ProcessBreakdownStructureFormPage) pages.get(i); |
| } |
| |
| // bsPages = new ProcessBreakdownStructureFormPage[] { WBSTab, |
| // OBSTab, |
| // PBSTab, procTab }; |
| |
| // if(getEditorInput() instanceof ProcessEditorInput) { |
| // int pageId = |
| // ((ProcessEditorInput)getEditorInput()).getActivePage(); |
| // if(pageId != -1) { |
| // setActivePage(0); |
| // setActivePage(pageId); |
| // } |
| // } |
| |
| inputChanged(getEditorInput()); |
| } catch (PartInitException e) { |
| AuthoringUIPlugin.getDefault().getLogger().logError(e); |
| e.printStackTrace(); |
| } |
| } |
| |
| protected void setActivePage(int pageIndex) { |
| super.setActivePage(pageIndex); |
| |
| // work around for active page that is not a form page. Super method |
| // does not call pageChange() in this case |
| // |
| handlePageChange(); |
| if (pageIndex > 0 && bsPages.length <= pageIndex) { |
| Viewer viewer = bsPages[pageIndex].getViewer(); |
| ISelection selection = viewer.getSelection(); |
| if (selection == null || selection.isEmpty()) { |
| ISelection initialSelection = null; |
| if (getEditorInput() instanceof ProcessEditorInput) { |
| initialSelection = ((ProcessEditorInput) getEditorInput()) |
| .getInitialSelection(); |
| } |
| if (initialSelection == null) { |
| selection = new StructuredSelection(selectedProcess); |
| } else { |
| selection = initialSelection; |
| } |
| viewer.setSelection(selection, true); |
| } |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.forms.editor.FormEditor#setActivePage(java.lang.String) |
| */ |
| public IFormPage setActivePage(String pageId) { |
| int id = -1; |
| IFormPage activePage = null; |
| for (int i = 0; i < pages.size(); i++) { |
| Object page = pages.get(i); |
| if (page instanceof IFormPage) { |
| IFormPage fpage = (IFormPage) page; |
| if (fpage.getId().equals(pageId)) { |
| id = i; |
| activePage = fpage; |
| break; |
| } |
| } |
| } |
| if(id == -1) { |
| for (int i = 0; i < bsPages.length; i++) { |
| ProcessBreakdownStructureFormPage page = bsPages[i]; |
| if (page.getId().equals(pageId)) { |
| id = page.getTabIndex(); |
| activePage = page; |
| break; |
| } |
| } |
| } |
| if(id == -1 && extensionTabs != null) { |
| for (int i = 0; i < extensionTabs.length; i++) { |
| ProcessBreakdownStructureFormPage page = extensionTabs[i]; |
| if (page.getId().equals(pageId)) { |
| id = page.getTabIndex(); |
| activePage = page; |
| break; |
| } |
| } |
| } |
| |
| if(activePage != null) { |
| setActivePage(id); |
| return activePage; |
| } |
| return null; |
| } |
| |
| private void handlePageChange() { |
| int id = getActivePage(); |
| if (id != -1) { |
| Object page = pages.get(id); |
| if (page instanceof ProcessDescription) { |
| ((ProcessDescription) page).setFormText(); |
| } |
| if (id == WBSTab.getTabIndex()) { |
| setCurrentViewer(WBSTab.getViewer()); |
| } else if (id == OBSTab.getTabIndex()) { |
| setCurrentViewer(OBSTab.getViewer()); |
| } else if (id == PBSTab.getTabIndex()) { |
| setCurrentViewer(PBSTab.getViewer()); |
| } else if (id == procTab.getTabIndex()) { |
| setCurrentViewer(procTab.getViewer()); |
| } else if (extensionTabs != null) { |
| for (int i = 0; i < extensionTabs.length; i++) { |
| if (extensionTabs[i] != null && id == extensionTabs[i].getTabIndex()) |
| setCurrentViewer(extensionTabs[i].getViewer()); |
| } |
| } else { |
| setCurrentViewer(null); |
| } |
| |
| if (propertySheetPage != null) { |
| propertySheetPage.refresh(); |
| } |
| } |
| } |
| |
| protected void pageChange(int newPageIndex) { |
| super.pageChange(newPageIndex); |
| handlePageChange(); |
| } |
| |
| /** |
| * Create context menu for the give viewer |
| * @param viewer |
| */ |
| public void createContextMenuFor(final StructuredViewer viewer) { |
| MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$ |
| contextMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); |
| contextMenu.setRemoveAllWhenShown(true); |
| contextMenu.addMenuListener(this); |
| Menu menu = contextMenu.createContextMenu(viewer.getControl()); |
| viewer.getControl().setMenu(menu); |
| getSite().registerContextMenu(contextMenu, viewer); |
| |
| viewer.addSelectionChangedListener(new ISelectionChangedListener() { |
| public void selectionChanged(SelectionChangedEvent event) { |
| IStructuredSelection sel = (IStructuredSelection) event |
| .getSelection(); |
| setSelection(sel); |
| } |
| }); |
| |
| int dndOperations = DND.DROP_LINK | DND.DROP_COPY; |
| Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() }; |
| viewer.addDropSupport(dndOperations, transfers, |
| new ProcessEditorDropAdapter(editingDomain, viewer)); |
| } |
| |
| private void setCurrentViewer(Viewer viewer) { |
| // If it is changing... |
| // |
| if (currentViewer != viewer) { |
| if (selectionChangedListener == null) { |
| // Create the listener on demand. |
| // |
| selectionChangedListener = new ISelectionChangedListener() { |
| // This just notifies those things that are affected by the |
| // section. |
| // |
| public void selectionChanged( |
| SelectionChangedEvent selectionChangedEvent) { |
| setSelection(selectionChangedEvent.getSelection()); |
| } |
| }; |
| } |
| |
| // Stop listening to the old one. |
| // |
| if (currentViewer != null) { |
| currentViewer |
| .removeSelectionChangedListener(selectionChangedListener); |
| } |
| |
| // Start listening to the new one. |
| // |
| if (viewer != null) { |
| viewer.addSelectionChangedListener(selectionChangedListener); |
| } |
| |
| // Remember it. |
| // |
| currentViewer = viewer; |
| |
| // Set adapter factory of editingDomain to that of the current view |
| // |
| if (currentViewer instanceof ProcessViewer) { |
| IContentProvider contentProvider = ((ProcessViewer) currentViewer) |
| .getContentProvider(); |
| if (contentProvider instanceof AdapterFactoryContentProvider) { |
| AdapterFactoryContentProvider adapterFactoryContentProvider = ((AdapterFactoryContentProvider) contentProvider); |
| AdapterFactory adapterFactory = adapterFactoryContentProvider |
| .getAdapterFactory(); |
| if (adapterFactory instanceof EditingDomainComposedAdapterFactory) { |
| ((EditingDomainComposedAdapterFactory) adapterFactory) |
| .setEditingDomain(editingDomain); |
| } else { |
| editingDomain.setAdapterFactory(adapterFactory); |
| } |
| |
| if (propContentProvider != null) { |
| propContentProvider.setAdapterFactory(adapterFactory); |
| } |
| } |
| } |
| |
| // Set the editors selection based on the current viewer's |
| // selection. |
| // |
| setSelection(currentViewer == null ? StructuredSelection.EMPTY |
| : currentViewer.getSelection()); |
| |
| } |
| } |
| |
| private static Activity getParentActivity(BreakdownElement e, |
| AdapterFactory adapterFactory) { |
| Activity act = UmaUtil.getParentActivity(e); |
| if (act != null) { |
| return act; |
| } |
| |
| // TODO: handle element that does not directly belong to an activity |
| // (like deliverable part of a deliverable descriptor) |
| // |
| |
| return null; |
| } |
| |
| private static AdapterFactory getAdapterFactory(StructuredViewer viewer) { |
| return ((AdapterFactoryContentProvider) viewer.getContentProvider()) |
| .getAdapterFactory(); |
| } |
| |
| private static void setSelectionToViewer(Viewer viewer, |
| IStructuredSelection otherSel, boolean alternateSelection) { |
| if (alternateSelection) { |
| IStructuredSelection sel = (IStructuredSelection) viewer |
| .getSelection(); |
| Object currentSelection = null; |
| if (sel.size() == 1) { |
| currentSelection = sel.getFirstElement(); |
| if (currentSelection instanceof BreakdownElement) { |
| Activity act = getParentActivity( |
| (BreakdownElement) currentSelection, |
| getAdapterFactory((StructuredViewer) viewer)); |
| if (act != otherSel.getFirstElement()) { |
| viewer.setSelection(otherSel, true); |
| } |
| } |
| } else { |
| viewer.setSelection(otherSel, true); |
| } |
| } else { |
| viewer.setSelection(otherSel, true); |
| } |
| } |
| |
| /** |
| * @see org.eclipse.jface.viewers.ISelectionProvider#setSelection(org.eclipse.jface.viewers.ISelection) |
| */ |
| public void setSelection(ISelection selection) { |
| if (synchronizingSelection) { |
| return; |
| } |
| |
| // // check if the resources of selected objects are out of synch or any |
| // of the selected objects |
| // // became proxy then refresh them if needed |
| // // |
| // if(refreshOutOfSynch(selection)) { |
| // return; |
| // } |
| |
| viewSelection = selection; |
| ArrayList listenerList = new ArrayList(selectionChangedListeners); |
| |
| for (int i = 0; i < listenerList.size(); i++) { |
| ISelectionChangedListener listener = (ISelectionChangedListener) listenerList |
| .get(i); |
| listener |
| .selectionChanged(new SelectionChangedEvent(this, selection)); |
| } |
| |
| // synchronize selection in all BS views if only one element is selected |
| // |
| synchronizeSelection(selection, currentViewer); |
| } |
| |
| /** |
| * @param selection |
| * @return |
| */ |
| private boolean refreshOutOfSynch(ISelection selection) { |
| if (currentViewer != null && selection instanceof IStructuredSelection) { |
| boolean refreshRequired = false; |
| IStructuredSelection sel = (IStructuredSelection) selection; |
| HashSet resources = new HashSet(); |
| for (Iterator iter = sel.iterator(); iter.hasNext();) { |
| Object e = TngUtil.unwrap(iter.next()); |
| if (e instanceof EObject) { |
| EObject eObject = ((EObject) e); |
| if (eObject.eIsProxy()) { |
| eObject = RefreshJob.getInstance().resolve(eObject); |
| refreshRequired = true; |
| } |
| Resource resource = eObject.eResource(); |
| if (resource != null) { |
| resources.add(resource); |
| } |
| } |
| } |
| if (!resources.isEmpty()) { |
| ArrayList removedResources = new ArrayList(); |
| ArrayList changedResources = new ArrayList(); |
| ResourceUtil.checkOutOfSynchResources(resources, |
| removedResources, changedResources); |
| if (!removedResources.isEmpty() || !changedResources.isEmpty()) { |
| boolean ret = promptReloadFiles(); |
| if (ret) { |
| // unload the removed resources |
| // |
| if (!removedResources.isEmpty()) { |
| for (Iterator iter = removedResources.iterator(); iter |
| .hasNext();) { |
| MultiFileXMIResourceImpl resource = (MultiFileXMIResourceImpl) iter |
| .next(); |
| try { |
| resource.unloadWithoutRemove(); |
| } catch (Exception e) { |
| CommonPlugin.INSTANCE.log(e); |
| } |
| } |
| } |
| |
| Collection reloadedResources = null; |
| if (!changedResources.isEmpty()) { |
| // Reload the changed resources. |
| ILibraryManager manager = (ILibraryManager) LibraryService |
| .getInstance().getCurrentLibraryManager(); |
| if (manager != null) { |
| reloadedResources = manager |
| .reloadResources(changedResources); |
| } |
| } |
| |
| if (!removedResources.isEmpty() |
| || reloadedResources != null) { |
| refreshRequired = true; |
| } |
| |
| // refresh out-of-synch resources |
| // |
| for (Iterator iter = changedResources.iterator(); iter |
| .hasNext();) { |
| FileManager.getInstance().refresh( |
| (Resource) iter.next()); |
| } |
| } |
| } |
| } |
| if (refreshRequired) { |
| currentViewer.refresh(); |
| return true; |
| } |
| } |
| |
| return false; |
| } |
| |
| /** |
| * @param selection |
| */ |
| private void synchronizeSelection(ISelection selection, Viewer currentViewer) { |
| try { |
| synchronizingSelection = true; |
| if (currentViewer != null |
| && selection instanceof IStructuredSelection) { |
| IStructuredSelection sel = (IStructuredSelection) selection; |
| if (sel.size() == 1) { |
| Object selected = sel.getFirstElement(); |
| IStructuredSelection otherSel = null; |
| boolean alternateSelection = false; |
| ArrayList selectedPath = null; |
| AdapterFactory adapterFactory = getAdapterFactory((StructuredViewer) currentViewer); |
| if (selected instanceof BreakdownElementWrapperItemProvider) { |
| if (((BreakdownElementWrapperItemProvider) selected) |
| .isReadOnly()) { |
| if (adapterFactory != null) { |
| // get path |
| // |
| Object e = TngUtil.unwrap(selected); |
| selectedPath = new ArrayList(); |
| ITreeItemContentProvider adapter = (ITreeItemContentProvider) selected; |
| do { |
| selectedPath.add(0, e); |
| Object parent = adapter.getParent(e); |
| if (parent == null) { |
| break; |
| } |
| if (parent instanceof BreakdownElementWrapperItemProvider) { |
| adapter = (ITreeItemContentProvider) parent; |
| e = TngUtil.unwrap(parent); |
| } else { |
| adapter = (ITreeItemContentProvider) adapterFactory |
| .adapt( |
| parent, |
| ITreeItemContentProvider.class); |
| e = parent; |
| } |
| } while (true); |
| } |
| } else if (procTab.getViewer() == currentViewer) { |
| selected = TngUtil.unwrap(selected); |
| selection = new StructuredSelection(selected); |
| } else if (extensionTabs != null) { |
| for (int i = 0; i < extensionTabs.length; i++) { |
| if (extensionTabs[i].getViewer() == currentViewer) { |
| selected = TngUtil.unwrap(selected); |
| selection = new StructuredSelection( |
| selected); |
| |
| } |
| } |
| } |
| } |
| if (selected instanceof BreakdownElement) { |
| if (procTab.getViewer() != currentViewer) { |
| procTab.getViewer().setSelection(selection, false); |
| } |
| if (extensionTabs != null) { |
| for (int i = 0; i < extensionTabs.length; i++) { |
| if (extensionTabs[i].getViewer() != currentViewer) |
| extensionTabs[i].getViewer().setSelection( |
| selection, false); |
| } |
| } |
| |
| if (selected instanceof Activity |
| || selected instanceof Milestone) { |
| otherSel = (IStructuredSelection) selection; |
| } else { |
| Activity act = getParentActivity( |
| (BreakdownElement) selected, adapterFactory); |
| if (act != null) { |
| otherSel = new StructuredSelection(act); |
| alternateSelection = true; |
| } |
| } |
| } |
| if (otherSel != null) { |
| // own element is selected |
| // |
| Viewer viewer = WBSTab.getViewer(); |
| if (viewer != currentViewer) { |
| if (selected instanceof WorkBreakdownElement) { |
| viewer.setSelection(selection, false); |
| } else { |
| setSelectionToViewer(viewer, otherSel, |
| alternateSelection); |
| } |
| } |
| viewer = OBSTab.getViewer(); |
| if (viewer != currentViewer) { |
| if (selected instanceof RoleDescriptor) { |
| viewer.setSelection(selection, false); |
| } else { |
| setSelectionToViewer(viewer, otherSel, |
| alternateSelection); |
| } |
| } |
| viewer = PBSTab.getViewer(); |
| if (viewer != currentViewer) { |
| if (selected instanceof WorkProductDescriptor) { |
| viewer.setSelection(selection, false); |
| } else { |
| setSelectionToViewer(viewer, otherSel, |
| alternateSelection); |
| } |
| } |
| } else if (selectedPath != null) { |
| // inherited element is selected |
| // |
| Viewer viewer = WBSTab.getViewer(); |
| if (viewer != currentViewer) { |
| selection = new StructuredSelection(findSelection( |
| selectedPath, WBSTab.getAdapterFactory())); |
| viewer.setSelection(selection, false); |
| } |
| viewer = OBSTab.getViewer(); |
| if (viewer != currentViewer) { |
| selection = new StructuredSelection(findSelection( |
| selectedPath, OBSTab.getAdapterFactory())); |
| viewer.setSelection(selection, false); |
| } |
| viewer = PBSTab.getViewer(); |
| if (viewer != currentViewer) { |
| selection = new StructuredSelection(findSelection( |
| selectedPath, PBSTab.getAdapterFactory())); |
| viewer.setSelection(selection, false); |
| } |
| viewer = procTab.getViewer(); |
| if (viewer != currentViewer) { |
| selection = new StructuredSelection(findSelection( |
| selectedPath, procTab.getAdapterFactory())); |
| viewer.setSelection(selection, false); |
| } |
| |
| if (extensionTabs != null) { |
| for (int i = 0; i < extensionTabs.length; i++) { |
| viewer = extensionTabs[i].getViewer(); |
| if (viewer != currentViewer) { |
| selection = new StructuredSelection( |
| findSelection( |
| selectedPath, |
| extensionTabs[i] |
| .getAdapterFactory())); |
| viewer.setSelection(selection, false); |
| } |
| } |
| } |
| } |
| } |
| } |
| } finally { |
| synchronizingSelection = false; |
| } |
| } |
| |
| private static Object findSelection(List selectedPath, |
| AdapterFactory adapterFactory) { |
| int size = selectedPath.size(); |
| if (size == 0) { |
| return null; |
| } |
| Object e = selectedPath.get(0); |
| Object selection = e; |
| ITreeItemContentProvider adapter = (ITreeItemContentProvider) adapterFactory |
| .adapt(e, ITreeItemContentProvider.class); |
| Collection children = adapter.getChildren(e); |
| find_selection: for (int i = 1; i < size; i++) { |
| e = selectedPath.get(i); |
| for (Iterator iter = children.iterator(); iter.hasNext();) { |
| Object child = iter.next(); |
| Object element = TngUtil.unwrap(child); |
| if (element == e) { |
| selection = child; |
| adapter = (ITreeItemContentProvider) adapterFactory.adapt( |
| child, ITreeItemContentProvider.class); |
| children = adapter.getChildren(e); |
| continue find_selection; |
| } |
| } |
| break find_selection; |
| } |
| return selection; |
| } |
| |
| // Implements ISelectionProvider |
| // |
| public void addSelectionChangedListener(ISelectionChangedListener listener) { |
| selectionChangedListeners.add(listener); |
| } |
| |
| public void removeSelectionChangedListener( |
| ISelectionChangedListener listener) { |
| selectionChangedListeners.remove(listener); |
| } |
| |
| /** |
| * @see org.eclipse.jface.viewers.ISelectionProvider#getSelection() |
| */ |
| public ISelection getSelection() { |
| return viewSelection; |
| } |
| |
| /** |
| * @see org.eclipse.emf.edit.domain.IEditingDomainProvider#getEditingDomain() |
| */ |
| public EditingDomain getEditingDomain() { |
| return editingDomain; |
| } |
| |
| /** |
| * @see org.eclipse.emf.common.ui.viewer.IViewerProvider#getViewer() |
| */ |
| public Viewer getViewer() { |
| return currentViewer; |
| } |
| |
| /** |
| * Gets the adapter factory of the current page if there is any |
| * |
| * @return |
| * Adapter Factory of the current page of the editor |
| */ |
| public AdapterFactory getAdapterFactory() { |
| IFormPage page = getActivePageInstance(); |
| if (page instanceof ProcessBreakdownStructureFormPage) { |
| return ((ProcessBreakdownStructureFormPage) page) |
| .getAdapterFactory(); |
| } |
| |
| return null; |
| } |
| |
| /** |
| * @see org.eclipse.jface.action.IMenuListener#menuAboutToShow(org.eclipse.jface.action.IMenuManager) |
| */ |
| public void menuAboutToShow(IMenuManager menuManager) { |
| ((IMenuListener) getEditorSite().getActionBarContributor()) |
| .menuAboutToShow(menuManager); |
| |
| // populate contributed menu items |
| // |
| IFormPage activePage = getActivePageInstance(); |
| if(activePage instanceof ProcessBreakdownStructureFormPage) { |
| IAction[] actions = ((ProcessBreakdownStructureFormPage)activePage).getAdditionalActions(); |
| if(actions != null && actions.length > 0) { |
| menuManager.insertAfter(IWorkbenchActionConstants.MB_ADDITIONS, new Separator()); |
| for (int i = 0; i < actions.length; i++) { |
| IAction action = actions[i]; |
| ISelection selection = getSelection(); |
| if(selection instanceof IStructuredSelection && action instanceof BaseSelectionListenerAction) { |
| ((BaseSelectionListenerAction)action).selectionChanged((IStructuredSelection) selection); |
| } |
| if (action instanceof IWorkbenchPartAction) { |
| ((IWorkbenchPartAction) action) |
| .setActiveWorkbenchPart(this); |
| } |
| menuManager.insertAfter(IWorkbenchActionConstants.MB_ADDITIONS, action); |
| } |
| } |
| } |
| } |
| |
| /** |
| * Return property sheet page |
| * @return |
| * PropertySheet Page |
| */ |
| public IPropertySheetPage getPropertySheetPage() { |
| if (propertySheetPage == null) { |
| propertySheetPage = new EPFPropertySheetPage(this); |
| // { |
| // public void makeContributions(IMenuManager menuManager, |
| // IToolBarManager toolBarManager, IStatusLineManager |
| // statusLineManager) { |
| // super.makeContributions(menuManager, toolBarManager, |
| // statusLineManager); |
| // } |
| // |
| // public void setActionBars(IActionBars actionBars) { |
| // super.setActionBars(actionBars); |
| // getActionBarContributor().shareGlobalActions(this, actionBars); |
| // } |
| // }; |
| // System.out.println("Setting provider "); |
| if (currentViewer != null) { |
| AdapterFactoryContentProvider contentProvider = (AdapterFactoryContentProvider) ((ProcessViewer) currentViewer) |
| .getContentProvider(); |
| propContentProvider = new AdapterFactoryContentProvider( |
| contentProvider.getAdapterFactory()); |
| propertySheetPage |
| .setPropertySourceProvider(propContentProvider); |
| } |
| } |
| return propertySheetPage; |
| } |
| |
| /** |
| * @see org.eclipse.ui.part.MultiPageEditorPart#getAdapter(java.lang.Class) |
| */ |
| public Object getAdapter(Class key) { |
| if (key.equals(IPropertySheetPage.class)) { |
| return getPropertySheetPage(); |
| } else if (key.equals(IGotoMarker.class)) { |
| return this; |
| } else { |
| return super.getAdapter(key); |
| } |
| } |
| |
| |
| /** |
| * @see org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor#getContributorId() |
| */ |
| public String getContributorId() { |
| return getSite().getId(); |
| } |
| |
| |
| /** |
| * Return column descriptor list for given string |
| * @param str |
| * @return |
| * list of column descriptors |
| */ |
| public static EList toColumnDescriptorList(String str) { |
| EList columnDescriptors = new BasicEList(); |
| StringTokenizer tokens = new StringTokenizer(str, ","); //$NON-NLS-1$ |
| while (tokens.hasMoreTokens()) { |
| String token = tokens.nextToken(); |
| Object columnDescriptor = ProcessEditor.idToColumnDescriptorMap |
| .get(token); |
| if (columnDescriptor != null) { |
| columnDescriptors.add(columnDescriptor); |
| } |
| } |
| return columnDescriptors; |
| } |
| |
| /** |
| * Return array of column descriptors for the given string |
| * @param str |
| * @return |
| * list of column descriptors |
| */ |
| public static ColumnDescriptor[] toColumnDescriptors(String str) { |
| List list = toColumnDescriptorList(str); |
| ColumnDescriptor[] columns = new ColumnDescriptor[list.size()]; |
| list.toArray(columns); |
| return columns; |
| } |
| |
| /** |
| * @see org.eclipse.ui.forms.editor.FormEditor#getCurrentPage() |
| */ |
| public int getCurrentPage() { |
| return super.getCurrentPage(); |
| } |
| |
| /** |
| * Return suppression info |
| */ |
| public Suppression getSuppression() { |
| return suppression; |
| } |
| |
| private void configChanged() { |
| MethodConfiguration config = LibraryService.getInstance() |
| .getCurrentMethodConfiguration(); |
| if (config != currentConfig) { |
| // refresh only if the active part is this editor or diagram editor |
| // of any activity in this process |
| // |
| IWorkbenchPart activePart = getSite().getWorkbenchWindow() |
| .getPartService().getActivePart(); |
| boolean refresh = activePart == this; |
| if (!refresh) { |
| if (activePart instanceof AbstractDiagramEditor) { |
| BreakdownElementEditorInput input = (BreakdownElementEditorInput) ((IEditorPart) activePart) |
| .getEditorInput(); |
| refresh = input.getSuppression().getProcess() == selectedProcess; |
| } |
| } |
| if (refresh) { |
| currentConfig = config; |
| refreshAll(); |
| } |
| } |
| } |
| |
| /** |
| * @see org.eclipse.epf.authoring.ui.editors.MethodElementEditor#setInput(org.eclipse.ui.IEditorInput) |
| */ |
| protected void setInput(IEditorInput input) { |
| if (input != getEditorInput()) { |
| inputChanged = true; |
| } |
| super.setInput(input); |
| } |
| |
| /** |
| * @see org.eclipse.epf.authoring.ui.editors.MethodElementEditor#updatePages() |
| */ |
| protected void updatePages() { |
| // remove and add description page if the model.xmi or content.xmi of |
| // the process have been changed |
| // |
| Resource modelResource = selectedProcess.eResource(); |
| Resource contentResource = selectedProcess.getPresentation() |
| .eResource(); |
| if (changedResources.contains(modelResource) |
| || (contentResource != null && changedResources |
| .contains(contentResource))) { |
| removePage(0); |
| try { |
| addDescriptionPage(); |
| } catch (PartInitException e) { |
| AuthoringUIPlugin.getDefault().getMsgDialog().displayError( |
| AuthoringUIResources.ProcessEditor_refreshErrorTitle, //$NON-NLS-1$ |
| AuthoringUIResources.ProcessEditor_refreshErrorMsg, e); //$NON-NLS-1$ |
| } |
| } |
| if (inputChanged) { |
| inputChanged(getEditorInput()); |
| if (propertySheetPage != null) { |
| propertySheetPage.refresh(); |
| } |
| } else { |
| refreshAll(); |
| } |
| } |
| |
| private void refreshAll() { |
| BusyIndicator.showWhile(getSite().getShell().getDisplay(), |
| new Runnable() { |
| |
| public void run() { |
| doRefreshAll(true); |
| } |
| |
| }); |
| } |
| |
| /** |
| * Refresh all viewers |
| * @param updateIDs |
| * if true, then refresh all index in viewers |
| */ |
| public void doRefreshAll(boolean updateIDs) { |
| if (updateIDs) { |
| AdapterFactory adapterFactory = TngAdapterFactory.INSTANCE |
| .getWBS_ComposedAdapterFactory(); |
| ProcessUtil.updateIDs(adapterFactory, selectedProcess); |
| ProcessUtil.refreshPredeccessorLists(adapterFactory, |
| selectedProcess); |
| |
| adapterFactory = TngAdapterFactory.INSTANCE |
| .getProcessComposedAdapterFactory(); |
| ProcessUtil.updateIDs(adapterFactory, selectedProcess); |
| } |
| |
| WBSTab.getViewer().refresh(); |
| OBSTab.getViewer().refresh(); |
| PBSTab.getViewer().refresh(); |
| procTab.getViewer().refresh(); |
| |
| if (extensionTabs != null) { |
| for (int i = 0; i < extensionTabs.length; i++) { |
| extensionTabs[i].getViewer().refresh(); |
| } |
| } |
| |
| if (propertySheetPage != null) { |
| propertySheetPage.refresh(); |
| } |
| } |
| |
| |
| /** |
| * Refresh all open process editors |
| */ |
| public void refreshAllProcessEditors() { |
| IEditorReference[] editorReferences = getSite().getPage() |
| .getEditorReferences(); |
| for (int i = 0; i < editorReferences.length; i++) { |
| IEditorReference reference = editorReferences[i]; |
| IEditorPart editor = reference.getEditor(true); |
| if (editor instanceof ProcessEditor) { |
| ((ProcessEditor) editor).doRefreshAll(false); |
| } |
| } |
| } |
| |
| /** |
| * @see org.eclipse.ui.forms.editor.FormEditor#getActivePageInstance() |
| */ |
| public IFormPage getActivePageInstance() { |
| int index = getActivePage(); |
| if (index == -1) { |
| return null; |
| } |
| if (index == 0) { |
| return super.getActivePageInstance(); |
| } |
| return bsPages[index - 1]; |
| } |
| |
| protected Collection getModifiedResources() { |
| Collection modifiedResources = super.getModifiedResources(); |
| if (suppression.isSaveNeeded() |
| && !modifiedResources.contains(selectedProcessComponent |
| .eResource())) { |
| modifiedResources.add(selectedProcessComponent.eResource()); |
| } |
| modifiedResources.addAll(resourcesToSave); |
| |
| return modifiedResources; |
| } |
| |
| /** |
| * @see org.eclipse.epf.authoring.ui.editors.MethodElementEditor#doSave(org.eclipse.core.runtime.IProgressMonitor) |
| */ |
| public void doSave(IProgressMonitor monitor) { |
| suppression.saveToModel(); |
| super.doSave(monitor); |
| suppression.saveIsDone(); |
| resourcesToSave.clear(); |
| firePropertyChange(PROP_DIRTY); |
| } |
| |
| /** |
| * @see org.eclipse.epf.authoring.ui.editors.MethodElementEditor#isDirty() |
| */ |
| public boolean isDirty() { |
| if (suppression.isSaveNeeded()) { |
| return true; |
| } |
| return super.isDirty(); |
| } |
| |
| |
| /** |
| * @see org.eclipse.ui.part.WorkbenchPart#firePropertyChange(int) |
| */ |
| public void firePropertyChange(int propertyId) { |
| super.firePropertyChange(propertyId); |
| } |
| |
| /** |
| * @see org.eclipse.epf.authoring.ui.editors.MethodElementEditor#getUsedResources() |
| */ |
| public Collection getUsedResources() { |
| HashSet usedResources = new HashSet(); |
| |
| // model.xmi |
| // |
| Resource resource = elementObj.eResource(); |
| if (resource != null) { |
| usedResources.add(resource); |
| } |
| |
| // content.xmi |
| // |
| resource = selectedProcess.getPresentation().eResource(); |
| if (resource != null) { |
| usedResources.add(resource); |
| } |
| |
| // configuration.xmi |
| // |
| MethodConfiguration config = selectedProcess.getDefaultContext(); |
| if (config != null) { |
| resource = config.eResource(); |
| if (resource != null) { |
| usedResources.add(resource); |
| } |
| } |
| |
| // resources of other processes that this process is depending on |
| // |
| AdapterFactory adapterFactory = WBSTab.getAdapterFactory(); |
| for (Iterator iter = new AdapterFactoryTreeIterator(adapterFactory, |
| selectedProcess); iter.hasNext();) { |
| Object obj = TngUtil.unwrap(iter.next()); |
| if (obj instanceof EObject) { |
| resource = ((EObject) obj).eResource(); |
| if (resource != null) { |
| usedResources.add(resource); |
| } |
| } |
| } |
| |
| lastUsedResources = usedResources; |
| |
| return usedResources; |
| } |
| |
| /** |
| * Check whether selected objects can be revealed or not and retuns result |
| * |
| * @param selection |
| * List of objects |
| * @param adapterFactory |
| * Adapter factory of the selected objects |
| * @param suppression |
| * Suppression information |
| * @return |
| * Boolean value to indicate whether selected objects can be revealed |
| */ |
| public static boolean canReveal(Collection selection, |
| AdapterFactory adapterFactory, Suppression suppression) { |
| // check if revealing the selected elements will cause name duplication |
| // |
| String msg = suppression.checkDuplicateNameAfterReveal(selection, |
| adapterFactory); |
| if (msg != null) { |
| AuthoringUIPlugin.getDefault().getMsgDialog().displayError( |
| AuthoringUIResources.ProcessEditor_Reveal_Title, //$NON-NLS-1$ |
| msg); |
| return false; |
| } |
| |
| // check if revealing the selected elements will cause duplicate |
| // descriptors. |
| // If so, prompt user to delete the duplicates before continuing. |
| // |
| Collection duplicates = ProcessUtil |
| .getDuplicateDescriptorsAfterReveal(selection); |
| if (!duplicates.isEmpty()) { |
| MultiStatus status = new MultiStatus(AuthoringUIPlugin.getDefault() |
| .getId(), 0, "", null); //$NON-NLS-1$ |
| for (Iterator iter = duplicates.iterator(); iter.hasNext();) { |
| Descriptor desc = (Descriptor) iter.next(); |
| String descTxt = TngUtil.getTypeText(desc) |
| + ": " + desc.getPresentationName(); //$NON-NLS-1$ |
| status.add(new Status(IStatus.INFO, AuthoringUIPlugin |
| .getDefault().getId(), 0, descTxt, null)); |
| } |
| if (AuthoringUIPlugin |
| .getDefault() |
| .getMsgDialog() |
| .displayConfirmation( |
| AuthoringUIResources.ProcessEditor_Reveal_Title, //$NON-NLS-1$ |
| AuthoringUIResources.ProcessEditor_promptToDeleteBeforeReveal, //$NON-NLS-1$ |
| status) == Dialog.CANCEL) { |
| return false; |
| } |
| |
| // delete duplicate descriptors |
| try { |
| ProcessDeleteAction.delete(duplicates); |
| } catch (OperationCanceledException e) { |
| return false; |
| } |
| } |
| |
| return true; |
| } |
| |
| private static boolean hasInherited(Collection selection) { |
| for (Iterator iter = selection.iterator(); iter.hasNext();) { |
| Object element = iter.next(); |
| if (ProcessUtil.isInherited(element)) { |
| return true; |
| } |
| } |
| return false; |
| } |
| |
| private IPreferenceStore getPreferenceStore() { |
| // preference is managed by library plugin, |
| // since this preferences is also used for browsing and publishing |
| // Jinhua Xi 08/21/2006 |
| // IPreferenceStore store = AuthoringUIPlugin.getDefault() |
| // .getPreferenceStore(); |
| IPreferenceStore store = LibraryPlugin.getDefault() |
| .getPreferenceStore(); |
| |
| return store; |
| } |
| } |