diff options
author | Jaxsun McCarthy Huggan | 2016-06-22 02:28:12 +0000 |
---|---|---|
committer | Gerrit Code Review @ Eclipse.org | 2016-07-26 16:33:06 +0000 |
commit | 19c93331f06f1452647d82d9388c14d1415de3bf (patch) | |
tree | d62d68c78e4487b2d3c41144139ec555cd04095d | |
parent | acb48310b78598fc0f37ac3bf1b262bc0ee7feb5 (diff) | |
download | org.eclipse.mylyn.tasks-19c93331f06f1452647d82d9388c14d1415de3bf.tar.gz org.eclipse.mylyn.tasks-19c93331f06f1452647d82d9388c14d1415de3bf.tar.xz org.eclipse.mylyn.tasks-19c93331f06f1452647d82d9388c14d1415de3bf.zip |
496452: Support import/export of TaskCategories
Change-Id: I075632b251a0e7f41d2e7b16808bba4e9774f088
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=496452
3 files changed, 58 insertions, 21 deletions
diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TransferList.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TransferList.java index 95516d1d0..56095732d 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TransferList.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TransferList.java @@ -22,7 +22,7 @@ import org.eclipse.mylyn.tasks.core.ITask; /** * Used to externalize queries. - * + * * @author Steffen */ public class TransferList implements ITransferList { @@ -58,7 +58,10 @@ public class TransferList implements ITransferList { } public boolean addTask(ITask task, AbstractTaskContainer parentContainer) { - tasks.add((AbstractTask) task); + if (!tasks.contains(task)) { + tasks.add((AbstractTask) task); + } + parentContainer.internalAddChild((AbstractTask) task); return true; } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ImportAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ImportAction.java index b4a46f2d4..9caf90045 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ImportAction.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ImportAction.java @@ -12,6 +12,7 @@ package org.eclipse.mylyn.internal.tasks.ui.actions; import java.io.File; +import java.util.Optional; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; @@ -22,8 +23,10 @@ import org.eclipse.jface.viewers.ISelection; import org.eclipse.mylyn.commons.core.StatusHandler; import org.eclipse.mylyn.commons.workbench.WorkbenchUtil; import org.eclipse.mylyn.internal.tasks.core.AbstractTask; +import org.eclipse.mylyn.internal.tasks.core.AbstractTaskCategory; import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants; import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery; +import org.eclipse.mylyn.internal.tasks.core.TaskCategory; import org.eclipse.mylyn.internal.tasks.core.TaskList; import org.eclipse.mylyn.internal.tasks.core.TransferList; import org.eclipse.mylyn.internal.tasks.core.externalization.TaskListExternalizer; @@ -31,6 +34,7 @@ import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; import org.eclipse.mylyn.internal.tasks.ui.util.ImportExportUtil; import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal; import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector; +import org.eclipse.mylyn.tasks.core.ITask; import org.eclipse.mylyn.tasks.core.TaskRepository; import org.eclipse.mylyn.tasks.ui.TasksUi; import org.eclipse.osgi.util.NLS; @@ -76,9 +80,9 @@ public class ImportAction implements IViewActionDelegate { IStatus result = importElements(file); if (!result.isOK()) { StatusHandler.log(result); - TasksUiInternal.displayStatus(Messages.ImportAction_Dialog_Title, new MultiStatus( - ITasksCoreConstants.ID_PLUGIN, 0, new IStatus[] { result }, - Messages.ImportAction_Problems_encountered, null)); + TasksUiInternal.displayStatus(Messages.ImportAction_Dialog_Title, + new MultiStatus(ITasksCoreConstants.ID_PLUGIN, 0, new IStatus[] { result }, + Messages.ImportAction_Problems_encountered, null)); } } } @@ -87,28 +91,29 @@ public class ImportAction implements IViewActionDelegate { public static ImportStatus importElements(File file) { TransferList list = new TransferList(); - ImportStatus result = new ImportStatus(ITasksCoreConstants.ID_PLUGIN, 0, - "Problems encounted during importing", null); //$NON-NLS-1$ + ImportStatus result = new ImportStatus(ITasksCoreConstants.ID_PLUGIN, 0, "Problems encounted during importing", //$NON-NLS-1$ + null); result.taskList = list; TaskListExternalizer externalizer = TasksUiPlugin.getDefault().createTaskListExternalizer(); try { externalizer.readTaskList(list, file); } catch (CoreException e) { - result.add(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Problems encountered reading import file", e)); //$NON-NLS-1$ + result.add( + new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Problems encountered reading import file", e)); //$NON-NLS-1$ } TaskList taskList = TasksUiPlugin.getTaskList(); for (AbstractTask task : list.getAllTasks()) { if (!validateRepository(task.getConnectorKind(), task.getRepositoryUrl())) { - result.add(new Status(IStatus.WARNING, TasksUiPlugin.ID_PLUGIN, NLS.bind( - "Task {0} ignored, unknown connector", task.getSummary()))); //$NON-NLS-1$ + result.add(new Status(IStatus.WARNING, TasksUiPlugin.ID_PLUGIN, + NLS.bind("Task {0} ignored, unknown connector", task.getSummary()))); //$NON-NLS-1$ continue; } if (taskList.getTask(task.getHandleIdentifier()) != null) { - result.add(new Status(IStatus.WARNING, TasksUiPlugin.ID_PLUGIN, NLS.bind( - "Task {0} ignored, already exists in Task List", task.getSummary()))); //$NON-NLS-1$ + result.add(new Status(IStatus.WARNING, TasksUiPlugin.ID_PLUGIN, + NLS.bind("Task {0} ignored, already exists in Task List", task.getSummary()))); //$NON-NLS-1$ } else { // need to deactivate since activation is managed centrally task.setActive(false); @@ -120,8 +125,8 @@ public class ImportAction implements IViewActionDelegate { for (RepositoryQuery query : list.getQueries()) { if (!validateRepository(query.getConnectorKind(), query.getRepositoryUrl())) { - result.add(new Status(IStatus.WARNING, TasksUiPlugin.ID_PLUGIN, NLS.bind( - "Query {0} ignored, unknown connector", query.getSummary()))); //$NON-NLS-1$ + result.add(new Status(IStatus.WARNING, TasksUiPlugin.ID_PLUGIN, + NLS.bind("Query {0} ignored, unknown connector", query.getSummary()))); //$NON-NLS-1$ continue; } @@ -129,13 +134,42 @@ public class ImportAction implements IViewActionDelegate { query.setHandleIdentifier(taskList.getUniqueHandleIdentifier()); } taskList.addQuery(query); - AbstractRepositoryConnector connector = TasksUi.getRepositoryManager().getRepositoryConnector( - query.getConnectorKind()); + AbstractRepositoryConnector connector = TasksUi.getRepositoryManager() + .getRepositoryConnector(query.getConnectorKind()); if (connector != null) { TasksUiInternal.synchronizeQuery(connector, query, null, true); } } + for (AbstractTaskCategory toImport : list.getCategories()) { + if (toImport instanceof TaskCategory) { + Optional<AbstractTaskCategory> match = taskList.getCategories() + .stream() + .filter(c -> c instanceof TaskCategory && c.equals(toImport)) + .findFirst(); + TaskCategory category; + if (match.isPresent()) { + category = (TaskCategory) match.get(); + result.add(new Status(IStatus.INFO, TasksUiPlugin.ID_PLUGIN, NLS.bind( + "Category {0} already exists in the Task List, the existing category will be updated instead.", //$NON-NLS-1$ + category.getSummary()))); + } else { + category = (TaskCategory) toImport; + taskList.addCategory(category); + } + for (ITask task : toImport.getChildren()) { + toImport.internalRemoveChild(task); + ITask localVersion = taskList.getTask(task.getHandleIdentifier()); + if (localVersion != null) { + taskList.addTask(localVersion, category); + } + } + } else { + result.add(new Status(IStatus.WARNING, TasksUiPlugin.ID_PLUGIN, NLS + .bind("Category {0} ignored, only Task Categories may be imported.", toImport.getSummary()))); //$NON-NLS-1$ + } + } + return result; } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/ImportExportUtil.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/ImportExportUtil.java index 681c01187..84728e6fa 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/ImportExportUtil.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/ImportExportUtil.java @@ -18,7 +18,6 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.mylyn.commons.ui.PlatformUiUtil; import org.eclipse.mylyn.internal.tasks.core.AbstractTask; -import org.eclipse.mylyn.internal.tasks.core.AbstractTaskCategory; import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants; import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery; import org.eclipse.mylyn.internal.tasks.core.TaskCategory; @@ -35,9 +34,10 @@ import org.eclipse.swt.widgets.FileDialog; public class ImportExportUtil { public static void configureFilter(FileDialog dialog) { - dialog.setFilterExtensions(PlatformUiUtil.getFilterExtensions(new String[] { "*" + ITasksCoreConstants.FILE_EXTENSION })); //$NON-NLS-1$ - dialog.setFilterNames(new String[] { NLS.bind(Messages.ImportExportUtil_Tasks_and_queries_Filter0, - ITasksCoreConstants.FILE_EXTENSION) }); + dialog.setFilterExtensions( + PlatformUiUtil.getFilterExtensions(new String[] { "*" + ITasksCoreConstants.FILE_EXTENSION })); //$NON-NLS-1$ + dialog.setFilterNames(new String[] { + NLS.bind(Messages.ImportExportUtil_Tasks_and_queries_Filter0, ITasksCoreConstants.FILE_EXTENSION) }); } public static void export(File file, IStructuredSelection selection) throws CoreException { @@ -45,7 +45,7 @@ public class ImportExportUtil { TransferList list = new TransferList(); for (Iterator<?> it = selection.iterator(); it.hasNext();) { Object element = it.next(); - if (element instanceof AbstractTaskCategory) { + if (element instanceof TaskCategory) { list.addCategory((TaskCategory) element); } else if (element instanceof RepositoryQuery) { list.addQuery((RepositoryQuery) element); |