diff options
author | Sam Davis | 2015-11-20 23:42:17 +0000 |
---|---|---|
committer | Sam Davis | 2016-01-23 00:59:49 +0000 |
commit | 27d4ded07550dbc873407d291b3fcbadf377786a (patch) | |
tree | 5a7c9aabbce4c5dcf6d5e429ea5a183706d40536 /org.eclipse.mylyn.tasks.ui | |
parent | e5647f87f2d289148a4e5aa13ecb67d8f7546301 (diff) | |
download | org.eclipse.mylyn.tasks-27d4ded07550dbc873407d291b3fcbadf377786a.tar.gz org.eclipse.mylyn.tasks-27d4ded07550dbc873407d291b3fcbadf377786a.tar.xz org.eclipse.mylyn.tasks-27d4ded07550dbc873407d291b3fcbadf377786a.zip |
485380: [api] connectors can search by task key
Change-Id: I512052246726ff51c1490b8b9f205c443fc8a562
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=485380
Diffstat (limited to 'org.eclipse.mylyn.tasks.ui')
-rw-r--r-- | org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/OpenRepositoryTaskJob.java | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/OpenRepositoryTaskJob.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/OpenRepositoryTaskJob.java index baffbe8a6..a7ae7f4e9 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/OpenRepositoryTaskJob.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/OpenRepositoryTaskJob.java @@ -55,11 +55,36 @@ public class OpenRepositoryTaskJob extends Job { private final long timestamp; + private String taskKey; + + private TaskRepository repository; + + /** + * Creates a job that searches for a task with the given task <i>key</i> and opens it if found. + */ + public OpenRepositoryTaskJob(TaskRepository repository, String taskKey, String taskUrl, IWorkbenchPage page) { + super(MessageFormat.format(Messages.OpenRepositoryTaskJob_Opening_repository_task_X, taskKey)); + this.repositoryKind = repository.getConnectorKind(); + this.taskId = null; + this.repositoryUrl = repository.getRepositoryUrl(); + this.taskUrl = taskUrl; + this.timestamp = 0; + this.repository = repository; + this.taskKey = taskKey; + } + + /** + * Creates a job that fetches a task with the given task id and opens it. + */ public OpenRepositoryTaskJob(String repositoryKind, String repositoryUrl, String taskId, String taskUrl, IWorkbenchPage page) { this(repositoryKind, repositoryUrl, taskId, taskUrl, 0, page); } + /** + * Creates a job that fetches a task with the given task id and opens it, expanding all comments made after the + * given timestamp. + */ public OpenRepositoryTaskJob(String repositoryKind, String repositoryUrl, String taskId, String taskUrl, long timestamp, IWorkbenchPage page) { super(MessageFormat.format(Messages.OpenRepositoryTaskJob_Opening_repository_task_X, taskId)); @@ -87,7 +112,9 @@ public class OpenRepositoryTaskJob extends Job { @Override public IStatus run(IProgressMonitor monitor) { monitor.beginTask(Messages.OpenRepositoryTaskJob_Opening_Remote_Task, 10); - final TaskRepository repository = TasksUi.getRepositoryManager().getRepository(repositoryKind, repositoryUrl); + if (repository == null) { + repository = TasksUi.getRepositoryManager().getRepository(repositoryKind, repositoryUrl); + } if (repository == null) { PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { public void run() { @@ -109,7 +136,7 @@ public class OpenRepositoryTaskJob extends Job { AbstractRepositoryConnector connector = TasksUi.getRepositoryManager().getRepositoryConnector(repositoryKind); try { - final TaskData taskData = connector.getTaskData(repository, taskId, monitor); + final TaskData taskData = getTaskData(connector, monitor); if (taskData != null) { task = TasksUi.getRepositoryModel().createTask(repository, taskData.getTaskId()); TasksUiPlugin.getTaskDataManager().putUpdatedTaskData(task, taskData, true); @@ -161,4 +188,18 @@ public class OpenRepositoryTaskJob extends Job { return Status.OK_STATUS; } + TaskData getTaskData(AbstractRepositoryConnector connector, IProgressMonitor monitor) throws CoreException { + if (taskId != null) { + return connector.getTaskData(repository, taskId, monitor); + } else if (taskKey != null && connector.supportsSearchByTaskKey(repository)) { + TaskData searchTaskData = connector.searchByTaskKey(repository, taskKey, monitor); + if (searchTaskData.isPartial()) { + return connector.getTaskData(repository, searchTaskData.getTaskId(), monitor); + } else { + return searchTaskData; + } + } + return null; + } + } |