Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJaxsun McCarthy Huggan2016-06-22 02:28:12 +0000
committerGerrit Code Review @ Eclipse.org2016-07-26 16:33:06 +0000
commit19c93331f06f1452647d82d9388c14d1415de3bf (patch)
treed62d68c78e4487b2d3c41144139ec555cd04095d
parentacb48310b78598fc0f37ac3bf1b262bc0ee7feb5 (diff)
downloadorg.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
-rw-r--r--org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TransferList.java7
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ImportAction.java62
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/ImportExportUtil.java10
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);

Back to the top