org.eclipse.dirigible.ide.extensions.ui.view.ExtensionsManagerView.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.dirigible.ide.extensions.ui.view.ExtensionsManagerView.java

Source

/*******************************************************************************
 * Copyright (c) 2017 SAP 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:
 * SAP - initial API and implementation
 *******************************************************************************/

package org.eclipse.dirigible.ide.extensions.ui.view;

import org.eclipse.dirigible.ide.common.CommonIDEParameters;
import org.eclipse.dirigible.ide.repository.RepositoryFacade;
import org.eclipse.dirigible.repository.datasource.DataSourceFacade;
import org.eclipse.dirigible.repository.ext.extensions.EExtensionException;
import org.eclipse.dirigible.repository.ext.extensions.ExtensionManager;
import org.eclipse.dirigible.repository.logging.Logger;
import org.eclipse.jface.action.Action;
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.MessageDialog;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.FilteredTree;
import org.eclipse.ui.dialogs.PatternFilter;
import org.eclipse.ui.part.ViewPart;

public class ExtensionsManagerView extends ViewPart {

    private static final Logger logger = Logger.getLogger(ExtensionsManagerView.class);

    private TreeViewer viewer;
    private Action actionRemove;
    private Action actionRefresh;

    private ExtensionManager extensionManager = new ExtensionManager(RepositoryFacade.getInstance().getRepository(),
            DataSourceFacade.getInstance().getDataSource(CommonIDEParameters.getRequest()),
            CommonIDEParameters.getRequest());

    class NameSorter extends ViewerSorter {

        /**
         *
         */
        private static final long serialVersionUID = -8832089975378999206L;

        @Override
        public int compare(Viewer lviewer, Object e1, Object e2) {
            if ((e1 != null) && (e2 != null) && (e1 instanceof SimpleTreeNode) && (e2 instanceof SimpleTreeNode)
                    && !(((SimpleTreeNode) e1).isRootElement() ^ ((SimpleTreeNode) e2).isRootElement())) {
                return super.compare(lviewer, e1.toString(), e2.toString());
            }
            return super.compare(lviewer, e1, e2);
        }

    }

    /**
     * This is a callback that will allow us to create the viewer and initialize
     * it.
     */
    @Override
    public void createPartControl(Composite parent) {
        PatternFilter filter = new PatternFilter();
        FilteredTree tree = new FilteredTree(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL, filter, true);
        viewer = tree.getViewer();
        TreeColumn column = new TreeColumn(viewer.getTree(), SWT.LEFT);
        column.setText(Messages.ExtensionsManagerView_EXTENSIONS);
        column.setWidth(600);

        viewer.setContentProvider(new ExtensionsViewContentProvider(extensionManager));
        viewer.setLabelProvider(new ExtensionsViewLabelProvider());
        viewer.setSorter(new NameSorter());
        viewer.setInput(getViewSite());
        makeActions();
        hookContextMenu();
        contributeToActionBars();
    }

    private void hookContextMenu() {
        MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$
        menuMgr.setRemoveAllWhenShown(true);
        menuMgr.addMenuListener(new IMenuListener() {
            /**
             *
             */
            private static final long serialVersionUID = -8683354310299838422L;

            @Override
            public void menuAboutToShow(IMenuManager manager) {
                ExtensionsManagerView.this.fillContextMenu(manager);
            }
        });
        Menu menu = menuMgr.createContextMenu(viewer.getControl());
        viewer.getControl().setMenu(menu);
        getSite().registerContextMenu(menuMgr, viewer);
    }

    private void contributeToActionBars() {
        IActionBars bars = getViewSite().getActionBars();
        fillLocalPullDown(bars.getMenuManager());
        fillLocalToolBar(bars.getToolBarManager());
    }

    private void fillLocalPullDown(IMenuManager manager) {
        manager.add(actionRemove);
        manager.add(new Separator());
        manager.add(actionRefresh);
    }

    private void fillContextMenu(IMenuManager manager) {
        manager.add(actionRemove);
        manager.add(actionRefresh);
        // Other plug-ins can contribute there actions here
        manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
    }

    private void fillLocalToolBar(IToolBarManager manager) {
        manager.add(actionRemove);
        manager.add(actionRefresh);
    }

    private void makeActions() {

        actionRemove = new Action() {
            /**
             *
             */
            private static final long serialVersionUID = 1336014167502247774L;

            @Override
            public void run() {

                if (!viewer.getSelection().isEmpty()) {
                    StructuredSelection selection = (StructuredSelection) viewer.getSelection();
                    Object[] selectedElements = selection.toArray();
                    if (MessageDialog.openConfirm(viewer.getControl().getShell(),
                            Messages.ExtensionsManagerView_DELETE_EXTENSIONS_TITLE,
                            Messages.ExtensionsManagerView_DELETE_EXTENSIONS_DIALOG_DESCRIPTION)) {
                        String extensionToDelete = ""; //$NON-NLS-1$
                        try {

                            for (Object element : selectedElements) {
                                SimpleTreeNode simpleTreeNode = (SimpleTreeNode) element;
                                extensionToDelete = simpleTreeNode.getName();
                                if (simpleTreeNode.isRootElement()) {
                                    extensionManager.removeExtensionPoint(simpleTreeNode.getName());
                                } else {
                                    extensionManager.removeExtension(simpleTreeNode.getName(),
                                            simpleTreeNode.getParent().getName());
                                }
                            }
                        } catch (EExtensionException e) {
                            MessageDialog.openError(viewer.getControl().getShell(),
                                    Messages.ExtensionsManagerView_FAILED_TO_DELETE_EXTENSION + extensionToDelete,
                                    e.getMessage());
                        } finally {
                            viewer.refresh();
                        }
                    }
                }
            }
        };
        actionRemove.setText(Messages.ExtensionsManagerView_DELETE_LABEL);
        actionRemove.setToolTipText(Messages.ExtensionsManagerView_DELETE_ACTION_TOOL_TIP);
        actionRemove.setImageDescriptor(
                PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_ELCL_REMOVE));

        actionRefresh = new Action() {
            /**
             *
             */
            private static final long serialVersionUID = 506492927597193506L;

            @Override
            public void run() {
                viewer.refresh();
            }
        };
        actionRefresh.setText(Messages.ExtensionsManagerView_REFRESH_LABEL);
        actionRefresh.setToolTipText(Messages.ExtensionsManagerView_REFRESH_ACTION_TOOLTIP);
        actionRefresh.setImageDescriptor(
                PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_ELCL_SYNCED));

    }

    /**
     * Passing the focus request to the viewer's control.
     */
    @Override
    public void setFocus() {
        viewer.getControl().setFocus();
    }

}