diff options
16 files changed, 923 insertions, 532 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/ClearContextAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/ClearContextAction.java new file mode 100644 index 000000000..a22ab1538 --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/ClearContextAction.java @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2004 - 2005 University Of British Columbia 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: + * University Of British Columbia - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylar.tasks.ui.actions; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.mylar.core.MylarPlugin; +import org.eclipse.mylar.tasks.BugzillaHit; +import org.eclipse.mylar.tasks.BugzillaTask; +import org.eclipse.mylar.tasks.ITask; +import org.eclipse.mylar.tasks.Task; +import org.eclipse.mylar.tasks.ui.views.TaskListView; +import org.eclipse.mylar.ui.MylarImages; + +/** + * @author Mik Kersten and Ken Sueda + */ +public class ClearContextAction extends Action { + + public static final String ID = "org.eclipse.mylar.tasks.actions.context.clear"; + + private final TaskListView view; + + public ClearContextAction(TaskListView view) { + this.view = view; + setText("Clear Task Context"); + setToolTipText("Clear Task Context"); + setId(ID); + setImageDescriptor(MylarImages.ERASE_TASKSCAPE); + } + @Override + public void run() { + MylarPlugin.getDefault().actionObserved(this); + Object selectedObject = ((IStructuredSelection)this.view.getViewer().getSelection()).getFirstElement(); + if (selectedObject != null && selectedObject instanceof ITask) { + MylarPlugin.getTaskscapeManager().taskDeleted(((ITask)selectedObject).getHandle(), ((Task)selectedObject).getPath()); + this.view.getViewer().refresh(); + } else if (selectedObject != null && selectedObject instanceof BugzillaHit) { + BugzillaTask task = ((BugzillaHit)selectedObject).getAssociatedTask(); + if(task != null){ + MylarPlugin.getTaskscapeManager().taskDeleted(task.getHandle(), task.getPath()); + } + this.view.getViewer().refresh(); + } + } +}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/CreateBugzillaQueryCategoryAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/CreateBugzillaQueryCategoryAction.java new file mode 100644 index 000000000..1faac748a --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/CreateBugzillaQueryCategoryAction.java @@ -0,0 +1,71 @@ +/******************************************************************************* + * Copyright (c) 2004 - 2005 University Of British Columbia 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: + * University Of British Columbia - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylar.tasks.ui.actions; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jface.action.Action; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.mylar.core.MylarPlugin; +import org.eclipse.mylar.tasks.BugzillaQueryCategory; +import org.eclipse.mylar.tasks.MylarTasksPlugin; +import org.eclipse.mylar.tasks.ui.views.BugzillaQueryDialog; +import org.eclipse.mylar.tasks.ui.views.TaskListView; +import org.eclipse.mylar.ui.MylarImages; +import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.actions.WorkspaceModifyOperation; +import org.eclipse.ui.progress.IProgressService; + +/** + * @author Mik Kersten and Ken Sueda + */ +public class CreateBugzillaQueryCategoryAction extends Action { + + public static final String ID = "org.eclipse.mylar.tasks.actions.create.bug.query"; + + private final TaskListView view; + + public CreateBugzillaQueryCategoryAction(TaskListView view) { + this.view = view; + setText("Add Bugzilla Query"); + setToolTipText("Add Bugzilla Query"); + setId(ID); + setImageDescriptor(MylarImages.CATEGORY_QUERY_NEW); + } + + @Override + public void run() { + + // ask the user for the query string and a name + MylarPlugin.getDefault().actionObserved(this); + BugzillaQueryDialog sqd = new BugzillaQueryDialog(Display.getCurrent().getActiveShell()); + if(sqd.open() == Dialog.OK){ + final BugzillaQueryCategory queryCategory = new BugzillaQueryCategory(sqd.getName(), sqd.getUrl()); + + MylarTasksPlugin.getTaskListManager().getTaskList().addCategory(queryCategory); + WorkspaceModifyOperation op = new WorkspaceModifyOperation() { + protected void execute(IProgressMonitor monitor) throws CoreException { + queryCategory.refreshBugs(); + } + }; + + IProgressService service = PlatformUI.getWorkbench().getProgressService(); + try { + service.run(true, true, op); + } catch (Exception e) { + MylarPlugin.log(e, "There was a problem executing the query refresh"); + } + this.view.getViewer().refresh(); + } + } +}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/CreateBugzillaTaskAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/CreateBugzillaTaskAction.java new file mode 100644 index 000000000..8005d4a1c --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/CreateBugzillaTaskAction.java @@ -0,0 +1,77 @@ +/******************************************************************************* + * Copyright (c) 2004 - 2005 University Of British Columbia 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: + * University Of British Columbia - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylar.tasks.ui.actions; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.mylar.core.MylarPlugin; +import org.eclipse.mylar.tasks.BugzillaTask; +import org.eclipse.mylar.tasks.ITask; +import org.eclipse.mylar.tasks.MylarTasksPlugin; +import org.eclipse.mylar.tasks.TaskCategory; +import org.eclipse.mylar.tasks.ui.views.TaskListView; +import org.eclipse.mylar.ui.MylarImages; + +/** + * @author Mik Kersten and Ken Sueda + */ +public class CreateBugzillaTaskAction extends Action { + + public static final String ID = "org.eclipse.mylar.tasks.actions.create.bug"; + + private final TaskListView view; + + public CreateBugzillaTaskAction(TaskListView view) { + this.view = view; + setText("Add Bugzilla Report"); + setToolTipText("Add Bugzilla Report"); + setId(ID); + setImageDescriptor(MylarImages.TASK_BUGZILLA_NEW); + } + + @Override + public void run() { + MylarPlugin.getDefault().actionObserved(this); + String bugIdString = this.view.getBugIdFromUser(); + int bugId = -1; + try { + if (bugIdString != null) { + bugId = Integer.parseInt(bugIdString); + } else { + return; + } + } catch (NumberFormatException nfe) { + this.view.showMessage("Please enter a valid report number"); + return; + } + + // XXX we don't care about duplicates since we use a registrey + // Check the existing tasks to see if the id is used already. + // This is to prevent the creation of mutliple Bugzilla tasks + // for the same Bugzilla report. +// boolean doesIdExistAlready = false; +// doesIdExistAlready = lookForId("Bugzilla-" + bugId); +// if (doesIdExistAlready) { +// showMessage("A Bugzilla task with ID Bugzilla-" + bugId + " already exists."); +// return; +// } + + ITask newTask = new BugzillaTask("Bugzilla-"+bugId, "<bugzilla info>"); + Object selectedObject = ((IStructuredSelection)this.view.getViewer().getSelection()).getFirstElement(); + if (selectedObject instanceof TaskCategory){ + ((TaskCategory)selectedObject).addTask(newTask); + } else { + MylarTasksPlugin.getTaskListManager().getTaskList().addRootTask(newTask); + } + this.view.getViewer().refresh(); + } +}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/CreateCategoryAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/CreateCategoryAction.java new file mode 100644 index 000000000..7c56fe2f1 --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/CreateCategoryAction.java @@ -0,0 +1,47 @@ +/******************************************************************************* + * Copyright (c) 2004 - 2005 University Of British Columbia 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: + * University Of British Columbia - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylar.tasks.ui.actions; + +import org.eclipse.jface.action.Action; +import org.eclipse.mylar.core.MylarPlugin; +import org.eclipse.mylar.tasks.MylarTasksPlugin; +import org.eclipse.mylar.tasks.TaskCategory; +import org.eclipse.mylar.tasks.ui.views.TaskListView; +import org.eclipse.mylar.ui.MylarImages; + +/** + * @author Mik Kersten and Ken Sueda + */ +public class CreateCategoryAction extends Action { + + public static final String ID = "org.eclipse.mylar.tasks.actions.create.category"; + + private final TaskListView view; + + public CreateCategoryAction(TaskListView view) { + this.view = view; + setText("Add Category"); + setToolTipText("Add Category"); + setId(ID); + setImageDescriptor(MylarImages.CATEGORY_NEW); + } + + @Override + public void run() { + MylarPlugin.getDefault().actionObserved(this); + String label = this.view.getLabelNameFromUser("Category"); + if(label == null) return; + TaskCategory cat = new TaskCategory(label); + MylarTasksPlugin.getTaskListManager().getTaskList().addCategory(cat); + this.view.getViewer().refresh(); + } +}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/CreateTaskAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/CreateTaskAction.java new file mode 100644 index 000000000..eb849dcbd --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/CreateTaskAction.java @@ -0,0 +1,66 @@ +/******************************************************************************* + * Copyright (c) 2004 - 2005 University Of British Columbia 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: + * University Of British Columbia - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylar.tasks.ui.actions; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.mylar.core.MylarPlugin; +import org.eclipse.mylar.tasks.MylarTasksPlugin; +import org.eclipse.mylar.tasks.Task; +import org.eclipse.mylar.tasks.TaskCategory; +import org.eclipse.mylar.tasks.ui.views.TaskListView; +import org.eclipse.mylar.ui.MylarImages; +import org.eclipse.mylar.ui.MylarUiPlugin; + +/** + * @author Mik Kersten and Ken Sueda + */ +public class CreateTaskAction extends Action { + + public static final String ID = "org.eclipse.mylar.tasks.actions.create.task"; + + private final TaskListView view; + + public CreateTaskAction(TaskListView view) { + this.view = view; + setText("Add Task"); + setToolTipText("Add Task"); + setId(ID); + setImageDescriptor(MylarImages.TASK_NEW); + } + + @Override + public void run() { + MylarPlugin.getDefault().actionObserved(this); + String label = this.view.getLabelNameFromUser("task"); + if(label == null) return; + Task newTask = new Task(MylarTasksPlugin.getTaskListManager().genUniqueTaskId(), label); + + Object selectedObject = ((IStructuredSelection)this.view.getViewer().getSelection()).getFirstElement(); + if (selectedObject instanceof TaskCategory){ + newTask.setCategory((TaskCategory)selectedObject); + ((TaskCategory)selectedObject).addTask(newTask); + } +// else if (selectedObject instanceof Task) { +// ITask t = (ITask) selectedObject; +// newTask.setParent(t); +// t.addSubTask(newTask); +// } + else { + MylarTasksPlugin.getTaskListManager().getTaskList().addRootTask(newTask); + } + MylarUiPlugin.getDefault().setHighlighterMapping( + newTask.getHandle(), + MylarUiPlugin.getDefault().getDefaultHighlighter().getName()); + this.view.getViewer().refresh(); + } +}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/DeleteAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/DeleteAction.java new file mode 100644 index 000000000..56248b78e --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/DeleteAction.java @@ -0,0 +1,89 @@ +/******************************************************************************* + * Copyright (c) 2004 - 2005 University Of British Columbia 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: + * University Of British Columbia - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylar.tasks.ui.actions; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.mylar.core.MylarPlugin; +import org.eclipse.mylar.tasks.BugzillaQueryCategory; +import org.eclipse.mylar.tasks.ITask; +import org.eclipse.mylar.tasks.MylarTasksPlugin; +import org.eclipse.mylar.tasks.Task; +import org.eclipse.mylar.tasks.TaskCategory; +import org.eclipse.mylar.tasks.ui.views.TaskListView; +import org.eclipse.mylar.ui.MylarImages; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.internal.Workbench; + +/** + * @author Mik Kersten and Ken Sueda + */ +public class DeleteAction extends Action { + + public static final String ID = "org.eclipse.mylar.tasks.actions.delete"; + + private final TaskListView view; + + public DeleteAction(TaskListView view) { + this.view = view; + setText("Delete"); + setId(ID); + setImageDescriptor(MylarImages.REMOVE); + } + + @Override + public void run() { + MylarPlugin.getDefault().actionObserved(this); + boolean deleteConfirmed = MessageDialog.openQuestion( + Workbench.getInstance().getActiveWorkbenchWindow().getShell(), + "Confirm delete", + "Delete selected item?"); + if (!deleteConfirmed) { + return; + } else { + Object selectedObject = ((IStructuredSelection)this.view.getViewer().getSelection()).getFirstElement(); + if (selectedObject instanceof Task) { + MylarTasksPlugin.getTaskListManager().deleteTask((Task)selectedObject); + MylarPlugin.getTaskscapeManager().taskDeleted(((Task)selectedObject).getHandle(), ((Task)selectedObject).getPath()); + IWorkbenchPage page = MylarTasksPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage(); + + // if we couldn't get the page, get out of here + if (page == null) + return; + try{ + this.view.closeTaskEditors((ITask)selectedObject, page); + }catch(Exception e){ + MylarPlugin.log(e, " deletion failed"); + } + } else if (selectedObject instanceof TaskCategory) { + TaskCategory cat = (TaskCategory) selectedObject; + for (ITask task : cat.getChildren()) { + MylarPlugin.getTaskscapeManager().taskDeleted(task.getHandle(), task.getPath()); + IWorkbenchPage page = MylarTasksPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage(); + if (page == null) + return; + try{ + this.view.closeTaskEditors(task, page); + }catch(Exception e){ + MylarPlugin.log(e, " deletion failed"); + } + } + MylarTasksPlugin.getTaskListManager().deleteCategory((TaskCategory)selectedObject); + } else if (selectedObject instanceof BugzillaQueryCategory) { + BugzillaQueryCategory cat = (BugzillaQueryCategory) selectedObject; + MylarTasksPlugin.getTaskListManager().deleteCategory(cat); + } + } + this.view.getViewer().refresh(); + } +}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/FilterCompletedTasksAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/FilterCompletedTasksAction.java new file mode 100644 index 000000000..598764552 --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/FilterCompletedTasksAction.java @@ -0,0 +1,50 @@ +/******************************************************************************* + * Copyright (c) 2004 - 2005 University Of British Columbia 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: + * University Of British Columbia - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylar.tasks.ui.actions; + +import org.eclipse.jface.action.Action; +import org.eclipse.mylar.core.MylarPlugin; +import org.eclipse.mylar.tasks.MylarTasksPlugin; +import org.eclipse.mylar.tasks.ui.views.TaskListView; +import org.eclipse.mylar.ui.MylarImages; + +/** + * @author Mik Kersten and Ken Sueda + */ +public class FilterCompletedTasksAction extends Action { + + public static final String ID = "org.eclipse.mylar.tasks.actions.filter.completed"; + + private final TaskListView view; + + public FilterCompletedTasksAction(TaskListView view) { + this.view = view; + setText("Filter Completed Tasks"); + setToolTipText("Filter Completed Tasks"); + setId(ID); + setImageDescriptor(MylarImages.FILTER_COMPLETE); + setChecked(MylarTasksPlugin.getDefault().isFilterCompleteMode()); + } + @Override + public void run() { + MylarPlugin.getDefault().actionObserved(this); + MylarTasksPlugin.getDefault().setFilterCompleteMode(isChecked()); + if (isChecked()) { + this.view.getViewer().addFilter(this.view.getCompleteFilter()); +// filterInCompleteTask.setChecked(false); +// viewer.removeFilter(inCompleteFilter); + } else { + this.view.getViewer().removeFilter(this.view.getCompleteFilter()); + } + this.view.getViewer().refresh(); + } +}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/MarkTaskCompleteAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/MarkTaskCompleteAction.java new file mode 100644 index 000000000..19dc18e6d --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/MarkTaskCompleteAction.java @@ -0,0 +1,47 @@ +/******************************************************************************* + * Copyright (c) 2004 - 2005 University Of British Columbia 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: + * University Of British Columbia - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylar.tasks.ui.actions; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.mylar.core.MylarPlugin; +import org.eclipse.mylar.tasks.Task; +import org.eclipse.mylar.tasks.ui.views.TaskListView; +import org.eclipse.mylar.ui.MylarImages; + +/** + * @author Mik Kersten and Ken Sueda + */ +public class MarkTaskCompleteAction extends Action { + + public static final String ID = "org.eclipse.mylar.tasks.actions.mark.completed"; + + private final TaskListView view; + + public MarkTaskCompleteAction(TaskListView view) { + this.view = view; + setText("Mark Complete"); + setToolTipText("Mark Complete"); + setId(ID); + setImageDescriptor(MylarImages.TASK_COMPLETE); + } + @Override + public void run() { + MylarPlugin.getDefault().actionObserved(this); + Object selectedObject = ((IStructuredSelection)this.view.getViewer().getSelection()).getFirstElement(); + if (selectedObject instanceof Task){ + ((Task)selectedObject).setCompleted(true); + + } + this.view.getViewer().refresh(); + } +}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/MarkTaskIncompleteAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/MarkTaskIncompleteAction.java new file mode 100644 index 000000000..ac0562c54 --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/MarkTaskIncompleteAction.java @@ -0,0 +1,46 @@ +/******************************************************************************* + * Copyright (c) 2004 - 2005 University Of British Columbia 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: + * University Of British Columbia - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylar.tasks.ui.actions; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.mylar.core.MylarPlugin; +import org.eclipse.mylar.tasks.Task; +import org.eclipse.mylar.tasks.ui.views.TaskListView; +import org.eclipse.mylar.ui.MylarImages; + +/** + * @author Mik Kersten and Ken Sueda + */ +public class MarkTaskIncompleteAction extends Action { + + public static final String ID = "org.eclipse.mylar.tasks.actions.mark.incomplete"; + + private final TaskListView view; + + public MarkTaskIncompleteAction(TaskListView view) { + this.view = view; + setText("Mark Incomplete"); + setToolTipText("Mark Incomplete"); + setId(ID); + setImageDescriptor(MylarImages.TASK_INCOMPLETE); + } + @Override + public void run() { + MylarPlugin.getDefault().actionObserved(this); + Object selectedObject = ((IStructuredSelection)this.view.getViewer().getSelection()).getFirstElement(); + if (selectedObject instanceof Task){ + ((Task)selectedObject).setCompleted(false); + } + this.view.getViewer().refresh(); + } +}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/MoveTaskToRootAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/MoveTaskToRootAction.java new file mode 100644 index 000000000..cb49a7c8e --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/MoveTaskToRootAction.java @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2004 - 2005 University Of British Columbia 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: + * University Of British Columbia - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylar.tasks.ui.actions; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.mylar.tasks.ITask; +import org.eclipse.mylar.tasks.MylarTasksPlugin; +import org.eclipse.mylar.tasks.TaskCategory; +import org.eclipse.mylar.tasks.ui.views.TaskListView; + +/** + * @author Mik Kersten and Ken Sueda + */ +public class MoveTaskToRootAction extends Action { + + public static final String ID = "org.eclipse.mylar.tasks.actions.move.toroot"; + + private final TaskListView view; + public MoveTaskToRootAction(TaskListView view) { + this.view = view; + setText("Move Task to Root"); + setToolTipText("Move Task to Root"); + setId(ID); + } + @Override + public void run() { + ISelection selection = this.view.getViewer().getSelection(); + Object obj = ((IStructuredSelection)selection).getFirstElement(); + if (obj instanceof ITask) { + ITask t = (ITask) obj; + TaskCategory cat = t.getCategory(); + if (cat != null) { + cat.removeTask(t); + t.setCategory(null); + t.setParent(null); + MylarTasksPlugin.getTaskListManager().getTaskList().addRootTask(t); + this.view.getViewer().refresh(); + } else if (t.getParent() != null) { + t.getParent().removeSubTask(t); + t.setParent(null); + MylarTasksPlugin.getTaskListManager().getTaskList().addRootTask(t); + this.view.getViewer().refresh(); + } + } + } +}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/OpenTaskEditorAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/OpenTaskEditorAction.java new file mode 100644 index 000000000..1d891c504 --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/OpenTaskEditorAction.java @@ -0,0 +1,80 @@ +/******************************************************************************* + * Copyright (c) 2004 - 2005 University Of British Columbia 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: + * University Of British Columbia - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylar.tasks.ui.actions; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.mylar.bugzilla.ui.BugzillaOpenStructure; +import org.eclipse.mylar.bugzilla.ui.ViewBugzillaAction; +import org.eclipse.mylar.core.MylarPlugin; +import org.eclipse.mylar.tasks.BugzillaHit; +import org.eclipse.mylar.tasks.BugzillaQueryCategory; +import org.eclipse.mylar.tasks.ITask; +import org.eclipse.mylar.tasks.ui.views.BugzillaQueryDialog; +import org.eclipse.mylar.tasks.ui.views.TaskListView; +import org.eclipse.swt.widgets.Display; + +/** + * @author Mik Kersten and Ken Sueda + */ +public class OpenTaskEditorAction extends Action { + + public static final String ID = "org.eclipse.mylar.tasks.actions.open"; + + private final TaskListView view; + + /** + * @param view + */ + public OpenTaskEditorAction(TaskListView view) { + this.view = view; + setId(ID); + } + + @Override + public void run() { + MylarPlugin.getDefault().actionObserved(this); + ISelection selection = this.view.getViewer().getSelection(); + Object obj = ((IStructuredSelection)selection).getFirstElement(); + if (obj instanceof ITask) { + ((ITask)obj).openTaskInEditor(); + } else if (obj instanceof BugzillaQueryCategory){ + + BugzillaQueryDialog sqd = new BugzillaQueryDialog(Display.getCurrent().getActiveShell()); + if(sqd.open() == Dialog.OK){ + BugzillaQueryCategory queryCategory = (BugzillaQueryCategory)obj; + queryCategory.setDescription(sqd.getName()); + queryCategory.setUrl(sqd.getUrl()); + + queryCategory.refreshBugs(); + this.view.getViewer().refresh(); + } + } else if(obj instanceof BugzillaHit){ + BugzillaHit hit = (BugzillaHit)obj; + if(hit.isTask()){ + hit.getAssociatedTask().openTaskInEditor(); + } else { + BugzillaOpenStructure open = new BugzillaOpenStructure(((BugzillaHit)obj).getServerName(), ((BugzillaHit)obj).getID(),-1); + List<BugzillaOpenStructure> selectedBugs = new ArrayList<BugzillaOpenStructure>(); + selectedBugs.add(open); + ViewBugzillaAction viewBugs = new ViewBugzillaAction("Display bugs in editor", selectedBugs); + viewBugs.schedule(); + } + } + this.view.getViewer().refresh(obj); + } +}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/RefreshBugzillaReportsAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/RefreshBugzillaReportsAction.java new file mode 100644 index 000000000..794519baf --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/RefreshBugzillaReportsAction.java @@ -0,0 +1,127 @@ +/******************************************************************************* + * Copyright (c) 2004 - 2005 University Of British Columbia 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: + * University Of British Columbia - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylar.tasks.ui.actions; + +import java.lang.reflect.InvocationTargetException; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jface.action.Action; +import org.eclipse.mylar.bugzilla.core.BugReport; +import org.eclipse.mylar.bugzilla.core.BugzillaRepository; +import org.eclipse.mylar.core.MylarPlugin; +import org.eclipse.mylar.tasks.AbstractCategory; +import org.eclipse.mylar.tasks.BugzillaQueryCategory; +import org.eclipse.mylar.tasks.BugzillaTask; +import org.eclipse.mylar.tasks.ITask; +import org.eclipse.mylar.tasks.MylarTasksPlugin; +import org.eclipse.mylar.tasks.TaskCategory; +import org.eclipse.mylar.tasks.bugzilla.BugzillaStructureBridge; +import org.eclipse.mylar.tasks.ui.views.TaskListView; +import org.eclipse.mylar.ui.MylarImages; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.actions.WorkspaceModifyOperation; +import org.eclipse.ui.progress.IProgressService; + +/** + * @author Mik Kersten and Ken Sueda + */ +public class RefreshBugzillaReportsAction extends Action { + + public static final String ID = "org.eclipse.mylar.tasks.actions.refresh.bugdb"; + + private final TaskListView view; + + public RefreshBugzillaReportsAction(TaskListView view) { + this.view = view; + setText("Refresh Bugzilla reports"); + setToolTipText("Refresh Bugzilla reports"); + setId(ID); + setImageDescriptor(MylarImages.TASK_BUG_REFRESH); + } + + @Override + public void run() { + MylarPlugin.getDefault().actionObserved(this); + // TODO background? + // perform the update in an operation so that we get a progress monitor + // update the structure bridge cache with the reference provider cached bugs + WorkspaceModifyOperation op = new WorkspaceModifyOperation() { + protected void execute(IProgressMonitor monitor) throws CoreException { + + List<ITask> tasks = MylarTasksPlugin.getTaskListManager().getTaskList().getRootTasks(); + + for (ITask task : tasks) { + if (task instanceof BugzillaTask) { + ((BugzillaTask)task).refresh(); + } + } + for (AbstractCategory cat : MylarTasksPlugin.getTaskListManager().getTaskList().getCategories()) { + if (cat instanceof TaskCategory) { + for (ITask task : ((TaskCategory)cat).getChildren()) { + if (task instanceof BugzillaTask) { + ((BugzillaTask)task).refresh(); + } + } + RefreshBugzillaReportsAction.this.view.refreshChildren(((TaskCategory)cat).getChildren()); + } + else if (cat instanceof BugzillaQueryCategory) { + final BugzillaQueryCategory bqc = (BugzillaQueryCategory) cat; + PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { + + public void run() { + bqc.refreshBugs(); + RefreshBugzillaReportsAction.this.view.getViewer().refresh(); + } + }); + } + } + + // clear the caches + Set<String> cachedHandles = new HashSet<String>(); + cachedHandles.addAll(MylarTasksPlugin.getDefault().getStructureBridge().getCachedHandles()); + cachedHandles.addAll(MylarTasksPlugin.getReferenceProvider().getCachedHandles()); + MylarTasksPlugin.getDefault().getStructureBridge().clearCache(); + MylarTasksPlugin.getReferenceProvider().clearCachedReports(); + + BugzillaStructureBridge bridge = MylarTasksPlugin.getDefault().getStructureBridge(); + monitor.beginTask("Downloading Bugs" , cachedHandles.size()); + for(String key: cachedHandles){ + try { + String [] parts = key.split(";"); + final int id = Integer.parseInt(parts[1]); + BugReport bug = BugzillaRepository.getInstance().getCurrentBug(id); + if(bug != null) + bridge.cache(key, bug); + }catch(Exception e){} + + monitor.worked(1); + } + monitor.done(); + RefreshBugzillaReportsAction.this.view.getViewer().refresh(); + } + }; + + // Use the progess service to execute the runnable + IProgressService service = PlatformUI.getWorkbench().getProgressService(); + try { + service.run(true, false, op); + } catch (InvocationTargetException e) { + // Operation was canceled + } catch (InterruptedException e) { + // Handle the wrapped exception + } + } +}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/TaskActivateAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/TaskActivateAction.java new file mode 100644 index 000000000..2de5f7c82 --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/TaskActivateAction.java @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2004 - 2005 University Of British Columbia 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: + * University Of British Columbia - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylar.tasks.ui.actions; + +import org.eclipse.jface.action.Action; +import org.eclipse.mylar.core.MylarPlugin; +import org.eclipse.mylar.tasks.ITask; +import org.eclipse.mylar.tasks.MylarTasksPlugin; + +/** + * @author Mik Kersten and Ken Sueda + */ +public class TaskActivateAction extends Action { + + public static final String ID = "org.eclipse.mylar.tasks.actions.context.activate"; + + private ITask task; + + public TaskActivateAction(ITask task) { + this.task = task; + setId(ID); + } + + public void run() { + MylarPlugin.getDefault().actionObserved(this); + MylarTasksPlugin.getTaskListManager().activateTask(task); + } +}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/TaskDeactivateAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/TaskDeactivateAction.java new file mode 100644 index 000000000..6d1c4e021 --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/actions/TaskDeactivateAction.java @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2004 - 2005 University Of British Columbia 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: + * University Of British Columbia - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylar.tasks.ui.actions; + +import org.eclipse.jface.action.Action; +import org.eclipse.mylar.core.MylarPlugin; +import org.eclipse.mylar.tasks.ITask; +import org.eclipse.mylar.tasks.MylarTasksPlugin; + +/** + * @author Mik Kersten and Ken Sueda + */ +public class TaskDeactivateAction extends Action { + + public static final String ID = "org.eclipse.mylar.tasks.actions.context.deactivate"; + + private ITask task; + + public TaskDeactivateAction(ITask task) { + this.task = task; + setId(ID); + } + + public void run() { + MylarPlugin.getDefault().actionObserved(this); + MylarTasksPlugin.getTaskListManager().deactivateTask(task); + } +}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/views/BugzillaQueryDialog.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/views/BugzillaQueryDialog.java index 98dd92c65..3ce476e95 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/views/BugzillaQueryDialog.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/views/BugzillaQueryDialog.java @@ -44,7 +44,7 @@ public class BugzillaQueryDialog extends Dialog { private String name; private BugzillaSearchOptionPage searchOptionPage; - BugzillaQueryDialog(Shell parentShell) { + public BugzillaQueryDialog(Shell parentShell) { super(parentShell); searchOptionPage = new BugzillaSearchOptionPage(); diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/views/TaskListView.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/views/TaskListView.java index 742e80c5a..02b0857f6 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/views/TaskListView.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/views/TaskListView.java @@ -8,21 +8,17 @@ * Contributors: * University Of British Columbia - initial API and implementation *******************************************************************************/ + package org.eclipse.mylar.tasks.ui.views; import java.io.IOException; -import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Arrays; -import java.util.HashSet; import java.util.Iterator; import java.util.List; -import java.util.Set; import javax.security.auth.login.LoginException; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.action.IMenuCreator; @@ -31,7 +27,6 @@ import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; -import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.CellEditor; @@ -40,7 +35,6 @@ import org.eclipse.jface.viewers.ComboBoxCellEditor; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.ICellModifier; import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITreeContentProvider; @@ -52,10 +46,6 @@ import org.eclipse.jface.viewers.ViewerDropAdapter; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.jface.window.Window; -import org.eclipse.mylar.bugzilla.core.BugReport; -import org.eclipse.mylar.bugzilla.core.BugzillaRepository; -import org.eclipse.mylar.bugzilla.ui.BugzillaOpenStructure; -import org.eclipse.mylar.bugzilla.ui.ViewBugzillaAction; import org.eclipse.mylar.core.ITaskscapeListener; import org.eclipse.mylar.core.MylarPlugin; import org.eclipse.mylar.dt.MylarWebRef; @@ -69,9 +59,22 @@ import org.eclipse.mylar.tasks.MylarTasksPlugin; import org.eclipse.mylar.tasks.Task; import org.eclipse.mylar.tasks.TaskCategory; import org.eclipse.mylar.tasks.MylarTasksPlugin.Priority_Level; -import org.eclipse.mylar.tasks.bugzilla.BugzillaStructureBridge; import org.eclipse.mylar.tasks.ui.BugzillaTaskEditorInput; import org.eclipse.mylar.tasks.ui.TaskEditorInput; +import org.eclipse.mylar.tasks.ui.actions.ClearContextAction; +import org.eclipse.mylar.tasks.ui.actions.CreateBugzillaQueryCategoryAction; +import org.eclipse.mylar.tasks.ui.actions.CreateBugzillaTaskAction; +import org.eclipse.mylar.tasks.ui.actions.CreateCategoryAction; +import org.eclipse.mylar.tasks.ui.actions.CreateTaskAction; +import org.eclipse.mylar.tasks.ui.actions.DeleteAction; +import org.eclipse.mylar.tasks.ui.actions.FilterCompletedTasksAction; +import org.eclipse.mylar.tasks.ui.actions.MarkTaskCompleteAction; +import org.eclipse.mylar.tasks.ui.actions.MarkTaskIncompleteAction; +import org.eclipse.mylar.tasks.ui.actions.MoveTaskToRootAction; +import org.eclipse.mylar.tasks.ui.actions.OpenTaskEditorAction; +import org.eclipse.mylar.tasks.ui.actions.RefreshBugzillaReportsAction; +import org.eclipse.mylar.tasks.ui.actions.TaskActivateAction; +import org.eclipse.mylar.tasks.ui.actions.TaskDeactivateAction; import org.eclipse.mylar.ui.MylarImages; import org.eclipse.mylar.ui.MylarUiPlugin; import org.eclipse.mylar.ui.internal.views.Highlighter; @@ -89,7 +92,6 @@ import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.TreeColumn; @@ -102,12 +104,9 @@ import org.eclipse.ui.IViewSite; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.actions.WorkspaceModifyOperation; import org.eclipse.ui.internal.Workbench; import org.eclipse.ui.part.DrillDownAdapter; import org.eclipse.ui.part.ViewPart; -import org.eclipse.ui.progress.IProgressService; /** * @author Mik Kersten @@ -116,11 +115,10 @@ public class TaskListView extends ViewPart { private static TaskListView INSTANCE; - //private CheckboxTreeViewer viewer; - private TreeViewer viewer; + TreeViewer viewer; private DrillDownAdapter drillDownAdapter; - private RefreshAction refresh; + private RefreshBugzillaReportsAction refresh; private CreateTaskAction createTask; private CreateCategoryAction createCategory; private CreateBugzillaQueryCategoryAction createBugzillaQueryCategory; @@ -128,7 +126,7 @@ public class TaskListView extends ViewPart { // private RenameAction rename; private DeleteAction delete; private OpenTaskEditorAction doubleClickAction; - private ClearTaskscapeAction clearSelectedTaskscapeAction; + private ClearContextAction clearSelectedTaskscapeAction; //private Action toggleIntersectionModeAction = new ToggleIntersectionModeAction(); // private Action toggleFilteringAction = new ToggleGlobalInterestFilteringAction(); @@ -151,500 +149,6 @@ public class TaskListView extends ViewPart { private String[] PRIORITY_LEVELS = { "P1", "P2", "P3", "P4", "P5" }; - private final class MoveTaskToRootAction extends Action { - public MoveTaskToRootAction() { - setText("Move Task to Root"); - setToolTipText("Move Task to Root"); - } - @Override - public void run() { - ISelection selection = viewer.getSelection(); - Object obj = ((IStructuredSelection)selection).getFirstElement(); - if (obj instanceof ITask) { - ITask t = (ITask) obj; - TaskCategory cat = t.getCategory(); - if (cat != null) { - cat.removeTask(t); - t.setCategory(null); - t.setParent(null); - MylarTasksPlugin.getTaskListManager().getTaskList().addRootTask(t); - viewer.refresh(); - } else if (t.getParent() != null) { - t.getParent().removeSubTask(t); - t.setParent(null); - MylarTasksPlugin.getTaskListManager().getTaskList().addRootTask(t); - viewer.refresh(); - } - } - } - } - -// private final class FilterIncompleteTasksAction extends Action { -// public FilterIncompleteTasksAction() { -// setText("Filter Incomplete Tasks"); -// setToolTipText("Filter Incomplete Tasks"); -//// setImageDescriptor(MylarImages.FILTER_COMPLETE); -// setChecked(MylarTasksPlugin.getDefault().isFilterInCompleteMode()); -// } -// -// @Override -// public void run() { -// MylarTasksPlugin.getDefault().setFilterInCompleteMode(isChecked()); -// if (isChecked()) { -// viewer.addFilter(inCompleteFilter); -// filterCompleteTask.setChecked(false); -// viewer.removeFilter(completeFilter); -// } else { -// viewer.removeFilter(inCompleteFilter); -// } -// viewer.refresh(); -// } -// } - - private final class FilterCompletedTasksAction extends Action { - public FilterCompletedTasksAction() { - setText("Filter Completed Tasks"); - setToolTipText("Filter Completed Tasks"); - setImageDescriptor(MylarImages.FILTER_COMPLETE); - setChecked(MylarTasksPlugin.getDefault().isFilterCompleteMode()); - } - @Override - public void run() { - MylarPlugin.getDefault().actionObserved(this); - MylarTasksPlugin.getDefault().setFilterCompleteMode(isChecked()); - if (isChecked()) { - viewer.addFilter(completeFilter); -// filterInCompleteTask.setChecked(false); -// viewer.removeFilter(inCompleteFilter); - } else { - viewer.removeFilter(completeFilter); - } - viewer.refresh(); - } - } - - private final class OpenTaskEditorAction extends Action { - @Override - public void run() { - MylarPlugin.getDefault().actionObserved(this); - ISelection selection = viewer.getSelection(); - Object obj = ((IStructuredSelection)selection).getFirstElement(); - if (obj instanceof ITask) { - ((ITask)obj).openTaskInEditor(); - } else if (obj instanceof BugzillaQueryCategory){ - - BugzillaQueryDialog sqd = new BugzillaQueryDialog(Display.getCurrent().getActiveShell()); - if(sqd.open() == Dialog.OK){ - BugzillaQueryCategory queryCategory = (BugzillaQueryCategory)obj; - queryCategory.setDescription(sqd.getName()); - queryCategory.setUrl(sqd.getUrl()); - - queryCategory.refreshBugs(); - viewer.refresh(); - } - } else if(obj instanceof BugzillaHit){ - BugzillaHit hit = (BugzillaHit)obj; - if(hit.isTask()){ - hit.getAssociatedTask().openTaskInEditor(); - } else { - BugzillaOpenStructure open = new BugzillaOpenStructure(((BugzillaHit)obj).getServerName(), ((BugzillaHit)obj).getID(),-1); - List<BugzillaOpenStructure> selectedBugs = new ArrayList<BugzillaOpenStructure>(); - selectedBugs.add(open); - ViewBugzillaAction viewBugs = new ViewBugzillaAction("Display bugs in editor", selectedBugs); - viewBugs.schedule(); - } - } - viewer.refresh(obj); - } - } - - private final class ClearTaskscapeAction extends Action { - public ClearTaskscapeAction() { - setText("Clear Task Context"); - setToolTipText("Clear Task Context"); - setImageDescriptor(MylarImages.ERASE_TASKSCAPE); - } - @Override - public void run() { - MylarPlugin.getDefault().actionObserved(this); - Object selectedObject = ((IStructuredSelection)viewer.getSelection()).getFirstElement(); - if (selectedObject != null && selectedObject instanceof ITask) { - MylarPlugin.getTaskscapeManager().taskDeleted(((ITask)selectedObject).getHandle(), ((Task)selectedObject).getPath()); - viewer.refresh(); - } else if (selectedObject != null && selectedObject instanceof BugzillaHit) { - BugzillaTask task = ((BugzillaHit)selectedObject).getAssociatedTask(); - if(task != null){ - MylarPlugin.getTaskscapeManager().taskDeleted(task.getHandle(), task.getPath()); - } - viewer.refresh(); - } - } - } - -// private final class RenameAction extends Action { -// public RenameAction() { -// setText("Rename"); -// setToolTipText("Rename"); -// } -// @Override -// public void run() { -// String label = "category"; -// Object selectedObject = ((IStructuredSelection)viewer.getSelection()).getFirstElement(); -// if (selectedObject instanceof Task) label = "task"; -// -// String newName = getLabelNameFromUser(label); -// if (selectedObject instanceof Task) { -// ((Task)selectedObject).setLabel(newName); -// } else if (selectedObject instanceof Category) { -// ((Category)selectedObject).setName(newName); -// } -// viewer.refresh(selectedObject); -// } -// } - - private final class MarkTaskIncompleteAction extends Action { - public MarkTaskIncompleteAction() { - setText("Mark Incomplete"); - setToolTipText("Mark Incomplete"); - setImageDescriptor(MylarImages.TASK_INCOMPLETE); - } - @Override - public void run() { - MylarPlugin.getDefault().actionObserved(this); - Object selectedObject = ((IStructuredSelection)viewer.getSelection()).getFirstElement(); - if (selectedObject instanceof Task){ - ((Task)selectedObject).setCompleted(false); - } else if (selectedObject instanceof BugzillaHit){ - BugzillaHit hit = (BugzillaHit)selectedObject; - BugzillaTask task = hit.getAssociatedTask(); - if(task != null){ - task.setCompleted(false); - viewer.refresh(); - } - } - viewer.refresh(); - } - } - - private final class MarkTaskCompleteAction extends Action { - public MarkTaskCompleteAction() { - setText("Mark Complete"); - setToolTipText("Mark Complete"); - setImageDescriptor(MylarImages.TASK_COMPLETE); - } - @Override - public void run() { - MylarPlugin.getDefault().actionObserved(this); - Object selectedObject = ((IStructuredSelection)viewer.getSelection()).getFirstElement(); - if (selectedObject instanceof Task){ - ((Task)selectedObject).setCompleted(true); - viewer.refresh(selectedObject); - } else if (selectedObject instanceof BugzillaHit){ - BugzillaHit hit = (BugzillaHit)selectedObject; - BugzillaTask task = hit.getAssociatedTask(); - if(task != null){ - task.setCompleted(true); - viewer.refresh(); - } - } - } - } - - private final class DeleteAction extends Action { - public DeleteAction() { - setText("Delete"); - setToolTipText("Delete"); - setImageDescriptor(MylarImages.REMOVE); - } - - @Override - public void run() { - MylarPlugin.getDefault().actionObserved(this); - boolean deleteConfirmed = MessageDialog.openQuestion( - Workbench.getInstance().getActiveWorkbenchWindow().getShell(), - "Confirm delete", - "Delete selected item?"); - if (!deleteConfirmed) { - return; - } else { - Object selectedObject = ((IStructuredSelection)viewer.getSelection()).getFirstElement(); - if (selectedObject instanceof Task) { - MylarTasksPlugin.getTaskListManager().deleteTask((Task)selectedObject); - MylarPlugin.getTaskscapeManager().taskDeleted(((Task)selectedObject).getHandle(), ((Task)selectedObject).getPath()); - IWorkbenchPage page = MylarTasksPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage(); - - // if we couldn't get the page, get out of here - if (page == null) - return; - try{ - closeTaskEditors((ITask)selectedObject, page); - }catch(Exception e){ - MylarPlugin.log(e, " deletion failed"); - } - } else if (selectedObject instanceof TaskCategory) { - TaskCategory cat = (TaskCategory) selectedObject; - for (ITask task : cat.getChildren()) { - MylarPlugin.getTaskscapeManager().taskDeleted(task.getHandle(), task.getPath()); - IWorkbenchPage page = MylarTasksPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage(); - if (page == null) - return; - try{ - closeTaskEditors(task, page); - }catch(Exception e){ - MylarPlugin.log(e, " deletion failed"); - } - } - MylarTasksPlugin.getTaskListManager().deleteCategory((TaskCategory)selectedObject); - } else if (selectedObject instanceof BugzillaQueryCategory) { - BugzillaQueryCategory cat = (BugzillaQueryCategory) selectedObject; - MylarTasksPlugin.getTaskListManager().deleteCategory(cat); - } - } - viewer.refresh(); - } - } - - private final class CreateBugzillaQueryCategoryAction extends Action { - - public CreateBugzillaQueryCategoryAction() { - setText("Add Bugzilla Query"); - setToolTipText("Add Bugzilla Query"); - setImageDescriptor(MylarImages.CATEGORY_QUERY_NEW); - } - - @Override - public void run() { - - // ask the user for the query string and a name - MylarPlugin.getDefault().actionObserved(this); - BugzillaQueryDialog sqd = new BugzillaQueryDialog(Display.getCurrent().getActiveShell()); - if(sqd.open() == Dialog.OK){ - final BugzillaQueryCategory queryCategory = new BugzillaQueryCategory(sqd.getName(), sqd.getUrl()); - - MylarTasksPlugin.getTaskListManager().getTaskList().addCategory(queryCategory); - WorkspaceModifyOperation op = new WorkspaceModifyOperation() { - protected void execute(IProgressMonitor monitor) throws CoreException { - queryCategory.refreshBugs(); - } - }; - - IProgressService service = PlatformUI.getWorkbench().getProgressService(); - try { - service.run(true, true, op); - } catch (Exception e) { - MylarPlugin.log(e, "There was a problem executing the query refresh"); - } - viewer.refresh(); - } - } - } - - private final class CreateBugzillaTaskAction extends Action { - public CreateBugzillaTaskAction() { - setText("Add Bugzilla Report"); - setToolTipText("Add Bugzilla Report"); - setImageDescriptor(MylarImages.TASK_BUGZILLA_NEW); - } - @Override - public void run() { - MylarPlugin.getDefault().actionObserved(this); - String bugIdString = getBugIdFromUser(); - int bugId = -1; - try { - if (bugIdString != null) { - bugId = Integer.parseInt(bugIdString); - } else { - return; - } - } catch (NumberFormatException nfe) { - showMessage("Please enter a valid report number"); - return; - } - - // XXX we don't care about duplicates since we use a registrey - // Check the existing tasks to see if the id is used already. - // This is to prevent the creation of mutliple Bugzilla tasks - // for the same Bugzilla report. -// boolean doesIdExistAlready = false; -// doesIdExistAlready = lookForId("Bugzilla-" + bugId); -// if (doesIdExistAlready) { -// showMessage("A Bugzilla task with ID Bugzilla-" + bugId + " already exists."); -// return; -// } - - ITask newTask = new BugzillaTask("Bugzilla-"+bugId, "<bugzilla info>"); - Object selectedObject = ((IStructuredSelection)viewer.getSelection()).getFirstElement(); - if (selectedObject instanceof TaskCategory){ - ((TaskCategory)selectedObject).addTask(newTask); - } else { - MylarTasksPlugin.getTaskListManager().getTaskList().addRootTask(newTask); - } - viewer.refresh(); - } - } - - private final class RefreshAction extends Action { - public RefreshAction() { - setText("Refresh Bugzilla reports"); - setToolTipText("Refresh Bugzilla reports"); - setImageDescriptor(MylarImages.TASK_BUG_REFRESH); - } - - @Override - public void run() { - MylarPlugin.getDefault().actionObserved(this); - // TODO background? - // perform the update in an operation so that we get a progress monitor - // update the structure bridge cache with the reference provider cached bugs - WorkspaceModifyOperation op = new WorkspaceModifyOperation() { - protected void execute(IProgressMonitor monitor) throws CoreException { - - List<ITask> tasks = MylarTasksPlugin.getTaskListManager().getTaskList().getRootTasks(); - - for (ITask task : tasks) { - if (task instanceof BugzillaTask) { - ((BugzillaTask)task).refresh(); - } - } - for (AbstractCategory cat : MylarTasksPlugin.getTaskListManager().getTaskList().getCategories()) { - if (cat instanceof TaskCategory) { - for (ITask task : ((TaskCategory)cat).getChildren()) { - if (task instanceof BugzillaTask) { - ((BugzillaTask)task).refresh(); - } - } - refreshChildren(((TaskCategory)cat).getChildren()); - } - else if (cat instanceof BugzillaQueryCategory) { - final BugzillaQueryCategory bqc = (BugzillaQueryCategory) cat; - PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { - - public void run() { - bqc.refreshBugs(); - viewer.refresh(); - } - }); - } - } - - // clear the caches - Set<String> cachedHandles = new HashSet<String>(); - cachedHandles.addAll(MylarTasksPlugin.getDefault().getStructureBridge().getCachedHandles()); - cachedHandles.addAll(MylarTasksPlugin.getReferenceProvider().getCachedHandles()); - MylarTasksPlugin.getDefault().getStructureBridge().clearCache(); - MylarTasksPlugin.getReferenceProvider().clearCachedReports(); - - BugzillaStructureBridge bridge = MylarTasksPlugin.getDefault().getStructureBridge(); - monitor.beginTask("Downloading Bugs" , cachedHandles.size()); - for(String key: cachedHandles){ - try { - String [] parts = key.split(";"); - final int id = Integer.parseInt(parts[1]); - BugReport bug = BugzillaRepository.getInstance().getCurrentBug(id); - if(bug != null) - bridge.cache(key, bug); - }catch(Exception e){} - - monitor.worked(1); - } - monitor.done(); - viewer.refresh(); - } - }; - - // Use the progess service to execute the runnable - IProgressService service = PlatformUI.getWorkbench().getProgressService(); - try { - service.run(true, false, op); - } catch (InvocationTargetException e) { - // Operation was canceled - } catch (InterruptedException e) { - // Handle the wrapped exception - } - } - } - - private final class CreateTaskAction extends Action { - public CreateTaskAction() { - setText("Add Task"); - setToolTipText("Add Task"); - setImageDescriptor(MylarImages.TASK_NEW); - } - - @Override - public void run() { - MylarPlugin.getDefault().actionObserved(this); - String label = getLabelNameFromUser("task"); - if(label == null) return; - Task newTask = new Task(MylarTasksPlugin.getTaskListManager().genUniqueTaskId(), label); - - Object selectedObject = ((IStructuredSelection)viewer.getSelection()).getFirstElement(); - if (selectedObject instanceof TaskCategory){ - newTask.setCategory((TaskCategory)selectedObject); - ((TaskCategory)selectedObject).addTask(newTask); - } -// else if (selectedObject instanceof Task) { -// ITask t = (ITask) selectedObject; -// newTask.setParent(t); -// t.addSubTask(newTask); -// } - else { - MylarTasksPlugin.getTaskListManager().getTaskList().addRootTask(newTask); - } - MylarUiPlugin.getDefault().setHighlighterMapping( - newTask.getHandle(), - MylarUiPlugin.getDefault().getDefaultHighlighter().getName()); - viewer.refresh(); - } - } - - private final class CreateCategoryAction extends Action { - public CreateCategoryAction() { - setText("Add Category"); - setToolTipText("Add Category"); - setImageDescriptor(MylarImages.CATEGORY_NEW); - } - - @Override - public void run() { - MylarPlugin.getDefault().actionObserved(this); - String label = getLabelNameFromUser("Category"); - if(label == null) return; - TaskCategory cat = new TaskCategory(label); - MylarTasksPlugin.getTaskListManager().getTaskList().addCategory(cat); - viewer.refresh(); - } - } - - private final class TaskActivateAction extends Action { - - private ITask task; - - public TaskActivateAction(ITask task) { - this.task = task; - } - - public void run() { - MylarPlugin.getDefault().actionObserved(this); - MylarTasksPlugin.getTaskListManager().activateTask(task); - } - } - - private final class TaskDeactivateAction extends Action { - - private ITask task; - - public TaskDeactivateAction(ITask task) { - this.task = task; - } - - public void run() { - MylarPlugin.getDefault().actionObserved(this); - MylarTasksPlugin.getTaskListManager().deactivateTask(task); - } - } - - private final class PriorityDropDownAction extends Action implements IMenuCreator { private Menu dropDownMenu = null; @@ -1469,19 +973,19 @@ public class TaskListView extends ViewPart { * */ private void makeActions() { - refresh = new RefreshAction(); - createTask = new CreateTaskAction(); - createCategory = new CreateCategoryAction(); - createBugzillaQueryCategory = new CreateBugzillaQueryCategoryAction(); - createBugzillaTask = new CreateBugzillaTaskAction(); - delete = new DeleteAction(); - completeTask = new MarkTaskCompleteAction(); - incompleteTask = new MarkTaskIncompleteAction(); + refresh = new RefreshBugzillaReportsAction(this); + createTask = new CreateTaskAction(this); + createCategory = new CreateCategoryAction(this); + createBugzillaQueryCategory = new CreateBugzillaQueryCategoryAction(this); + createBugzillaTask = new CreateBugzillaTaskAction(this); + delete = new DeleteAction(this); + completeTask = new MarkTaskCompleteAction(this); + incompleteTask = new MarkTaskIncompleteAction(this); // rename = new RenameAction(); - clearSelectedTaskscapeAction = new ClearTaskscapeAction(); - moveTaskToRoot = new MoveTaskToRootAction(); - doubleClickAction = new OpenTaskEditorAction(); - filterCompleteTask = new FilterCompletedTasksAction(); + clearSelectedTaskscapeAction = new ClearContextAction(this); + moveTaskToRoot = new MoveTaskToRootAction(this); + doubleClickAction = new OpenTaskEditorAction(this); + filterCompleteTask = new FilterCompletedTasksAction(this); // filterInCompleteTask = new FilterIncompleteTasksAction(); filterOnPriority = new PriorityDropDownAction(); } @@ -1513,7 +1017,7 @@ public class TaskListView extends ViewPart { return false; } - protected void closeTaskEditors(ITask task, IWorkbenchPage page) throws LoginException, IOException{ + public void closeTaskEditors(ITask task, IWorkbenchPage page) throws LoginException, IOException{ IEditorInput input = null; if (task instanceof BugzillaTask) { input = new BugzillaTaskEditorInput((BugzillaTask)task); @@ -1527,7 +1031,7 @@ public class TaskListView extends ViewPart { } } - protected void refreshChildren(List<ITask> children) { + public void refreshChildren(List<ITask> children) { if (children != null) { for (ITask child : children) { if (child instanceof BugzillaTask) { @@ -1544,7 +1048,8 @@ public class TaskListView extends ViewPart { } }); } - private void showMessage(String message) { + + public void showMessage(String message) { MessageDialog.openInformation( viewer.getControl().getShell(), "Tasklist Message", @@ -1560,7 +1065,7 @@ public class TaskListView extends ViewPart { //TODO: foo } - private String getBugIdFromUser() { + public String getBugIdFromUser() { InputDialog dialog = new InputDialog( Workbench.getInstance().getActiveWorkbenchWindow().getShell(), "Enter Bugzilla ID", @@ -1575,7 +1080,7 @@ public class TaskListView extends ViewPart { } } - private String getLabelNameFromUser(String kind) { + public String getLabelNameFromUser(String kind) { InputDialog dialog = new InputDialog( Workbench.getInstance().getActiveWorkbenchWindow().getShell(), |