diff options
2 files changed, 119 insertions, 4 deletions
diff --git a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/ui/BugzillaTaskHyperlinkDetectorTest.java b/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/ui/BugzillaTaskHyperlinkDetectorTest.java index 3af4571c7..918237e3d 100644 --- a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/ui/BugzillaTaskHyperlinkDetectorTest.java +++ b/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/ui/BugzillaTaskHyperlinkDetectorTest.java @@ -23,6 +23,7 @@ import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryManager; import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; import org.eclipse.mylyn.internal.tasks.ui.editors.TaskHyperlinkDetector; import org.eclipse.mylyn.tasks.core.TaskRepository; +import org.eclipse.mylyn.tasks.core.data.TaskAttribute; import org.eclipse.mylyn.tasks.ui.TaskHyperlink; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Shell; @@ -37,6 +38,12 @@ public class BugzillaTaskHyperlinkDetectorTest extends TestCase { private static final String DUPLICATE = "duplicate of " + DUPLICATE_NUMBER; + private static final String ATTACHMENT_NUMBER = "445566"; + + private static final String ATTACHMENT_OLD = "Created an attachment (id=" + ATTACHMENT_NUMBER + ")"; + + private static final String ATTACHMENT_NEW = "Created attachment" + ATTACHMENT_NUMBER; + private final String TASK_FORMAT_1 = "task#1"; private final String TASK_FORMAT_2 = "task# 1"; @@ -55,6 +62,38 @@ public class BugzillaTaskHyperlinkDetectorTest extends TestCase { private final String BUG_FORMAT_1_2 = "bug# 2"; + private final String TASK_FORMAT_1_COMMENT_1 = "task#123c#44556677"; + + private final String TASK_FORMAT_2_COMMENT_1 = "task# 1c#44556677"; + + private final String TASK_FORMAT_3_COMMENT_1 = "task1c#44556677"; + + private final String TASK_FORMAT_4_COMMENT_1 = "task #1c#44556677"; + + private final String BUG_FORMAT_1_COMMENT_1 = "bug# 1c#44556677"; + + private final String BUG_FORMAT_2_COMMENT_1 = "bug # 1c#44556677"; + + private final String BUG_FORMAT_3_COMMENT_1 = "bug1c#44556677"; + + private final String BUG_FORMAT_4_COMMENT_1 = "bug #1c#44556677"; + + private final String TASK_FORMAT_1_COMMENT_2 = "task#123 comment #44556677"; + + private final String TASK_FORMAT_2_COMMENT_2 = "task# 1 comment #44556677"; + + private final String TASK_FORMAT_3_COMMENT_2 = "task1 comment #44556677"; + + private final String TASK_FORMAT_4_COMMENT_2 = "task #1 comment #44556677"; + + private final String BUG_FORMAT_1_COMMENT_2 = "bug# 1 comment #44556677"; + + private final String BUG_FORMAT_2_COMMENT_2 = "bug # 1 comment #44556677"; + + private final String BUG_FORMAT_3_COMMENT_2 = "bug1 comment #44556677"; + + private final String BUG_FORMAT_4_COMMENT_2 = "bug #1 comment #44556677"; + //private BugzillaTaskHyperlinkDetector detector = new BugzillaTaskHyperlinkDetector(); private TaskHyperlinkDetector detector; @@ -66,6 +105,8 @@ public class BugzillaTaskHyperlinkDetectorTest extends TestCase { private String[] formats; + private String[] commentFormats; + private TaskRepositoryManager repositoryManager; private Shell shell; @@ -97,6 +138,11 @@ public class BugzillaTaskHyperlinkDetectorTest extends TestCase { formats = new String[] { TASK_FORMAT_1, TASK_FORMAT_2, TASK_FORMAT_3, TASK_FORMAT_4, BUG_FORMAT_1, BUG_FORMAT_2, BUG_FORMAT_3, BUG_FORMAT_4 }; + commentFormats = new String[] { TASK_FORMAT_1_COMMENT_1, TASK_FORMAT_2_COMMENT_1, TASK_FORMAT_3_COMMENT_1, + TASK_FORMAT_4_COMMENT_1, BUG_FORMAT_1_COMMENT_1, BUG_FORMAT_2_COMMENT_1, BUG_FORMAT_3_COMMENT_1, + BUG_FORMAT_4_COMMENT_1, TASK_FORMAT_1_COMMENT_2, TASK_FORMAT_2_COMMENT_2, TASK_FORMAT_3_COMMENT_2, + TASK_FORMAT_4_COMMENT_2, BUG_FORMAT_1_COMMENT_2, BUG_FORMAT_2_COMMENT_2, BUG_FORMAT_3_COMMENT_2, + BUG_FORMAT_4_COMMENT_2 }; } private void setRepository(final TaskRepository repository) { @@ -122,6 +168,8 @@ public class BugzillaTaskHyperlinkDetectorTest extends TestCase { assertNotNull(links); assertEquals(1, links.length); assertEquals(testString.indexOf(format), links[0].getHyperlinkRegion().getOffset()); + Object comment = ((TaskHyperlink) links[0]).getSelection(); + assertNull(comment); } } @@ -134,6 +182,8 @@ public class BugzillaTaskHyperlinkDetectorTest extends TestCase { assertNotNull(links); assertEquals(1, links.length); assertEquals(testString.indexOf(format), links[0].getHyperlinkRegion().getOffset()); + Object comment = ((TaskHyperlink) links[0]).getSelection(); + assertNull(comment); } } @@ -146,6 +196,8 @@ public class BugzillaTaskHyperlinkDetectorTest extends TestCase { assertNotNull(links); assertEquals(1, links.length); assertEquals(testString.indexOf(format), links[0].getHyperlinkRegion().getOffset()); + Object comment = ((TaskHyperlink) links[0]).getSelection(); + assertNull(comment); } } @@ -158,6 +210,8 @@ public class BugzillaTaskHyperlinkDetectorTest extends TestCase { assertNotNull(links); assertEquals(1, links.length); assertEquals(testString.indexOf(format), links[0].getHyperlinkRegion().getOffset()); + Object comment = ((TaskHyperlink) links[0]).getSelection(); + assertNull(comment); } } @@ -171,6 +225,8 @@ public class BugzillaTaskHyperlinkDetectorTest extends TestCase { assertNotNull(links); assertEquals(1, links.length); assertEquals(i, links[0].getHyperlinkRegion().getOffset()); + Object comment = ((TaskHyperlink) links[0]).getSelection(); + assertNull(comment); } } @@ -184,6 +240,8 @@ public class BugzillaTaskHyperlinkDetectorTest extends TestCase { assertNotNull(links); assertEquals(1, links.length); assertEquals(testString.indexOf(format), links[0].getHyperlinkRegion().getOffset()); + Object comment = ((TaskHyperlink) links[0]).getSelection(); + assertNull(comment); } } @@ -322,4 +380,40 @@ public class BugzillaTaskHyperlinkDetectorTest extends TestCase { assertEquals("345", ((TaskHyperlink) links[0]).getTaskId()); } + public void testAttachmentOld() { + String testString = ATTACHMENT_OLD; + viewer.setDocument(new Document(testString)); + int i = testString.indexOf(ATTACHMENT_NUMBER); + Region region = new Region(0, testString.length()); + IHyperlink[] links = detector.detectHyperlinks(viewer, region, false); + assertNotNull(links); + assertEquals(1, links.length); + assertEquals(testString.indexOf(ATTACHMENT_NUMBER), links[0].getHyperlinkRegion().getOffset()); + } + + public void testAttachmentNew() { + String testString = ATTACHMENT_NEW; + viewer.setDocument(new Document(testString)); + int i = testString.indexOf(ATTACHMENT_NUMBER); + Region region = new Region(0, testString.length()); + IHyperlink[] links = detector.detectHyperlinks(viewer, region, false); + assertNotNull(links); + assertEquals(1, links.length); + assertEquals(testString.indexOf(ATTACHMENT_NUMBER), links[0].getHyperlinkRegion().getOffset()); + } + + public void testBugWithComment() { + for (String format : commentFormats) { + String testString = "First line\n:" + format + " is at the beginning"; + viewer.setDocument(new Document(testString)); + Region region = new Region(0, testString.length()); + IHyperlink[] links = detector.detectHyperlinks(viewer, region, false); + assertNotNull(links); + assertEquals(1, links.length); + assertEquals(testString.indexOf(format), links[0].getHyperlinkRegion().getOffset()); + Object comment = ((TaskHyperlink) links[0]).getSelection(); + assertNotNull(comment); + assertEquals(TaskAttribute.PREFIX_COMMENT + "44556677", comment); + } + } } diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaConnectorUi.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaConnectorUi.java index dfb6486d8..1046e1a3f 100644 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaConnectorUi.java +++ b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaConnectorUi.java @@ -38,6 +38,7 @@ import org.eclipse.mylyn.tasks.core.ITaskComment; import org.eclipse.mylyn.tasks.core.ITaskMapping; import org.eclipse.mylyn.tasks.core.TaskRepository; import org.eclipse.mylyn.tasks.core.data.TaskAttachmentModel; +import org.eclipse.mylyn.tasks.core.data.TaskAttribute; import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi; import org.eclipse.mylyn.tasks.ui.LegendElement; import org.eclipse.mylyn.tasks.ui.TaskHyperlink; @@ -52,9 +53,19 @@ public class BugzillaConnectorUi extends AbstractRepositoryConnectorUi { private static final int TASK_NUM_GROUP = 5; - private static final int ATTACHMENT_NUM_GROUP = 6; + private static final int COMMENT_NUM_GROUP = 10; - private static final String regexp = "(?:(duplicate of|(\\W||^)+bug|(\\W|^)+task)( ?#? ?)(\\d+))|(?:Created an attachment\\s*\\(id=(\\d+)\\))"; //$NON-NLS-1$ + private static final int ATTACHMENT_NUM_GROUP = 14; + +// 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$ + + 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$ +// +// private static final String regexp = "(?:(duplicate of|(\\W||^)+bug|(\\W|^)+task)( ?#? ?)(\\d+))|(?:(Created (an )?attachment\\s*(\\(id=)?(\\d+)))"; //$NON-NLS-1$ +// +// +// private static final String regexp = "(duplicate of|bug|task)( ?#? ?)(\\d+)"; //$NON-NLS-1$ +// private static final String regexp = "(duplicate of|bug|task)( ?#? ?)(\\d+)((\\s)*(comment|c)(\\s#|#|#\\s|\\s|)(\\s\\d+|\\d+))?"; //$NON-NLS-1$ private static final Pattern PATTERN = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE); @@ -192,6 +203,8 @@ public class BugzillaConnectorUi extends AbstractRepositoryConnectorUi { int start = -1; + int a = m.groupCount(); + if (m.group().startsWith("duplicate")) { //$NON-NLS-1$ start = m.start() + m.group().indexOf(m.group(TASK_NUM_GROUP)); } else { @@ -209,17 +222,25 @@ public class BugzillaConnectorUi extends AbstractRepositoryConnectorUi { try { start += regionOffset; end += regionOffset; - IRegion sregion = new Region(start, end - start); String bugId = m.group(TASK_NUM_GROUP); if (bugId == null) { String attachmentId = m.group(ATTACHMENT_NUM_GROUP); if (attachmentId != null) { + start = start + m.group().indexOf(m.group(ATTACHMENT_NUM_GROUP)); + + IRegion sregion = new Region(start, end - start); return new TaskAttachmentHyperlink(sregion, repository, attachmentId); } } else { bugId.trim(); - return new TaskHyperlink(sregion, repository, bugId); + IRegion sregion = new Region(start, end - start); + TaskHyperlink taskHyperLink = new TaskHyperlink(sregion, repository, bugId); + String commentId = m.group(COMMENT_NUM_GROUP); + if (commentId != null) { + taskHyperLink.setSelection(TaskAttribute.PREFIX_COMMENT + commentId); + } + return taskHyperLink; } } catch (NumberFormatException e) { |