diff options
Diffstat (limited to 'org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/externalization/TaskListExternalizationParticipant.java')
-rw-r--r-- | org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/externalization/TaskListExternalizationParticipant.java | 29 |
1 files changed, 28 insertions, 1 deletions
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 c1bd29e92..b004ec8c7 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 @@ -19,9 +19,13 @@ import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.mylyn.commons.core.StatusHandler; import org.eclipse.mylyn.internal.tasks.core.ITaskListRunnable; import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants; +import org.eclipse.mylyn.internal.tasks.core.LocalRepositoryConnector; import org.eclipse.mylyn.internal.tasks.core.TaskContainerDelta; import org.eclipse.mylyn.internal.tasks.core.TaskList; +import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryManager; +import org.eclipse.mylyn.internal.tasks.core.UnmatchedTaskContainer; import org.eclipse.mylyn.tasks.core.ITaskListChangeListener; +import org.eclipse.mylyn.tasks.core.TaskRepository; /** * @author Rob Elves @@ -39,11 +43,14 @@ public class TaskListExternalizationParticipant extends AbstractExternalizationP private boolean dirty; + private final TaskRepositoryManager taskRepositoryManager; + public TaskListExternalizationParticipant(TaskList taskList, TaskListExternalizer taskListExternalizer, - ExternalizationManager manager) { + ExternalizationManager manager, TaskRepositoryManager repositoryManager) { this.manager = manager; this.taskList = taskList; this.taskListWriter = taskListExternalizer; + this.taskRepositoryManager = repositoryManager; } @Override @@ -75,7 +82,10 @@ public class TaskListExternalizationParticipant extends AbstractExternalizationP } private void resetAndLoad() throws CoreException { + resetTaskList(); taskListWriter.readTaskList(taskList, taskListFile); + + // TODO: fire ROOT event } private boolean recover() { @@ -94,6 +104,23 @@ public class TaskListExternalizationParticipant extends AbstractExternalizationP taskList.run(loadRunnable, monitor); } + /** + * public for tests + */ + public void resetTaskList() { + taskList.reset(); + prepareOrphanContainers(); + } + + private void prepareOrphanContainers() { + for (TaskRepository repository : taskRepositoryManager.getAllRepositories()) { + if (!repository.getConnectorKind().equals(LocalRepositoryConnector.CONNECTOR_KIND)) { + taskList.addUnmatchedContainer(new UnmatchedTaskContainer(repository.getConnectorKind(), + repository.getRepositoryUrl())); + } + } + } + @Override public void save(String rootPath, IProgressMonitor monitor) throws CoreException { final File taskListFile = getFile(rootPath); |