diff options
25 files changed, 168 insertions, 157 deletions
diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/ITaskList.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/ITaskList.java index 37e528116..e51216104 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/ITaskList.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/ITaskList.java @@ -11,6 +11,7 @@ package org.eclipse.mylyn.internal.tasks.core; import java.util.Set; import org.eclipse.mylyn.tasks.core.ITask; +import org.eclipse.mylyn.tasks.core.ITaskElement; import org.eclipse.mylyn.tasks.core.ITaskListChangeListener; /** @@ -66,10 +67,9 @@ public interface ITaskList { /** * @param task - * @param content - * true if the content for the task (e.g. repository task data) has changed + * list element */ - public abstract void notifyTaskChanged(ITask task, boolean content); + public abstract void notifyElementChanged(ITaskElement element); public abstract void removeChangeListener(ITaskListChangeListener listener); diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/RepositoryExternalizationParticipant.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/RepositoryExternalizationParticipant.java index ef1bf9b15..5d9a3519a 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/RepositoryExternalizationParticipant.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/RepositoryExternalizationParticipant.java @@ -61,6 +61,7 @@ public class RepositoryExternalizationParticipant extends AbstractExternalizatio switch (context.getKind()) { case SAVE: + System.err.println(">>> save repositories"); if (!takeSnapshot(repositoriesFile)) { StatusHandler.fail(new Status(IStatus.WARNING, ITasksCoreConstants.ID_PLUGIN, "Task List snapshot failed")); diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskActivityManager.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskActivityManager.java index b82264a47..42296f5ec 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskActivityManager.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskActivityManager.java @@ -518,7 +518,7 @@ public class TaskActivityManager implements ITaskActivityManager { removeScheduledTask(task); addScheduledTask(task); } - taskList.notifyTaskChanged(task, false); + taskList.notifyElementChanged(task); } public void setDueDate(ITask task, Date dueDate) { @@ -529,7 +529,7 @@ public class TaskActivityManager implements ITaskActivityManager { removeDueTask(task); addDueTask(task); } - taskList.notifyTaskChanged(task, false); + taskList.notifyElementChanged(task); } /** diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskList.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskList.java index 5b40afe2b..0188c42da 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskList.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskList.java @@ -94,7 +94,7 @@ public class TaskList implements ISchedulingRule, ITaskList { if (orphans != null) { task.addParentContainer(orphans); orphans.internalAddChild(task); - delta.add(new TaskContainerDelta(orphans, TaskContainerDelta.Kind.CHANGED)); + delta.add(new TaskContainerDelta(task, orphans, TaskContainerDelta.Kind.ADDED)); } } @@ -158,8 +158,7 @@ public class TaskList implements ISchedulingRule, ITaskList { (task).addParentContainer(container); container.internalAddChild(task); - delta.add(new TaskContainerDelta(task, TaskContainerDelta.Kind.CHANGED)); - delta.add(new TaskContainerDelta(container, TaskContainerDelta.Kind.CHANGED)); + delta.add(new TaskContainerDelta(task, container, TaskContainerDelta.Kind.ADDED)); } finally { unlock(); } @@ -231,10 +230,15 @@ public class TaskList implements ISchedulingRule, ITaskList { } } - private void fireDelta(HashSet<TaskContainerDelta> deltaToFire) { + private void fireDelta(HashSet<TaskContainerDelta> deltasToFire) { if (readComplete) { for (ITaskListChangeListener listener : changeListeners) { - listener.containersChanged(deltaToFire); + try { + listener.containersChanged(Collections.unmodifiableSet(deltasToFire)); + } catch (Throwable t) { + StatusHandler.log(new Status(IStatus.ERROR, ITasksCoreConstants.ID_PLUGIN, + "Notification failed for: " + listener, t)); + } } } } @@ -443,45 +447,32 @@ public class TaskList implements ISchedulingRule, ITaskList { return rule instanceof TaskList || rule instanceof ITaskElement; } - public void notifyContainersUpdated(Set<? extends AbstractTaskContainer> containers) { - HashSet<TaskContainerDelta> containersUpdatedDelta = new HashSet<TaskContainerDelta>(); - if (containers == null) { - containersUpdatedDelta.add(new TaskContainerDelta(null, TaskContainerDelta.Kind.ROOT)); + public void notifyElementsChanged(Set<? extends ITaskElement> elements) { + HashSet<TaskContainerDelta> deltas = new HashSet<TaskContainerDelta>(); + if (elements == null) { + deltas.add(new TaskContainerDelta(null, TaskContainerDelta.Kind.ROOT)); } else { - for (AbstractTaskContainer abstractTaskContainer : containers) { - containersUpdatedDelta.add(new TaskContainerDelta(abstractTaskContainer, - TaskContainerDelta.Kind.CHANGED)); + for (ITaskElement element : elements) { + deltas.add(new TaskContainerDelta(element, TaskContainerDelta.Kind.CONTENT)); } } - for (ITaskListChangeListener listener : changeListeners) { - try { - listener.containersChanged(Collections.unmodifiableSet(containersUpdatedDelta)); - } catch (Throwable t) { - StatusHandler.log(new Status(IStatus.ERROR, ITasksCoreConstants.ID_PLUGIN, "Notification failed for: " - + listener, t)); - } - } + fireDelta(deltas); } - public void notifyTaskChanged(ITask task, boolean content) { + public void notifySyncStateChanged(Set<? extends AbstractTaskContainer> containers) { HashSet<TaskContainerDelta> taskChangeDeltas = new HashSet<TaskContainerDelta>(); - TaskContainerDelta.Kind kind; - if (content) { - kind = TaskContainerDelta.Kind.CONTENT; - } else { - kind = TaskContainerDelta.Kind.CHANGED; + for (AbstractTaskContainer abstractTaskContainer : containers) { + TaskContainerDelta delta = new TaskContainerDelta(abstractTaskContainer, TaskContainerDelta.Kind.CONTENT); + delta.setTransient(true); + taskChangeDeltas.add(delta); } - taskChangeDeltas.add(new TaskContainerDelta(task, kind)); - for (ITaskListChangeListener listener : changeListeners) { - try { - listener.containersChanged(Collections.unmodifiableSet(taskChangeDeltas)); - } catch (Throwable t) { - StatusHandler.log(new Status(IStatus.ERROR, ITasksCoreConstants.ID_PLUGIN, "Notification failed for: " - + listener, t)); - } - } + fireDelta(taskChangeDeltas); + } + + public void notifyElementChanged(ITaskElement element) { + notifyElementsChanged(Collections.singleton(element)); } public void refactorRepositoryUrl(String oldRepositoryUrl, String newRepositoryUrl) { @@ -505,7 +496,7 @@ public class TaskList implements ISchedulingRule, ITaskList { for (RepositoryQuery query : queries.values()) { if (query.getRepositoryUrl().equals(oldRepositoryUrl)) { query.setRepositoryUrl(newRepositoryUrl); - delta.add(new TaskContainerDelta(query, TaskContainerDelta.Kind.CHANGED)); + delta.add(new TaskContainerDelta(query, TaskContainerDelta.Kind.CONTENT)); } } @@ -516,7 +507,7 @@ public class TaskList implements ISchedulingRule, ITaskList { orphans.setRepositoryUrl(newRepositoryUrl); repositoryOrphansMap.put(newRepositoryUrl, orphans); //categories.put(orphans.getHandleIdentifier(), orphans); - delta.add(new TaskContainerDelta(orphans, TaskContainerDelta.Kind.CHANGED)); + delta.add(new TaskContainerDelta(orphans, TaskContainerDelta.Kind.CONTENT)); } } } finally { @@ -558,15 +549,14 @@ public class TaskList implements ISchedulingRule, ITaskList { container.internalRemoveChild(task); ((AbstractTask) task).removeParentContainer(container); - delta.add(new TaskContainerDelta(task, TaskContainerDelta.Kind.CHANGED)); - delta.add(new TaskContainerDelta(container, TaskContainerDelta.Kind.CHANGED)); + delta.add(new TaskContainerDelta(task, container, TaskContainerDelta.Kind.REMOVED)); } private void removeOrphan(AbstractTask task, Set<TaskContainerDelta> delta) { AbstractTaskContainer orphans = getUnmatchedContainer(task.getRepositoryUrl()); if (orphans != null) { if (orphans.internalRemoveChild(task)) { - delta.add(new TaskContainerDelta(orphans, TaskContainerDelta.Kind.CHANGED)); + delta.add(new TaskContainerDelta(task, orphans, TaskContainerDelta.Kind.REMOVED)); task.removeParentContainer(orphans); } } diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/data/TaskDataManager.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/data/TaskDataManager.java index 433105a59..0e76840d5 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/data/TaskDataManager.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/data/TaskDataManager.java @@ -147,7 +147,7 @@ public class TaskDataManager implements ITaskDataManager { result[0] = state; } }); - taskList.notifyTaskChanged(task, false); + taskList.notifyElementChanged(task); return result[0]; } @@ -163,7 +163,7 @@ public class TaskDataManager implements ITaskDataManager { taskList.addTask(task); } }); - taskList.notifyTaskChanged(task, true); + taskList.notifyElementChanged(task); } public void putUpdatedTaskData(final ITask itask, final TaskData taskData, boolean user) throws CoreException { @@ -206,7 +206,7 @@ public class TaskDataManager implements ITaskDataManager { task.setSynchronizing(false); } }); - taskList.notifyTaskChanged(task, true); + taskList.notifyElementChanged(task); } } @@ -249,14 +249,14 @@ public class TaskDataManager implements ITaskDataManager { } } }); - taskList.notifyTaskChanged(task, true); + taskList.notifyElementChanged(task); } @Deprecated public void discardOutgoing(AbstractTask repositoryTask) { taskDataStorageManager.discardEdits(repositoryTask.getRepositoryUrl(), repositoryTask.getTaskId()); repositoryTask.setSynchronizationState(SynchronizationState.SYNCHRONIZED); - taskList.notifyTaskChanged(repositoryTask, true); + taskList.notifyElementChanged(repositoryTask); } private File findFile(ITask task, String kind) { @@ -362,7 +362,7 @@ public class TaskDataManager implements ITaskDataManager { task.setSubmitting(false); } }); - taskList.notifyTaskChanged(task, false); + taskList.notifyElementChanged(task); } /** @@ -444,7 +444,7 @@ public class TaskDataManager implements ITaskDataManager { repositoryTask.setSynchronizationState(SynchronizationState.OUTGOING); taskDataStorageManager.saveEdits(repositoryTask.getRepositoryUrl(), repositoryTask.getTaskId(), Collections.unmodifiableSet(modifiedAttributes)); - taskList.notifyTaskChanged(repositoryTask, false); + taskList.notifyElementChanged(repositoryTask); } public void setDataPath(String dataPath) { @@ -495,7 +495,7 @@ public class TaskDataManager implements ITaskDataManager { StatusHandler.log(new Status(IStatus.ERROR, ITasksCoreConstants.ID_PLUGIN, "Unexpected error while marking task read", e)); } - taskList.notifyTaskChanged(task, false); + taskList.notifyElementChanged(task); } @Deprecated @@ -508,13 +508,13 @@ public class TaskDataManager implements ITaskDataManager { taskDataStorageManager.setOldTaskData(taskData); } task.setSynchronizationState(SynchronizationState.SYNCHRONIZED); - taskList.notifyTaskChanged(task, false); + taskList.notifyElementChanged(task); } else if (read && task.getSynchronizationState().equals(SynchronizationState.CONFLICT)) { if (taskData != null && taskData.getLastModified() != null) { task.setLastReadTimeStamp(taskData.getLastModified()); } task.setSynchronizationState(SynchronizationState.OUTGOING); - taskList.notifyTaskChanged(task, false); + taskList.notifyElementChanged(task); } else if (read && task.getSynchronizationState().equals(SynchronizationState.SYNCHRONIZED)) { if (taskData != null && taskData.getLastModified() != null) { task.setLastReadTimeStamp(taskData.getLastModified()); @@ -536,7 +536,7 @@ public class TaskDataManager implements ITaskDataManager { } else if (!read && task.getSynchronizationState().equals(SynchronizationState.SYNCHRONIZED)) { task.setSynchronizationState(SynchronizationState.INCOMING); - taskList.notifyTaskChanged(task, false); + taskList.notifyElementChanged(task); } // for connectors that don't support task data set read date to now (bug#204741) diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/externalization/TaskListExternalizationParticipant.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/externalization/TaskListExternalizationParticipant.java index 6ac133e71..fbe3349c0 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/externalization/TaskListExternalizationParticipant.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/externalization/TaskListExternalizationParticipant.java @@ -140,10 +140,15 @@ public class TaskListExternalizationParticipant extends AbstractExternalizationP } public void containersChanged(Set<TaskContainerDelta> containers) { - synchronized (TaskListExternalizationParticipant.this) { - dirty = true; + for (TaskContainerDelta taskContainerDelta : containers) { + if (!taskContainerDelta.isTransient()) { + synchronized (TaskListExternalizationParticipant.this) { + dirty = true; + } + manager.requestSave(); + return; + } } - manager.requestSave(); } public void taskListRead() { diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/sync/SynchronizeQueriesJob.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/sync/SynchronizeQueriesJob.java index 97094b370..76fa41dbc 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/sync/SynchronizeQueriesJob.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/sync/SynchronizeQueriesJob.java @@ -196,37 +196,37 @@ public class SynchronizeQueriesJob extends SynchronizationJob { event.setTasks(allTasks); event.setNeedsPerformQueries(true); - try { - // hook into the connector for checking for changed tasks and have the connector mark tasks that need synchronization - if (firePreSynchronization(event, new SubProgressMonitor(monitor, 20))) { - // synchronize queries, tasks changed within query are added to set of tasks to be synchronized - synchronizeQueries(monitor, event); - - // for background synchronizations all changed tasks are synchronized including the ones that are not part of a query - if (!isUser()) { - for (ITask task : allTasks) { - if (task.isStale()) { - tasksToBeSynchronized.add(task); - ((AbstractTask) task).setSynchronizing(true); - } +// try { + // hook into the connector for checking for changed tasks and have the connector mark tasks that need synchronization + if (firePreSynchronization(event, new SubProgressMonitor(monitor, 20))) { + // synchronize queries, tasks changed within query are added to set of tasks to be synchronized + synchronizeQueries(monitor, event); + + // for background synchronizations all changed tasks are synchronized including the ones that are not part of a query + if (!isUser()) { + for (ITask task : allTasks) { + if (task.isStale()) { + tasksToBeSynchronized.add(task); + ((AbstractTask) task).setSynchronizing(true); } } + } - // synchronize tasks that were marked by the connector - if (!tasksToBeSynchronized.isEmpty()) { - Policy.checkCanceled(monitor); - monitor.subTask("Synchronizing " + tasksToBeSynchronized.size() + " changed tasks"); - synchronizeTasks(new SubProgressMonitor(monitor, 40)); - } else { - monitor.worked(40); - } - - // hook into the connector for synchronization time stamp management - firePostSynchronization(event, new SubProgressMonitor(monitor, 10)); + // synchronize tasks that were marked by the connector + if (!tasksToBeSynchronized.isEmpty()) { + Policy.checkCanceled(monitor); + monitor.subTask("Synchronizing " + tasksToBeSynchronized.size() + " changed tasks"); + synchronizeTasks(new SubProgressMonitor(monitor, 40)); + } else { + monitor.worked(40); } - } finally { - taskList.notifyContainersUpdated(null); + + // hook into the connector for synchronization time stamp management + firePostSynchronization(event, new SubProgressMonitor(monitor, 10)); } +// } finally { +// taskList.notifyElementsChanged(null); +// } } finally { Job.getJobManager().endRule(rule); } @@ -247,7 +247,7 @@ public class SynchronizeQueriesJob extends SynchronizationJob { synchronizeQuery(repositoryQuery, event, new SubProgressMonitor(monitor, 20)); repositoryQuery.setSynchronizing(false); - taskList.notifyContainersUpdated(Collections.singleton(repositoryQuery)); + taskList.notifySyncStateChanged(Collections.singleton(repositoryQuery)); } } @@ -325,8 +325,8 @@ public class SynchronizeQueriesJob extends SynchronizationJob { for (RepositoryQuery repositoryQuery : queries) { repositoryQuery.setSynchronizationStatus(status); repositoryQuery.setSynchronizing(false); + taskList.notifyElementChanged(repositoryQuery); } - taskList.notifyContainersUpdated(queries); } } diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/sync/SynchronizeTasksJob.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/sync/SynchronizeTasksJob.java index 0770d04fe..680152b40 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/sync/SynchronizeTasksJob.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/sync/SynchronizeTasksJob.java @@ -86,7 +86,7 @@ public class SynchronizeTasksJob extends SynchronizationJob { } catch (OperationCanceledException e) { for (ITask task : tasks) { ((AbstractTask) task).setSynchronizing(false); - taskList.notifyTaskChanged(task, false); + taskList.notifyElementChanged(task); } return Status.CANCEL_STATUS; } catch (Exception e) { @@ -113,7 +113,7 @@ public class SynchronizeTasksJob extends SynchronizationJob { private void synchronizeTask(IProgressMonitor monitor, ITask task) { monitor.subTask("Receiving task " + task.getSummary()); ((AbstractTask) task).setErrorStatus(null); - taskList.notifyTaskChanged(task, false); + taskList.notifyElementChanged(task); try { String taskId = task.getTaskId(); if (!isUser()) { @@ -174,8 +174,8 @@ public class SynchronizeTasksJob extends SynchronizationJob { ((AbstractLegacyRepositoryConnector) connector).getLegacyTaskDataHandler().getMultiTaskData(repository, Collections.unmodifiableSet(idToTask.keySet()), collector, monitor); } else { - connector.getTaskDataHandler().getMultiTaskData(repository, - Collections.unmodifiableSet(idToTask.keySet()), collector, monitor); + connector.getTaskDataHandler().getMultiTaskData(repository, Collections.unmodifiableSet(idToTask.keySet()), + collector, monitor); } } @@ -207,12 +207,7 @@ public class SynchronizeTasksJob extends SynchronizationJob { task.setStale(false); ((AbstractTask) task).setSynchronizing(false); - if (task.getSynchronizationState() == SynchronizationState.INCOMING - || task.getSynchronizationState() == SynchronizationState.CONFLICT) { - taskList.notifyTaskChanged(task, true); - } else { - taskList.notifyTaskChanged(task, false); - } + taskList.notifyElementChanged(task); } private void updateFromTaskData(TaskRepository taskRepository, ITask task, TaskData taskData) { @@ -228,7 +223,7 @@ public class SynchronizeTasksJob extends SynchronizationJob { if (!isUser()) { ((AbstractTask) task).setSynchronizing(false); } - taskList.notifyTaskChanged(task, false); + taskList.notifyElementChanged(task); } } diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/IRepositoryQuery.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/IRepositoryQuery.java index 022fbf7d9..e3bb5b66a 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/IRepositoryQuery.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/IRepositoryQuery.java @@ -8,7 +8,6 @@ package org.eclipse.mylyn.tasks.core; - /** * @since 3.0 */ diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskContainerDelta.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskContainerDelta.java index 835e7fef5..e301094ab 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskContainerDelta.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskContainerDelta.java @@ -18,24 +18,17 @@ public final class TaskContainerDelta { public enum Kind { /** - * One container added to another or to the root. + * One container (source) added to another (target) */ ADDED, /** - * One container removed from another or from the root. + * One container (source) removed from another (target) */ REMOVED, /** - * Container has changed, e.g. has new children, a task's priority or planning info. For tasks changed state - * tends to be show in a view. - */ - CHANGED, - - /** - * The content of the container has changed, e.g. new data has been downloaded for a task from the repository. - * For tasks content tends to be show in an editor. + * The internal state of the container (target) has changed, e.g. attributes, summary, priority, etc */ CONTENT, @@ -45,27 +38,66 @@ public final class TaskContainerDelta { ROOT } - private final ITaskElement container; + private final ITaskElement target; + + private final ITaskElement source; private final Kind kind; + private boolean isTransient; + /** * @since 3.0 */ public TaskContainerDelta(ITaskElement container, Kind kind) { - this.container = container; + this.source = container; + this.target = null; this.kind = kind; } /** * @since 3.0 */ - public ITaskElement getContainer() { - return container; + public TaskContainerDelta(ITaskElement source, ITaskElement target, Kind kind) { + this.source = source; + this.target = target; + this.kind = kind; + } + + /** + * The target is the container modified or the target destination for the <code>source</code> element + * + * @since 3.0 + */ + public ITaskElement getTarget() { + return target; + } + + /** + * The element being acted upon in relation to the <code>target</code> + * + * @since 3.0 + */ + public ITaskElement getSource() { + return source; } public Kind getKind() { return kind; } + /** + * @since 3.0 + */ + public void setTransient(boolean isTransient) { + this.isTransient = isTransient; + } + + /** + * @since 3.0 + */ + public boolean isTransient() { + return isTransient; + } + } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskJobFactory.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskJobFactory.java index 5794ef439..432861540 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskJobFactory.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskJobFactory.java @@ -108,7 +108,7 @@ public class TaskJobFactory implements ITaskJobFactory { } catch (CoreException e) { StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Unexpected error", e)); } - taskList.notifyTaskChanged(task, false); + taskList.notifyElementChanged(task); return job; } @@ -161,7 +161,7 @@ public class TaskJobFactory implements ITaskJobFactory { } catch (CoreException e) { StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Unexpected error", e)); } - taskList.notifyTaskChanged(task, false); + taskList.notifyElementChanged(task); job.setUser(true); return job; } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/MarkTaskCompleteAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/MarkTaskCompleteAction.java index c52f7b9dd..7c914bcda 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/MarkTaskCompleteAction.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/MarkTaskCompleteAction.java @@ -72,7 +72,7 @@ public class MarkTaskCompleteAction extends AbstractChangeCompletionAction { ITaskList taskList = TasksUiInternal.getTaskList(); for (AbstractTask task : toComplete) { task.setCompletionDate(new Date()); - taskList.notifyTaskChanged(task, false); + taskList.notifyElementChanged(task); } } } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/MarkTaskIncompleteAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/MarkTaskIncompleteAction.java index 95b8b374a..caa7fb10e 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/MarkTaskIncompleteAction.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/MarkTaskIncompleteAction.java @@ -70,7 +70,7 @@ public class MarkTaskIncompleteAction extends AbstractChangeCompletionAction { ITaskList taskList = TasksUiInternal.getTaskList(); for (AbstractTask task : toComplete) { task.setCompletionDate(null); - taskList.notifyTaskChanged(task, false); + taskList.notifyElementChanged(task); } } } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/commands/MarkTaskHandler.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/commands/MarkTaskHandler.java index e3eb17425..8c9a9efe0 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/commands/MarkTaskHandler.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/commands/MarkTaskHandler.java @@ -30,7 +30,7 @@ public abstract class MarkTaskHandler extends AbstractTaskHandler { protected void execute(ExecutionEvent event, ITask task) throws ExecutionException { if (task instanceof LocalTask || (task instanceof AbstractTask && ((AbstractTask) task).isLocal())) { task.setCompletionDate(new Date()); - TasksUiPlugin.getTaskList().notifyTaskChanged(task, false); + TasksUiPlugin.getTaskList().notifyElementChanged(task); } } } @@ -40,7 +40,7 @@ public abstract class MarkTaskHandler extends AbstractTaskHandler { protected void execute(ExecutionEvent event, ITask task) throws ExecutionException { if (task instanceof LocalTask || (task instanceof AbstractTask && ((AbstractTask) task).isLocal())) { task.setCompletionDate(null); - TasksUiPlugin.getTaskList().notifyTaskChanged(task, false); + TasksUiPlugin.getTaskList().notifyElementChanged(task); } } } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/deprecated/AbstractRepositoryTaskEditor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/deprecated/AbstractRepositoryTaskEditor.java index 8d1dd3628..2df6b66f2 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/deprecated/AbstractRepositoryTaskEditor.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/deprecated/AbstractRepositoryTaskEditor.java @@ -422,9 +422,9 @@ public abstract class AbstractRepositoryTaskEditor extends TaskFormPage { public void containersChanged(Set<TaskContainerDelta> containers) { ITask taskToRefresh = null; for (TaskContainerDelta taskContainerDelta : containers) { - if (repositoryTask != null && repositoryTask.equals(taskContainerDelta.getContainer())) { + if (repositoryTask != null && repositoryTask.equals(taskContainerDelta.getTarget())) { if (taskContainerDelta.getKind().equals(TaskContainerDelta.Kind.CONTENT)) { - taskToRefresh = (ITask) taskContainerDelta.getContainer(); + taskToRefresh = (ITask) taskContainerDelta.getTarget(); break; } } @@ -2833,7 +2833,7 @@ public abstract class AbstractRepositoryTaskEditor extends TaskFormPage { TasksUiPlugin.getTaskDataManager().saveOutgoing(repositoryTask, changedAttributes); } if (repositoryTask != null) { - TasksUiInternal.getTaskList().notifyTaskChanged(repositoryTask, false); + TasksUiInternal.getTaskList().notifyElementChanged(repositoryTask); } markDirty(false); } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/CategoryEditorInput.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/CategoryEditorInput.java index 626a12dee..eeba99ee1 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/CategoryEditorInput.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/CategoryEditorInput.java @@ -8,11 +8,7 @@ package org.eclipse.mylyn.internal.tasks.ui.editors; -import java.util.HashSet; -import java.util.Set; - import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.mylyn.internal.tasks.core.AbstractTaskContainer; import org.eclipse.mylyn.internal.tasks.core.TaskCategory; import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; import org.eclipse.ui.IEditorInput; @@ -69,10 +65,7 @@ public class CategoryEditorInput implements IEditorInput { public void setUrl(String url) { category.setUrl(url); - Set<AbstractTaskContainer> updated = new HashSet<AbstractTaskContainer>(); - updated.add(category); - TasksUiPlugin.getTaskList().notifyContainersUpdated(updated); -// .notifyContainerUpdated(category); + TasksUiPlugin.getTaskList().notifyElementChanged(category); } } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskPlanningEditor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskPlanningEditor.java index 6036ec2fe..bb2e7337b 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskPlanningEditor.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskPlanningEditor.java @@ -154,8 +154,8 @@ public class TaskPlanningEditor extends TaskFormPage { @Override public void containersChanged(Set<TaskContainerDelta> containers) { for (TaskContainerDelta taskContainerDelta : containers) { - if (taskContainerDelta.getContainer() instanceof ITask) { - final AbstractTask updateTask = (AbstractTask) taskContainerDelta.getContainer(); + if (taskContainerDelta.getTarget() instanceof ITask) { + final AbstractTask updateTask = (AbstractTask) taskContainerDelta.getTarget(); if (updateTask != null && task != null && updateTask.getHandleIdentifier().equals(task.getHandleIdentifier())) { if (PlatformUI.getWorkbench() != null && !PlatformUI.getWorkbench().isClosing()) { @@ -248,7 +248,7 @@ public class TaskPlanningEditor extends TaskFormPage { } else { task.setCompletionDate(null); } - TasksUiInternal.getTaskList().notifyTaskChanged(task, false); + TasksUiInternal.getTaskList().notifyElementChanged(task); } String note = noteEditor.getTextWidget().getText();// notes.getText(); diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiInternal.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiInternal.java index c238c4034..03d07c17a 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiInternal.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiInternal.java @@ -266,7 +266,7 @@ public class TasksUiInternal { for (RepositoryQuery query : queries) { query.setSynchronizing(true); } - taskList.notifyContainersUpdated(queries); + taskList.notifySyncStateChanged(queries); SynchronizationJob job = TasksUiPlugin.getTasksJobFactory().createSynchronizeQueriesJob(connector, repository, queries); @@ -340,7 +340,7 @@ public class TasksUiInternal { ITaskList taskList = TasksUiInternal.getTaskList(); for (ITask task : tasks) { ((AbstractTask) task).setSynchronizing(true); - taskList.notifyTaskChanged(task, false); + taskList.notifyElementChanged(task); } // TODO notify task list? @@ -356,8 +356,7 @@ public class TasksUiInternal { @Override public void done(IJobChangeEvent event) { if (task.getErrorStatus() != null) { - TasksUiInternal.asyncDisplayStatus("Task Synchronization Failed", - task.getErrorStatus()); + TasksUiInternal.asyncDisplayStatus("Task Synchronization Failed", task.getErrorStatus()); } } }); diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListCellModifier.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListCellModifier.java index f02a24c47..738369f5a 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListCellModifier.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListCellModifier.java @@ -81,7 +81,7 @@ class TaskListCellModifier implements ICellModifier { case 0: if (task != null) { task.setSummary(((String) value).trim()); - TasksUiPlugin.getTaskList().notifyTaskChanged(task, false); + TasksUiPlugin.getTaskList().notifyElementChanged(task); } break; case 1: diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDropAdapter.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDropAdapter.java index 908838272..7479d5fd0 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDropAdapter.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDropAdapter.java @@ -398,7 +398,7 @@ public class TaskListDropAdapter extends ViewerDropAdapter { @Override protected void titleRetrieved(final String pageTitle) { newTask.setSummary(pageTitle); - TasksUiInternal.getTaskList().notifyTaskChanged(newTask, false); + TasksUiInternal.getTaskList().notifyElementChanged(newTask); } }; job.schedule(); diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListFilteredTree.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListFilteredTree.java index bd134a810..03c32099f 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListFilteredTree.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListFilteredTree.java @@ -164,7 +164,7 @@ public class TaskListFilteredTree extends AbstractFilteredTree { @Override public void containersChanged(Set<TaskContainerDelta> containers) { for (TaskContainerDelta taskContainerDelta : containers) { - if (taskContainerDelta.getContainer() instanceof ITask) { + if (taskContainerDelta.getTarget() instanceof ITask) { updateTaskProgressBar(); break; } @@ -328,8 +328,8 @@ public class TaskListFilteredTree extends AbstractFilteredTree { @Override public void containersChanged(Set<TaskContainerDelta> containers) { for (TaskContainerDelta taskContainerDelta : containers) { - if (taskContainerDelta.getContainer() instanceof ITask) { - final AbstractTask changedTask = (AbstractTask) (taskContainerDelta.getContainer()); + if (taskContainerDelta.getTarget() instanceof ITask) { + final AbstractTask changedTask = (AbstractTask) (taskContainerDelta.getTarget()); if (Platform.isRunning() && PlatformUI.getWorkbench() != null && Display.getCurrent() == null) { PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java index d888a2646..4d57ae43f 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java @@ -465,7 +465,7 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener { public void taskDeactivated(final ITask task) { PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { public void run() { - refreshJob.refreshTask(task); + refreshJob.refreshElement(task); updateDescription(); filteredTree.indicateNoActiveTask(); } @@ -505,10 +505,10 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener { refreshJob.refresh(); break; default: - if (taskContainerDelta.getContainer() == null) { + if (taskContainerDelta.getTarget() == null) { refreshJob.refresh(); } else { - refreshJob.refreshTask(taskContainerDelta.getContainer()); + refreshJob.refreshElement(taskContainerDelta.getTarget()); } } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetUpdater.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetUpdater.java index 35656191d..6d6039c28 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetUpdater.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetUpdater.java @@ -130,8 +130,8 @@ public class TaskWorkingSetUpdater implements IWorkingSetUpdater, ITaskListChang public void containersChanged(Set<TaskContainerDelta> delta) { for (TaskContainerDelta taskContainerDelta : delta) { - if (taskContainerDelta.getContainer() instanceof TaskCategory - || taskContainerDelta.getContainer() instanceof IRepositoryQuery) { + if (taskContainerDelta.getTarget() instanceof TaskCategory + || taskContainerDelta.getTarget() instanceof IRepositoryQuery) { synchronized (workingSets) { switch (taskContainerDelta.getKind()) { case REMOVED: @@ -139,7 +139,7 @@ public class TaskWorkingSetUpdater implements IWorkingSetUpdater, ITaskListChang for (IWorkingSet workingSet : workingSets) { ArrayList<IAdaptable> elements = new ArrayList<IAdaptable>( Arrays.asList(workingSet.getElements())); - elements.remove(taskContainerDelta.getContainer()); + elements.remove(taskContainerDelta.getTarget()); workingSet.setElements(elements.toArray(new IAdaptable[elements.size()])); } break; @@ -148,13 +148,10 @@ public class TaskWorkingSetUpdater implements IWorkingSetUpdater, ITaskListChang for (IWorkingSet workingSet : TaskWorkingSetUpdater.getEnabledSets()) { ArrayList<IAdaptable> elements = new ArrayList<IAdaptable>( Arrays.asList(workingSet.getElements())); - elements.add(taskContainerDelta.getContainer()); + elements.add(taskContainerDelta.getTarget()); workingSet.setElements(elements.toArray(new IAdaptable[elements.size()])); } break; - case CHANGED: - // Ignore since containers change during synch with server - break; } } } 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 d36243519..e8098974b 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 @@ -192,9 +192,9 @@ public abstract class AbstractTaskEditorPage extends FormPage implements ISelect public void containersChanged(Set<TaskContainerDelta> containers) { ITask taskToRefresh = null; for (TaskContainerDelta taskContainerDelta : containers) { - if (task.equals(taskContainerDelta.getContainer())) { + if (task.equals(taskContainerDelta.getTarget())) { if (taskContainerDelta.getKind().equals(TaskContainerDelta.Kind.CONTENT)) { - taskToRefresh = (ITask) taskContainerDelta.getContainer(); + taskToRefresh = (ITask) taskContainerDelta.getTarget(); break; } } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/RepositoryQueryWizard.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/RepositoryQueryWizard.java index 312b2fbc8..e8fb8a00c 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/RepositoryQueryWizard.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/RepositoryQueryWizard.java @@ -8,8 +8,6 @@ package org.eclipse.mylyn.tasks.ui.wizards; -import java.util.Collections; - import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; @@ -63,7 +61,9 @@ public class RepositoryQueryWizard extends Wizard { IRepositoryQuery query = page.getQuery(); if (query != null) { page.applyTo(query); - TasksUiPlugin.getTaskList().notifyContainersUpdated(Collections.singleton((RepositoryQuery) query)); + if (query instanceof RepositoryQuery) { + TasksUiPlugin.getTaskList().notifyElementChanged((RepositoryQuery) query); + } } else { query = page.createQuery(); TasksUi.getTasksModel().addQuery(query); |