org.splevo.ui.vpexplorer.explorer.SwitchBackVPM.java Source code

Java tutorial

Introduction

Here is the source code for org.splevo.ui.vpexplorer.explorer.SwitchBackVPM.java

Source

/*******************************************************************************
 * Copyright (c) 2014
 *
 * 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:
 *    Stephan Seifermann
 *******************************************************************************/
package org.splevo.ui.vpexplorer.explorer;

import org.apache.commons.io.FilenameUtils;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuCreator;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.splevo.project.VPMModelReference;
import org.splevo.ui.vpexplorer.util.VPMUIUtil;

import com.google.common.collect.Lists;

/**
 * Action for switching back the VPM version. It is realized as a drop down box from which the user
 * can choose the version.
 */
public class SwitchBackVPM extends Action {

    /**
     * Rollback action for a specific VPM path. This is used in the selection menu for the user.
     */
    private class VPMRollbackMenuAction extends Action {

        private final VPMModelReference vpmReference;

        public VPMRollbackMenuAction(VPMModelReference reference) {
            super(FilenameUtils.getBaseName(reference.getPath()));
            this.vpmReference = reference;
        }

        @Override
        public void runWithEvent(Event event) {
            Shell shell = event.widget.getDisplay().getActiveShell();
            boolean confirmed = MessageDialog.openQuestion(shell, "Switch Back VPM Version", String.format(
                    "You want to switch back to %s, which removes all later versions. Do you want to continue?",
                    getText()));
            if (confirmed) {
                VPMUIUtil.switchBackVPMVersion(vpexplorer.getSPLevoProject(), vpmReference);
            }
        }

    }

    private static final String ACTION_TEXT = "Switch Back VPM";
    private final VPExplorer vpexplorer;

    /**
     * Constructs a new switch back action for VPMs.
     * 
     * @param vpexplorer
     *            The VPExplorer to which this action belongs. It also provides the switch back
     *            helper used in this action.
     */
    public SwitchBackVPM(VPExplorer vpexplorer) {
        super(ACTION_TEXT, AS_DROP_DOWN_MENU);
        this.vpexplorer = vpexplorer;
    }

    @Override
    public ImageDescriptor getImageDescriptor() {
        return PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_TOOL_UNDO);
    }

    @Override
    public IMenuCreator getMenuCreator() {
        IMenuCreator menuCreator = new IMenuCreator() {

            @Override
            public void dispose() {
                // TODO Auto-generated method stub
            }

            @Override
            public Menu getMenu(Control parent) {
                return createMenuManager().createContextMenu(parent);
            }

            @Override
            public Menu getMenu(Menu parent) {
                return null;
            }

            private MenuManager createMenuManager() {
                MenuManager manager = new MenuManager();

                manager.addMenuListener(new IMenuListener() {
                    @Override
                    public void menuAboutToShow(IMenuManager manager) {
                        if (vpexplorer.getSPLevoProject() != null && vpexplorer.getSPLevoProject() != null
                                && vpexplorer.getSPLevoProject().getVpmModelReferences().size() > 0) {
                            for (VPMModelReference reference : Lists
                                    .reverse(vpexplorer.getSPLevoProject().getVpmModelReferences())) {
                                manager.add(new VPMRollbackMenuAction(reference));
                            }
                        }
                    }
                });

                return manager;
            }
        };

        return menuCreator;
    }

}