Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 298364 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/mylyn/tasks/tests/ui/editor/TaskUrlHyperlinkDetectorTest.java (+67 lines)
Lines 14-27 Link Here
14
14
15
import junit.framework.TestCase;
15
import junit.framework.TestCase;
16
16
17
import org.eclipse.core.runtime.IAdaptable;
17
import org.eclipse.jface.text.Document;
18
import org.eclipse.jface.text.Document;
18
import org.eclipse.jface.text.IDocument;
19
import org.eclipse.jface.text.IDocument;
19
import org.eclipse.jface.text.Region;
20
import org.eclipse.jface.text.Region;
20
import org.eclipse.jface.text.TextViewer;
21
import org.eclipse.jface.text.TextViewer;
21
import org.eclipse.jface.text.hyperlink.AbstractHyperlinkDetector;
22
import org.eclipse.jface.text.hyperlink.AbstractHyperlinkDetector;
22
import org.eclipse.jface.text.hyperlink.IHyperlink;
23
import org.eclipse.jface.text.hyperlink.IHyperlink;
24
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
23
import org.eclipse.mylyn.internal.tasks.ui.editors.TaskUrlHyperlink;
25
import org.eclipse.mylyn.internal.tasks.ui.editors.TaskUrlHyperlink;
24
import org.eclipse.mylyn.internal.tasks.ui.editors.TaskUrlHyperlinkDetector;
26
import org.eclipse.mylyn.internal.tasks.ui.editors.TaskUrlHyperlinkDetector;
27
import org.eclipse.mylyn.tasks.core.TaskRepository;
28
import org.eclipse.mylyn.tasks.tests.TaskTestUtil;
29
import org.eclipse.mylyn.tasks.tests.connector.MockRepositoryConnector;
30
import org.eclipse.mylyn.tasks.ui.TasksUi;
25
31
26
/**
32
/**
27
 * @author Steffen Pingel
33
 * @author Steffen Pingel
Lines 29-36 Link Here
29
 */
35
 */
30
public class TaskUrlHyperlinkDetectorTest extends TestCase {
36
public class TaskUrlHyperlinkDetectorTest extends TestCase {
31
37
38
	private TaskRepository repository;
39
40
	@Override
41
	protected void setUp() throws Exception {
42
		repository = TaskTestUtil.createMockRepository();
43
	}
44
32
	protected IHyperlink[] detect(final String text, int start, int length) {
45
	protected IHyperlink[] detect(final String text, int start, int length) {
33
		AbstractHyperlinkDetector detector = new TaskUrlHyperlinkDetector();
46
		AbstractHyperlinkDetector detector = new TaskUrlHyperlinkDetector();
47
		detector.setContext(new IAdaptable() {
48
			@SuppressWarnings("rawtypes")
49
			public Object getAdapter(Class adapter) {
50
				return repository;
51
			}
52
		});
34
		return detector.detectHyperlinks(new TextViewer() {
53
		return detector.detectHyperlinks(new TextViewer() {
35
			@Override
54
			@Override
36
			public IDocument getDocument() {
55
			public IDocument getDocument() {
Lines 123-126 Link Here
123
		assertEquals(new Region(0, 22), hyperlinks[0].getHyperlinkRegion());
142
		assertEquals(new Region(0, 22), hyperlinks[0].getHyperlinkRegion());
124
	}
143
	}
125
144
145
	public void testDetectionNoRepositoryRegularUrl() {
146
		repository = null;
147
		IHyperlink[] hyperlinks = detect("aa http://www.eclipse.org test", 4, 0);
148
		assertNull(hyperlinks);
149
	}
150
151
	/**
152
	 * Tests hyperlink detector in mode outside of task editor.
153
	 */
154
	public void testDetectionNoRepositoryRepositoryUrl() {
155
		repository = null;
156
		TaskRepository repository1 = new TaskRepository(MockRepositoryConnector.REPOSITORY_KIND,
157
				"http://repo1.test/foo");
158
		try {
159
			TasksUi.getRepositoryManager().addRepository(repository1);
160
161
			String text = "aa http://repo1.test/foo http://www.eclipse.org test";
162
			IHyperlink[] hyperlinks = detect(text, 0, text.length());
163
			assertNotNull(hyperlinks);
164
			assertEquals(1, hyperlinks.length);
165
			assertEquals(new Region(3, 21), hyperlinks[0].getHyperlinkRegion());
166
		} finally {
167
			TasksUiPlugin.getRepositoryManager().removeRepository(repository1);
168
		}
169
	}
170
171
	/**
172
	 * Tests hyperlink detector in mode outside of task editor with multiple task URLs.
173
	 */
174
	public void testDetectionNoRepositoryMultipleRepositoryUrls() {
175
		repository = null;
176
		TaskRepository repository1 = new TaskRepository(MockRepositoryConnector.REPOSITORY_KIND,
177
				"http://repo1.test/foo");
178
		TaskRepository repository2 = new TaskRepository(MockRepositoryConnector.REPOSITORY_KIND, "http://repo2.test");
179
		try {
180
			TasksUi.getRepositoryManager().addRepository(repository1);
181
			TasksUi.getRepositoryManager().addRepository(repository2);
182
183
			String text = "aa http://repo2.test http://repo1.test/foo http://repo1.test/bar http://www.eclipse.org test";
184
			IHyperlink[] hyperlinks = detect(text, 0, text.length());
185
			assertNotNull(hyperlinks);
186
			assertEquals(2, hyperlinks.length);
187
		} finally {
188
			TasksUiPlugin.getRepositoryManager().removeRepository(repository1);
189
			TasksUiPlugin.getRepositoryManager().removeRepository(repository2);
190
		}
191
	}
192
126
}
193
}
(-)src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyTaskDetailsAction.java (-1 / +18 lines)
Lines 29-35 Link Here
29
	public static final String ID = "org.eclipse.mylyn.tasklist.actions.copy"; //$NON-NLS-1$
29
	public static final String ID = "org.eclipse.mylyn.tasklist.actions.copy"; //$NON-NLS-1$
30
30
31
	public enum Mode {
31
	public enum Mode {
32
		KEY, URL, SUMMARY_URL
32
		KEY, URL, SUMMARY, SUMMARY_URL
33
	}
33
	}
34
34
35
	private Mode mode;
35
	private Mode mode;
Lines 53-58 Link Here
53
		case URL:
53
		case URL:
54
			setText(Messages.CopyTaskDetailsAction_Url_Menu_Label);
54
			setText(Messages.CopyTaskDetailsAction_Url_Menu_Label);
55
			break;
55
			break;
56
		case SUMMARY:
57
			setText("Summary");
58
			break;
56
		case SUMMARY_URL:
59
		case SUMMARY_URL:
57
			setText(Messages.CopyTaskDetailsAction_Summary_and_Url_Menu_Label);
60
			setText(Messages.CopyTaskDetailsAction_Summary_and_Url_Menu_Label);
58
			break;
61
			break;
Lines 92-97 Link Here
92
				}
95
				}
93
			}
96
			}
94
			break;
97
			break;
98
		case SUMMARY:
99
			if (object instanceof ITask) {
100
				ITask task = (ITask) object;
101
				if (task.getTaskKey() != null) {
102
					sb.append(TasksUiInternal.getTaskPrefix(task.getConnectorKind()));
103
					sb.append(task.getTaskKey());
104
					sb.append(": "); //$NON-NLS-1$
105
				}
106
				sb.append(task.getSummary());
107
			} else if (object instanceof IRepositoryElement) {
108
				IRepositoryElement element = (IRepositoryElement) object;
109
				sb.append(element.getSummary());
110
			}
111
			break;
95
		case SUMMARY_URL:
112
		case SUMMARY_URL:
96
			if (object instanceof ITask) {
113
			if (object instanceof ITask) {
97
				ITask task = (ITask) object;
114
				ITask task = (ITask) object;
(-)src/org/eclipse/mylyn/internal/tasks/ui/editors/Messages.java (+2 lines)
Lines 262-265 Link Here
262
	public static String TaskEditorExtensionSettingsContribution_Plain_Text;
262
	public static String TaskEditorExtensionSettingsContribution_Plain_Text;
263
263
264
	public static String TaskEditorExtensionSettingsContribution_Select_the_capabilities_of_the_task_editor;
264
	public static String TaskEditorExtensionSettingsContribution_Select_the_capabilities_of_the_task_editor;
265
266
	public static String TaskUrlHyperlink_Open_URL_in_Task_Editor;
265
}
267
}
(-)src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskUrlHyperlink.java (-1 / +17 lines)
Lines 14-27 Link Here
14
import org.eclipse.jface.text.IRegion;
14
import org.eclipse.jface.text.IRegion;
15
import org.eclipse.jface.text.hyperlink.URLHyperlink;
15
import org.eclipse.jface.text.hyperlink.URLHyperlink;
16
import org.eclipse.mylyn.tasks.ui.TasksUiUtil;
16
import org.eclipse.mylyn.tasks.ui.TasksUiUtil;
17
import org.eclipse.osgi.util.NLS;
17
18
18
/**
19
/**
19
 * @author Rob Elves
20
 * @author Rob Elves
20
 */
21
 */
21
public class TaskUrlHyperlink extends URLHyperlink {
22
public class TaskUrlHyperlink extends URLHyperlink {
22
23
23
	public TaskUrlHyperlink(IRegion region, String urlString) {
24
	private final String hyperlinkText;
25
26
	public TaskUrlHyperlink(IRegion region, String urlString, String hyperlinkText) {
24
		super(region, urlString);
27
		super(region, urlString);
28
		this.hyperlinkText = hyperlinkText;
29
	}
30
31
	public TaskUrlHyperlink(IRegion region, String urlString) {
32
		this(region, urlString, null);
25
	}
33
	}
26
34
27
	@Override
35
	@Override
Lines 29-32 Link Here
29
		TasksUiUtil.openTask(getURLString());
37
		TasksUiUtil.openTask(getURLString());
30
	}
38
	}
31
39
40
	@Override
41
	public String getHyperlinkText() {
42
		if (hyperlinkText != null) {
43
			return hyperlinkText;
44
		}
45
		return NLS.bind(Messages.TaskUrlHyperlink_Open_URL_in_Task_Editor, getURLString());
46
	}
47
32
}
48
}
(-)src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskUrlHyperlinkDetector.java (-6 / +22 lines)
Lines 23-28 Link Here
23
import org.eclipse.jface.text.ITextViewer;
23
import org.eclipse.jface.text.ITextViewer;
24
import org.eclipse.jface.text.Region;
24
import org.eclipse.jface.text.Region;
25
import org.eclipse.jface.text.hyperlink.IHyperlink;
25
import org.eclipse.jface.text.hyperlink.IHyperlink;
26
import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
27
import org.eclipse.mylyn.tasks.core.TaskRepository;
26
import org.eclipse.mylyn.tasks.ui.AbstractTaskHyperlinkDetector;
28
import org.eclipse.mylyn.tasks.ui.AbstractTaskHyperlinkDetector;
27
29
28
/**
30
/**
Lines 37-42 Link Here
37
	// so we do the same here
39
	// so we do the same here
38
	private static final Pattern URL_PATTERN = Pattern.compile("([a-zA-Z][a-zA-Z+.-]{0,10}://[a-zA-Z0-9%._~!$&?#'()*+,;:@/=-]*[a-zA-Z0-9%_~!$&?#'(*+;:@/=-])"); //$NON-NLS-1$
40
	private static final Pattern URL_PATTERN = Pattern.compile("([a-zA-Z][a-zA-Z+.-]{0,10}://[a-zA-Z0-9%._~!$&?#'()*+,;:@/=-]*[a-zA-Z0-9%_~!$&?#'(*+;:@/=-])"); //$NON-NLS-1$
39
41
42
	public TaskUrlHyperlinkDetector() {
43
	}
44
40
	@Override
45
	@Override
41
	protected List<IHyperlink> detectHyperlinks(ITextViewer textViewer, String content, int indexInContent,
46
	protected List<IHyperlink> detectHyperlinks(ITextViewer textViewer, String content, int indexInContent,
42
			int contentOffset) {
47
			int contentOffset) {
Lines 44-59 Link Here
44
		Matcher m = URL_PATTERN.matcher(content);
49
		Matcher m = URL_PATTERN.matcher(content);
45
		while (m.find()) {
50
		while (m.find()) {
46
			if (isInRegion(indexInContent, m)) {
51
			if (isInRegion(indexInContent, m)) {
47
				try {
52
				String urlString = m.group(1);
48
					String urlString = m.group(1);
53
				TaskUrlHyperlink link = null;
49
					new URL(urlString);
54
				if (getAdapter(TaskRepository.class) != null) {
55
					try {
56
						new URL(urlString);
57
						link = new TaskUrlHyperlink(determineRegion(contentOffset, m), urlString);
58
					} catch (MalformedURLException e) {
59
						// ignore
60
					}
61
62
				} else {
63
					if (TasksUiInternal.isTaskUrl(urlString)) {
64
						link = new TaskUrlHyperlink(determineRegion(contentOffset, m), urlString);
65
					}
66
				}
50
67
68
				if (link != null) {
51
					if (links == null) {
69
					if (links == null) {
52
						links = new ArrayList<IHyperlink>();
70
						links = new ArrayList<IHyperlink>();
53
					}
71
					}
54
					links.add(new TaskUrlHyperlink(determineRegion(contentOffset, m), urlString));
72
					links.add(link);
55
				} catch (MalformedURLException e) {
56
					// ignore
57
				}
73
				}
58
			}
74
			}
59
		}
75
		}
(-)src/org/eclipse/mylyn/internal/tasks/ui/editors/messages.properties (+1 lines)
Lines 148-150 Link Here
148
TaskEditorExtensionSettingsContribution_Editor=Task Editor Settings
148
TaskEditorExtensionSettingsContribution_Editor=Task Editor Settings
149
TaskEditorExtensionSettingsContribution_Plain_Text=Plain Text
149
TaskEditorExtensionSettingsContribution_Plain_Text=Plain Text
150
TaskEditorExtensionSettingsContribution_Select_the_capabilities_of_the_task_editor=Select the capabilities of the task editor
150
TaskEditorExtensionSettingsContribution_Select_the_capabilities_of_the_task_editor=Select the capabilities of the task editor
151
TaskUrlHyperlink_Open_URL_in_Task_Editor=Open ''{0}'' in Task Editor
(-)src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiInternal.java (+11 lines)
Lines 1029-1034 Link Here
1029
		return null;
1029
		return null;
1030
	}
1030
	}
1031
1031
1032
	public static boolean isTaskUrl(String taskUrl) {
1033
		Assert.isNotNull(taskUrl);
1034
		List<TaskRepository> repositories = TasksUiPlugin.getRepositoryManager().getAllRepositories();
1035
		for (TaskRepository repository : repositories) {
1036
			if (taskUrl.startsWith(repository.getUrl())) {
1037
				return true;
1038
			}
1039
		}
1040
		return false;
1041
	}
1042
1032
	/**
1043
	/**
1033
	 * Cleans text for use as the text of an action to ensure that it is displayed properly.
1044
	 * Cleans text for use as the text of an action to ensure that it is displayed properly.
1034
	 * 
1045
	 * 

Return to bug 298364