Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorspingel2009-04-30 04:56:10 +0000
committerspingel2009-04-30 04:56:10 +0000
commit484267c58222273f41627e020781eefd54adeea8 (patch)
treea57ee0786b8e6aa00f8e5321910fef39a5ca736e
parente88f5d49bb9fc229f6e0e23babccda0c2aec296e (diff)
downloadorg.eclipse.mylyn.tasks-484267c58222273f41627e020781eefd54adeea8.tar.gz
org.eclipse.mylyn.tasks-484267c58222273f41627e020781eefd54adeea8.tar.xz
org.eclipse.mylyn.tasks-484267c58222273f41627e020781eefd54adeea8.zip
NEW - bug 272590: [api] expose migration of tasks
https://bugs.eclipse.org/bugs/show_bug.cgi?id=272590
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskMigrator.java162
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractTaskEditorPage.java89
2 files changed, 173 insertions, 78 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskMigrator.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskMigrator.java
new file mode 100644
index 000000000..403aa8079
--- /dev/null
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskMigrator.java
@@ -0,0 +1,162 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2008 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.editors;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Date;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.mylyn.commons.core.StatusHandler;
+import org.eclipse.mylyn.context.core.ContextCore;
+import org.eclipse.mylyn.internal.context.core.ContextCorePlugin;
+import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
+import org.eclipse.mylyn.internal.tasks.core.DateRange;
+import org.eclipse.mylyn.internal.tasks.ui.ChangeActivityHandleOperation;
+import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
+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.mylyn.tasks.ui.TasksUiUtil;
+import org.eclipse.mylyn.tasks.ui.editors.TaskEditor;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Steffen Pingel
+ */
+public class TaskMigrator {
+
+ private static boolean active;
+
+ private final ITask oldTask;
+
+ private boolean delete;
+
+ private TaskEditor editor;
+
+ public TaskMigrator(ITask oldTask) {
+ this.oldTask = oldTask;
+ }
+
+ public boolean delete() {
+ return delete;
+ }
+
+ public void setDelete(boolean delete) {
+ this.delete = delete;
+ }
+
+ public void copyPropertiesAndOpen(ITask newTask) {
+ copyProperties(newTask);
+
+ try {
+ // temporarily disable auto editor management
+ active = true;
+
+ boolean reactivate = oldTask.isActive();
+ if (reactivate) {
+ TasksUi.getTaskActivityManager().deactivateTask(oldTask);
+ }
+
+ boolean editorIsActive = closeEditor();
+
+ deleteOldTask();
+
+ if (reactivate) {
+ TasksUi.getTaskActivityManager().activateTask(newTask);
+ }
+
+ if (editorIsActive) {
+ TasksUiUtil.openTask(newTask);
+ } else {
+ TasksUiInternal.openTaskInBackground(newTask, false);
+ }
+ } finally {
+ active = false;
+ }
+ }
+
+ public void setEditor(TaskEditor editor) {
+ this.editor = editor;
+ }
+
+ public TaskEditor getEditor() {
+ return editor;
+ }
+
+ private boolean closeEditor() {
+ boolean editorIsActive = false;
+ if (editor != null) {
+ IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+ if (window != null) {
+ IWorkbenchPage activePage = window.getActivePage();
+ if (activePage != null) {
+ if (activePage.getActiveEditor() == editor) {
+ editorIsActive = true;
+ }
+ }
+ }
+ editor.close(false);
+ }
+ return editorIsActive;
+ }
+
+ private void deleteOldTask() {
+ // delete old task details
+ if (delete()) {
+ TasksUiInternal.getTaskList().deleteTask(oldTask);
+ ContextCore.getContextManager().deleteContext(oldTask.getHandleIdentifier());
+ try {
+ TasksUiPlugin.getTaskDataManager().deleteTaskData(oldTask);
+ } catch (CoreException e) {
+ StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Failed to delete task data", e)); //$NON-NLS-1$
+ }
+ }
+ }
+
+ private void copyProperties(ITask newTask) {
+ // migrate task details
+ if (oldTask instanceof AbstractTask && newTask instanceof AbstractTask) {
+ ((AbstractTask) newTask).setNotes(((AbstractTask) oldTask).getNotes());
+ DateRange scheduledDate = ((AbstractTask) oldTask).getScheduledForDate();
+ TasksUiPlugin.getTaskActivityManager().setScheduledFor((AbstractTask) newTask, scheduledDate);
+ Date dueDate = ((AbstractTask) oldTask).getDueDate();
+ TasksUiPlugin.getTaskActivityManager().setDueDate(newTask, dueDate);
+ ((AbstractTask) newTask).setEstimatedTimeHours(((AbstractTask) oldTask).getEstimatedTimeHours());
+ }
+
+ // migrate context
+ ContextCorePlugin.getContextStore().saveActiveContext();
+ ContextCore.getContextStore().cloneContext(oldTask.getHandleIdentifier(), newTask.getHandleIdentifier());
+
+ // migrate task activity
+ ChangeActivityHandleOperation operation = new ChangeActivityHandleOperation(oldTask.getHandleIdentifier(),
+ newTask.getHandleIdentifier());
+ try {
+ operation.run(new NullProgressMonitor());
+ } catch (InvocationTargetException e) {
+ StatusHandler.log(new Status(IStatus.WARNING, TasksUiPlugin.ID_PLUGIN,
+ "Failed to migrate activity to new task", e.getCause())); //$NON-NLS-1$
+ } catch (InterruptedException e) {
+ // ignore
+ }
+ }
+
+ public static boolean isActive() {
+ return active;
+ }
+
+}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractTaskEditorPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractTaskEditorPage.java
index 08586b669..7cefaf81d 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractTaskEditorPage.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractTaskEditorPage.java
@@ -13,10 +13,8 @@
package org.eclipse.mylyn.tasks.ui.editors;
-import java.lang.reflect.InvocationTargetException;
import java.util.Collection;
import java.util.Collections;
-import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.LinkedList;
@@ -47,20 +45,15 @@ import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.window.Window;
import org.eclipse.mylyn.commons.core.StatusHandler;
-import org.eclipse.mylyn.context.core.ContextCore;
-import org.eclipse.mylyn.internal.context.core.ContextCorePlugin;
import org.eclipse.mylyn.internal.provisional.commons.ui.CommonFormUtil;
import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages;
import org.eclipse.mylyn.internal.provisional.commons.ui.CommonTextSupport;
import org.eclipse.mylyn.internal.provisional.commons.ui.CommonUiUtil;
import org.eclipse.mylyn.internal.provisional.commons.ui.GradientCanvas;
-import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
import org.eclipse.mylyn.internal.tasks.core.AbstractTaskContainer;
-import org.eclipse.mylyn.internal.tasks.core.DateRange;
import org.eclipse.mylyn.internal.tasks.core.ITaskListRunnable;
import org.eclipse.mylyn.internal.tasks.core.data.ITaskDataManagerListener;
import org.eclipse.mylyn.internal.tasks.core.data.TaskDataManagerEvent;
-import org.eclipse.mylyn.internal.tasks.ui.ChangeActivityHandleOperation;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.internal.tasks.ui.actions.ClearOutgoingAction;
import org.eclipse.mylyn.internal.tasks.ui.actions.DeleteTaskEditorAction;
@@ -82,6 +75,7 @@ import org.eclipse.mylyn.internal.tasks.ui.editors.TaskEditorPeoplePart;
import org.eclipse.mylyn.internal.tasks.ui.editors.TaskEditorPlanningPart;
import org.eclipse.mylyn.internal.tasks.ui.editors.TaskEditorRichTextPart;
import org.eclipse.mylyn.internal.tasks.ui.editors.TaskEditorSummaryPart;
+import org.eclipse.mylyn.internal.tasks.ui.editors.TaskMigrator;
import org.eclipse.mylyn.internal.tasks.ui.util.AttachmentUtil;
import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector;
@@ -137,8 +131,6 @@ import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.FilteredTree;
import org.eclipse.ui.forms.FormColors;
@@ -207,78 +199,13 @@ public abstract class AbstractTaskEditorPage extends TaskFormPage implements ISe
final SubmitJob job = event.getJob();
PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
- private void openNewTask(ITask newTask) {
+ private void addTask(ITask newTask) {
AbstractTaskContainer parent = null;
AbstractTaskEditorPart actionPart = getPart(ID_PART_ACTIONS);
if (actionPart instanceof TaskEditorActionPart) {
parent = ((TaskEditorActionPart) actionPart).getCategory();
}
TasksUiInternal.getTaskList().addTask(newTask, parent);
- ITask oldTask = getTask();
-
- // migrate task details
- if (oldTask instanceof AbstractTask && newTask instanceof AbstractTask) {
- ((AbstractTask) newTask).setNotes(((AbstractTask) oldTask).getNotes());
- DateRange scheduledDate = ((AbstractTask) oldTask).getScheduledForDate();
- TasksUiPlugin.getTaskActivityManager().setScheduledFor((AbstractTask) newTask, scheduledDate);
- Date dueDate = ((AbstractTask) oldTask).getDueDate();
- TasksUiPlugin.getTaskActivityManager().setDueDate(newTask, dueDate);
- ((AbstractTask) newTask).setEstimatedTimeHours(((AbstractTask) oldTask).getEstimatedTimeHours());
- }
-
- // migrate context
- ContextCorePlugin.getContextStore().saveActiveContext();
- ContextCore.getContextStore().cloneContext(oldTask.getHandleIdentifier(),
- newTask.getHandleIdentifier());
-
- // migrate task activity
- ChangeActivityHandleOperation operation = new ChangeActivityHandleOperation(
- oldTask.getHandleIdentifier(), newTask.getHandleIdentifier());
- try {
- operation.run(new NullProgressMonitor());
- } catch (InvocationTargetException e) {
- StatusHandler.log(new Status(IStatus.WARNING, TasksUiPlugin.ID_PLUGIN,
- "Failed to migrate activity to new task", e.getCause())); //$NON-NLS-1$
- } catch (InterruptedException e) {
- // ignore
- }
-
- boolean active = oldTask.isActive();
- if (active) {
- TasksUi.getTaskActivityManager().deactivateTask(oldTask);
- }
-
- boolean editorIsActive = false;
- IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
- if (window != null) {
- IWorkbenchPage activePage = window.getActivePage();
- if (activePage != null) {
- if (activePage.getActiveEditor() == getTaskEditor()) {
- editorIsActive = true;
- }
- }
- }
- close();
-
- // delete old task details
- TasksUiInternal.getTaskList().deleteTask(oldTask);
- ContextCore.getContextManager().deleteContext(oldTask.getHandleIdentifier());
- try {
- TasksUiPlugin.getTaskDataManager().deleteTaskData(oldTask);
- } catch (CoreException e) {
- StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN,
- "Failed to delete task data", e)); //$NON-NLS-1$
- }
-
- if (active) {
- TasksUi.getTaskActivityManager().activateTask(newTask);
- }
-
- if (editorIsActive) {
- TasksUiUtil.openTask(newTask);
- } else {
- TasksUiInternal.openTaskInBackground(newTask, false);
- }
}
public void run() {
@@ -288,7 +215,14 @@ public abstract class AbstractTaskEditorPage extends TaskFormPage implements ISe
if (job.getTask().equals(getTask())) {
refreshFormContent();
} else {
- openNewTask(job.getTask());
+ ITask oldTask = getTask();
+ ITask newTask = job.getTask();
+ addTask(newTask);
+
+ TaskMigrator migrator = new TaskMigrator(oldTask);
+ migrator.setDelete(true);
+ migrator.setEditor(getTaskEditor());
+ migrator.copyPropertiesAndOpen(newTask);
}
} else {
handleSubmitError(job);
@@ -1026,8 +960,7 @@ public abstract class AbstractTaskEditorPage extends TaskFormPage implements ISe
if (TaskAttribute.TYPE_COMMENT.equals(attribute.getMetaData().getType())) {
AbstractTaskEditorPart actionPart = getPart(ID_PART_COMMENTS);
if (actionPart != null && actionPart.getControl() instanceof ExpandableComposite) {
- CommonFormUtil.setExpanded((ExpandableComposite) actionPart.getControl(),
- true);
+ CommonFormUtil.setExpanded((ExpandableComposite) actionPart.getControl(), true);
if (actionPart.getControl() instanceof Section) {
Control client = ((Section) actionPart.getControl()).getClient();
if (client instanceof Composite) {

Back to the top