| /******************************************************************************* |
| * Copyright (c) 2007, 2008 IBM Corporation 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: |
| * IBM Corporation - initial API and implementation |
| * Red Hat - update to Mylyn 3.0 API |
| *******************************************************************************/ |
| package org.eclipse.ecf.internal.mylyn.ui; |
| |
| import java.util.*; |
| import org.eclipse.core.runtime.*; |
| import org.eclipse.core.runtime.jobs.Job; |
| import org.eclipse.jface.action.*; |
| import org.eclipse.jface.dialogs.MessageDialog; |
| import org.eclipse.mylyn.context.core.ContextCore; |
| import org.eclipse.mylyn.context.core.IInteractionContext; |
| import org.eclipse.mylyn.internal.context.core.LocalContextStore; |
| import org.eclipse.mylyn.internal.tasks.core.ITaskList; |
| import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; |
| import org.eclipse.mylyn.tasks.core.ITask; |
| import org.eclipse.mylyn.tasks.ui.TasksUi; |
| import org.eclipse.swt.widgets.Menu; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.ui.actions.CompoundContributionItem; |
| import org.eclipse.ui.progress.UIJob; |
| |
| public class CompoundContextActivationContributionItem extends CompoundContributionItem { |
| |
| static LinkedList tasks = new LinkedList(); |
| |
| static Map contexts = new HashMap(); |
| |
| private static ActivateTaskAction[] actions = new ActivateTaskAction[5]; |
| |
| private Shell shell; |
| |
| static { |
| for (int i = 0; i < 5; i++) { |
| actions[i] = new ActivateTaskAction(); |
| } |
| } |
| |
| public void fill(Menu menu, int index) { |
| shell = menu.getShell(); |
| super.fill(menu, index); |
| } |
| |
| protected IContributionItem[] getContributionItems() { |
| int count = 0; |
| for (Iterator it = tasks.iterator(); it.hasNext() && count != 5;) { |
| ITask task = (ITask) it.next(); |
| actions[count].setShell(shell); |
| actions[count].setTask(task); |
| count++; |
| } |
| |
| IContributionItem[] array = null; |
| |
| if (count == 5 && tasks.size() != 5) { |
| array = new IContributionItem[7]; |
| array[5] = new Separator(); |
| array[6] = new ActionContributionItem(new Action("Activate received task...") { |
| public void run() { |
| ActivateReceivedContextHandler.open(shell); |
| } |
| }); |
| } else { |
| array = new IContributionItem[count]; |
| } |
| |
| for (int i = 0; i < count; i++) { |
| array[i] = new ActionContributionItem(actions[i]); |
| } |
| |
| return array; |
| } |
| |
| static void enqueue(ITask task, IInteractionContext context) { |
| tasks.add(task); |
| contexts.put(task, context); |
| } |
| |
| static class ActivateTaskAction extends Action { |
| |
| private static final String TITLE_DIALOG = "Mylyn Information"; |
| |
| private Shell shell; |
| private ITask task; |
| |
| void setShell(Shell shell) { |
| this.shell = shell; |
| } |
| |
| void setTask(ITask task) { |
| this.task = task; |
| setText(task.getSummary()); |
| } |
| |
| public void run() { |
| final IInteractionContext context = (IInteractionContext) contexts.get(task); |
| |
| final ITaskList taskList = TasksUiPlugin.getTaskList(); |
| if (taskList.getTask(task.getRepositoryUrl(), task.getTaskId()) != null) { |
| boolean confirmed = MessageDialog.openConfirm(shell, TITLE_DIALOG, "The task '" + task.getSummary() + "' already exists. Do you want to override its context with the source?"); |
| if (confirmed) { |
| Job job = new Job("Import context") { |
| protected IStatus run(IProgressMonitor monitor) { |
| ((LocalContextStore) ContextCore.getContextStore()).importContext(context); |
| scheduleTaskActivationJob(); |
| return Status.OK_STATUS; |
| } |
| }; |
| job.schedule(); |
| } else { |
| return; |
| } |
| } else { |
| Job job = new Job("Import task") { |
| protected IStatus run(IProgressMonitor monitor) { |
| ((LocalContextStore) ContextCore.getContextStore()).importContext(context); |
| taskList.addTask(task); |
| scheduleTaskActivationJob(); |
| return Status.OK_STATUS; |
| } |
| }; |
| job.schedule(); |
| } |
| tasks.remove(task); |
| contexts.remove(task); |
| } |
| |
| private void scheduleTaskActivationJob() { |
| UIJob job = new UIJob(shell.getDisplay(), "Activate imported task") { |
| public IStatus runInUIThread(IProgressMonitor monitor) { |
| TasksUi.getTaskActivityManager().activateTask(task); |
| return Status.OK_STATUS; |
| } |
| }; |
| job.schedule(); |
| } |
| } |
| |
| } |