com.centurylink.mdw.plugin.designer.editors.ProcessEditorActionBarContributor.java Source code

Java tutorial

Introduction

Here is the source code for com.centurylink.mdw.plugin.designer.editors.ProcessEditorActionBarContributor.java

Source

/*
 * Copyright (C) 2017 CenturyLink, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.centurylink.mdw.plugin.designer.editors;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.GroupMarker;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuCreator;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorActionBarContributor;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;

import com.centurylink.mdw.designer.display.Node;
import com.centurylink.mdw.plugin.MdwPlugin;
import com.centurylink.mdw.plugin.preferences.model.PreferenceConstants;

/**
 * Actions for the process editor.
 */
public class ProcessEditorActionBarContributor implements IEditorActionBarContributor {
    private ProcessEditor editor;

    private IAction lockAction;

    public IAction getLockAction() {
        return lockAction;
    }

    private IAction runAction;
    private IAction debugAction;
    private IAction instancesAction;
    private IMenuCreator linkTypeMenuCreator;
    private IAction linkTypeAction;
    private IMenuCreator iconShapeMenuCreator;
    private IAction iconShapeAction;
    private IAction processDefinitionAction;
    private ZoomLevelMenuCreator zoomLevelMenuCreator;
    private IAction zoomLevelAction;
    private IAction exportAsAction;
    private IAction refreshAction;
    private IMenuCreator displayPrefsMenuCreator;
    private IAction displayPrefsAction;
    private IAction recordChangesAction;
    private IAction commitChangesAction;

    private static String linkStyle = "Elbow";

    public static String getLinkStyle() {
        return linkStyle;
    }

    public void init(IActionBars bars, IWorkbenchPage page) {
        lockAction = createLockAction();
        runAction = createRunAction();
        debugAction = createDebugAction();
        instancesAction = createInstancesAction();
        linkTypeMenuCreator = new LinkTypeMenuCreator();
        linkTypeAction = createLinkTypeAction();
        iconShapeMenuCreator = new IconShapeMenuCreator();
        iconShapeAction = createIconShapeAction();
        processDefinitionAction = createProcessDefinitionAction();
        zoomLevelMenuCreator = new ZoomLevelMenuCreator();
        zoomLevelAction = createZoomLevelAction();
        exportAsAction = createExportAsAction();
        refreshAction = createRefreshAction();
        displayPrefsMenuCreator = new DisplayPrefsMenuCreator();
        displayPrefsAction = createDisplayPrefsAction();
        recordChangesAction = createRecordChangesAction();
        commitChangesAction = createCommitChangesAction();

        IToolBarManager toolbar = bars.getToolBarManager();
        toolbar.add(new GroupMarker("mdw.process.instance.group"));
        toolbar.add(lockAction);
        toolbar.add(runAction);
        toolbar.add(debugAction);
        toolbar.add(instancesAction);
        toolbar.add(linkTypeAction);
        toolbar.add(iconShapeAction);
        toolbar.add(processDefinitionAction);
        toolbar.add(zoomLevelAction);
        toolbar.add(displayPrefsAction);
        toolbar.add(exportAsAction);
        toolbar.add(refreshAction);
        toolbar.add(recordChangesAction);
        toolbar.add(commitChangesAction);
    }

    public void setActiveEditor(IEditorPart targetEditor) {
        if (targetEditor instanceof ProcessEditor) {
            this.editor = (ProcessEditor) targetEditor;
            lockAction.setEnabled(!editor.isForProcessInstance() && editor.isLockAllowed());
            runAction.setEnabled(!editor.isForProcessInstance() && editor.isLaunchAllowed());
            debugAction.setEnabled(!editor.isForProcessInstance() && editor.isDebugAllowed());
            instancesAction.setEnabled(!editor.isForProcessInstance());
            linkTypeAction.setEnabled(!editor.isForProcessInstance() && !editor.isReadOnly());
            iconShapeAction.setEnabled(!editor.isForProcessInstance() && !editor.isReadOnly());
            processDefinitionAction.setEnabled(editor.isForProcessInstance());
            displayPrefsAction.setEnabled(!editor.isForProcessInstance());
            recordChangesAction.setEnabled(!editor.isForProcessInstance() && !editor.isReadOnly());
            commitChangesAction.setEnabled(!editor.isForProcessInstance() && !editor.isReadOnly());

            if (editor.isForProcessInstance()) {
                lockAction.setText("");
                runAction.setText("");
                debugAction.setText("");
                instancesAction.setText("");
                linkTypeAction.setText("");
                iconShapeAction.setText("");
                processDefinitionAction.setText("Process Definition");
                refreshAction.setText("Refresh Process Instance");
                displayPrefsAction.setText("");
                recordChangesAction.setText("");
                commitChangesAction.setText("");
            } else {
                if (editor.isLaunchAllowed())
                    runAction.setText("Launch Process");
                else
                    runAction.setText("");

                if (editor.isDebugAllowed())
                    debugAction.setText("Debug Process");
                else
                    debugAction.setText("");

                if (editor.isLockAllowed())
                    lockAction.setText("Lock/Unlock Process");
                else
                    lockAction.setText("");
                lockAction.setChecked(editor.getProcess().isLockedToUser());
                instancesAction.setText("Process Instances");
                linkTypeAction.setText("Link Style");
                processDefinitionAction.setText("");
                iconShapeAction.setText("Icon Shape");
                refreshAction.setText("Refresh Process");

                displayPrefsAction.setText("Display Prefs");
                if (editor.isRecordChanges())
                    recordChangesAction.setText("Stop Recording Changes");
                else
                    recordChangesAction.setText("Record Changes");
                recordChangesAction.setChecked(editor.isRecordChanges());
                commitChangesAction.setText("Commit Changes");
            }

            exportAsAction.setText("Export As...");
            zoomLevelAction.setText("Zoom Level");
            zoomLevelMenuCreator.setZoomable(editor);
        }
    }

    private IAction createLockAction() {
        IAction action = new Action("", IAction.AS_CHECK_BOX) {
            public void run() {
                editor.toggleProcessLock(isChecked());
            }
        };
        ImageDescriptor descriptor = MdwPlugin.getImageDescriptor("icons/lock.gif");
        action.setImageDescriptor(descriptor);
        return action;
    }

    private IAction createRecordChangesAction() {
        IAction action = new Action("", IAction.AS_CHECK_BOX) {
            public void run() {
                editor.setRecordChanges(isChecked());
            }
        };
        ImageDescriptor descriptor = MdwPlugin.getImageDescriptor("icons/record.gif");
        action.setImageDescriptor(descriptor);
        return action;
    }

    private IAction createCommitChangesAction() {
        IAction action = new Action() {
            public void run() {
                editor.commitChanges();
            }
        };
        action.setText("");
        ImageDescriptor descriptor = MdwPlugin.getImageDescriptor("icons/commit.gif");
        action.setImageDescriptor(descriptor);
        return action;
    }

    private IAction createRunAction() {
        IAction action = new Action() {
            public void run() {
                editor.launchProcess(false);
            }
        };
        action.setText("");
        ImageDescriptor descriptor = MdwPlugin.getImageDescriptor("icons/run.gif");
        action.setImageDescriptor(descriptor);
        return action;
    }

    private IAction createDebugAction() {
        IAction action = new Action() {
            public void run() {
                editor.launchProcess(true);
            }
        };
        action.setText("");
        ImageDescriptor descriptor = MdwPlugin.getImageDescriptor("icons/debug.gif");
        action.setImageDescriptor(descriptor);
        return action;
    }

    private IAction createInstancesAction() {
        IAction action = new Action() {
            public void run() {
                editor.showInstances();
            }
        };
        action.setText("");
        ImageDescriptor descriptor = MdwPlugin.getImageDescriptor("icons/list.gif");
        action.setImageDescriptor(descriptor);
        return action;
    }

    private IAction createLinkTypeAction() {
        IAction action = new Action(null, IAction.AS_DROP_DOWN_MENU) {
            public IMenuCreator getMenuCreator() {
                return linkTypeMenuCreator;
            }
        };
        action.setText("Link Style");
        ImageDescriptor descriptor = MdwPlugin.getImageDescriptor("icons/link.gif");
        action.setImageDescriptor(descriptor);
        return action;
    }

    private IAction createIconShapeAction() {
        IAction action = new Action(null, IAction.AS_DROP_DOWN_MENU) {
            public IMenuCreator getMenuCreator() {
                return iconShapeMenuCreator;
            }
        };
        action.setText("Icon Shape");
        ImageDescriptor descriptor = MdwPlugin.getImageDescriptor("icons/shape.gif");
        action.setImageDescriptor(descriptor);
        return action;
    }

    private IAction createProcessDefinitionAction() {
        IAction action = new Action() {
            public void run() {
                editor.openProcessDefinition();
            }
        };
        action.setText("");
        ImageDescriptor descriptor = MdwPlugin.getImageDescriptor("icons/process.gif");
        action.setImageDescriptor(descriptor);
        return action;
    }

    private IAction createZoomLevelAction() {
        IAction action = new Action(null, IAction.AS_DROP_DOWN_MENU) {
            public IMenuCreator getMenuCreator() {
                return zoomLevelMenuCreator;
            }
        };
        action.setText("Zoom Level");
        ImageDescriptor descriptor = MdwPlugin.getImageDescriptor("icons/zoom.gif");
        action.setImageDescriptor(descriptor);
        return action;
    }

    private IAction createExportAsAction() {
        IAction action = new Action() {
            public void run() {
                editor.exportAs();
            }
        };
        action.setText("");
        ImageDescriptor descriptor = MdwPlugin.getImageDescriptor("icons/export_as.gif");
        action.setImageDescriptor(descriptor);
        return action;
    }

    private IAction createRefreshAction() {
        IAction action = new Action() {
            public void run() {
                editor.refresh();
            }
        };
        action.setText("Refresh");
        ImageDescriptor descriptor = MdwPlugin.getImageDescriptor("icons/refresh.gif");
        action.setImageDescriptor(descriptor);
        return action;
    }

    private IAction createDisplayPrefsAction() {
        IAction action = new Action(null, IAction.AS_DROP_DOWN_MENU) {
            public IMenuCreator getMenuCreator() {
                return displayPrefsMenuCreator;
            }
        };
        action.setText("Display Prefs");
        ImageDescriptor descriptor = MdwPlugin.getImageDescriptor("icons/display_prefs.gif");
        action.setImageDescriptor(descriptor);
        return action;
    }

    public void dispose() {
        if (linkTypeMenuCreator != null)
            linkTypeMenuCreator.dispose();
        if (iconShapeMenuCreator != null)
            iconShapeMenuCreator.dispose();
        if (displayPrefsMenuCreator != null)
            displayPrefsMenuCreator.dispose();
    }

    class LinkTypeMenuCreator implements IMenuCreator {
        Menu menu;
        MenuItem straightItem;
        MenuItem elbow1Item;
        MenuItem elbow2Item;
        MenuItem elbow3Item;
        MenuItem curve1Item;

        public Menu getMenu(Control parent) {
            menu = createMenu(parent);
            return menu;
        }

        private Menu createMenu(Control parent) {
            Menu menu = new Menu(parent);

            // elbow
            elbow1Item = new MenuItem(menu, SWT.RADIO);
            elbow1Item.setData("Elbow");
            ImageDescriptor imageDesc = MdwPlugin.getImageDescriptor("icons/elbow1.gif");
            elbow1Item.setImage(imageDesc.createImage());
            elbow1Item.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(SelectionEvent e) {
                    select(elbow1Item);
                }
            });
            elbow1Item.setSelection(true);

            // straight
            straightItem = new MenuItem(menu, SWT.RADIO);
            straightItem.setData("Straight");
            imageDesc = MdwPlugin.getImageDescriptor("icons/straight.gif");
            straightItem.setImage(imageDesc.createImage());
            straightItem.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(SelectionEvent e) {
                    select(straightItem);
                }
            });

            // elbowH
            elbow2Item = new MenuItem(menu, SWT.RADIO);
            elbow2Item.setData("ElbowH");
            imageDesc = MdwPlugin.getImageDescriptor("icons/elbow2.gif");
            elbow2Item.setImage(imageDesc.createImage());
            elbow2Item.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(SelectionEvent e) {
                    select(elbow2Item);
                }
            });

            // elbowV
            elbow3Item = new MenuItem(menu, SWT.RADIO);
            elbow3Item.setData("ElbowV");
            imageDesc = MdwPlugin.getImageDescriptor("icons/elbow3.gif");
            elbow3Item.setImage(imageDesc.createImage());
            elbow3Item.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(SelectionEvent e) {
                    select(elbow3Item);
                }
            });

            // curved1
            curve1Item = new MenuItem(menu, SWT.RADIO);
            curve1Item.setData("Curve");
            imageDesc = MdwPlugin.getImageDescriptor("icons/curved1.gif");
            curve1Item.setImage(imageDesc.createImage());
            curve1Item.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(SelectionEvent e) {
                    select(curve1Item);
                }
            });

            if (linkStyle.equals("Elbow"))
                select(elbow1Item);
            else if (linkStyle.equals("Straight"))
                select(straightItem);
            else if (linkStyle.equals("ElbowH"))
                select(elbow2Item);
            else if (linkStyle.equals("ElbowV"))
                select(elbow3Item);
            else if (linkStyle.equals("Curve"))
                select(curve1Item);

            return menu;
        }

        private void select(MenuItem item) {
            straightItem.setSelection(false);
            elbow1Item.setSelection(false);
            elbow2Item.setSelection(false);
            elbow3Item.setSelection(false);
            curve1Item.setSelection(false);
            item.setSelection(true);

            linkStyle = (String) item.getData();
            editor.setCanvasLinkStyle(linkStyle);
        }

        public Menu getMenu(Menu parent) {
            // not used
            return null;
        }

        public void dispose() {
            if (menu != null)
                menu.dispose();
        }
    }

    class IconShapeMenuCreator implements IMenuCreator {
        Menu menu;
        MenuItem iconItem;
        MenuItem boxItem;
        MenuItem iconBoxItem;

        public Menu getMenu(Control parent) {
            menu = createMenu(parent);
            return menu;
        }

        private Menu createMenu(Control parent) {
            Menu menu = new Menu(parent);

            // iconBox
            iconBoxItem = new MenuItem(menu, SWT.RADIO);
            iconBoxItem.setData("BoxIcon");
            ImageDescriptor imageDesc = MdwPlugin.getImageDescriptor("icons/node-box-icon.gif");
            iconBoxItem.setImage(imageDesc.createImage());
            iconBoxItem.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(SelectionEvent e) {
                    select(iconBoxItem);
                }
            });

            // icon
            iconItem = new MenuItem(menu, SWT.RADIO);
            iconItem.setData("Icon");
            imageDesc = MdwPlugin.getImageDescriptor("icons/node-icon.gif");
            iconItem.setImage(imageDesc.createImage());
            iconItem.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(SelectionEvent e) {
                    select(iconItem);
                }
            });

            // box
            boxItem = new MenuItem(menu, SWT.RADIO);
            boxItem.setData("Box");
            imageDesc = MdwPlugin.getImageDescriptor("icons/node-box.gif");
            boxItem.setImage(imageDesc.createImage());
            boxItem.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(SelectionEvent e) {
                    select(boxItem);
                }
            });

            String nodeStyle = editor.getProcess().getAttribute("NodeStyle");
            if (nodeStyle == null)
                nodeStyle = "Icon";

            if (nodeStyle.equals("BoxIcon"))
                select(iconBoxItem);
            else if (nodeStyle.equals("Icon"))
                select(iconItem);
            else if (nodeStyle.equals("Box"))
                select(boxItem);

            return menu;
        }

        private void select(MenuItem item) {
            iconItem.setSelection(false);
            boxItem.setSelection(false);
            iconBoxItem.setSelection(false);
            item.setSelection(true);

            String nodeShape = (String) item.getData();
            editor.setCanvasNodeStyle(nodeShape);
        }

        public Menu getMenu(Menu parent) {
            // not used
            return null;
        }

        public void dispose() {
            if (menu != null)
                menu.dispose();
        }
    }

    class DisplayPrefsMenuCreator implements IMenuCreator {
        Menu menu;
        MenuItem nodeIdTypeLogicalItem;
        MenuItem nodeIdTypeSequenceItem;
        MenuItem nodeIdTypeReferenceItem;
        MenuItem nodeIdTypeDatabaseItem;
        MenuItem nodeIdTypeNoneItem;
        MenuItem showToolTipsItem;

        public Menu getMenu(Control parent) {
            menu = createMenu(parent);
            return menu;
        }

        private Menu createMenu(Control parent) {
            Menu menu = new Menu(parent);

            MenuItem subMenuItem = new MenuItem(menu, SWT.CASCADE);
            subMenuItem.setText("Node ID Type");

            Menu subMenu = new Menu(subMenuItem);
            subMenuItem.setMenu(subMenu);

            // logical
            nodeIdTypeLogicalItem = new MenuItem(subMenu, SWT.RADIO);
            nodeIdTypeLogicalItem.setData(Node.ID_LOGICAL);
            nodeIdTypeLogicalItem.setText("Logical ID");
            nodeIdTypeLogicalItem.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(SelectionEvent e) {
                    selectNodeIdType(nodeIdTypeLogicalItem);
                    MdwPlugin.getDefault().getPreferenceStore()
                            .setValue(PreferenceConstants.PREFS_DESIGNER_CANVAS_NODE_ID_TYPE, Node.ID_LOGICAL);
                }
            });

            // sequence
            nodeIdTypeSequenceItem = new MenuItem(subMenu, SWT.RADIO);
            nodeIdTypeSequenceItem.setData(Node.ID_SEQUENCE);
            nodeIdTypeSequenceItem.setText("Sequence Number");
            nodeIdTypeSequenceItem.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(SelectionEvent e) {
                    selectNodeIdType(nodeIdTypeSequenceItem);
                    MdwPlugin.getDefault().getPreferenceStore()
                            .setValue(PreferenceConstants.PREFS_DESIGNER_CANVAS_NODE_ID_TYPE, Node.ID_SEQUENCE);
                }
            });

            // reference
            nodeIdTypeReferenceItem = new MenuItem(subMenu, SWT.RADIO);
            nodeIdTypeReferenceItem.setData(Node.ID_REFERENCE);
            nodeIdTypeReferenceItem.setText("Reference ID");
            nodeIdTypeReferenceItem.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(SelectionEvent e) {
                    selectNodeIdType(nodeIdTypeReferenceItem);
                    MdwPlugin.getDefault().getPreferenceStore()
                            .setValue(PreferenceConstants.PREFS_DESIGNER_CANVAS_NODE_ID_TYPE, Node.ID_REFERENCE);
                }
            });

            // database
            nodeIdTypeDatabaseItem = new MenuItem(subMenu, SWT.RADIO);
            nodeIdTypeDatabaseItem.setData(Node.ID_DATABASE);
            nodeIdTypeDatabaseItem.setText("System ID");
            nodeIdTypeDatabaseItem.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(SelectionEvent e) {
                    selectNodeIdType(nodeIdTypeDatabaseItem);
                    MdwPlugin.getDefault().getPreferenceStore()
                            .setValue(PreferenceConstants.PREFS_DESIGNER_CANVAS_NODE_ID_TYPE, Node.ID_DATABASE);
                }
            });

            // none
            nodeIdTypeNoneItem = new MenuItem(subMenu, SWT.RADIO);
            nodeIdTypeNoneItem.setData(Node.ID_NONE);
            nodeIdTypeNoneItem.setText("None");
            nodeIdTypeNoneItem.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(SelectionEvent e) {
                    selectNodeIdType(nodeIdTypeNoneItem);
                    MdwPlugin.getDefault().getPreferenceStore()
                            .setValue(PreferenceConstants.PREFS_DESIGNER_CANVAS_NODE_ID_TYPE, Node.ID_NONE);
                }
            });

            String nodeIdType = editor.getNodeIdType();

            if (nodeIdType.equals(Node.ID_DATABASE))
                selectNodeIdType(nodeIdTypeDatabaseItem);
            else if (nodeIdType.equals(Node.ID_LOGICAL))
                selectNodeIdType(nodeIdTypeLogicalItem);
            else if (nodeIdType.equals(Node.ID_SEQUENCE))
                selectNodeIdType(nodeIdTypeSequenceItem);
            else if (nodeIdType.equals(Node.ID_REFERENCE))
                selectNodeIdType(nodeIdTypeReferenceItem);
            else if (nodeIdType.equals(Node.ID_NONE))
                selectNodeIdType(nodeIdTypeNoneItem);

            // showToolTips
            showToolTipsItem = new MenuItem(menu, SWT.CHECK);
            showToolTipsItem.setText("Show Tool Tips");
            showToolTipsItem.setEnabled(!editor.isForProcessInstance());
            showToolTipsItem.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(SelectionEvent e) {
                    boolean isShowTips = showToolTipsItem.getSelection();
                    editor.setShowToolTips(isShowTips);
                    MdwPlugin.getDefault().getPreferenceStore()
                            .setValue(PreferenceConstants.PREFS_DESIGNER_SUPPRESS_TOOLTIPS, !isShowTips);
                }
            });

            showToolTipsItem.setSelection(editor.isShowToolTips());

            return menu;
        }

        private void selectNodeIdType(MenuItem item) {
            nodeIdTypeDatabaseItem.setSelection(false);
            nodeIdTypeLogicalItem.setSelection(false);
            nodeIdTypeSequenceItem.setSelection(false);
            nodeIdTypeReferenceItem.setSelection(false);
            nodeIdTypeNoneItem.setSelection(false);
            item.setSelection(true);

            String nodeIdType = (String) item.getData();
            editor.setNodeIdType(nodeIdType);
        }

        public Menu getMenu(Menu parent) {
            // not used
            return null;
        }

        public void dispose() {
            if (menu != null)
                menu.dispose();
        }
    }
}