Multiple menus within the DevOps Modeling Platform can be customized using plug-ins. Pluglets cannot be used to extend menus. In this section we will cover the most common menus to extend.
Like any Eclipse-based application, menus can be easily contributed by extending the
org.eclipse.ui.actionSets
extension-point. The following example shows an extension that will add an action to a newly created menu.
actionSet to group menu actions.label and description describing the action set.menu to define a new menu.label.action to define the menu action.label of the menu action.IWorkbenchWindowActionDelegate.menubarPath to be a slash-delimited path ('/') used to specify the location of this action in the menu bar.     <extension
            point="org.eclipse.ui.actionSets">
      <actionSet
            label="My Action Set"
            description="My action set description."
            visible="true"
            id="com.ibm.examples.actionSet">
         <menu
               label="My Menu"
               id="com.ibm.examples.menu">
         </menu>
         <action
               label="My Action"
               icon="icons/myIcon.gif"
               id="com.ibm.examples.actions.myAction"
               class="com.ibm.examples.actions.MenuActionDelegate"
               menubarPath="com.ibm.examples.menu/additions">
         </action>
      </actionSet>
   </extension>
visible is an optional attribute indicating whether the action set is initially visible when a perspective is open. 
If the value is unspecified or false, in order to toggle the action set visibility go to Windows > Customize Perspective... 
and navigate to the Commands tab. Find the action set to toggle in the Available command groups selection box.

The MenuActionDelegate class extends 
org.eclipse.gmf.runtime.common.ui.action.AbstractActionDelegate 
and implements 
IWorkbenchWindowActionDelegate. In this example, the action simply opens a message dialog.
The AbstractActionDelegate provides definitions for the methods that are found in most action delegate 
interfaces in Eclipse. Therefore adding a new action delegate is simply a matter of subclassing 
this class and declaring that the new class implements the desired action delegate interface.
public class MenuActionDelegate 
    extends AbstractActionDelegate implements IWorkbenchWindowActionDelegate {
    protected void doRun(IProgressMonitor progressMonitor) {
        Shell shell = new Shell();
        MessageDialog.openInformation(
            shell,
            "My Title",
            "Menu Action Example");
    }
}
Pop-up menus are contributed through the 
org.eclipse.ui.popupMenus extension-point.
This extension-point is used to add new actions to context menus owned by other plug-ins. Action contributions may be made against a specific object type (objectContribution) or against a specific context menu of a view or editor part (viewerContribution). When using objectContribution, the contribution will appear in all view or editor part context menus where objects of the specified type are selected. In contrast, using viewerContribution, the contribution will only appear in the specified view or editor part context menu, regardless of the selection.
To contribute actions to the pop-up menus for selectable elements within the Project Explorer, add a 
viewerContribution to a 
org.eclipse.ui.popupMenus extension with targetID set to 
org.eclipse.ui.navigator.ProjectExplorer#PopupMenu.
action.class to be a class which implements 
    
    org.eclipse.ui.IViewActionDelegate.label for the action.menubarPath to be a valid identifier of an existing menu in the hierarchy. 
    The default path is "additions".objectStates.   <extension
         point="org.eclipse.ui.popupMenus">
      <viewerContribution
            targetID="org.eclipse.ui.navigator.ProjectExplorer#PopupMenu"
            id="com.ibm.examples.viewerContribution.projectExplorer">
         <action
               class="com.ibm.examples.ProjectExplorerActionDelegate"
               label="Project Explorer Example Action"
               menubarPath="additions"
               id="com.ibm.examples.projectExplorerAction">
            <enablement>
               <and>
                  <objectState name="hasStereotype" value="MyProfile::MyStereotype"/>
               </and>
            </enablement>
         </action>               
      </viewerContribution>
   </extension>
The ProjectExplorerActionDelegate class extends 
org.eclipse.gmf.runtime.common.ui.action.AbstractActionDelegate 
and implements 
IViewActionDelegate. In this example, the action simply opens a message dialog.
public class ProjectExplorerActionDelegate 
    extends AbstractActionDelegate implements IViewActionDelegate {
    protected void doRun(IProgressMonitor progressMonitor) {
        Shell shell = new Shell();
        MessageDialog.openInformation(
            shell,
            "My Title",
            "Project Explorer Example Action");
    }
}
To contribute actions to the pop-up menus for selectable elements within a diagram editor, add a 
viewerContribution to a 
org.eclipse.ui.popupMenus extension with targetID set to 
org.eclipse.gmf.runtime.diagram.ui.DiagramEditorContextMenu.
Defining the action is similar to that of the 
Project Explorer, except that the 
class should implement 
org.eclipse.ui.IEditorActionDelegate. Also, in this example the enablement criteria differs
so that the action will be enabled only if the selected element is the diagram.
   <extension
         point="org.eclipse.ui.popupMenus">
      <viewerContribution
            targetID="org.eclipse.gmf.runtime.diagram.ui.DiagramEditorContextMenu"
            id="com.ibm.examples.viewerContribution.diagram">
         <action
               class="com.ibm.examples.DiagramEditorActionDelegate"
               label="Diagram Editor Example Action"
               menubarPath="additions"
               id="com.ibm.examples.menus.diagramAction">
            <enablement>
               <and>
                  <objectState name="notationType" value="Diagram"/>
               </and>
            </enablement>
         </action>
      </viewerContribution>
   </extension>
The DiagramEditorActionDelegate class extends 
org.eclipse.gmf.runtime.common.ui.action.AbstractActionDelegate and 
implements 
IEditorActionDelegate. In this example, the action simply opens a message dialog.
public class DiagramEditorActionDelegate 
    extends AbstractActionDelegate implements IEditorActionDelegate {
    protected void doRun(IProgressMonitor progressMonitor) {
        Shell shell = new Shell();
        MessageDialog.openInformation(
            shell,
            "My Title",
            "Diagram Editor Action Example");
    }
}
To contribute actions to the pop-up menus for selectable objects regardless of in what 
editor or viewer the selection is made, add an 
objectContribution to a 
org.eclipse.ui.popupMenus extension with objectClass set to 
the name of a class or interface that all objects in the selection must subclass or implement. 
In this example, 
IAdaptableSelection is used for the objectClass. 
GraphicalEditParts and UML Project Explorer tree elements implement this interface.
Defining the action is similar to that of the 
Project Explorer, except that the 
class should implement 
org.eclipse.ui.IObjectActionDelegate.
   <extension
         point="org.eclipse.ui.popupMenus">
      <objectContribution
            objectClass="org.eclipse.gmf.runtime.common.core.util.IAdaptableSelection"
            id="com.ibm.examples.objectContribution">
         <action
               class="com.ibm.examples.ObjectActionDelegate"
               label="Object Example Action"
               menubarPath="additions"
               id="com.ibm.examples.objectAction"
               enablesFor="1"/>
      </objectContribution>
   </extension>
The ObjectActionDelegate class extends 
org.eclipse.gmf.runtime.common.ui.action.AbstractActionDelegate 
and implements 
IObjectActionDelegate. In this example, the action simply opens a message dialog.
public class ObjectActionDelegate 
    extends AbstractActionDelegate implements IObjectActionDelegate {
    protected void doRun(IProgressMonitor progressMonitor) {
        Shell shell = new Shell();
        MessageDialog.openInformation(
            shell,
            "My Title",
            "Object Action Example"");
    }
}
In many cases the menu actions described above may wish to modify the model. Model modifications should be 
done within an 
AbstractTransactionalCommand executed on the correct operation history to automatically 
support undo and redo of the command. The 
AbstractTransactionalCommand 
requires only implementing the 
doExecuteWithResult method.
In this example, the action delegate will extend the 
org.eclipse.gmf.runtime.emf.ui.action.AbstractModelActionDelegate class. It is an abstract parent 
for all concrete action delegates that execute model commands. The only methods that are required 
to be implemented are 
getEditingDomain() and 
doRun(IProgressMonitor progressMonitor). Use the
execute method to execute the transactional command.
public class MyToggleAbstractActionDelegate
    extends AbstractModelActionDelegate implements IViewActionDelegate {
    protected TransactionalEditingDomain getEditingDomain() {
        return UMLModeler.getEditingDomain();
    }
    
    protected void doRun(IProgressMonitor progressMonitor) {
        ICommand command = getCommand();
        
        EObject selection = (EObject) ((IAdaptable) getStructuredSelection()
            .getFirstElement()).getAdapter(EObject.class);
        
        if (selection instanceof Class) {
            final Class clazz = (Class)selection;
            
            execute(new AbstractTransactionalCommand(getEditingDomain(), "Toggle Is Abstract", null) {
            
                protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) {
                    clazz.setIsAbstract(!clazz.isAbstract());
                    return CommandResult.newOKCommandResult();
                }
                
            }, progressMonitor, null);
        }
    }
}