View | Details | Raw Unified | Return to bug 164221 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/mylyn/bugzilla/tests/ui/BugzillaTaskHyperlinkDetectorTest.java (+94 lines)
Lines 23-28 Link Here
23
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
23
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
24
import org.eclipse.mylyn.internal.tasks.ui.editors.TaskHyperlinkDetector;
24
import org.eclipse.mylyn.internal.tasks.ui.editors.TaskHyperlinkDetector;
25
import org.eclipse.mylyn.tasks.core.TaskRepository;
25
import org.eclipse.mylyn.tasks.core.TaskRepository;
26
import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
26
import org.eclipse.mylyn.tasks.ui.TaskHyperlink;
27
import org.eclipse.mylyn.tasks.ui.TaskHyperlink;
27
import org.eclipse.swt.SWT;
28
import org.eclipse.swt.SWT;
28
import org.eclipse.swt.widgets.Shell;
29
import org.eclipse.swt.widgets.Shell;
Lines 37-42 Link Here
37
38
38
	private static final String DUPLICATE = "duplicate of " + DUPLICATE_NUMBER;
39
	private static final String DUPLICATE = "duplicate of " + DUPLICATE_NUMBER;
39
40
41
	private static final String ATTACHMENT_NUMBER = "445566";
42
43
	private static final String ATTACHMENT_OLD = "Created an attachment (id=" + ATTACHMENT_NUMBER + ")";
44
45
	private static final String ATTACHMENT_NEW = "Created attachment" + ATTACHMENT_NUMBER;
46
40
	private final String TASK_FORMAT_1 = "task#1";
47
	private final String TASK_FORMAT_1 = "task#1";
41
48
42
	private final String TASK_FORMAT_2 = "task# 1";
49
	private final String TASK_FORMAT_2 = "task# 1";
Lines 55-60 Link Here
55
62
56
	private final String BUG_FORMAT_1_2 = "bug# 2";
63
	private final String BUG_FORMAT_1_2 = "bug# 2";
57
64
65
	private final String TASK_FORMAT_1_COMMENT_1 = "task#123c#44556677";
66
67
	private final String TASK_FORMAT_2_COMMENT_1 = "task# 1c#44556677";
68
69
	private final String TASK_FORMAT_3_COMMENT_1 = "task1c#44556677";
70
71
	private final String TASK_FORMAT_4_COMMENT_1 = "task #1c#44556677";
72
73
	private final String BUG_FORMAT_1_COMMENT_1 = "bug# 1c#44556677";
74
75
	private final String BUG_FORMAT_2_COMMENT_1 = "bug # 1c#44556677";
76
77
	private final String BUG_FORMAT_3_COMMENT_1 = "bug1c#44556677";
78
79
	private final String BUG_FORMAT_4_COMMENT_1 = "bug #1c#44556677";
80
81
	private final String TASK_FORMAT_1_COMMENT_2 = "task#123 comment #44556677";
82
83
	private final String TASK_FORMAT_2_COMMENT_2 = "task# 1 comment #44556677";
84
85
	private final String TASK_FORMAT_3_COMMENT_2 = "task1 comment #44556677";
86
87
	private final String TASK_FORMAT_4_COMMENT_2 = "task #1 comment #44556677";
88
89
	private final String BUG_FORMAT_1_COMMENT_2 = "bug# 1 comment #44556677";
90
91
	private final String BUG_FORMAT_2_COMMENT_2 = "bug # 1 comment #44556677";
92
93
	private final String BUG_FORMAT_3_COMMENT_2 = "bug1 comment #44556677";
94
95
	private final String BUG_FORMAT_4_COMMENT_2 = "bug #1 comment #44556677";
96
58
	//private BugzillaTaskHyperlinkDetector detector = new BugzillaTaskHyperlinkDetector();
97
	//private BugzillaTaskHyperlinkDetector detector = new BugzillaTaskHyperlinkDetector();
59
	private TaskHyperlinkDetector detector;
98
	private TaskHyperlinkDetector detector;
60
99
Lines 66-71 Link Here
66
105
67
	private String[] formats;
106
	private String[] formats;
68
107
108
	private String[] commentFormats;
109
69
	private TaskRepositoryManager repositoryManager;
110
	private TaskRepositoryManager repositoryManager;
70
111
71
	private Shell shell;
112
	private Shell shell;
Lines 97-102 Link Here
97
138
98
		formats = new String[] { TASK_FORMAT_1, TASK_FORMAT_2, TASK_FORMAT_3, TASK_FORMAT_4, BUG_FORMAT_1,
139
		formats = new String[] { TASK_FORMAT_1, TASK_FORMAT_2, TASK_FORMAT_3, TASK_FORMAT_4, BUG_FORMAT_1,
99
				BUG_FORMAT_2, BUG_FORMAT_3, BUG_FORMAT_4 };
140
				BUG_FORMAT_2, BUG_FORMAT_3, BUG_FORMAT_4 };
141
		commentFormats = new String[] { TASK_FORMAT_1_COMMENT_1, TASK_FORMAT_2_COMMENT_1, TASK_FORMAT_3_COMMENT_1,
142
				TASK_FORMAT_4_COMMENT_1, BUG_FORMAT_1_COMMENT_1, BUG_FORMAT_2_COMMENT_1, BUG_FORMAT_3_COMMENT_1,
143
				BUG_FORMAT_4_COMMENT_1, TASK_FORMAT_1_COMMENT_2, TASK_FORMAT_2_COMMENT_2, TASK_FORMAT_3_COMMENT_2,
144
				TASK_FORMAT_4_COMMENT_2, BUG_FORMAT_1_COMMENT_2, BUG_FORMAT_2_COMMENT_2, BUG_FORMAT_3_COMMENT_2,
145
				BUG_FORMAT_4_COMMENT_2 };
100
	}
146
	}
101
147
102
	private void setRepository(final TaskRepository repository) {
148
	private void setRepository(final TaskRepository repository) {
Lines 122-127 Link Here
122
			assertNotNull(links);
168
			assertNotNull(links);
123
			assertEquals(1, links.length);
169
			assertEquals(1, links.length);
124
			assertEquals(testString.indexOf(format), links[0].getHyperlinkRegion().getOffset());
170
			assertEquals(testString.indexOf(format), links[0].getHyperlinkRegion().getOffset());
171
			Object comment = ((TaskHyperlink) links[0]).getSelection();
172
			assertNull(comment);
125
		}
173
		}
126
	}
174
	}
127
175
Lines 134-139 Link Here
134
			assertNotNull(links);
182
			assertNotNull(links);
135
			assertEquals(1, links.length);
183
			assertEquals(1, links.length);
136
			assertEquals(testString.indexOf(format), links[0].getHyperlinkRegion().getOffset());
184
			assertEquals(testString.indexOf(format), links[0].getHyperlinkRegion().getOffset());
185
			Object comment = ((TaskHyperlink) links[0]).getSelection();
186
			assertNull(comment);
137
		}
187
		}
138
	}
188
	}
139
189
Lines 146-151 Link Here
146
			assertNotNull(links);
196
			assertNotNull(links);
147
			assertEquals(1, links.length);
197
			assertEquals(1, links.length);
148
			assertEquals(testString.indexOf(format), links[0].getHyperlinkRegion().getOffset());
198
			assertEquals(testString.indexOf(format), links[0].getHyperlinkRegion().getOffset());
199
			Object comment = ((TaskHyperlink) links[0]).getSelection();
200
			assertNull(comment);
149
		}
201
		}
150
	}
202
	}
151
203
Lines 158-163 Link Here
158
			assertNotNull(links);
210
			assertNotNull(links);
159
			assertEquals(1, links.length);
211
			assertEquals(1, links.length);
160
			assertEquals(testString.indexOf(format), links[0].getHyperlinkRegion().getOffset());
212
			assertEquals(testString.indexOf(format), links[0].getHyperlinkRegion().getOffset());
213
			Object comment = ((TaskHyperlink) links[0]).getSelection();
214
			assertNull(comment);
161
		}
215
		}
162
	}
216
	}
163
217
Lines 171-176 Link Here
171
			assertNotNull(links);
225
			assertNotNull(links);
172
			assertEquals(1, links.length);
226
			assertEquals(1, links.length);
173
			assertEquals(i, links[0].getHyperlinkRegion().getOffset());
227
			assertEquals(i, links[0].getHyperlinkRegion().getOffset());
228
			Object comment = ((TaskHyperlink) links[0]).getSelection();
229
			assertNull(comment);
174
		}
230
		}
175
	}
231
	}
176
232
Lines 184-189 Link Here
184
			assertNotNull(links);
240
			assertNotNull(links);
185
			assertEquals(1, links.length);
241
			assertEquals(1, links.length);
186
			assertEquals(testString.indexOf(format), links[0].getHyperlinkRegion().getOffset());
242
			assertEquals(testString.indexOf(format), links[0].getHyperlinkRegion().getOffset());
243
			Object comment = ((TaskHyperlink) links[0]).getSelection();
244
			assertNull(comment);
187
		}
245
		}
188
	}
246
	}
189
247
Lines 322-325 Link Here
322
		assertEquals("345", ((TaskHyperlink) links[0]).getTaskId());
380
		assertEquals("345", ((TaskHyperlink) links[0]).getTaskId());
323
	}
381
	}
324
382
383
	public void testAttachmentOld() {
384
		String testString = ATTACHMENT_OLD;
385
		viewer.setDocument(new Document(testString));
386
		int i = testString.indexOf(ATTACHMENT_NUMBER);
387
		Region region = new Region(0, testString.length());
388
		IHyperlink[] links = detector.detectHyperlinks(viewer, region, false);
389
		assertNotNull(links);
390
		assertEquals(1, links.length);
391
		assertEquals(testString.indexOf(ATTACHMENT_NUMBER), links[0].getHyperlinkRegion().getOffset());
392
	}
393
394
	public void testAttachmentNew() {
395
		String testString = ATTACHMENT_NEW;
396
		viewer.setDocument(new Document(testString));
397
		int i = testString.indexOf(ATTACHMENT_NUMBER);
398
		Region region = new Region(0, testString.length());
399
		IHyperlink[] links = detector.detectHyperlinks(viewer, region, false);
400
		assertNotNull(links);
401
		assertEquals(1, links.length);
402
		assertEquals(testString.indexOf(ATTACHMENT_NUMBER), links[0].getHyperlinkRegion().getOffset());
403
	}
404
405
	public void testBugWithComment() {
406
		for (String format : commentFormats) {
407
			String testString = "First line\n:" + format + " is at the beginning";
408
			viewer.setDocument(new Document(testString));
409
			Region region = new Region(0, testString.length());
410
			IHyperlink[] links = detector.detectHyperlinks(viewer, region, false);
411
			assertNotNull(links);
412
			assertEquals(1, links.length);
413
			assertEquals(testString.indexOf(format), links[0].getHyperlinkRegion().getOffset());
414
			Object comment = ((TaskHyperlink) links[0]).getSelection();
415
			assertNotNull(comment);
416
			assertEquals(TaskAttribute.PREFIX_COMMENT + "44556677", comment);
417
		}
418
	}
325
}
419
}
(-)src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaConnectorUi.java (-4 / +25 lines)
Lines 38-43 Link Here
38
import org.eclipse.mylyn.tasks.core.ITaskMapping;
38
import org.eclipse.mylyn.tasks.core.ITaskMapping;
39
import org.eclipse.mylyn.tasks.core.TaskRepository;
39
import org.eclipse.mylyn.tasks.core.TaskRepository;
40
import org.eclipse.mylyn.tasks.core.data.TaskAttachmentModel;
40
import org.eclipse.mylyn.tasks.core.data.TaskAttachmentModel;
41
import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
41
import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi;
42
import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi;
42
import org.eclipse.mylyn.tasks.ui.LegendElement;
43
import org.eclipse.mylyn.tasks.ui.LegendElement;
43
import org.eclipse.mylyn.tasks.ui.TaskHyperlink;
44
import org.eclipse.mylyn.tasks.ui.TaskHyperlink;
Lines 52-60 Link Here
52
53
53
	private static final int TASK_NUM_GROUP = 5;
54
	private static final int TASK_NUM_GROUP = 5;
54
55
55
	private static final int ATTACHMENT_NUM_GROUP = 6;
56
	private static final int COMMENT_NUM_GROUP = 10;
56
57
57
	private static final String regexp = "(?:(duplicate of|(\\W||^)+bug|(\\W|^)+task)( ?#? ?)(\\d+))|(?:Created an attachment\\s*\\(id=(\\d+)\\))"; //$NON-NLS-1$
58
	private static final int ATTACHMENT_NUM_GROUP = 14;
59
60
//	private static final String regexp = "(?:(duplicate of|(\\W||^)+bug|(\\W|^)+task)( ?#? ?)(\\d+)((\\s)*(comment|c)(\\s#|#|#\\s|\\s|)(\\s\\d+|\\d+))?)|(?:Created an attachment\\s*\\(id=(\\d+)\\))"; //$NON-NLS-1$
61
62
	private static final String regexp = "(?:(duplicate of|(\\W||^)+bug|(\\W|^)+task)( ?#? ?)(\\d+)((\\s)*(comment|c)(\\s#|#|#\\s|\\s|)(\\s\\d+|\\d+))?)|(?:(Created (an )?attachment\\s*(\\(id=)?(\\d+)))"; //$NON-NLS-1$
63
//
64
//	private static final String regexp = "(?:(duplicate of|(\\W||^)+bug|(\\W|^)+task)( ?#? ?)(\\d+))|(?:(Created (an )?attachment\\s*(\\(id=)?(\\d+)))"; //$NON-NLS-1$
65
//
66
//
67
//	private static final String regexp = "(duplicate of|bug|task)( ?#? ?)(\\d+)"; //$NON-NLS-1$
68
//	private static final String regexp = "(duplicate of|bug|task)( ?#? ?)(\\d+)((\\s)*(comment|c)(\\s#|#|#\\s|\\s|)(\\s\\d+|\\d+))?"; //$NON-NLS-1$
58
69
59
	private static final Pattern PATTERN = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE);
70
	private static final Pattern PATTERN = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE);
60
71
Lines 192-197 Link Here
192
203
193
		int start = -1;
204
		int start = -1;
194
205
206
		int a = m.groupCount();
207
195
		if (m.group().startsWith("duplicate")) { //$NON-NLS-1$
208
		if (m.group().startsWith("duplicate")) { //$NON-NLS-1$
196
			start = m.start() + m.group().indexOf(m.group(TASK_NUM_GROUP));
209
			start = m.start() + m.group().indexOf(m.group(TASK_NUM_GROUP));
197
		} else {
210
		} else {
Lines 209-225 Link Here
209
		try {
222
		try {
210
			start += regionOffset;
223
			start += regionOffset;
211
			end += regionOffset;
224
			end += regionOffset;
212
			IRegion sregion = new Region(start, end - start);
213
225
214
			String bugId = m.group(TASK_NUM_GROUP);
226
			String bugId = m.group(TASK_NUM_GROUP);
215
			if (bugId == null) {
227
			if (bugId == null) {
216
				String attachmentId = m.group(ATTACHMENT_NUM_GROUP);
228
				String attachmentId = m.group(ATTACHMENT_NUM_GROUP);
217
				if (attachmentId != null) {
229
				if (attachmentId != null) {
230
					start = start + m.group().indexOf(m.group(ATTACHMENT_NUM_GROUP));
231
232
					IRegion sregion = new Region(start, end - start);
218
					return new TaskAttachmentHyperlink(sregion, repository, attachmentId);
233
					return new TaskAttachmentHyperlink(sregion, repository, attachmentId);
219
				}
234
				}
220
			} else {
235
			} else {
221
				bugId.trim();
236
				bugId.trim();
222
				return new TaskHyperlink(sregion, repository, bugId);
237
				IRegion sregion = new Region(start, end - start);
238
				TaskHyperlink taskHyperLink = new TaskHyperlink(sregion, repository, bugId);
239
				String commentId = m.group(COMMENT_NUM_GROUP);
240
				if (commentId != null) {
241
					taskHyperLink.setSelection(TaskAttribute.PREFIX_COMMENT + commentId);
242
				}
243
				return taskHyperLink;
223
			}
244
			}
224
245
225
		} catch (NumberFormatException e) {
246
		} catch (NumberFormatException e) {

Return to bug 164221