Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/sync/SynchronizeTasksJob.java')
-rw-r--r--org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/sync/SynchronizeTasksJob.java330
1 files changed, 0 insertions, 330 deletions
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
deleted file mode 100644
index ae5551370..000000000
--- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/sync/SynchronizeTasksJob.java
+++ /dev/null
@@ -1,330 +0,0 @@
-/*******************************************************************************
- * 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.core.sync;
-
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.SubProgressMonitor;
-import org.eclipse.mylyn.commons.core.StatusHandler;
-import org.eclipse.mylyn.commons.net.Policy;
-import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
-import org.eclipse.mylyn.internal.tasks.core.AbstractTaskContainer;
-import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants;
-import org.eclipse.mylyn.internal.tasks.core.TaskList;
-import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants.MutexSchedulingRule;
-import org.eclipse.mylyn.internal.tasks.core.data.TaskDataManager;
-import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector;
-import org.eclipse.mylyn.tasks.core.IRepositoryManager;
-import org.eclipse.mylyn.tasks.core.IRepositoryModel;
-import org.eclipse.mylyn.tasks.core.ITask;
-import org.eclipse.mylyn.tasks.core.ITaskContainer;
-import org.eclipse.mylyn.tasks.core.TaskRepository;
-import org.eclipse.mylyn.tasks.core.ITask.SynchronizationState;
-import org.eclipse.mylyn.tasks.core.data.AbstractTaskDataHandler;
-import org.eclipse.mylyn.tasks.core.data.TaskData;
-import org.eclipse.mylyn.tasks.core.data.TaskDataCollector;
-import org.eclipse.mylyn.tasks.core.data.TaskRelation;
-import org.eclipse.mylyn.tasks.core.data.TaskRelation.Direction;
-import org.eclipse.mylyn.tasks.core.data.TaskRelation.Kind;
-import org.eclipse.mylyn.tasks.core.sync.SynchronizationJob;
-
-/**
- * @author Mik Kersten
- * @author Rob Elves
- * @author Steffen Pingel
- */
-public class SynchronizeTasksJob extends SynchronizationJob {
-
- private final AbstractRepositoryConnector connector;
-
- private final TaskDataManager taskDataManager;
-
- private final TaskList taskList;
-
- private final Set<ITask> allTasks;
-
- private final IRepositoryManager repositoryManager;
-
- private TaskRepository taskRepository;
-
- private Map<String, TaskRelation[]> relationsByTaskId;
-
- private boolean updateRelations;
-
- private final IRepositoryModel tasksModel;
-
- private SynchronizationSession session;
-
- private final List<IStatus> statuses;
-
- public SynchronizeTasksJob(TaskList taskList, TaskDataManager synchronizationManager, IRepositoryModel tasksModel,
- AbstractRepositoryConnector connector, TaskRepository taskRepository, Set<ITask> tasks) {
- this(taskList, synchronizationManager, tasksModel, connector, (IRepositoryManager) null, tasks);
- this.taskRepository = taskRepository;
- }
-
- public SynchronizeTasksJob(TaskList taskList, TaskDataManager synchronizationManager, IRepositoryModel tasksModel,
- AbstractRepositoryConnector connector, IRepositoryManager repositoryManager, Set<ITask> tasks) {
- super("Synchronizing Tasks (" + tasks.size() + " tasks)"); //$NON-NLS-1$ //$NON-NLS-2$
- this.taskList = taskList;
- this.taskDataManager = synchronizationManager;
- this.tasksModel = tasksModel;
- this.connector = connector;
- this.repositoryManager = repositoryManager;
- this.allTasks = tasks;
- this.statuses = new ArrayList<IStatus>();
- setRule(new MutexSchedulingRule());
- }
-
- @Override
- public IStatus run(IProgressMonitor monitor) {
- try {
- if (taskRepository == null) {
- try {
- monitor.beginTask(Messages.SynchronizeTasksJob_Processing, allTasks.size() * 100);
- // group tasks by repository
- Map<TaskRepository, Set<ITask>> tasksByRepository = new HashMap<TaskRepository, Set<ITask>>();
- for (ITask task : allTasks) {
- TaskRepository repository = repositoryManager.getRepository(task.getConnectorKind(),
- task.getRepositoryUrl());
- Set<ITask> tasks = tasksByRepository.get(repository);
- if (tasks == null) {
- tasks = new HashSet<ITask>();
- tasksByRepository.put(repository, tasks);
- }
- tasks.add(task);
- }
- // synchronize tasks for each repositories
- for (TaskRepository taskRepository : tasksByRepository.keySet()) {
- setName(MessageFormat.format(Messages.SynchronizeTasksJob_Synchronizing_Tasks__X_,
- taskRepository.getRepositoryLabel()));
- this.taskRepository = taskRepository;
- Set<ITask> repositoryTasks = tasksByRepository.get(taskRepository);
- run(repositoryTasks, new SubProgressMonitor(monitor, repositoryTasks.size() * 100));
- }
- } finally {
- monitor.done();
- }
- } else {
- run(allTasks, monitor);
- }
- } catch (OperationCanceledException e) {
- for (ITask task : allTasks) {
- ((AbstractTask) task).setSynchronizing(false);
- taskList.notifyElementChanged(task);
- }
- return Status.CANCEL_STATUS;
- }
- return Status.OK_STATUS;
- }
-
- private void run(Set<ITask> tasks, IProgressMonitor monitor) {
- relationsByTaskId = new HashMap<String, TaskRelation[]>();
- updateRelations = true;
- runInternal(tasks, monitor);
- synchronizedTaskRelations(monitor, relationsByTaskId);
- }
-
- public void synchronizedTaskRelations(IProgressMonitor monitor, Map<String, TaskRelation[]> relationsByTaskId) {
- updateRelations = false;
- for (String taskId : relationsByTaskId.keySet()) {
- ITask parentTask = taskList.getTask(taskRepository.getRepositoryUrl(), taskId);
- if (parentTask instanceof ITaskContainer) {
- Set<ITask> removedChildTasks = new HashSet<ITask>(((ITaskContainer) parentTask).getChildren());
-
- TaskRelation[] relations = relationsByTaskId.get(taskId);
- for (TaskRelation relation : relations) {
- if (relation.getDirection() == Direction.OUTWARD && relation.getKind() == Kind.CONTAINMENT) {
- ITask task = taskList.getTask(taskRepository.getRepositoryUrl(), relation.getTaskId());
- if (task == null) {
- try {
- task = synchronizeTask(monitor, relation.getTaskId());
- } catch (CoreException e) {
- StatusHandler.log(new Status(IStatus.ERROR, ITasksCoreConstants.ID_PLUGIN,
- "Synchronization failed", e)); //$NON-NLS-1$
- }
- } else {
- removedChildTasks.remove(task);
- }
-
- if (task != null) {
- taskList.addTask(task, (AbstractTaskContainer) parentTask);
- }
- }
- }
-
- for (ITask task : removedChildTasks) {
- taskList.removeFromContainer((AbstractTaskContainer) parentTask, task);
- }
- }
- }
- }
-
- private void runInternal(Set<ITask> tasks, IProgressMonitor monitor) {
- try {
- monitor.beginTask(Messages.SynchronizeTasksJob_Processing, tasks.size() * 100);
- if (canGetMultiTaskData(taskRepository)) {
- try {
- for (ITask task : tasks) {
- resetStatus(task);
- }
- synchronizeTasks(new SubProgressMonitor(monitor, tasks.size() * 100), taskRepository, tasks);
- } catch (CoreException e) {
- for (ITask task : tasks) {
- updateStatus(taskRepository, task, e.getStatus());
- }
- }
- } else {
- for (ITask task : tasks) {
- Policy.checkCanceled(monitor);
- resetStatus(task);
- try {
- synchronizeTask(new SubProgressMonitor(monitor, 100), task);
- } catch (CoreException e) {
- updateStatus(taskRepository, task, e.getStatus());
- }
- }
- }
- } catch (OperationCanceledException e) {
- throw e;
- } catch (Exception e) {
- StatusHandler.log(new Status(IStatus.ERROR, ITasksCoreConstants.ID_PLUGIN, "Synchronization failed", e)); //$NON-NLS-1$
- } finally {
- monitor.done();
- }
- }
-
- private boolean canGetMultiTaskData(TaskRepository taskRepository) {
- AbstractTaskDataHandler taskDataHandler = connector.getTaskDataHandler();
- return taskDataHandler != null && taskDataHandler.canGetMultiTaskData(taskRepository);
- }
-
- private void synchronizeTask(IProgressMonitor monitor, ITask task) throws CoreException {
- monitor.subTask(MessageFormat.format(Messages.SynchronizeTasksJob_Receiving_task_X, task.getSummary()));
- resetStatus(task);
- if (!isUser()) {
- monitor = Policy.backgroundMonitorFor(monitor);
- }
- String taskId = task.getTaskId();
- TaskData taskData = connector.getTaskData(taskRepository, taskId, monitor);
- if (taskData != null) {
- updateFromTaskData(taskRepository, task, taskData);
- return;
- }
- throw new CoreException(new Status(IStatus.ERROR, ITasksCoreConstants.ID_PLUGIN,
- "Connector failed to return task data for task \"" + task + "\"")); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- private ITask synchronizeTask(IProgressMonitor monitor, String taskId) throws CoreException {
- monitor.subTask(MessageFormat.format(Messages.SynchronizeTasksJob_Receiving_task_X, taskId));
- if (!isUser()) {
- monitor = Policy.backgroundMonitorFor(monitor);
- }
-
- TaskData taskData = connector.getTaskData(taskRepository, taskId, monitor);
- if (taskData != null) {
- return createFromTaskData(taskRepository, taskId, taskData);
- }
-
- throw new CoreException(new Status(IStatus.ERROR, ITasksCoreConstants.ID_PLUGIN,
- "Connector failed to return task data for task \"" + taskId + "\"")); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- private void resetStatus(ITask task) {
- ((AbstractTask) task).setStatus(null);
- taskList.notifySynchronizationStateChanged(task);
- }
-
- private void synchronizeTasks(IProgressMonitor monitor, final TaskRepository repository, Set<ITask> tasks)
- throws CoreException {
- monitor.subTask(MessageFormat.format(Messages.SynchronizeTasksJob_Receiving_X_tasks_from_X, tasks.size(),
- repository.getRepositoryLabel()));
-
- final Map<String, ITask> idToTask = new HashMap<String, ITask>();
- for (ITask task : tasks) {
- idToTask.put(task.getTaskId(), task);
- }
-
- TaskDataCollector collector = new TaskDataCollector() {
- @Override
- public void accept(TaskData taskData) {
- ITask task = idToTask.remove(taskData.getTaskId());
- if (task != null) {
- updateFromTaskData(repository, task, taskData);
- }
- }
- };
-
- if (!isUser()) {
- monitor = Policy.backgroundMonitorFor(monitor);
- }
- Set<String> taskIds = Collections.unmodifiableSet(new HashSet<String>(idToTask.keySet()));
- connector.getTaskDataHandler().getMultiTaskData(repository, taskIds, collector, monitor);
- }
-
- private void updateFromTaskData(TaskRepository taskRepository, ITask task, TaskData taskData) {
- try {
- taskDataManager.putUpdatedTaskData(task, taskData, isUser(), getSession());
- if (updateRelations) {
- Collection<TaskRelation> relations = connector.getTaskRelations(taskData);
- if (relations != null) {
- relationsByTaskId.put(task.getTaskId(), relations.toArray(new TaskRelation[0]));
- }
- }
- } catch (CoreException e) {
- updateStatus(taskRepository, task, e.getStatus());
- }
- }
-
- private ITask createFromTaskData(TaskRepository taskRepository, String taskId, TaskData taskData)
- throws CoreException {
- ITask task = tasksModel.createTask(taskRepository, taskData.getTaskId());
- ((AbstractTask) task).setSynchronizationState(SynchronizationState.INCOMING_NEW);
- taskDataManager.putUpdatedTaskData(task, taskData, isUser(), getSession());
- return task;
- }
-
- private void updateStatus(TaskRepository repository, ITask task, IStatus status) {
- statuses.add(status);
- ((AbstractTask) task).setStatus(status);
- if (!isUser()) {
- ((AbstractTask) task).setSynchronizing(false);
- }
- taskList.notifyElementChanged(task);
- }
-
- public SynchronizationSession getSession() {
- return session;
- }
-
- public void setSession(SynchronizationSession session) {
- this.session = session;
- }
-
- public Collection<IStatus> getStatuses() {
- return Collections.unmodifiableCollection(statuses);
- }
-
-}

Back to the top