blob: cca2ce24245c240b81ba79b6b9bca2f51840b075 [file] [log] [blame]
/*
* Copyright (c) 2005, 2007 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.diagram.ad.part;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.draw2d.DelegatingLayout;
import org.eclipse.draw2d.FreeformLayer;
import org.eclipse.draw2d.LayeredPane;
import org.eclipse.emf.ecore.EModelElement;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.epf.diagram.ad.edit.parts.ControlFlowEditPart;
import org.eclipse.epf.diagram.ad.edit.parts.ControlFlowNameEditPart;
import org.eclipse.epf.diagram.ad.providers.UMLElementTypes;
import org.eclipse.epf.diagram.add.ADDImages;
import org.eclipse.epf.diagram.add.part.ActivityDetailDiagramEditorPlugin;
import org.eclipse.epf.diagram.core.DiagramCoreResources;
import org.eclipse.epf.diagram.core.bridge.BridgeHelper;
import org.eclipse.epf.diagram.core.bridge.DiagramAdapter;
import org.eclipse.epf.diagram.core.bridge.NodeAdapter;
import org.eclipse.epf.diagram.core.part.AbstractDiagramEditor;
import org.eclipse.epf.diagram.core.part.DiagramEditorInput;
import org.eclipse.epf.diagram.core.part.DiagramFileEditorInputProxy;
import org.eclipse.epf.diagram.core.part.util.DiagramEditorUtil;
import org.eclipse.epf.diagram.core.util.DiagramConstants;
import org.eclipse.epf.library.edit.process.ActivityWrapperItemProvider;
import org.eclipse.epf.library.edit.util.IDiagramManager;
import org.eclipse.epf.library.edit.util.Suppression;
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.Iteration;
import org.eclipse.epf.uma.MethodElement;
import org.eclipse.epf.uma.Phase;
import org.eclipse.epf.uma.TaskDescriptor;
import org.eclipse.epf.uma.VariabilityElement;
import org.eclipse.epf.uma.VariabilityType;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.LayerConstants;
import org.eclipse.gef.ui.actions.GEFActionConstants;
import org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint;
import org.eclipse.gmf.runtime.diagram.core.services.ViewService;
import org.eclipse.gmf.runtime.diagram.ui.actions.ActionIds;
import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramRootEditPart;
import org.eclipse.gmf.runtime.diagram.ui.requests.CreateUnspecifiedTypeConnectionRequest;
import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocumentProvider;
import org.eclipse.gmf.runtime.emf.type.core.IElementType;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.gmf.runtime.notation.Edge;
import org.eclipse.gmf.runtime.notation.Node;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorMatchingStrategy;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.SaveAsDialog;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.uml2.uml.ActivityEdge;
import org.eclipse.uml2.uml.ActivityNode;
import org.eclipse.uml2.uml.ControlFlow;
import org.eclipse.uml2.uml.UMLPackage;
/**
* @modified
* @author skannoor
*/
public class ActivityDiagramEditor extends AbstractDiagramEditor {
/**
* @generated
*/
public static final String ID = "org.eclipse.epf.diagram.ad.part.ActivityDiagramEditorID"; //$NON-NLS-1$
/**
* @generated
*/
public ActivityDiagramEditor() {
super(true);
}
/**
* @modified
*/
protected void configureGraphicalViewer() {
super.configureGraphicalViewer();
DiagramRootEditPart root = (DiagramRootEditPart) getDiagramGraphicalViewer()
.getRootEditPart();
LayeredPane printableLayers = (LayeredPane) root
.getLayer(LayerConstants.PRINTABLE_LAYERS);
FreeformLayer extLabelsLayer = new FreeformLayer();
extLabelsLayer.setLayoutManager(new DelegatingLayout());
// printableLayers.addLayerAfter(extLabelsLayer,
// UMLEditPartFactory.EXTERNAL_NODE_LABELS_LAYER,
// LayerConstants.PRIMARY_LAYER);
LayeredPane scalableLayers = (LayeredPane) root
.getLayer(LayerConstants.SCALABLE_LAYERS);
FreeformLayer scaledFeedbackLayer = new FreeformLayer();
scaledFeedbackLayer.setEnabled(false);
scalableLayers.addLayerAfter(scaledFeedbackLayer,
LayerConstants.SCALED_FEEDBACK_LAYER,
DiagramRootEditPart.DECORATION_UNPRINTABLE_LAYER);
}
/**
* @generated
*/
// protected PaletteRoot createPaletteRoot(PaletteRoot existingPaletteRoot) {
// PaletteRoot root = super.createPaletteRoot(existingPaletteRoot);
// new UMLPaletteFactory().fillPalette(root);
// return root;
// }
/**
* @modified
*/
protected PreferencesHint getPreferencesHint() {
return new PreferencesHint(ActivityDiagramEditorPlugin.ID);
}
/**
* @modified
*/
public Object getAdapter(Class type) {
// if (type == IPropertySheetPage.class) {
// return null;
// }
return super.getAdapter(type);
}
/**
* @modified
*/
protected IDocumentProvider getDocumentProvider(IEditorInput input) {
// if (input instanceof IFileEditorInput
// || input instanceof URIEditorInput) {
// return ActivityDiagramEditorPlugin.getInstance()
// .getDocumentProvider();
// }
return super.getDocumentProvider(input);
}
/**
* @modified
*/
public TransactionalEditingDomain getEditingDomain() {
// IDocument document = getEditorInput() != null ? getDocumentProvider()
// .getDocument(getEditorInput()) : null;
// if (document instanceof IDiagramDocument) {
// return ((IDiagramDocument) document).getEditingDomain();
// }
// return super.getEditingDomain();
return getDiagramManager().getEditingDomain();
}
/**
* @modified
*/
protected void setDocumentProvider(IEditorInput input) {
// if (input instanceof IFileEditorInput
// || input instanceof URIEditorInput) {
// setDocumentProvider(ActivityDiagramEditorPlugin.getInstance()
// .getDocumentProvider());
// } else {
// super.setDocumentProvider(input);
// }
super.setDocumentProvider(input);
}
/**
* @generated
*/
// public void gotoMarker(IMarker marker) {
// MarkerNavigationService.getInstance().gotoMarker(this, marker);
// }
/**
* @generated
*/
public boolean isSaveAsAllowed() {
return super.isSaveAsAllowed();
}
/**
* @modified
*/
public void doSaveAs() {
// super.doSave(new NullProgressMonitor())
performSaveAs(new NullProgressMonitor());
}
/**
* @generated
*/
protected void performSaveAs(IProgressMonitor progressMonitor) {
Shell shell = getSite().getShell();
IEditorInput input = getEditorInput();
SaveAsDialog dialog = new SaveAsDialog(shell);
IFile original = input instanceof IFileEditorInput ? ((IFileEditorInput) input)
.getFile()
: null;
if (original != null) {
dialog.setOriginalFile(original);
}
dialog.create();
IDocumentProvider provider = getDocumentProvider();
if (provider == null) {
// editor has been programmatically closed while the dialog was open
return;
}
if (provider.isDeleted(input) && original != null) {
String message = NLS.bind(
"The original file ''{0}'' has been deleted.", original
.getName());
dialog.setErrorMessage(null);
dialog.setMessage(message, IMessageProvider.WARNING);
}
if (dialog.open() == Window.CANCEL) {
if (progressMonitor != null) {
progressMonitor.setCanceled(true);
}
return;
}
IPath filePath = dialog.getResult();
if (filePath == null) {
if (progressMonitor != null) {
progressMonitor.setCanceled(true);
}
return;
}
IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
IFile file = workspaceRoot.getFile(filePath);
final IEditorInput newInput = new FileEditorInput(file);
// Check if the editor is already open
IEditorMatchingStrategy matchingStrategy = getEditorDescriptor()
.getEditorMatchingStrategy();
IEditorReference[] editorRefs = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage()
.getEditorReferences();
for (int i = 0; i < editorRefs.length; i++) {
if (matchingStrategy.matches(editorRefs[i], newInput)) {
MessageDialog
.openWarning(shell, "Problem During Save As...",
"Save could not be completed. Target file is already open in another editor.");
return;
}
}
boolean success = false;
try {
provider.aboutToChange(newInput);
getDocumentProvider(newInput).saveDocument(progressMonitor,
newInput,
getDocumentProvider().getDocument(getEditorInput()), true);
success = true;
} catch (CoreException x) {
IStatus status = x.getStatus();
if (status == null || status.getSeverity() != IStatus.CANCEL) {
ErrorDialog.openError(shell, "Save Problems",
"Could not save file.", x.getStatus());
}
} finally {
provider.changed(newInput);
if (success) {
setInput(newInput);
}
}
if (progressMonitor != null) {
progressMonitor.setCanceled(!success);
}
}
/**
* @param event
*/
protected void handleDoubleClick(Event event) {
List editParts = getGraphicalViewer().getSelectedEditParts();
// do nothing if 0 or more than 1 edit parts are selected
//
if (editParts.size() != 1)
return;
EditPart editPart = (EditPart) editParts.get(0);
Node node = (Node) editPart.getModel();
EObject model = node.getElement();
DiagramFileEditorInputProxy editorInput = (DiagramFileEditorInputProxy) getEditorInput();
DiagramEditorInput dInput = editorInput.getDiagramEditorInput();
if (model instanceof org.eclipse.uml2.uml.Activity) {
NodeAdapter nodeAdapter = BridgeHelper.getNodeAdapter(model);
Object e = null;
// TODO: handle Wrapper change below line after wrapper implement
e = nodeAdapter.getElement();
if (e == null) {
e = BridgeHelper.getMethodElement((EModelElement) model);
}
if (e != null) {
// IEditorPart parent = getSite().getPage().getActiveEditor();
DiagramEditorInput input = new org.eclipse.epf.diagram.core.part.DiagramEditorInput(
e, dInput.getSuppression(),
IDiagramManager.ACTIVITY_DIAGRAM);
DiagramEditorUtil.openDiagramEditor(getSite().getPage(), input,
ActivityDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT,
new NullProgressMonitor());
}
}
}
@Override
protected void createActions() {
super.createActions();
IAction action = new Action(
DiagramCoreResources.ActivityDiagram_openActivityDetailDiagram_text) { //$NON-NLS-1$
public String getId() {
return DiagramConstants.OPEN_ACTIVITY_DETAIL_DIAGRAM;
}
public void run() {
try {
EditPart selectedPart = (EditPart) getGraphicalViewer()
.getSelectedEditParts().get(0);
// IEditorPart parent = getSite().getPage().getActiveEditor();
if (selectedPart != null) {
Node view = (Node) selectedPart.getModel();
DiagramEditPart diagramEditPart = getDiagramEditPart();
Diagram diagram = (Diagram) diagramEditPart.getModel();
DiagramAdapter diagramAdapter = BridgeHelper
.getDiagramAdapter(diagram.getElement());
NodeAdapter adapter = BridgeHelper.getNodeAdapter(view
.getElement());
Object selectedObject = adapter.getWrapper();
if (selectedObject == null) {
selectedObject = adapter.getElement();
}
// IEditorPart parent =
// PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
DiagramEditorInput input = new org.eclipse.epf.diagram.core.part.DiagramEditorInput(
selectedObject,
diagramAdapter.getSuppression(),
IDiagramManager.ACTIVITY_DETAIL_DIAGRAM);
DiagramEditorUtil
.openDiagramEditor(
getSite().getPage(),
input,
ActivityDetailDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT,
new NullProgressMonitor());
}
} catch (RuntimeException e) {
e.printStackTrace();
}
}
public boolean isEnabled() {
List editParts = getGraphicalViewer().getSelectedEditParts();
if (editParts.size() != 1)
return false;
EditPart editPart = (EditPart) editParts.get(0);
View node = (View) editPart.getModel();
if (node != null
&& node.getElement() != null
&& node.getElement() instanceof org.eclipse.uml2.uml.StructuredActivityNode) {
if (enableADDMenu(node.getElement())) {
return true;
}
}
return false;
}
};
action.setImageDescriptor(ADDImages.IMG_DESC_EDITOR);
action.setDisabledImageDescriptor(ADDImages.DISABLED_IMG_DESC_EDITOR);
getActionRegistry().registerAction(action);
List<IElementType> elementTypes = new ArrayList<IElementType>();
elementTypes.clear();
elementTypes.add(UMLElementTypes.ActivityPartition_1008);
elementTypes.add(UMLElementTypes.ActivityPartition_2001);
action = createAnAction(
DiagramCoreResources.ActivityDiagram_Partition_Node_text,
elementTypes, //$NON-NLS-1$
DiagramConstants.CREATE_PARTITION,
DiagramCoreResources.ActivityDiagram_Partition_Node_tooltip,
UMLElementTypes.getImageDescriptor(UMLPackage.eINSTANCE
.getActivityPartition(),
UMLElementTypes.ActivityPartition_2001)); //$NON-NLS-1$
getActionRegistry().registerAction(action);
elementTypes = new ArrayList<IElementType>();
elementTypes.add(UMLElementTypes.InitialNode_1004);
action = createAnAction(
DiagramCoreResources.ActivityDiagram_StartNode_text,
elementTypes, //$NON-NLS-1$
DiagramConstants.CREATE_START_NODE,
DiagramCoreResources.ActivityDiagram_StartNode_tooltip, //$NON-NLS-1$
UMLElementTypes.getImageDescriptor(UMLPackage.eINSTANCE
.getInitialNode(), UMLElementTypes.InitialNode_1004)); //$NON-NLS-1$
getActionRegistry().registerAction(action);
elementTypes = new ArrayList<IElementType>();
elementTypes.add(UMLElementTypes.ForkNode_1003);
action = createAnAction(
DiagramCoreResources.ActivityDiagram_Fork_Node_text,
elementTypes, //$NON-NLS-1$
DiagramConstants.CREATE_FORK_NODE,
DiagramCoreResources.ActivityDiagram_Fork_Node_tooltip,
UMLElementTypes.getImageDescriptor(UMLPackage.eINSTANCE
.getForkNode(), UMLElementTypes.ForkNode_1003)); //$NON-NLS-1$
getActionRegistry().registerAction(action);
elementTypes = new ArrayList<IElementType>();
elementTypes.add(UMLElementTypes.JoinNode_1006);
action = createAnAction(
DiagramCoreResources.ActivityDiagram_Join_Node_text,
elementTypes, //$NON-NLS-1$
DiagramConstants.CREATE_JOIN_NODE,
DiagramCoreResources.ActivityDiagram_Join_Node_tooltip,
UMLElementTypes.getImageDescriptor(UMLPackage.eINSTANCE
.getJoinNode(), UMLElementTypes.JoinNode_1006)); //$NON-NLS-1$
getActionRegistry().registerAction(action);
elementTypes = new ArrayList<IElementType>();
elementTypes.add(UMLElementTypes.DecisionNode_1005);
action = createAnAction(
DiagramCoreResources.ActivityDiagram_DecisionNode_text,
elementTypes, //$NON-NLS-1$
DiagramConstants.CREATE_DECISION_NODE,
DiagramCoreResources.ActivityDiagram_DecisionNode_tooltip,
UMLElementTypes.getImageDescriptor(UMLPackage.eINSTANCE
.getDecisionNode(), UMLElementTypes.DecisionNode_1005)); //$NON-NLS-1$
getActionRegistry().registerAction(action);
elementTypes = new ArrayList<IElementType>();
elementTypes.add(UMLElementTypes.MergeNode_1002);
action = createAnAction(
DiagramCoreResources.ActivityDiagram_Merge_Node_text,
elementTypes, //$NON-NLS-1$
DiagramConstants.CREATE_MERGE_NODE,
DiagramCoreResources.ActivityDiagram_Merge_Node_tooltip,
UMLElementTypes.getImageDescriptor(UMLPackage.eINSTANCE
.getDecisionNode(), UMLElementTypes.MergeNode_1002)); //$NON-NLS-1$
getActionRegistry().registerAction(action);
elementTypes = new ArrayList<IElementType>();
elementTypes.add(UMLElementTypes.ActivityFinalNode_1001);
action = createAnAction(
DiagramCoreResources.ActivityDiagram_EndNode_text,
elementTypes, //$NON-NLS-1$
DiagramConstants.CREATE_END_NODE,
DiagramCoreResources.ActivityDiagram_EndNode_tooltip,
UMLElementTypes.getImageDescriptor(UMLPackage.eINSTANCE
.getActivityFinalNode(),
UMLElementTypes.ActivityFinalNode_1001)); //$NON-NLS-1$
getActionRegistry().registerAction(action);
elementTypes = new ArrayList<IElementType>();
elementTypes.add(UMLElementTypes.StructuredActivityNode_1007);
action = createAnAction(
DiagramCoreResources.ActivityDiagram_Activity_text,
elementTypes, //$NON-NLS-1$
DiagramConstants.CREATE_ACTIVITY,
DiagramCoreResources.ActivityDiagram_Activity_tooltip,
UMLElementTypes.getImageDescriptor(null,
UMLElementTypes.StructuredActivityNode_1007)); //$NON-NLS-1$
getActionRegistry().registerAction(action);
elementTypes = new ArrayList<IElementType>();
elementTypes.add(UMLElementTypes.StructuredActivityNode_1011);
action = createAnAction(
DiagramCoreResources.ActivityDiagram_Iteration_text,
elementTypes, //$NON-NLS-1$
DiagramConstants.CREATE_ITERATION,
DiagramCoreResources.ActivityDiagram_Iteration_tooltip,
UMLElementTypes.getImageDescriptor(null,
UMLElementTypes.StructuredActivityNode_1011)); //$NON-NLS-1$
getActionRegistry().registerAction(action);
elementTypes = new ArrayList<IElementType>();
elementTypes.add(UMLElementTypes.StructuredActivityNode_1010);
action = createAnAction(
DiagramCoreResources.ActivityDiagram_Phase_text,
elementTypes, //$NON-NLS-1$
DiagramConstants.CREATE_PHASE,
DiagramCoreResources.ActivityDiagram_Phase_tooltip,
UMLElementTypes.getImageDescriptor(null,
UMLElementTypes.StructuredActivityNode_1010)); //$NON-NLS-1$
getActionRegistry().registerAction(action);
elementTypes = new ArrayList<IElementType>();
elementTypes.add(UMLElementTypes.ActivityParameterNode_1009);
action = createAnAction(
DiagramCoreResources.AbstractDiagram_TaskDescriptor_text,
elementTypes, //$NON-NLS-1$
DiagramConstants.CREATE_TASK_DESCRIPTOR,
DiagramCoreResources.AbstractDiagram_TaskDescriptor_tooltip,
UMLElementTypes.getImageDescriptor(null,
UMLElementTypes.ActivityParameterNode_1009)); //$NON-NLS-1$
getActionRegistry().registerAction(action);
elementTypes = new ArrayList<IElementType>();
elementTypes.add(UMLElementTypes.ActivityParameterNode_1012);
action = createAnAction(
DiagramCoreResources.ActivityDiagram_Milestone_text,
elementTypes, //$NON-NLS-1$
DiagramConstants.CREATE_MILESTONE,
DiagramCoreResources.ActivityDiagram_Milestone_tooltip,
UMLElementTypes.getImageDescriptor(null,
UMLElementTypes.ActivityParameterNode_1012)); //$NON-NLS-1$
getActionRegistry().registerAction(action);
}
protected boolean enableADDMenu(EObject element) {
NodeAdapter adapter = BridgeHelper
.getNodeAdapter((ActivityNode) element);
if (adapter != null) {
Object selectedObject = adapter.getWrapper();
if (selectedObject == null) {
selectedObject = adapter.getElement();
}
Activity activity = null;
List<BreakdownElement> list = new ArrayList<BreakdownElement>();
if (selectedObject instanceof Activity) {
activity = (Activity) selectedObject;
} else if (selectedObject instanceof ActivityWrapperItemProvider) {
activity = (Activity) ((ActivityWrapperItemProvider) selectedObject)
.getValue();
}
if (activity == null)
return false;
while (!activity.getVariabilityType().equals(
VariabilityType.NA)) {
VariabilityElement ve = activity.getVariabilityBasedOnElement();
list.addAll(activity.getBreakdownElements());
if ((ve != null) && (ve instanceof Activity)) {
activity = (Activity) ve;
} else {
break;
}
}
//Collect the breakdown elements to verify taskdescriptors are
// not.
list.addAll(activity.getBreakdownElements());
Diagram diagram = getDiagram(activity,
IDiagramManager.ACTIVITY_DETAIL_DIAGRAM);
if (diagram == null
&& selectedObject instanceof ActivityWrapperItemProvider) {
return false;
} else {
// Iterate through the List, to find taskdescriptor and has
// primary role within current configuration.
// then enable the action.
DiagramAdapter diagramAdapter = BridgeHelper
.getDiagramAdapter(getDiagram().getElement());
Suppression suppression = diagramAdapter.getSuppression();
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
Object obj = iterator.next();
if (obj instanceof TaskDescriptor) {
if (suppression != null) {
if (suppression.isSuppressed(obj))
return false;
}
Object e = ((TaskDescriptor) obj)
.getPerformedPrimarilyBy();
if (suppression != null
&& diagramAdapter.getSuppression()
.isSuppressed(e)) {
return false;
}
return true;
}
}
}
}
return false;
}
@Override
public void contributeToContextMenu(IMenuManager menu) {
super.contributeToContextMenu(menu);
addToMenu(menu, DiagramConstants.OPEN_ACTIVITY_DETAIL_DIAGRAM,
GEFActionConstants.MB_ADDITIONS, true, true);
IContributionItem item = menu.find(ActionIds.MENU_DIAGRAM_ADD);
if (item != null && item instanceof IMenuManager) {
IMenuManager addMenu = (IMenuManager) item;
String groupName = DiagramConstants.DIAGRAM_ADD_MENU_GENERAL_GROUP;
if (getGraphicalViewer().getSelectedEditParts().size() == 0) {
addToMenu(addMenu, null, groupName, true, true);
addToMenu(addMenu, DiagramConstants.CREATE_PARTITION,
groupName, false, true);
addToMenu(addMenu, DiagramConstants.CREATE_START_NODE,
groupName, false, true);
addToMenu(addMenu, DiagramConstants.CREATE_END_NODE, groupName,
false, true);
addToMenu(addMenu, DiagramConstants.CREATE_FORK_NODE,
groupName, false, true);
addToMenu(addMenu, DiagramConstants.CREATE_JOIN_NODE,
groupName, false, true);
addToMenu(addMenu, DiagramConstants.CREATE_DECISION_NODE,
groupName, false, true);
addToMenu(addMenu, DiagramConstants.CREATE_MERGE_NODE,
groupName, true, true);
addToMenu(addMenu, DiagramConstants.CREATE_ACTIVITY, groupName,
false, true);
addToMenu(addMenu, DiagramConstants.CREATE_ITERATION,
groupName, false, true);
addToMenu(addMenu, DiagramConstants.CREATE_PHASE, groupName,
false, true);
addToMenu(addMenu, DiagramConstants.CREATE_MILESTONE,
groupName, false, true);
addToMenu(addMenu, DiagramConstants.CREATE_TASK_DESCRIPTOR,
groupName, true, true);
}
}
}
@Override
protected String getPartNamePrefix() {
MethodElement e = getMethodElementFromInput();
if (e instanceof Activity) {
return getTypeName((Activity) e) + ": "; //$NON-NLS-1$
}
return ""; //$NON-NLS-1$
}
/**
* @return
*/
protected Image getPartImage() {
return ActivityDiagramEditorPlugin.getInstance().getSharedImage(
"full/etool16/ADEditor.gif"); //$NON-NLS-1$
}
private static String getTypeName(Activity act) {
if (act instanceof DeliveryProcess) {
return DiagramCoreResources.ActvitivityDiagram_DeliveryProcess_text; //$NON-NLS-1$
} else if (act instanceof CapabilityPattern) {
return DiagramCoreResources.ActvitivityDiagram_CapabilityPattern_text; //$NON-NLS-1$
} else if (act instanceof Phase) {
return DiagramCoreResources.ActvitivityDiagram_Phase_tex; //$NON-NLS-1$
} else if (act instanceof Iteration) {
return DiagramCoreResources.ActvitivityDiagram_Iteration_text; //$NON-NLS-1$
}
return DiagramCoreResources.ActvitivityDiagram_Activity_text; //$NON-NLS-1$
}
/**
* Create edge for AD diagram
*
* @param sourceNode
* @param targetNode
* @param actEdge
* @return
*/
public Edge createEdge(Node sourceNode, Node targetNode,
ActivityEdge actEdge) {
if (actEdge instanceof ControlFlow) {
Edge edge = ViewService.createEdge(sourceNode, targetNode, actEdge,
new Integer(ControlFlowEditPart.VISUAL_ID).toString(),
ActivityDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT);
ViewService.createNode(edge, actEdge, new Integer(
ControlFlowNameEditPart.VISUAL_ID).toString(),
ActivityDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT);
return edge;
}
return null;
}
protected CreateUnspecifiedTypeConnectionRequest getCreateControlFlowRequest() {
List<IElementType> list = new ArrayList<IElementType>();
list.add(UMLElementTypes.ControlFlow_3001);
CreateUnspecifiedTypeConnectionRequest connectionRequest = new CreateUnspecifiedTypeConnectionRequest(
list, false,
ActivityDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT);
return connectionRequest;
}
}