Package org.eclipse.ecf.internal.mylyn.ui

Source Code of org.eclipse.ecf.internal.mylyn.ui.CompoundContextActivationContributionItem

/*******************************************************************************
* 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();
    }
  }

}
TOP

Related Classes of org.eclipse.ecf.internal.mylyn.ui.CompoundContextActivationContributionItem

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.