org.eclipse.mylyn.internal.tasks.ui.context.CopyContextHandler.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.mylyn.internal.tasks.ui.context.CopyContextHandler.java

Source

/*******************************************************************************
 * Copyright (c) 2004, 2009 Tasktop Technologies 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:
 *     Tasktop Technologies - initial API and implementation
 *******************************************************************************/

package org.eclipse.mylyn.internal.tasks.ui.context;

import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.mylyn.commons.workbench.WorkbenchUtil;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.internal.tasks.ui.actions.TaskSelectionDialog;
import org.eclipse.mylyn.internal.tasks.ui.commands.AbstractTaskHandler;
import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.ui.TasksUi;
import org.eclipse.ui.PlatformUI;

/**
 * @author Steffen Pingel
 */
public class CopyContextHandler extends AbstractTaskHandler {

    private static final String TITLE_DIALOG = Messages.CopyContextHandler_Copy_Context;

    @Override
    protected void execute(ExecutionEvent event, ITask sourceTask) throws ExecutionException {
        run(sourceTask);
    }

    public static void run(ITask sourceTask) {
        if (sourceTask == null) {
            MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
                    TITLE_DIALOG, Messages.CopyContextHandler_No_source_task_selected);
            return;
        }

        TaskSelectionDialog dialog = new TaskSelectionDialog(WorkbenchUtil.getShell());
        dialog.setNeedsCreateTask(false);
        dialog.setTitle(Messages.CopyContextHandler_Select_Target_Task);
        dialog.setMessage(Messages.CopyContextHandler_Select_the_target_task__);

        if (dialog.open() != Window.OK) {
            return;
        }

        Object result = dialog.getFirstResult();

        if (result instanceof ITask) {
            ITask targetTask = (ITask) result;
            TasksUi.getTaskActivityManager().deactivateActiveTask();
            if (targetTask.equals(sourceTask)) {
                MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
                        TITLE_DIALOG, Messages.CopyContextHandler_TARGET_TASK_CON_NOT_BE_THE_SAME_AS_SOURCE_TASK);
            } else {
                final int REPLACE = 0;
                final int MERGE = 1;
                final int CANCEL = 2;
                int action = REPLACE;
                if (TasksUiPlugin.getContextStore().hasContext(targetTask)) {
                    MessageDialog dialog2 = new MessageDialog(
                            PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), TITLE_DIALOG, null,
                            Messages.CopyContextHandler_SELECTED_TASK_ALREADY_HAS_CONTEXT, MessageDialog.QUESTION,
                            new String[] { Messages.CopyContextHandler_Replace, Messages.CopyContextHandler_Merge,
                                    IDialogConstants.CANCEL_LABEL },
                            1);
                    action = dialog2.open();
                }

                switch (action) {
                case REPLACE:
                    IAdaptable context = TasksUiPlugin.getContextStore().copyContext(sourceTask, targetTask);
                    if (context == null) {
                        MessageDialog.openInformation(
                                PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), TITLE_DIALOG,
                                Messages.CopyContextHandler_SOURCE_TASK_DOES_HAVE_A_CONTEXT);
                        return;
                    }
                    break;
                case MERGE:
                    TasksUiPlugin.getContextStore().mergeContext(sourceTask, targetTask);
                    break;
                case CANCEL:
                    return;
                }

                TasksUiInternal.activateTaskThroughCommand(targetTask);
            }
        } else {
            MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
                    TITLE_DIALOG, Messages.CopyContextHandler_No_target_task_selected);
        }
    }

}