Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Davis2012-01-09 18:05:59 +0000
committerSteffen Pingel2012-01-11 12:33:53 +0000
commit336f105831d7b57aca93db036ad906ea45e38216 (patch)
tree3e1765d3daf4f976baef732530ddc8144e301c1f /org.eclipse.mylyn.tasks.ui
parent53dd145cc529445f0ba9e3ef3a59d241d840469e (diff)
downloadorg.eclipse.mylyn.tasks-336f105831d7b57aca93db036ad906ea45e38216.tar.gz
org.eclipse.mylyn.tasks-336f105831d7b57aca93db036ad906ea45e38216.tar.xz
org.eclipse.mylyn.tasks-336f105831d7b57aca93db036ad906ea45e38216.zip
NEW - bug 364999: [patch] User can select repository when clicking a
task hyperlinks in the task editor https://bugs.eclipse.org/bugs/show_bug.cgi?id=364999 Change-Id: I08ace7988d16a40d2b4bb57fdb5b3509b635a78b
Diffstat (limited to 'org.eclipse.mylyn.tasks.ui')
-rw-r--r--org.eclipse.mylyn.tasks.ui/plugin.xml7
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/MultipleTaskHyperlinkDetector.java75
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskHyperlinkDetector.java46
3 files changed, 107 insertions, 21 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/plugin.xml b/org.eclipse.mylyn.tasks.ui/plugin.xml
index 0e69c4667..0b0dfdae6 100644
--- a/org.eclipse.mylyn.tasks.ui/plugin.xml
+++ b/org.eclipse.mylyn.tasks.ui/plugin.xml
@@ -1078,6 +1078,13 @@
name="%TaskHyperlinkDetector.name"
targetId="org.eclipse.ui.DefaultTextEditor">
</hyperlinkDetector>
+ <hyperlinkDetector
+ class="org.eclipse.mylyn.internal.tasks.ui.editors.MultipleTaskHyperlinkDetector"
+ id="org.eclipse.mylyn.tasks.ui.hyperlinks.detectors.task.multiple"
+ name="%TaskHyperlinkDetector.name"
+ modifierKeys="Ctrl"
+ targetId="org.eclipse.mylyn.tasks.ui.TaskEditor">
+ </hyperlinkDetector>
<hyperlinkDetector
class="org.eclipse.mylyn.internal.tasks.ui.editors.TaskUrlHyperlinkDetector"
description="%TaskUrlHyperlinkDetector.description"
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/MultipleTaskHyperlinkDetector.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/MultipleTaskHyperlinkDetector.java
new file mode 100644
index 000000000..39011475c
--- /dev/null
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/MultipleTaskHyperlinkDetector.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Tasktop Technologies and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Tasktop Technologies - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.tasks.ui.editors;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.Region;
+import org.eclipse.jface.text.hyperlink.IHyperlink;
+import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.mylyn.tasks.ui.TasksUi;
+
+/**
+ * @author Sam Davis
+ */
+public class MultipleTaskHyperlinkDetector extends TaskHyperlinkDetector {
+
+ @Override
+ protected List<IHyperlink> detectHyperlinks(ITextViewer textViewer, String content, int index, int contentOffset) {
+ List<IHyperlink> result = new ArrayList<IHyperlink>();
+ TaskRepository currentRepository = getTaskRepository(textViewer);
+ final IHyperlink[] currentRepositoryLinks = detectHyperlinks(currentRepository, content, index, contentOffset);
+ if (currentRepositoryLinks != null && currentRepositoryLinks.length > 0) {
+ result.addAll(Arrays.asList(currentRepositoryLinks));
+ Set<Region> currentRepositoryRegions = new HashSet<Region>();
+ for (IHyperlink link : currentRepositoryLinks) {
+ currentRepositoryRegions.add(getRegion(link));
+ }
+ List<TaskRepository> otherRepositories = getTaskRepositories(textViewer);
+ otherRepositories.remove(currentRepository);
+ for (final TaskRepository repository : otherRepositories) {
+ final IHyperlink[] links = detectHyperlinks(repository, content, index, contentOffset);
+ if (links != null) {
+ for (IHyperlink link : links) {
+ // prevent highlighting text that is not already a link for the current repository
+ if (currentRepositoryRegions.contains(getRegion(link))) {
+ result.add(link);
+ }
+ }
+ }
+ }
+ }
+ if (result.isEmpty()) {
+ return null;
+ }
+ return result;
+ }
+
+ protected Region getRegion(IHyperlink link) {
+ if (link.getHyperlinkRegion() instanceof Region) {
+ return (Region) link.getHyperlinkRegion();
+ } else {
+ return new Region(link.getHyperlinkRegion().getOffset(), link.getHyperlinkRegion().getLength());
+ }
+ }
+
+ @Override
+ protected List<TaskRepository> getTaskRepositories(ITextViewer textViewer) {
+ return TasksUi.getRepositoryManager().getAllRepositories();
+ }
+
+}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskHyperlinkDetector.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskHyperlinkDetector.java
index 849a3459e..d971b5843 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskHyperlinkDetector.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskHyperlinkDetector.java
@@ -35,32 +35,36 @@ public class TaskHyperlinkDetector extends AbstractTaskHyperlinkDetector {
@Override
protected List<IHyperlink> detectHyperlinks(ITextViewer textViewer, final String content, final int index,
final int contentOffset) {
- List<IHyperlink> result = null;
+ List<IHyperlink> result = new ArrayList<IHyperlink>();
for (final TaskRepository repository : getTaskRepositories(textViewer)) {
- final AbstractRepositoryConnectorUi connectorUi = getConnectorUi(repository);
- if (connectorUi == null) {
- continue;
+ final IHyperlink[] links = detectHyperlinks(repository, content, index, contentOffset);
+ if (links != null && links.length > 0) {
+ result.addAll(Arrays.asList(links));
}
- final IHyperlink[][] links = new IHyperlink[1][];
- SafeRunnable.run(new ISafeRunnable() {
-
- public void handleException(Throwable exception) {
- }
+ }
+ if (result.isEmpty()) {
+ return null;
+ }
+ return result;
+ }
- public void run() throws Exception {
- final ITask task = (ITask) getAdapter(ITask.class);
- links[0] = connectorUi.findHyperlinks(repository, task, content, index, contentOffset);
- }
+ protected IHyperlink[] detectHyperlinks(final TaskRepository repository, final String content, final int index,
+ final int contentOffset) {
+ final AbstractRepositoryConnectorUi connectorUi = getConnectorUi(repository);
+ if (connectorUi == null) {
+ return null;
+ }
+ final IHyperlink[][] links = new IHyperlink[1][];
+ SafeRunnable.run(new ISafeRunnable() {
+ public void handleException(Throwable exception) {
+ }
- });
- if (links[0] != null && links[0].length > 0) {
- if (result == null) {
- result = new ArrayList<IHyperlink>();
- }
- result.addAll(Arrays.asList(links[0]));
+ public void run() throws Exception {
+ final ITask task = (ITask) getAdapter(ITask.class);
+ links[0] = connectorUi.findHyperlinks(repository, task, content, index, contentOffset);
}
- }
- return result;
+ });
+ return links[0];
}
protected AbstractRepositoryConnectorUi getConnectorUi(TaskRepository repository) {

Back to the top