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 143567 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/mylar/bugzilla/tests/headless/BugzillaDuplicateDetectionTest.java (+57 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2004 - 2006 University Of British Columbia and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     University Of British Columbia - initial API and implementation
10
 *******************************************************************************/
11
12
package org.eclipse.mylar.bugzilla.tests.headless;
13
14
import java.util.List;
15
16
import junit.framework.TestCase;
17
18
import org.eclipse.mylar.internal.bugzilla.core.BugzillaPlugin;
19
import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants;
20
import org.eclipse.mylar.internal.bugzilla.ui.wizard.NewBugzillaReportWizard;
21
import org.eclipse.mylar.internal.tasks.ui.wizards.DuplicateDetectionData;
22
import org.eclipse.mylar.tasks.core.AbstractRepositoryTask;
23
import org.eclipse.mylar.tasks.core.TaskRepository;
24
25
/**
26
 * 
27
 * @author Jeff Pound
28
 */
29
public class BugzillaDuplicateDetectionTest extends TestCase {
30
31
	private TaskRepository repository;
32
33
	@Override
34
	protected void setUp() throws Exception {
35
		super.setUp();
36
		repository = new TaskRepository(BugzillaPlugin.REPOSITORY_KIND, IBugzillaConstants.TEST_BUGZILLA_222_URL);
37
	}
38
39
	public void testDuplicateDetection() throws Exception {
40
		String stackTrace = "java.lang.NullPointerException\njeff.testing.stack.trace.functionality";
41
		String fakeStackTrace = "thisisnotreallyastacktrace";
42
		int numMatches = 2;
43
44
		NewBugzillaReportWizard wizard = new NewBugzillaReportWizard(repository, null);
45
		DuplicateDetectionData dupData = new DuplicateDetectionData();
46
		dupData.setStackTrace(stackTrace);
47
48
		List<AbstractRepositoryTask> tasks = wizard.searchForDuplicates(dupData);
49
		assertNotNull(tasks);
50
		assertEquals(numMatches, tasks.size());
51
		
52
		dupData.setStackTrace(fakeStackTrace);
53
		tasks = wizard.searchForDuplicates(dupData);
54
		assertNotNull(tasks);
55
		assertEquals(0, tasks.size());
56
	}
57
}
(-).refactorings/2006/7/29/refactorings.index (-5 / +25 lines)
Lines 1-7 Link Here
1
1153336811591	Extract constant 'PAGE_MESSAGE'
2
1153449640944	Rename field 'PAGE_MESSAGE'
3
1153449614236	Rename field 'PAGE_MESSAGE'
4
1153449255563	Extract constant 'PAGE_MESSAGE'
5
1153428756437	Extract local variable 'toolTip'
6
1153425711932	Rename local variable 'task'
7
1153421109772	Rename method 'getOpenDuplicates'
8
1153420907136	Rename local variable 'findDups'
9
1153420896786	Rename local variable 'findDups'
10
1153333894241	Rename field 'MAX_LINES'
11
1153331525833	Rename method 'formatTreeItem'
12
1153284985053	Rename field 'duplicateTable'
13
1153282340626	Extract method 'packTable'
14
1153282009126	Extract local variable 'wizardPage'
15
1153280662552	Rename field 'table'
16
1153259010314	Rename local variable 'par'
17
1153259005916	Rename local variable 'parent'
18
1153253087544	Rename field 'TITLE'
19
1153252992402	Rename type 'DisplayRelatedReportsPagea'
20
1153251783149	Rename local variable 'stackTraceComposite'
21
1153250472070	Rename type 'IDuplicateDetectingReportWizard'
22
1153250308422	Rename method 'addPage'
23
1153243073460	Rename local variable 'container'
24
1153243032746	Rename local variable 'parent'
25
1153242560562	Extract method 'createTableViewer'
1
1153144519218	Rename type 'TaskListPreferencePage'
26
1153144519218	Rename type 'TaskListPreferencePage'
2
1153343986885	Rename method 'createFileSelectionControl'
3
1153330764104	Rename method 'addCustomProperties'
4
1153253684609	Rename type 'TasksUitExtensionReader'
5
1153249815125	Rename field 'ELMNT_TMPL_SERVERURL'
6
1153249484093	Rename field 'ELMNT_TMPL_TASKURLPREFIX'
7
1153121623921	Rename type 'RepositoryAwareStatusNotifier'
27
1153121623921	Rename type 'RepositoryAwareStatusNotifier'
(-).refactorings/2006/7/29/refactorings.history (-5 / +25 lines)
Lines 1-10 Link Here
1
<?xml version="1.0" encoding="utf-8"?>
1
<?xml version="1.0" encoding="utf-8"?>
2
<session version="1.0">
2
<session version="1.0">
3
<refactoring comment="Extract constant 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage.PAGE_MESSAGE' from expression '&quot;If you see a duplicate candidate select it to open and comment.  If not press finish to create new one.&quot;'&#10;- Constant name: 'PAGE_MESSAGE'&#10;- Constant expression: '&quot;If you see a duplicate candidate select it to open and comment.  If not press finish to create new one.&quot;'&#10;- Declared visibility: 'private'&#10;- Replace occurrences of expression with constant" description="Extract constant 'PAGE_MESSAGE'" flags="786432" id="org.eclipse.jdt.ui.extract.constant" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{DisplayRelatedReportsPage.java" name="PAGE_MESSAGE" qualify="false" replace="true" selection="2128 105" stamp="1153336811591" version="1.0" visibility="2"/>
4
<refactoring comment="Rename field 'MAX_LINES' in 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage' to 'LINES_PER_ITEM'&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage.MAX_LINES'&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage.LINES_PER_ITEM'&#10;- Update references to refactored element&#10;- Update textual occurrences in comments and strings" delegate="false" deprecate="true" description="Rename field 'MAX_LINES'" flags="589826" getter="false" id="org.eclipse.jdt.ui.rename.field" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{DisplayRelatedReportsPage.java[DisplayRelatedReportsPage^MAX_LINES" name="LINES_PER_ITEM" references="true" setter="false" stamp="1153333894241" textual="false" version="1.0"/>
5
<refactoring comment="Rename method 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage.formatTreeItem(...)' to 'formatTreeText'&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage.formatTreeItem(...)'&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage.formatTreeText(...)'&#10;- Update references to refactored element" delegate="false" deprecate="true" description="Rename method 'formatTreeItem'" flags="589826" id="org.eclipse.jdt.ui.rename.method" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{DisplayRelatedReportsPage.java[DisplayRelatedReportsPage~formatTreeItem~QString;~I" name="formatTreeText" references="true" stamp="1153331525833" version="1.0"/>
6
<refactoring comment="Rename field 'duplicateTable' in 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage' to 'duplicatesTree'&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage.duplicateTable'&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage.duplicatesTree'&#10;- Update references to refactored element&#10;- Update textual occurrences in comments and strings" delegate="false" deprecate="true" description="Rename field 'duplicateTable'" flags="589826" getter="false" id="org.eclipse.jdt.ui.rename.field" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{DisplayRelatedReportsPage.java[DisplayRelatedReportsPage^duplicateTable" name="duplicatesTree" references="true" setter="false" stamp="1153284985053" textual="false" version="1.0"/>
7
<refactoring comment="Extract method 'private void packTable()' from 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage.createControl()' to 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage'&#10;- Method name: 'packTable'&#10;- Destination type: 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage'&#10;- Declared visibility: 'private'" comments="false" description="Extract method 'packTable'" destination="0" exceptions="false" flags="786434" id="org.eclipse.jdt.ui.extract.method" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{DisplayRelatedReportsPage.java" name="packTable" replace="false" selection="3599 91" stamp="1153282340626" version="1.0" visibility="2"/>
8
<refactoring comment="Extract local variable 'wizardPage' from expression 'super.getNextPage()'&#10;- Variable name: 'wizardPage'&#10;- Destination method: 'org.eclipse.mylar.internal.tasks.ui.wizards.FindRelatedReportsPage.getNextPage()'&#10;- Variable expression: 'super.getNextPage()'&#10;- Replace occurrences of expression with variable" description="Extract local variable 'wizardPage'" final="false" id="org.eclipse.jdt.ui.extract.temp" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{FindRelatedReportsPage.java" name="wizardPage" replace="true" selection="2851 19" stamp="1153282009126" version="1.0"/>
9
<refactoring comment="Rename field 'table' in 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage' to 'duplicateTable'&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage.table'&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage.duplicateTable'&#10;- Update references to refactored element&#10;- Update textual occurrences in comments and strings" delegate="false" deprecate="true" description="Rename field 'table'" flags="589826" getter="false" id="org.eclipse.jdt.ui.rename.field" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{DisplayRelatedReportsPage.java[DisplayRelatedReportsPage^table" name="duplicateTable" references="true" setter="false" stamp="1153280662552" textual="false" version="1.0"/>
10
<refactoring comment="Rename local variable 'par' in 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage.createControl(...)' to 'parent'&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage.createControl(Composite).par'&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage.createControl(Composite).parent'&#10;- Update references to refactored element" description="Rename local variable 'par'" id="org.eclipse.jdt.ui.rename.local.variable" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{DisplayRelatedReportsPage.java" name="parent" references="true" selection="1282 3" stamp="1153259010314" version="1.0"/>
11
<refactoring comment="Rename local variable 'parent' in 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage.createControl(...)' to 'composite'&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage.createControl(Composite).parent'&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage.createControl(Composite).composite'&#10;- Update references to refactored element" description="Rename local variable 'parent'" id="org.eclipse.jdt.ui.rename.local.variable" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{DisplayRelatedReportsPage.java" name="composite" references="true" selection="1301 6" stamp="1153259005916" version="1.0"/>
12
<refactoring comment="Rename field 'TITLE' in 'org.eclipse.mylar.internal.tasks.ui.wizards.FindRelatedReportsPage' to 'PAGE_TITLE'&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.wizards.FindRelatedReportsPage.TITLE'&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.wizards.FindRelatedReportsPage.PAGE_TITLE'&#10;- Update references to refactored element&#10;- Update textual occurrences in comments and strings" delegate="false" deprecate="true" description="Rename field 'TITLE'" flags="589826" getter="false" id="org.eclipse.jdt.ui.rename.field" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{FindRelatedReportsPage.java[FindRelatedReportsPage^TITLE" name="PAGE_TITLE" references="true" setter="false" stamp="1153253087544" textual="false" version="1.0"/>
13
<refactoring comment="Rename type 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPagea' to 'DisplayRelatedReportsPage'&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPagea'&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage'&#10;- Update references to refactored element&#10;- Update textual occurrences in comments and strings" description="Rename type 'DisplayRelatedReportsPagea'" flags="589830" id="org.eclipse.jdt.ui.rename.type" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{DisplayRelatedReportsPagea.java[DisplayRelatedReportsPagea" matchStrategy="1" name="DisplayRelatedReportsPage" qualified="false" references="true" similarDeclarations="false" stamp="1153252992402" textual="false" version="1.0"/>
14
<refactoring comment="Rename local variable 'stackTraceComposite' in 'org.eclipse.mylar.internal.tasks.ui.wizards.FindRelatedReportsPage.createControl(...)' to 'composite'&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.wizards.FindRelatedReportsPage.createControl(Composite).stackTraceComposite'&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.wizards.FindRelatedReportsPage.createControl(Composite).composite'&#10;- Update references to refactored element" description="Rename local variable 'stackTraceComposite'" id="org.eclipse.jdt.ui.rename.local.variable" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{FindRelatedReportsPage.java" name="composite" references="true" selection="2029 19" stamp="1153251783149" version="1.0"/>
15
<refactoring comment="Rename type 'org.eclipse.mylar.internal.tasks.ui.wizards.IDuplicateDetectingReportWizard' to 'AbstractDuplicateDetectingReportWizard'&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.wizards.IDuplicateDetectingReportWizard'&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.wizards.AbstractDuplicateDetectingReportWizard'&#10;- Update references to refactored element&#10;- Update textual occurrences in comments and strings" description="Rename type 'IDuplicateDetectingReportWizard'" flags="589830" id="org.eclipse.jdt.ui.rename.type" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{IDuplicateDetectingReportWizard.java[IDuplicateDetectingReportWizard" matchStrategy="1" name="AbstractDuplicateDetectingReportWizard" qualified="false" references="true" similarDeclarations="false" stamp="1153250472070" textual="false" version="1.0"/>
16
<refactoring comment="Rename method 'org.eclipse.mylar.internal.tasks.ui.wizards.IDuplicateDetectingReportWizard.addPage(...)' to 'queuePage'&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.wizards.IDuplicateDetectingReportWizard.addPage(...)'&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.wizards.IDuplicateDetectingReportWizard.queuePage(...)'&#10;- Update references to refactored element" delegate="false" deprecate="true" description="Rename method 'addPage'" flags="589830" id="org.eclipse.jdt.ui.rename.method" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{IDuplicateDetectingReportWizard.java[IDuplicateDetectingReportWizard~addPage~QIWizardPage;" name="queuePage" references="true" stamp="1153250308422" version="1.0"/>
17
<refactoring comment="Rename local variable 'container' in 'org.eclipse.mylar.internal.tasks.ui.wizards.NewRepositoryTaskPage.createControl(...)' to 'parent'&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.wizards.NewRepositoryTaskPage.createControl(Composite).container'&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.wizards.NewRepositoryTaskPage.createControl(Composite).parent'&#10;- Update references to refactored element" description="Rename local variable 'container'" id="org.eclipse.jdt.ui.rename.local.variable" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{NewRepositoryTaskPage.java" name="parent" references="true" selection="1846 9" stamp="1153243073460" version="1.0"/>
18
<refactoring comment="Rename local variable 'parent' in 'org.eclipse.mylar.internal.tasks.ui.wizards.NewRepositoryTaskPage.createControl(...)' to 'container'&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.wizards.NewRepositoryTaskPage.createControl(Composite).parent'&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.wizards.NewRepositoryTaskPage.createControl(Composite).container'&#10;- Update references to refactored element" description="Rename local variable 'parent'" id="org.eclipse.jdt.ui.rename.local.variable" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{NewRepositoryTaskPage.java" name="container" references="true" selection="1846 6" stamp="1153243032746" version="1.0"/>
19
<refactoring comment="Extract method 'protected void createTableViewer(Composite container)' from 'org.eclipse.mylar.internal.tasks.ui.wizards.SelectRepositoryPage.createControl()' to 'org.eclipse.mylar.internal.tasks.ui.wizards.SelectRepositoryPage'&#10;- Method name: 'createTableViewer'&#10;- Destination type: 'org.eclipse.mylar.internal.tasks.ui.wizards.SelectRepositoryPage'&#10;- Declared visibility: 'protected'" comments="false" description="Extract method 'createTableViewer'" destination="0" exceptions="false" flags="786434" id="org.eclipse.jdt.ui.extract.method" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{SelectRepositoryPage.java" name="createTableViewer" replace="false" selection="3645 1048" stamp="1153242560562" version="1.0" visibility="4"/>
3
<refactoring comment="Rename type 'org.eclipse.mylar.internal.tasks.ui.preferences.TaskListPreferencePage' to 'TasksPreferencePage'&#13;&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.preferences.TaskListPreferencePage'&#13;&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.preferences.TasksPreferencePage'&#13;&#10;- Update references to refactored element&#13;&#10;- Rename similarly named elements&#13;&#10;- Update fully qualified names in *.xml, *.mf files&#13;&#10;- Update textual occurrences in comments and strings" description="Rename type 'TaskListPreferencePage'" flags="589830" id="org.eclipse.jdt.ui.rename.type" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.preferences{TaskListPreferencePage.java[TaskListPreferencePage" matchStrategy="1" name="TasksPreferencePage" patterns="*.xml, *.mf" qualified="true" references="true" similarDeclarations="true" stamp="1153144519218" textual="false" version="1.0"/>
20
<refactoring comment="Rename type 'org.eclipse.mylar.internal.tasks.ui.preferences.TaskListPreferencePage' to 'TasksPreferencePage'&#13;&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.preferences.TaskListPreferencePage'&#13;&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.preferences.TasksPreferencePage'&#13;&#10;- Update references to refactored element&#13;&#10;- Rename similarly named elements&#13;&#10;- Update fully qualified names in *.xml, *.mf files&#13;&#10;- Update textual occurrences in comments and strings" description="Rename type 'TaskListPreferencePage'" flags="589830" id="org.eclipse.jdt.ui.rename.type" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.preferences{TaskListPreferencePage.java[TaskListPreferencePage" matchStrategy="1" name="TasksPreferencePage" patterns="*.xml, *.mf" qualified="true" references="true" similarDeclarations="true" stamp="1153144519218" textual="false" version="1.0"/>
4
<refactoring comment="Rename type 'org.eclipse.mylar.internal.tasks.ui.RepositoryAwareStatusNotifier' to 'RepositoryAwareStatusHandler'&#13;&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.RepositoryAwareStatusNotifier'&#13;&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.RepositoryAwareStatusHandler'&#13;&#10;- Update references to refactored element&#13;&#10;- Rename similarly named elements&#13;&#10;- Update fully qualified names in *.xml, *.mf files&#13;&#10;- Update textual occurrences in comments and strings" description="Rename type 'RepositoryAwareStatusNotifier'" flags="589830" id="org.eclipse.jdt.ui.rename.type" input="/src&lt;org.eclipse.mylar.internal.tasks.ui{RepositoryAwareStatusNotifier.java[RepositoryAwareStatusNotifier" matchStrategy="1" name="RepositoryAwareStatusHandler" patterns="*.xml, *.mf" qualified="true" references="true" similarDeclarations="true" stamp="1153121623921" textual="false" version="1.0"/>
21
<refactoring comment="Rename type 'org.eclipse.mylar.internal.tasks.ui.RepositoryAwareStatusNotifier' to 'RepositoryAwareStatusHandler'&#13;&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.RepositoryAwareStatusNotifier'&#13;&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.RepositoryAwareStatusHandler'&#13;&#10;- Update references to refactored element&#13;&#10;- Rename similarly named elements&#13;&#10;- Update fully qualified names in *.xml, *.mf files&#13;&#10;- Update textual occurrences in comments and strings" description="Rename type 'RepositoryAwareStatusNotifier'" flags="589830" id="org.eclipse.jdt.ui.rename.type" input="/src&lt;org.eclipse.mylar.internal.tasks.ui{RepositoryAwareStatusNotifier.java[RepositoryAwareStatusNotifier" matchStrategy="1" name="RepositoryAwareStatusHandler" patterns="*.xml, *.mf" qualified="true" references="true" similarDeclarations="true" stamp="1153121623921" textual="false" version="1.0"/>
5
<refactoring comment="Rename field 'ELMNT_TMPL_TASKURLPREFIX' in 'org.eclipse.mylar.internal.tasks.ui.util.TasksUitExtensionReader' to 'ELMNT_TMPL_TASKPREFIXURL'&#13;&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.util.TasksUitExtensionReader.ELMNT_TMPL_TASKURLPREFIX'&#13;&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.util.TasksUitExtensionReader.ELMNT_TMPL_TASKPREFIXURL'&#13;&#10;- Update references to refactored element&#13;&#10;- Update textual occurrences in comments and strings" delegate="false" deprecate="true" description="Rename field 'ELMNT_TMPL_TASKURLPREFIX'" flags="589830" getter="false" id="org.eclipse.jdt.ui.rename.field" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.util{TasksUitExtensionReader.java[TasksUitExtensionReader^ELMNT_TMPL_TASKURLPREFIX" name="ELMNT_TMPL_TASKPREFIXURL" references="true" setter="false" stamp="1153249484093" textual="true" version="1.0"/>
22
<refactoring comment="Rename local variable 'findDups' in 'org.eclipse.mylar.internal.tasks.ui.wizards.AbstractDuplicateDetectingReportWizard.getOpenDuplicates()' to 'displayDups'&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.wizards.AbstractDuplicateDetectingReportWizard.getOpenDuplicates().findDups'&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.wizards.AbstractDuplicateDetectingReportWizard.getOpenDuplicates().displayDups'&#10;- Update references to refactored element" description="Rename local variable 'findDups'" id="org.eclipse.jdt.ui.rename.local.variable" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{AbstractDuplicateDetectingReportWizard.java" name="displayDups" references="true" selection="1543 8" stamp="1153420896786" version="1.0"/>
6
<refactoring comment="Rename field 'ELMNT_TMPL_SERVERURL' in 'org.eclipse.mylar.internal.tasks.ui.util.TasksUitExtensionReader' to 'ELMNT_TMPL_REPOSITORYURL'&#13;&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.util.TasksUitExtensionReader.ELMNT_TMPL_SERVERURL'&#13;&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.util.TasksUitExtensionReader.ELMNT_TMPL_REPOSITORYURL'&#13;&#10;- Update references to refactored element&#13;&#10;- Update textual occurrences in comments and strings" delegate="false" deprecate="true" description="Rename field 'ELMNT_TMPL_SERVERURL'" flags="589830" getter="false" id="org.eclipse.jdt.ui.rename.field" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.util{TasksUitExtensionReader.java[TasksUitExtensionReader^ELMNT_TMPL_SERVERURL" name="ELMNT_TMPL_REPOSITORYURL" references="true" setter="false" stamp="1153249815125" textual="true" version="1.0"/>
23
<refactoring comment="Rename local variable 'findDups' in 'org.eclipse.mylar.internal.tasks.ui.wizards.AbstractDuplicateDetectingReportWizard.openDuplicates()' to 'displayDups'&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.wizards.AbstractDuplicateDetectingReportWizard.openDuplicates().findDups'&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.wizards.AbstractDuplicateDetectingReportWizard.openDuplicates().displayDups'&#10;- Update references to refactored element" description="Rename local variable 'findDups'" id="org.eclipse.jdt.ui.rename.local.variable" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{AbstractDuplicateDetectingReportWizard.java" name="displayDups" references="true" selection="1761 8" stamp="1153420907136" version="1.0"/>
7
<refactoring comment="Rename type 'org.eclipse.mylar.internal.tasks.ui.util.TasksUitExtensionReader' to 'TasksUiExtensionReader'&#13;&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.util.TasksUitExtensionReader'&#13;&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.util.TasksUiExtensionReader'&#13;&#10;- Update references to refactored element&#13;&#10;- Update fully qualified names in *.xml files&#13;&#10;- Update textual occurrences in comments and strings" description="Rename type 'TasksUitExtensionReader'" flags="589830" id="org.eclipse.jdt.ui.rename.type" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.util{TasksUitExtensionReader.java[TasksUitExtensionReader" matchStrategy="1" name="TasksUiExtensionReader" patterns="*.xml" qualified="true" references="true" similarDeclarations="false" stamp="1153253684609" textual="true" version="1.0"/>
24
<refactoring comment="Rename method 'org.eclipse.mylar.internal.tasks.ui.wizards.AbstractDuplicateDetectingReportWizard.getOpenDuplicates()' to 'getSelectedDuplicates'&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.wizards.AbstractDuplicateDetectingReportWizard.getOpenDuplicates()'&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.wizards.AbstractDuplicateDetectingReportWizard.getSelectedDuplicates()'&#10;- Update references to refactored element" delegate="false" deprecate="true" description="Rename method 'getOpenDuplicates'" flags="589830" id="org.eclipse.jdt.ui.rename.method" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{AbstractDuplicateDetectingReportWizard.java[AbstractDuplicateDetectingReportWizard~getOpenDuplicates" name="getSelectedDuplicates" references="true" stamp="1153421109772" version="1.0"/>
8
<refactoring comment="Rename method 'org.eclipse.mylar.internal.tasks.ui.wizards.AbstractRepositorySettingsPage.addCustomProperties(...)' to 'updateProperties'&#13;&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.wizards.AbstractRepositorySettingsPage.addCustomProperties(...)'&#13;&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.wizards.AbstractRepositorySettingsPage.updateProperties(...)'&#13;&#10;- Update references to refactored element" delegate="false" deprecate="true" description="Rename method 'addCustomProperties'" flags="589830" id="org.eclipse.jdt.ui.rename.method" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{AbstractRepositorySettingsPage.java[AbstractRepositorySettingsPage~addCustomProperties~QTaskRepository;" name="updateProperties" references="true" stamp="1153330764104" version="1.0"/>
25
<refactoring comment="Rename local variable 'task' in 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage.setRelatedTasks(...)' to 'taskData'&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage.setRelatedTasks(List&lt;AbstractRepositoryTask&gt;).task'&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage.setRelatedTasks(List&lt;AbstractRepositoryTask&gt;).taskData'&#10;- Update references to refactored element" description="Rename local variable 'task'" id="org.eclipse.jdt.ui.rename.local.variable" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{DisplayRelatedReportsPage.java" name="taskData" references="true" selection="11025 4" stamp="1153425711932" version="1.0"/>
9
<refactoring comment="Rename method 'org.eclipse.mylar.internal.tasks.ui.wizards.TaskDataImportWizardPage.createFileSelectionControl(...)' to 'createContentSelectionControl'&#13;&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.wizards.TaskDataImportWizardPage.createFileSelectionControl(...)'&#13;&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.wizards.TaskDataImportWizardPage.createContentSelectionControl(...)'&#13;&#10;- Update references to refactored element" delegate="false" deprecate="true" description="Rename method 'createFileSelectionControl'" flags="589826" id="org.eclipse.jdt.ui.rename.method" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{TaskDataImportWizardPage.java[TaskDataImportWizardPage~createFileSelectionControl~QComposite;" name="createContentSelectionControl" references="true" stamp="1153343986885" version="1.0"/>
26
<refactoring comment="Extract local variable 'toolTip' from expression '&quot;Report &quot; + taskData.getId() + &quot; - Created on &quot;+ taskData.getCreated()+ &quot; by &quot;+ taskData.getReporter()+ &quot; Assigned to &quot;+ taskData.getAssignedTo()'&#10;- Variable name: 'toolTip'&#10;- Destination method: 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage.setRelatedTasks()'&#10;- Variable expression: '&quot;Report &quot; + taskData.getId() + &quot; - Created on &quot;+ taskData.getCreated()+ &quot; by &quot;+ taskData.getReporter()+ &quot; Assigned to &quot;+ taskData.getAssignedTo()'&#10;- Replace occurrences of expression with variable" description="Extract local variable 'toolTip'" final="false" id="org.eclipse.jdt.ui.extract.temp" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{DisplayRelatedReportsPage.java" name="toolTip" replace="true" selection="8519 155" stamp="1153428756437" version="1.0"/>
27
<refactoring comment="Extract constant 'org.eclipse.mylar.internal.tasks.ui.wizards.FindRelatedReportsPage.PAGE_MESSAGE' from expression '&quot;Enter the stack trace to search for, you can trim the stack trace to make your search more general&quot;'&#10;- Constant name: 'PAGE_MESSAGE'&#10;- Constant expression: '&quot;Enter the stack trace to search for, you can trim the stack trace to make your search more general&quot;'&#10;- Declared visibility: 'private'&#10;- Replace occurrences of expression with constant" description="Extract constant 'PAGE_MESSAGE'" flags="786432" id="org.eclipse.jdt.ui.extract.constant" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{FindRelatedReportsPage.java" name="PAGE_MESSAGE" qualify="false" replace="true" selection="1515 0" stamp="1153449255563" version="1.0" visibility="2"/>
28
<refactoring comment="Rename field 'PAGE_MESSAGE' in 'org.eclipse.mylar.internal.tasks.ui.wizards.FindRelatedReportsPage' to 'PAGE_DESCRIPTION'&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.wizards.FindRelatedReportsPage.PAGE_MESSAGE'&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.wizards.FindRelatedReportsPage.PAGE_DESCRIPTION'&#10;- Update references to refactored element&#10;- Update textual occurrences in comments and strings" delegate="false" deprecate="true" description="Rename field 'PAGE_MESSAGE'" flags="589826" getter="false" id="org.eclipse.jdt.ui.rename.field" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{FindRelatedReportsPage.java[FindRelatedReportsPage^PAGE_MESSAGE" name="PAGE_DESCRIPTION" references="true" setter="false" stamp="1153449614236" textual="false" version="1.0"/>
29
<refactoring comment="Rename field 'PAGE_MESSAGE' in 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage' to 'PAGE_DESCRIPTION'&#10;- Original element: 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage.PAGE_MESSAGE'&#10;- Renamed element: 'org.eclipse.mylar.internal.tasks.ui.wizards.DisplayRelatedReportsPage.PAGE_DESCRIPTION'&#10;- Update references to refactored element&#10;- Update textual occurrences in comments and strings" delegate="false" deprecate="true" description="Rename field 'PAGE_MESSAGE'" flags="589826" getter="false" id="org.eclipse.jdt.ui.rename.field" input="/src&lt;org.eclipse.mylar.internal.tasks.ui.wizards{DisplayRelatedReportsPage.java[DisplayRelatedReportsPage^PAGE_MESSAGE" name="PAGE_DESCRIPTION" references="true" setter="false" stamp="1153449640944" textual="false" version="1.0"/>
10
</session>
30
</session>
(-)src/org/eclipse/mylar/internal/tasks/ui/editors/AbstractRepositoryTaskEditor.java (+1 lines)
Lines 1872-1877 Link Here
1872
1872
1873
	public void setSummaryText(String text) {
1873
	public void setSummaryText(String text) {
1874
		this.summaryText.setText(text);
1874
		this.summaryText.setText(text);
1875
		handleSummaryEvent();
1875
	}
1876
	}
1876
1877
1877
	public void setDescriptionText(String text) {
1878
	public void setDescriptionText(String text) {
(-)src/org/eclipse/mylar/internal/tasks/ui/actions/NewTaskFromErrorAction.java (-9 / +19 lines)
Lines 17-25 Link Here
17
import org.eclipse.jface.viewers.ISelectionProvider;
17
import org.eclipse.jface.viewers.ISelectionProvider;
18
import org.eclipse.jface.viewers.SelectionChangedEvent;
18
import org.eclipse.jface.viewers.SelectionChangedEvent;
19
import org.eclipse.jface.viewers.TreeViewer;
19
import org.eclipse.jface.viewers.TreeViewer;
20
import org.eclipse.jface.wizard.IWizard;
21
import org.eclipse.jface.wizard.WizardDialog;
20
import org.eclipse.jface.wizard.WizardDialog;
22
import org.eclipse.mylar.internal.tasks.ui.editors.AbstractRepositoryTaskEditor;
21
import org.eclipse.mylar.internal.tasks.ui.editors.AbstractRepositoryTaskEditor;
22
import org.eclipse.mylar.internal.tasks.ui.editors.ExistingBugEditorInput;
23
import org.eclipse.mylar.internal.tasks.ui.wizards.DuplicateDetectionData;
23
import org.eclipse.mylar.internal.tasks.ui.wizards.NewRepositoryTaskWizard;
24
import org.eclipse.mylar.internal.tasks.ui.wizards.NewRepositoryTaskWizard;
24
import org.eclipse.pde.internal.runtime.logview.LogEntry;
25
import org.eclipse.pde.internal.runtime.logview.LogEntry;
25
import org.eclipse.swt.widgets.Shell;
26
import org.eclipse.swt.widgets.Shell;
Lines 41-52 Link Here
41
	private TreeViewer treeViewer;
42
	private TreeViewer treeViewer;
42
43
43
	public void run() {
44
	public void run() {
44
//		boolean offline = MylarTaskListPlugin.getDefault().getPreferenceStore().getBoolean(TaskListPreferenceConstants.WORK_OFFLINE);
45
		// boolean offline =
45
//		if (offline) {
46
		// MylarTaskListPlugin.getDefault().getPreferenceStore().getBoolean(TaskListPreferenceConstants.WORK_OFFLINE);
46
//			MessageDialog.openInformation(null, "Unable to create bug report",
47
		// if (offline) {
47
//					"Unable to create a new bug report since you are currently offline");
48
		// MessageDialog.openInformation(null, "Unable to create bug report",
48
//			return;
49
		// "Unable to create a new bug report since you are currently offline");
49
//		}
50
		// return;
51
		// }
50
52
51
		TreeItem[] items = treeViewer.getTree().getSelection();
53
		TreeItem[] items = treeViewer.getTree().getSelection();
52
		LogEntry selection = null;
54
		LogEntry selection = null;
Lines 54-60 Link Here
54
			selection = (LogEntry) items[0].getData();
56
			selection = (LogEntry) items[0].getData();
55
		}
57
		}
56
58
57
		IWizard wizard = new NewRepositoryTaskWizard();
59
		NewRepositoryTaskWizard wizard = new NewRepositoryTaskWizard();
60
		if (selection != null) {
61
			DuplicateDetectionData dup = new DuplicateDetectionData();
62
			dup.setStackTrace(((selection.getStack() == null) ? "no stack trace available" : selection.getStack()));
63
			// getSummaryString(selection);
64
65
			wizard.setDuplicateData(dup);
66
		}
58
67
59
		Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
68
		Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
60
		if (wizard != null && shell != null && !shell.isDisposed()) {
69
		if (wizard != null && shell != null && !shell.isDisposed()) {
Lines 74-82 Link Here
74
				System.err.println(e);
83
				System.err.println(e);
75
			}
84
			}
76
85
77
			if (selection == null) {
86
			if (selection == null || editor.getEditorInput() instanceof ExistingBugEditorInput) {
78
				return;
87
				return;
79
			}
88
			}
89
80
			editor.setSummaryText(selection.getSeverityText() + ": \"" + selection.getMessage() + "\" in "
90
			editor.setSummaryText(selection.getSeverityText() + ": \"" + selection.getMessage() + "\" in "
81
					+ selection.getPluginId());
91
					+ selection.getPluginId());
82
			editor.setDescriptionText("\n\n-- Error Log --\nDate: " + selection.getDate() + "\nMessage: "
92
			editor.setDescriptionText("\n\n-- Error Log --\nDate: " + selection.getDate() + "\nMessage: "
(-)src/org/eclipse/mylar/internal/tasks/ui/wizards/NewRepositoryTaskWizard.java (+5 lines)
Lines 45-48 Link Here
45
		}
45
		}
46
		return connectorKinds;
46
		return connectorKinds;
47
	}
47
	}
48
	
49
	public void setDuplicateData(DuplicateDetectionData duplicateData) {
50
		((NewRepositoryTaskPage)getSelectRepositoryPage()).setDuplicateData(duplicateData);
51
		((NewRepositoryTaskPage)getSelectRepositoryPage()).setUseStackTrace(true);
52
	}
48
}
53
}
(-)src/org/eclipse/mylar/internal/tasks/ui/wizards/SelectRepositoryPage.java (-9 / +15 lines)
Lines 37-42 Link Here
37
import org.eclipse.swt.graphics.Point;
37
import org.eclipse.swt.graphics.Point;
38
import org.eclipse.swt.layout.FillLayout;
38
import org.eclipse.swt.layout.FillLayout;
39
import org.eclipse.swt.widgets.Composite;
39
import org.eclipse.swt.widgets.Composite;
40
import org.eclipse.swt.widgets.Table;
40
41
41
/**
42
/**
42
 * @author Mik Kersten
43
 * @author Mik Kersten
Lines 103-108 Link Here
103
		FillLayout layout = new FillLayout();
104
		FillLayout layout = new FillLayout();
104
		container.setLayout(layout);
105
		container.setLayout(layout);
105
106
107
		createTableViewer(container);
108
109
		// TaskRepository defaultRepository =
110
		// MylarTaskListPlugin.getRepositoryManager().getDefaultRepository(
111
		// repositoryKind);
112
		// if (defaultRepository != null) {
113
		// viewer.setSelection(new StructuredSelection(defaultRepository));
114
		// }
115
116
		setControl(container);
117
	}
118
119
	protected Table createTableViewer(Composite container) {
106
		viewer = new TableViewer(container, SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
120
		viewer = new TableViewer(container, SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
107
		viewer.setContentProvider(new RepositoryContentProvider());
121
		viewer.setContentProvider(new RepositoryContentProvider());
108
		viewer.setLabelProvider(new TaskRepositoryLabelProvider());
122
		viewer.setLabelProvider(new TaskRepositoryLabelProvider());
Lines 130-144 Link Here
130
		});
144
		});
131
		viewer.getTable().showSelection();
145
		viewer.getTable().showSelection();
132
		viewer.getTable().setFocus();
146
		viewer.getTable().setFocus();
133
147
		return viewer.getTable();
134
		// TaskRepository defaultRepository =
135
		// MylarTaskListPlugin.getRepositoryManager().getDefaultRepository(
136
		// repositoryKind);
137
		// if (defaultRepository != null) {
138
		// viewer.setSelection(new StructuredSelection(defaultRepository));
139
		// }
140
141
		setControl(container);
142
	}
148
	}
143
149
144
	protected TaskRepository getSelectedRepository() {
150
	protected TaskRepository getSelectedRepository() {
(-)src/org/eclipse/mylar/internal/tasks/ui/wizards/NewRepositoryTaskPage.java (-2 / +90 lines)
Lines 14-29 Link Here
14
import java.util.List;
14
import java.util.List;
15
15
16
import org.eclipse.jface.wizard.IWizard;
16
import org.eclipse.jface.wizard.IWizard;
17
import org.eclipse.jface.wizard.IWizardPage;
17
import org.eclipse.mylar.tasks.core.TaskRepository;
18
import org.eclipse.mylar.tasks.core.TaskRepository;
18
import org.eclipse.mylar.tasks.ui.AbstractRepositoryConnector;
19
import org.eclipse.mylar.tasks.ui.AbstractRepositoryConnector;
19
import org.eclipse.mylar.tasks.ui.TasksUiPlugin;
20
import org.eclipse.mylar.tasks.ui.TasksUiPlugin;
21
import org.eclipse.swt.SWT;
22
import org.eclipse.swt.events.SelectionEvent;
23
import org.eclipse.swt.events.SelectionListener;
24
import org.eclipse.swt.layout.GridData;
25
import org.eclipse.swt.layout.GridLayout;
26
import org.eclipse.swt.widgets.Button;
27
import org.eclipse.swt.widgets.Composite;
28
import org.eclipse.swt.widgets.Link;
20
29
21
/**
30
/**
22
 * @author Mik Kersten
31
 * @author Mik Kersten
23
 * @author Euegene Kuleshov
32
 * @author Euegene Kuleshov
24
 */
33
 */
25
public class NewRepositoryTaskPage extends SelectRepositoryPage {
34
public class NewRepositoryTaskPage extends SelectRepositoryPage {
26
	
35
36
	private Button searchForDuplicatesButton;
37
38
	private DuplicateDetectionData duplicateData;
39
40
	private boolean initUseStackTrace = false;
41
42
	private IWizard newWizard;
43
44
	private boolean dupPagesAdded = false;
45
27
	public NewRepositoryTaskPage(List<String> kinds) {
46
	public NewRepositoryTaskPage(List<String> kinds) {
28
		super(kinds);
47
		super(kinds);
29
	}
48
	}
Lines 32-37 Link Here
32
	protected IWizard createWizard(TaskRepository taskRepository) {
51
	protected IWizard createWizard(TaskRepository taskRepository) {
33
		AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager().getRepositoryConnector(
52
		AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager().getRepositoryConnector(
34
				taskRepository.getKind());
53
				taskRepository.getKind());
35
		return connector.getNewTaskWizard(taskRepository, getSelection());
54
		newWizard = connector.getNewTaskWizard(taskRepository, getSelection());
55
		if (newWizard instanceof AbstractDuplicateDetectingReportWizard && getUseStackTrace()) {
56
			AbstractDuplicateDetectingReportWizard dupWizard = (AbstractDuplicateDetectingReportWizard) newWizard;
57
			// queue the duplicate detection pages to be added to the
58
			// wizard when it gets created
59
			dupWizard.queuePage(new FindRelatedReportsPage(duplicateData));
60
			dupWizard.queuePage(new DisplayRelatedReportsPage());
61
			dupPagesAdded = true;
62
		}
63
		return newWizard;
64
	}
65
66
	public IWizardPage getNextPage() {
67
		// ensure the dup pages are added (in the case of going "back" in the
68
		// wizard)
69
		if (!dupPagesAdded && newWizard instanceof AbstractDuplicateDetectingReportWizard && getUseStackTrace()) {
70
			AbstractDuplicateDetectingReportWizard dupWizard = (AbstractDuplicateDetectingReportWizard) newWizard;
71
			dupWizard.addPage(new FindRelatedReportsPage(duplicateData));
72
			dupWizard.addPage(new DisplayRelatedReportsPage());
73
			dupPagesAdded = true;
74
		}
75
		return super.getNextPage();
76
	}
77
78
	public void createControl(Composite parent) {
79
		Composite container = new Composite(parent, SWT.NONE);
80
		container.setLayout(new GridLayout());
81
		// super.createControl(container);
82
		createTableViewer(container).setLayoutData(new GridData(GridData.FILL_BOTH));
83
84
		searchForDuplicatesButton = new Button(container, SWT.CHECK);
85
		searchForDuplicatesButton.setText("Search for related stack traces before creating");
86
		searchForDuplicatesButton.setSelection(initUseStackTrace);
87
88
		Link link = new Link(container, SWT.NONE);
89
		link.setText("<A>Close wizard and search for related reports before continuing</A>");
90
		final IWizardPage thisPage = this;
91
		link.addSelectionListener(new SelectionListener() {
92
			public void widgetDefaultSelected(SelectionEvent arg0) {
93
				// ignore
94
			}
95
96
			public void widgetSelected(SelectionEvent arg0) {
97
				thisPage.getWizard().performCancel();
98
			}
99
		});
100
101
		setControl(container);
102
	}
103
104
	public DuplicateDetectionData getDuplicateData() {
105
		return duplicateData;
106
	}
107
108
	public void setDuplicateData(DuplicateDetectionData duplicateData) {
109
		this.duplicateData = duplicateData;
110
	}
111
112
	public void setUseStackTrace(boolean use) {
113
		if (searchForDuplicatesButton != null) {
114
			searchForDuplicatesButton.setSelection(use);
115
		}
116
		initUseStackTrace = use;
117
	}
118
119
	public boolean getUseStackTrace() {
120
		if (searchForDuplicatesButton != null) {
121
			return searchForDuplicatesButton.getSelection();
122
		}
123
		return initUseStackTrace;
36
	}
124
	}
37
}
125
}
(-)src/org/eclipse/mylar/internal/tasks/ui/wizards/MultiRepositoryAwareWizard.java (+4 lines)
Lines 52-55 Link Here
52
		// Can't finish on the first page
52
		// Can't finish on the first page
53
		return false;
53
		return false;
54
	}
54
	}
55
56
	public SelectRepositoryPage getSelectRepositoryPage() {
57
		return selectRepositoryPage;
58
	}
55
}
59
}
(-)src/org/eclipse/mylar/internal/tasks/ui/wizards/FindRelatedReportsPage.java (+112 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2004 - 2006 University Of British Columbia and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     University Of British Columbia - initial API and implementation
10
 *******************************************************************************/
11
12
package org.eclipse.mylar.internal.tasks.ui.wizards;
13
14
import org.eclipse.jface.wizard.IWizardPage;
15
import org.eclipse.jface.wizard.WizardPage;
16
import org.eclipse.mylar.tasks.ui.TasksUiPlugin;
17
import org.eclipse.swt.SWT;
18
import org.eclipse.swt.events.ModifyEvent;
19
import org.eclipse.swt.events.ModifyListener;
20
import org.eclipse.swt.layout.GridData;
21
import org.eclipse.swt.layout.GridLayout;
22
import org.eclipse.swt.widgets.Composite;
23
import org.eclipse.swt.widgets.Label;
24
import org.eclipse.swt.widgets.Text;
25
26
/**
27
 * 
28
 * @author Jeff Pound
29
 */
30
public class FindRelatedReportsPage extends WizardPage implements IWizardPage {
31
32
	private static final String PAGE_DESCRIPTION = "Enter the stack trace to search for, you can trim the stack trace to make your search more general";
33
34
	private static final String PAGE_TITLE = "Find Related Reports";
35
36
	static final String PAGE_NAME = "FindRelatedReportsPage";
37
38
	private Text stackTraceBox;
39
40
	private Text searchTermsText;
41
42
	private DuplicateDetectionData duplicateData;
43
44
	public FindRelatedReportsPage(DuplicateDetectionData duplicateData) {
45
		super(PAGE_NAME);
46
		setTitle(PAGE_TITLE);
47
		setDescription(PAGE_DESCRIPTION);
48
		
49
		// Description doesn't show up without an image present TODO: proper image.
50
		setImageDescriptor(TasksUiPlugin.imageDescriptorFromPlugin("org.eclipse.mylar.bugzilla.ui",
51
				"icons/wizban/bug-wizard.gif"));
52
		this.duplicateData = duplicateData;
53
		if (this.duplicateData == null) {
54
			this.duplicateData = new DuplicateDetectionData();
55
		}
56
	}
57
58
	public void createControl(Composite parent) {
59
		Composite composite = new Composite(parent, SWT.NONE);
60
		composite.setLayout(new GridLayout(2, false));
61
		setControl(composite);
62
63
		Label searchLabel = new Label(composite, SWT.LEFT);
64
		searchLabel.setText("Search Terms ");
65
		searchTermsText = new Text(composite, SWT.SINGLE);
66
		searchTermsText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
67
		searchTermsText.setText("");
68
		searchTermsText.setEnabled(false);
69
70
		Label stackLabel = new Label(composite, SWT.LEFT);
71
		stackLabel.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false, 2, 1));
72
		stackLabel.setText("Stack trace");
73
		stackTraceBox = new Text(composite, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
74
		stackTraceBox.setText(duplicateData.getStackTrace());
75
		GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1);
76
		// prevent the box from oversizing the wizard dialog
77
		if (!"".equals(duplicateData.getStackTrace())) {
78
			gd.heightHint = 200;
79
			gd.widthHint = 600;
80
		}
81
		stackTraceBox.setLayoutData(gd);
82
		stackTraceBox.addModifyListener(new ModifyListener() {
83
			public void modifyText(ModifyEvent arg0) {
84
				if ("".equals(stackTraceBox.getText().trim())) {
85
					setPageComplete(false);
86
				} else {
87
					setPageComplete(true);
88
				}
89
			}
90
		});
91
	}
92
93
	public DuplicateDetectionData getDuplicateData() {
94
		if (stackTraceBox != null) {
95
			// in case stack trace is user modified
96
			duplicateData.setStackTrace(stackTraceBox.getText());
97
		}
98
		return duplicateData;
99
	}
100
101
	public IWizardPage getNextPage() {
102
		DisplayRelatedReportsPage nextPage = (DisplayRelatedReportsPage) super.getNextPage();
103
		nextPage.setRelatedTasks(((AbstractDuplicateDetectingReportWizard) getWizard())
104
				.searchForDuplicates(getDuplicateData()));
105
106
		return super.getNextPage();
107
	}
108
109
	public boolean canFlipToNextPage() {
110
		return !"".equals(stackTraceBox.getText());
111
	}
112
}
(-)src/org/eclipse/mylar/internal/tasks/ui/wizards/DisplayRelatedReportsPage.java (+357 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2004 - 2006 Mylar committers and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *******************************************************************************/
8
9
package org.eclipse.mylar.internal.tasks.ui.wizards;
10
11
import java.util.Iterator;
12
import java.util.LinkedList;
13
import java.util.List;
14
import java.util.StringTokenizer;
15
16
import org.eclipse.jface.wizard.WizardPage;
17
import org.eclipse.mylar.tasks.core.AbstractRepositoryTask;
18
import org.eclipse.mylar.tasks.core.RepositoryTaskData;
19
import org.eclipse.mylar.tasks.ui.TasksUiPlugin;
20
import org.eclipse.swt.SWT;
21
import org.eclipse.swt.events.SelectionEvent;
22
import org.eclipse.swt.events.SelectionListener;
23
import org.eclipse.swt.events.TreeEvent;
24
import org.eclipse.swt.events.TreeListener;
25
import org.eclipse.swt.graphics.GC;
26
import org.eclipse.swt.graphics.Point;
27
import org.eclipse.swt.graphics.Rectangle;
28
import org.eclipse.swt.layout.FillLayout;
29
import org.eclipse.swt.layout.GridData;
30
import org.eclipse.swt.layout.GridLayout;
31
import org.eclipse.swt.layout.RowLayout;
32
import org.eclipse.swt.widgets.Composite;
33
import org.eclipse.swt.widgets.Display;
34
import org.eclipse.swt.widgets.Event;
35
import org.eclipse.swt.widgets.Label;
36
import org.eclipse.swt.widgets.Listener;
37
import org.eclipse.swt.widgets.Shell;
38
import org.eclipse.swt.widgets.TableItem;
39
import org.eclipse.swt.widgets.Tree;
40
import org.eclipse.swt.widgets.TreeColumn;
41
import org.eclipse.swt.widgets.TreeItem;
42
43
/**
44
 * 
45
 * @author Jeff Pound
46
 */
47
public class DisplayRelatedReportsPage extends WizardPage {
48
49
	private static final String PAGE_DESCRIPTION = "Select duplicate report candidates to open and comment on them.  Otherwise press finish to create new one.";
50
51
	static final String PAGE_NAME = "DisplayRelatedReportsPage";
52
53
	private static final String PAGE_TITLE = "Related Reports";
54
55
	private static final int LINES_PER_ITEM = 3;
56
57
	private List<AbstractRepositoryTask> relatedTasks;
58
59
	private String[] columnHeaders = { "Related Reports" };
60
61
	private Tree duplicatesTree;
62
63
	private int[] columnWidths = { 550 };
64
65
	protected DisplayRelatedReportsPage() {
66
		super(PAGE_NAME);
67
		setTitle(PAGE_TITLE);
68
		setDescription(PAGE_DESCRIPTION);
69
		// Description doesn't show up without an image present TODO: proper image.
70
		setImageDescriptor(TasksUiPlugin.imageDescriptorFromPlugin("org.eclipse.mylar.bugzilla.ui",
71
				"icons/wizban/bug-wizard.gif"));
72
	}
73
74
	public void createControl(Composite parent) {
75
		Composite composite = new Composite(parent, SWT.NONE);
76
		composite.setLayout(new GridLayout());
77
		setControl(composite);
78
79
		duplicatesTree = new Tree(composite, SWT.MULTI | SWT.CHECK | SWT.FULL_SELECTION);
80
		duplicatesTree.setLayoutData(new GridData(GridData.FILL_BOTH));
81
82
		RowLayout gl = new RowLayout();
83
		gl.spacing = 30;
84
		duplicatesTree.setLayout(gl);
85
86
		duplicatesTree.setHeaderVisible(true);
87
		duplicatesTree.setLinesVisible(true);
88
89
		for (int i = 0; i < columnHeaders.length; i++) {
90
			TreeColumn column = new TreeColumn(duplicatesTree, SWT.NONE);
91
			column.setText(columnHeaders[i]);
92
		}
93
94
		/*
95
		 * Adapted from snippet 227
96
		 * http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet227.java?rev=HEAD&content-type=text/vnd.viewcvs-markup
97
		 */
98
		Listener paintListener = new Listener() {
99
			public void handleEvent(Event event) {
100
				switch (event.type) {
101
				case SWT.MeasureItem: {
102
					String text = ((TreeItem) event.item).getText();
103
					Point size = event.gc.textExtent(text);
104
					event.width = size.x;
105
					event.height = Math.max(event.height, size.y);
106
					break;
107
				}
108
				case SWT.PaintItem: {
109
					String text = ((TreeItem) event.item).getText();
110
					Point size = event.gc.textExtent(text);
111
					int offset2 = event.index == 0 ? Math.max(0, (event.height - size.y) / 2) : 0;
112
					event.gc.drawText(text, event.x, event.y + offset2, true);
113
					break;
114
				}
115
				case SWT.EraseItem: {
116
					event.detail &= ~SWT.FOREGROUND;
117
					break;
118
				}
119
				}
120
			}
121
		};
122
		duplicatesTree.addListener(SWT.MeasureItem, paintListener);
123
		duplicatesTree.addListener(SWT.PaintItem, paintListener);
124
		duplicatesTree.addListener(SWT.EraseItem, paintListener);
125
		duplicatesTree.addTreeListener(new TreeListener() {
126
			public void treeCollapsed(TreeEvent arg0) {
127
				// packTable();
128
			}
129
130
			public void treeExpanded(TreeEvent arg0) {
131
				// packTable();
132
			}
133
		});
134
135
		registerToolTipListeners();
136
	}
137
138
	/*
139
	 * Adapted from SWT snippet 125
140
	 * http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet125.java?rev=HEAD&content-type=text/vnd.viewcvs-markup
141
	 */
142
	private void registerToolTipListeners() {
143
		final Shell shell = duplicatesTree.getShell();
144
		final Display display = duplicatesTree.getDisplay();
145
146
		// Disable native tooltip
147
		duplicatesTree.setToolTipText("");
148
149
		// Implement a "fake" tooltip
150
		final Listener labelListener = new Listener() {
151
			public void handleEvent(Event event) {
152
				Label label = (Label) event.widget;
153
				Shell shell = label.getShell();
154
				switch (event.type) {
155
				case SWT.MouseDown:
156
					Event e = new Event();
157
					e.item = (TableItem) label.getData("_TABLEITEM");
158
					// Assuming table is single select, set the selection as if
159
					// the mouse down event went through to the table
160
					duplicatesTree.setSelection(new TreeItem[] { (TreeItem) e.item });
161
					duplicatesTree.notifyListeners(SWT.Selection, e);
162
					// fall through
163
				case SWT.MouseExit:
164
					shell.dispose();
165
					break;
166
				}
167
			}
168
		};
169
170
		Listener tableListener = new Listener() {
171
			Shell tip = null;
172
173
			Label label = null;
174
175
			public void handleEvent(Event event) {
176
				switch (event.type) {
177
				case SWT.Dispose:
178
				case SWT.KeyDown:
179
				case SWT.MouseMove: {
180
					if (tip == null)
181
						break;
182
					tip.dispose();
183
					tip = null;
184
					label = null;
185
					break;
186
				}
187
				case SWT.MouseHover: {
188
					TreeItem item = duplicatesTree.getItem(new Point(event.x, event.y));
189
					if (item != null) {
190
						if (tip != null && !tip.isDisposed())
191
							tip.dispose();
192
						tip = new Shell(shell, SWT.ON_TOP | SWT.TOOL);
193
						tip.setLayout(new FillLayout());
194
						label = new Label(tip, SWT.NONE);
195
						label.setForeground(display.getSystemColor(SWT.COLOR_INFO_FOREGROUND));
196
						label.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND));
197
						label.setData("_TABLEITEM", item);
198
						label.setText((String) item.getData());
199
						label.addListener(SWT.MouseExit, labelListener);
200
						label.addListener(SWT.MouseDown, labelListener);
201
						Point size = tip.computeSize(SWT.DEFAULT, SWT.DEFAULT);
202
						Rectangle rect = item.getBounds(0);
203
						Point pt = duplicatesTree.toDisplay(rect.x, rect.y);
204
						tip.setBounds(pt.x, pt.y, size.x, size.y);
205
						tip.setVisible(true);
206
					}
207
				}
208
				}
209
			}
210
		};
211
		duplicatesTree.addListener(SWT.Dispose, tableListener);
212
		duplicatesTree.addListener(SWT.KeyDown, tableListener);
213
		duplicatesTree.addListener(SWT.MouseMove, tableListener);
214
		duplicatesTree.addListener(SWT.MouseHover, tableListener);
215
216
	}
217
218
	private void packTable() {
219
		for (int i = 0; i < columnHeaders.length; i++) {
220
			// duplicatesTree.getColumn(i).pack();
221
			duplicatesTree.getColumn(i).setWidth(columnWidths[i]);
222
		}
223
		duplicatesTree.redraw();
224
	}
225
226
	public List<AbstractRepositoryTask> getRelatedTasks() {
227
		return relatedTasks;
228
	}
229
230
	public void setRelatedTasks(List<AbstractRepositoryTask> relatedTasks) {
231
		duplicatesTree.removeAll();
232
		this.relatedTasks = relatedTasks;
233
		if (duplicatesTree == null || this.relatedTasks == null) {
234
			return;
235
		}
236
237
		SelectionListener selectAllListener = new SelectionListener() {
238
			public void widgetDefaultSelected(SelectionEvent arg0) {
239
				// ignore
240
			}
241
242
			public void widgetSelected(SelectionEvent event) {
243
				TreeItem item = (TreeItem) event.item;
244
				if (item.getParentItem() != null) {
245
					item.getParentItem().setChecked(item.getChecked());
246
				}
247
				if (item.getItems() != null && item.getItems().length > 0) {
248
					item.getItems()[0].setChecked(item.getChecked());
249
				}
250
			}
251
		};
252
		duplicatesTree.addSelectionListener(selectAllListener);
253
254
		// update the table
255
		Iterator<AbstractRepositoryTask> iter = this.relatedTasks.iterator();
256
		while (iter.hasNext()) {
257
			AbstractRepositoryTask task = iter.next();
258
			RepositoryTaskData taskData = task.getTaskData();
259
			if (taskData == null) {
260
				iter.remove();
261
				continue;
262
			}
263
			TreeItem item = new TreeItem(duplicatesTree, SWT.NONE);
264
			item.setText(new String[] { formatTreeText(taskData.getSummary(), LINES_PER_ITEM - 1) });
265
			TreeItem descItem = new TreeItem(item, SWT.NONE);
266
			descItem.setText(formatTreeText(taskData.getDescription()));
267
			descItem.setGrayed(true);
268
269
			String toolTip = "Report Id: " + taskData.getId() + "\nCreated on: " + taskData.getCreated()
270
					+ "\nCreated by: " + taskData.getReporter() + "\nAssigned to: " + taskData.getAssignedTo();
271
			item.setData(toolTip);
272
			descItem.setData(toolTip);
273
		}
274
		packTable();
275
	}
276
277
	private String formatTreeText(String text) {
278
		return formatTreeText(text, LINES_PER_ITEM);
279
	}
280
281
	private String formatTreeText(String text, int maxLines) {
282
		GC gc = new GC(duplicatesTree);
283
		int avgCharWidth = gc.getFontMetrics().getAverageCharWidth();
284
		gc.dispose();
285
286
		text = text.replace("\n", " ");
287
		StringTokenizer strtok = new StringTokenizer(text);
288
		StringBuffer formatText = new StringBuffer();
289
		int charsPerLine = columnWidths[0] / avgCharWidth;
290
		int lines = 0;
291
292
		// character wrap
293
		// while (strtok.hasMoreTokens() && lines < maxLines) {
294
		// String line = strtok.nextToken();
295
		// while (line.length() > charsPerLine && lines < maxLines) {
296
		// String trimmedLine = line.substring(0, charsPerLine);
297
		// formatText.append(trimmedLine + "\n");
298
		// lines++;
299
		// line = line.substring(charsPerLine);
300
		// }
301
		// formatText.append(line + "\n");
302
		// lines++;
303
		// }
304
305
		// word wrap
306
		StringBuffer line = new StringBuffer();
307
		while (strtok.hasMoreTokens() && lines < maxLines) {
308
			String word = strtok.nextToken();
309
			while (strtok.hasMoreTokens() && line.length() + word.length() < charsPerLine) {
310
				line.append(word + ((line.length() + word.length() + 1 > charsPerLine) ? "" : " "));
311
				word = strtok.nextToken();
312
			}
313
			if (!strtok.hasMoreTokens()) {
314
				line.append(word);
315
			}
316
			formatText.append(((formatText.length() == 0) ? "" : "\n") + line.toString());
317
			lines++;
318
			line.delete(0, line.length());
319
			line.append(word + " ");
320
		}
321
322
		// pad elements to ensure no weird repaint artifacts
323
		// this also centres text in the element (aligned with tree arrow)
324
		if (lines < LINES_PER_ITEM) {
325
			int diff = LINES_PER_ITEM - lines;
326
			for (int i = 0; i < diff / 2; i++) {
327
				formatText.append("\n ");
328
				lines++;
329
			}
330
			while (lines < LINES_PER_ITEM) {
331
				formatText.insert(0, " \n");
332
				lines++;
333
			}
334
			lines++;
335
		}
336
337
		// add "..." if we're cutting off the text
338
		if (strtok.hasMoreTokens()) {
339
			formatText.replace(formatText.length() - 4, formatText.length(), "...");
340
		}
341
342
		return formatText.toString();
343
	}
344
345
	public List<AbstractRepositoryTask> getSelectedReports() {
346
		List<AbstractRepositoryTask> selected = new LinkedList<AbstractRepositoryTask>();
347
		TreeItem[] items = duplicatesTree.getItems();
348
349
		for (int i = 0; i < items.length; i++) {
350
			if (items[i].getChecked()) {
351
				selected.add(relatedTasks.get(i));
352
			}
353
		}
354
355
		return selected;
356
	}
357
}
(-)src/org/eclipse/mylar/internal/tasks/ui/wizards/DuplicateDetectionData.java (+27 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2004 - 2006 Mylar committers and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *******************************************************************************/
8
9
package org.eclipse.mylar.internal.tasks.ui.wizards;
10
11
/**
12
 * 
13
 * @author Jeff Pound
14
 */
15
public class DuplicateDetectionData {
16
17
	// TODO add more fields to detect duplicates against
18
	private String stackTrace = "";
19
20
	public String getStackTrace() {
21
		return stackTrace;
22
	}
23
24
	public void setStackTrace(String stackTrace) {
25
		this.stackTrace = stackTrace;
26
	}
27
}
(-)src/org/eclipse/mylar/internal/tasks/ui/wizards/AbstractDuplicateDetectingReportWizard.java (+62 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2004 - 2006 Mylar committers and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *******************************************************************************/
8
9
package org.eclipse.mylar.internal.tasks.ui.wizards;
10
11
import java.util.Iterator;
12
import java.util.LinkedList;
13
import java.util.List;
14
import java.util.Queue;
15
16
import org.eclipse.jface.wizard.IWizardPage;
17
import org.eclipse.jface.wizard.Wizard;
18
import org.eclipse.mylar.tasks.core.AbstractRepositoryTask;
19
20
/**
21
 * 
22
 * @author Jeff Pound
23
 */
24
public abstract class AbstractDuplicateDetectingReportWizard extends Wizard {
25
26
	private Queue<IWizardPage> queue = new LinkedList<IWizardPage>();
27
28
	public AbstractDuplicateDetectingReportWizard() {
29
		setNeedsProgressMonitor(true);
30
	}
31
32
	public void queuePage(IWizardPage page) {
33
		queue.add(page);
34
	}
35
36
	public void addQueuedPages() {
37
		Iterator<IWizardPage> iter = queue.iterator();
38
		while (iter.hasNext()) {
39
			addPage(iter.next());
40
		}
41
	}
42
43
	public boolean canFinish() {
44
		IWizardPage findDups = getPage(FindRelatedReportsPage.PAGE_NAME);
45
		if (findDups == null) {
46
			return super.canFinish();
47
		}
48
49
		return !findDups.equals(getContainer().getCurrentPage()) && super.canFinish();
50
	}
51
52
	public List<AbstractRepositoryTask> getSelectedDuplicates() {
53
		DisplayRelatedReportsPage displayDups = (DisplayRelatedReportsPage) getPage(DisplayRelatedReportsPage.PAGE_NAME);
54
		if (displayDups == null) {
55
			return null;
56
		}
57
58
		return displayDups.getSelectedReports();
59
	}
60
61
	public abstract List<AbstractRepositoryTask> searchForDuplicates(DuplicateDetectionData data);
62
}
(-)src/org/eclipse/mylar/internal/bugzilla/ui/wizard/NewBugzillaReportWizard.java (-5 / +76 lines)
Lines 10-24 Link Here
10
 *******************************************************************************/
10
 *******************************************************************************/
11
package org.eclipse.mylar.internal.bugzilla.ui.wizard;
11
package org.eclipse.mylar.internal.bugzilla.ui.wizard;
12
12
13
import java.io.UnsupportedEncodingException;
14
import java.net.URLEncoder;
15
import java.util.Iterator;
16
import java.util.LinkedList;
17
import java.util.List;
18
13
import org.eclipse.core.runtime.IStatus;
19
import org.eclipse.core.runtime.IStatus;
20
import org.eclipse.core.runtime.MultiStatus;
21
import org.eclipse.core.runtime.NullProgressMonitor;
14
import org.eclipse.core.runtime.Status;
22
import org.eclipse.core.runtime.Status;
15
import org.eclipse.jface.viewers.IStructuredSelection;
23
import org.eclipse.jface.viewers.IStructuredSelection;
16
import org.eclipse.jface.wizard.Wizard;
24
import org.eclipse.mylar.internal.bugzilla.core.BugzillaPlugin;
17
import org.eclipse.mylar.internal.bugzilla.core.NewBugzillaReport;
25
import org.eclipse.mylar.internal.bugzilla.core.NewBugzillaReport;
18
import org.eclipse.mylar.internal.bugzilla.ui.BugzillaUiPlugin;
26
import org.eclipse.mylar.internal.bugzilla.ui.BugzillaUiPlugin;
19
import org.eclipse.mylar.internal.bugzilla.ui.editor.NewBugEditorInput;
27
import org.eclipse.mylar.internal.bugzilla.ui.editor.NewBugEditorInput;
28
import org.eclipse.mylar.internal.bugzilla.ui.tasklist.BugzillaRepositoryQuery;
20
import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil;
29
import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil;
30
import org.eclipse.mylar.internal.tasks.ui.editors.AbstractBugEditorInput;
31
import org.eclipse.mylar.internal.tasks.ui.editors.ExistingBugEditorInput;
32
import org.eclipse.mylar.internal.tasks.ui.wizards.AbstractDuplicateDetectingReportWizard;
33
import org.eclipse.mylar.internal.tasks.ui.wizards.DuplicateDetectionData;
34
import org.eclipse.mylar.tasks.core.AbstractQueryHit;
35
import org.eclipse.mylar.tasks.core.AbstractRepositoryTask;
21
import org.eclipse.mylar.tasks.core.TaskRepository;
36
import org.eclipse.mylar.tasks.core.TaskRepository;
37
import org.eclipse.mylar.tasks.ui.AbstractRepositoryConnector;
22
import org.eclipse.mylar.tasks.ui.TasksUiPlugin;
38
import org.eclipse.mylar.tasks.ui.TasksUiPlugin;
23
import org.eclipse.ui.INewWizard;
39
import org.eclipse.ui.INewWizard;
24
import org.eclipse.ui.IWorkbench;
40
import org.eclipse.ui.IWorkbench;
Lines 29-35 Link Here
29
 * @author Mik Kersten
45
 * @author Mik Kersten
30
 * @author Rob Elves
46
 * @author Rob Elves
31
 */
47
 */
32
public class NewBugzillaReportWizard extends Wizard implements INewWizard {
48
public class NewBugzillaReportWizard extends AbstractDuplicateDetectingReportWizard implements INewWizard {
33
49
34
	private static final String TITLE = "New Bugzilla Task";
50
	private static final String TITLE = "New Bugzilla Task";
35
51
Lines 75-90 Link Here
75
		super.addPages();
91
		super.addPages();
76
		addPage(productPage);
92
		addPage(productPage);
77
93
94
		super.addQueuedPages();
78
	}
95
	}
79
96
80
	@Override
97
	@Override
81
	public boolean canFinish() {
98
	public boolean canFinish() {
82
		return completed;
99
		return completed && super.canFinish();
83
	}
100
	}
84
101
85
	@Override
102
	@Override
86
	public boolean performFinish() {
103
	public boolean performFinish() {
87
104
		List<AbstractRepositoryTask> dups = getSelectedDuplicates();
105
		if (dups != null && !dups.isEmpty()) {
106
			Iterator<AbstractRepositoryTask> iter = dups.iterator();
107
			IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
108
			while (iter.hasNext()) {
109
				AbstractRepositoryTask task = iter.next();
110
				AbstractBugEditorInput editorInput = new ExistingBugEditorInput(TasksUiPlugin.getRepositoryManager()
111
						.getRepository(task.getRepositoryKind(), task.getRepositoryUrl()), task.getTaskData());
112
				TaskUiUtil.openEditor(editorInput, BugzillaUiPlugin.EXISTING_BUG_EDITOR_ID, page);
113
			}
114
			return true;
115
		}
88
		try {
116
		try {
89
			productPage.saveDataToModel();
117
			productPage.saveDataToModel();
90
			NewBugEditorInput editorInput = new NewBugEditorInput(repository, model);
118
			NewBugEditorInput editorInput = new NewBugEditorInput(repository, model);
Lines 98-103 Link Here
98
		return false;
126
		return false;
99
	}
127
	}
100
128
129
	/**
130
	 * Perform a query using the given duplicate detection criteria and return a
131
	 * list of tasks which match.
132
	 */
133
	@Override
134
	public List<AbstractRepositoryTask> searchForDuplicates(DuplicateDetectionData data) {
135
		// RepositoryQueryResultsFactory factory = new
136
		// RepositoryQueryResultsFactory();
137
		// IBugzillaSearchResultCollector collector = new
138
		// BugzillaSearchResultCollector();
139
		// factory.performQuery(repository.getUrl(), collector, queryUrl,
140
		// proxySettings, 20, BugzillaPlugin.ENCODING_UTF_8);
141
142
		String[] products = productPage.getSelectedProducts();
143
144
		// TODO: Is there a class that can create this string?
145
		String queryUrl;
146
		try {
147
			queryUrl = repository.getUrl() + "/buglist.cgi?long_desc_type=allwordssubstr&long_desc="
148
					+ URLEncoder.encode("Stack Trace:\n" + data.getStackTrace(), BugzillaPlugin.ENCODING_UTF_8);
149
		} catch (UnsupportedEncodingException e) {
150
			// This should never happen
151
			return null;
152
		}
153
154
		for (int i = 0; i < products.length; i++) {
155
			queryUrl += "&product=" + products[i];
156
		}
157
158
		List<AbstractRepositoryTask> tasks = new LinkedList<AbstractRepositoryTask>();
159
		BugzillaRepositoryQuery repositoryQuery = new BugzillaRepositoryQuery(repository.getUrl(), queryUrl,
160
				"DUPLICATE_DETECTION_QUERY", "20", TasksUiPlugin.getTaskListManager().getTaskList());
161
		AbstractRepositoryConnector connector = (AbstractRepositoryConnector) TasksUiPlugin.getRepositoryManager()
162
				.getRepositoryConnector(BugzillaPlugin.REPOSITORY_KIND);
163
		List<AbstractQueryHit> hits = connector.performQuery(repositoryQuery, new NullProgressMonitor(),
164
				new MultiStatus(TasksUiPlugin.PLUGIN_ID, IStatus.OK, "Query result", null));
165
		Iterator<AbstractQueryHit> iterator = hits.iterator();
166
		while (iterator.hasNext()) {
167
			tasks.add(iterator.next().getOrCreateCorrespondingTask());
168
		}
169
170
		return tasks;
171
	}
101
}
172
}
102
173
103
// @Override
174
// @Override
Lines 160-163 Link Here
160
// MylarTaskListPlugin.getSynchronizationManager().synchNow(0);
231
// MylarTaskListPlugin.getSynchronizationManager().synchNow(0);
161
//
232
//
162
// return true;
233
// return true;
163
// }
234
// }
(-)src/org/eclipse/mylar/internal/bugzilla/ui/wizard/BugzillaProductPage.java (-2 / +2 lines)
Lines 287-293 Link Here
287
		listBox.setFocus();
287
		listBox.setFocus();
288
	}
288
	}
289
289
290
	private String[] getSelectedProducts() {
290
	protected String[] getSelectedProducts() {
291
		ArrayList<String> products = new ArrayList<String>();
291
		ArrayList<String> products = new ArrayList<String>();
292
		if (selection == null) {
292
		if (selection == null) {
293
			return products.toArray(new String[0]);
293
			return products.toArray(new String[0]);
Lines 513-516 Link Here
513
	// return super.getNextPage();
513
	// return super.getNextPage();
514
	// }
514
	// }
515
515
516
}
516
}
(-)src/org/eclipse/mylar/internal/bugzilla/ui/editor/ExistingBugEditor.java (+4 lines)
Lines 261-266 Link Here
261
		FormToolkit toolkit = new FormToolkit(composite.getDisplay());
261
		FormToolkit toolkit = new FormToolkit(composite.getDisplay());
262
		RepositoryTaskAttribute owner = taskData.getAttribute(RepositoryTaskAttribute.USER_ASSIGNED);
262
		RepositoryTaskAttribute owner = taskData.getAttribute(RepositoryTaskAttribute.USER_ASSIGNED);
263
263
264
		if (repository.getUserName() == null) {
265
			return;
266
		}
267
		
264
		if (owner != null && owner.getValue().indexOf(repository.getUserName()) != -1) {
268
		if (owner != null && owner.getValue().indexOf(repository.getUserName()) != -1) {
265
			return;
269
			return;
266
		}
270
		}

Return to bug 143567