org.xmind.ui.internal.handlers.SaveWorkbookAsHandler.java Source code

Java tutorial

Introduction

Here is the source code for org.xmind.ui.internal.handlers.SaveWorkbookAsHandler.java

Source

/* ******************************************************************************
 * Copyright (c) 2006-2016 XMind Ltd. and others.
 * 
 * This file is a part of XMind 3. XMind releases 3 and
 * above are dual-licensed under the Eclipse Public License (EPL),
 * which is available at http://www.eclipse.org/legal/epl-v10.html
 * and the GNU Lesser General Public License (LGPL), 
 * which is available at http://www.gnu.org/licenses/lgpl.html
 * See http://www.xmind.net/license.html for details.
 * 
 * Contributors:
 *     XMind Ltd. - initial API and implementation
 *******************************************************************************/
/**
 * 
 */
package org.xmind.ui.internal.handlers;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.expressions.IEvaluationContext;
import org.eclipse.core.runtime.SafeRunner;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.util.SafeRunnable;
import org.eclipse.jface.viewers.IFilter;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.handlers.HandlerUtil;
import org.xmind.ui.commands.MindMapCommandConstants;
import org.xmind.ui.internal.MindMapMessages;
import org.xmind.ui.mindmap.IWorkbookRef;
import org.xmind.ui.mindmap.MindMapUI;
import org.xmind.ui.wizards.ISaveContext;

/**
 * @author Frank Shaka
 * @since 3.6.50
 */
public class SaveWorkbookAsHandler extends AbstractHandler {

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.
     * ExecutionEvent)
     */
    @Override
    public Object execute(final ExecutionEvent event) throws ExecutionException {
        final IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
        Object selection = HandlerUtil.getCurrentSelectionChecked(event);
        if (selection instanceof IStructuredSelection) {
            selection = ((IStructuredSelection) selection).getFirstElement();
        }
        if (!(selection instanceof IWorkbookRef))
            return null;

        final String preferredWizardId = event.getParameter(MindMapCommandConstants.SAVE_AS_WIZARD_ID_PARAM);
        final Set<String> excludedWizardIds = getExcludedWizardIds(event);

        final IWorkbookRef oldWorkbookRef = (IWorkbookRef) selection;
        final IWorkbookRef[] result = new IWorkbookRef[1];

        final ProgressMonitorDialog jobRunner = new ProgressMonitorDialog(window.getShell());
        jobRunner.setOpenOnRun(false);

        SafeRunner.run(new SafeRunnable() {
            @Override
            public void run() throws Exception {
                result[0] = org.xmind.ui.internal.e4handlers.SaveWorkbookAsHandler
                        .saveWorkbookAs(new ISaveContext() {

                            @Override
                            public Object getContextVariable(String key) {
                                Object variable = HandlerUtil.getVariable(event, key);
                                return variable == IEvaluationContext.UNDEFINED_VARIABLE ? null : variable;
                            }

                            @Override
                            public <T> T getContextVariable(Class<T> key) {
                                return window.getService(key);
                            }
                        }, oldWorkbookRef, jobRunner, new IFilter() {
                            @Override
                            public boolean select(Object wizardId) {
                                if (preferredWizardId != null) {
                                    return preferredWizardId.equals(wizardId);
                                } else if (!excludedWizardIds.isEmpty()) {
                                    return !excludedWizardIds.contains(wizardId);
                                }
                                return true;
                            }
                        }, false);
            }
        });

        final IWorkbookRef newWorkbookRef = result[0];
        if (newWorkbookRef == null || newWorkbookRef.equals(oldWorkbookRef))
            return null;

        MessageDialog dialog = new MessageDialog(window.getShell(),
                MindMapMessages.SaveWorkbookAsHandler_doneDialog_title, null,
                MindMapMessages.SaveWorkbookAsHandler_doneDialog_message, MessageDialog.CONFIRM, new String[] {

                        MindMapMessages.SaveWorkbookAsHandler_doneDialog_okButton_text,

                        MindMapMessages.SaveWorkbookAsHandler_doneDialog_cancelButton_text

                }, 0);
        if (dialog.open() != MessageDialog.OK)
            return null;

        try {
            window.getActivePage().openEditor(MindMapUI.getEditorInputFactory().createEditorInput(newWorkbookRef),
                    MindMapUI.MINDMAP_EDITOR_ID, true);
        } catch (PartInitException e) {
            throw new ExecutionException(e.getMessage(), e);
        }

        return null;
    }

    private static Set<String> getExcludedWizardIds(ExecutionEvent event) {
        HashSet<String> set = new HashSet<String>();
        String param = event.getParameter(MindMapCommandConstants.SAVE_AS_EXCLUDED_WIZARD_IDS_PARAM);
        if (param != null) {
            set.addAll(Arrays.asList(param.split(","))); //$NON-NLS-1$
        }
        return set;
    }

}