Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeo Dos Santos2014-04-28 20:43:48 +0000
committerSam Davis2014-05-06 23:37:51 +0000
commit155dcd67532d50d9b35249be09a5ea3788cf2d37 (patch)
treea80bd06c82f253070d9b54c50aeb2e582b7b0318 /org.eclipse.mylyn.tasks.ui
parent572047efc509fffef7b1cdc3def9e1483e3a641a (diff)
downloadorg.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')
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyTaskDetailsAction.java22
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiInternal.java52
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();

Back to the top