From 06987bc26647b3a2f7d0af591325daeb75acf4b9 Mon Sep 17 00:00:00 2001 From: Brandon Dong Date: Wed, 1 Jun 2016 14:48:45 -0700 Subject: 494568: add support for refactoring task attribute values Change-Id: Ia943f2ddd5201c8fa2c196a91f1116b2434336b2 Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=495066 Signed-off-by: Brandon Dong --- .../internal/tasks/core/data/TaskDataManager.java | 22 +++++++++++++++++++ .../internal/tasks/core/data/TaskDataState.java | 25 +++++++++++++++++++--- 2 files changed, 44 insertions(+), 3 deletions(-) (limited to 'org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal') 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 c12679ef2..39a46aca0 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 @@ -42,8 +42,11 @@ import org.eclipse.mylyn.tasks.core.ITask.SynchronizationState; import org.eclipse.mylyn.tasks.core.TaskRepository; import org.eclipse.mylyn.tasks.core.data.ITaskDataManager; import org.eclipse.mylyn.tasks.core.data.ITaskDataWorkingCopy; +import org.eclipse.mylyn.tasks.core.data.TaskAttribute; import org.eclipse.mylyn.tasks.core.data.TaskData; +import com.google.common.collect.ListMultimap; + /** * Encapsulates synchronization policy. * @@ -596,4 +599,23 @@ public class TaskDataManager implements ITaskDataManager { } }); } + + public void refactorAttributeValue(final ITask itask, final ListMultimap newValues) + throws CoreException { + Assert.isTrue(itask instanceof AbstractTask); + final AbstractTask task = (AbstractTask) itask; + final String kind = task.getConnectorKind(); + taskList.run(new ITaskListRunnable() { + public void execute(IProgressMonitor monitor) throws CoreException { + File file = getMigratedFile(task, kind); + if (file.exists()) { + TaskDataState state = taskDataStore.getTaskDataState(file); + if (state != null) { + state.changeAttributeValues(newValues); + taskDataStore.putTaskData(file, state); + } + } + } + }); + } } diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/data/TaskDataState.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/data/TaskDataState.java index 4ba4b8000..576776405 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/data/TaskDataState.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/data/TaskDataState.java @@ -21,6 +21,8 @@ import org.eclipse.mylyn.tasks.core.data.ITaskDataWorkingCopy; import org.eclipse.mylyn.tasks.core.data.TaskAttribute; import org.eclipse.mylyn.tasks.core.data.TaskData; +import com.google.common.collect.ListMultimap; + /** * @author Rob Elves * @author Steffen Pingel @@ -136,9 +138,8 @@ public class TaskDataState implements ITaskDataWorkingCopy { if (editsTaskData != null) { deepCopyChildren(editsTaskData.getRoot(), localTaskData.getRoot()); } else { - editsTaskData = new TaskData(repositoryTaskData.getAttributeMapper(), - repositoryTaskData.getConnectorKind(), repositoryTaskData.getRepositoryUrl(), - repositoryTaskData.getTaskId()); + editsTaskData = new TaskData(repositoryTaskData.getAttributeMapper(), repositoryTaskData.getConnectorKind(), + repositoryTaskData.getRepositoryUrl(), repositoryTaskData.getTaskId()); editsTaskData.setVersion(repositoryTaskData.getVersion()); } } @@ -201,6 +202,24 @@ public class TaskDataState implements ITaskDataWorkingCopy { setRepositoryData(createCopy(oldState.getRepositoryData())); } + public void changeAttributeValues(ListMultimap newValues) { + changeAttributeValues(localTaskData, newValues); + changeAttributeValues(repositoryTaskData, newValues); + changeAttributeValues(editsTaskData, newValues); + changeAttributeValues(lastReadTaskData, newValues); + } + + private void changeAttributeValues(TaskData taskData, ListMultimap newValues) { + if (taskData != null) { + for (TaskAttribute key : newValues.keySet()) { + TaskAttribute attribute = taskData.getRoot().getMappedAttribute(key.getPath()); + if (attribute != null) { + attribute.setValues(newValues.get(key)); + } + } + } + } + public static TaskData createCopy(TaskData oldData) { if (oldData == null) { return null; -- cgit v1.2.3