diff options
author | Leo Dos Santos | 2014-04-28 20:43:48 +0000 |
---|---|---|
committer | Sam Davis | 2014-05-06 23:37:51 +0000 |
commit | 155dcd67532d50d9b35249be09a5ea3788cf2d37 (patch) | |
tree | a80bd06c82f253070d9b54c50aeb2e582b7b0318 /org.eclipse.mylyn.tasks.ui | |
parent | 572047efc509fffef7b1cdc3def9e1483e3a641a (diff) | |
download | org.eclipse.mylyn.tasks-155dcd67532d50d9b35249be09a5ea3788cf2d37.tar.gz org.eclipse.mylyn.tasks-155dcd67532d50d9b35249be09a5ea3788cf2d37.tar.xz org.eclipse.mylyn.tasks-155dcd67532d50d9b35249be09a5ea3788cf2d37.zip |
433719: Request for AbstractRepositoryConnector.getBrowseableUrl()
Change-Id: I8b19972eb4ac1091e221a41bfd50cd30187980ce
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=433719
Signed-off-by: Leo Dos Santos <leo.dos.santos@tasktop.com>
Diffstat (limited to 'org.eclipse.mylyn.tasks.ui')
2 files changed, 64 insertions, 10 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyTaskDetailsAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyTaskDetailsAction.java index 742056a8e..3f6829ba5 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyTaskDetailsAction.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyTaskDetailsAction.java @@ -11,13 +11,17 @@ package org.eclipse.mylyn.internal.tasks.ui.actions; +import java.net.URL; + import org.eclipse.core.runtime.Assert; import org.eclipse.mylyn.commons.ui.ClipboardCopier; import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery; import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal; +import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector; import org.eclipse.mylyn.tasks.core.IRepositoryElement; import org.eclipse.mylyn.tasks.core.IRepositoryQuery; import org.eclipse.mylyn.tasks.core.ITask; +import org.eclipse.mylyn.tasks.core.TaskRepository; import org.eclipse.mylyn.tasks.ui.TasksUi; import org.eclipse.ui.actions.BaseSelectionListenerAction; @@ -143,12 +147,20 @@ public class CopyTaskDetailsAction extends BaseSelectionListenerAction { } private static String getUrl(IRepositoryElement element) { - if (element.getUrl() != null) { - return element.getUrl(); - } else if (element instanceof ITask) { + if (element instanceof ITask) { ITask task = (ITask) element; - return TasksUi.getRepositoryConnector(task.getConnectorKind()).getTaskUrl(task.getRepositoryUrl(), - task.getTaskId()); + AbstractRepositoryConnector connector = TasksUi.getRepositoryConnector(task.getConnectorKind()); + TaskRepository repository = TasksUiInternal.getRepository(task); + URL location = connector.getBrowserUrl(repository, element); + if (location != null) { + return location.toString(); + } else if (task.getUrl() != null) { + return task.getUrl(); + } else { + return connector.getTaskUrl(task.getRepositoryUrl(), task.getTaskId()); + } + } else if (element.getUrl() != null) { + return element.getUrl(); } return null; } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiInternal.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiInternal.java index e2f3ed054..8202af336 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiInternal.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiInternal.java @@ -145,6 +145,9 @@ import org.eclipse.ui.statushandlers.IStatusAdapterConstants; import org.eclipse.ui.statushandlers.StatusAdapter; import org.eclipse.ui.statushandlers.StatusManager; +import com.google.common.base.Strings; +import com.google.common.collect.Ordering; + /** * @author Steffen Pingel */ @@ -1195,16 +1198,55 @@ public class TasksUiInternal { * @return first task with a matching URL. */ public static AbstractTask getTaskByUrl(String taskUrl) { - Collection<AbstractTask> tasks = TasksUiPlugin.getTaskList().getAllTasks(); - for (AbstractTask task : tasks) { - String currUrl = task.getUrl(); - if (currUrl != null && !currUrl.equals("") && currUrl.equals(taskUrl)) { //$NON-NLS-1$ - return task; + if (!Strings.isNullOrEmpty(taskUrl)) { + Collection<AbstractTask> tasks = TasksUiPlugin.getTaskList().getAllTasks(); + List<AbstractTask> sortedTasks = sortTasksByRepositoryUrl(tasks); + + AbstractRepositoryConnector connector = null; + TaskRepository repository = null; + + for (AbstractTask task : sortedTasks) { + if (taskUrl.equals(task.getUrl())) { + return task; + } else { + String repositoryUrl = task.getRepositoryUrl(); + if (repositoryUrl != null) { + if (repository == null || !repositoryUrl.equals(repository.getUrl())) { + connector = TasksUi.getRepositoryManager().getRepositoryConnector(task.getConnectorKind()); + repository = getRepository(task); + } + + if (connector != null) { + URL url = connector.getBrowserUrl(repository, task); + if (url != null && taskUrl.equals(url.toString())) { + return task; + } + } + } + } } } return null; } + private static List<AbstractTask> sortTasksByRepositoryUrl(Collection<AbstractTask> tasks) { + List<AbstractTask> sortedTasks = new Ordering<AbstractTask>() { + + @Override + public int compare(AbstractTask left, AbstractTask right) { + if (left.getRepositoryUrl() == null) { + return 1; + } + if (right.getRepositoryUrl() == null) { + return -1; + } + return left.getRepositoryUrl().compareTo(right.getRepositoryUrl()); + } + + }.nullsLast().sortedCopy(tasks); + return sortedTasks; + } + public static boolean isTaskUrl(String taskUrl) { Assert.isNotNull(taskUrl); List<TaskRepository> repositories = TasksUiPlugin.getRepositoryManager().getAllRepositories(); |