diff options
author | cvs2git | 2006-10-10 18:34:45 +0000 |
---|---|---|
committer | cvs2git | 2006-10-10 18:34:45 +0000 |
commit | e2ba560778857295ec8e9e661d5beb8a21774430 (patch) | |
tree | 41042be0d1a47293a251df36efe00df1ca635d3e | |
parent | 81d5ee692be4b4814a957443cb93fbb6c09c830d (diff) | |
download | org.eclipse.mylyn.tasks-e2ba560778857295ec8e9e661d5beb8a21774430.tar.gz org.eclipse.mylyn.tasks-e2ba560778857295ec8e9e661d5beb8a21774430.tar.xz org.eclipse.mylyn.tasks-e2ba560778857295ec8e9e661d5beb8a21774430.zip |
This commit was manufactured by cvs2svn to create branch 'e_3_2'.
Sprout from master 2006-09-30 04:03:57 UTC mkersten 'Version update'
Cherrypick from master 2006-10-10 18:34:44 UTC relves 'Progress on: 160117: "Mark read" on bugzilla query does not mark query hits read':
org.eclipse.mylyn.bugzilla.core/build.properties
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/AbstractRepositoryTasksAction.java
Delete:
org.eclipse.mylyn.bugzilla.core/.classpath
org.eclipse.mylyn.bugzilla.core/META-INF/MANIFEST.MF
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/AbstractReportFactory.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaAttachmentHandler.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaAttributeFactory.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaCorePlugin.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaException.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaOfflineTaskHandler.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaQueryHit.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaReportElement.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaReportSubmitForm.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaRepositoryConnector.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaRepositoryQuery.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaServerFacade.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaTask.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/IBugzillaConstants.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/KeywordParser.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/NewBugzillaReport.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/PossibleBugzillaFailureException.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryConfiguration.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryConfigurationFactory.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryQueryResultsFactory.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryReportFactory.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/SaxBugReportContentHandler.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/SaxBugzillaQueryContentHandler.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/SaxConfigurationContentHandler.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/UnrecognizedReponseException.java
org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/XmlCleaner.java
org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/AbstractBugzillaTest.java
org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaConfigurationTest.java
org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaProductParserTest.java
org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaRepositoryConnectorTest.java
org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaSearchDialogTest.java
org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaSearchEngineTest.java
org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaTaskDataMigrationTest.java
org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaTaskHyperlinkDetectorTest.java
org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaTaskListManagerTest.java
org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaTaskTest.java
org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaTestUtil.java
org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/DuplicateDetetionTest.java
org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/EncodingTest.java
org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/NewBugWizardTest.java
org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/RepositoryEditorWizardTest.java
org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/RepositoryReportFactoryTest.java
org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/RepositoryTaskHandleTest.java
org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/TaskEditorTest.java
org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/TaskListNotificationManagerTest.java
org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/TaskListStandaloneTest.java
org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/TaskReportGeneratorTest.java
org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/headless/BugzillaQueryTest.java
org.eclipse.mylyn.bugzilla.tests/testdata/configuration/rdfconfig218.txt
org.eclipse.mylyn.bugzilla.ui/.classpath
org.eclipse.mylyn.bugzilla.ui/META-INF/MANIFEST.MF
org.eclipse.mylyn.bugzilla.ui/plugin.xml
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaAuthenticator.java
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaHyperLink.java
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaResultMatchAdapter.java
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaTaskHyperlinkDetector.java
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaUiPlugin.java
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/BugSubmissionHandler.java
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/ExistingBugEditor.java
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/NewBugEditor.java
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/NewBugEditorInput.java
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/NewBugzillaTaskEditor.java
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/search/BugzillaSearchPage.java
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/search/IBugzillaResultEditorMatchAdapter.java
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaCustomQueryWizardPage.java
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaReportEditorFactory.java
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaRepositorySettingsPage.java
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaRepositoryUi.java
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaTaskDecorator.java
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaTaskEditor.java
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaTaskEditorInput.java
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaTaskExternalizer.java
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/EditBugzillaQueryWizard.java
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/NewBugzillaQueryWizard.java
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/OpenBugzillaReportJob.java
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/wizard/BugzillaProductPage.java
org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/wizard/NewBugzillaTaskWizard.java
org.eclipse.mylyn.help.ui/.classpath
org.eclipse.mylyn.help.ui/.settings/org.eclipse.jdt.core.prefs
org.eclipse.mylyn.help.ui/.settings/org.eclipse.jdt.ui.prefs
org.eclipse.mylyn.help.ui/META-INF/MANIFEST.MF
org.eclipse.mylyn.help.ui/doc/context.html
org.eclipse.mylyn.help.ui/doc/contributing.html
org.eclipse.mylyn.help.ui/doc/dev/changes.html
org.eclipse.mylyn.help.ui/doc/dev/dependencies.vsd
org.eclipse.mylyn.help.ui/doc/dev/index.html
org.eclipse.mylyn.help.ui/doc/dev/model.vsd
org.eclipse.mylyn.help.ui/doc/dev/plan.html
org.eclipse.mylyn.help.ui/doc/faq.html
org.eclipse.mylyn.help.ui/doc/images/0.3/active-hierarchy.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/active-search-linked.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/active-search-manipulation.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/active-search-qualify.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/active-search.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/alt-click.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/bugzilla-hyperlink.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/bugzilla-internal-browser.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/bugzilla-query-custom.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/bugzilla-synch.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/filter-auto-toggle.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/filtering-ant.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/filtering-declarations.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/filtering-exclusion.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/filtering-navigator.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/folding-toggle.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/highlight.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/interest-content-assist.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/interest-error.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/interest-java-browsing.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/interest-manipulate.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/monitor-enable.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/open-type.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/overview.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/preference-error-interest.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/search-context.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/task-context-visible.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/tasklist-actions.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-archive.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-drilldown.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-go-navigation.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-history.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-offline.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-quick-filter.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-reminders.gif
org.eclipse.mylyn.help.ui/doc/images/0.3/test-context.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.1/bugzilla-editor-browser.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.1/bugzilla-prefs-220.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.1/bugzilla-prefs-open-reports.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.1/context-pause.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.1/tasklist-context.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.1/tasklist-export.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.1/tasklist-popup.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.1/tasklist-weblink-editor.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.1/tasklist-weblink.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.10/bugzilla-editor.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.10/bugzilla-versions.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.10/task-activity.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.10/tasklist-status.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.2/context-change-set.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.2/context-commit-prefix.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.2/context-commit-wizard.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.2/context-commit.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.2/problems-hierarchical.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.2/tasklist-editors-manage.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.3/bugzilla-outline.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.3/context-capture-pause-indicator.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.3/cvs-resource-history-open.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.3/editors-auto-manage-pref.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.3/editors-auto-manage.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.3/synchronize-change-sets.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.4/changeset-addto.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.5/taskist-planner.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.5/tasklist-drag.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.6/tasklist-pastreminder.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.7/bugzilla-encoding.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.7/tasklist-open-external.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.7/tasklist-repositories.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.9/jira-query.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.9/jira-select-type.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.9/tasklist-import.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.9/tasklist-indication-active.gif
org.eclipse.mylyn.help.ui/doc/images/0.4.9/tasklist-notification.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.0/apply-project-explorer.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.0/apply-task-markers.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.0/colors-and-fonts.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.0/navigate-alt-click.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.0/open-task-from-history.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.0/query-synchronization.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.0/resource-history-open-task.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.0/task-editor-hyperlinks.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.0/tasklist-archive.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.0/tasklist-backup.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.1/apply-tasklist.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.1/context-attach-popup.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.1/context-retrieve.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.1/editors-close.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.1/jira-query-custom.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.2/bugzilla-encodings-editor.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.2/bugzilla-encodings-settings.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.2/bugzilla-search.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.2/changesets-model-based.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.2/jira-editor.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.2/task-repository-sync.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.2/tasklist-apply-mylar.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.3/bugzilla-attach.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.3/changeset-subclipse.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.3/repository-synch.gif
org.eclipse.mylyn.help.ui/doc/images/0.5.3/resources-exclusion.gif
org.eclipse.mylyn.help.ui/doc/images/0.6.0/bugzilla-attachments.gif
org.eclipse.mylyn.help.ui/doc/images/0.6.0/bugzilla-notifications.gif
org.eclipse.mylyn.help.ui/doc/images/0.6.0/bugzilla-search.gif
org.eclipse.mylyn.help.ui/doc/images/0.6.0/jira-new.gif
org.eclipse.mylyn.help.ui/doc/images/0.6.0/perspective-management.gif
org.eclipse.mylyn.help.ui/doc/images/0.6.0/task-editor-menu.gif
org.eclipse.mylyn.help.ui/doc/images/0.6.1/context-debug.gif
org.eclipse.mylyn.help.ui/doc/images/0.6.1/context-prefs-ui-management.gif
org.eclipse.mylyn.help.ui/doc/images/0.6.1/jira-query.gif
org.eclipse.mylyn.help.ui/doc/images/0.6.1/tasks-create-error-log.gif
org.eclipse.mylyn.help.ui/doc/images/0.6.1/tasks-duplicate-detection.gif
org.eclipse.mylyn.help.ui/doc/images/0.6.1/tasks-editor-hyperlinks.gif
org.eclipse.mylyn.help.ui/doc/images/0.6.1/trac-add-repository.gif
org.eclipse.mylyn.help.ui/doc/images/0.6.1/trac-editor-web.gif
org.eclipse.mylyn.help.ui/doc/images/0.6.1/trac-query.gif
org.eclipse.mylyn.help.ui/doc/images/0.6.2/attachments-open.gif
org.eclipse.mylyn.help.ui/doc/images/0.6.2/open-task-dialog.gif
org.eclipse.mylyn.help.ui/doc/images/0.6.2/package-explorer-hierarchical.gif
org.eclipse.mylyn.help.ui/doc/images/0.6.2/spell-checking.gif
org.eclipse.mylyn.help.ui/doc/images/0.6.2/tasklist-restore.gif
org.eclipse.mylyn.help.ui/doc/images/0.6.2/trac-editor.gif
org.eclipse.mylyn.help.ui/doc/images/0.6.2/trac-search.gif
org.eclipse.mylyn.help.ui/doc/images/0.7.0/bugzilla-attributes.gif
org.eclipse.mylyn.help.ui/doc/images/0.7.0/task-editor-improvements.gif
org.eclipse.mylyn.help.ui/doc/images/0.7.0/task-mark-unread.gif
org.eclipse.mylyn.help.ui/doc/images/0.7.0/task-repository-association.gif
org.eclipse.mylyn.help.ui/doc/images/dev/gray.gif
org.eclipse.mylyn.help.ui/doc/images/dev/tbar_l.gif
org.eclipse.mylyn.help.ui/doc/images/dev/tbar_r.gif
org.eclipse.mylyn.help.ui/doc/images/faq/changeset-subclipse.gif
org.eclipse.mylyn.help.ui/doc/images/faq/changesets-model-based.gif
org.eclipse.mylyn.help.ui/doc/images/faq/content-assist.gif
org.eclipse.mylyn.help.ui/doc/images/faq/eclipse-manage-configuration.gif
org.eclipse.mylyn.help.ui/doc/images/faq/filtering-declarations.gif
org.eclipse.mylyn.help.ui/doc/images/faq/tasklist-backup.gif
org.eclipse.mylyn.help.ui/doc/images/reference/book-allen-gettingThingsDone.gif
org.eclipse.mylyn.help.ui/doc/images/reference/book-beck-xp.gif
org.eclipse.mylyn.help.ui/doc/images/reference/book-bloch-effectiveJava.gif
org.eclipse.mylyn.help.ui/doc/images/reference/book-gamma-eclipse.gif
org.eclipse.mylyn.help.ui/doc/images/tips/icon-task-completed.gif
org.eclipse.mylyn.help.ui/doc/images/tips/icon-task-notes.gif
org.eclipse.mylyn.help.ui/doc/images/tips/icon-task.gif
org.eclipse.mylyn.help.ui/doc/integrating.html
org.eclipse.mylyn.help.ui/doc/new-0.3.html
org.eclipse.mylyn.help.ui/doc/new-0.4.html
org.eclipse.mylyn.help.ui/doc/new-0.5.html
org.eclipse.mylyn.help.ui/doc/new.html
org.eclipse.mylyn.help.ui/doc/overview.html
org.eclipse.mylyn.help.ui/doc/tips.html
org.eclipse.mylyn.help.ui/doc/toc.xml
org.eclipse.mylyn.help.ui/plugin.xml
org.eclipse.mylyn.help.ui/src/org/eclipse/mylyn/doc/internal/dialogs/UiLegendDialog.java
org.eclipse.mylyn.tasks.core/.settings/org.eclipse.jdt.core.prefs
org.eclipse.mylyn.tasks.core/.settings/org.eclipse.jdt.ui.prefs
org.eclipse.mylyn.tasks.core/META-INF/MANIFEST.MF
org.eclipse.mylyn.tasks.core/plugin.xml
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/HtmlStreamTokenizer.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/HtmlTag.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/RepositoryTrustManager.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/SaxRepositoriesContentHandler.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/SaxRepositoriesWriter.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/SslProtocolSocketFactory.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskRepositoriesExternalizer.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/WebClientUtil.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/WebTask.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/.AbstractRepositoryTask.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractAttributeFactory.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractQueryHit.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryConnector.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryQuery.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryTask.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractTaskContainer.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AttributeContainer.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/DateRangeActivityDelegate.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/DateRangeContainer.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/DelegatingTaskExternalizer.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/IAttachmentHandler.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/IOfflineTaskHandler.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/IRepositoryConstants.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/ITask.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/ITaskListChangeListener.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/ITaskListElement.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/ITaskListExternalizer.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/QueryHitCollector.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/RepositoryAttachment.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/RepositoryTaskAttribute.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/RepositoryTaskData.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/RepositoryTemplate.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/Task.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskArchive.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskComment.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskList.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskRepository.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskRepositoryFilter.java
org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskRepositoryManager.java
org.eclipse.mylyn.tasks.tests/.settings/org.eclipse.jdt.core.prefs
org.eclipse.mylyn.tasks.tests/.settings/org.eclipse.jdt.ui.prefs
org.eclipse.mylyn.tasks.tests/META-INF/MANIFEST.MF
org.eclipse.mylyn.tasks.tests/plugin.xml
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/AllTasksTests.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/BackgroundSaveTest.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/ProjectRepositoryAssociationTest.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/RepositorySettingsPageTest.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/RepositoryTaskSynchronizationTest.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/RetrieveTitleFromUrlTest.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TableSorterTest.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskActivityViewTest.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskDataExportTest.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskDataImportTest.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskHistoryTest.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskKeyComparatorTest.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskListBackupManagerTest.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskListDataMigrationTest.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskListDnDTest.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskListManagerTest.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskListUiTest.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskPlanningEditorTest.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskRepositoriesExternalizerTest.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskRepositoryManagerTest.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskTest.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/UrlConnectionUtilTest.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockAttributeFactory.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockQueryHit.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryConnector.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryExternalizer.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryTask.java
org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryUi.java
org.eclipse.mylyn.tasks.ui/.settings/org.eclipse.jdt.core.prefs
org.eclipse.mylyn.tasks.ui/.settings/org.eclipse.jdt.ui.prefs
org.eclipse.mylyn.tasks.ui/META-INF/MANIFEST.MF
org.eclipse.mylyn.tasks.ui/icons/eview16/overlay-repository-context.gif
org.eclipse.mylyn.tasks.ui/icons/eview16/repositories.gif
org.eclipse.mylyn.tasks.ui/icons/eview16/task-list.gif
org.eclipse.mylyn.tasks.ui/plugin.xml
org.eclipse.mylyn.tasks.ui/schema/editors.exsd
org.eclipse.mylyn.tasks.ui/schema/providers.exsd
org.eclipse.mylyn.tasks.ui/schema/repositories.exsd
org.eclipse.mylyn.tasks.ui/schema/templates.exsd
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ComboSelectionDialog.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ITaskEditorFactory.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ITaskListNotification.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/MoveToCategoryMenuContributor.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/OfflineTaskManager.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/RepositoryAwareStatusHandler.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/RepositoryTaskDecorator.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/RetrieveTitleFromUrlJob.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ScheduledTaskListSynchJob.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskArchiveFilter.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskCompletionFilter.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListBackupManager.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListColorsAndFonts.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListImages.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationIncoming.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationManager.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationPopup.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationQueryIncoming.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationReminder.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListPreferenceConstants.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskPriorityFilter.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskReminderMenuContributor.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskSearchPage.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskStatusMenuContributor.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskUiUtil.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TasksReminderDialog.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/WorkspaceAwareContextStore.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/AbstractRepositoryAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ActivateTaskAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ActivityReportAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/AddRepositoryAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/AddRepositoryTaskAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CollapseAllAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyDetailsAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyToClipboardAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/DeleteAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/DeleteTaskRepositoryAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/EditRepositoryPropertiesAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ExpandAllAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/GoIntoAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/MarkTaskCompleteAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/MarkTaskIncompleteAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/MarkTaskUnreadAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/NewCategoryAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/NewLocalTaskAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/NewQueryAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/NewRepositoryTaskAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/OpenTaskAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/OpenTaskListElementAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/OpenWithBrowserAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/PreviousTaskDropDownAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/RemoveFromCategoryAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/SaveRemoteFileAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/SynchronizeSelectedAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskActivateAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskDeactivateAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskListElementPropertiesAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskNavigateDropDownAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskSelectionDialog.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/AbstractBugEditorInput.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/AbstractRepositoryTaskEditor.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/CategoryEditor.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/CategoryEditorInput.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/ContentOutlineTools.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/ExistingBugEditorInput.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/IRepositoryTaskSelection.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/MylarTaskEditor.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryAttachmentEditorInput.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryTaskOutlineNode.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryTaskOutlinePage.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryTaskSelection.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryTextViewer.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryViewerConfig.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/SpellingDialog.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorActionContributor.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorInput.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorUrlHyperlinkDetector.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskFormPage.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskPlanningEditor.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskSpellingReconcileStrategy.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/DateSelectionDialog.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/InProgressTaskCollector.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/OpenTaskEditorAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/ReminderCellEditor.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskActicityWizardPage.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskActivityEditorInput.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskActivityEditorPart.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskActivitySorter.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskActivityWizard.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskPlanLabelProvider.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskPlanSorter.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskPlannerLabelProvider.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskReportGenerator.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/preferences/MylarPreferencePage.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/preferences/TasksPreferencePage.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/AbstractRepositoryQueryPage.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/AbstractRepositorySearchQuery.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/OpenSearchResultAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/RepositorySearchResult.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/RepositorySearchResultView.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchHitCollector.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultContentProvider.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultSorterDescription.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultSorterId.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultSorterPriority.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultTableContentProvider.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/BackgroundSaveTimer.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TaskDataExportJob.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TaskListSaveManager.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TaskListWriter.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiExtensionReader.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/AbstractMylarFilteredTree.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/DatePicker.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/ResetRepositoryConfigurationAction.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskActivationHistory.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskActivityLabelProvider.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskActivityView.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskActivityViewSorter.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskElementLabelProvider.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskInputDialog.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskKeyComparator.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListContentProvider.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDragSourceListener.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDropAdapter.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListFilteredTree.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListTableLabelProvider.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListTableSorter.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListToolTipHandler.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskRepositoriesView.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskRepositoriesViewSorter.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/AbstractEditQueryWizard.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/AbstractRepositoryClientWizard.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/AbstractRepositorySettingsPage.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/AddExistingTaskWizard.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/CommonAddExistingTaskWizard.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/ContextAttachWizard.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/ContextAttachWizardPage.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/ContextRetrieveWizard.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/ContextRetrieveWizardPage.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/EditRepositoryWizard.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/ExistingTaskWizardPage.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/InputAttachmentSourcePage.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewAttachmentPage.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewAttachmentWizard.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewAttachmentWizardDialog.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewLocalCategoryWizard.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewQueryWizard.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewRepositoryTaskPage.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewRepositoryTaskWizard.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewRepositoryWizard.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewWebTaskPage.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewWebTaskWizard.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/PreviewAttachmentPage.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/SelectRepositoryClientPage.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/SelectRepositoryPage.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataExportWizard.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataExportWizardPage.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataImportWizard.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataImportWizardPage.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/AbstractRepositoryConnectorUi.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/RepositorySynchronizationManager.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/SynchronizeQueryJob.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/SynchronizeTaskJob.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/TaskListDataMigration.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/TaskListManager.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/TaskTransfer.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/TasksUiPlugin.java
org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/properties/ProjectTaskRepositoryPage.java
org.eclipse.mylyn.trac.core/.classpath
org.eclipse.mylyn.trac.core/.settings/org.eclipse.jdt.core.prefs
org.eclipse.mylyn.trac.core/.settings/org.eclipse.jdt.ui.prefs
org.eclipse.mylyn.trac.core/META-INF/MANIFEST.MF
org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/AbstractTracClient.java
org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/ITracClient.java
org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/Trac09Client.java
org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttachmentHandler.java
org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttributeFactory.java
org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracClientFactory.java
org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracClientManager.java
org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracCorePlugin.java
org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracException.java
org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracOfflineTaskHandler.java
org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracQueryHit.java
org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryConnector.java
org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryQuery.java
org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracTask.java
org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracXmlRpcClient.java
org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracSearch.java
org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracSearchFilter.java
org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracTicket.java
org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/util/TracHttpClientTransportFactory.java
org.eclipse.mylyn.trac.tests/.classpath
org.eclipse.mylyn.trac.tests/.settings/org.eclipse.jdt.core.prefs
org.eclipse.mylyn.trac.tests/.settings/org.eclipse.jdt.ui.prefs
org.eclipse.mylyn.trac.tests/META-INF/MANIFEST.MF
org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/AbstractTracClientRepositoryTest.java
org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/AbstractTracClientSearchTest.java
org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/AbstractTracClientTest.java
org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/AllTracTests.java
org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/Constants.java
org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/RepositorySearchQueryTest.java
org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/Trac09ClientSearchTest.java
org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/Trac09ClientTest.java
org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracAttachmentHandlerTest.java
org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracClientFactoryTest.java
org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracOfflineTaskHandlerTest.java
org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracQueryHitTest.java
org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracQueryTest.java
org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositoryConnectorTest.java
org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositoryQueryTest.java
org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTestPlugin.java
org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTicketTest.java
org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracXmlRpcClientSearchTest.java
org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracXmlRpcClientTest.java
org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracXmlRpcTest.java
org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/support/TestFixture.java
org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/support/XmlRpcServer.java
org.eclipse.mylyn.trac.ui/.classpath
org.eclipse.mylyn.trac.ui/.settings/org.eclipse.jdt.core.prefs
org.eclipse.mylyn.trac.ui/META-INF/MANIFEST.MF
org.eclipse.mylyn.trac.ui/plugin.xml
org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracRepositoryUi.java
org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracTaskExternalizer.java
org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracUiPlugin.java
org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditor.java
org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorFactory.java
org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorInput.java
org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/EditTracQueryWizard.java
org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracCustomQueryPage.java
org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracQueryWizardPage.java
org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracRepositorySettingsPage.java
562 files changed, 10 insertions, 87961 deletions
diff --git a/org.eclipse.mylyn.bugzilla.core/.classpath b/org.eclipse.mylyn.bugzilla.core/.classpath deleted file mode 100644 index 804790513..000000000 --- a/org.eclipse.mylyn.bugzilla.core/.classpath +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="src" path="src"/> - <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"> - <accessrules> - <accessrule kind="accessible" pattern="**/internal/**"/> - <accessrule kind="nonaccessible" pattern="**/System"/> - </accessrules> - </classpathentry> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"> - <accessrules> - <accessrule kind="nonaccessible" pattern="com/sun/**"/> - </accessrules> - </classpathentry> - <classpathentry kind="output" path="bin"/> -</classpath> diff --git a/org.eclipse.mylyn.bugzilla.core/META-INF/MANIFEST.MF b/org.eclipse.mylyn.bugzilla.core/META-INF/MANIFEST.MF deleted file mode 100644 index 9c1e10c03..000000000 --- a/org.eclipse.mylyn.bugzilla.core/META-INF/MANIFEST.MF +++ /dev/null @@ -1,15 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Mylar Bugzilla Connector Core Plug-in -Bundle-SymbolicName: org.eclipse.mylar.bugzilla.core; singleton:=true -Bundle-Version: 0.7.0 -Bundle-Activator: org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin -Bundle-Localization: plugin -Require-Bundle: org.eclipse.core.runtime, - org.eclipse.mylar.context.core, - org.eclipse.mylar.tasks.core -Eclipse-AutoStart: true -Bundle-Vendor: Eclipse.org -Bundle-ClassPath: . -Export-Package: org.eclipse.mylar.internal.bugzilla.core -Bundle-RequiredExecutionEnvironment: J2SE-1.5 diff --git a/org.eclipse.mylyn.bugzilla.core/build.properties b/org.eclipse.mylyn.bugzilla.core/build.properties index 1d9c8fb20..9875d8666 100644 --- a/org.eclipse.mylyn.bugzilla.core/build.properties +++ b/org.eclipse.mylyn.bugzilla.core/build.properties @@ -1,6 +1,7 @@ bin.includes = META-INF/,\ about.html,\ - . + .,\ + plugin.xml src.includes = src/,\ META-INF/,\ about.html diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/AbstractReportFactory.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/AbstractReportFactory.java deleted file mode 100644 index 70ea6a5c8..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/AbstractReportFactory.java +++ /dev/null @@ -1,134 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.core; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.StringReader; -import java.net.HttpURLConnection; -import java.net.Proxy; -import java.net.URL; -import java.security.GeneralSecurityException; -import java.util.zip.GZIPInputStream; - -import javax.security.auth.login.LoginException; - -import org.eclipse.mylar.internal.tasks.core.WebClientUtil; -import org.xml.sax.ErrorHandler; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; -import org.xml.sax.XMLReader; -import org.xml.sax.helpers.DefaultHandler; -import org.xml.sax.helpers.XMLReaderFactory; - -/** - * @author Rob Elves - */ -public class AbstractReportFactory { - - private static final String CONTENT_TYPE_TEXT_HTML = "text/html"; - - private static final String CONTENT_TYPE_APP_RDF_XML = "application/rdf+xml"; - - private static final String CONTENT_TYPE_APP_XML = "application/xml"; - - private static final String CONTENT_TYPE_TEXT_XML = "text/xml"; - - public static final int RETURN_ALL_HITS = -1; - - /** expects rdf returned from repository (ctype=rdf in url) - * @throws GeneralSecurityException */ - protected void collectResults(URL url, Proxy proxySettings, String characterEncoding, - DefaultHandler contentHandler, boolean clean) throws IOException, BugzillaException, GeneralSecurityException { - - HttpURLConnection connection = WebClientUtil.openUrlConnection(url, proxySettings, false); - try { - int responseCode = connection.getResponseCode(); - if (responseCode != HttpURLConnection.HTTP_OK) { - String msg; - if (responseCode == -1 || responseCode == HttpURLConnection.HTTP_FORBIDDEN) - msg = "Repository does not seem to be a valid Bugzilla server: " + url.toExternalForm(); - else - msg = "HTTP Error " + responseCode + " (" + connection.getResponseMessage() - + ") while querying Bugzilla server: " + url.toExternalForm(); - - throw new IOException(msg); - } - - BufferedReader in = null; - - String contentEncoding = connection.getContentEncoding(); - boolean gzipped = contentEncoding != null && WebClientUtil.ENCODING_GZIP.equals(contentEncoding); - if (characterEncoding != null) { - if (gzipped) { - in = new BufferedReader(new InputStreamReader(new GZIPInputStream(connection.getInputStream()), - characterEncoding)); - } else { - in = new BufferedReader(new InputStreamReader(connection.getInputStream(), characterEncoding)); - } - } else { - if (gzipped) { - in = new BufferedReader(new InputStreamReader(new GZIPInputStream(connection.getInputStream()))); - } else { - in = new BufferedReader(new InputStreamReader(connection.getInputStream())); - } - } - - if (clean) { - StringBuffer result = XmlCleaner.clean(in); - StringReader strReader = new StringReader(result.toString()); - in = new BufferedReader(strReader); - } - - if (connection.getContentType().contains(CONTENT_TYPE_APP_RDF_XML) - || connection.getContentType().contains(CONTENT_TYPE_APP_XML) - || connection.getContentType().contains(CONTENT_TYPE_TEXT_XML)) { - - try { - final XMLReader reader = XMLReaderFactory.createXMLReader(); - reader.setContentHandler(contentHandler); - reader.setErrorHandler(new ErrorHandler() { - - public void error(SAXParseException exception) throws SAXException { - throw exception; - } - - public void fatalError(SAXParseException exception) throws SAXException { - throw exception; - } - - public void warning(SAXParseException exception) throws SAXException { - throw exception; - } - }); - reader.parse(new InputSource(in)); - } catch (SAXException e) { - if (e.getMessage().equals(IBugzillaConstants.ERROR_INVALID_USERNAME_OR_PASSWORD)) { - throw new LoginException(e.getMessage()); - } else { - throw new IOException(e.getMessage()); - } - } - } else if (connection.getContentType().contains(CONTENT_TYPE_TEXT_HTML)) { - BugzillaServerFacade.parseHtmlError(in); - } else { - throw new IOException("Unrecognized content type: " + connection.getContentType()); - } - } finally { - if (connection != null) { - connection.disconnect(); - } - } - } -} diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaAttachmentHandler.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaAttachmentHandler.java deleted file mode 100644 index cb31acfc1..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaAttachmentHandler.java +++ /dev/null @@ -1,282 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.core; - -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.net.Proxy; -import java.net.URL; -import java.net.URLConnection; -import java.security.GeneralSecurityException; -import java.util.ArrayList; -import java.util.List; - -import javax.security.auth.login.LoginException; - -import org.apache.commons.httpclient.HttpClient; -import org.apache.commons.httpclient.HttpStatus; -import org.apache.commons.httpclient.methods.PostMethod; -import org.apache.commons.httpclient.methods.multipart.FilePart; -import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity; -import org.apache.commons.httpclient.methods.multipart.Part; -import org.apache.commons.httpclient.methods.multipart.PartBase; -import org.apache.commons.httpclient.methods.multipart.StringPart; -import org.apache.commons.httpclient.params.HttpMethodParams; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.mylar.internal.tasks.core.WebClientUtil; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.IAttachmentHandler; -import org.eclipse.mylar.tasks.core.LocalAttachment; -import org.eclipse.mylar.tasks.core.RepositoryAttachment; -import org.eclipse.mylar.tasks.core.TaskRepository; - -/** - * @author Mik Kersten - * @author Rob Elves - */ -public class BugzillaAttachmentHandler implements IAttachmentHandler { - - private static final int CONNECT_TIMEOUT = 5000; - - private static final String CHANGES_SUBMITTED = "Changes Submitted"; - - public static final String POST_ARGS_ATTACHMENT_DOWNLOAD = "/attachment.cgi?id="; - - public static final String POST_ARGS_ATTACHMENT_UPLOAD = "/attachment.cgi";// ?action=insert";//&bugid="; - - private static final String VALUE_CONTENTTYPEMETHOD_MANUAL = "manual"; - - private static final String VALUE_ISPATCH = "1"; - - private static final String VALUE_ACTION_INSERT = "insert"; - - private static final String ATTRIBUTE_CONTENTTYPEENTRY = "contenttypeentry"; - - private static final String ATTRIBUTE_CONTENTTYPEMETHOD = "contenttypemethod"; - - private static final String ATTRIBUTE_ISPATCH = "ispatch"; - - private static final String ATTRIBUTE_DATA = "data"; - - private static final String ATTRIBUTE_COMMENT = "comment"; - - private static final String ATTRIBUTE_DESCRIPTION = "description"; - - private static final String ATTRIBUTE_BUGID = "bugid"; - - private static final String ATTRIBUTE_BUGZILLA_PASSWORD = "Bugzilla_password"; - - private static final String ATTRIBUTE_BUGZILLA_LOGIN = "Bugzilla_login"; - - private static final String ATTRIBUTE_ACTION = "action"; - - public void downloadAttachment(TaskRepository repository, AbstractRepositoryTask task, - RepositoryAttachment attachment, File file, Proxy proxySettings) throws CoreException { - try { - downloadAttachment(repository.getUrl(), repository.getUserName(), repository.getPassword(), proxySettings, - attachment.getId(), file, true); - } catch (Exception e) { - throw new CoreException(new Status(IStatus.ERROR, BugzillaCorePlugin.PLUGIN_ID, 0, "could not download", e)); - } - } - - public void uploadAttachment(TaskRepository repository, AbstractRepositoryTask task, String comment, - String description, File file, String contentType, boolean isPatch, Proxy proxySettings) - throws CoreException { - // try { - int bugId = Integer.parseInt(AbstractRepositoryTask.getTaskId(task.getHandleIdentifier())); - uploadAttachment(repository.getUrl(), repository.getUserName(), repository.getPassword(), bugId, comment, - description, file, contentType, isPatch, proxySettings); - // } catch (Exception e) { - // throw new CoreException(new Status(IStatus.ERROR, - // BugzillaCorePlugin.PLUGIN_ID, 0, "could not upload", e)); - // } - } - - private boolean uploadAttachment(String repositoryUrl, String userName, String password, int bugReportID, - String comment, String description, File sourceFile, String contentType, boolean isPatch, - Proxy proxySettings) throws CoreException { - - // Note: The following debug code requires http commons-logging and - // commons-logging-api jars - // System.setProperty("org.apache.commons.logging.Log", - // "org.apache.commons.logging.impl.SimpleLog"); - // System.setProperty("org.apache.commons.logging.simplelog.showdatetime", - // "true"); - // System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire", - // "debug"); - // System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient", - // "debug"); - - boolean uploadResult = true; - - // Protocol.registerProtocol("https", new Protocol("https", new - // TrustAllSslProtocolSocketFactory(), 443)); - HttpClient client = new HttpClient(); - WebClientUtil.setupHttpClient(client, proxySettings, repositoryUrl); - PostMethod postMethod = new PostMethod(WebClientUtil.getRequestPath(repositoryUrl) - + POST_ARGS_ATTACHMENT_UPLOAD); - - // My understanding is that this option causes the client to first check - // with the server to see if it will in fact recieve the post before - // actually sending the contents. - postMethod.getParams().setBooleanParameter(HttpMethodParams.USE_EXPECT_CONTINUE, true); - - try { - List<PartBase> parts = new ArrayList<PartBase>(); - parts.add(new StringPart(ATTRIBUTE_ACTION, VALUE_ACTION_INSERT)); - parts.add(new StringPart(ATTRIBUTE_BUGZILLA_LOGIN, userName)); - parts.add(new StringPart(ATTRIBUTE_BUGZILLA_PASSWORD, password)); - parts.add(new StringPart(ATTRIBUTE_BUGID, String.valueOf(bugReportID))); - parts.add(new StringPart(ATTRIBUTE_DESCRIPTION, description)); - parts.add(new StringPart(ATTRIBUTE_COMMENT, comment)); - parts.add(new FilePart(ATTRIBUTE_DATA, sourceFile)); - - if (isPatch) { - parts.add(new StringPart(ATTRIBUTE_ISPATCH, VALUE_ISPATCH)); - } else { - parts.add(new StringPart(ATTRIBUTE_CONTENTTYPEMETHOD, VALUE_CONTENTTYPEMETHOD_MANUAL)); - parts.add(new StringPart(ATTRIBUTE_CONTENTTYPEENTRY, contentType)); - } - - postMethod.setRequestEntity(new MultipartRequestEntity(parts.toArray(new Part[1]), postMethod.getParams())); - - client.getHttpConnectionManager().getParams().setConnectionTimeout(CONNECT_TIMEOUT); - int status = client.executeMethod(postMethod); - if (status == HttpStatus.SC_OK) { - InputStreamReader reader = new InputStreamReader(postMethod.getResponseBodyAsStream(), postMethod - .getResponseCharSet()); - BufferedReader bufferedReader = new BufferedReader(reader); - - BugzillaServerFacade.parseHtmlError(bufferedReader); - - } else { - uploadResult = false; - throw new CoreException(new Status(Status.OK, BugzillaCorePlugin.PLUGIN_ID, Status.ERROR, - "Communication error occurred during upload. \n\n" + HttpStatus.getStatusText(status), null)); - } - - } catch (LoginException e) { - throw new CoreException(new Status(Status.OK, BugzillaCorePlugin.PLUGIN_ID, Status.ERROR, - "Your login name or password is incorrect. Ensure proper repository configuration.", e)); - } catch (IOException e) { - throw new CoreException(new Status(Status.OK, BugzillaCorePlugin.PLUGIN_ID, Status.ERROR, - "Check repository credentials and connectivity.", e)); - } catch (UnrecognizedReponseException e) { - if (e.getMessage().indexOf(CHANGES_SUBMITTED) > -1) { - return true; - } - throw new CoreException(new Status(Status.OK, BugzillaCorePlugin.PLUGIN_ID, Status.INFO, - "Response from server", e)); - } catch (BugzillaException e) { - String message = e.getMessage(); - throw new CoreException(new Status(Status.OK, BugzillaCorePlugin.PLUGIN_ID, Status.ERROR, - "Bugzilla could not post your bug. \n\n" + message, e)); - } finally { - postMethod.releaseConnection(); - } - - return uploadResult; - } - - public boolean uploadAttachment(LocalAttachment attachment, String uname, String password, Proxy proxySettings) - throws CoreException { - - File file = new File(attachment.getFilePath()); - if (!file.exists() || file.length() <= 0) { - return false; - } - - return uploadAttachment(attachment.getReport().getRepositoryUrl(), uname, password, Integer.parseInt(attachment - .getReport().getId()), attachment.getComment(), attachment.getDescription(), file, attachment - .getContentType(), attachment.isPatch(), proxySettings); - } - - private boolean downloadAttachment(String repositoryUrl, String userName, String password, Proxy proxySettings, - int id, File destinationFile, boolean overwrite) throws IOException, GeneralSecurityException { - BufferedInputStream in = null; - FileOutputStream outStream = null; - try { - String url = repositoryUrl + POST_ARGS_ATTACHMENT_DOWNLOAD + id; - url = BugzillaServerFacade.addCredentials(url, userName, password); - URL downloadUrl = new URL(url); - URLConnection connection = WebClientUtil.openUrlConnection(downloadUrl, proxySettings, false); - if (connection != null) { - InputStream input = connection.getInputStream(); - outStream = new FileOutputStream(destinationFile); - copyByteStream(input, outStream); - return true; - - } - } finally { - try { - if (in != null) - in.close(); - if (outStream != null) - outStream.close(); - } catch (IOException e) { - BugzillaCorePlugin.log(new Status(IStatus.ERROR, BugzillaCorePlugin.PLUGIN_ID, IStatus.ERROR, - "Problem closing the stream", e)); - } - } - return false; - } - - private void copyByteStream(InputStream in, OutputStream out) throws IOException { - if (in != null && out != null) { - BufferedInputStream inBuffered = new BufferedInputStream(in); - - int bufferSize = 1000; - byte[] buffer = new byte[bufferSize]; - - int readCount; - - BufferedOutputStream fout = new BufferedOutputStream(out); - - while ((readCount = inBuffered.read(buffer)) != -1) { - if (readCount < bufferSize) { - fout.write(buffer, 0, readCount); - } else { - fout.write(buffer); - } - } - fout.flush(); - fout.close(); - in.close(); - } - } - - public boolean canDownloadAttachment(TaskRepository repository, AbstractRepositoryTask task) { - return true; - } - - public boolean canUploadAttachment(TaskRepository repository, AbstractRepositoryTask task) { - return true; - } - - public boolean canDeprecate(TaskRepository repository, RepositoryAttachment attachment) { - return false; - } - - public void updateAttachment(TaskRepository repository, RepositoryAttachment attachment) throws CoreException { - // implement - } -} diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaAttributeFactory.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaAttributeFactory.java deleted file mode 100644 index 45ad1161b..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaAttributeFactory.java +++ /dev/null @@ -1,102 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.core; - -import org.eclipse.mylar.tasks.core.AbstractAttributeFactory; -import org.eclipse.mylar.tasks.core.RepositoryTaskAttribute; - -/** - * @author Rob Elves - * @author Mik Kersten - */ -public class BugzillaAttributeFactory extends AbstractAttributeFactory { - - private static final long serialVersionUID = 5087501781682994759L; - - @Override - public String mapCommonAttributeKey(String key) { - if (key == null) { - return key; - } else if (key.equals(RepositoryTaskAttribute.COMMENT_DATE)) { - return BugzillaReportElement.BUG_WHEN.getKeyString(); - } else if (key.equals(RepositoryTaskAttribute.USER_OWNER)) { - return BugzillaReportElement.WHO.getKeyString(); - } else if (key.equals(RepositoryTaskAttribute.USER_CC)) { - return BugzillaReportElement.CC.getKeyString(); - } else if (key.equals(RepositoryTaskAttribute.COMMENT_TEXT)) { - return BugzillaReportElement.THETEXT.getKeyString(); - } else if (key.equals(RepositoryTaskAttribute.DATE_CREATION)) { - return BugzillaReportElement.CREATION_TS.getKeyString(); - } else if (key.equals(RepositoryTaskAttribute.DESCRIPTION)) { - return BugzillaReportElement.DESC.getKeyString(); - } else if (key.equals(RepositoryTaskAttribute.ATTACHMENT_ID)) { - return BugzillaReportElement.ATTACHID.getKeyString(); - } else if (key.equals(RepositoryTaskAttribute.ATTACHMENT_TYPE)) { - return BugzillaReportElement.TYPE.getKeyString(); - } else if (key.equals(RepositoryTaskAttribute.ATTACHMENT_CTYPE)) { - return BugzillaReportElement.CTYPE.getKeyString(); - } else if (key.equals(RepositoryTaskAttribute.USER_ASSIGNED)) { - return BugzillaReportElement.ASSIGNED_TO.getKeyString(); - } else if (key.equals(RepositoryTaskAttribute.RESOLUTION)) { - return BugzillaReportElement.RESOLUTION.getKeyString(); - } else if (key.equals(RepositoryTaskAttribute.STATUS)) { - return BugzillaReportElement.BUG_STATUS.getKeyString(); - } else if (key.equals(RepositoryTaskAttribute.DATE_MODIFIED)) { - return BugzillaReportElement.DELTA_TS.getKeyString(); - } else if (key.equals(RepositoryTaskAttribute.USER_REPORTER)) { - return BugzillaReportElement.REPORTER.getKeyString(); - } else if (key.equals(RepositoryTaskAttribute.SUMMARY)) { - return BugzillaReportElement.SHORT_DESC.getKeyString(); - } else if (key.equals(RepositoryTaskAttribute.PRODUCT)) { - return BugzillaReportElement.PRODUCT.getKeyString(); - } else if (key.equals(RepositoryTaskAttribute.DATE_CREATION)) { - return BugzillaReportElement.CREATION_TS.getKeyString(); - } else if (key.equals(RepositoryTaskAttribute.KEYWORDS)) { - return BugzillaReportElement.KEYWORDS.getKeyString(); - } else if (key.equals(RepositoryTaskAttribute.ATTACHMENT_DATE)) { - return BugzillaReportElement.DATE.getKeyString(); - } else if (key.equals(RepositoryTaskAttribute.ADD_SELF_CC)) { - return BugzillaReportElement.ADDSELFCC.getKeyString(); - } else if (key.equals(RepositoryTaskAttribute.PRIORITY)) { - return BugzillaReportElement.PRIORITY.getKeyString(); - } - return key; - } - - @Override - public boolean getIsHidden(String key) { - try { - return BugzillaReportElement.valueOf(key.trim().toUpperCase()).isHidden(); - } catch (IllegalArgumentException e) { - return false; - } - } - - @Override - public String getName(String key) { - try { - return BugzillaReportElement.valueOf(key.trim().toUpperCase()).toString(); - } catch (IllegalArgumentException e) { - return "<unknown>"; - } - } - - @Override - public boolean isReadOnly(String key) { - try { - return BugzillaReportElement.valueOf(key.trim().toUpperCase()).isReadOnly(); - } catch (IllegalArgumentException e) { - return true; - } - } - -} diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaCorePlugin.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaCorePlugin.java deleted file mode 100644 index 4824d516a..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaCorePlugin.java +++ /dev/null @@ -1,235 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.bugzilla.core; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.net.Proxy; -import java.security.GeneralSecurityException; -import java.util.HashMap; -import java.util.Map; - -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Plugin; -import org.eclipse.core.runtime.Status; -import org.osgi.framework.BundleContext; - -/** - * The main plug-in class to be used in the desktop. - * - * @author Mik Kersten (added support for multiple repositories) - */ -public class BugzillaCorePlugin extends Plugin { - - private static final String ERROR_DELETING_CONFIGURATION = "Error removing corrupt repository configuration file."; - - public static final String REPOSITORY_KIND = "bugzilla"; - - public static final String ENCODING_UTF_8 = "UTF-8"; - - public static final String PLUGIN_ID = "org.eclipse.mylar.bugzilla"; - - private static BugzillaCorePlugin INSTANCE; - - private static boolean cacheFileRead = false; - - private static File repositoryConfigurationFile = null; - - /** Product configuration for the current server */ - private static Map<String, RepositoryConfiguration> repositoryConfigurations = new HashMap<String, RepositoryConfiguration>(); - - public BugzillaCorePlugin() { - super(); - } - - public static BugzillaCorePlugin getDefault() { - return INSTANCE; - } - - @Override - public void start(BundleContext context) throws Exception { - super.start(context); - INSTANCE = this; - } - - @Override - public void stop(BundleContext context) throws Exception { - if (!repositoryConfigurations.isEmpty()) { - writeRepositoryConfigFile(); - } - INSTANCE = null; - super.stop(context); - } - - /** - * for testing purposes - */ - public static RepositoryConfiguration getRepositoryConfiguration(String repositoryUrl) { - return repositoryConfigurations.get(repositoryUrl); - } - - public static void setConfigurationCacheFile(File file) { - repositoryConfigurationFile = file; - } - - /** - * Retrieves the latest repository configuration from the server - * - * @throws BugzillaException - * @throws GeneralSecurityException - * @throws - */ - public static RepositoryConfiguration getRepositoryConfiguration(boolean forceRefresh, String repositoryUrl, - Proxy proxySettings, String userName, String password, String encoding) throws IOException, - BugzillaException, GeneralSecurityException { - if (!cacheFileRead) { - readRepositoryConfigurationFile(); - cacheFileRead = true; - } - if (repositoryConfigurations.get(repositoryUrl) == null || forceRefresh) { - RepositoryConfigurationFactory configFactory = new RepositoryConfigurationFactory(); - addRepositoryConfiguration(configFactory.getConfiguration(repositoryUrl, proxySettings, userName, password, - encoding)); - } - return repositoryConfigurations.get(repositoryUrl); - } - - /** public for testing */ - public static void addRepositoryConfiguration(RepositoryConfiguration config) { - repositoryConfigurations.remove(config.getRepositoryUrl()); - repositoryConfigurations.put(config.getRepositoryUrl(), config); - } - - // /** - // * Returns the path to the file cacheing the product configuration. - // */ - // private static IPath getProductConfigurationCachePath() { - // IPath stateLocation = - // Platform.getStateLocation(BugzillaPlugin.getDefault().getBundle()); - // IPath configFile = stateLocation.append("repositoryConfigurations"); - // return configFile; - // } - - /** public for testing */ - public void removeConfiguration(RepositoryConfiguration config) { - repositoryConfigurations.remove(config.getRepositoryUrl()); - } - - /** public for testing */ - public static void readRepositoryConfigurationFile() { - // IPath configFile = getProductConfigurationCachePath(); - if (repositoryConfigurationFile == null || !repositoryConfigurationFile.exists()) - return; - ObjectInputStream in = null; - try { - in = new ObjectInputStream(new FileInputStream(repositoryConfigurationFile)); - int size = in.readInt(); - for (int nX = 0; nX < size; nX++) { - RepositoryConfiguration item = (RepositoryConfiguration) in.readObject(); - if (item != null) { - repositoryConfigurations.put(item.getRepositoryUrl(), item); - } - } - } catch (Exception e) { - log(e); - try { - if (in != null) { - in.close(); - } - if (repositoryConfigurationFile != null && repositoryConfigurationFile.exists()) { - if (repositoryConfigurationFile.delete()) { - // successfully deleted - } else { - log(new Status(Status.ERROR, BugzillaCorePlugin.PLUGIN_ID, 0, ERROR_DELETING_CONFIGURATION, e)); - } - } - - } catch (Exception ex) { - log(new Status(Status.ERROR, BugzillaCorePlugin.PLUGIN_ID, 0, ERROR_DELETING_CONFIGURATION, e)); - } - } finally { - if (in != null) { - try { - in.close(); - } catch (IOException e) { - // ignore - } - } - } - } - - /** public for testing */ - public static void writeRepositoryConfigFile() { - // IPath configFile = getProductConfigurationCachePath(); - if (repositoryConfigurationFile != null) { - ObjectOutputStream out = null; - try { - out = new ObjectOutputStream(new FileOutputStream(repositoryConfigurationFile)); - out.writeInt(repositoryConfigurations.size()); - for (String key : repositoryConfigurations.keySet()) { - RepositoryConfiguration item = repositoryConfigurations.get(key); - if (item != null) { - out.writeObject(item); - } - } - } catch (IOException e) { - log(e); - } finally { - if (out != null) { - try { - out.close(); - } catch (IOException e) { - // ignore - } - } - } - } - } - - /** - * Convenience method for logging statuses to the plugin log - * - * @param status - * the status to log - */ - public static void log(IStatus status) { - getDefault().getLog().log(status); - } - - /** - * Convenience method for logging exceptions to the plugin log - * - * @param e - * the exception to log - */ - public static void log(Exception e) { - String message = e.getMessage(); - if (e.getMessage() == null) { - message = e.getClass().toString(); - } - log(new Status(Status.ERROR, BugzillaCorePlugin.PLUGIN_ID, 0, message, e)); - } - - /** - * Returns the path to the file caching bug reports created while offline. - */ - protected IPath getCachedBugReportPath() { - IPath stateLocation = Platform.getStateLocation(BugzillaCorePlugin.getDefault().getBundle()); - IPath bugFile = stateLocation.append("bugReports"); - return bugFile; - } -} diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaException.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaException.java deleted file mode 100644 index d4806d814..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaException.java +++ /dev/null @@ -1,67 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.core; - -import java.io.PrintStream; -import java.io.PrintWriter; - -public class BugzillaException extends Exception { - - /** Automatically generated serialVersionUID */ - private static final long serialVersionUID = 3257849887386449974L; - - private Throwable cause; - - /** - * Constructor for BugzillaException. - */ - public BugzillaException() { - super(); - } - - /** - * Constructor for BugzillaException. - * - * @param detailMessage - */ - public BugzillaException(String detailMessage) { - super(detailMessage); - } - - public BugzillaException(String detailMessage, Throwable cause) { - super(detailMessage); - this.cause = cause; - } - - public BugzillaException(Throwable cause) { - this.cause = cause; - } - - @Override - public synchronized void printStackTrace(PrintStream err) { - super.printStackTrace(err); - if (cause != null) { - err.println("\n--- Cause was:"); - cause.printStackTrace(err); - } - } - - @Override - public synchronized void printStackTrace(PrintWriter err) { - super.printStackTrace(err); - if (cause != null) { - err.println("\n--- Cause was:"); - cause.printStackTrace(err); - } - } - -} diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaOfflineTaskHandler.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaOfflineTaskHandler.java deleted file mode 100644 index de6fc7dd7..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaOfflineTaskHandler.java +++ /dev/null @@ -1,208 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.core; - -import java.io.FileNotFoundException; -import java.io.UnsupportedEncodingException; -import java.net.Proxy; -import java.net.URLEncoder; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.mylar.tasks.core.AbstractAttributeFactory; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.QueryHitCollector; -import org.eclipse.mylar.tasks.core.IOfflineTaskHandler; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.mylar.tasks.core.TaskList; -import org.eclipse.mylar.tasks.core.TaskRepository; - -/** - * @author Mik Kersten - * @author Rob Elves - */ -public class BugzillaOfflineTaskHandler implements IOfflineTaskHandler { - - private static final String BUG_ID = "&bug_id="; - - private static final int MAX_URL_LENGTH = 2000; - - private static final String CHANGED_BUGS_CGI_ENDDATE = "&chfieldto=Now"; - - private static final String CHANGED_BUGS_CGI_QUERY = "/buglist.cgi?query_format=advanced&chfieldfrom="; - - private static final String DATE_FORMAT_1 = "yyyy-MM-dd HH:mm"; - - private static final String DATE_FORMAT_2 = "yyyy-MM-dd HH:mm:ss"; - - private static SimpleDateFormat delta_ts_format = new SimpleDateFormat(DATE_FORMAT_2); - - private static SimpleDateFormat creation_ts_format = new SimpleDateFormat(DATE_FORMAT_1); - - /** - * public for testing Bugzilla 2.18 uses DATE_FORMAT_1 but later versions - * use DATE_FORMAT_2 Using lowest common denominator DATE_FORMAT_1 - */ - public static SimpleDateFormat comment_creation_ts_format = new SimpleDateFormat(DATE_FORMAT_1); - - private static SimpleDateFormat attachment_creation_ts_format = new SimpleDateFormat(DATE_FORMAT_1); - - private AbstractAttributeFactory attributeFactory = new BugzillaAttributeFactory(); - - private TaskList taskList; - - public BugzillaOfflineTaskHandler(TaskList taskList) { - this.taskList = taskList; - } - - public RepositoryTaskData downloadTaskData(final AbstractRepositoryTask bugzillaTask, TaskRepository repository, - Proxy proxySettings) throws CoreException { - try { - int bugId = Integer.parseInt(AbstractRepositoryTask.getTaskId(bugzillaTask.getHandleIdentifier())); - - return BugzillaServerFacade.getBug(repository.getUrl(), repository.getUserName(), repository.getPassword(), - proxySettings, repository.getCharacterEncoding(), bugId); - } catch (final UnrecognizedReponseException e) { - throw new CoreException(new Status(IStatus.ERROR, BugzillaCorePlugin.PLUGIN_ID, 0, - "Report download failed. Unrecognized response from " + bugzillaTask.getRepositoryUrl() + ".", e)); - } catch (final FileNotFoundException e) { - throw new CoreException(new Status(IStatus.ERROR, BugzillaCorePlugin.PLUGIN_ID, 0, "Report download from " - + bugzillaTask.getRepositoryUrl() + " failed. File not found: " + e.getMessage(), e)); - } catch (final Exception e) { - throw new CoreException(new Status(IStatus.ERROR, BugzillaCorePlugin.PLUGIN_ID, 0, "Report download from " - + bugzillaTask.getRepositoryUrl() + " failed, please see details.", e)); - } - } - - public AbstractAttributeFactory getAttributeFactory() { - return attributeFactory; - } - - public Date getDateForAttributeType(String attributeKey, String dateString) { - if (dateString == null || dateString.equals("")) { - return null; - } - try { - String mappedKey = attributeFactory.mapCommonAttributeKey(attributeKey); - Date parsedDate = null; - if (mappedKey.equals(BugzillaReportElement.DELTA_TS.getKeyString())) { - parsedDate = delta_ts_format.parse(dateString); - } else if (mappedKey.equals(BugzillaReportElement.CREATION_TS.getKeyString())) { - parsedDate = creation_ts_format.parse(dateString); - } else if (mappedKey.equals(BugzillaReportElement.BUG_WHEN.getKeyString())) { - parsedDate = comment_creation_ts_format.parse(dateString); - } else if (mappedKey.equals(BugzillaReportElement.DATE.getKeyString())) { - parsedDate = attachment_creation_ts_format.parse(dateString); - } - return parsedDate; - } catch (Exception e) { - return null; - // throw new CoreException(new Status(IStatus.ERROR, - // BugzillaPlugin.PLUGIN_ID, 0, - // "Error parsing date string: " + dateString, e)); - } - } - - public Set<AbstractRepositoryTask> getChangedSinceLastSync(TaskRepository repository, - Set<AbstractRepositoryTask> tasks, Proxy proxySettings) throws CoreException, UnsupportedEncodingException { - - Set<AbstractRepositoryTask> changedTasks = new HashSet<AbstractRepositoryTask>(); - - if (repository.getSyncTimeStamp() == null) { - return tasks; - } - - String dateString = repository.getSyncTimeStamp(); - if (dateString == null) { - dateString = ""; - } - String urlQueryBase; - String urlQueryString; - - urlQueryBase = repository.getUrl() + CHANGED_BUGS_CGI_QUERY - + URLEncoder.encode(dateString, repository.getCharacterEncoding()) + CHANGED_BUGS_CGI_ENDDATE; - // } catch (UnsupportedEncodingException e1) { - // MylarStatusHandler.log(e1, "Mylar: Check encoding settings in " + - // TaskRepositoriesView.NAME + "."); - // urlQueryBase = repository.getUrl() + CHANGED_BUGS_CGI_QUERY + - // dateString + CHANGED_BUGS_CGI_ENDDATE; - // } - - urlQueryString = new String(urlQueryBase + BUG_ID); - - int queryCounter = -1; - Iterator itr = tasks.iterator(); - while (itr.hasNext()) { - queryCounter++; - ITask task = (ITask) itr.next(); - String newurlQueryString = URLEncoder.encode(AbstractRepositoryTask.getTaskId(task.getHandleIdentifier()) - + ",", repository.getCharacterEncoding()); - if ((urlQueryString.length() + newurlQueryString.length() + IBugzillaConstants.CONTENT_TYPE_RDF.length()) > MAX_URL_LENGTH) { - urlQueryString += IBugzillaConstants.CONTENT_TYPE_RDF; - queryForChanged(repository, changedTasks, urlQueryString, proxySettings); - queryCounter = 0; - urlQueryString = new String(urlQueryBase + BUG_ID); - urlQueryString += newurlQueryString; - } else if (!itr.hasNext()) { - urlQueryString += newurlQueryString; - urlQueryString += IBugzillaConstants.CONTENT_TYPE_RDF; - queryForChanged(repository, changedTasks, urlQueryString, proxySettings); - } else { - urlQueryString += newurlQueryString; - } - } - return changedTasks; - } - - private void queryForChanged(TaskRepository repository, Set<AbstractRepositoryTask> changedTasks, - String urlQueryString, Proxy proxySettings) throws UnsupportedEncodingException, CoreException { - RepositoryQueryResultsFactory queryFactory = new RepositoryQueryResultsFactory(); - QueryHitCollector collector = new QueryHitCollector(taskList); - if (repository.hasCredentials()) { - urlQueryString = BugzillaServerFacade.addCredentials(urlQueryString, repository.getUserName(), repository - .getPassword()); - } - try { - queryFactory.performQuery(taskList, repository.getUrl(), collector, urlQueryString, proxySettings, - AbstractReportFactory.RETURN_ALL_HITS, repository.getCharacterEncoding()); - } catch (Exception e) { - throw new CoreException(new Status(IStatus.ERROR, BugzillaCorePlugin.PLUGIN_ID, IStatus.OK, "failed to perform query", e)); - } - - for (AbstractQueryHit hit : collector.getHits()) { - String handle = AbstractRepositoryTask.getHandle(repository.getUrl(), hit.getId()); - ITask correspondingTask = taskList.getTask(handle); - if (correspondingTask != null && correspondingTask instanceof AbstractRepositoryTask) { - AbstractRepositoryTask repositoryTask = (AbstractRepositoryTask)correspondingTask; - // Hack to avoid re-syncing last task from previous synchronization - // This can be removed once we are getting a query timestamp from the repository rather than - // using the last modified stamp of the last task modified in the return hits. - // (or the changeddate field in the hit rdf becomes consistent, currently it doesn't return a proper modified date string) - if(repositoryTask.getTaskData() != null && repositoryTask.getTaskData().getLastModified().equals(repository.getSyncTimeStamp())) { - RepositoryTaskData taskData = downloadTaskData(repositoryTask, repository, proxySettings); - if(taskData != null && taskData.getLastModified().equals(repository.getSyncTimeStamp())) { - continue; - } - } - changedTasks.add(repositoryTask); - } - } - } -} diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaQueryHit.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaQueryHit.java deleted file mode 100644 index ff09e82f7..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaQueryHit.java +++ /dev/null @@ -1,97 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.core; - -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.TaskList; - -/** - * @author Ken Sueda - * @author Mik Kersten (hardening of prototype) - */ -public class BugzillaQueryHit extends AbstractQueryHit { - - private BugzillaTask task; - - private String status; - - private TaskList taskList; - - public BugzillaQueryHit(TaskList tasklist, String description, String priority, String repositoryUrl, String id, - BugzillaTask task, String status) { - super(repositoryUrl, description, id); - super.priority = priority; - this.taskList = tasklist; - this.task = task; - this.status = status; - } - - public BugzillaTask getCorrespondingTask() { - return task; - } - - public void setCorrespondingTask(AbstractRepositoryTask task) { - if (task instanceof BugzillaTask) { - this.task = (BugzillaTask) task; - } - } - - public String getPriority() { - if (task != null) { - return task.getPriority(); - } else { - return priority; - } - } - - public String getDescription() { - // return HtmlStreamTokenizer.unescape(description); - if (task != null) { - return task.getDescription(); - } else { - return description; - } - } - - public String getUrl() { - Integer idInt = new Integer(id); - return BugzillaServerFacade.getBugUrlWithoutLogin(repositoryUrl, idInt); - } - - public AbstractRepositoryTask getOrCreateCorrespondingTask() { - if (taskList == null) - return null; - - ITask existingTask = taskList.getTask(getHandleIdentifier()); - - if (existingTask instanceof BugzillaTask) { - this.task = (BugzillaTask) existingTask; - } else { - task = new BugzillaTask(this, true); - // task.setSyncState(RepositoryTaskSyncState.INCOMING); - taskList.addTask(task); - } - return task; - } - - public boolean isCompleted() { - if (status != null - && (status.startsWith("RESO") || status.startsWith("CLO") || status.startsWith("VERI") || status - .startsWith("FIXED"))) { - return true; - } - return false; - } - -} diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaReportElement.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaReportElement.java deleted file mode 100644 index aa53580b2..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaReportElement.java +++ /dev/null @@ -1,125 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.core; - -/** - * Bugzilla XML element enum. Each enum has the attribute name - * and associated xml element tag name. - * - * @author Rob Elves - */ -public enum BugzillaReportElement { - // Format: ENUM ( "pretty name", "xml key", <hidden: true/false>, <readonly: true/false>) - // Hidden elements are not automatically displayed in ui - ACTUAL_TIME ("Hours Worked:", "actual_time", true), - ADD_COMMENT ("Additional Comments:", "comment", true, false), - ASSIGNED_TO ("Assigned to:", "assigned_to", true, true), - ATTACHID ("attachid", "attachid"), - ATTACHMENT ("attachment", "attachment"), - BLOCKED ("Bug blocks:", "blocked", true, false), - BUG ("bug","bug", true), - BUG_FILE_LOC ("URL:", "bug_file_loc", true), - BUG_ID ("Bug:", "bug_id", true), - BUG_SEVERITY ("Severity:", "bug_severity", false), - BUG_STATUS ("Status:", "bug_status", true, true), - BUG_WHEN ("bug_when", "bug_when", true, true), - BUGZILLA ("bugzilla", "bugzilla", true), - CC ("CC:", "cc", true, true), - CCLIST_ACCESSIBLE ("cclist_accessible", "cclist_accessible", true), - CLASSIFICATION ("Classification:", "classification", true), - CLASSIFICATION_ID ("Classification ID:", "classification_id", true), - COMPONENT ("Component:", "component", false), - CREATION_TS ("Creation date:", "creation_ts", true), - CTYPE ("Content Type", "ctype"), - DATA ("data", "data"), - DATE ("Date", "date"), - DEADLINE ("Deadline:", "deadline", true, true), - DELTA_TS ("Last Modification", "delta_ts", true), - DEPENDSON ("Bug depends on:", "dependson", true, false), - DESC ("desc", "desc", false, true), - EVERCONFIRMED ("everconfirmed", "everconfirmed", true), - ESTIMATED_TIME ("Estimated Time:", "estimated_time", true), - FILENAME ("filename", "filename"), - IS_OBSOLETE ("Obsolete", "isobsolete", true), - IS_PATCH("Patch", "ispatch", true), - KEYWORDS ("Keywords:", "keywords", true), - LONG_DESC ("Description:", "long_desc"), - LONGDESCLENGTH ("Number of comments", "longdesclength", true), - NEWCC ("Add CC:", "newcc", true), - OP_SYS ("OS:", "op_sys", false), - PRIORITY ("Priority:", "priority", false, false), - PRODUCT ("Product:", "product", false), - REP_PLATFORM ("Platform:", "rep_platform", false), - REPORTER ("Reporter:", "reporter", true, true), - REPORTER_ACCESSIBLE ("reporter_accessible", "reporter_accessible", true), - RESOLUTION ("Resolution:", "resolution", false, true), // Exiting bug field, new cc - REMAINING_TIME( "Hours Left:", "remaining_time", true), - SHORT_DESC ("Summary:", "short_desc", true), - TARGET_MILESTONE ("Target milestone:", "target_milestone", false), - THETEXT ("thetext", "thetext", false, true), - TYPE ("type", "type"), - UNKNOWN ("UNKNOWN", "UNKNOWN"), - VERSION ("Version:", "version", false), - VOTES ("Votes:", "votes", true, true), - WORK_TIME("Add Time:", "work_time", true, false), - WHO ("who", "who"), - QA_CONTACT("QA Contact", "qa_contact", false, false), - ADDSELFCC ("Add self to CC", "addselfcc", true, false), - // Used by search engine - LI ("used by search engine", "li", true), - ID ("used by search engine", "id", true), - SHORT_SHORT_DESC ("used by search engine", "short_short_desc", false), - SEQ ("used by search engine", "seq", false), - RESULT ("used by search engine", "result", false), - RDF ("used by search engine", "rdf", false), - INSTALLATION ("used by search engine", "installation", false), - BUGS ("used by search engine", "bugs", false); - - private final boolean isHidden; - - private final boolean isReadOnly; - - private final String keyString; - - private final String prettyName; - - BugzillaReportElement(String prettyName, String fieldName) { - this(prettyName, fieldName, false, false); - } - - BugzillaReportElement(String prettyName, String fieldName, boolean hidden) { - this(prettyName, fieldName, hidden, false); - } - - BugzillaReportElement(String prettyName, String fieldName, boolean hidden, boolean readonly) { - this.prettyName = prettyName; - this.keyString = fieldName; - this.isHidden = hidden; - this.isReadOnly = readonly; - } - - public String getKeyString() { - return keyString; - } - - public boolean isHidden() { - return isHidden; - } - - public boolean isReadOnly() { - return isReadOnly; - } - - public String toString() { - return prettyName; - } -} diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaReportSubmitForm.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaReportSubmitForm.java deleted file mode 100644 index 1f02a2775..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaReportSubmitForm.java +++ /dev/null @@ -1,639 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.bugzilla.core; - -import java.io.BufferedOutputStream; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.StringReader; -import java.io.UnsupportedEncodingException; -import java.net.HttpURLConnection; -import java.net.MalformedURLException; -import java.net.Proxy; -import java.net.URL; -import java.net.URLEncoder; -import java.security.GeneralSecurityException; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; -import java.text.ParseException; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; - -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.mylar.internal.tasks.core.HtmlStreamTokenizer; -import org.eclipse.mylar.internal.tasks.core.HtmlTag; -import org.eclipse.mylar.internal.tasks.core.WebClientUtil; -import org.eclipse.mylar.internal.tasks.core.HtmlStreamTokenizer.Token; -import org.eclipse.mylar.tasks.core.RepositoryOperation; -import org.eclipse.mylar.tasks.core.RepositoryTaskAttribute; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; - -/** - * - * @author Shawn Minto - * @author Mik Kersten (hardening of prototype) - * @author Rob Elves - * - * Class to handle the positing of a bug - */ -public class BugzillaReportSubmitForm { - - private static final String KEY_ID = "id"; - - private static final String VAL_TRUE = "true"; - - private static final String KEY_REMOVECC = "removecc"; - - private static final String KEY_CC = "cc"; - - private static final String POST_CONTENT_TYPE = "application/x-www-form-urlencoded"; - - private static final String REQUEST_PROPERTY_CONTENT_TYPE = "Content-Type"; - - private static final String REQUEST_PROPERTY_CONTENT_LENGTH = "Content-Length"; - - private static final String METHOD_POST = "POST"; - - private static final String KEY_BUGZILLA_PASSWORD = "Bugzilla_password"; - - private static final String KEY_BUGZILLA_LOGIN = "Bugzilla_login"; - - private static final String POST_BUG_CGI = "post_bug.cgi"; - - private static final String PROCESS_BUG_CGI = "process_bug.cgi"; - - public static final int WRAP_LENGTH = 90; - - private static final String VAL_PROCESS_BUG = "process_bug"; - - private static final String KEY_FORM_NAME = "form_name"; - - private static final String VAL_NONE = "none"; - - private static final String KEY_KNOB = "knob"; - - // TODO change to BugzillaReportElement.ADD_COMMENT - private static final String KEY_COMMENT = "comment"; - - private static final String KEY_SHORT_DESC = "short_desc"; - - public static final String FORM_POSTFIX_218 = " Submitted"; - - public static final String FORM_POSTFIX_216 = " posted"; - - public static final String FORM_PREFIX_BUG_218 = "Bug "; - - public static final String FORM_PREFIX_BUG_220 = "Issue "; - - /** The fields that are to be changed/maintained */ - private Map<String, String> fields = new HashMap<String, String>(); - - private URL postUrl; - - private Proxy proxySettings = Proxy.NO_PROXY; - - private String charset; - - /** The prefix for how to find the bug number from the return */ - private String prefix; - - private String prefix2; - - /** The postfix for how to find the bug number from the return */ - private String postfix; - - /** An alternate postfix for how to find the bug number from the return */ - private String postfix2; - - private String error = null; - - private RepositoryTaskData taskData = null; - - private boolean isNewBugPost = false; - - public BugzillaReportSubmitForm(String charEncoding) { - charset = charEncoding; - } - - public static BugzillaReportSubmitForm makeNewBugPost(String repositoryUrl, String userName, String password, - Proxy proxySettings, String characterEncoding, RepositoryTaskData model, boolean wrapDescription) - throws UnsupportedEncodingException { - - BugzillaReportSubmitForm form; - - if (characterEncoding != null) { - form = new BugzillaReportSubmitForm(characterEncoding); - } else { - form = new BugzillaReportSubmitForm(BugzillaCorePlugin.ENCODING_UTF_8); - } - - form.setTaskData(model); - - form.setPrefix(BugzillaReportSubmitForm.FORM_PREFIX_BUG_218); - form.setPrefix2(BugzillaReportSubmitForm.FORM_PREFIX_BUG_220); - - form.setPostfix(BugzillaReportSubmitForm.FORM_POSTFIX_216); - form.setPostfix2(BugzillaReportSubmitForm.FORM_POSTFIX_218); - - setConnectionsSettings(form, repositoryUrl, userName, password, proxySettings, POST_BUG_CGI); - - // go through all of the attributes and add them to - // the bug post - Iterator<RepositoryTaskAttribute> itr = model.getAttributes().iterator(); - while (itr.hasNext()) { - RepositoryTaskAttribute a = itr.next(); - if (a != null && a.getID() != null && a.getID().compareTo("") != 0) { - String value = null; - value = a.getValue(); - if (value == null) - continue; - form.add(a.getID(), value); - } - } - - // form.add(KEY_BUG_FILE_LOC, ""); - - // specify the product - form.add(BugzillaReportElement.PRODUCT.getKeyString(), model.getProduct()); - - // add the summary to the bug post - form.add(BugzillaReportElement.SHORT_DESC.getKeyString(), model.getSummary()); - - String formattedDescription = formatTextToLineWrap(model.getDescription(), wrapDescription); - model.setDescription(formattedDescription); - - if (model.getDescription().length() != 0) { - // add the new comment to the bug post if there - // is some text in - // it - form.add(KEY_COMMENT, model.getDescription()); - } - - form.setNewBugPost(true); - - return form; - } - - /** - * TODO: refactor common stuff with new bug post - * - * @param removeCC - * @param characterEncoding - * TODO - * - * @throws UnsupportedEncodingException - */ - public static BugzillaReportSubmitForm makeExistingBugPost(RepositoryTaskData model, String repositoryUrl, - String userName, String password, Proxy proxySettings, Set<String> removeCC, String characterEncoding) - throws UnsupportedEncodingException { - - BugzillaReportSubmitForm form; - - if (characterEncoding != null) { - form = new BugzillaReportSubmitForm(characterEncoding); - } else { - form = new BugzillaReportSubmitForm(BugzillaCorePlugin.ENCODING_UTF_8); - } - - form.setTaskData(model); - - // setDefaultCCValue(bug, userName); - setConnectionsSettings(form, repositoryUrl, userName, password, proxySettings, PROCESS_BUG_CGI); - - // go through all of the attributes and add them to the bug post - for (Iterator<RepositoryTaskAttribute> it = model.getAttributes().iterator(); it.hasNext();) { - RepositoryTaskAttribute a = it.next(); - if (a.getID().equals(BugzillaReportElement.CC.getKeyString()) - || a.getID().equals(BugzillaReportElement.REPORTER.getKeyString()) - || a.getID().equals(BugzillaReportElement.ASSIGNED_TO.getKeyString()) - || a.getID().equals(BugzillaReportElement.CREATION_TS.getKeyString())) { - continue; - } - if (a != null && a.getID() != null && a.getID().compareTo("") != 0 && !a.isHidden()) { - String value = a.getValue(); - // System.err.println(a.getID()+" "+a.getValue()); - // add the attribute to the bug post - form.add(a.getID(), value != null ? value : ""); - } else if (a != null && a.getID() != null && a.getID().compareTo("") != 0 && a.isHidden()) { - // we have a hidden attribute and we should send it back. - // System.err.println(a.getID()+" "+a.getValue()); - String value = a.getValue(); - - // Strip off timezone information - // 149513: Constant bugzilla mid-air collisions - if (a.getID().equals(BugzillaReportElement.DELTA_TS.getKeyString()) && value != null) { - value = stripTimeZone(value); - } - form.add(a.getID(), value); - } - } - - form.add("cc", "somewhere@nowhere.com"); - - // when posting the bug id is encoded in a hidden field named 'id' - form.add(KEY_ID, model.getAttributeValue(BugzillaReportElement.BUG_ID.getKeyString())); - - // add the operation to the bug post - RepositoryOperation o = model.getSelectedOperation(); - if (o == null) - form.add(KEY_KNOB, VAL_NONE); - else { - form.add(KEY_KNOB, o.getKnobName()); - if (o.hasOptions()) { - String sel = o.getOptionValue(o.getOptionSelection()); - form.add(o.getOptionName(), sel); - } else if (o.isInput()) { - String sel = o.getInputValue(); - form.add(o.getInputName(), sel); - } - } - form.add(KEY_FORM_NAME, VAL_PROCESS_BUG); - - if (model.getAttribute(BugzillaReportElement.SHORT_DESC.getKeyString()) != null) { - form.add(KEY_SHORT_DESC, model.getAttribute(BugzillaReportElement.SHORT_DESC.getKeyString()) - .getValue()); - } - - if (model.getNewComment().length() != 0) { - form.add(KEY_COMMENT, model.getNewComment()); - } - - if (removeCC != null && removeCC.size() > 0) { - String[] s = new String[removeCC.size()]; - form.add(KEY_CC, toCommaSeparatedList(removeCC.toArray(s))); - form.add(KEY_REMOVECC, VAL_TRUE); - } - - return form; - } - - - public static String stripTimeZone(String longTime) { - String result = longTime; - if (longTime != null) { - String[] values = longTime.split(" "); - if (values != null && values.length > 2) { - result = values[0] + " " + values[1]; - } - } - return result; - } - - private static String toCommaSeparatedList(String[] strings) { - StringBuffer buffer = new StringBuffer(); - for (int i = 0; i < strings.length; i++) { - buffer.append(strings[i]); - if (i != strings.length - 1) { - buffer.append(","); - } - } - return buffer.toString(); - } - - /** - * Add a value to be posted to the bug - * - * @param key - * The key for the value to be added - * @param value - * The value to be added - * @throws UnsupportedEncodingException - */ - private void add(String key, String value) throws UnsupportedEncodingException { - // try { - fields.put(key, URLEncoder.encode(value == null ? "" : value, charset)); - // BugzillaPlugin.ENCODING_UTF_8 - // } catch (UnsupportedEncodingException e) { - // // ignore - // } - } - - /** - * Post the bug to the bugzilla server - * - * @return The result of the responses - * @throws GeneralSecurityException - */ - public String submitReportToRepository() throws IOException, BugzillaException, PossibleBugzillaFailureException, GeneralSecurityException { - BufferedOutputStream out = null; - BufferedReader in = null; - String result = null; - try { - // connect to the bugzilla server - HttpURLConnection postConnection = WebClientUtil.getUrlConnection(postUrl, proxySettings, false); - - // set the connection method - postConnection.setRequestMethod(METHOD_POST); - String contentTypeString = POST_CONTENT_TYPE; - if (charset != null) { - contentTypeString += ";charset=" + charset; - } - postConnection.setRequestProperty(REQUEST_PROPERTY_CONTENT_TYPE, contentTypeString); - // get the url for the update with all of the changed values - - // System.err.println(">>> "+getPostBody()); - byte[] body = getPostBody().getBytes(); - postConnection.setRequestProperty(REQUEST_PROPERTY_CONTENT_LENGTH, String.valueOf(body.length)); - - // allow outgoing streams and open a stream to post to - postConnection.setDoOutput(true); - - out = new BufferedOutputStream(postConnection.getOutputStream()); - - // write the data and close the stream - out.write(body); - out.flush(); - - int responseCode = postConnection.getResponseCode(); - if (responseCode != HttpURLConnection.HTTP_OK && responseCode != HttpURLConnection.HTTP_CREATED) { - throw new BugzillaException("Server returned HTTP error: " + responseCode + " - " - + postConnection.getResponseMessage()); - } - - // open a stream to receive response from bugzilla - in = new BufferedReader(new InputStreamReader(postConnection.getInputStream())); - in.mark(10); - HtmlStreamTokenizer tokenizer = new HtmlStreamTokenizer(in, null); - - boolean existingBugPosted = false; - boolean isTitle = false; - String title = ""; - for (Token token = tokenizer.nextToken(); token.getType() != Token.EOF; token = tokenizer.nextToken()) { - - if (token.getType() == Token.TAG && ((HtmlTag) (token.getValue())).getTagType() == HtmlTag.Type.TITLE - && !((HtmlTag) (token.getValue())).isEndTag()) { - isTitle = true; - continue; - } - - if (isTitle) { - // get all of the data in the title tag - if (token.getType() != Token.TAG) { - title += ((StringBuffer) token.getValue()).toString().toLowerCase() + " "; - continue; - } else if (token.getType() == Token.TAG - && ((HtmlTag) token.getValue()).getTagType() == HtmlTag.Type.TITLE - && ((HtmlTag) token.getValue()).isEndTag()) { - if (!isNewBugPost - && (title.toLowerCase().matches(".*bug\\s+processed.*") || title.toLowerCase().matches( - ".*defect\\s+processed.*"))) { - existingBugPosted = true; - } else if (isNewBugPost && prefix != null && prefix2 != null && postfix != null - && postfix2 != null && result == null) { - int startIndex = -1; - int startIndexPrefix = title.toLowerCase().indexOf(prefix.toLowerCase()); - int startIndexPrefix2 = title.toLowerCase().indexOf(prefix2.toLowerCase()); - - if (startIndexPrefix != -1 || startIndexPrefix2 != -1) { - if (startIndexPrefix != -1) { - startIndex = startIndexPrefix + prefix.length(); - } else { - startIndex = startIndexPrefix2 + prefix2.length(); - } - int stopIndex = title.toLowerCase().indexOf(postfix.toLowerCase(), startIndex); - if (stopIndex == -1) - stopIndex = title.toLowerCase().indexOf(postfix2.toLowerCase(), startIndex); - if (stopIndex > -1) { - result = (title.substring(startIndex, stopIndex)).trim(); - } - } - } - break; - } - } - } - - if ((!isNewBugPost && existingBugPosted != true) || (isNewBugPost && result == null)) { - in.reset(); - BugzillaServerFacade.parseHtmlError(in); - } - } catch (KeyManagementException e) { - throw new BugzillaException("Could not POST form. Communications error: " + e.getMessage(), e); - } catch (NoSuchAlgorithmException e) { - throw new BugzillaException("Could not POST form. Communications error: " + e.getMessage(), e); - } catch (ParseException e) { - throw new IOException("Could not parse response from server."); - } finally { - try { - if (in != null) - in.close(); - if (out != null) - out.close(); - - } catch (IOException e) { - BugzillaCorePlugin.log(new Status(IStatus.ERROR, BugzillaCorePlugin.PLUGIN_ID, IStatus.ERROR, - "Problem posting the bug", e)); - } - } - // return the bug number - return result; - } - - /** - * Get the url that contains the attributes to be posted - * - * @return The url for posting - */ - private String getPostBody() { - String postBody = ""; - - // go through all of the attributes and add them to the body of the post - Iterator<Map.Entry<String, String>> anIterator = fields.entrySet().iterator(); - while (anIterator.hasNext()) { - Map.Entry<String, String> entry = anIterator.next(); - postBody = postBody + entry.getKey() + "=" + entry.getValue(); - if (anIterator.hasNext()) - postBody = postBody + "&"; - } - return postBody; - } - - private void setPrefix(String prefix) { - this.prefix = prefix; - } - - private void setPostfix(String postfix) { - this.postfix = postfix; - } - - private void setPostfix2(String postfix) { - this.postfix2 = postfix; - } - - public String getError() { - return parseError(); - } - - /** - * remove all of the hyperlinks and erroneous info - * - * @return - */ - private String parseError() { - String newError = ""; - try { - HtmlStreamTokenizer tokenizer = new HtmlStreamTokenizer(new StringReader(error), null); - for (Token token = tokenizer.nextToken(); token.getType() != Token.EOF; token = tokenizer.nextToken()) { - if (token.getType() == Token.TAG && ((HtmlTag) (token.getValue())).getTagType() == HtmlTag.Type.A) { - - } else if (token.getType() == Token.TAG - && ((HtmlTag) (token.getValue())).getTagType() == HtmlTag.Type.FORM) { - for (Token token2 = tokenizer.nextToken(); token2.getType() != Token.EOF; token2 = tokenizer - .nextToken()) { - if (token2.getType() == Token.TAG) { - HtmlTag tag = (HtmlTag) token2.getValue(); - if (tag.getTagType() == HtmlTag.Type.FORM && tag.isEndTag()) - break; - - } - } - } else { - newError += token.getWhitespace().toString() + token.getValue(); - } - } - } catch (Exception e) { - newError = error; - } - return newError; - } - - private void setPrefix2(String prefix2) { - this.prefix2 = prefix2; - } - - // private void setCharset(String charset) { - // this.charset = charset; - // } - - private static void setConnectionsSettings(BugzillaReportSubmitForm form, String repositoryUrl, String userName, - String password, Proxy proxySettings, String formName) throws UnsupportedEncodingException { - - String baseURL = repositoryUrl; - - if (!baseURL.endsWith("/")) - baseURL += "/"; - try { - form.postUrl = new URL(baseURL + formName); - if (proxySettings != null) { - form.proxySettings = proxySettings; - } - } catch (MalformedURLException e) { - // we should be ok here - } - - // add the login information to the bug post - form.add(KEY_BUGZILLA_LOGIN, userName); - form.add(KEY_BUGZILLA_PASSWORD, password); - } - - // /** - // * Sets the cc field to the user's address if a cc has not been specified - // to - // * ensure that commenters are on the cc list. TODO: Review this mechanism - // * - // * @author Wesley Coelho - // */ - // private static void setDefaultCCValue(BugzillaReport bug, String - // userName) { - // // RepositoryTaskAttribute newCCattr = - // // bug.getAttributeForKnobName(KEY_NEWCC); - // RepositoryTaskAttribute owner = - // bug.getAttribute(BugzillaReportElement.ASSIGNED_TO); - // - // // Don't add the cc if the user is the bug owner - // if (userName == null || (owner != null && - // owner.getValue().indexOf(userName) != -1)) { - // // MylarStatusHandler.log("Could not determine CC value for - // // repository: " + repository, null); - // return; - // } - // // Don't add cc if already there - // RepositoryTaskAttribute ccAttribute = - // bug.getAttribute(BugzillaReportElement.CC); - // if (ccAttribute != null && ccAttribute.getValues().contains(userName)) { - // return; - // } - // RepositoryTaskAttribute newCCattr = - // bug.getAttribute(BugzillaReportElement.NEWCC); - // if (newCCattr == null) { - // newCCattr = new RepositoryTaskAttribute(BugzillaReportElement.NEWCC); - // bug.addAttribute(BugzillaReportElement.NEWCC, newCCattr); - // } - // // Add the user to the cc list - // newCCattr.setValue(userName); - // } - - /** - * Break text up into lines of about 80 characters so that it is displayed - * properly in bugzilla - */ - private static String formatTextToLineWrap(String origText, boolean hardWrap) { - // BugzillaServerVersion bugzillaServerVersion = - // IBugzillaConstants.BugzillaServerVersion.fromString(repository - // .getVersion()); - // if (bugzillaServerVersion != null && - // bugzillaServerVersion.compareTo(BugzillaServerVersion.SERVER_220) >= - // 0) { - // return origText; - if (!hardWrap) { - return origText; - } else { - String[] textArray = new String[(origText.length() / WRAP_LENGTH + 1) * 2]; - for (int i = 0; i < textArray.length; i++) - textArray[i] = null; - int j = 0; - while (true) { - int spaceIndex = origText.indexOf(" ", WRAP_LENGTH - 5); - if (spaceIndex == origText.length() || spaceIndex == -1) { - textArray[j] = origText; - break; - } - textArray[j] = origText.substring(0, spaceIndex); - origText = origText.substring(spaceIndex + 1, origText.length()); - j++; - } - - String newText = ""; - - for (int i = 0; i < textArray.length; i++) { - if (textArray[i] == null) - break; - newText += textArray[i] + "\n"; - } - return newText; - } - } - - public boolean isNewBugPost() { - return isNewBugPost; - } - - public void setNewBugPost(boolean isNewBugPost) { - this.isNewBugPost = isNewBugPost; - } - - public RepositoryTaskData getTaskData() { - return taskData; - } - - public void setTaskData(RepositoryTaskData taskData) { - this.taskData = taskData; - } - - - public void setProxySettings(Proxy proxySettings) { - this.proxySettings = proxySettings; - } -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaRepositoryConnector.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaRepositoryConnector.java deleted file mode 100644 index 55b59c82c..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaRepositoryConnector.java +++ /dev/null @@ -1,217 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.core; - -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.Proxy; -import java.security.GeneralSecurityException; -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants.BugzillaServerVersion; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.IAttachmentHandler; -import org.eclipse.mylar.tasks.core.IOfflineTaskHandler; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.QueryHitCollector; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.mylar.tasks.core.TaskList; -import org.eclipse.mylar.tasks.core.TaskRepository; - -/** - * @author Mik Kersten - * @author Rob Elves - */ -public class BugzillaRepositoryConnector extends AbstractRepositoryConnector { - - private static final String CLIENT_LABEL = "Bugzilla (supports uncustomized 2.18-2.22)"; - - private BugzillaAttachmentHandler attachmentHandler = new BugzillaAttachmentHandler(); - - private BugzillaOfflineTaskHandler offlineHandler; - - private boolean forceSynchExecForTesting = false; - - public void init(TaskList taskList) { - super.init(taskList); - this.offlineHandler = new BugzillaOfflineTaskHandler(taskList); - } - - public String getLabel() { - return CLIENT_LABEL; - } - - @Override - public IAttachmentHandler getAttachmentHandler() { - return attachmentHandler; - } - - @Override - public IOfflineTaskHandler getOfflineTaskHandler() { - return offlineHandler; - } - - public String getRepositoryType() { - return BugzillaCorePlugin.REPOSITORY_KIND; - } - - public ITask createTaskFromExistingKey(TaskRepository repository, String id, Proxy proxySettings) - throws CoreException { - int bugId = -1; - try { - if (id != null) { - bugId = Integer.parseInt(id); - } else { - return null; - } - } catch (NumberFormatException nfe) { - if (!forceSynchExecForTesting) { - throw new CoreException(new Status(IStatus.ERROR, BugzillaCorePlugin.PLUGIN_ID, IStatus.OK, - "invalid report id: " + id, nfe)); - // MessageDialog.openInformation(null, - // TasksUiPlugin.TITLE_DIALOG, "Invalid report id: " + id); - } - return null; - } - - String handle = AbstractRepositoryTask.getHandle(repository.getUrl(), bugId); - ITask task = taskList.getTask(handle); - - if (task == null) { - RepositoryTaskData taskData = null; - try { - taskData = BugzillaServerFacade.getBug(repository.getUrl(), repository.getUserName(), repository - .getPassword(), proxySettings, repository.getCharacterEncoding(), bugId); - } catch (Throwable e) { - return null; - } - if (taskData != null) { - task = new BugzillaTask(handle, taskData.getId() + ": " + taskData.getDescription(), true); - ((BugzillaTask) task).setTaskData(taskData); - taskList.addTask(task); - } - } - return task; - } - - @Override - public boolean canCreateTaskFromKey(TaskRepository repository) { - return true; - } - - @Override - public boolean canCreateNewTask(TaskRepository repository) { - return true; - } - - public List<String> getSupportedVersions() { - if (supportedVersions == null) { - supportedVersions = new ArrayList<String>(); - for (BugzillaServerVersion version : BugzillaServerVersion.values()) { - supportedVersions.add(version.toString()); - } - } - return supportedVersions; - } - - @Override - public IStatus performQuery(final AbstractRepositoryQuery query, TaskRepository repository, Proxy proxySettings, - IProgressMonitor monitor, QueryHitCollector resultCollector) { - - IStatus queryStatus = Status.OK_STATUS; - RepositoryQueryResultsFactory queryFactory = new RepositoryQueryResultsFactory(); - try { - String queryUrl = query.getUrl(); - queryUrl = queryUrl.concat(IBugzillaConstants.CONTENT_TYPE_RDF); - if (repository.hasCredentials()) { - try { - queryUrl = BugzillaServerFacade.addCredentials(queryUrl, repository.getUserName(), repository - .getPassword()); - } catch (UnsupportedEncodingException e) { - // ignore - } - } - queryFactory.performQuery(taskList, repository.getUrl(), resultCollector, queryUrl, proxySettings, query - .getMaxHits(), repository.getCharacterEncoding()); - } catch (IOException e) { - queryStatus = new Status(IStatus.ERROR, BugzillaCorePlugin.PLUGIN_ID, Status.ERROR, - "Check repository credentials and connectivity.", e); - } catch (BugzillaException e) { - if (e instanceof UnrecognizedReponseException) { - queryStatus = new Status(IStatus.ERROR, BugzillaCorePlugin.PLUGIN_ID, Status.INFO, - "Unrecognized response from server", e); - } else { - queryStatus = new Status(IStatus.ERROR, BugzillaCorePlugin.PLUGIN_ID, IStatus.OK, - "Unable to perform query due to Bugzilla error", e); - } - } catch (GeneralSecurityException e) { - queryStatus = new Status(IStatus.ERROR, BugzillaCorePlugin.PLUGIN_ID, IStatus.OK, - "Unable to perform query due to repository configuration error", e); - } - return queryStatus; - - } - - public String getRepositoryUrlFromTaskUrl(String url) { - if (url == null) { - return null; - } else { - int index = url.indexOf(IBugzillaConstants.POST_ARGS_SHOW_BUG); - if (index != -1) { - return url.substring(0, index); - } else { - return null; - } - } - } - - @Override - public void updateAttributes(final TaskRepository repository, Proxy proxySettings, IProgressMonitor monitor) - throws CoreException { - try { - BugzillaCorePlugin.getRepositoryConfiguration(true, repository.getUrl(), proxySettings, repository - .getUserName(), repository.getPassword(), repository.getCharacterEncoding()); - } catch (Exception e) { - throw new CoreException(new Status(IStatus.ERROR, BugzillaCorePlugin.PLUGIN_ID, IStatus.OK, - "could not update repository configuration", e)); - } - } - - @Override - public void updateTaskState(AbstractRepositoryTask repositoryTask) { - // TODO: implement once this is consistent with offline task data - } - - // @Override - // public boolean validate(TaskRepository repository) { - // return repository != null; - // if (!repository.hasCredentials()) { - // MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), - // TasksUiPlugin.TITLE_DIALOG, "Repository missing or does not have - // credentials set, verify via " - // + TaskRepositoriesView.NAME + "."); - // return false; - // } - // return true; - // } - - public void setForceSynchExecForTesting(boolean forceSynchExecForTesting) { - this.forceSynchExecForTesting = forceSynchExecForTesting; - } -} diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaRepositoryQuery.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaRepositoryQuery.java deleted file mode 100644 index cc5dd2b26..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaRepositoryQuery.java +++ /dev/null @@ -1,47 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.core; - -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.TaskList; - -/** - * @author Shawn Minto - * @author Mik Kersten - */ -public class BugzillaRepositoryQuery extends AbstractRepositoryQuery { - - private boolean customQuery = false; - - public BugzillaRepositoryQuery(String repositoryUrl, String queryUrl, String description, String maxHits, TaskList taskList) { - super(description, taskList); - this.url = queryUrl; - this.repositoryUrl = repositoryUrl; - try { - this.maxHits = Integer.parseInt(maxHits); - } catch (Exception e) { - this.maxHits = -1; - } - } - - public String getRepositoryKind() { - return BugzillaCorePlugin.REPOSITORY_KIND; - } - - public boolean isCustomQuery() { - return customQuery; - } - - public void setCustomQuery(boolean customQuery) { - this.customQuery = customQuery; - } -} diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaServerFacade.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaServerFacade.java deleted file mode 100644 index 6084cb444..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaServerFacade.java +++ /dev/null @@ -1,709 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.bugzilla.core; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; -import java.net.HttpURLConnection; -import java.net.MalformedURLException; -import java.net.Proxy; -import java.net.URL; -import java.net.URLEncoder; -import java.nio.charset.Charset; -import java.security.GeneralSecurityException; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; -import java.text.ParseException; -import java.util.Collections; -import java.util.List; - -import javax.security.auth.login.LoginException; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants.BUGZILLA_OPERATION; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants.BUGZILLA_REPORT_STATUS; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants.BUGZILLA_RESOLUTION; -import org.eclipse.mylar.internal.tasks.core.HtmlStreamTokenizer; -import org.eclipse.mylar.internal.tasks.core.HtmlTag; -import org.eclipse.mylar.internal.tasks.core.WebClientUtil; -import org.eclipse.mylar.internal.tasks.core.HtmlStreamTokenizer.Token; -import org.eclipse.mylar.tasks.core.RepositoryOperation; -import org.eclipse.mylar.tasks.core.RepositoryTaskAttribute; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; - -/** - * @author Mik Kersten - * @author Rob Elves - */ -public class BugzillaServerFacade { - - private static final String ATTR_CHARSET = "charset"; - - private static final String OPERATION_INPUT_ASSIGNED_TO = "assigned_to"; - - private static final String OPERATION_INPUT_DUP_ID = "dup_id"; - - private static final String OPERATION_OPTION_RESOLUTION = "resolution"; - - private static final String OPERATION_LABEL_CLOSE = "Mark as CLOSED"; - - private static final String OPERATION_LABEL_VERIFY = "Mark as VERIFIED"; - - private static final String OPERATION_LABEL_REOPEN = "Reopen bug"; - - private static final String OPERATION_LABEL_REASSIGN_DEFAULT = "Reassign to default assignee"; - - private static final String OPERATION_LABEL_REASSIGN = "Reassign to"; - - private static final String OPERATION_LABEL_DUPLICATE = "Mark as duplicate of #"; - - private static final String OPERATION_LABEL_RESOLVE = "Resolve as"; - - private static final String OPERATION_LABEL_ACCEPT = "Accept (change status to ASSIGNED)"; - - private static final BugzillaAttributeFactory attributeFactory = new BugzillaAttributeFactory(); - - public static RepositoryTaskData getBug(String repositoryUrl, String userName, String password, - Proxy proxySettings, String characterEncoding, int id) throws IOException, MalformedURLException, - LoginException, GeneralSecurityException, BugzillaException { - - // >>> bug 154729 - // MylarStatusHandler.log("Retrieving task data from: " + repositoryUrl, - // BugzillaServerFacade.class); - - RepositoryTaskData bugReport = new RepositoryTaskData(new BugzillaAttributeFactory(), - BugzillaCorePlugin.REPOSITORY_KIND, repositoryUrl, "" + id); - setupExistingBugAttributes(repositoryUrl, bugReport); - - RepositoryReportFactory reportFactory = new RepositoryReportFactory(); - reportFactory.populateReport(bugReport, repositoryUrl, proxySettings, userName, password, characterEncoding); - updateBugAttributeOptions(repositoryUrl, proxySettings, userName, password, bugReport, characterEncoding); - addValidOperations(bugReport, userName); - - return bugReport; - } - - public static String addCredentials(String url, String userName, String password) - throws UnsupportedEncodingException { - if ((userName != null && userName.length() > 0) && (password != null && password.length() > 0)) { - url += "&" + IBugzillaConstants.POST_ARGS_LOGIN - + URLEncoder.encode(userName, BugzillaCorePlugin.ENCODING_UTF_8) - + IBugzillaConstants.POST_ARGS_PASSWORD - + URLEncoder.encode(password, BugzillaCorePlugin.ENCODING_UTF_8); - } - return url; - } - - /** - * Get the list of products - * - * @param proxySettings - * TODO - * @param encoding - * TODO - * - * @return The list of valid products a bug can be logged against - * @throws IOException - * LoginException Exception - */ - public static List<String> getProductList(String repositoryUrl, Proxy proxySettings, String userName, - String password, String encoding) throws IOException, LoginException, Exception { - - return BugzillaCorePlugin.getRepositoryConfiguration(true, repositoryUrl, proxySettings, userName, password, - encoding).getProducts(); - - // BugzillaQueryPageParser parser = new - // BugzillaQueryPageParser(repository, new NullProgressMonitor()); - // if (!parser.wasSuccessful()) { - // throw new RuntimeException("Couldn't get products"); - // } else { - // return Arrays.asList(parser.getProductValues()); - // } - - } - - // TODO: improve and move to repository connector? - public static void validateCredentials(Proxy proxySettings, String repositoryUrl, String userid, String password) - throws IOException, BugzillaException, KeyManagementException, GeneralSecurityException { - - proxySettings = proxySettings == null ? Proxy.NO_PROXY : proxySettings; - - String url = repositoryUrl + "/index.cgi?" + IBugzillaConstants.POST_ARGS_LOGIN - + URLEncoder.encode(userid, BugzillaCorePlugin.ENCODING_UTF_8) + IBugzillaConstants.POST_ARGS_PASSWORD - + URLEncoder.encode(password, BugzillaCorePlugin.ENCODING_UTF_8); - - URL serverURL = new URL(url); - HttpURLConnection serverConnection = WebClientUtil.openUrlConnection(serverURL, proxySettings, false); - BufferedReader in = new BufferedReader(new InputStreamReader(serverConnection.getInputStream())); - try { - parseHtmlError(in); - } catch (UnrecognizedReponseException e) { - return; - } - } - - /** - * Utility method for determining what potential error has occurred from a - * bugzilla html reponse page - * - * @throws CoreException - */ - public static void parseHtmlError(BufferedReader in) throws IOException, LoginException, BugzillaException { - HtmlStreamTokenizer tokenizer = new HtmlStreamTokenizer(in, null); - - boolean isTitle = false; - String title = ""; - String body = ""; - - try { - - for (Token token = tokenizer.nextToken(); token.getType() != Token.EOF; token = tokenizer.nextToken()) { - body += token.toString(); - if (token.getType() == Token.TAG && ((HtmlTag) (token.getValue())).getTagType() == HtmlTag.Type.TITLE - && !((HtmlTag) (token.getValue())).isEndTag()) { - isTitle = true; - continue; - } - - if (isTitle) { - // get all of the data in the title tag - if (token.getType() != Token.TAG) { - title += ((StringBuffer) token.getValue()).toString().toLowerCase() + " "; - continue; - } else if (token.getType() == Token.TAG - && ((HtmlTag) token.getValue()).getTagType() == HtmlTag.Type.TITLE - && ((HtmlTag) token.getValue()).isEndTag()) { - - if (title.indexOf("login") != -1 || title.indexOf("log in") != -1 - || (title.indexOf("invalid") != -1 && title.indexOf("password") != -1) - || title.indexOf("check e-mail") != -1) { - throw new LoginException(IBugzillaConstants.ERROR_INVALID_USERNAME_OR_PASSWORD); - } else if (title.indexOf(IBugzillaConstants.ERROR_MIDAIR_COLLISION) != -1) { - throw new BugzillaException(IBugzillaConstants.ERROR_MSG_MIDAIR_COLLISION); - } else if (title.indexOf(IBugzillaConstants.ERROR_COMMENT_REQUIRED) != -1) { - throw new BugzillaException(IBugzillaConstants.ERROR_MSG_COMMENT_REQUIRED); - } - } - } - } - - throw new UnrecognizedReponseException(body); - - } catch (ParseException e) { - throw new IOException("Unable to parse result from repository:\n" + e.getMessage()); - } - } - - /** - * Adds bug attributes to new bug model and sets defaults - * - * @param proxySettings - * TODO - * @param characterEncoding - * TODO - * - * @throws IOException - * @throws NoSuchAlgorithmException - * @throws LoginException - * @throws KeyManagementException - * @throws BugzillaException - */ - public static void setupNewBugAttributes(String repositoryUrl, Proxy proxySettings, String userName, - String password, NewBugzillaReport newReport, String characterEncoding) throws IOException, - KeyManagementException, GeneralSecurityException, NoSuchAlgorithmException, BugzillaException { - - newReport.removeAllAttributes(); - - RepositoryConfiguration repositoryConfiguration = BugzillaCorePlugin.getRepositoryConfiguration(false, - repositoryUrl, proxySettings, userName, password, characterEncoding); - - RepositoryTaskAttribute a = BugzillaServerFacade.makeNewAttribute(BugzillaReportElement.PRODUCT); - List<String> optionValues = repositoryConfiguration.getProducts(); - Collections.sort(optionValues); - // for (String option : optionValues) { - // a.addOptionValue(option, option); - // } - a.setValue(newReport.getProduct()); - a.setReadOnly(true); - newReport.addAttribute(BugzillaReportElement.PRODUCT.getKeyString(), a); - // attributes.put(a.getName(), a); - - a = BugzillaServerFacade.makeNewAttribute(BugzillaReportElement.BUG_STATUS); - optionValues = repositoryConfiguration.getStatusValues(); - for (String option : optionValues) { - a.addOptionValue(option, option); - } - a.setValue(IBugzillaConstants.VALUE_STATUS_NEW); - newReport.addAttribute(BugzillaReportElement.BUG_STATUS.getKeyString(), a); - // attributes.put(a.getName(), a); - - a = BugzillaServerFacade.makeNewAttribute(BugzillaReportElement.VERSION); - optionValues = repositoryConfiguration.getVersions(newReport.getProduct()); - Collections.sort(optionValues); - for (String option : optionValues) { - a.addOptionValue(option, option); - } - if (optionValues != null && optionValues.size() > 0) { - a.setValue(optionValues.get(optionValues.size() - 1)); - } - newReport.addAttribute(BugzillaReportElement.VERSION.getKeyString(), a); - // attributes.put(a.getName(), a); - - a = BugzillaServerFacade.makeNewAttribute(BugzillaReportElement.COMPONENT); - optionValues = repositoryConfiguration.getComponents(newReport.getProduct()); - Collections.sort(optionValues); - for (String option : optionValues) { - a.addOptionValue(option, option); - } - if (optionValues != null && optionValues.size() > 0) { - a.setValue(optionValues.get(0)); - } - newReport.addAttribute(BugzillaReportElement.COMPONENT.getKeyString(), a); - - a = BugzillaServerFacade.makeNewAttribute(BugzillaReportElement.REP_PLATFORM); - optionValues = repositoryConfiguration.getPlatforms(); - Collections.sort(optionValues); - for (String option : optionValues) { - a.addOptionValue(option, option); - } - if (optionValues != null && optionValues.size() > 0) { - a.setValue(optionValues.get(0)); - } - newReport.addAttribute(BugzillaReportElement.REP_PLATFORM.getKeyString(), a); - // attributes.put(a.getName(), a); - - a = BugzillaServerFacade.makeNewAttribute(BugzillaReportElement.OP_SYS); - optionValues = repositoryConfiguration.getOSs(); - for (String option : optionValues) { - a.addOptionValue(option, option); - } - if (optionValues != null && optionValues.size() > 0) { - a.setValue(optionValues.get(optionValues.size() - 1)); - } - newReport.addAttribute(BugzillaReportElement.OP_SYS.getKeyString(), a); - // attributes.put(a.getName(), a); - - a = BugzillaServerFacade.makeNewAttribute(BugzillaReportElement.PRIORITY); - optionValues = repositoryConfiguration.getPriorities(); - for (String option : optionValues) { - a.addOptionValue(option, option); - } - a.setValue(optionValues.get((optionValues.size() / 2))); - newReport.addAttribute(BugzillaReportElement.PRIORITY.getKeyString(), a); - // attributes.put(a.getName(), a); - - a = BugzillaServerFacade.makeNewAttribute(BugzillaReportElement.BUG_SEVERITY); - optionValues = repositoryConfiguration.getSeverities(); - for (String option : optionValues) { - a.addOptionValue(option, option); - } - a.setValue(optionValues.get((optionValues.size() / 2))); - newReport.addAttribute(BugzillaReportElement.BUG_SEVERITY.getKeyString(), a); - // attributes.put(a.getName(), a); - - // a = new - // RepositoryTaskAttribute(BugzillaReportElement.TARGET_MILESTONE); - // optionValues = - // BugzillaPlugin.getDefault().getProductConfiguration(serverUrl).getTargetMilestones( - // newReport.getProduct()); - // for (String option : optionValues) { - // a.addOptionValue(option, option); - // } - // if(optionValues.size() > 0) { - // // new bug posts will fail if target_milestone element is included - // // and there are no milestones on the server - // newReport.addAttribute(BugzillaReportElement.TARGET_MILESTONE, a); - // } - - a = BugzillaServerFacade.makeNewAttribute(BugzillaReportElement.ASSIGNED_TO); - a.setValue(""); - a.setReadOnly(false); - newReport.addAttribute(BugzillaReportElement.ASSIGNED_TO.getKeyString(), a); - // attributes.put(a.getName(), a); - - a = BugzillaServerFacade.makeNewAttribute(BugzillaReportElement.BUG_FILE_LOC); - a.setValue("http://"); - a.setHidden(false); - newReport.addAttribute(BugzillaReportElement.BUG_FILE_LOC.getKeyString(), a); - // attributes.put(a.getName(), a); - - // newReport.attributes = attributes; - } - - public static void setupExistingBugAttributes(String serverUrl, RepositoryTaskData existingReport) { - // ordered list of elements as they appear in UI - // and additional elements that may not appear in the incoming xml - // stream but need to be present for bug submission - BugzillaReportElement[] reportElements = { BugzillaReportElement.BUG_STATUS, BugzillaReportElement.RESOLUTION, - BugzillaReportElement.BUG_ID, BugzillaReportElement.REP_PLATFORM, BugzillaReportElement.PRODUCT, - BugzillaReportElement.OP_SYS, BugzillaReportElement.COMPONENT, BugzillaReportElement.VERSION, - BugzillaReportElement.PRIORITY, BugzillaReportElement.BUG_SEVERITY, BugzillaReportElement.ASSIGNED_TO, - BugzillaReportElement.TARGET_MILESTONE, BugzillaReportElement.REPORTER, - BugzillaReportElement.DEPENDSON, BugzillaReportElement.BLOCKED, BugzillaReportElement.BUG_FILE_LOC, - BugzillaReportElement.NEWCC, BugzillaReportElement.KEYWORDS }; // BugzillaReportElement.VOTES, - - for (BugzillaReportElement element : reportElements) { - RepositoryTaskAttribute reportAttribute = BugzillaServerFacade.makeNewAttribute(element); - existingReport.addAttribute(element.getKeyString(), reportAttribute); - } - } - - private static void updateBugAttributeOptions(String repositoryUrl, Proxy proxySettings, String userName, - String password, RepositoryTaskData existingReport, String characterEncoding) throws IOException, - KeyManagementException, GeneralSecurityException, BugzillaException { - String product = existingReport.getAttributeValue(BugzillaReportElement.PRODUCT.getKeyString()); - for (RepositoryTaskAttribute attribute : existingReport.getAttributes()) { - BugzillaReportElement element = BugzillaReportElement.valueOf(attribute.getID().trim().toUpperCase()); - attribute.clearOptions(); - List<String> optionValues = BugzillaCorePlugin.getRepositoryConfiguration(false, repositoryUrl, - proxySettings, userName, password, characterEncoding).getOptionValues(element, product); - if (element != BugzillaReportElement.OP_SYS && element != BugzillaReportElement.BUG_SEVERITY - && element != BugzillaReportElement.PRIORITY && element != BugzillaReportElement.BUG_STATUS) { - Collections.sort(optionValues); - } - if (element == BugzillaReportElement.TARGET_MILESTONE && optionValues.isEmpty()) { - existingReport.removeAttribute(BugzillaReportElement.TARGET_MILESTONE); - continue; - } - for (String option : optionValues) { - attribute.addOptionValue(option, option); - } - } - - } - - public static void addValidOperations(RepositoryTaskData bugReport, String userName) { - BUGZILLA_REPORT_STATUS status = BUGZILLA_REPORT_STATUS.valueOf(bugReport.getStatus()); - switch (status) { - case UNCONFIRMED: - case REOPENED: - case NEW: - addOperation(bugReport, BUGZILLA_OPERATION.none, userName); - addOperation(bugReport, BUGZILLA_OPERATION.accept, userName); - addOperation(bugReport, BUGZILLA_OPERATION.resolve, userName); - addOperation(bugReport, BUGZILLA_OPERATION.duplicate, userName); - addOperation(bugReport, BUGZILLA_OPERATION.reassign, userName); - addOperation(bugReport, BUGZILLA_OPERATION.reassignbycomponent, userName); - break; - case ASSIGNED: - addOperation(bugReport, BUGZILLA_OPERATION.none, userName); - addOperation(bugReport, BUGZILLA_OPERATION.resolve, userName); - addOperation(bugReport, BUGZILLA_OPERATION.duplicate, userName); - addOperation(bugReport, BUGZILLA_OPERATION.reassign, userName); - addOperation(bugReport, BUGZILLA_OPERATION.reassignbycomponent, userName); - break; - case RESOLVED: - addOperation(bugReport, BUGZILLA_OPERATION.none, userName); - addOperation(bugReport, BUGZILLA_OPERATION.reopen, userName); - addOperation(bugReport, BUGZILLA_OPERATION.verify, userName); - addOperation(bugReport, BUGZILLA_OPERATION.close, userName); - break; - case CLOSED: - addOperation(bugReport, BUGZILLA_OPERATION.none, userName); - addOperation(bugReport, BUGZILLA_OPERATION.reopen, userName); - break; - case VERIFIED: - addOperation(bugReport, BUGZILLA_OPERATION.none, userName); - addOperation(bugReport, BUGZILLA_OPERATION.reopen, userName); - addOperation(bugReport, BUGZILLA_OPERATION.close, userName); - } - } - - public static void addOperation(RepositoryTaskData bugReport, BUGZILLA_OPERATION opcode, String userName) { - RepositoryOperation newOperation = null; - switch (opcode) { - case none: - newOperation = new RepositoryOperation(opcode.toString(), "Leave as " + bugReport.getStatus() + " " - + bugReport.getResolution()); - newOperation.setChecked(true); - break; - case accept: - newOperation = new RepositoryOperation(opcode.toString(), OPERATION_LABEL_ACCEPT); - break; - case resolve: - newOperation = new RepositoryOperation(opcode.toString(), OPERATION_LABEL_RESOLVE); - newOperation.setUpOptions(OPERATION_OPTION_RESOLUTION); - for (BUGZILLA_RESOLUTION resolution : BUGZILLA_RESOLUTION.values()) { - newOperation.addOption(resolution.toString(), resolution.toString()); - } - break; - case duplicate: - newOperation = new RepositoryOperation(opcode.toString(), OPERATION_LABEL_DUPLICATE); - newOperation.setInputName(OPERATION_INPUT_DUP_ID); - newOperation.setInputValue(""); - break; - case reassign: - String localUser = userName; - newOperation = new RepositoryOperation(opcode.toString(), OPERATION_LABEL_REASSIGN); - newOperation.setInputName(OPERATION_INPUT_ASSIGNED_TO); - newOperation.setInputValue(localUser); - break; - case reassignbycomponent: - newOperation = new RepositoryOperation(opcode.toString(), OPERATION_LABEL_REASSIGN_DEFAULT); - break; - case reopen: - newOperation = new RepositoryOperation(opcode.toString(), OPERATION_LABEL_REOPEN); - break; - case verify: - newOperation = new RepositoryOperation(opcode.toString(), OPERATION_LABEL_VERIFY); - break; - case close: - newOperation = new RepositoryOperation(opcode.toString(), OPERATION_LABEL_CLOSE); - break; - default: - break; - // MylarStatusHandler.log("Unknown bugzilla operation code recieved", - // BugzillaRepositoryUtil.class); - } - if (newOperation != null) { - bugReport.addOperation(newOperation); - } - } - -// public static String getBugUrl(String repositoryUrl, int id, String userName, String password) { -// -// String url = repositoryUrl + IBugzillaConstants.POST_ARGS_SHOW_BUG + id; -// try { -// url = addCredentials(url, userName, password); -// } catch (UnsupportedEncodingException e) { -// return ""; -// } -// return url; -// } - - public static String getBugUrlWithoutLogin(String repositoryUrl, int id) { - String url = repositoryUrl + IBugzillaConstants.POST_ARGS_SHOW_BUG + id; - return url; - } - - public static String getCharsetFromString(String string) { - int charsetStartIndex = string.indexOf(ATTR_CHARSET); - if (charsetStartIndex != -1) { - int charsetEndIndex = string.indexOf("\"", charsetStartIndex); // TODO: - // could - // be - // space - // after? - if (charsetEndIndex == -1) { - charsetEndIndex = string.length(); - } - String charsetString = string.substring(charsetStartIndex + 8, charsetEndIndex); - if (Charset.availableCharsets().containsKey(charsetString)) { - return charsetString; - } - } - return null; - } - - protected static RepositoryTaskAttribute makeNewAttribute( - org.eclipse.mylar.internal.bugzilla.core.BugzillaReportElement tag) { - return attributeFactory.createAttribute(tag.getKeyString()); - } - -} - -// public static String decodeStringFromCharset(String string, String -// charset) throws UnsupportedEncodingException { -// String decoded = string; -// if (charset != null && string != null && -// Charset.availableCharsets().containsKey(charset)) { -// decoded = new String(string.getBytes(), charset); -// } -// return decoded; -// } - -// public synchronized static BugzillaRepositoryUtil getInstance() { -// if (instance == null) { -// // if the instance hasn't been created yet, create one -// instance = new -// BugzillaRepositoryUtil(BugzillaPlugin.getDefault().getServerName()); -// } -// -// if -// (!BugzillaRepositoryUtil.bugzillaUrl.equals(BugzillaPlugin.getDefault().getServerName())) -// { -// BugzillaRepositoryUtil.bugzillaUrl = -// BugzillaPlugin.getDefault().getServerName(); -// } -// return INSTANCE; -// } -// /** -// * Test method. -// */ -// public static void main(String[] args) throws Exception { -// instance = new -// BugzillaRepositoryUtil(BugzillaPlugin.getDefault().getServerName() + -// "/long_list.cgi?buglist="); -// BugReport bug = instance.getBug(16161); -// System.out.println("Bug " + bug.getId() + ": " + bug.getSummary()); -// for (Iterator<Attribute> it = bug.getAttributes().iterator(); it.hasNext();) -// { -// Attribute attribute = it.next(); -// System.out.println(attribute.getName() + ": " + attribute.getValue()); -// } -// System.out.println(bug.getDescription()); -// for (Iterator<Comment> it = bug.getComments().iterator(); it.hasNext();) { -// Comment comment = it.next(); -// System.out -// .println(comment.getAuthorName() + "<" + comment.getAuthor() + "> (" + -// comment.getCreated() + ")"); -// System.out.print(comment.getText()); -// System.out.println(); -// } -// } -// /** URL of the Bugzilla server */ -// private static String bugzillaUrl; -// private static BugzillaRepositoryUtil INSTANCE = new -// BugzillaRepositoryUtil(); -// public static List<String> getValidKeywords(String repositoryURL) { -// return -// BugzillaPlugin.getDefault().getProductConfiguration(repositoryURL).getKeywords(); -// } -// /** -// * Get the attribute values for a new bug -// * -// * @param nbm -// * A reference to a NewBugModel to store all of the data -// * @throws Exception -// */ -// public static void setupNewBugAttributes(String serverUrl, NewBugModel -// nbm, boolean getProd) throws Exception { -// BufferedReader in = null; -// try { -// // create a new input stream for getting the bug -// String prodname = URLEncoder.encode(nbm.getProduct(), -// BugzillaPlugin.ENCODING_UTF_8); -// -// TaskRepository repository = -// MylarTaskListPlugin.getRepositoryManager().getRepository( -// BugzillaPlugin.REPOSITORY_KIND, serverUrl); -// -// if (repository == null) { -// throw new LoginException("Repository configuration error."); -// } -// if (repository.getUserName() == null || -// repository.getUserName().trim().equals("") -// || repository.getPassword() == null) { -// throw new LoginException("Login credentials missing."); -// } -// -// String url = repository.getUrl() + "/enter_bug.cgi"; -// -// // use the proper url if we dont know the product yet -// if (!getProd) -// url += "?product=" + prodname + "&"; -// else -// url += "?"; -// -// url += POST_ARGS_LOGIN + URLEncoder.encode(repository.getUserName(), -// BugzillaPlugin.ENCODING_UTF_8) -// + POST_ARGS_PASSWORD + URLEncoder.encode(repository.getPassword(), -// BugzillaPlugin.ENCODING_UTF_8); -// -// URL bugUrl = new URL(url); -// URLConnection cntx = -// BugzillaPlugin.getDefault().getUrlConnection(bugUrl); -// if (cntx != null) { -// InputStream input = cntx.getInputStream(); -// if (input != null) { -// in = new BufferedReader(new InputStreamReader(input)); -// -// new NewBugParser(in).parseBugAttributes(nbm, getProd); -// } -// } -// -// } catch (Exception e) { -// -// if (e instanceof KeyManagementException || e instanceof -// NoSuchAlgorithmException -// || e instanceof IOException) { -// if (MessageDialog.openQuestion(null, "Bugzilla Connect Error", -// "Unable to connect to Bugzilla server.\n" -// + "Bug report will be created offline and saved for submission later.")) -// { -// nbm.setConnected(false); -// setupBugAttributes(serverUrl, nbm); -// } else -// throw new Exception("Bug report will not be created."); -// } else -// throw e; -// } finally { -// try { -// if (in != null) -// in.close(); -// } catch (IOException e) { -// BugzillaPlugin.log(new Status(IStatus.ERROR, -// IBugzillaConstants.PLUGIN_ID, IStatus.ERROR, -// "Problem closing the stream", e)); -// } -// } -// } -// public static boolean downloadAttachment(TaskRepository repository, int -// id, File destinationFile, boolean overwrite) -// throws IOException { -// BufferedReader in = null; -// try { -// String url = repository.getUrl() + POST_ARGS_ATTACHMENT_DOWNLOAD + id; -// if (repository.hasCredentials()) { -// url += "&" + POST_ARGS_LOGIN -// + URLEncoder.encode(repository.getUserName(), -// BugzillaPlugin.ENCODING_UTF_8) -// + POST_ARGS_PASSWORD -// + URLEncoder.encode(repository.getPassword(), -// BugzillaPlugin.ENCODING_UTF_8); -// } -// URL downloadUrl = new URL(url); -// URLConnection connection = -// BugzillaPlugin.getDefault().getUrlConnection(downloadUrl); -// if (connection != null) { -// InputStream input = connection.getInputStream(); -// if (input != null) { -// in = new BufferedReader(new InputStreamReader(input)); -// if (destinationFile.exists() && !overwrite) { -// return false; -// } -// destinationFile.createNewFile(); -// OutputStreamWriter outputStream = new OutputStreamWriter(new -// FileOutputStream(destinationFile)); -// BufferedWriter out = new BufferedWriter(outputStream); -// char[] buf = new char[1024]; -// int len; -// while ((len = in.read(buf)) > 0) { -// out.write(buf, 0, len); -// } -// in.close(); -// out.close(); -// return true; -// } -// } -// } catch (MalformedURLException e) { -// throw e; -// } catch (IOException e) { -// throw e; -// } catch (Exception e) { -// BugzillaPlugin.log(new Status(IStatus.ERROR, -// IBugzillaConstants.PLUGIN_ID, IStatus.ERROR, -// "Problem retrieving attachment", e)); -// return false; -// } finally { -// try { -// if (in != null) -// in.close(); -// } catch (IOException e) { -// BugzillaPlugin.log(new Status(IStatus.ERROR, -// IBugzillaConstants.PLUGIN_ID, IStatus.ERROR, -// "Problem closing the stream", e)); -// } -// } -// return false; -// } diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaTask.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaTask.java deleted file mode 100644 index d1a8afeb7..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaTask.java +++ /dev/null @@ -1,163 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -/* - * Created on 14-Jan-2005 - */ -package org.eclipse.mylar.internal.bugzilla.core; - -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; - -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.TaskComment; - -/** - * @author Mik Kersten - */ -public class BugzillaTask extends AbstractRepositoryTask { - - private static final String COMMENT_FORMAT = "yyyy-MM-dd HH:mm"; - - private static SimpleDateFormat comment_creation_ts_format = new SimpleDateFormat(COMMENT_FORMAT); - - public BugzillaTask(String handle, String label, boolean newTask) { - super(handle, label, newTask); - if (newTask) { - setSyncState(RepositoryTaskSyncState.INCOMING); - } - isDirty = false; - initFromHandle(); - } - - public BugzillaTask(BugzillaQueryHit hit, boolean newTask) { - this(hit.getHandleIdentifier(), hit.getDescription(), newTask); - setPriority(hit.getPriority()); - initFromHandle(); - } - - private void initFromHandle() { - String id = AbstractRepositoryTask.getTaskId(getHandleIdentifier()); - String repositoryUrl = getRepositoryUrl(); - try { - String url = BugzillaServerFacade.getBugUrlWithoutLogin(repositoryUrl, Integer.parseInt(id)); - if (url != null) { - super.setUrl(url); - } - } catch (Exception e) { - MylarStatusHandler.fail(e, "Task initialization failed due to malformed id or URL: " - + getHandleIdentifier(), false); - } - } - - @Override - public String getDescription() { - if (this.isDownloaded() || !super.getDescription().startsWith("<")) { - return super.getDescription(); - } else { - if (isSynchronizing()) { - //return AbstractRepositoryTask.getTaskId(getHandleIdentifier()) + ": <synchronizing>"; - return "<synchronizing>"; - } else { - //return AbstractRepositoryTask.getTaskId(getHandleIdentifier()) + ": "; - return ""; - } - } - } - - public String getTaskType() { - if (taskData != null && taskData.getAttribute(BugzillaReportElement.BUG_SEVERITY.getKeyString()) != null) { - return taskData.getAttribute(BugzillaReportElement.BUG_SEVERITY.getKeyString()).getValue(); - } else { - return null; - } - } - - @Override - public String toString() { - return "bugzilla report id: " + getHandleIdentifier(); - } - - @Override - public String getUrl() { - // fix for bug 103537 - should login automatically, but dont want to - // show the login info in the query string - try { - return BugzillaServerFacade.getBugUrlWithoutLogin(getRepositoryUrl(), Integer - .parseInt(AbstractRepositoryTask.getTaskId(handle))); - } catch (NumberFormatException nfe) { - return super.getUrl(); - } - } - - @Override - public boolean isCompleted() { - if (taskData != null) { - if (taskData.getStatus() != null) { - return taskData.getStatus().equals(IBugzillaConstants.VALUE_STATUS_RESOLVED) - || taskData.getStatus().equals(IBugzillaConstants.VALUE_STATUS_CLOSED) - || taskData.getStatus().equals(IBugzillaConstants.VALUE_STATUS_VERIFIED); - } else { - return false; - } - } else { - return super.isCompleted(); - } - } - - @Override - public Date getCompletionDate() { - try { - if (taskData != null) { - if (isCompleted()) { - // if (taskData.isResolved()) { - List<TaskComment> taskComments = taskData.getComments(); - if (taskComments != null && !taskComments.isEmpty()) { - // TODO: fix not to be based on comment - return comment_creation_ts_format.parse(taskComments.get(taskComments.size() - 1).getCreated()); - // return - // offlineHandler.getDateForAttributeType(RepositoryTaskAttribute.COMMENT_DATE, - // (taskComments.get(taskComments.size() - - // 1).getCreated())); - } - } - } - } catch (Exception e) { - //MylarStatusHandler.log(e, "BugzillaTask.getCompletionDate()"); - return null; - } - return super.getCompletionDate(); - } - - public String getRepositoryKind() { - return BugzillaCorePlugin.REPOSITORY_KIND; - } - - @Override - public String getPriority() { - if (taskData != null && taskData.getAttribute(BugzillaReportElement.PRIORITY.getKeyString()) != null) { - return taskData.getAttribute(BugzillaReportElement.PRIORITY.getKeyString()).getValue(); - } else { - return super.getPriority(); - } - } - - @Override - public String getOwner() { - if (taskData != null && taskData.getAttribute(BugzillaReportElement.ASSIGNED_TO.getKeyString()) != null) { - return taskData.getAttribute(BugzillaReportElement.ASSIGNED_TO.getKeyString()).getValue(); - } else { - return super.getOwner(); - } - } - -} diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/IBugzillaConstants.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/IBugzillaConstants.java deleted file mode 100644 index 5349ec131..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/IBugzillaConstants.java +++ /dev/null @@ -1,188 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.bugzilla.core; - -/** - * @author Mik Kersten - */ -public interface IBugzillaConstants { - - static final String ERROR_MIDAIR_COLLISION = "collision"; - - static final String ERROR_MSG_MIDAIR_COLLISION = "A mid-air collision has occurred. Please synchronize by selecting Synchronize in the task's context menu."; - - static final String ERROR_COMMENT_REQUIRED = "comment required"; - - static final String ERROR_MSG_COMMENT_REQUIRED = "You have to specify a new comment when making this change. Please comment on the reason for this change."; - - static final String ERROR_INVALID_BUG_ID = "InvalidBugId"; - - static final String ERROR_INVALID_USERNAME_OR_PASSWORD = "Invalid Username or Password"; - - static final String MOST_RECENT_QUERY = "org.eclipse.mylar.bugzilla.query.last"; - - static final String SERVER_VERSION = "org.eclipse.mylar.bugzilla.server.version"; - - public static final int RETURN_ALL_HITS = -1; - - public static final String CONTENT_TYPE_RDF = "&ctype=rdf"; - - public static final String ATTACHMENT_URL_SUFFIX = "/attachment.cgi?id="; - - public static final String BUG_ACTIVITY_URL = "/show_activity.cgi?id="; - - public static final String SHOW_VOTES_URL = "/votes.cgi?action=show_bug&bug_id="; - - public static final String VOTE_URL = "/votes.cgi?action=show_user&bug_id="; - - public static final String DEPENDENCY_TREE_URL = "/showdependencytree.cgi?id="; - - public static final String DEPENDENCY_GRAPH_URL = "/showdependencygraph.cgi?id="; - - public static final String POST_ARGS_SHOW_BUG = "/show_bug.cgi?id="; - - public static final String POST_ARGS_PASSWORD = "&Bugzilla_password="; - - public static final String POST_ARGS_LOGIN = "GoAheadAndLogIn=1&Bugzilla_login="; - - /** Supported bugzilla repository versions */ - static public enum BugzillaServerVersion { - SERVER_218, SERVER_220, SERVER_222; - - @Override - public String toString() { - switch (this) { - case SERVER_222: - return "2.22"; - case SERVER_220: - return "2.20"; - case SERVER_218: - return "2.18"; - default: - return "null"; - } - } - - /** returns null if version string unknown* */ - static public BugzillaServerVersion fromString(String version) { - if (version.equals(SERVER_222.toString())) - return SERVER_222; - if (version.equals(SERVER_220.toString())) - return SERVER_220; - if (version.equals(SERVER_218.toString())) - return SERVER_218; - return null; - } - } - - static final String REFRESH_QUERY = "org.eclipse.mylar.bugzilla.query.refresh"; - - static final String MAX_RESULTS = "org.eclipse.mylar.bugzilla.search.results.max"; - - // names for the resources used to hold the different attributes of a bug - static final String VALUES_STATUS = "org.eclipse.mylar.bugzilla.values.status"; - - static final String VALUSE_STATUS_PRESELECTED = "org.eclipse.mylar.bugzilla.values.status.preselected"; - - static final String VALUES_RESOLUTION = "org.eclipse.mylar.bugzilla.values.resolution"; - - static final String VALUES_SEVERITY = "org.eclipse.mylar.bugzilla.values.severity"; - - static final String VALUES_PRIORITY = "org.eclipse.mylar.bugzilla.values.priority"; - - static final String VALUES_HARDWARE = "org.eclipse.mylar.bugzilla.values.hardware"; - - static final String VALUES_OS = "org.eclipse.mylar.bugzilla.values.os"; - - static final String VALUES_PRODUCT = "org.eclipse.mylar.bugzilla.values.product"; - - static final String VALUES_COMPONENT = "org.eclipse.mylar.bugzilla.values.component"; - - static final String VALUES_VERSION = "org.eclipse.mylar.bugzilla.values.version"; - - static final String VALUES_TARGET = "org.eclipse.mylar.bugzilla.values.target"; - - static final String ECLIPSE_BUGZILLA_URL = "https://bugs.eclipse.org/bugs"; - - static final String TEST_BUGZILLA_216_URL = "http://mylar.eclipse.org/bugs216"; - - static final String TEST_BUGZILLA_218_URL = "http://mylar.eclipse.org/bugs218"; - - static final String TEST_BUGZILLA_220_URL = "http://mylar.eclipse.org/bugs220"; - - static final String TEST_BUGZILLA_2201_URL = "http://mylar.eclipse.org/bugs2201"; - - static final String TEST_BUGZILLA_222_URL = "http://mylar.eclipse.org/bugs222"; - - // Default values for keys - - static final String[] DEFAULT_STATUS_VALUES = { "Unconfirmed", "New", "Assigned", "Reopened", "Resolved", - "Verified", "Closed" }; - - static final String[] DEFAULT_PRESELECTED_STATUS_VALUES = { "New", "Assigned", "Reopened" }; - - // static final String[] DEFAULT_RESOLUTION_VALUES = { "Fixed", "Invalid", - // "Wontfix", "Later", "Remind", "Duplicate", - // "Worksforme", "Moved" }; - - static final String[] DEFAULT_SEVERITY_VALUES = { "blocker", "critical", "major", "normal", "minor", "trivial", - "enhancement" }; - - static final String[] DEFAULT_PRIORITY_VALUES = { "P1", "P2", "P3", "P4", "P5" }; - - static final String[] DEFAULT_HARDWARE_VALUES = { "All", "Macintosh", "PC", "Power PC", "Sun", "Other" }; - - static final String[] DEFAULT_OS_VALUES = { "All", "AIX Motif", "Windows 95", "Windows 98", "Windows CE", - "Windows ME", "Windows 2000", "Windows NT", "Windows XP", "Windows All", "MacOS X", "Linux", "Linux-GTK", - "Linux-Motif", "HP-UX", "Neutrino", "QNX-Photon", "Solaris", "Unix All", "other" }; - - static final String[] DEFAULT_PRODUCT_VALUES = {}; - - static final String[] DEFAULT_COMPONENT_VALUES = {}; - - static final String[] DEFAULT_VERSION_VALUES = {}; - - static final String[] DEFAULT_TARGET_VALUES = {}; - - public static final String TITLE_MESSAGE_DIALOG = "Mylar Bugzilla Connector"; - - public static final String REPORT_SUBMIT_ERROR = "Report Submission Error"; - - public static final String TITLE_NEW_BUG = "New Bugzilla Report"; - - public static final String MESSAGE_LOGIN_FAILURE = "Bugzilla login information or repository version incorrect"; - - public static final String INVALID_2201_ATTRIBUTE_IGNORED = "EclipsebugsBugzilla2.20.1"; - - public static final String VALUE_STATUS_RESOLVED = "RESOLVED"; - - public static final String VALUE_STATUS_NEW = "NEW"; - - public static final String VALUE_STATUS_CLOSED = "CLOSED"; - - public static final String VALUE_STATUS_ASSIGNED = "ASSIGNED"; - - public static final String VALUE_STATUS_VERIFIED = "VERIFIED"; - - public static final String VALUE_RESOLUTION_LATER = "LATER"; - - public static enum BUGZILLA_OPERATION { - none, accept, resolve, duplicate, reassign, reassignbycomponent, reopen, verify, close; - } - - public static enum BUGZILLA_REPORT_STATUS { - UNCONFIRMED, NEW, ASSIGNED, REOPENED, RESOLVED, VERIFIED, CLOSED; - } - - public static enum BUGZILLA_RESOLUTION { - FIXED, INVALID, WONTFIX, LATER, REMIND, WORKSFORME; - } -} diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/KeywordParser.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/KeywordParser.java deleted file mode 100644 index 3abe0f225..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/KeywordParser.java +++ /dev/null @@ -1,155 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.bugzilla.core; - -import java.io.IOException; -import java.io.Reader; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - -import javax.security.auth.login.LoginException; - -import org.eclipse.mylar.internal.tasks.core.HtmlStreamTokenizer; -import org.eclipse.mylar.internal.tasks.core.HtmlTag; -import org.eclipse.mylar.internal.tasks.core.HtmlStreamTokenizer.Token; - -/** - * Parses Bugzilla keywords page to determine keywords valid in this - * installation - * - * @author Shawn Minto - */ -public class KeywordParser { - /** Tokenizer used on the stream */ - private static HtmlStreamTokenizer tokenizer; - - /** - * Constructor. - * - * @param in - * The input stream for the keywords page. - */ - public KeywordParser(Reader in) { - tokenizer = new HtmlStreamTokenizer(in, null); - } - - public String getEncoding() { - return ""; - } - - /** - * Parse the keyword page for the valid products that a bug can be logged - * for - * - * @return A list of the keywordds that we can enter bugs for - * @throws IOException - * @throws ParseException - */ - public List<String> getKeywords() throws IOException, ParseException, LoginException { - ArrayList<String> keywords = new ArrayList<String>(); - - boolean isTitle = false; - boolean possibleBadLogin = false; - String title = ""; - - for (Token token = tokenizer.nextToken(); token.getType() != Token.EOF; token = tokenizer.nextToken()) { - - // make sure that bugzilla doesn't want us to login - if (token.getType() == Token.TAG && ((HtmlTag) (token.getValue())).getTagType() == HtmlTag.Type.TITLE - && !((HtmlTag) (token.getValue())).isEndTag()) { - isTitle = true; - continue; - } - - if (isTitle) { - // get all of the data from inside of the title tag - if (token.getType() != Token.TAG) { - title += ((StringBuffer) token.getValue()).toString().toLowerCase() + " "; - continue; - } else if (token.getType() == Token.TAG - && ((HtmlTag) token.getValue()).getTagType() == HtmlTag.Type.TITLE - && ((HtmlTag) token.getValue()).isEndTag()) { - // check if we may have a problem with login by looking at - // the title of the page - if ((title.indexOf("login") != -1 - || (title.indexOf("invalid") != -1 && title.indexOf("password") != -1) - || title.indexOf("check e-mail") != -1 || title.indexOf("error") != -1)) - possibleBadLogin = true; - isTitle = false; - title = ""; - } - continue; - } - - if (token.getType() == Token.TAG) { - HtmlTag tag = (HtmlTag) token.getValue(); - if (tag.getTagType() == HtmlTag.Type.TR && !tag.isEndTag()) { - token = tokenizer.nextToken(); - if (token.getType() != Token.EOF && token.getType() == Token.TAG) { - tag = (HtmlTag) token.getValue(); - if (tag.getTagType() != HtmlTag.Type.TH) - continue; - else { - if (tag.getAttribute("align") == null - || !"left".equalsIgnoreCase(tag.getAttribute("align"))) - parseKeywords(keywords); - - } - } - continue; - } - } - } - - // if we don't have any keywords and suspect that there was a login - // problem, assume we had a login problem - if (keywords == null && possibleBadLogin) - throw new LoginException(IBugzillaConstants.MESSAGE_LOGIN_FAILURE); - return keywords; - } - - /** - * Parse the keywords that we can enter bugs for - * - * @param keywords - * The list of keywords to add this new product to - * @return - */ - private void parseKeywords(List<String> keywords) throws IOException, ParseException { - StringBuffer sb = new StringBuffer(); - - for (Token token = tokenizer.nextToken(); token.getType() != Token.EOF; token = tokenizer.nextToken()) { - if (token.getType() == Token.TAG) { - HtmlTag tag = (HtmlTag) token.getValue(); - if (tag.getTagType() == HtmlTag.Type.TH - && (tag.isEndTag() || !"left".equalsIgnoreCase(tag.getAttribute("align")))) - break; - } else if (token.getType() == Token.TEXT) - sb.append(token.toString()); - } - - String prod = HtmlStreamTokenizer.unescape(sb).toString(); - if (prod.endsWith(":")) - prod = prod.substring(0, prod.length() - 1); - keywords.add(prod); - - for (Token token = tokenizer.nextToken(); token.getType() != Token.EOF; token = tokenizer.nextToken()) { - if (token.getType() == Token.TAG) { - HtmlTag tag = (HtmlTag) token.getValue(); - if (tag.getTagType() == HtmlTag.Type.TR && tag.isEndTag()) - break; - - } - } - } - -} diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/NewBugzillaReport.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/NewBugzillaReport.java deleted file mode 100644 index 009cdd0df..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/NewBugzillaReport.java +++ /dev/null @@ -1,176 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.bugzilla.core; - -import java.io.Serializable; - -import org.eclipse.mylar.tasks.core.RepositoryTaskData; - - -/** - * This class is used to store data about the new bug that is being created - * while the wizard is being used - * - * @author Eric Booth - * @author Rob Elves - */ -public class NewBugzillaReport extends RepositoryTaskData implements Serializable { - - /** Automatically generated serialVersionUID */ - private static final long serialVersionUID = 3977859587934335283L; - - /** Whether the attributes have been parsed yet or not */ - protected boolean hasParsedAttributes = false; - - /** Whether the products have been parsed yet or not */ - protected boolean hasParsedProducts = false; - - /** The product that the bug is for */ - protected String product; - - /** The summary for the bug */ - protected String summary = ""; - - /** The description for the bug */ - protected String description = ""; - - /** - * Flag to indicate status of connection to Bugzilla server to identify - * whether ProductConfiguration should be used instead - */ - protected boolean connected = true; - - /** Whether or not this bug report is saved offline. */ - protected boolean savedOffline = false; - - /** - * Creates a new <code>NewBugModel</code>. The id chosen for this bug is - * based on the id of the last <code>NewBugModel</code> that was created. - */ - public NewBugzillaReport(String repositoryURL, String offlineId) { - super(new BugzillaAttributeFactory(), BugzillaCorePlugin.REPOSITORY_KIND, repositoryURL, offlineId); - } - - public String getLabel() { - return "New Bug #" + getId(); - } - - public String getDescription() { - return description; - } - - public void setDescription(String newDescription) { - description = newDescription; - } - - public String getSummary() { - return summary; - } - - public void setSummary(String newSummary) { - summary = newSummary; - } - - /** - * @return The product that the bug is for. - */ - public String getProduct() { - return product; - } - - /** - * Sets the product that the bug is for. - * - * @param product - * The product. - */ - public void setProduct(String product) { - this.product = product; - } - - /** - * @return Flag to indicate status of connection to Bugzilla server (to - * identify whether ProductConfiguration should be used instead) - */ - public boolean isConnected() { - return connected; - } - - /** - * Sets the value of the flag to indicate status of connection to Bugzilla - * server (to identify whether ProductConfiguration should be used instead) - * - * @param newConnectionStatus - * <code>true</code> if the bug is connected. - */ - public void setConnected(boolean newConnectionStatus) { - connected = newConnectionStatus; - } - - /** - * @return Returns whether the attributes have been parsed yet or not. - */ - public boolean hasParsedAttributes() { - return hasParsedAttributes; - } - - /** - * Sets whether the attributes have been parsed yet or not. - * - * @param hasParsedAttributes - * <code>true</code> if the attributes have been parsed. - */ - public void setParsedAttributesStatus(boolean hasParsedAttributes) { - this.hasParsedAttributes = hasParsedAttributes; - } - - /** - * @return Returns whether the products have been parsed yet or not. - */ - public boolean hasParsedProducts() { - return hasParsedProducts; - } - - /** - * Sets whether the products have been parsed yet or not. - * - * @param hasParsedProducts - * <code>true</code> if the products have been parsed. - */ - public void setParsedProductsStatus(boolean hasParsedProducts) { - this.hasParsedProducts = hasParsedProducts; - } - - public boolean isSavedOffline() { - return savedOffline; - } - - public boolean isLocallyCreated() { - return true; - } - -// public void setOfflineState(boolean newOfflineState) { -// savedOffline = newOfflineState; -// } - - public boolean hasLocalChanges() { - return true; - } - - /** returns null */ - public String getCreated() { - return null; - } - - public String getLastModified() { - return null; - } -} diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/PossibleBugzillaFailureException.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/PossibleBugzillaFailureException.java deleted file mode 100644 index 85aa861e7..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/PossibleBugzillaFailureException.java +++ /dev/null @@ -1,66 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.core; - -import java.io.PrintStream; -import java.io.PrintWriter; - -public class PossibleBugzillaFailureException extends Exception { - /** Automatically generated serialVersionUID */ - private static final long serialVersionUID = 3257849887386449974L; - - private Throwable cause; - - /** - * Constructor for BugzillaException. - */ - public PossibleBugzillaFailureException() { - super(); - } - - /** - * Constructor for BugzillaException. - * - * @param detailMessage - */ - public PossibleBugzillaFailureException(String detailMessage) { - super(detailMessage); - } - - public PossibleBugzillaFailureException(String detailMessage, Throwable cause) { - super(detailMessage); - this.cause = cause; - } - - public PossibleBugzillaFailureException(Throwable cause) { - this.cause = cause; - } - - @Override - public synchronized void printStackTrace(PrintStream err) { - super.printStackTrace(err); - if (cause != null) { - err.println("\n--- Cause was:"); - cause.printStackTrace(err); - } - } - - @Override - public synchronized void printStackTrace(PrintWriter err) { - super.printStackTrace(err); - if (cause != null) { - err.println("\n--- Cause was:"); - cause.printStackTrace(err); - } - } - -} diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryConfiguration.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryConfiguration.java deleted file mode 100644 index 8fca72914..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryConfiguration.java +++ /dev/null @@ -1,388 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.core; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * Class describing the configuration of products and components for a given - * Bugzilla installation. - * - * @author Rob Elves - */ -public class RepositoryConfiguration implements Serializable { - - private static final long serialVersionUID = -3623617786905114255L; - - private static final String VERSION_UNKNOWN = "unknown"; - - private String repositoryUrl = "<unknown>"; - - private Map<String, ProductEntry> products = new HashMap<String, ProductEntry>(); - - private List<String> platforms = new ArrayList<String>(); - - private List<String> operatingSystems = new ArrayList<String>(); - - private List<String> priorities = new ArrayList<String>(); - - private List<String> severities = new ArrayList<String>(); - - private List<String> bugStatus = new ArrayList<String>(); - - private List<String> openStatusValues = new ArrayList<String>(); - - private List<String> resolutionValues = new ArrayList<String>(); - - private List<String> keywords = new ArrayList<String>(); - - // master lists - - private List<String> versions = new ArrayList<String>(); - - private List<String> components = new ArrayList<String>(); - - private List<String> milestones = new ArrayList<String>(); - - private String version = VERSION_UNKNOWN; - - public RepositoryConfiguration() { - super(); - // ignore - } - - public void addStatus(String status) { - bugStatus.add(status); - } - - public List<String> getStatusValues() { - return bugStatus; - } - - public void addResolution(String res) { - resolutionValues.add(res); - } - - public List<String> getResolutions() { - return resolutionValues; - } - - /** - * Adds a product to the configuration. - */ - public void addProduct(String name) { - if (!products.containsKey(name)) { - ProductEntry product = new ProductEntry(name); - products.put(name, product); - } - } - - /** - * Returns an array of names of current products. - */ - public List<String> getProducts() { - ArrayList<String> productList = new ArrayList<String>(products.keySet()); - Collections.sort(productList); - return productList; - } - - /** - * Returns an array of names of component that exist for a given product or - * <code>null</code> if the product does not exist. - */ - public List<String> getComponents(String product) { - ProductEntry entry = products.get(product); - if (entry != null) { - return entry.getComponents(); - } else - return Collections.emptyList(); - } - - /** - * Returns an array of names of versions that exist for a given product or - * <code>null</code> if the product does not exist. - */ - public List<String> getVersions(String product) { - ProductEntry entry = products.get(product); - if (entry != null) { - return entry.getVersions(); - } else - return Collections.emptyList(); - } - - /** - * Returns an array of names of valid severity values. - */ - public List<String> getSeverities() { - return severities; - } - - /** - * Returns an array of names of valid OS values. - */ - public List<String> getOSs() { - return operatingSystems; - } - - public void addOS(String os) { - operatingSystems.add(os); - } - - /** - * Returns an array of names of valid platform values. - */ - public List<String> getPlatforms() { - return platforms; - } - - /** - * Returns an array of names of valid platform values. - */ - public List<String> getPriorities() { - return priorities; - } - - /** - * Adds a component to the given product. - */ - public void addComponent(String product, String component) { - if (!components.contains(component)) - components.add(component); - ProductEntry entry = products.get(product); - if (entry == null) { - entry = new ProductEntry(product); - products.put(product, entry); - } - entry.addComponent(component); - } - - // /** - // * Adds a list of components to the given product. - // */ - // public void addComponents(String product, List<String> components) { - // ProductEntry entry = products.get(product); - // if (entry == null) { - // entry = new ProductEntry(product); - // products.put(product, entry); - // } - // for (String component : components) { - // entry.addComponent(component); - // } - // } - // /** - // * Adds a list of components to the given product. - // */ - // public void addComponents(String product, List<String> components) { - // ProductEntry entry = products.get(product); - // if (entry == null) { - // entry = new ProductEntry(product); - // products.put(product, entry); - // } - // for (String component : components) { - // entry.addComponent(component); - // } - // } - - public void addVersion(String product, String version) { - if (!versions.contains(version)) - versions.add(version); - ProductEntry entry = products.get(product); - if (entry == null) { - entry = new ProductEntry(product); - products.put(product, entry); - } - entry.addVersion(version); - } - - // /** - // * Adds a list of components to the given product. - // */ - // public void addVersions(String product, List<String> versions) { - // ProductEntry entry = products.get(product); - // if (entry == null) { - // entry = new ProductEntry(product); - // products.put(product, entry); - // } - // for (String version : versions) { - // entry.addVersion(version); - // } - // } - - public void addKeyword(String keyword) { - keywords.add(keyword); - } - - public List<String> getKeywords() { - return keywords; - } - - public void addPlatform(String platform) { - platforms.add(platform); - } - - public void addPriority(String priority) { - priorities.add(priority); - } - - public void addSeverity(String severity) { - severities.add(severity); - - } - - public void setInstallVersion(String version) { - this.version = version; - } - - public String getInstallVersion() { - return version; - } - - public void addTargetMilestone(String product, String target) { - if (!milestones.contains(target)) - milestones.add(target); - ProductEntry entry = products.get(product); - if (entry == null) { - entry = new ProductEntry(product); - products.put(product, entry); - } - - entry.addTargetMilestone(target); - - } - - public List<String> getTargetMilestones(String product) { - ProductEntry entry = products.get(product); - if (entry != null) { - return entry.getTargetMilestones(); - } else - return Collections.emptyList(); - } - - /** - * Container for product information: name, components. - */ - private static class ProductEntry implements Serializable { - - private static final long serialVersionUID = 4120139521246741120L; - - String productName; - - List<String> components = new ArrayList<String>(); - - List<String> versions = new ArrayList<String>(); - - List<String> milestones = new ArrayList<String>(); - - ProductEntry(String name) { - this.productName = name; - } - - List<String> getComponents() { - return components; - } - - void addComponent(String componentName) { - if (!components.contains(componentName)) { - components.add(componentName); - } - } - - List<String> getVersions() { - return versions; - } - - void addVersion(String name) { - if (!versions.contains(name)) { - versions.add(name); - } - } - - List<String> getTargetMilestones() { - return milestones; - } - - void addTargetMilestone(String target) { - milestones.add(target); - } - } - - public List<String> getOpenStatusValues() { - return openStatusValues; - } - - public void addOpenStatusValue(String value) { - openStatusValues.add(value); - } - - public List<String> getComponents() { - return components; - } - - public List<String> getTargetMilestones() { - return milestones; - } - - public List<String> getVersions() { - return versions; - } - - public String getRepositoryUrl() { - return repositoryUrl; - } - - public void setRepositoryUrl(String repositoryUrl) { - this.repositoryUrl = repositoryUrl; - } - - /* - * Intermediate step until configuration is made generic. - */ - public List<String> getOptionValues(BugzillaReportElement element, String product) { - switch (element) { - case PRODUCT: - return getProducts(); - case TARGET_MILESTONE: - // return getTargetMilestones(); - return getTargetMilestones(product); - case BUG_STATUS: - return getStatusValues(); - case VERSION: - // return getVersions(); - return getVersions(product); - case COMPONENT: - // return getComponents(); - return getComponents(product); - case REP_PLATFORM: - return getPlatforms(); - case OP_SYS: - return getOSs(); - case PRIORITY: - return getPriorities(); - case BUG_SEVERITY: - return getSeverities(); - case KEYWORDS: - return getKeywords(); - case RESOLUTION: - return getResolutions(); - default: - return new ArrayList<String>(); - } - } - - - -} diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryConfigurationFactory.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryConfigurationFactory.java deleted file mode 100644 index f0411a636..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryConfigurationFactory.java +++ /dev/null @@ -1,63 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.core; - -import java.io.IOException; -import java.net.Proxy; -import java.net.URL; -import java.security.GeneralSecurityException; - -import org.xml.sax.ErrorHandler; -import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; - -/** - * Reads bugzilla product configuration from config.cgi on server in RDF format. - * - * @author Rob Elves - */ -public class RepositoryConfigurationFactory extends AbstractReportFactory { - - private static final String CONFIG_RDF_URL = "/config.cgi?ctype=rdf"; - - public RepositoryConfiguration getConfiguration(String repositoryUrl, Proxy proxySettings, String userName, - String password, String encoding) throws IOException, BugzillaException, GeneralSecurityException { - String configUrlStr = repositoryUrl + CONFIG_RDF_URL; - configUrlStr = BugzillaServerFacade.addCredentials(configUrlStr, userName, password); - URL url = new URL(configUrlStr); - SaxConfigurationContentHandler contentHandler = new SaxConfigurationContentHandler(); - collectResults(url, proxySettings, encoding, contentHandler, true); - RepositoryConfiguration config = contentHandler.getConfiguration(); - if (config != null) { - config.setRepositoryUrl(repositoryUrl); - } - return config; - } - - class SaxErrorHandler implements ErrorHandler { - - public void error(SAXParseException exception) throws SAXException { - throw exception; - } - - public void fatalError(SAXParseException exception) throws SAXException { - throw exception; - - } - - public void warning(SAXParseException exception) throws SAXException { - // ignore - } - - } - -} diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryQueryResultsFactory.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryQueryResultsFactory.java deleted file mode 100644 index b3015a601..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryQueryResultsFactory.java +++ /dev/null @@ -1,38 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.core; - -import java.io.IOException; -import java.net.Proxy; -import java.net.URL; -import java.security.GeneralSecurityException; - -import org.eclipse.mylar.tasks.core.QueryHitCollector; -import org.eclipse.mylar.tasks.core.TaskList; - - -/** - * @author Rob Elves - */ -public class RepositoryQueryResultsFactory extends AbstractReportFactory { - - /** expects rdf returned from repository (ctype=rdf in url) - * @throws GeneralSecurityException */ - public void performQuery(TaskList taskList, String repositoryUrl, QueryHitCollector collector, String queryUrlString, - Proxy proxySettings, int maxHits, String characterEncoding) throws IOException, BugzillaException, GeneralSecurityException { - - SaxBugzillaQueryContentHandler contentHandler = new SaxBugzillaQueryContentHandler(taskList, repositoryUrl, - collector, maxHits); - URL url = new URL(queryUrlString); - collectResults(url, proxySettings, characterEncoding, contentHandler, false); - } -} diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryReportFactory.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryReportFactory.java deleted file mode 100644 index 31cf91a03..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryReportFactory.java +++ /dev/null @@ -1,51 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.core; - -import java.io.IOException; -import java.net.Proxy; -import java.net.URL; -import java.security.GeneralSecurityException; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; - -import org.eclipse.mylar.tasks.core.RepositoryTaskData; - -/** - * Reads bug reports from repository. - * - * @author Rob Elves - */ -public class RepositoryReportFactory extends AbstractReportFactory { - - private static BugzillaAttributeFactory bugzillaAttributeFactory = new BugzillaAttributeFactory(); - - private static final String SHOW_BUG_CGI_XML = "/show_bug.cgi?ctype=xml&id="; - - public void populateReport(RepositoryTaskData bugReport, String repositoryUrl, Proxy proxySettings, - String userName, String password, String characterEncoding) throws GeneralSecurityException, KeyManagementException, - NoSuchAlgorithmException, IOException, BugzillaException { - - SaxBugReportContentHandler contentHandler = new SaxBugReportContentHandler(bugzillaAttributeFactory, bugReport); - - String xmlBugReportUrl = repositoryUrl + SHOW_BUG_CGI_XML + bugReport.getId(); - xmlBugReportUrl = BugzillaServerFacade.addCredentials(xmlBugReportUrl, userName, password); - URL serverURL = new URL(xmlBugReportUrl); - - collectResults(serverURL, proxySettings, characterEncoding, contentHandler, false); - - if (contentHandler.errorOccurred()) { - throw new IOException(contentHandler.getErrorMessage()); - } - - } -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/SaxBugReportContentHandler.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/SaxBugReportContentHandler.java deleted file mode 100644 index 5497ac5e7..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/SaxBugReportContentHandler.java +++ /dev/null @@ -1,289 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.core; - -import java.util.HashMap; -import java.util.Map; - -import org.eclipse.mylar.internal.tasks.core.HtmlStreamTokenizer; -import org.eclipse.mylar.tasks.core.AbstractAttributeFactory; -import org.eclipse.mylar.tasks.core.TaskComment; -import org.eclipse.mylar.tasks.core.RepositoryAttachment; -import org.eclipse.mylar.tasks.core.RepositoryTaskAttribute; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; -import org.xml.sax.helpers.DefaultHandler; - -/** - * Parser for xml bugzilla reports. - * - * @author Rob Elves - */ -public class SaxBugReportContentHandler extends DefaultHandler { - - private static final String COMMENT_ATTACHMENT_STRING = "Created an attachment (id="; - - private StringBuffer characters; - - private TaskComment taskComment; - - private final Map<Integer, TaskComment> attachIdToComment = new HashMap<Integer, TaskComment>(); - - private int commentNum = 0; - - private RepositoryAttachment attachment; - - private RepositoryTaskData report; - - private String errorMessage = null; - - private AbstractAttributeFactory attributeFactory; - - public SaxBugReportContentHandler(AbstractAttributeFactory factory, RepositoryTaskData rpt) { - this.attributeFactory = factory; - this.report = rpt; - } - - public boolean errorOccurred() { - return errorMessage != null; - } - - public String getErrorMessage() { - return errorMessage; - } - - public RepositoryTaskData getReport() { - return report; - } - - @Override - public void characters(char[] ch, int start, int length) throws SAXException { - characters.append(ch, start, length); - // if (monitor.isCanceled()) { - // throw new OperationCanceledException("Search cancelled"); - // } - } - - @Override - public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { - characters = new StringBuffer(); - BugzillaReportElement tag = BugzillaReportElement.UNKNOWN; - try { - tag = BugzillaReportElement.valueOf(localName.trim().toUpperCase()); - } catch (RuntimeException e) { - if (e instanceof IllegalArgumentException) { - // ignore unrecognized tags - return; - } - throw e; - } - switch (tag) { - case BUGZILLA: - // Note: here we can get the bugzilla version if necessary - break; - case BUG: - if (attributes != null && (attributes.getValue("error") != null)) { - errorMessage = attributes.getValue("error"); - } - break; - case LONG_DESC: - taskComment = new TaskComment(attributeFactory, report, commentNum++); - break; - case ATTACHMENT: - attachment = new RepositoryAttachment(attributeFactory); - if (attributes != null) { - if ("1".equals(attributes.getValue(BugzillaReportElement.IS_OBSOLETE.getKeyString()))) { - attachment.addAttribute(BugzillaReportElement.IS_OBSOLETE.getKeyString(), attributeFactory - .createAttribute(BugzillaReportElement.IS_OBSOLETE.getKeyString())); - attachment.setObsolete(true); - } - if ("1".equals(attributes.getValue(BugzillaReportElement.IS_PATCH.getKeyString()))) { - attachment.setPatch(true); - } - } - break; - } - - } - - @Override - public void endElement(String uri, String localName, String qName) throws SAXException { - - String parsedText = HtmlStreamTokenizer.unescape(characters.toString()); - - BugzillaReportElement tag = BugzillaReportElement.UNKNOWN; - try { - tag = BugzillaReportElement.valueOf(localName.trim().toUpperCase()); - } catch (RuntimeException e) { - if (e instanceof IllegalArgumentException) { - // ignore unrecognized tags - return; - } - throw e; - } - switch (tag) { - case BUG_ID: { - try { - if (!report.getId().equals(parsedText)) { - errorMessage = "Requested report number does not match returned report number."; - } - } catch (Exception e) { - errorMessage = "Bug id from server did not match requested id."; - } - - RepositoryTaskAttribute attr = report.getAttribute(tag.getKeyString()); - if (attr == null) { - attr = attributeFactory.createAttribute(tag.getKeyString()); - report.addAttribute(tag.getKeyString(), attr); - } - attr.setValue(parsedText); - break; - } - - // Comment attributes - case WHO: - case BUG_WHEN: - if (taskComment != null) { - RepositoryTaskAttribute attr = attributeFactory.createAttribute(tag.getKeyString()); - attr.setValue(parsedText); - taskComment.addAttribute(tag.getKeyString(), attr); - } - break; - case THETEXT: - if (taskComment != null) { - RepositoryTaskAttribute attr = attributeFactory.createAttribute(tag.getKeyString()); - attr.setValue(parsedText); - taskComment.addAttribute(tag.getKeyString(), attr); - - // Check for attachment - parseAttachment(taskComment, parsedText); - } - break; - case LONG_DESC: - if (taskComment != null) { - report.addComment(taskComment); - } - break; - - // Attachment attributes - case ATTACHID: - case DATE: - case DESC: - case FILENAME: - case CTYPE: - case TYPE: - if (attachment != null) { - RepositoryTaskAttribute attr = attributeFactory.createAttribute(tag.getKeyString()); - attr.setValue(parsedText); - attachment.addAttribute(tag.getKeyString(), attr); - } - break; - case DATA: - // TODO: Need to figure out under what circumstanceswhen attachments - // are inline and - // what to do with them. - // jpound - if data gets stored here, the attachment actions in the - // task editor - // should be updated to use this data instead of retrieving from - // server. - break; - case ATTACHMENT: - if (attachment != null) { - report.addAttachment(attachment); - } - break; - - // IGNORED ELEMENTS - case REPORTER_ACCESSIBLE: - case CLASSIFICATION_ID: - case CLASSIFICATION: - case CCLIST_ACCESSIBLE: - case EVERCONFIRMED: - case BUGZILLA: - break; - case BUG: - // Reached end of bug. Need to set LONGDESCLENGTH to number of - // comments - RepositoryTaskAttribute numCommentsAttribute = report.getAttribute(BugzillaReportElement.LONGDESCLENGTH - .getKeyString()); - if (numCommentsAttribute == null) { - numCommentsAttribute = attributeFactory.createAttribute(BugzillaReportElement.LONGDESCLENGTH - .getKeyString()); - numCommentsAttribute.setValue("" + report.getComments().size()); - report.addAttribute(BugzillaReportElement.LONGDESCLENGTH.getKeyString(), numCommentsAttribute); - } else { - numCommentsAttribute.setValue("" + report.getComments().size()); - } - - // Set the creator name on all attachments - for (RepositoryAttachment attachment : report.getAttachments()) { - TaskComment taskComment = (TaskComment) attachIdToComment.get(attachment.getId()); - if (taskComment != null) { - attachment.setCreator(taskComment.getAuthor()); - } - attachment.setAttributeValue(RepositoryTaskAttribute.ATTACHMENT_URL, report.getRepositoryUrl()+IBugzillaConstants.ATTACHMENT_URL_SUFFIX+attachment.getId()); - } - break; - - case BLOCKED: - case DEPENDSON: - RepositoryTaskAttribute dependancyAttribute = report.getAttribute(tag.getKeyString()); - if (dependancyAttribute == null) { - dependancyAttribute = attributeFactory.createAttribute(tag.getKeyString()); - dependancyAttribute.setValue(parsedText); - report.addAttribute(tag.getKeyString(), dependancyAttribute); - } else { - if(dependancyAttribute.getValue().equals("")) { - dependancyAttribute.setValue(parsedText); - } else { - dependancyAttribute.setValue(dependancyAttribute.getValue()+", "+parsedText); - } - } - break; - // All others added as report attribute - default: - RepositoryTaskAttribute attribute = report.getAttribute(tag.getKeyString()); - if (attribute == null) { - attribute = attributeFactory.createAttribute(tag.getKeyString()); - attribute.setValue(parsedText); - report.addAttribute(tag.getKeyString(), attribute); - } else { - attribute.addValue(parsedText); - } - break; - } - - } - - /** determines attachment id from comment */ - private void parseAttachment(TaskComment taskComment, String commentText) { - - int attachmentID = -1; - - if (commentText.startsWith(COMMENT_ATTACHMENT_STRING)) { - try { - int endIndex = commentText.indexOf(")"); - if (endIndex > 0 && endIndex < commentText.length()) { - attachmentID = Integer - .parseInt(commentText.substring(COMMENT_ATTACHMENT_STRING.length(), endIndex)); - taskComment.setHasAttachment(true); - taskComment.setAttachmentId(attachmentID); - attachIdToComment.put(attachmentID, taskComment); - } - } catch (NumberFormatException e) { - return; - } - } - } - -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/SaxBugzillaQueryContentHandler.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/SaxBugzillaQueryContentHandler.java deleted file mode 100644 index fe70f764b..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/SaxBugzillaQueryContentHandler.java +++ /dev/null @@ -1,145 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.core; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.core.HtmlStreamTokenizer; -import org.eclipse.mylar.tasks.core.QueryHitCollector; -import org.eclipse.mylar.tasks.core.TaskList; -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; -import org.xml.sax.helpers.DefaultHandler; - -/** - * Parser for RDF bugzilla query results. - * - * @author Rob Elves - */ -public class SaxBugzillaQueryContentHandler extends DefaultHandler { - - /** The bug id */ - private String id; - - /** The description of the bug */ - private String description; - - /** The priority of the bug */ - private String priority; - - /** The state of the bug */ - private String state; - - private StringBuffer characters; - - private QueryHitCollector collector; - - private String repositoryUrl; - - private BugzillaQueryHit hit; - - private TaskList taskList; - - private int maxHits = 100; - - private int numCollected = 0; - - public SaxBugzillaQueryContentHandler(TaskList tasklist, String repositoryUrl, QueryHitCollector col, int maxHits) { - this.taskList = tasklist; - this.repositoryUrl = repositoryUrl; - collector = col; - this.maxHits = maxHits; - } - - @Override - public void characters(char[] ch, int start, int length) throws SAXException { - characters.append(ch, start, length); - } - - @Override - public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { - characters = new StringBuffer(); - BugzillaReportElement tag = BugzillaReportElement.UNKNOWN; - try { - tag = BugzillaReportElement.valueOf(localName.trim().toUpperCase()); - switch (tag) { - case LI: -// hit = new BugzillaQueryHit(); -// hit.setRepository(repositoryUrl); -// break; - } - } catch (RuntimeException e) { - if (e instanceof IllegalArgumentException) { - // ignore unrecognized tags - return; - } - throw e; - } - - } - - @Override - public void endElement(String uri, String localName, String qName) throws SAXException { - - String parsedText = HtmlStreamTokenizer.unescape(characters.toString()); - - BugzillaReportElement tag = BugzillaReportElement.UNKNOWN; - try { - tag = BugzillaReportElement.valueOf(localName.trim().toUpperCase()); - switch (tag) { - case ID: - id = parsedText; - break; -// case BUG_SEVERITY: -// severity = parsedText; -// break; - case PRIORITY: - priority = parsedText; - break; -// case REP_PLATFORM: -// platform = parsedText; -// break; - case ASSIGNED_TO: - //hit.setOwner(parsedText); - break; - case BUG_STATUS: - state = parsedText; - break; -// case RESOLUTION: -// resolution = parsedText; -// break; - case SHORT_SHORT_DESC: - description = parsedText; - break; - case LI: - try { - if (numCollected < maxHits || maxHits == IBugzillaConstants.RETURN_ALL_HITS) { - hit = new BugzillaQueryHit(taskList, description, priority, repositoryUrl, id, null, state); - collector.accept(hit); - numCollected++; - } else { - break; - } - } catch (CoreException e) { - MylarStatusHandler.fail(e, "Problem recording Bugzilla search hit information", false); - } - } - } catch (RuntimeException e) { - if (e instanceof IllegalArgumentException) { - // ignore unrecognized tags - return; - } - throw e; - } - - } -} diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/SaxConfigurationContentHandler.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/SaxConfigurationContentHandler.java deleted file mode 100644 index 7729a5af5..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/SaxConfigurationContentHandler.java +++ /dev/null @@ -1,399 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.core; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; -import org.xml.sax.helpers.DefaultHandler; - -/** - * Quick config rdf parser. - * - * <pre> - * config.cgi?ctype=rdf - * </pre> - * - * Populates a <link>ProductConfiguration</link> data structure. - * - * @author Rob Elves - */ -public class SaxConfigurationContentHandler extends DefaultHandler { - - private static final String ELEMENT_RESOLUTION = "resolution"; - - private static final String ELEMENT_STATUS_OPEN = "status_open"; - - private static final String ELEMENT_TARGET_MILESTONE = "target_milestone"; - - private static final String ELEMENT_TARGET_MILESTONES = "target_milestones"; - - private static final String ELEMENT_INSTALL_VERSION = "install_version"; - - private static final String ATTRIBUTE_RDF_ABOUT = "rdf:about"; - - private static final String ATTRIBUTE_RESOURCE = "resource"; - - private static final String ELEMENT_VERSION = "version"; - - private static final String ELEMENT_VERSIONS = "versions"; - - private static final String ELEMENT_COMPONENT = "component"; - - private static final String ELEMENT_COMPONENTS = "components"; - - private static final String ELEMENT_NAME = "name"; - - private static final String ELEMENT_PRODUCTS = "products"; - - private static final String ELEMENT_SEVERITY = "severity"; - - private static final String ELEMENT_PRIORITY = "priority"; - - private static final String ELEMENT_KEYWORD = "keyword"; - - private static final String ELEMENT_OP_SYS = "op_sys"; - - private static final String ELEMENT_PLATFORM = "platform"; - - private static final String ELEMENT_LI = "li"; - - private static final String ELEMENT_STATUS = "status"; - - private static final int EXPECTING_ROOT = 0; - - private static final int IN_INSTALL_VERSION = 1 << 1; - - private static final int IN_STATUS = 1 << 2; - - private static final int IN_PLATFORM = 1 << 3; - - private static final int IN_OP_SYS = 1 << 4; - - private static final int IN_PRIORITY = 1 << 5; - - private static final int IN_SEVERITY = 1 << 6; - - private static final int IN_PRODUCTS = 1 << 7; - - private static final int IN_COMPONENTS = 1 << 8; - - private static final int IN_VERSIONS = 1 << 9; - - private static final int IN_LI = 1 << 10; - - private static final int IN_LI_LI = 1 << 11; - - private static final int IN_NAME = 1 << 12; - - private static final int IN_COMPONENT = 1 << 13; - - private static final int IN_VERSION = 1 << 14; - - private static final int IN_TARGET_MILESTONES = 1 << 15; - - private static final int IN_TARGET_MILESTONE = 1 << 16; - - private static final int IN_STATUS_OPEN = 1 << 17; - - private static final int IN_RESOLUTION = 1 << 18; - - private static final int IN_KEYWORD = 1 << 19; - - private int state = EXPECTING_ROOT; - - private String currentProduct; - - private String about; - - private RepositoryConfiguration configuration = new RepositoryConfiguration(); - - private Map<String, List<String>> components = new HashMap<String, List<String>>(); - - private Map<String, List<String>> versions = new HashMap<String, List<String>>(); - - private Map<String, List<String>> milestones = new HashMap<String, List<String>>(); - - private Map<String, String> componentNames = new HashMap<String, String>(); - - private Map<String, String> versionNames = new HashMap<String, String>(); - - private Map<String, String> milestoneNames = new HashMap<String, String>(); - - public RepositoryConfiguration getConfiguration() { - return configuration; - } - - @Override - public void characters(char[] ch, int start, int length) throws SAXException { - switch (state) { - - case IN_PRODUCTS | IN_LI | IN_NAME: - configuration.addProduct(String.copyValueOf(ch, start, length)); - currentProduct = String.copyValueOf(ch, start, length); - break; - case IN_COMPONENTS | IN_LI | IN_COMPONENT | IN_NAME: - if (about != null) { - String name = String.copyValueOf(ch, start, length); - componentNames.put(about, name); - // System.err.println("Component: "+about+" ---> "+name); - } - break; - case IN_VERSIONS | IN_LI | IN_VERSION | IN_NAME: - if (about != null) { - String name = String.copyValueOf(ch, start, length); - versionNames.put(about, name); - // System.err.println("Version: "+about+" ---> "+name); - } - break; - case IN_TARGET_MILESTONES | IN_LI | IN_TARGET_MILESTONE | IN_NAME: - if (about != null) { - String name = String.copyValueOf(ch, start, length); - milestoneNames.put(about, name); - // System.err.println("Version: "+about+" ---> "+name); - } - break; - case IN_PLATFORM | IN_LI: - configuration.addPlatform(String.copyValueOf(ch, start, length)); - break; - case IN_OP_SYS | IN_LI: - configuration.addOS(String.copyValueOf(ch, start, length)); - break; - case IN_PRIORITY | IN_LI: - configuration.addPriority(String.copyValueOf(ch, start, length)); - break; - case IN_SEVERITY | IN_LI: - configuration.addSeverity(String.copyValueOf(ch, start, length)); - break; - case IN_INSTALL_VERSION: - configuration.setInstallVersion(String.copyValueOf(ch, start, length)); - break; - case IN_STATUS | IN_LI: - configuration.addStatus(String.copyValueOf(ch, start, length)); - break; - case IN_RESOLUTION | IN_LI: - configuration.addResolution(String.copyValueOf(ch, start, length)); - break; - case IN_KEYWORD | IN_LI: - configuration.addKeyword(String.copyValueOf(ch, start, length)); - break; - case IN_STATUS_OPEN | IN_LI: - configuration.addOpenStatusValue(String.copyValueOf(ch, start, length)); - break; - } - } - - @Override - public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { - - if (localName.equals(ELEMENT_STATUS)) { - state = state | IN_STATUS; - } else if (localName.equals(ELEMENT_LI) && ((state & IN_LI) == IN_LI)) { - state = state | IN_LI_LI; - parseResource(attributes); - } else if (localName.equals(ELEMENT_LI) && ((state & IN_LI) != IN_LI)) { - state = state | IN_LI; - } else if (localName.equals(ELEMENT_PLATFORM)) { - state = state | IN_PLATFORM; - } else if (localName.equals(ELEMENT_OP_SYS)) { - state = state | IN_OP_SYS; - } else if (localName.equals(ELEMENT_PRIORITY)) { - state = state | IN_PRIORITY; - } else if (localName.equals(ELEMENT_SEVERITY)) { - state = state | IN_SEVERITY; - } else if (localName.equals(ELEMENT_PRODUCTS)) { - state = state | IN_PRODUCTS; - } else if (localName.equals(ELEMENT_OP_SYS)) { - state = state | IN_OP_SYS; - } else if (localName.equals(ELEMENT_NAME)) { - state = state | IN_NAME; - } else if (localName.equals(ELEMENT_COMPONENTS)) { - state = state | IN_COMPONENTS; - } else if (localName.equals(ELEMENT_COMPONENT)) { - state = state | IN_COMPONENT; - parseResource(attributes); - } else if (localName.equals(ELEMENT_VERSIONS)) { - state = state | IN_VERSIONS; - } else if (localName.equals(ELEMENT_VERSION)) { - state = state | IN_VERSION; - parseResource(attributes); - } else if (localName.equals(ELEMENT_INSTALL_VERSION)) { - state = state | IN_INSTALL_VERSION; - } else if (localName.equals(ELEMENT_TARGET_MILESTONES)) { - state = state | IN_TARGET_MILESTONES; - } else if (localName.equals(ELEMENT_TARGET_MILESTONE)) { - state = state | IN_TARGET_MILESTONE; - parseResource(attributes); - } else if (localName.equals(ELEMENT_STATUS_OPEN)) { - state = state | IN_STATUS_OPEN; - } else if (localName.equals(ELEMENT_RESOLUTION)) { - state = state | IN_RESOLUTION; - } else if (localName.equals(ELEMENT_KEYWORD)) { - state = state | IN_KEYWORD; - } - - } - - private void parseResource(Attributes attributes) { - - switch (state) { - case IN_PRODUCTS | IN_LI | IN_COMPONENTS | IN_LI_LI: - if (attributes != null) { - String compURI = attributes.getValue(ATTRIBUTE_RESOURCE); - if (compURI != null) { - - List<String> compURIs = components.get(currentProduct); - if (compURIs == null) { - compURIs = new ArrayList<String>(); - components.put(currentProduct, compURIs); - } - compURIs.add(compURI); - - } - } - break; - case IN_PRODUCTS | IN_LI | IN_VERSIONS | IN_LI_LI: - if (attributes != null) { - String resourceURI = attributes.getValue(ATTRIBUTE_RESOURCE); - if (resourceURI != null) { - List<String> versionUris = versions.get(currentProduct); - if (versionUris == null) { - versionUris = new ArrayList<String>(); - versions.put(currentProduct, versionUris); - } - versionUris.add(resourceURI); - } - } - break; - case IN_PRODUCTS | IN_LI | IN_TARGET_MILESTONES | IN_LI_LI: - if (attributes != null) { - String resourceURI = attributes.getValue(ATTRIBUTE_RESOURCE); - if (resourceURI != null) { - List<String> milestoneUris = milestones.get(currentProduct); - if (milestoneUris == null) { - milestoneUris = new ArrayList<String>(); - milestones.put(currentProduct, milestoneUris); - } - milestoneUris.add(resourceURI); - } - } - break; - case IN_COMPONENTS | IN_LI | IN_COMPONENT: - if (attributes != null) { - about = attributes.getValue(ATTRIBUTE_RDF_ABOUT); - } - break; - case IN_VERSIONS | IN_LI | IN_VERSION: - if (attributes != null) { - about = attributes.getValue(ATTRIBUTE_RDF_ABOUT); - } - break; - - case IN_TARGET_MILESTONES | IN_LI | IN_TARGET_MILESTONE: - if (attributes != null) { - about = attributes.getValue(ATTRIBUTE_RDF_ABOUT); - } - break; - - } - } - - @Override - public void endElement(String uri, String localName, String qName) throws SAXException { - - // KEEP: && ((state & IN_LI) == IN_LI) - - if (localName.equals(ELEMENT_STATUS)) { - state = state & ~IN_STATUS; - } else if (localName.equals(ELEMENT_LI) && ((state & IN_LI_LI) == IN_LI_LI)) { - state = state & ~IN_LI_LI; - } else if (localName.equals(ELEMENT_LI) && ((state & IN_LI_LI) != IN_LI_LI)) { - state = state & ~IN_LI; - } else if (localName.equals(ELEMENT_PLATFORM)) { - state = state & ~IN_PLATFORM; - } else if (localName.equals(ELEMENT_OP_SYS)) { - state = state & ~IN_OP_SYS; - } else if (localName.equals(ELEMENT_PRIORITY)) { - state = state & ~IN_PRIORITY; - } else if (localName.equals(ELEMENT_SEVERITY)) { - state = state & ~IN_SEVERITY; - } else if (localName.equals(ELEMENT_PRODUCTS)) { - state = state & ~IN_PRODUCTS; - } else if (localName.equals(ELEMENT_OP_SYS)) { - state = state & ~IN_OP_SYS; - } else if (localName.equals(ELEMENT_NAME)) { - state = state & ~IN_NAME; - } else if (localName.equals(ELEMENT_COMPONENTS)) { - state = state & ~IN_COMPONENTS; - } else if (localName.equals(ELEMENT_COMPONENT)) { - state = state & ~IN_COMPONENT; - } else if (localName.equals(ELEMENT_VERSION)) { - state = state & ~IN_VERSION; - } else if (localName.equals(ELEMENT_VERSIONS)) { - state = state & ~IN_VERSIONS; - } else if (localName.equals(ELEMENT_INSTALL_VERSION)) { - state = state & ~IN_INSTALL_VERSION; - } else if (localName.equals(ELEMENT_TARGET_MILESTONE)) { - state = state & ~IN_TARGET_MILESTONE; - } else if (localName.equals(ELEMENT_TARGET_MILESTONES)) { - state = state & ~IN_TARGET_MILESTONES; - } else if (localName.equals(ELEMENT_STATUS_OPEN)) { - state = state & ~IN_STATUS_OPEN; - } else if (localName.equals(ELEMENT_RESOLUTION)) { - state = state & ~IN_RESOLUTION; - } else if (localName.equals(ELEMENT_KEYWORD)) { - state = state & ~IN_KEYWORD; - } - - } - - @Override - public void endDocument() throws SAXException { - - for (String product : components.keySet()) { - List<String> componentURIs = components.get(product); - for (String uri : componentURIs) { - String realName = componentNames.get(uri); - if (realName != null) { - configuration.addComponent(product, realName); - } - } - } - - for (String product : versions.keySet()) { - List<String> versionURIs = versions.get(product); - for (String uri : versionURIs) { - String realName = versionNames.get(uri); - if (realName != null) { - configuration.addVersion(product, realName); - } - } - - } - - for (String product : milestones.keySet()) { - List<String> milestoneURIs = milestones.get(product); - for (String uri : milestoneURIs) { - String realName = milestoneNames.get(uri); - if (realName != null) { - configuration.addTargetMilestone(product, realName); - } - } - - } - super.endDocument(); - } -} diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/UnrecognizedReponseException.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/UnrecognizedReponseException.java deleted file mode 100644 index a99baa931..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/UnrecognizedReponseException.java +++ /dev/null @@ -1,24 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.core; - - -/** - * @author Rob Elves - */ -public class UnrecognizedReponseException extends BugzillaException { - private static final long serialVersionUID = 8419167415822022988L; - - public UnrecognizedReponseException(String message) { - super(message); - } -} diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/XmlCleaner.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/XmlCleaner.java deleted file mode 100644 index 20e3d531b..000000000 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/XmlCleaner.java +++ /dev/null @@ -1,65 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.core; - -import java.io.IOException; -import java.io.Reader; -import java.text.ParseException; - -import org.eclipse.mylar.internal.tasks.core.HtmlStreamTokenizer; -import org.eclipse.mylar.internal.tasks.core.HtmlTag; -import org.eclipse.mylar.internal.tasks.core.HtmlStreamTokenizer.Token; - -/** - * This is in place to escape & characters within the resource and rdf:about - * attributes. Currently the values are not escaped which causes sax parser - * errors. This bug has been filed and can be found here: - * https://bugzilla.mozilla.org/show_bug.cgi?id=264785 - * - * @author Rob Elves - */ -public class XmlCleaner { - - public static StringBuffer clean(Reader in) { - - HtmlStreamTokenizer tokenizer = new HtmlStreamTokenizer(in, null); - StringBuffer content = new StringBuffer(); - - // Hack since HtmlStreamTokenizer not familiar with xml tag. - content.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); - try { - for (Token token = tokenizer.nextToken(); token.getType() != Token.EOF; token = tokenizer.nextToken()) { - - if (token.getType() == Token.TAG) { - HtmlTag tag = (HtmlTag) token.getValue(); - if (tag.getAttribute("resource") != null) { - String resourceID = tag.getAttribute("resource"); - tag.setAttribute("resource", resourceID.replace("&", "&")); - } - if (tag.getAttribute("rdf:about") != null) { - String resourceID = tag.getAttribute("rdf:about"); - tag.setAttribute("rdf:about", resourceID.replace("&", "&")); - } - } - if (!token.toString().startsWith("<?xml")) { - content.append(token.toString()); - } - } - } catch (IOException e) { - - } catch (ParseException e) { - - } - return content; - } - -} diff --git a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/AbstractBugzillaTest.java b/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/AbstractBugzillaTest.java deleted file mode 100644 index 4897c1451..000000000 --- a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/AbstractBugzillaTest.java +++ /dev/null @@ -1,147 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.bugzilla.tests; - -import java.io.UnsupportedEncodingException; -import java.util.Set; - -import javax.security.auth.login.LoginException; - -import junit.framework.TestCase; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.mylar.context.tests.support.MylarTestUtils; -import org.eclipse.mylar.context.tests.support.MylarTestUtils.Credentials; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaException; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaReportSubmitForm; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaRepositoryConnector; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaTask; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants; -import org.eclipse.mylar.internal.bugzilla.core.PossibleBugzillaFailureException; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.mylar.tasks.core.TaskList; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.TaskRepositoryManager; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask.RepositoryTaskSyncState; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Mik Kersten - * @author Rob Elves - * @author Nathan Hapke - */ -public abstract class AbstractBugzillaTest extends TestCase { - - static final String DEFAULT_KIND = BugzillaCorePlugin.REPOSITORY_KIND; - - protected BugzillaRepositoryConnector connector; - - protected TaskRepositoryManager manager; - - protected TaskRepository repository; - - protected TaskList taskList; - - public AbstractBugzillaTest() { - super(); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - manager = TasksUiPlugin.getRepositoryManager(); - manager.clearRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - } - - @Override - protected void tearDown() throws Exception { - super.tearDown(); - TasksUiPlugin.getTaskListManager().resetTaskList(); - manager.clearRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - } - - protected void init222() { - init(IBugzillaConstants.TEST_BUGZILLA_222_URL); - } - - protected void init2201() { - init(IBugzillaConstants.TEST_BUGZILLA_2201_URL); - } - - protected void init220() { - init(IBugzillaConstants.TEST_BUGZILLA_220_URL); - } - - protected void init218() { - init(IBugzillaConstants.TEST_BUGZILLA_218_URL); - } - - protected void init(String url) { - repository = new TaskRepository(DEFAULT_KIND, url); - Credentials credentials = MylarTestUtils.readCredentials(); - repository.setAuthenticationCredentials(credentials.username, credentials.password); - - repository.setTimeZoneId("Canada/Eastern"); - assertNotNull(manager); - manager.addRepository(repository, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - - taskList = TasksUiPlugin.getTaskListManager().getTaskList(); - - AbstractRepositoryConnector abstractRepositoryClient = manager.getRepositoryConnector(DEFAULT_KIND); - - assertEquals(abstractRepositoryClient.getRepositoryType(), DEFAULT_KIND); - - connector = (BugzillaRepositoryConnector) abstractRepositoryClient; - connector.setForceSynchExecForTesting(true); - TasksUiPlugin.getSynchronizationManager().setForceSyncExec(true); - } - - protected BugzillaTask generateLocalTaskAndDownload(String taskNumber) throws CoreException { - BugzillaTask task = (BugzillaTask) connector.createTaskFromExistingKey(repository, taskNumber, null); - TasksUiPlugin.getSynchronizationManager().synchronize(connector, task, true, null); - - assertNotNull(task); - TasksUiPlugin.getTaskListManager().getTaskList().moveToRoot(task); - assertTrue(task.isDownloaded()); - return task; - } - - protected BugzillaReportSubmitForm makeExistingBugPost(RepositoryTaskData taskData) - throws UnsupportedEncodingException { - return BugzillaReportSubmitForm.makeExistingBugPost(taskData, repository.getUrl(), repository.getUserName(), - repository.getPassword(), null, null, repository.getCharacterEncoding()); - } - - protected void synchAndAssertState(Set<AbstractRepositoryTask> tasks, RepositoryTaskSyncState state) { - for (AbstractRepositoryTask task : tasks) { - TasksUiPlugin.getSynchronizationManager().synchronize(connector, task, true, null); - assertEquals(task.getSyncState(), state); - } - } - - class MockBugzillaReportSubmitForm extends BugzillaReportSubmitForm { - - public MockBugzillaReportSubmitForm(String encoding_utf_8) { - super(encoding_utf_8); - } - - @Override - public String submitReportToRepository() throws BugzillaException, LoginException, - PossibleBugzillaFailureException { - return "test-submit"; - } - - } -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaConfigurationTest.java b/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaConfigurationTest.java deleted file mode 100644 index 7a864dfff..000000000 --- a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaConfigurationTest.java +++ /dev/null @@ -1,224 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.bugzilla.tests; - -import java.io.BufferedReader; -import java.io.FileInputStream; -import java.io.InputStreamReader; -import java.io.StringReader; -import java.net.URL; - -import junit.framework.TestCase; - -import org.eclipse.core.runtime.FileLocator; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants; -import org.eclipse.mylar.internal.bugzilla.core.RepositoryConfiguration; -import org.eclipse.mylar.internal.bugzilla.core.RepositoryConfigurationFactory; -import org.eclipse.mylar.internal.bugzilla.core.SaxConfigurationContentHandler; -import org.eclipse.mylar.internal.bugzilla.core.XmlCleaner; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.xml.sax.ErrorHandler; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; -import org.xml.sax.XMLReader; -import org.xml.sax.helpers.XMLReaderFactory; - -public class BugzillaConfigurationTest extends TestCase { - - protected void setUp() throws Exception { - super.setUp(); - } - - protected void tearDown() throws Exception { - super.tearDown(); - } - - public void test222RDFProductConfig() throws Exception { - RepositoryConfigurationFactory factory = new RepositoryConfigurationFactory(); - TaskRepository repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, - IBugzillaConstants.TEST_BUGZILLA_222_URL); - RepositoryConfiguration config = factory.getConfiguration(repository.getUrl(), null, repository.getUserName(), - repository.getPassword(), null); - assertNotNull(config); - assertEquals("2.22", config.getInstallVersion()); - assertEquals(7, config.getStatusValues().size()); - assertEquals(8, config.getResolutions().size()); - assertEquals(4, config.getPlatforms().size()); - assertEquals(5, config.getOSs().size()); - assertEquals(5, config.getPriorities().size()); - assertEquals(7, config.getSeverities().size()); - assertEquals(3, config.getProducts().size()); - assertEquals(4, config.getOpenStatusValues().size()); - assertEquals(1, config.getComponents("TestProduct").size()); - assertEquals(1, config.getVersions("TestProduct").size()); - assertEquals(0, config.getTargetMilestones("TestProduct").size()); - } - - public void test2201RDFProductConfig() throws Exception { - RepositoryConfigurationFactory factory = new RepositoryConfigurationFactory(); - TaskRepository repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, - IBugzillaConstants.TEST_BUGZILLA_2201_URL); - RepositoryConfiguration config = factory.getConfiguration(repository.getUrl(), null, repository.getUserName(), - repository.getPassword(), null); - assertNotNull(config); - assertEquals("2.20.1", config.getInstallVersion()); - assertEquals(7, config.getStatusValues().size()); - assertEquals(8, config.getResolutions().size()); - assertEquals(4, config.getPlatforms().size()); - assertEquals(5, config.getOSs().size()); - assertEquals(5, config.getPriorities().size()); - assertEquals(7, config.getSeverities().size()); - assertEquals(1, config.getProducts().size()); - assertEquals(4, config.getOpenStatusValues().size()); - assertEquals(2, config.getComponents("TestProduct").size()); - assertEquals(1, config.getVersions("TestProduct").size()); - // assertEquals(1, config.getTargetMilestones("TestProduct").size()); - } - - public void test220RDFProductConfig() throws Exception { - RepositoryConfigurationFactory factory = new RepositoryConfigurationFactory(); - TaskRepository repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, - IBugzillaConstants.TEST_BUGZILLA_220_URL); - RepositoryConfiguration config = factory.getConfiguration(repository.getUrl(), null, repository.getUserName(), - repository.getPassword(), null); - assertNotNull(config); - assertEquals("2.20", config.getInstallVersion()); - assertEquals(7, config.getStatusValues().size()); - assertEquals(8, config.getResolutions().size()); - assertEquals(4, config.getPlatforms().size()); - assertEquals(5, config.getOSs().size()); - assertEquals(5, config.getPriorities().size()); - assertEquals(7, config.getSeverities().size()); - assertEquals(2, config.getProducts().size()); - assertEquals(4, config.getOpenStatusValues().size()); - assertEquals(2, config.getComponents("TestProduct").size()); - assertEquals(1, config.getVersions("TestProduct").size()); - // assertEquals(1, config.getTargetMilestones("TestProduct").size()); - } - - public void test218RDFProductConfig() throws Exception { - RepositoryConfigurationFactory factory = new RepositoryConfigurationFactory(); - TaskRepository repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, - IBugzillaConstants.TEST_BUGZILLA_218_URL); - RepositoryConfiguration config = factory.getConfiguration(repository.getUrl(), null, repository.getUserName(), - repository.getPassword(), null); - assertNotNull(config); - assertEquals("2.18.5", config.getInstallVersion()); - assertEquals(7, config.getStatusValues().size()); - assertEquals(8, config.getResolutions().size()); - assertEquals(8, config.getPlatforms().size()); - assertEquals(36, config.getOSs().size()); - assertEquals(5, config.getPriorities().size()); - assertEquals(7, config.getSeverities().size()); - assertEquals(1, config.getProducts().size()); - assertEquals(4, config.getOpenStatusValues().size()); - assertEquals(1, config.getComponents("TestProduct").size()); - assertEquals(1, config.getVersions("TestProduct").size()); - // assertEquals(1, config.getTargetMilestones("TestProduct").size()); - } - - public void testEclipseRDFProductConfig() throws Exception { - RepositoryConfigurationFactory factory = new RepositoryConfigurationFactory(); - TaskRepository repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, - IBugzillaConstants.ECLIPSE_BUGZILLA_URL); - RepositoryConfiguration config = factory.getConfiguration(repository.getUrl(), null, repository.getUserName(), - repository.getPassword(), null); - assertNotNull(config); - assertEquals("2.20.1", config.getInstallVersion()); - assertEquals(7, config.getStatusValues().size()); - assertEquals(8, config.getResolutions().size()); - assertEquals(6, config.getPlatforms().size()); - assertEquals(28, config.getOSs().size()); - assertEquals(5, config.getPriorities().size()); - assertEquals(7, config.getSeverities().size()); - assertTrue(config.getProducts().size() > 50); - assertEquals(4, config.getOpenStatusValues().size()); - assertEquals(11, config.getComponents("Mylar").size()); - assertEquals(22, config.getKeywords().size()); - // assertEquals(10, config.getComponents("Hyades").size()); - // assertEquals(1, config.getTargetMilestones("TestProduct").size()); - } - - public void testRepositoryConfigurationCachePersistance() throws Exception { - RepositoryConfiguration configuration1 = new RepositoryConfiguration(); - configuration1.setRepositoryUrl("url1"); - configuration1.addProduct("Test Product 1"); - assertEquals(1, configuration1.getProducts().size()); - - RepositoryConfiguration configuration2 = new RepositoryConfiguration(); - configuration1.setRepositoryUrl("url2"); - configuration2.addProduct("Test Product 2"); - assertEquals(1, configuration2.getProducts().size()); - - BugzillaCorePlugin.addRepositoryConfiguration(configuration1); - BugzillaCorePlugin.addRepositoryConfiguration(configuration2); - BugzillaCorePlugin.writeRepositoryConfigFile(); - BugzillaCorePlugin.getDefault().removeConfiguration(configuration1); - BugzillaCorePlugin.getDefault().removeConfiguration(configuration2); - assertNull(BugzillaCorePlugin.getRepositoryConfiguration(configuration1.getRepositoryUrl())); - assertNull(BugzillaCorePlugin.getRepositoryConfiguration(configuration2.getRepositoryUrl())); - BugzillaCorePlugin.readRepositoryConfigurationFile(); - assertNotNull(BugzillaCorePlugin.getRepositoryConfiguration(configuration1.getRepositoryUrl())); - assertNotNull(BugzillaCorePlugin.getRepositoryConfiguration(configuration2.getRepositoryUrl())); - RepositoryConfiguration testLoadedConfig = BugzillaCorePlugin.getRepositoryConfiguration(configuration1 - .getRepositoryUrl()); - assertEquals(1, testLoadedConfig.getProducts().size()); - assertEquals(configuration1.getProducts().get(0), testLoadedConfig.getProducts().get(0)); - } - - /** - * Can use this to test config data submitted by users. Be sure not to commit user's config file though. - * The file included (rdfconfig218.txt) is from mylar.eclipse.org/bugs218 - */ - public void testRepositoryConfigurationFromFile() throws Exception { - - URL entryURL = BugzillaTestPlugin.getDefault().getBundle().getEntry("testdata/configuration/rdfconfig218.txt"); - assertNotNull(entryURL); - URL fileURL = FileLocator.toFileURL(entryURL); - assertNotNull(fileURL); - - BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(fileURL.getFile()))); - - if (true) { - StringBuffer result = XmlCleaner.clean(in); - StringReader strReader = new StringReader(result.toString()); - in = new BufferedReader(strReader); - } - - SaxConfigurationContentHandler contentHandler = new SaxConfigurationContentHandler(); - final XMLReader reader = XMLReaderFactory.createXMLReader(); - reader.setContentHandler(contentHandler); - reader.setErrorHandler(new ErrorHandler() { - - public void error(SAXParseException exception) throws SAXException { - throw exception; - } - - public void fatalError(SAXParseException exception) throws SAXException { - throw exception; - } - - public void warning(SAXParseException exception) throws SAXException { - throw exception; - } - }); - reader.parse(new InputSource(in)); - - RepositoryConfiguration config = contentHandler.getConfiguration(); - assertNotNull(config); - - // Add your additional checking for valid data here if necessary - } - -} diff --git a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaProductParserTest.java b/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaProductParserTest.java deleted file mode 100644 index 66c66c42e..000000000 --- a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaProductParserTest.java +++ /dev/null @@ -1,110 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.bugzilla.tests; - -import java.util.Iterator; -import java.util.List; - -import junit.framework.TestCase; - -import org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaServerFacade; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants; -import org.eclipse.mylar.tasks.core.TaskRepository; - -/** - * Tests for parsing Product Page for new Bugzilla reports - * - * @author Mik Kersten - * @author Rob Elves - */ -public class BugzillaProductParserTest extends TestCase { - - private TaskRepository repository; - - @Override - protected void setUp() throws Exception { - super.setUp(); - // repository = new TaskRepository(BugzillaPlugin.REPOSITORY_KIND, - // new URL(IBugzillaConstants.ECLIPSE_BUGZILLA_URL)); - // MylarTaskListPlugin.getRepositoryManager().addRepository(repository); - } - - @Override - protected void tearDown() throws Exception { - super.tearDown(); - // MylarTaskListPlugin.getRepositoryManager().removeRepository(repository); - } - - public BugzillaProductParserTest(String arg0) { - super(arg0); - } - - public void test222Products() throws Exception { - - repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, IBugzillaConstants.TEST_BUGZILLA_222_URL, - IBugzillaConstants.BugzillaServerVersion.SERVER_220.toString()); - - List<String> productList = BugzillaServerFacade.getProductList(repository.getUrl(), null, repository.getUserName(), repository.getPassword(), BugzillaCorePlugin.ENCODING_UTF_8); - Iterator<String> itr = productList.iterator(); - assertTrue(itr.hasNext()); - assertEquals("Read Only Test Cases", itr.next()); - - } - - public void test2201Products() throws Exception { - - repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, IBugzillaConstants.TEST_BUGZILLA_2201_URL, - IBugzillaConstants.BugzillaServerVersion.SERVER_220.toString()); - - List<String> productList = BugzillaServerFacade.getProductList(repository.getUrl(), null, repository.getUserName(), repository.getPassword(), BugzillaCorePlugin.ENCODING_UTF_8); - Iterator<String> itr = productList.iterator(); - assertTrue(itr.hasNext()); - assertEquals("TestProduct", "TestProduct", itr.next()); - - } - - public void test220Products() throws Exception { - - repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, IBugzillaConstants.TEST_BUGZILLA_220_URL, - IBugzillaConstants.BugzillaServerVersion.SERVER_220.toString()); - - List<String> productList = BugzillaServerFacade.getProductList(repository.getUrl(), null, repository.getUserName(), repository.getPassword(), BugzillaCorePlugin.ENCODING_UTF_8); - assertEquals(2, productList.size()); - assertTrue(productList.contains("TestProduct")); - assertTrue(productList.contains("Widget")); - - } - - public void test218Products() throws Exception { - - repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, IBugzillaConstants.TEST_BUGZILLA_218_URL, - IBugzillaConstants.BugzillaServerVersion.SERVER_218.toString()); - - List<String> productList = BugzillaServerFacade.getProductList(repository.getUrl(), null, repository.getUserName(), repository.getPassword(), BugzillaCorePlugin.ENCODING_UTF_8); - assertEquals(1, productList.size()); - assertTrue(productList.contains("TestProduct")); - - } - -// No longer supporting 216 -// public void test216Products() throws Exception { -// -// repository = new TaskRepository(BugzillaPlugin.REPOSITORY_KIND, IBugzillaConstants.TEST_BUGZILLA_216_URL, -// IBugzillaConstants.BugzillaServerVersion.SERVER_216.toString()); -// -// List<String> productList = BugzillaRepositoryUtil.getProductList(repository); -// Iterator<String> itr = productList.iterator(); -// assertTrue(itr.hasNext()); -// assertEquals("TestProduct", "TestProduct", itr.next()); -// } - -} diff --git a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaRepositoryConnectorTest.java b/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaRepositoryConnectorTest.java deleted file mode 100644 index 908b77572..000000000 --- a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaRepositoryConnectorTest.java +++ /dev/null @@ -1,576 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.bugzilla.tests; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.net.InetAddress; -import java.net.Proxy; -import java.net.Socket; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; - -import javax.security.auth.login.LoginException; - -import org.apache.commons.httpclient.params.HttpConnectionParams; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.mylar.context.core.ContextCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaAttachmentHandler; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaException; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaQueryHit; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaReportElement; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaReportSubmitForm; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaRepositoryQuery; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaTask; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants; -import org.eclipse.mylar.internal.bugzilla.core.PossibleBugzillaFailureException; -import org.eclipse.mylar.internal.bugzilla.core.RepositoryConfiguration; -import org.eclipse.mylar.internal.bugzilla.ui.editor.BugSubmissionHandler; -import org.eclipse.mylar.internal.tasks.core.SslProtocolSocketFactory; -import org.eclipse.mylar.internal.tasks.ui.search.SearchHitCollector; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.LocalAttachment; -import org.eclipse.mylar.tasks.core.RepositoryAttachment; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask.RepositoryTaskSyncState; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Mik Kersten - * @author Rob Elves - * @author Nathan Hapke - */ -public class BugzillaRepositoryConnectorTest extends AbstractBugzillaTest { - - private BugzillaAttachmentHandler attachmentHandler = new BugzillaAttachmentHandler(); - - public void testCreateTaskFromExistingId() throws Exception { - init222(); - BugzillaTask badId = (BugzillaTask) connector.createTaskFromExistingKey(repository, "bad-id", null); - assertNull(badId); - - BugzillaTask task = (BugzillaTask) connector.createTaskFromExistingKey(repository, "1", null); - TasksUiPlugin.getSynchronizationManager().synchronize(connector, task, true, null); - assertNotNull(task); - // assertEquals(RepositoryTaskSyncState.INCOMING, task.getSyncState()); - // connector.synchronize(task, true, null); - assertEquals(RepositoryTaskSyncState.SYNCHRONIZED, task.getSyncState()); - - BugzillaTask retrievedTask = (BugzillaTask) taskList.getTask(task.getHandleIdentifier()); - assertNotNull(retrievedTask); - assertEquals(task.getHandleIdentifier(), retrievedTask.getHandleIdentifier()); - - assertTrue(task.isDownloaded()); - assertEquals(1, Integer.parseInt(task.getTaskData().getId())); - } - - public void testAnonymousRepositoryAccess() throws Exception { - init218(); - assertNotNull(repository); - repository.setAuthenticationCredentials("", ""); - // test anonymous task retrieval - BugzillaTask task = this.generateLocalTaskAndDownload("2"); - assertNotNull(task); - -// // test anonymous query (note that this demonstrates query via eclipse search (ui) -// SearchHitCollector collector = new SearchHitCollector(taskList); -// collector.setProgressMonitor(new NullProgressMonitor()); -// BugzillaSearchOperation operation = new BugzillaSearchOperation( -// repository, -// "http://mylar.eclipse.org/bugs218/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=search-match-test&product=TestProduct&long_desc_type=substring&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&deadlinefrom=&deadlineto=&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&emailassigned_to1=1&emailtype1=substring&email1=&emailassigned_to2=1&emailreporter2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0=", -// null, collector, "-1"); -// - String queryUrl = "http://mylar.eclipse.org/bugs218/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=search-match-test&product=TestProduct&long_desc_type=substring&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&deadlinefrom=&deadlineto=&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&emailassigned_to1=1&emailtype1=substring&email1=&emailassigned_to2=1&emailreporter2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0="; - BugzillaRepositoryQuery bugzillaQuery = new BugzillaRepositoryQuery(repository.getUrl(), queryUrl, "search", "-1", taskList); - - - - - SearchHitCollector collector = new SearchHitCollector(TasksUiPlugin.getTaskListManager() - .getTaskList(), repository, bugzillaQuery, null); - - - - //operation.run(new NullProgressMonitor()); - //BugzillaSearchQuery searchQuery = new BugzillaSearchQuery(collector); - collector.run(new NullProgressMonitor()); - assertEquals(2, collector.getHits().size()); - - for (AbstractQueryHit hit : collector.getHits()) { - assertTrue(hit.getDescription().contains("search-match-test")); - } - - //test anonymous update of configuration - RepositoryConfiguration config = BugzillaCorePlugin.getRepositoryConfiguration(true, repository.getUrl(), TasksUiPlugin.getDefault().getProxySettings(), repository.getUserName(), repository.getPassword(), repository.getCharacterEncoding()); - assertNotNull(config); - assertTrue(config.getComponents().size() > 0); - } - - public void testContextAttachFailure() throws Exception { - init218(); - BugzillaTask task = (BugzillaTask) connector.createTaskFromExistingKey(repository, "3", null); - TasksUiPlugin.getSynchronizationManager().synchronize(connector, task, true, null); - - assertNotNull(task.getTaskData()); - TasksUiPlugin.getTaskListManager().activateTask(task); - File sourceContextFile = ContextCorePlugin.getContextManager().getFileForContext(task.getHandleIdentifier()); - sourceContextFile.createNewFile(); - sourceContextFile.deleteOnExit(); - repository.setAuthenticationCredentials("wrong", "wrong"); - try { - connector.attachContext(repository, task, "", TasksUiPlugin.getDefault().getProxySettings()); - } catch (CoreException e) { - assertEquals(RepositoryTaskSyncState.SYNCHRONIZED, task.getSyncState()); - assertNotNull(task.getTaskData()); - return; - } - fail("Should have failed due to invalid userid and password."); - } - - public void testSynchronize() throws InterruptedException, LoginException, BugzillaException, - PossibleBugzillaFailureException, CoreException { - init222(); - - // Get the task - BugzillaTask task = (BugzillaTask) connector.createTaskFromExistingKey(repository, "1", null); - TasksUiPlugin.getSynchronizationManager().synchronize(connector, task, true, null); - - TasksUiPlugin.getTaskListManager().getTaskList().moveToRoot(task); - assertTrue(task.isDownloaded()); - // (The initial local copy from server) - // assertEquals(RepositoryTaskSyncState.INCOMING, task.getSyncState()); - // connector.synchronize(task, true, null); - assertEquals(RepositoryTaskSyncState.SYNCHRONIZED, task.getSyncState()); - // Modify it - String newCommentText = "BugzillaRepositoryClientTest.testSynchronize(): " + (new Date()).toString(); - task.getTaskData().setNewComment(newCommentText); - // overwrites old fields/attributes with new content (ususually done by - // BugEditor) - task.getTaskData().setHasLocalChanges(true); - task.setSyncState(RepositoryTaskSyncState.OUTGOING); - TasksUiPlugin.getSynchronizationManager().saveOffline(task.getTaskData()); - assertEquals(RepositoryTaskSyncState.OUTGOING, task.getSyncState()); - - // Submit changes - MockBugzillaReportSubmitForm form = new MockBugzillaReportSubmitForm(BugzillaCorePlugin.ENCODING_UTF_8); - form.setTaskData(task.getTaskData()); - new BugSubmissionHandler(connector).submitBugReport(form, null, true, true); - // submit casuses a synch which should result in - // a synchronized state (not incoming) - assertEquals(RepositoryTaskSyncState.SYNCHRONIZED, task.getSyncState()); - - // TODO: Test that comment was appended - // ArrayList<Comment> comments = task.getTaskData().getComments(); - // assertNotNull(comments); - // assertTrue(comments.size() > 0); - // Comment lastComment = comments.get(comments.size() - 1); - // assertEquals(newCommentText, lastComment.getText()); - - // OUTGOING with forceddSynch=false - task.setSyncState(RepositoryTaskSyncState.OUTGOING); - TasksUiPlugin.getSynchronizationManager().synchronize(connector, task, false, null); - assertEquals(RepositoryTaskSyncState.OUTGOING, task.getSyncState()); - - // OUTGOING with forcedSynch=true --> Update Local Copy dialog - // Choosing to override local changes results in SYNCHRONIZED - // Choosing not to override results in CONFLICT - - task.setSyncState(RepositoryTaskSyncState.CONFLICT); - TasksUiPlugin.getSynchronizationManager().synchronize(connector, task, false, null); - assertEquals(RepositoryTaskSyncState.CONFLICT, task.getSyncState()); - - // CONFLICT with forcedSynch=true --> Update Local Copy dialog - - // Has no outgoing changes or conflicts yet needs synch - // because task doesn't have bug report (new query hit) - // Result: retrieved with no incoming status - task.setSyncState(RepositoryTaskSyncState.SYNCHRONIZED); - RepositoryTaskData bugReport = task.getTaskData(); - task.setTaskData(null); - TasksUiPlugin.getSynchronizationManager().synchronize(connector, task, false, null); - assertEquals(RepositoryTaskSyncState.SYNCHRONIZED, task.getSyncState()); - assertNotNull(task.getTaskData()); - assertEquals(task.getTaskData().getId(), bugReport.getId()); - } - - public void testUniqueTaskObjects() { - init222(); - String repositoryURL = "repositoryURL"; - BugzillaQueryHit hit1 = new BugzillaQueryHit(taskList, "description", "P1", repositoryURL, "1", null, "status"); - ITask task1 = hit1.getOrCreateCorrespondingTask(); - assertNotNull(task1); - // taskList.renameTask(task1, "testing"); - // task1.setDescription("testing"); - - BugzillaQueryHit hit1Twin = new BugzillaQueryHit(taskList, "description", "P1", repositoryURL, "1", null, "status"); - ITask task2 = hit1Twin.getOrCreateCorrespondingTask(); - assertEquals(task1.getDescription(), task2.getDescription()); - } - - public void testAttachToExistingReport() throws Exception { - init222(); - int bugId = 31; - String taskNumber = "" + bugId; - BugzillaTask task = (BugzillaTask) connector.createTaskFromExistingKey(repository, taskNumber, null); - TasksUiPlugin.getSynchronizationManager().synchronize(connector, task, true, null); - - assertNotNull(task); - assertTrue(task.isDownloaded()); - assertEquals(RepositoryTaskSyncState.SYNCHRONIZED, task.getSyncState()); - assertEquals(bugId, Integer.parseInt(task.getTaskData().getId())); - int numAttached = task.getTaskData().getAttachments().size(); - String fileName = "test-attach-" + System.currentTimeMillis() + ".txt"; - - assertNotNull(repository.getUserName()); - assertNotNull(repository.getPassword()); - - /* Initialize a local attachment */ - LocalAttachment attachment = new LocalAttachment(); - attachment.setDescription("Test attachment " + new Date()); - attachment.setContentType("text/plain"); - attachment.setPatch(false); - attachment.setReport(task.getTaskData()); - attachment.setComment("Automated JUnit attachment test"); // optional - - /* Test attempt to upload a non-existent file */ - attachment.setFilePath("/this/is/not/a/real-file"); - assertFalse(attachmentHandler.uploadAttachment(attachment, repository.getUserName(), repository.getPassword(), - Proxy.NO_PROXY)); - assertEquals(RepositoryTaskSyncState.SYNCHRONIZED, task.getSyncState()); - task = (BugzillaTask) connector.createTaskFromExistingKey(repository, taskNumber, null); - TasksUiPlugin.getSynchronizationManager().synchronize(connector, task, true, null); - - assertEquals(numAttached, task.getTaskData().getAttachments().size()); - - /* Test attempt to upload an empty file */ - File attachFile = new File(fileName); - attachment.setFilePath(attachFile.getAbsolutePath()); - BufferedWriter write = new BufferedWriter(new FileWriter(attachFile)); - assertFalse(attachmentHandler.uploadAttachment(attachment, repository.getUserName(), repository.getPassword(), - Proxy.NO_PROXY)); - task = (BugzillaTask) connector.createTaskFromExistingKey(repository, taskNumber, null); - TasksUiPlugin.getSynchronizationManager().synchronize(connector, task, true, null); - - assertEquals(numAttached, task.getTaskData().getAttachments().size()); - - /* Test uploading a proper file */ - write.write("test file"); - write.close(); - attachment.setFilePath(attachFile.getAbsolutePath()); - assertTrue(attachmentHandler.uploadAttachment(attachment, repository.getUserName(), repository.getPassword(), - Proxy.NO_PROXY)); - task = (BugzillaTask) connector.createTaskFromExistingKey(repository, taskNumber, null); - TasksUiPlugin.getSynchronizationManager().synchronize(connector, task, true, null); - assertEquals(numAttached + 1, task.getTaskData().getAttachments().size()); - - // use assertion to track clean-up - assertTrue(attachFile.delete()); - } - - public void testSynchChangedReports() throws Exception { - - init222(); - BugzillaTask task4 = generateLocalTaskAndDownload("4"); - assertNotNull(task4.getTaskData()); - assertEquals(RepositoryTaskSyncState.SYNCHRONIZED, task4.getSyncState()); - assertEquals(4, Integer.parseInt(task4.getTaskData().getId())); - - BugzillaTask task5 = generateLocalTaskAndDownload("5"); - assertEquals(RepositoryTaskSyncState.SYNCHRONIZED, task5.getSyncState()); - assertEquals(5, Integer.parseInt(task5.getTaskData().getId())); - - Set<AbstractRepositoryTask> tasks = new HashSet<AbstractRepositoryTask>(); - tasks.add(task4); - tasks.add(task5); - - TasksUiPlugin.getRepositoryManager().setSyncTime(repository, task5.getLastSyncDateStamp(), TasksUiPlugin.getDefault().getRepositoriesFilePath()); - - Set<AbstractRepositoryTask> changedTasks = connector.getOfflineTaskHandler().getChangedSinceLastSync(repository, - tasks, null); - assertEquals(0, changedTasks.size()); - - String priority4 = null; - if (task4.getPriority().equals("P1")) { - priority4 = "P2"; - task4.getTaskData().setAttributeValue(BugzillaReportElement.PRIORITY.getKeyString(), priority4); - } else { - priority4 = "P1"; - task4.getTaskData().setAttributeValue(BugzillaReportElement.PRIORITY.getKeyString(), priority4); - } - - String priority5 = null; - if (task5.getPriority().equals("P1")) { - priority5 = "P2"; - task5.getTaskData().setAttributeValue(BugzillaReportElement.PRIORITY.getKeyString(), priority5); - } else { - priority5 = "P1"; - task5.getTaskData().setAttributeValue(BugzillaReportElement.PRIORITY.getKeyString(), priority5); - } - - assertNotNull(repository.getUserName()); - assertNotNull(repository.getPassword()); - - BugzillaReportSubmitForm bugzillaReportSubmitForm; - - - bugzillaReportSubmitForm = makeExistingBugPost(task4.getTaskData()); - bugzillaReportSubmitForm.submitReportToRepository(); - bugzillaReportSubmitForm = makeExistingBugPost(task5.getTaskData()); - bugzillaReportSubmitForm.submitReportToRepository(); - - - changedTasks = connector.getOfflineTaskHandler().getChangedSinceLastSync(repository, tasks, null); - assertEquals("Changed reports expected ", 2, changedTasks.size()); - assertTrue(tasks.containsAll(changedTasks)); - for (AbstractRepositoryTask task : changedTasks) { - if (task.getTaskData().getId() == "4") { - assertEquals(priority4, task4.getPriority()); - } - if (task.getTaskData().getId() == "5") { - assertEquals(priority5, task5.getPriority()); - } - } - // synchAndAssertState(tasks, RepositoryTaskSyncState.INCOMING); - // synchAndAssertState(tasks, RepositoryTaskSyncState.SYNCHRONIZED); - } - - public void testIncomingWhenOfflineDeleted() throws Exception { - - init222(); - BugzillaTask task7 = generateLocalTaskAndDownload("7"); - assertEquals(RepositoryTaskSyncState.SYNCHRONIZED, task7.getSyncState()); - assertEquals(7, Integer.parseInt(task7.getTaskData().getId())); - - Set<AbstractRepositoryTask> tasks = new HashSet<AbstractRepositoryTask>(); - tasks.add(task7); - - RepositoryTaskData recentTaskData = task7.getTaskData(); - assertNotNull(recentTaskData); - - TasksUiPlugin.getRepositoryManager().setSyncTime(repository, task7.getLastSyncDateStamp(), TasksUiPlugin.getDefault().getRepositoriesFilePath()); - - assertFalse(TasksUiPlugin.getDefault().getOfflineReportsFile().find(IBugzillaConstants.TEST_BUGZILLA_222_URL, - "7") == -1); - ArrayList<RepositoryTaskData> taskDataList = new ArrayList<RepositoryTaskData>(); - taskDataList.add(task7.getTaskData()); - TasksUiPlugin.getDefault().getOfflineReportsFile().remove(taskDataList); - assertTrue(TasksUiPlugin.getDefault().getOfflineReportsFile().find(IBugzillaConstants.TEST_BUGZILLA_222_URL, - "7") == -1); - - assertEquals(RepositoryTaskSyncState.SYNCHRONIZED, task7.getSyncState()); - assertNotNull(task7.getLastSyncDateStamp()); - // Task no longer stored offline - // make an external change - assertNotNull(repository.getUserName()); - assertNotNull(repository.getPassword()); - - String priority = null; - if (task7.getPriority().equals("P1")) { - priority = "P2"; - recentTaskData.setAttributeValue(BugzillaReportElement.PRIORITY.getKeyString(), priority); - } else { - priority = "P1"; - recentTaskData.setAttributeValue(BugzillaReportElement.PRIORITY.getKeyString(), priority); - } - - BugzillaReportSubmitForm bugzillaReportSubmitForm; - bugzillaReportSubmitForm = makeExistingBugPost(recentTaskData); - bugzillaReportSubmitForm.submitReportToRepository(); - TasksUiPlugin.getSynchronizationManager().synchronizeChanged(connector, repository); - assertEquals(RepositoryTaskSyncState.INCOMING, task7.getSyncState()); - } - - public void testTimeTracker222() throws Exception { - init222(); - timeTracker(14, true); - } - - // We'll skip these two for now and just test 222 and 218 since - // they are the most common. If problems arise we can re-enable. - // public void testTimeTracker2201() throws Exception { - // init2201(); - // timeTracker(22, true); - // } - // - // public void testTimeTracker220() throws Exception { - // init220(); - // timeTracker(8, true); - // } - - public void testTimeTracker218() throws Exception { - init218(); - timeTracker(18, false); - } - - /** - * @param enableDeadline - * bugzilla 218 doesn't support deadlines - */ - protected void timeTracker(int taskid, boolean enableDeadline) throws Exception { - BugzillaTask bugtask = generateLocalTaskAndDownload("" + taskid); - assertEquals(taskid, Integer.parseInt(bugtask.getTaskData().getId())); - assertEquals(RepositoryTaskSyncState.SYNCHRONIZED, bugtask.getSyncState()); - - Set<AbstractRepositoryTask> tasks = new HashSet<AbstractRepositoryTask>(); - tasks.add(bugtask); - - // synchAndAssertState(tasks, RepositoryTaskSyncState.SYNCHRONIZED); - - TasksUiPlugin.getRepositoryManager().setSyncTime(repository, bugtask.getLastSyncDateStamp(), TasksUiPlugin.getDefault().getRepositoriesFilePath()); - // connector.synchronizeChanged(repository); - - // Set<AbstractRepositoryTask> changedTasks = - // connector.getOfflineTaskHandler().getChangedSinceLastSync(repository, - // tasks); - // assertEquals(1, changedTasks.size()); - - assertNotNull(repository.getUserName()); - assertNotNull(repository.getPassword()); - - float estimatedTime, remainingTime, actualTime, addTime; - String deadline = null; - - RepositoryTaskData bugtaskdata = bugtask.getTaskData(); - estimatedTime = Float.parseFloat(bugtaskdata.getAttributeValue(BugzillaReportElement.ESTIMATED_TIME - .getKeyString())); - remainingTime = Float.parseFloat(bugtaskdata.getAttributeValue(BugzillaReportElement.REMAINING_TIME - .getKeyString())); - actualTime = Float.parseFloat(bugtaskdata.getAttributeValue(BugzillaReportElement.ACTUAL_TIME.getKeyString())); - if (enableDeadline) - deadline = bugtaskdata.getAttributeValue(BugzillaReportElement.DEADLINE.getKeyString()); - - estimatedTime += 2; - remainingTime += 1.5; - addTime = 0.75f; - if (enableDeadline) - deadline = generateNewDay(); - - bugtaskdata.setAttributeValue(BugzillaReportElement.ESTIMATED_TIME.getKeyString(), "" + estimatedTime); - bugtaskdata.setAttributeValue(BugzillaReportElement.REMAINING_TIME.getKeyString(), "" + remainingTime); - bugtaskdata.setAttributeValue(BugzillaReportElement.WORK_TIME.getKeyString(), "" + addTime); - if (enableDeadline) - bugtaskdata.setAttributeValue(BugzillaReportElement.DEADLINE.getKeyString(), deadline); - - BugzillaReportSubmitForm bugzillaReportSubmitForm; - - for (AbstractRepositoryTask task : tasks) { - task.getTaskData().setAttributeValue(BugzillaReportElement.ADD_COMMENT.getKeyString(), - "New Estimate: " + estimatedTime + "\nNew Remaining: " + remainingTime + "\nAdd: " + addTime); - bugzillaReportSubmitForm = makeExistingBugPost(task.getTaskData()); - bugzillaReportSubmitForm.submitReportToRepository(); - } - - // assertEquals("Changed reports expected ", 1, - // connector.getOfflineTaskHandler().getChangedSinceLastSync(repository, - // tasks).size()); - - synchAndAssertState(tasks, RepositoryTaskSyncState.INCOMING); - // synchAndAssertState(tasks, RepositoryTaskSyncState.SYNCHRONIZED); - - bugtaskdata = bugtask.getTaskData(); - - assertEquals(estimatedTime, Float.parseFloat(bugtaskdata.getAttributeValue(BugzillaReportElement.ESTIMATED_TIME - .getKeyString()))); - assertEquals(remainingTime, Float.parseFloat(bugtaskdata.getAttributeValue(BugzillaReportElement.REMAINING_TIME - .getKeyString()))); - assertEquals(actualTime + addTime, Float.parseFloat(bugtaskdata - .getAttributeValue(BugzillaReportElement.ACTUAL_TIME.getKeyString()))); - if (enableDeadline) - assertEquals(deadline, bugtaskdata.getAttributeValue(BugzillaReportElement.DEADLINE.getKeyString())); - - } - - public void testTrustAllSslProtocolSocketFactory() throws Exception { - SslProtocolSocketFactory factory = new SslProtocolSocketFactory(); - Socket s; - - s = factory.createSocket("mylar.eclipse.org", 80); - assertNotNull(s); - assertTrue(s.isConnected()); - s.close(); - - InetAddress anyHost = new Socket().getLocalAddress(); - - s = factory.createSocket("mylar.eclipse.org", 80, anyHost, 0); - assertNotNull(s); - assertTrue(s.isConnected()); - s.close(); - - HttpConnectionParams params = new HttpConnectionParams(); - s = factory.createSocket("mylar.eclipse.org", 80, anyHost, 0, null); - assertNotNull(s); - assertTrue(s.isConnected()); - s.close(); - - params.setConnectionTimeout(1000); - s = factory.createSocket("mylar.eclipse.org", 80, anyHost, 0, params); - assertNotNull(s); - assertTrue(s.isConnected()); - s.close(); - } - - private String generateNewDay() { - int year = 2006; - int month = (int) (Math.random() * 12 + 1); - int day = (int) (Math.random() * 28 + 1); - return "" + year + "-" + ((month <= 9) ? "0" : "") + month + "-" + ((day <= 9) ? "0" : "") + day; - } - - /** - * Ensure obsoletes and patches are marked as such by the parser. - */ - public void testAttachmentAttributes() throws Exception { - init222(); - int bugId = 19; - String taskNumber = "" + bugId; - BugzillaTask task = (BugzillaTask) connector.createTaskFromExistingKey(repository, taskNumber, null); - TasksUiPlugin.getSynchronizationManager().synchronize(connector, task, true, null); - - assertNotNull(task); - - boolean isPatch[] = { false, true, false, false, false, false, false, true, false, false }; - boolean isObsolete[] = { false, true, false, true, false, false, false, false, false, false }; - - Iterator<RepositoryAttachment> iter = task.getTaskData().getAttachments().iterator(); - int index = 0; - while (iter.hasNext()) { - assertTrue(validateAttachmentAttributes(iter.next(), isPatch[index], isObsolete[index])); - index++; - } - } - - private boolean validateAttachmentAttributes(RepositoryAttachment att, boolean isPatch, boolean isObsolete) { - return (att.isPatch() == isPatch) && (att.isObsolete() == isObsolete); - } - -// class MockBugzillaReportSubmitForm extends BugzillaReportSubmitForm { -// -// public MockBugzillaReportSubmitForm(String encoding_utf_8) { -// super(encoding_utf_8); -// } -// -// @Override -// public String submitReportToRepository() throws BugzillaException, LoginException, -// PossibleBugzillaFailureException { -// return "test-submit"; -// } -// -// } -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaSearchDialogTest.java b/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaSearchDialogTest.java deleted file mode 100644 index d6e7825ef..000000000 --- a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaSearchDialogTest.java +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.bugzilla.tests; - -import junit.framework.TestCase; - -import org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants; -import org.eclipse.mylar.internal.bugzilla.ui.search.BugzillaSearchPage; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.TaskRepositoryManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.widgets.Shell; - -/** - * Test the bugzilla search dialog. - * - * @author Jeff Pound - */ -public class BugzillaSearchDialogTest extends TestCase { - - private TaskRepositoryManager manager; - - @Override - public void setUp() throws Exception { - super.setUp(); - manager = TasksUiPlugin.getRepositoryManager(); - assertNotNull(manager); - manager.clearRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - } - - @Override - protected void tearDown() throws Exception { - super.tearDown(); - if (manager != null) { - manager.clearRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - } - } - - /** - * Test that the search dialog is initialized properly with the given - * repository. - * - * @throws Exception - */ - public void testSearchDialogInit() throws Exception { - TaskRepository repo = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, - IBugzillaConstants.TEST_BUGZILLA_222_URL, IBugzillaConstants.BugzillaServerVersion.SERVER_222 - .toString()); - manager.addRepository(repo, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - BugzillaSearchPage page = new BugzillaSearchPage(repo); - Shell shell = BugzillaTestPlugin.getDefault().getWorkbench().getDisplay().getShells()[0]; - page.createControl(shell); - page.setVisible(true); - - /* - * This assertion will fail with a 0 product count if the options are - * not retrieved properly, throw an exception if the page is not - * initialized properly, or pass otherwise. - */ - assertFalse(page.getProductCount() == 0); - } -} diff --git a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaSearchEngineTest.java b/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaSearchEngineTest.java deleted file mode 100644 index 651419792..000000000 --- a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaSearchEngineTest.java +++ /dev/null @@ -1,110 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.bugzilla.tests; - -import java.util.List; - -import junit.framework.TestCase; - -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaRepositoryQuery; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.QueryHitCollector; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Rob Elves - */ -public class BugzillaSearchEngineTest extends TestCase { - - private static final String MAX_HITS = "100"; - private static final String QUERY_NAME = "Query Page Name"; - private static final String BUG_DESC_SUBSTRING_SEARCH = "/buglist.cgi?short_desc_type=allwordssubstr&short_desc=";//search-match-test&"; - private static final String SEARCH_DESCRIPTION = "search-match-test"; - private static final int NUM_EXPECTED_HITS = 2; - private static final int NUM_REPOSITORIES = 0; - - protected void setUp() throws Exception { - super.setUp(); - TasksUiPlugin.getRepositoryManager().clearRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - assertEquals(NUM_REPOSITORIES, TasksUiPlugin.getRepositoryManager().getRepositories(BugzillaCorePlugin.REPOSITORY_KIND).size()); - } - - protected void tearDown() throws Exception { - TasksUiPlugin.getRepositoryManager().clearRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - super.tearDown(); - } - -// public void testSearching216() throws Exception { -// TaskRepository repository = new TaskRepository(BugzillaPlugin.REPOSITORY_KIND, -// IBugzillaConstants.TEST_BUGZILLA_216_URL, IBugzillaConstants.BugzillaServerVersion.SERVER_216.toString()); -// MylarTaskListPlugin.getRepositoryManager().addRepository(repository); -// List<AbstractQueryHit> hits = runQuery(IBugzillaConstants.TEST_BUGZILLA_216_URL, SEARCH_DESCRIPTION); -// assertEquals(NUM_EXPECTED_HITS, hits.size()); -// } - - public void testSearching218() throws Exception { - TaskRepository repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, - IBugzillaConstants.TEST_BUGZILLA_218_URL, IBugzillaConstants.BugzillaServerVersion.SERVER_218.toString()); - TasksUiPlugin.getRepositoryManager().addRepository(repository, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - assertEquals(NUM_EXPECTED_HITS, runQuery(IBugzillaConstants.TEST_BUGZILLA_218_URL, SEARCH_DESCRIPTION).size()); - } - - public void testSearching220() throws Exception { - TaskRepository repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, - IBugzillaConstants.TEST_BUGZILLA_220_URL, IBugzillaConstants.BugzillaServerVersion.SERVER_220.toString()); - TasksUiPlugin.getRepositoryManager().addRepository(repository, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - assertEquals(NUM_EXPECTED_HITS, runQuery(IBugzillaConstants.TEST_BUGZILLA_220_URL, SEARCH_DESCRIPTION).size()); - } - - public void testSearching2201() throws Exception { - TaskRepository repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, - IBugzillaConstants.TEST_BUGZILLA_2201_URL, IBugzillaConstants.BugzillaServerVersion.SERVER_220.toString()); - TasksUiPlugin.getRepositoryManager().addRepository(repository, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - assertEquals(NUM_EXPECTED_HITS, runQuery(IBugzillaConstants.TEST_BUGZILLA_2201_URL, SEARCH_DESCRIPTION).size()); - } - - public void testSearching222() throws Exception { - TaskRepository repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, - IBugzillaConstants.TEST_BUGZILLA_222_URL, IBugzillaConstants.BugzillaServerVersion.SERVER_222.toString()); - TasksUiPlugin.getRepositoryManager().addRepository(repository, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - List<AbstractQueryHit> hits = runQuery(IBugzillaConstants.TEST_BUGZILLA_222_URL, SEARCH_DESCRIPTION); - assertEquals(NUM_EXPECTED_HITS, hits.size()); - } - - private List<AbstractQueryHit> runQuery(String repositoryURL, String SearchString) throws Exception { - TaskRepository repository = TasksUiPlugin.getRepositoryManager().getRepository(BugzillaCorePlugin.REPOSITORY_KIND, repositoryURL); - assertNotNull(repository); - - final BugzillaRepositoryQuery repositoryQuery = new BugzillaRepositoryQuery( - repository.getUrl(), - repository.getUrl() + BUG_DESC_SUBSTRING_SEARCH+SearchString, - QUERY_NAME, - MAX_HITS, TasksUiPlugin.getTaskListManager().getTaskList()); - - AbstractRepositoryConnector connector = (AbstractRepositoryConnector) TasksUiPlugin.getRepositoryManager().getRepositoryConnector(BugzillaCorePlugin.REPOSITORY_KIND); - - QueryHitCollector collector = new QueryHitCollector(TasksUiPlugin.getTaskListManager().getTaskList()); - - connector.performQuery(repositoryQuery, repository, TasksUiPlugin.getDefault().getProxySettings(), new NullProgressMonitor(), collector); - - //results.addAll(connector.performQuery(repositoryQuery, new NullProgressMonitor(), new MultiStatus(TasksUiPlugin.PLUGIN_ID, IStatus.OK, "Query result", null))); - return collector.getHits(); - } - - - -} diff --git a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaTaskDataMigrationTest.java b/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaTaskDataMigrationTest.java deleted file mode 100644 index 97fb8b558..000000000 --- a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaTaskDataMigrationTest.java +++ /dev/null @@ -1,34 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.bugzilla.tests; - -import org.eclipse.mylar.internal.bugzilla.core.BugzillaTask; -import org.eclipse.mylar.internal.bugzilla.ui.tasklist.BugzillaTaskEditorInput; -import org.eclipse.mylar.tasks.core.RepositoryTaskAttribute; - -/** - * @author Rob Elves - */ -public class BugzillaTaskDataMigrationTest extends AbstractBugzillaTest { - - public void testMigrateDescriptionToReadOnly() throws Exception { - init222(); - BugzillaTask task = generateLocalTaskAndDownload("1"); - assertNotNull(task); - assertNotNull(task.getTaskData()); - RepositoryTaskAttribute attrib = task.getTaskData().getDescriptionAttribute(); - assertNotNull(attrib); - attrib.setReadOnly(false); - BugzillaTaskEditorInput editorInput = new BugzillaTaskEditorInput(repository, task, false); - assertTrue(editorInput.getBugTask().getTaskData().getDescriptionAttribute().isReadOnly()); - } -} diff --git a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaTaskHyperlinkDetectorTest.java b/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaTaskHyperlinkDetectorTest.java deleted file mode 100644 index 1168fe7ae..000000000 --- a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaTaskHyperlinkDetectorTest.java +++ /dev/null @@ -1,133 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.bugzilla.tests; - -import junit.framework.TestCase; - -import org.eclipse.jface.text.Document; -import org.eclipse.jface.text.Region; -import org.eclipse.jface.text.hyperlink.IHyperlink; -import org.eclipse.mylar.internal.bugzilla.ui.BugzillaTaskHyperlinkDetector; -import org.eclipse.mylar.internal.tasks.ui.editors.RepositoryTextViewer; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Shell; - -/** - * @author Rob Elves - */ -public class BugzillaTaskHyperlinkDetectorTest extends TestCase { - - private static final String DUPLICATE_NUMBER = "112233"; - - private static final String DUPLICATE = "duplicate of "+DUPLICATE_NUMBER; - - private String TASK_FORMAT_1 = "task#1"; - - private String TASK_FORMAT_2 = "task# 1"; - - private String TASK_FORMAT_3 = "task1"; - - private String TASK_FORMAT_4 = "task #1"; - - private String BUG_FORMAT_1 = "bug# 1"; - - private String BUG_FORMAT_2 = "bug # 1"; - - private String BUG_FORMAT_3 = "bug1"; - - private String BUG_FORMAT_4 = "bug #1"; - - private String BUG_FORMAT_1_2 = "bug# 2"; - - private BugzillaTaskHyperlinkDetector detector = new BugzillaTaskHyperlinkDetector(); - - private TaskRepository dummyRepository = new TaskRepository("repository_kind", "repository_url"); - - private RepositoryTextViewer viewer = new RepositoryTextViewer(dummyRepository, new Shell(), SWT.NONE); - - private String[] formats = { TASK_FORMAT_1, TASK_FORMAT_2, TASK_FORMAT_3, TASK_FORMAT_4, BUG_FORMAT_1, BUG_FORMAT_2, BUG_FORMAT_3, BUG_FORMAT_4 }; - - protected void setUp() throws Exception { - super.setUp(); - } - - protected void tearDown() throws Exception { - super.tearDown(); - } - - public void testBeginning() { - for (String format : formats) { - String testString = 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()); - } - } - - public void testEnd() { - for (String format : formats) { - String testString = "is ends with " + format; - viewer.setDocument(new Document(testString)); - Region region = new Region(testString.indexOf(format), testString.length()); - IHyperlink[] links = detector.detectHyperlinks(viewer, region, false); - assertNotNull(links); - assertEquals(1, links.length); - assertEquals(testString.indexOf(format), links[0].getHyperlinkRegion().getOffset()); - } - } - - public void testMiddle() { - for (String format : formats) { - String testString = "is a " + format + " in the middle"; - viewer.setDocument(new Document(testString)); - Region region = new Region(testString.indexOf(format), testString.length()); - IHyperlink[] links = detector.detectHyperlinks(viewer, region, false); - assertNotNull(links); - assertEquals(1, links.length); - assertEquals(testString.indexOf(format), links[0].getHyperlinkRegion().getOffset()); - } - } - - public void testTwoOnSingleLine() { - String testString = "is a " + BUG_FORMAT_1 + " in the middle and at the end " + BUG_FORMAT_1_2; - viewer.setDocument(new Document(testString)); - Region region = new Region(testString.indexOf(BUG_FORMAT_1_2), testString.length()); - IHyperlink[] links = detector.detectHyperlinks(viewer, region, false); - assertNotNull(links); - assertEquals(1, links.length); - assertEquals(testString.indexOf(BUG_FORMAT_1_2), links[0].getHyperlinkRegion().getOffset()); - } - - public void testMultiLine() { - String testString = "is a the first line\n this is the second which ends with a bug, " + BUG_FORMAT_1_2; - viewer.setDocument(new Document(testString)); - Region region = new Region(testString.indexOf(BUG_FORMAT_1_2), testString.length()); - IHyperlink[] links = detector.detectHyperlinks(viewer, region, false); - assertNotNull(links); - assertEquals(1, links.length); - assertEquals(testString.indexOf(BUG_FORMAT_1_2), links[0].getHyperlinkRegion().getOffset()); - } - - public void testDuplicate() { - String testString = "*** This bug has been marked as a "+DUPLICATE+" ***"; - viewer.setDocument(new Document(testString)); - Region region = new Region(testString.indexOf(DUPLICATE), testString.length()); - IHyperlink[] links = detector.detectHyperlinks(viewer, region, false); - assertNotNull(links); - assertEquals(1, links.length); - assertEquals(testString.indexOf(DUPLICATE_NUMBER), links[0].getHyperlinkRegion().getOffset()); - } -} diff --git a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaTaskListManagerTest.java b/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaTaskListManagerTest.java deleted file mode 100644 index c7fd07133..000000000 --- a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaTaskListManagerTest.java +++ /dev/null @@ -1,237 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.bugzilla.tests; - -import java.io.File; -import java.io.IOException; -import java.util.Collection; -import java.util.Set; - -import junit.framework.TestCase; - -import org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaRepositoryQuery; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaTask; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.AbstractTaskContainer; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.mylar.tasks.core.TaskList; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TaskListManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Mik Kersten - */ -public class BugzillaTaskListManagerTest extends TestCase { - - private TaskListManager manager; - - private TaskRepository repository; - - @Override - protected void setUp() throws Exception { - super.setUp(); - manager = TasksUiPlugin.getTaskListManager(); - manager.readExistingOrCreateNewList(); - manager.resetTaskList(); - manager.saveTaskList(); - repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, IBugzillaConstants.ECLIPSE_BUGZILLA_URL); - TasksUiPlugin.getRepositoryManager().addRepository(repository, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - assertEquals(0, manager.getTaskList().getAllTasks().size()); - } - - @Override - protected void tearDown() throws Exception { - super.tearDown(); - manager.resetTaskList(); - TasksUiPlugin.getDefault().getTaskListSaveManager().saveTaskList(true); - TasksUiPlugin.getRepositoryManager().removeRepository(repository, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - } - - // TODO: move - public void testRemindedPersistance() { - - String repositoryUrl = "https://bugs.eclipse.org/bugs"; - - String bugNumber = "106939"; - - BugzillaTask task1 = new BugzillaTask(repositoryUrl + "-" + bugNumber, "label", false); - manager.getTaskList().addTask(task1); - - task1.setReminded(true); - - TasksUiPlugin.getTaskListManager().saveTaskList(); - TasksUiPlugin.getTaskListManager().resetTaskList(); - TasksUiPlugin.getTaskListManager().readExistingOrCreateNewList(); - - TaskList taskList = manager.getTaskList(); - assertEquals(1, taskList.getAllTasks().size()); - Set<AbstractRepositoryTask> tasksReturned = taskList.getRepositoryTasks(repositoryUrl); - assertNotNull(tasksReturned); - assertEquals(1, tasksReturned.size()); - for (AbstractRepositoryTask task : tasksReturned) { - assertTrue(task.hasBeenReminded()); - } - } - - public void testRepositoryTaskExternalization() { - BugzillaTask repositoryTask = new BugzillaTask("bug-1", "label", true); - repositoryTask.setKind("kind"); - manager.getTaskList().moveToRoot(repositoryTask); - manager.saveTaskList(); - - manager.resetTaskList(); - // manager.getTaskList().clear(); - // TaskList list = new TaskList(); - // manager.setTaskList(list); - manager.readExistingOrCreateNewList(); - assertEquals(1, manager.getTaskList().getRootTasks().size()); - AbstractRepositoryTask readTask = (AbstractRepositoryTask) manager.getTaskList().getRootTasks().iterator() - .next(); - - assertEquals(repositoryTask.getHandleIdentifier(), readTask.getHandleIdentifier()); - assertEquals(repositoryTask.getDescription(), readTask.getDescription()); - assertEquals(repositoryTask.getTaskType(), readTask.getTaskType()); - } - - public void testQueryExternalization() { - AbstractRepositoryQuery query = new BugzillaRepositoryQuery("repositoryUrl", "queryUrl", "label", "1", manager - .getTaskList()); - // long time = 1234; - // Date oldDate = new Date(time); - // query.setLastRefresh(oldDate); - assertEquals("repositoryUrl", query.getRepositoryUrl()); - assertEquals("queryUrl", query.getUrl()); - assertEquals("<never>", query.getLastRefreshTimeStamp()); - query.setLastRefreshTimeStamp("today"); - // assertEquals(time, query.getLastSynchronized().getTime()); - manager.getTaskList().addQuery(query); - manager.saveTaskList(); - assertNotNull(manager.getTaskList()); - - manager.resetTaskList(); - manager.readExistingOrCreateNewList(); - assertEquals(1, manager.getTaskList().getQueries().size()); - AbstractRepositoryQuery readQuery = manager.getTaskList().getQueries().iterator().next(); - assertEquals(query.getUrl(), readQuery.getUrl()); - assertEquals(query.getRepositoryUrl(), readQuery.getRepositoryUrl()); - assertEquals("today", query.getLastRefreshTimeStamp()); - assertEquals("repositoryUrl", readQuery.getRepositoryUrl()); - // assertEquals(time, readQuery.getLastSynchronized().getTime()); - } - - public void testBugzillaCustomQueryExternalization() { - BugzillaRepositoryQuery query = new BugzillaRepositoryQuery("repositoryUrl", "queryUrl", "label", "1", manager - .getTaskList()); - query.setCustomQuery(true); - manager.getTaskList().addQuery(query); - manager.saveTaskList(); - - manager.resetTaskList(); - // manager.getTaskList().clear(); - // TaskList list = new TaskList(); - // manager.setTaskList(list); - manager.readExistingOrCreateNewList(); - assertEquals(1, manager.getTaskList().getQueries().size()); - BugzillaRepositoryQuery readQuery = (BugzillaRepositoryQuery) manager.getTaskList().getQueries().iterator() - .next(); - assertTrue(readQuery.isCustomQuery()); - } - - public void testLegacyTaskListReading() throws IOException { - File originalFile = manager.getTaskListFile(); - File legacyListFile = new File("temptasklist.xml"); - legacyListFile.deleteOnExit(); - BugzillaTestUtil.copy(BugzillaTestUtil.getLocalFile("testdata/legacy/tasklist_0_4_8.xml"), legacyListFile); - - assertEquals(362451, legacyListFile.length()); - assertTrue(legacyListFile.exists()); - - manager.setTaskListFile(legacyListFile); - manager.readExistingOrCreateNewList(); - manager.setTaskListFile(originalFile); - - Collection<ITask> allTasks = manager.getTaskList().getAllTasks(); - Set<ITask> allRootTasks = manager.getTaskList().getRootTasks(); - Set<AbstractTaskContainer> allCategories = manager.getTaskList().getCategories(); - Set<ITaskListElement> allRoots = manager.getTaskList().getRootElements(); - assertEquals(0, allRootTasks.size()); - - manager.saveTaskList(); - // manager.getTaskList().clear(); - manager.resetTaskList(); - // TaskList list = new TaskList(); - // manager.setTaskList(list); - manager.readExistingOrCreateNewList(); - - assertEquals(allRootTasks.size(), manager.getTaskList().getRootTasks().size()); - assertEquals(allCategories, manager.getTaskList().getCategories()); - assertEquals(allRoots.size(), manager.getTaskList().getRootElements().size()); - assertEquals(allTasks.size(), manager.getTaskList().getAllTasks().size()); - - // rewrite and test again - manager.saveTaskList(); - // manager.getTaskList().clear(); - manager.resetTaskList(); - // list = new TaskList(); - // manager.setTaskList(list); - manager.readExistingOrCreateNewList(); - - assertEquals(allRootTasks.size(), manager.getTaskList().getRootTasks().size()); - assertEquals(allCategories, manager.getTaskList().getCategories()); - assertEquals(allRoots.size(), manager.getTaskList().getRootElements().size()); - assertEquals(allTasks.size(), manager.getTaskList().getAllTasks().size()); - - manager.deactivateTask(manager.getTaskList().getActiveTask()); - } - - public void testDeleteQuery() { - AbstractRepositoryQuery query = new BugzillaRepositoryQuery("repositoryUrl", "queryUrl", "label", "1", manager - .getTaskList()); - manager.getTaskList().addQuery(query); - - AbstractRepositoryQuery readQuery = manager.getTaskList().getQueries().iterator().next(); - assertEquals(query, readQuery); - - manager.getTaskList().deleteQuery(query); - assertEquals(0, manager.getTaskList().getQueries().size()); - } - - public void testDeleteQueryAfterRename() { - AbstractRepositoryQuery query = new BugzillaRepositoryQuery("repositoryUrl", "queryUrl", "label", "1", manager - .getTaskList()); - manager.getTaskList().addQuery(query); - - AbstractRepositoryQuery readQuery = manager.getTaskList().getQueries().iterator().next(); - assertEquals(query, readQuery); - manager.getTaskList().renameContainer(query, "newName"); - manager.getTaskList().deleteQuery(query); - assertEquals(0, manager.getTaskList().getQueries().size()); - } - - public void testCreateQueryWithSameName() { - AbstractRepositoryQuery query = new BugzillaRepositoryQuery("repositoryUrl", "queryUrl", "label", "1", manager - .getTaskList()); - manager.getTaskList().addQuery(query); - assertEquals(1, manager.getTaskList().getQueries().size()); - AbstractRepositoryQuery readQuery = manager.getTaskList().getQueries().iterator().next(); - assertEquals(query, readQuery); - - manager.getTaskList().addQuery( - new BugzillaRepositoryQuery("repositoryUrl", "queryUrl", "label", "1", manager.getTaskList())); - assertEquals(1, manager.getTaskList().getQueries().size()); - } -} diff --git a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaTaskTest.java b/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaTaskTest.java deleted file mode 100644 index a7b95ea9c..000000000 --- a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaTaskTest.java +++ /dev/null @@ -1,78 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.bugzilla.tests; - -import java.util.Date; - -import junit.framework.TestCase; - -import org.eclipse.mylar.internal.bugzilla.core.BugzillaAttributeFactory; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaOfflineTaskHandler; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaReportElement; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaTask; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants; -import org.eclipse.mylar.tasks.core.RepositoryTaskAttribute; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.mylar.tasks.core.TaskComment; -import org.eclipse.mylar.tasks.core.TaskList; - -/** - * @author Mik Kersten - */ -public class BugzillaTaskTest extends TestCase { - - private BugzillaAttributeFactory attributeFactory = new BugzillaAttributeFactory(); - - private BugzillaOfflineTaskHandler offlineHandler; - - @Override - protected void setUp() throws Exception { - super.setUp(); - offlineHandler = new BugzillaOfflineTaskHandler(new TaskList()); - } - - @Override - protected void tearDown() throws Exception { - super.tearDown(); - } - - public void testCompletionDate() throws Exception { - BugzillaTask task = new BugzillaTask("bug-1", "description", true); - RepositoryTaskData report = new RepositoryTaskData(new BugzillaAttributeFactory(), - BugzillaCorePlugin.REPOSITORY_KIND, IBugzillaConstants.ECLIPSE_BUGZILLA_URL, "1"); - task.setTaskData(report); - assertNull(task.getCompletionDate()); - - Date now = new Date(); - String nowTimeStamp = BugzillaOfflineTaskHandler.comment_creation_ts_format.format(now); - - TaskComment taskComment = new TaskComment(new BugzillaAttributeFactory(), report, 1); - RepositoryTaskAttribute attribute = attributeFactory.createAttribute(BugzillaReportElement.BUG_WHEN - .getKeyString()); - attribute.setValue(nowTimeStamp); - taskComment.addAttribute(BugzillaReportElement.BUG_WHEN.getKeyString(), attribute); - report.addComment(taskComment); - assertNull(task.getCompletionDate()); - - RepositoryTaskAttribute resolvedAttribute = attributeFactory.createAttribute(BugzillaReportElement.BUG_STATUS - .getKeyString()); - resolvedAttribute.setValue(IBugzillaConstants.VALUE_STATUS_RESOLVED); - report.addAttribute(BugzillaReportElement.BUG_STATUS.getKeyString(), resolvedAttribute); - assertNotNull(task.getCompletionDate()); - assertEquals(offlineHandler - .getDateForAttributeType(BugzillaReportElement.BUG_WHEN.getKeyString(), nowTimeStamp), task - .getCompletionDate()); - - } - -} diff --git a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaTestUtil.java b/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaTestUtil.java deleted file mode 100644 index da7299f1c..000000000 --- a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/BugzillaTestUtil.java +++ /dev/null @@ -1,88 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.bugzilla.tests; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.URL; -import java.util.Date; - -import org.eclipse.core.runtime.FileLocator; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaAttributeFactory; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaOfflineTaskHandler; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaReportElement; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaTask; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants; -import org.eclipse.mylar.tasks.core.TaskComment; -import org.eclipse.mylar.tasks.core.RepositoryTaskAttribute; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.mylar.tasks.tests.MylarTasksTestsPlugin; - -/** - * @author Mik Kersten - */ -public class BugzillaTestUtil { - - private static BugzillaAttributeFactory attributeFactory = new BugzillaAttributeFactory(); - - public static File getLocalFile(String path) { - try { - URL installURL = MylarTasksTestsPlugin.getDefault().getBundle().getEntry(path); - URL localURL = FileLocator.toFileURL(installURL); - return new File(localURL.getFile()); - } catch (IOException e) { - return null; - } - } - - /** - * Adaptred from Java Developers' almanac - */ - public static void copy(File source, File dest) throws IOException { - InputStream in = new FileInputStream(source); - OutputStream out = new FileOutputStream(dest); - byte[] buf = new byte[1024]; - int len; - while ((len = in.read(buf)) > 0) { - out.write(buf, 0, len); - } - in.close(); - out.close(); - } - - public static void setBugTaskCompleted(BugzillaTask bugzillaTask, boolean completed) { - RepositoryTaskData report = new RepositoryTaskData(new BugzillaAttributeFactory(), - BugzillaCorePlugin.REPOSITORY_KIND, IBugzillaConstants.ECLIPSE_BUGZILLA_URL, "1"); - bugzillaTask.setTaskData(report); - RepositoryTaskAttribute resolvedAttribute = attributeFactory.createAttribute(BugzillaReportElement.BUG_STATUS - .getKeyString()); - if (completed) { - resolvedAttribute.setValue(IBugzillaConstants.VALUE_STATUS_RESOLVED); - TaskComment taskComment = new TaskComment(new BugzillaAttributeFactory(), report, 1); - RepositoryTaskAttribute attribute = attributeFactory.createAttribute(BugzillaReportElement.BUG_WHEN - .getKeyString()); - attribute.setValue(BugzillaOfflineTaskHandler.comment_creation_ts_format.format(new Date())); - taskComment.addAttribute(BugzillaReportElement.BUG_WHEN.getKeyString(), attribute); - report.addComment(taskComment); - } else { - resolvedAttribute.setValue(RepositoryTaskData.VAL_STATUS_NEW); - } - - report.addAttribute(BugzillaReportElement.BUG_STATUS.getKeyString(), resolvedAttribute); - } - -} diff --git a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/DuplicateDetetionTest.java b/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/DuplicateDetetionTest.java deleted file mode 100644 index d6b064ace..000000000 --- a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/DuplicateDetetionTest.java +++ /dev/null @@ -1,254 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.bugzilla.tests; - -import junit.framework.TestCase; - -import org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants; -import org.eclipse.mylar.internal.bugzilla.core.NewBugzillaReport; -import org.eclipse.mylar.internal.bugzilla.ui.BugzillaUiPlugin; -import org.eclipse.mylar.internal.bugzilla.ui.editor.NewBugEditor; -import org.eclipse.mylar.internal.bugzilla.ui.editor.NewBugEditorInput; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.internal.tasks.ui.editors.MylarTaskEditor; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.PlatformUI; - -/** - * @author Jeff Pound - */ -public class DuplicateDetetionTest extends TestCase { - - private TaskRepository repository; - - @Override - protected void setUp() throws Exception { - super.setUp(); - repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, IBugzillaConstants.TEST_BUGZILLA_222_URL); - - } - - public void testDuplicateDetection() throws Exception { - - String stackTrace = "java.lang.NullPointerException\nat jeff.testing.stack.trace.functionality(jeff.java:481)"; - - NewBugzillaReport model = new NewBugzillaReport(repository.getUrl(), TasksUiPlugin.getDefault() - .getOfflineReportsFile().getNextOfflineBugId()); - model.setNewComment(stackTrace); - model.setHasLocalChanges(true); - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - NewBugEditorInput input = new NewBugEditorInput(repository, model); - TaskUiUtil.openEditor(input, BugzillaUiPlugin.NEW_BUG_EDITOR_ID, page); - - MylarTaskEditor taskEditor = (MylarTaskEditor) page.getActiveEditor(); - NewBugEditor editor = (NewBugEditor) taskEditor.getActivePageInstance(); - assertTrue(editor.searchForDuplicates()); - - editor.markDirty(false); - editor.close(); - } - - public void testNoStackTrace() throws Exception { - String fakeStackTrace = "this is not really a stacktrace"; - NewBugzillaReport model = new NewBugzillaReport(repository.getUrl(), TasksUiPlugin.getDefault() - .getOfflineReportsFile().getNextOfflineBugId()); - model.setNewComment(fakeStackTrace); - model.setHasLocalChanges(true); - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - NewBugEditorInput input = new NewBugEditorInput(repository, model); - TaskUiUtil.openEditor(input, BugzillaUiPlugin.NEW_BUG_EDITOR_ID, page); - - MylarTaskEditor taskEditor = (MylarTaskEditor) page.getActiveEditor(); - NewBugEditor editor = (NewBugEditor) taskEditor.getActivePageInstance(); - assertNull(editor.getStackTraceFromDescription()); - - editor.markDirty(false); - editor.close(); - } - - public void testStackTraceWithAppendedText() throws Exception { - - String stackTrace = "java.lang.NullPointerException\nat jeff.testing.stack.trace.functionality(jeff.java:481)"; - String extraText = "\nExtra text that isnt' part of the stack trace java:"; - - NewBugzillaReport model = new NewBugzillaReport(repository.getUrl(), TasksUiPlugin.getDefault() - .getOfflineReportsFile().getNextOfflineBugId()); - model.setNewComment(extraText + "\n" + stackTrace + "\n"); - model.setHasLocalChanges(true); - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - NewBugEditorInput input = new NewBugEditorInput(repository, model); - TaskUiUtil.openEditor(input, BugzillaUiPlugin.NEW_BUG_EDITOR_ID, page); - - MylarTaskEditor taskEditor = (MylarTaskEditor) page.getActiveEditor(); - NewBugEditor editor = (NewBugEditor) taskEditor.getActivePageInstance(); - assertEquals(stackTrace, editor.getStackTraceFromDescription().trim()); - - editor.markDirty(false); - editor.close(); - } - - public void testStackTraceMisaligned() throws Exception { - - String stackTrace = "java.lang.IllegalStateException: zip file closed\n" + - " at java.util.zip.ZipFile.ensureOpen (ZipFile.java:518)\n" + - "at java.util.zip.ZipFile.getEntry (ZipFile.java:251)\n" + - " at java.util.jar.JarFile.getEntry(JarFile.java:200)\n" + - "at sun.net.www.protocol.jar.URLJarFile.getEntry\n" + - " (URLJarFile.java:90)\n" + - "at sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:112)\n" + - "at sun.net.www.protocol.jar.JarURLConnection.getInputStream\n" + - "(JarURLConnection.java:124)\n" + - "at org.eclipse.jdt.internal.core.JavaElement\n.getURLContents(JavaElement.java:734)"; - - NewBugzillaReport model = new NewBugzillaReport(repository.getUrl(), TasksUiPlugin.getDefault() - .getOfflineReportsFile().getNextOfflineBugId()); - model.setNewComment(stackTrace); - model.setHasLocalChanges(true); - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - NewBugEditorInput input = new NewBugEditorInput(repository, model); - TaskUiUtil.openEditor(input, BugzillaUiPlugin.NEW_BUG_EDITOR_ID, page); - - MylarTaskEditor taskEditor = (MylarTaskEditor) page.getActiveEditor(); - NewBugEditor editor = (NewBugEditor) taskEditor.getActivePageInstance(); - assertEquals(stackTrace, editor.getStackTraceFromDescription().trim()); - - editor.markDirty(false); - editor.close(); - } - - public void testStackTraceSUN() throws Exception { - - // SUN, IBM (no space before brackets, one set of brackets) - String stackTrace = "java.lang.IllegalStateException: zip file closed\n" + - " at java.util.zip.ZipFile.ensureOpen(ZipFile.java:518)\n" + - " at java.util.zip.ZipFile.getEntry(ZipFile.java:251)\n" + - " at java.util.jar.JarFile.getEntry(JarFile.java:200)\n" + - " at sun.net.www.protocol.jar.URLJarFile.getEntry(URLJarFile.java:90)\n" + - " at sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:112)\n" + - " at sun.net.www.protocol.jar.JarURLConnection.getInputStream(JarURLConnection.java:124)\n" + - " at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:734)"; - - NewBugzillaReport model = new NewBugzillaReport(repository.getUrl(), TasksUiPlugin.getDefault() - .getOfflineReportsFile().getNextOfflineBugId()); - model.setNewComment(stackTrace); - model.setHasLocalChanges(true); - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - NewBugEditorInput input = new NewBugEditorInput(repository, model); - TaskUiUtil.openEditor(input, BugzillaUiPlugin.NEW_BUG_EDITOR_ID, page); - - MylarTaskEditor taskEditor = (MylarTaskEditor) page.getActiveEditor(); - NewBugEditor editor = (NewBugEditor) taskEditor.getActivePageInstance(); - assertEquals(stackTrace, editor.getStackTraceFromDescription().trim()); - - editor.markDirty(false); - editor.close(); - } - - public void testStackTraceGCJ() throws Exception { - - // gcj/gij (path and lib names in additional brackets) - String stackTrace = "java.lang.Error: Something bad happened\n" + - " at testcase.main(java.lang.String[]) (Unknown Source)\n" + - " at gnu.java.lang.MainThread.call_main() (/usr/lib/libgcj.so.6.0.0)\n" + - " at gnu.java.lang.MainThread.run() (/usr/lib/libgcj.so.6.0.0)"; - - NewBugzillaReport model = new NewBugzillaReport(repository.getUrl(), TasksUiPlugin.getDefault() - .getOfflineReportsFile().getNextOfflineBugId()); - model.setNewComment(stackTrace); - model.setHasLocalChanges(true); - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - NewBugEditorInput input = new NewBugEditorInput(repository, model); - TaskUiUtil.openEditor(input, BugzillaUiPlugin.NEW_BUG_EDITOR_ID, page); - - MylarTaskEditor taskEditor = (MylarTaskEditor) page.getActiveEditor(); - NewBugEditor editor = (NewBugEditor) taskEditor.getActivePageInstance(); - assertEquals(stackTrace, editor.getStackTraceFromDescription().trim()); - - editor.markDirty(false); - editor.close(); - } - - public void testStackTraceNoLineNums() throws Exception { - - // ikvm (no line numbers) - String stackTrace = "java.lang.Error: Something bad happened\n" + - " at testcase.main (testcase.java)\n" + - " at java.lang.reflect.Method.Invoke (Method.java)"; - - NewBugzillaReport model = new NewBugzillaReport(repository.getUrl(), TasksUiPlugin.getDefault() - .getOfflineReportsFile().getNextOfflineBugId()); - model.setNewComment(stackTrace); - model.setHasLocalChanges(true); - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - NewBugEditorInput input = new NewBugEditorInput(repository, model); - TaskUiUtil.openEditor(input, BugzillaUiPlugin.NEW_BUG_EDITOR_ID, page); - - MylarTaskEditor taskEditor = (MylarTaskEditor) page.getActiveEditor(); - NewBugEditor editor = (NewBugEditor) taskEditor.getActivePageInstance(); - assertEquals(stackTrace, editor.getStackTraceFromDescription().trim()); - - editor.markDirty(false); - editor.close(); - } - - public void testStackTraceJRockit() throws Exception { - - // jrockit (slash delimiters) - String stackTrace = "java.lang.Error: Something bad happened\n" + - " at java/io/BufferedReader.readLine(BufferedReader.java:331)\n" + - " at java/io/BufferedReader.readLine(BufferedReader.java:362)\n" + - " at java/util/Properties.load(Properties.java:192)\n" + - " at java/util/logging/LogManager.readConfiguration(L:555)"; - - NewBugzillaReport model = new NewBugzillaReport(repository.getUrl(), TasksUiPlugin.getDefault() - .getOfflineReportsFile().getNextOfflineBugId()); - model.setNewComment(stackTrace); - model.setHasLocalChanges(true); - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - NewBugEditorInput input = new NewBugEditorInput(repository, model); - TaskUiUtil.openEditor(input, BugzillaUiPlugin.NEW_BUG_EDITOR_ID, page); - - MylarTaskEditor taskEditor = (MylarTaskEditor) page.getActiveEditor(); - NewBugEditor editor = (NewBugEditor) taskEditor.getActivePageInstance(); - assertEquals(stackTrace, editor.getStackTraceFromDescription().trim()); - - editor.markDirty(false); - editor.close(); - } - - public void testStackTraceOther() throws Exception { - - // jamvm, sablevm, kaffe, cacao (space before brackets, one set of brackets) - String stackTrace = "java.lang.Error: Something bad happened\n" + - " at testcase.main (testcase.java:3)\n" + - " at java.lang.VirtualMachine.invokeMain (VirtualMachine.java)\n" + - " at java.lang.VirtualMachine.main (VirtualMachine.java:108)"; - - NewBugzillaReport model = new NewBugzillaReport(repository.getUrl(), TasksUiPlugin.getDefault() - .getOfflineReportsFile().getNextOfflineBugId()); - model.setNewComment(stackTrace); - model.setHasLocalChanges(true); - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - NewBugEditorInput input = new NewBugEditorInput(repository, model); - TaskUiUtil.openEditor(input, BugzillaUiPlugin.NEW_BUG_EDITOR_ID, page); - - MylarTaskEditor taskEditor = (MylarTaskEditor) page.getActiveEditor(); - NewBugEditor editor = (NewBugEditor) taskEditor.getActivePageInstance(); - assertEquals(stackTrace, editor.getStackTraceFromDescription().trim()); - - editor.markDirty(false); - editor.close(); - } -} diff --git a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/EncodingTest.java b/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/EncodingTest.java deleted file mode 100644 index 3ad21d456..000000000 --- a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/EncodingTest.java +++ /dev/null @@ -1,44 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.bugzilla.tests; - -import java.io.IOException; -import java.text.ParseException; - -import javax.security.auth.login.LoginException; - -import junit.framework.TestCase; - -import org.eclipse.mylar.internal.bugzilla.core.BugzillaServerFacade; - -/** - * @author Mik Kersten - */ -public class EncodingTest extends TestCase { - - public void testEncodingSetting() throws LoginException, IOException, ParseException { - - String charset = BugzillaServerFacade.getCharsetFromString("text/html; charset=UTF-8"); - assertEquals("UTF-8", charset); - - charset = BugzillaServerFacade.getCharsetFromString("text/html"); - assertEquals(null, charset); - - charset = BugzillaServerFacade - .getCharsetFromString("<<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-2\">>"); - assertEquals("iso-8859-2", charset); - - charset = BugzillaServerFacade.getCharsetFromString("<<meta http-equiv=\"Content-Type\" content=\"text/html\">>"); - assertEquals(null, charset); - } - -} diff --git a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/NewBugWizardTest.java b/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/NewBugWizardTest.java deleted file mode 100644 index 102ef7e5d..000000000 --- a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/NewBugWizardTest.java +++ /dev/null @@ -1,73 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.bugzilla.tests; - -import junit.framework.TestCase; - -import org.eclipse.core.runtime.Platform; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaReportElement; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaServerFacade; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants; -import org.eclipse.mylar.internal.bugzilla.core.NewBugzillaReport; -import org.eclipse.mylar.internal.bugzilla.ui.wizard.BugzillaProductPage; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.ui.PlatformUI; - -/** - * @author Mik Kersten - * @author Ian Bull - */ -public class NewBugWizardTest extends TestCase { - - public void testPlatformOptions() throws Exception { - - NewBugzillaReport newReport = new NewBugzillaReport(IBugzillaConstants.TEST_BUGZILLA_220_URL, "1"); - TaskRepository repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, - IBugzillaConstants.TEST_BUGZILLA_220_URL); - BugzillaServerFacade.setupNewBugAttributes(repository.getUrl(), null, repository.getUserName(), repository.getPassword(), newReport, null); - BugzillaProductPage page = new BugzillaProductPage(PlatformUI.getWorkbench(), null, repository, null); - page.setPlatformOptions(newReport); - - String os = Platform.getOS(); - if (os.equals("win32")) - assertEquals("Windows", newReport.getAttribute(BugzillaReportElement.OP_SYS.getKeyString()).getValue()); - else if (os.equals("solaris")) - assertEquals("Solaris", newReport.getAttribute(BugzillaReportElement.OP_SYS.getKeyString()).getValue()); - else if (os.equals("qnx")) - assertEquals("QNX-Photon", newReport.getAttribute(BugzillaReportElement.OP_SYS.getKeyString()).getValue()); - else if (os.equals("macosx")) - assertEquals("Mac OS", newReport.getAttribute(BugzillaReportElement.OP_SYS.getKeyString()).getValue()); - else if (os.equals("linux")) - assertEquals("Linux", newReport.getAttribute(BugzillaReportElement.OP_SYS.getKeyString()).getValue()); - else if (os.equals("hpux")) - assertEquals("HP-UX", newReport.getAttribute(BugzillaReportElement.OP_SYS.getKeyString()).getValue()); - else if (os.equals("aix")) - assertEquals("AIX", newReport.getAttribute(BugzillaReportElement.OP_SYS.getKeyString()).getValue()); - - String platform = Platform.getOSArch(); - if (platform.equals("x86")) - assertEquals("PC", newReport.getAttribute(BugzillaReportElement.REP_PLATFORM.getKeyString()).getValue()); - else if (platform.equals("x86_64")) - assertEquals("PC", newReport.getAttribute(BugzillaReportElement.REP_PLATFORM.getKeyString()).getValue()); - else if (platform.equals("ia64")) - assertEquals("PC", newReport.getAttribute(BugzillaReportElement.REP_PLATFORM.getKeyString()).getValue()); - else if (platform.equals("ia64_32")) - assertEquals("PC", newReport.getAttribute(BugzillaReportElement.REP_PLATFORM.getKeyString()).getValue()); - else if (platform.equals("sparc")) - assertEquals("Sun", newReport.getAttribute(BugzillaReportElement.REP_PLATFORM.getKeyString()).getValue()); - else if (platform.equals("ppc")) - assertEquals("Power", newReport.getAttribute(BugzillaReportElement.REP_PLATFORM.getKeyString()).getValue()); - - } - -} diff --git a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/RepositoryEditorWizardTest.java b/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/RepositoryEditorWizardTest.java deleted file mode 100644 index 8ec722fa0..000000000 --- a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/RepositoryEditorWizardTest.java +++ /dev/null @@ -1,156 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.bugzilla.tests; - -import java.net.UnknownHostException; - -import javax.security.auth.login.LoginException; - -import junit.framework.TestCase; - -import org.eclipse.jface.wizard.WizardDialog; -import org.eclipse.mylar.context.tests.support.MylarTestUtils; -import org.eclipse.mylar.context.tests.support.MylarTestUtils.Credentials; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaServerFacade; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants; -import org.eclipse.mylar.internal.bugzilla.ui.tasklist.BugzillaRepositorySettingsPage; -import org.eclipse.mylar.internal.tasks.ui.wizards.EditRepositoryWizard; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.TaskRepositoryManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.PlatformUI; - -/** - * @author Rob Elves - */ -public class RepositoryEditorWizardTest extends TestCase { - - TaskRepositoryManager manager; - - TaskRepository repository; - - @Override - protected void setUp() throws Exception { - super.setUp(); - manager = TasksUiPlugin.getRepositoryManager(); - manager.clearRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, IBugzillaConstants.TEST_BUGZILLA_222_URL); - Credentials credentials = MylarTestUtils.readCredentials(); - repository.setAuthenticationCredentials(credentials.username, credentials.password); - - TasksUiPlugin.getRepositoryManager().addRepository(repository, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - } - - public void testValidationInvalidPassword() throws Exception { - - EditRepositoryWizard wizard = new EditRepositoryWizard(repository); - WizardDialog dialog = new WizardDialog(PlatformUI.getWorkbench().getDisplay().getActiveShell(), wizard); - dialog.create(); - BugzillaRepositorySettingsPage page = (BugzillaRepositorySettingsPage) wizard.getSettingsPage(); - BugzillaServerFacade.validateCredentials(null, page.getServerUrl(), page.getUserName(), page.getPassword()); - page.setPassword("bogus"); - try { - BugzillaServerFacade.validateCredentials(null, page.getServerUrl(), page.getUserName(), page.getPassword()); - } catch (LoginException e) { - return; - } - fail("LoginException didn't occur!"); - } - - public void testValidationInvalidUserid() throws Exception { - EditRepositoryWizard wizard = new EditRepositoryWizard(repository); - WizardDialog dialog = new WizardDialog(PlatformUI.getWorkbench().getDisplay().getActiveShell(), wizard); - dialog.create(); - BugzillaRepositorySettingsPage page = (BugzillaRepositorySettingsPage) wizard.getSettingsPage(); - BugzillaServerFacade.validateCredentials(null, page.getServerUrl(), page.getUserName(), page.getPassword()); - page.setUserId("bogus"); - try { - BugzillaServerFacade.validateCredentials(null, page.getServerUrl(), page.getUserName(), page.getPassword()); - } catch (LoginException e) { - return; - } - fail("LoginException didn't occur!"); - } - - public void testValidationInvalidUrl() throws Exception { - EditRepositoryWizard wizard = new EditRepositoryWizard(repository); - WizardDialog dialog = new WizardDialog(PlatformUI.getWorkbench().getDisplay().getActiveShell(), wizard); - dialog.create(); - BugzillaRepositorySettingsPage page = (BugzillaRepositorySettingsPage) wizard.getSettingsPage(); - BugzillaServerFacade.validateCredentials(null, page.getServerUrl(), page.getUserName(), page.getPassword()); - page.setUrl("http://invalid"); - try { - BugzillaServerFacade.validateCredentials(null, page.getServerUrl(), page.getUserName(), page.getPassword()); - } catch (UnknownHostException e) { - return; - } - fail("UnknownHostException didn't occur!"); - } - - public void testPersistChangeOfUrl() throws Exception { - assertEquals(1, manager.getAllRepositories().size()); - String tempUid = repository.getUserName(); - String tempPass = repository.getPassword(); - EditRepositoryWizard wizard = new EditRepositoryWizard(repository); - WizardDialog dialog = new WizardDialog(PlatformUI.getWorkbench().getDisplay().getActiveShell(), wizard); - dialog.create(); - BugzillaRepositorySettingsPage page = (BugzillaRepositorySettingsPage) wizard.getSettingsPage(); - BugzillaServerFacade.validateCredentials(null, page.getServerUrl(), page.getUserName(), page.getPassword()); - page.setUrl(IBugzillaConstants.TEST_BUGZILLA_218_URL); - wizard.performFinish(); - assertEquals(1, manager.getAllRepositories().size()); - TaskRepository repositoryTest = manager.getRepository(BugzillaCorePlugin.REPOSITORY_KIND, - IBugzillaConstants.TEST_BUGZILLA_218_URL); - assertNotNull(repositoryTest); - assertEquals(tempUid, repositoryTest.getUserName()); - assertEquals(tempPass, repositoryTest.getPassword()); - } - - public void testPersistChangeUserId() throws Exception { - assertEquals(1, manager.getAllRepositories().size()); - EditRepositoryWizard wizard = new EditRepositoryWizard(repository); - WizardDialog dialog = new WizardDialog(PlatformUI.getWorkbench().getDisplay().getActiveShell(), wizard); - dialog.create(); - BugzillaRepositorySettingsPage page = (BugzillaRepositorySettingsPage) wizard.getSettingsPage(); - BugzillaServerFacade.validateCredentials(null, page.getServerUrl(), page.getUserName(), page.getPassword()); - page.setUserId("bogus"); - wizard.performFinish(); - assertEquals(1, manager.getAllRepositories().size()); - TaskRepository repositoryTest = manager.getRepository(BugzillaCorePlugin.REPOSITORY_KIND, - IBugzillaConstants.TEST_BUGZILLA_222_URL); - assertNotNull(repositoryTest); - wizard = new EditRepositoryWizard(repositoryTest); - dialog = new WizardDialog(PlatformUI.getWorkbench().getDisplay().getActiveShell(), wizard); - dialog.create(); - page = (BugzillaRepositorySettingsPage) wizard.getSettingsPage(); - try { - BugzillaServerFacade.validateCredentials(null, page.getServerUrl(), page.getUserName(), page.getPassword()); - } catch (LoginException e) { - return; - } - fail("LoginException didn't occur!"); - } - - public void testAutoVersion() throws Exception { - repository.setVersion(BugzillaRepositorySettingsPage.LABEL_AUTOMATIC_VERSION); - EditRepositoryWizard wizard = new EditRepositoryWizard(repository); - WizardDialog dialog = new WizardDialog(PlatformUI.getWorkbench().getDisplay().getActiveShell(), wizard); - dialog.create(); - BugzillaRepositorySettingsPage page = (BugzillaRepositorySettingsPage) wizard.getSettingsPage(); - page.setTesting(true); - assertEquals(BugzillaRepositorySettingsPage.LABEL_AUTOMATIC_VERSION, page.getVersion()); - page.validateSettings(); - assertEquals("2.22", page.getVersion()); - } - -} diff --git a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/RepositoryReportFactoryTest.java b/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/RepositoryReportFactoryTest.java deleted file mode 100644 index 2c7e837ba..000000000 --- a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/RepositoryReportFactoryTest.java +++ /dev/null @@ -1,515 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.bugzilla.tests; - -import java.io.IOException; - -import javax.security.auth.login.LoginException; - -import junit.framework.TestCase; - -import org.eclipse.mylar.context.tests.support.MylarTestUtils; -import org.eclipse.mylar.context.tests.support.MylarTestUtils.Credentials; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaAttributeFactory; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaReportElement; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaReportSubmitForm; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaServerFacade; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants; -import org.eclipse.mylar.internal.bugzilla.core.RepositoryReportFactory; -import org.eclipse.mylar.tasks.core.RepositoryTaskAttribute; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.mylar.tasks.core.TaskRepository; - -/** - * @author Rob Elves - * @author Mik Kersten - */ -public class RepositoryReportFactoryTest extends TestCase { - - RepositoryReportFactory factory = new RepositoryReportFactory(); - - BugzillaAttributeFactory attributeFactory = new BugzillaAttributeFactory(); - - private RepositoryTaskData init(String URL, int bugid) throws Exception { - TaskRepository repository = getRepository(BugzillaCorePlugin.REPOSITORY_KIND, URL); - - RepositoryTaskData report = new RepositoryTaskData(attributeFactory, BugzillaCorePlugin.REPOSITORY_KIND, - repository.getUrl(), "" + bugid); - BugzillaServerFacade.setupExistingBugAttributes(repository.getUrl(), report); - factory.populateReport(report, repository.getUrl(), null, repository.getUserName(), repository.getPassword(), - null); - - return report; - } - - private TaskRepository getRepository(String kind, String url) { - TaskRepository repository = new TaskRepository(kind, url); - Credentials credentials = MylarTestUtils.readCredentials(); - repository.setAuthenticationCredentials(credentials.username, credentials.password); - return repository; - } - - public void testBugNotFound222() throws Exception { - String bugid = "-1"; - String errorMessage = ""; - TaskRepository repository = getRepository(BugzillaCorePlugin.REPOSITORY_KIND, - IBugzillaConstants.TEST_BUGZILLA_222_URL); - try { - RepositoryTaskData report = new RepositoryTaskData(attributeFactory, repository.getKind(), repository - .getUrl(), bugid); - factory.populateReport(report, repository.getUrl(), null, repository.getUserName(), repository - .getPassword(), null); - } catch (LoginException e) { - // - } catch (IOException e) { - errorMessage = e.getMessage(); - } - assertEquals(IBugzillaConstants.ERROR_INVALID_BUG_ID, errorMessage); - } - - public void testInvalidCredentials222() throws Exception { - String bugid = "1"; - String errorMessage = ""; - TaskRepository repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, - IBugzillaConstants.TEST_BUGZILLA_222_URL); - repository.setAuthenticationCredentials("invalid", "invalid"); - try { - RepositoryTaskData report = new RepositoryTaskData(attributeFactory, BugzillaCorePlugin.REPOSITORY_KIND, - repository.getUrl(), bugid); - factory.populateReport(report, repository.getUrl(), null, repository.getUserName(), repository - .getPassword(), null); - } catch (LoginException e) { - errorMessage = e.getMessage(); - } catch (IOException e) { - errorMessage = e.getMessage(); - } - assertEquals(IBugzillaConstants.ERROR_INVALID_USERNAME_OR_PASSWORD, errorMessage); - repository.flushAuthenticationCredentials(); - } - - public void testReadingReport() throws Exception { - String bugid = "2"; - TaskRepository repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, - IBugzillaConstants.TEST_BUGZILLA_222_URL); - - RepositoryTaskData report = new RepositoryTaskData(attributeFactory, BugzillaCorePlugin.REPOSITORY_KIND, - repository.getUrl(), bugid); - BugzillaServerFacade.setupExistingBugAttributes(repository.getUrl(), report); - factory.populateReport(report, repository.getUrl(), null, repository.getUserName(), repository.getPassword(), - null); - - assertNotNull(report); - assertEquals("search-match-test 1", report.getAttribute(BugzillaReportElement.SHORT_DESC.getKeyString()) - .getValue()); - assertEquals("TestProduct", report.getAttribute(BugzillaReportElement.PRODUCT.getKeyString()).getValue()); - assertEquals("PC", report.getAttribute(BugzillaReportElement.REP_PLATFORM.getKeyString()).getValue()); - assertEquals("Windows", report.getAttribute(BugzillaReportElement.OP_SYS.getKeyString()).getValue()); - // first comment (#0) is the description so this value is always 1 - // greater - // than what is shown on the report ui - assertEquals(3, report.getComments().size()); - assertEquals("search-match-test 1", report.getComments().get(0).getAttribute( - BugzillaReportElement.THETEXT.getKeyString()).getValue()); - // assertEquals(15, report.getAttachments().size()); - // assertEquals("1", - // report.getAttachments().get(0).getAttribute(BugzillaReportElement.ATTACHID).getValue()); - // assertEquals("2006-03-10 14:11", - // report.getAttachments().get(0).getAttribute(BugzillaReportElement.DATE) - // .getValue()); - // assertEquals("Testing upload", - // report.getAttachments().get(0).getAttribute(BugzillaReportElement.DESC) - // .getValue()); - // assertEquals("patch130217.txt", - // report.getAttachments().get(0).getAttribute(BugzillaReportElement.FILENAME) - // .getValue()); - // assertEquals("text/plain", - // report.getAttachments().get(0).getAttribute(BugzillaReportElement.TYPE).getValue()); - } - - public void testReadingReport222() throws Exception { - int bugid = 2; - // TaskRepository repository = new - // TaskRepository(BugzillaPlugin.REPOSITORY_KIND, - // IBugzillaConstants.TEST_BUGZILLA_222_URL); - // - // RepositoryTaskData report = new RepositoryTaskData(attributeFactory, - // BugzillaPlugin.REPOSITORY_KIND, repository.getUrl(), bugid); - // BugzillaRepositoryUtil.setupExistingBugAttributes(repository.getUrl(), - // report); - // factory.populateReport(report, repository.getUrl(), null, - // repository.getUserName(), repository.getPassword(), null); - RepositoryTaskData report = init(IBugzillaConstants.TEST_BUGZILLA_222_URL, bugid); - - assertNotNull(report); - assertEquals("search-match-test 1", report.getAttribute(BugzillaReportElement.SHORT_DESC.getKeyString()) - .getValue()); - assertEquals("search-match-test 1", report.getSummary()); - assertEquals("search-match-test 1", report.getDescription()); - assertEquals("TestProduct", report.getAttribute(BugzillaReportElement.PRODUCT.getKeyString()).getValue()); - assertEquals("TestProduct", report.getProduct()); - assertEquals("TestComponent", report.getAttribute(BugzillaReportElement.COMPONENT.getKeyString()).getValue()); - assertEquals("PC", report.getAttribute(BugzillaReportElement.REP_PLATFORM.getKeyString()).getValue()); - assertEquals("Windows", report.getAttribute(BugzillaReportElement.OP_SYS.getKeyString()).getValue()); - assertEquals("other", report.getAttribute(BugzillaReportElement.VERSION.getKeyString()).getValue()); - assertEquals("P1", report.getAttribute(BugzillaReportElement.PRIORITY.getKeyString()).getValue()); - assertEquals("normal", report.getAttribute(BugzillaReportElement.BUG_SEVERITY.getKeyString()).getValue()); - assertEquals("" + bugid, report.getAttribute(BugzillaReportElement.BUG_ID.getKeyString()).getValue()); - assertEquals("NEW", report.getAttribute(BugzillaReportElement.BUG_STATUS.getKeyString()).getValue()); - assertEquals("2006-05-23 17:46", report.getAttribute(BugzillaReportElement.CREATION_TS.getKeyString()) - .getValue()); - assertEquals("2006-06-15 12:55:43", report.getAttribute(BugzillaReportElement.DELTA_TS.getKeyString()) - .getValue()); - assertEquals("---", report.getAttribute(BugzillaReportElement.TARGET_MILESTONE.getKeyString()).getValue()); - assertEquals("relves@cs.ubc.ca", report.getAttribute(BugzillaReportElement.REPORTER.getKeyString()).getValue()); - assertEquals("nhapke@cs.ubc.ca", report.getAttribute(BugzillaReportElement.ASSIGNED_TO.getKeyString()) - .getValue()); - assertEquals(3, report.getComments().size()); - assertEquals("relves@cs.ubc.ca", report.getComments().get(0).getAttribute( - BugzillaReportElement.WHO.getKeyString()).getValue()); - assertEquals("2006-05-23 17:46:24", report.getComments().get(0).getAttribute( - BugzillaReportElement.BUG_WHEN.getKeyString()).getValue()); - assertEquals("search-match-test 1", report.getComments().get(0).getAttribute( - BugzillaReportElement.THETEXT.getKeyString()).getValue()); - assertEquals(0, report.getAttachments().size()); - } - - public void testReadingReport2201() throws Exception { - String bugid = "1"; - TaskRepository repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, - IBugzillaConstants.TEST_BUGZILLA_2201_URL); - - RepositoryTaskData report = new RepositoryTaskData(attributeFactory, BugzillaCorePlugin.REPOSITORY_KIND, - repository.getUrl(), bugid); - BugzillaServerFacade.setupExistingBugAttributes(repository.getUrl(), report); - factory.populateReport(report, repository.getUrl(), null, repository.getUserName(), repository.getPassword(), - null); - - assertNotNull(report); - assertEquals("1", report.getAttribute(BugzillaReportElement.BUG_ID.getKeyString()).getValue()); - assertEquals("search-match-test 1", report.getAttribute(BugzillaReportElement.SHORT_DESC.getKeyString()) - .getValue()); - assertEquals("TestProduct", report.getAttribute(BugzillaReportElement.PRODUCT.getKeyString()).getValue()); - assertEquals("TestComponent", report.getAttribute(BugzillaReportElement.COMPONENT.getKeyString()).getValue()); - assertEquals("PC", report.getAttribute(BugzillaReportElement.REP_PLATFORM.getKeyString()).getValue()); - assertEquals("Windows", report.getAttribute(BugzillaReportElement.OP_SYS.getKeyString()).getValue()); - assertEquals("other", report.getAttribute(BugzillaReportElement.VERSION.getKeyString()).getValue()); - assertEquals("P2", report.getAttribute(BugzillaReportElement.PRIORITY.getKeyString()).getValue()); - assertEquals("normal", report.getAttribute(BugzillaReportElement.BUG_SEVERITY.getKeyString()).getValue()); - assertEquals("NEW", report.getAttribute(BugzillaReportElement.BUG_STATUS.getKeyString()).getValue()); - assertEquals("2006-03-02 18:13", report.getAttribute(BugzillaReportElement.CREATION_TS.getKeyString()) - .getValue()); - assertEquals("2006-05-03 13:06:11", report.getAttribute(BugzillaReportElement.DELTA_TS.getKeyString()) - .getValue()); - assertEquals("---", report.getAttribute(BugzillaReportElement.TARGET_MILESTONE.getKeyString()).getValue()); - RepositoryTaskAttribute attribute = report.getAttribute(BugzillaReportElement.BLOCKED.getKeyString()); - assertEquals("2, 9", attribute.getValue()); - attribute = report.getAttribute(BugzillaReportElement.CC.getKeyString()); - assertEquals(2, attribute.getValues().size()); - assertEquals("relves@cs.ubc.ca", attribute.getValues().get(0)); - assertEquals("relves@gmail.com", attribute.getValues().get(1)); - assertEquals("relves@cs.ubc.ca", report.getAttribute(BugzillaReportElement.REPORTER.getKeyString()).getValue()); - assertEquals("relves@cs.ubc.ca", report.getAttribute(BugzillaReportElement.ASSIGNED_TO.getKeyString()) - .getValue()); - assertEquals(1, report.getComments().size()); - assertEquals("relves@cs.ubc.ca", report.getComments().get(0).getAttribute( - BugzillaReportElement.WHO.getKeyString()).getValue()); - assertEquals("2006-03-02 18:13", report.getComments().get(0).getAttribute( - BugzillaReportElement.BUG_WHEN.getKeyString()).getValue()); - assertEquals("search-match-test 1", report.getComments().get(0).getAttribute( - BugzillaReportElement.THETEXT.getKeyString()).getValue()); - assertEquals(0, report.getAttachments().size()); - } - - // public void testReadingReport2201Eclipse() throws Exception { - // String bugid = "24448"; - // TaskRepository repository = new - // TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, - // IBugzillaConstants.ECLIPSE_BUGZILLA_URL); - // - // RepositoryTaskData report = new RepositoryTaskData(attributeFactory, - // BugzillaCorePlugin.REPOSITORY_KIND, repository - // .getUrl(), bugid); - // BugzillaServerFacade.setupExistingBugAttributes(repository.getUrl(), - // report); - // factory.populateReport(report, repository.getUrl(), null, - // repository.getUserName(), repository.getPassword(), - // null); - // - // assertNotNull(report); - // assertEquals("24448", - // report.getAttribute(BugzillaReportElement.BUG_ID.getKeyString()).getValue()); - // assertEquals("Ant causing Out of Memory", - // report.getAttribute(BugzillaReportElement.SHORT_DESC.getKeyString()) - // .getValue()); - // assertEquals("Platform", - // report.getAttribute(BugzillaReportElement.PRODUCT.getKeyString()).getValue()); - // assertEquals("Ant", - // report.getAttribute(BugzillaReportElement.COMPONENT.getKeyString()).getValue()); - // assertEquals("PC", - // report.getAttribute(BugzillaReportElement.REP_PLATFORM.getKeyString()).getValue()); - // assertEquals("other", - // report.getAttribute(BugzillaReportElement.OP_SYS.getKeyString()).getValue()); - // assertEquals("2.0", - // report.getAttribute(BugzillaReportElement.VERSION.getKeyString()).getValue()); - // assertEquals("P2", - // report.getAttribute(BugzillaReportElement.PRIORITY.getKeyString()).getValue()); - // assertEquals("normal", - // report.getAttribute(BugzillaReportElement.BUG_SEVERITY.getKeyString()).getValue()); - // assertEquals("RESOLVED", - // report.getAttribute(BugzillaReportElement.BUG_STATUS.getKeyString()).getValue()); - // assertEquals("WONTFIX", - // report.getAttribute(BugzillaReportElement.RESOLUTION.getKeyString()).getValue()); - // assertEquals("2002-10-07 09:32", - // report.getAttribute(BugzillaReportElement.CREATION_TS.getKeyString()) - // .getValue()); - // assertEquals("2006-02-03 12:03:57", - // report.getAttribute(BugzillaReportElement.DELTA_TS.getKeyString()) - // .getValue()); - // assertEquals("core, performance, ui", - // report.getAttribute(BugzillaReportElement.KEYWORDS.getKeyString()) - // .getValue()); - // // RepositoryTaskAttribute attribute = - // // report.getAttribute(BugzillaReportElement.CC); - // // assertEquals(30, attribute.getValues().size()); - // // assertEquals("relves@cs.ubc.ca", attribute.getValues().get(0)); - // // assertEquals("relves@gmail.com", attribute.getValues().get(1)); - // // assertEquals("relves@cs.ubc.ca", - // // report.getAttribute(BugzillaReportElement.REPORTER).getValue()); - // // assertEquals("relves@cs.ubc.ca", - // // report.getAttribute(BugzillaReportElement.ASSIGNED_TO).getValue()); - // // assertEquals(1, report.getComments().size()); - // // assertEquals("relves@cs.ubc.ca", - // // - // report.getComments().get(0).getAttribute(BugzillaReportElement.WHO).getValue()); - // // assertEquals("2006-03-02 18:13", - // // - // report.getComments().get(0).getAttribute(BugzillaReportElement.BUG_WHEN) - // // .getValue()); - // // assertEquals("search-match-test 1", - // // - // report.getComments().get(0).getAttribute(BugzillaReportElement.THETEXT) - // // .getValue()); - // // assertEquals(0, report.getAttachments().size()); - // } - - // public void testReadingReport220() throws Exception { - // String bugid = "1"; - // TaskRepository repository = new - // TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, - // IBugzillaConstants.TEST_BUGZILLA_220_URL); - // - // RepositoryTaskData report = new RepositoryTaskData(attributeFactory, - // BugzillaCorePlugin.REPOSITORY_KIND, - // repository.getUrl(), bugid); - // BugzillaServerFacade.setupExistingBugAttributes(repository.getUrl(), - // report); - // factory.populateReport(report, repository.getUrl(), null, - // repository.getUserName(), repository.getPassword(), - // null); - // - // assertNotNull(report); - // assertEquals("1", - // report.getAttribute(BugzillaReportElement.BUG_ID.getKeyString()).getValue()); - // assertEquals("search-match-test", - // report.getAttribute(BugzillaReportElement.SHORT_DESC.getKeyString()) - // .getValue()); - // assertEquals("TestProduct", - // report.getAttribute(BugzillaReportElement.PRODUCT.getKeyString()).getValue()); - // assertEquals("TestComponent", - // report.getAttribute(BugzillaReportElement.COMPONENT.getKeyString()).getValue()); - // assertEquals("PC", - // report.getAttribute(BugzillaReportElement.REP_PLATFORM.getKeyString()).getValue()); - // assertEquals("Windows", - // report.getAttribute(BugzillaReportElement.OP_SYS.getKeyString()).getValue()); - // assertEquals("other", - // report.getAttribute(BugzillaReportElement.VERSION.getKeyString()).getValue()); - // assertEquals("P2", - // report.getAttribute(BugzillaReportElement.PRIORITY.getKeyString()).getValue()); - // assertEquals("normal", - // report.getAttribute(BugzillaReportElement.BUG_SEVERITY.getKeyString()).getValue()); - // assertEquals("NEW", - // report.getAttribute(BugzillaReportElement.BUG_STATUS.getKeyString()).getValue()); - // assertEquals("2006-03-02 17:30", - // report.getAttribute(BugzillaReportElement.CREATION_TS.getKeyString()) - // .getValue()); - // assertEquals("2006-04-20 15:13:43", - // report.getAttribute(BugzillaReportElement.DELTA_TS.getKeyString()) - // .getValue()); - // assertEquals("---", - // report.getAttribute(BugzillaReportElement.TARGET_MILESTONE.getKeyString()).getValue()); - // assertEquals("relves@cs.ubc.ca", - // report.getAttribute(BugzillaReportElement.REPORTER.getKeyString()).getValue()); - // assertEquals("relves@cs.ubc.ca", - // report.getAttribute(BugzillaReportElement.ASSIGNED_TO.getKeyString()) - // .getValue()); - // assertEquals("relves@cs.ubc.ca", - // report.getAttribute(BugzillaReportElement.CC.getKeyString()).getValue()); - // assertEquals(3, report.getComments().size()); - // assertEquals("relves@cs.ubc.ca", - // report.getComments().get(0).getAttribute( - // BugzillaReportElement.WHO.getKeyString()).getValue()); - // assertEquals("2006-03-02 17:30", - // report.getComments().get(0).getAttribute( - // BugzillaReportElement.BUG_WHEN.getKeyString()).getValue()); - // assertEquals("search-match-test", - // report.getComments().get(0).getAttribute( - // BugzillaReportElement.THETEXT.getKeyString()).getValue()); - // assertEquals(0, report.getAttachments().size()); - // } - - public void testReadingReport218() throws Exception { - String bugid = "1"; - TaskRepository repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, - IBugzillaConstants.TEST_BUGZILLA_218_URL); - - RepositoryTaskData report = new RepositoryTaskData(attributeFactory, BugzillaCorePlugin.REPOSITORY_KIND, - repository.getUrl(), bugid); - BugzillaServerFacade.setupExistingBugAttributes(repository.getUrl(), report); - factory.populateReport(report, repository.getUrl(), null, repository.getUserName(), repository.getPassword(), - null); - - assertNotNull(report); - assertEquals("1", report.getAttribute(BugzillaReportElement.BUG_ID.getKeyString()).getValue()); - assertEquals("search-match-test 1", report.getAttribute(BugzillaReportElement.SHORT_DESC.getKeyString()) - .getValue()); - assertEquals("TestProduct", report.getAttribute(BugzillaReportElement.PRODUCT.getKeyString()).getValue()); - assertEquals("TestComponent", report.getAttribute(BugzillaReportElement.COMPONENT.getKeyString()).getValue()); - assertEquals("PC", report.getAttribute(BugzillaReportElement.REP_PLATFORM.getKeyString()).getValue()); - assertEquals("Windows XP", report.getAttribute(BugzillaReportElement.OP_SYS.getKeyString()).getValue()); - assertEquals("other", report.getAttribute(BugzillaReportElement.VERSION.getKeyString()).getValue()); - assertEquals("P2", report.getAttribute(BugzillaReportElement.PRIORITY.getKeyString()).getValue()); - assertEquals("normal", report.getAttribute(BugzillaReportElement.BUG_SEVERITY.getKeyString()).getValue()); - assertEquals("NEW", report.getAttribute(BugzillaReportElement.BUG_STATUS.getKeyString()).getValue()); - assertEquals("2006-03-02 18:09", report.getAttribute(BugzillaReportElement.CREATION_TS.getKeyString()) - .getValue()); - assertEquals("2006-05-05 17:45:24", report.getAttribute(BugzillaReportElement.DELTA_TS.getKeyString()) - .getValue()); - assertEquals("---", report.getAttribute(BugzillaReportElement.TARGET_MILESTONE.getKeyString()).getValue()); - assertEquals("relves@cs.ubc.ca", report.getAttribute(BugzillaReportElement.REPORTER.getKeyString()).getValue()); - assertEquals("relves@cs.ubc.ca", report.getAttribute(BugzillaReportElement.ASSIGNED_TO.getKeyString()) - .getValue()); - assertEquals(1, report.getComments().size()); - assertEquals("relves@cs.ubc.ca", report.getComments().get(0).getAttribute( - BugzillaReportElement.WHO.getKeyString()).getValue()); - assertEquals("2006-03-02 18:09", report.getComments().get(0).getAttribute( - BugzillaReportElement.BUG_WHEN.getKeyString()).getValue()); - assertEquals("search-match-test 1", report.getComments().get(0).getAttribute( - BugzillaReportElement.THETEXT.getKeyString()).getValue()); - assertEquals(0, report.getAttachments().size()); - } - - public void testTimeTracking222() throws Exception { - RepositoryTaskData report = init(IBugzillaConstants.TEST_BUGZILLA_222_URL, 11); - - assertEquals("7.50", report.getAttribute(BugzillaReportElement.ESTIMATED_TIME.getKeyString()).getValue()); - assertEquals("4.00", report.getAttribute(BugzillaReportElement.ACTUAL_TIME.getKeyString()).getValue()); - assertEquals("3.00", report.getAttribute(BugzillaReportElement.REMAINING_TIME.getKeyString()).getValue()); - assertEquals("2005-03-04", report.getAttribute(BugzillaReportElement.DEADLINE.getKeyString()).getValue()); - } - - // public void testTimeTracking2201() throws Exception { - // RepositoryTaskData report = - // init(IBugzillaConstants.TEST_BUGZILLA_2201_URL, 23); - // - // assertEquals("7.50", - // report.getAttribute(BugzillaReportElement.ESTIMATED_TIME.getKeyString()).getValue()); - // assertEquals("1.00", - // report.getAttribute(BugzillaReportElement.ACTUAL_TIME.getKeyString()).getValue()); - // assertEquals("3.00", - // report.getAttribute(BugzillaReportElement.REMAINING_TIME.getKeyString()).getValue()); - // assertEquals("2005-03-04", - // report.getAttribute(BugzillaReportElement.DEADLINE.getKeyString()).getValue()); - // } - // - // public void testTimeTracking220() throws Exception { - // RepositoryTaskData report = - // init(IBugzillaConstants.TEST_BUGZILLA_220_URL, 9); - // - // assertEquals("7.50", - // report.getAttribute(BugzillaReportElement.ESTIMATED_TIME.getKeyString()).getValue()); - // assertEquals("1.00", - // report.getAttribute(BugzillaReportElement.ACTUAL_TIME.getKeyString()).getValue()); - // assertEquals("3.00", - // report.getAttribute(BugzillaReportElement.REMAINING_TIME.getKeyString()).getValue()); - // assertEquals("2005-03-04", - // report.getAttribute(BugzillaReportElement.DEADLINE.getKeyString()).getValue()); - // } - - public void testTimeTracking218() throws Exception { - RepositoryTaskData report = init(IBugzillaConstants.TEST_BUGZILLA_218_URL, 19); - - assertEquals("7.50", report.getAttribute(BugzillaReportElement.ESTIMATED_TIME.getKeyString()).getValue()); - assertEquals("1.00", report.getAttribute(BugzillaReportElement.ACTUAL_TIME.getKeyString()).getValue()); - assertEquals("3.00", report.getAttribute(BugzillaReportElement.REMAINING_TIME.getKeyString()).getValue()); - } - - public void testMultipleDepensOn() throws Exception { - String bugid = "5"; - TaskRepository repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, - IBugzillaConstants.TEST_BUGZILLA_218_URL); - - RepositoryTaskData report = new RepositoryTaskData(attributeFactory, BugzillaCorePlugin.REPOSITORY_KIND, - repository.getUrl(), bugid); - BugzillaServerFacade.setupExistingBugAttributes(repository.getUrl(), report); - factory.populateReport(report, repository.getUrl(), null, repository.getUserName(), repository.getPassword(), - null); - - assertNotNull(report); - assertEquals("5", report.getAttribute(BugzillaReportElement.BUG_ID.getKeyString()).getValue()); - assertEquals("6, 7", report.getAttribute(BugzillaReportElement.DEPENDSON.getKeyString()).getValue()); - assertEquals("13, 14", report.getAttribute(BugzillaReportElement.BLOCKED.getKeyString()).getValue()); - } - - public void testBugReportAPI() throws Exception { - String bugid = "3"; - TaskRepository repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, - IBugzillaConstants.TEST_BUGZILLA_222_URL); - - RepositoryTaskData report = new RepositoryTaskData(attributeFactory, BugzillaCorePlugin.REPOSITORY_KIND, - repository.getUrl(), bugid); - BugzillaServerFacade.setupExistingBugAttributes(repository.getUrl(), report); - factory.populateReport(report, repository.getUrl(), null, repository.getUserName(), repository.getPassword(), - null); - - assertNotNull(report); - assertTrue(report instanceof RepositoryTaskData); - RepositoryTaskData bugReport = (RepositoryTaskData) report; - assertEquals("search-match-test 2", bugReport.getSummary()); - assertEquals("search-match-test 2", bugReport.getDescription()); - assertEquals("TestProduct", bugReport.getProduct()); - assertEquals("nhapke@cs.ubc.ca", bugReport.getAssignedTo()); - // assertEquals("Other", - // report.getAttribute(BugzillaReportElement.OP_SYS.getKeyString()).getValue()); - // assertEquals(37, report.getComments().size()); - // assertEquals("Testing new 2.22 version capability", - // report.getComments().get(0).getAttribute(BugzillaReportElement.THETEXT.getKeyString()).getValue()); - // assertEquals(15, report.getAttachments().size()); - // assertEquals("1", - // report.getAttachments().get(0).getAttribute(BugzillaReportElement.ATTACHID.getKeyString()).getValue()); - } - - public void testDeltaTsTruncation() { - String ts1 = "2006-07-06 03:22:08 0900"; - String ts1_truncated = "2006-07-06 03:22:08"; - assertEquals(ts1_truncated, BugzillaReportSubmitForm.stripTimeZone(ts1)); - - String ts2 = "2006-07-06 03:22:08"; - String ts2_truncated = "2006-07-06 03:22:08"; - assertEquals(ts2_truncated, BugzillaReportSubmitForm.stripTimeZone(ts2)); - - String ts3 = "2006-07-06 03:22:08 PST"; - String ts3_truncated = "2006-07-06 03:22:08"; - assertEquals(ts3_truncated, BugzillaReportSubmitForm.stripTimeZone(ts3)); - } - -} diff --git a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/RepositoryTaskHandleTest.java b/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/RepositoryTaskHandleTest.java deleted file mode 100644 index 4a50490fd..000000000 --- a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/RepositoryTaskHandleTest.java +++ /dev/null @@ -1,69 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.bugzilla.tests; - -import junit.framework.TestCase; - -import org.eclipse.mylar.internal.bugzilla.core.BugzillaTask; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.ui.TaskListManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Mik Kersten - */ -public class RepositoryTaskHandleTest extends TestCase { - - private TaskListManager manager = TasksUiPlugin.getTaskListManager(); - - @Override - protected void setUp() throws Exception { - super.setUp(); - manager = TasksUiPlugin.getTaskListManager(); - manager.resetTaskList(); - } - - @Override - protected void tearDown() throws Exception { - super.tearDown(); - manager.resetTaskList(); - } - - public void testInvalidHandle() { -// MockRepositoryTask task = new MockRepositoryTask() - String url = "http://foo"; - assertEquals(url + "-" + "abc", AbstractRepositoryTask.getHandle(url, "abc")); - Exception caught = null; - try { - AbstractRepositoryTask.getHandle(url, "a-23"); - } catch (Exception e) { - caught = e; - } - assertNotNull(caught); - } - - public void testRepositoryUrlHandles() { - - String repository = IBugzillaConstants.ECLIPSE_BUGZILLA_URL; - String id = "123"; - String handle = AbstractRepositoryTask.getHandle(repository, id); - BugzillaTask bugTask = new BugzillaTask(handle, "label 124", true); - assertEquals(repository, bugTask.getRepositoryUrl()); - - manager.getTaskList().moveToRoot(bugTask); - manager.saveTaskList(); - manager.resetTaskList(); - manager.readExistingOrCreateNewList(); - - BugzillaTask readReport = (BugzillaTask) manager.getTaskList().getRootTasks().iterator().next(); - assertEquals(readReport.getDescription(), readReport.getDescription()); - assertEquals(readReport.getRepositoryUrl(), readReport.getRepositoryUrl()); - } -} diff --git a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/TaskEditorTest.java b/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/TaskEditorTest.java deleted file mode 100644 index f1b105f21..000000000 --- a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/TaskEditorTest.java +++ /dev/null @@ -1,76 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.bugzilla.tests; - -import junit.framework.TestCase; - -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants; -import org.eclipse.mylar.internal.bugzilla.core.NewBugzillaReport; -import org.eclipse.mylar.internal.bugzilla.ui.BugzillaUiPlugin; -import org.eclipse.mylar.internal.bugzilla.ui.editor.NewBugEditorInput; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.internal.tasks.ui.editors.AbstractRepositoryTaskEditor; -import org.eclipse.mylar.internal.tasks.ui.editors.MylarTaskEditor; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.PlatformUI; - -/** - * @author Jeff Pound - */ -public class TaskEditorTest extends TestCase { - - private static final String DESCRIPTION = "description"; - - @Override - protected void setUp() throws Exception { - super.setUp(); - } - - @Override - protected void tearDown() throws Exception { - PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().closeAllEditors(false); - TasksUiPlugin.getRepositoryManager().clearRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - TasksUiPlugin.getTaskListManager().resetTaskList(); - TasksUiPlugin.getDefault().getTaskListSaveManager().saveTaskList(true); - super.tearDown(); - } - - /** - * Automated task creation needs to access newly created task editors. This - * test tests that the access is available. - * - * @throws Exception - */ - public void testAccessNewEditor() throws Exception { - TaskRepository repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, - IBugzillaConstants.TEST_BUGZILLA_222_URL); - - NewBugzillaReport model = new NewBugzillaReport(repository.getUrl(), TasksUiPlugin.getDefault() - .getOfflineReportsFile().getNextOfflineBugId()); - NewBugEditorInput editorInput = new NewBugEditorInput(repository, model); - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - TaskUiUtil.openEditor(editorInput, BugzillaUiPlugin.NEW_BUG_EDITOR_ID, page); - assertTrue(page.getActiveEditor() instanceof MylarTaskEditor); - MylarTaskEditor taskEditor = (MylarTaskEditor) page.getActiveEditor(); - assertTrue(taskEditor.getActivePageInstance() instanceof AbstractRepositoryTaskEditor); - AbstractRepositoryTaskEditor editor = (AbstractRepositoryTaskEditor) taskEditor.getActivePageInstance(); - - String desc = DESCRIPTION; - String summary = "summary"; - // ensure we have access without exceptions - editor.setDescriptionText(desc); - editor.setSummaryText(summary); - editor.doSave(new NullProgressMonitor()); - } - -} diff --git a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/TaskListNotificationManagerTest.java b/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/TaskListNotificationManagerTest.java deleted file mode 100644 index 4b50abbe2..000000000 --- a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/TaskListNotificationManagerTest.java +++ /dev/null @@ -1,139 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.bugzilla.tests; - -import java.util.Date; - -import junit.framework.TestCase; - -import org.eclipse.mylar.internal.bugzilla.core.BugzillaQueryHit; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaRepositoryQuery; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaTask; -import org.eclipse.mylar.internal.tasks.ui.TaskListNotificationIncoming; -import org.eclipse.mylar.internal.tasks.ui.TaskListNotificationManager; -import org.eclipse.mylar.internal.tasks.ui.TaskListNotificationQueryIncoming; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.Task; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask.RepositoryTaskSyncState; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Rob Elves - */ -public class TaskListNotificationManagerTest extends TestCase { - - @Override - protected void setUp() throws Exception { - super.setUp(); - } - - @Override - protected void tearDown() throws Exception { - super.tearDown(); - } - - public void testTaskListNotificationReminder() throws InterruptedException { - - Date now = new Date(); - - ITask task0 = new Task("t0", "t0 - test 0", true); - ITask task1 = new Task("t1", "t1 - test 1", true); - ITask task2 = new Task("t2", "t2 - test 2", true); - - task0.setReminderDate(new Date(now.getTime() - 2000)); - task1.setReminderDate(new Date(now.getTime() - 2000)); - task2.setReminderDate(new Date(now.getTime() - 2000)); - - TasksUiPlugin.getTaskListManager().getTaskList().addTask(task0); - TasksUiPlugin.getTaskListManager().getTaskList().addTask(task1); - TasksUiPlugin.getTaskListManager().getTaskList().addTask(task2); - - TaskListNotificationManager notificationManager = TasksUiPlugin.getDefault() - .getTaskListNotificationManager(); - notificationManager.collectNotifications(); - - task0 = TasksUiPlugin.getTaskListManager().getTaskList().getTask("t0"); - assertNotNull(task0); - assertTrue(task0.hasBeenReminded()); - task1 = TasksUiPlugin.getTaskListManager().getTaskList().getTask("t1"); - assertNotNull(task1); - assertTrue(task1.hasBeenReminded()); - task2 = TasksUiPlugin.getTaskListManager().getTaskList().getTask("t2"); - assertNotNull(task2); - assertTrue(task2.hasBeenReminded()); - - } - - public void testTaskListNotificationIncoming() { - - TaskRepository repository = new TaskRepository("bugzilla", "https://bugs.eclipse.org/bugs"); - TasksUiPlugin.getRepositoryManager().addRepository(repository, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - AbstractRepositoryTask task = new BugzillaTask("https://bugs.eclipse.org/bugs-142891", "label", true); - assertTrue(task.getSyncState() == RepositoryTaskSyncState.INCOMING); - assertTrue(task.isNotified()); - task.setNotified(false); - TasksUiPlugin.getTaskListManager().getTaskList().addTask(task); - TaskListNotificationManager notificationManager = TasksUiPlugin.getDefault() - .getTaskListNotificationManager(); - notificationManager.collectNotifications(); - assertTrue(notificationManager.getNotifications().contains(new TaskListNotificationIncoming(task))); - task = (AbstractRepositoryTask) TasksUiPlugin.getTaskListManager().getTaskList().getTask( - "https://bugs.eclipse.org/bugs-142891"); - assertNotNull(task); - assertTrue(task.isNotified()); - } - - public void testTaskListNotificationQueryIncoming() { - BugzillaQueryHit hit = new BugzillaQueryHit(null, "description", "priority", "https://bugs.eclipse.org/bugs", "1", - null, "status"); - assertFalse(hit.isNotified()); - BugzillaRepositoryQuery query = new BugzillaRepositoryQuery("https://bugs.eclipse.org/bugs", "queryUrl", - "description", "10", TasksUiPlugin.getTaskListManager().getTaskList()); - query.addHit(hit, TasksUiPlugin.getTaskListManager().getTaskList()); - TasksUiPlugin.getTaskListManager().getTaskList().addQuery(query); - TaskListNotificationManager notificationManager = TasksUiPlugin.getDefault() - .getTaskListNotificationManager(); - notificationManager.collectNotifications(); - assertTrue(notificationManager.getNotifications().contains(new TaskListNotificationQueryIncoming(hit))); - assertTrue(hit.isNotified()); - } - - public void testTaskListNotificationQueryIncomingRepeats() { - TasksUiPlugin.getTaskListManager().resetTaskList(); - BugzillaQueryHit hit = new BugzillaQueryHit(null, "description", "priority", "https://bugs.eclipse.org/bugs", "1", - null, "status"); - String hitHandle = hit.getHandleIdentifier(); - assertFalse(hit.isNotified()); - BugzillaRepositoryQuery query = new BugzillaRepositoryQuery("https://bugs.eclipse.org/bugs", "queryUrl", - "description", "10", TasksUiPlugin.getTaskListManager().getTaskList()); - query.addHit(hit, TasksUiPlugin.getTaskListManager().getTaskList()); - TasksUiPlugin.getTaskListManager().getTaskList().addQuery(query); - TaskListNotificationManager notificationManager = TasksUiPlugin.getDefault() - .getTaskListNotificationManager(); - notificationManager.collectNotifications(); - assertTrue(notificationManager.getNotifications().contains(new TaskListNotificationQueryIncoming(hit))); - assertTrue(hit.isNotified()); - - TasksUiPlugin.getTaskListManager().saveTaskList(); - TasksUiPlugin.getTaskListManager().resetTaskList(); - assertEquals(0, TasksUiPlugin.getTaskListManager().getTaskList().getQueries().size()); - assertTrue(TasksUiPlugin.getTaskListManager().readExistingOrCreateNewList()); - assertEquals(1, TasksUiPlugin.getTaskListManager().getTaskList().getQueries().size()); - BugzillaQueryHit hitLoaded = (BugzillaQueryHit)TasksUiPlugin.getTaskListManager().getTaskList().getQueryHitForHandle(hitHandle); - assertNotNull(hitLoaded); - assertTrue(hitLoaded.isNotified()); - - } - -} diff --git a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/TaskListStandaloneTest.java b/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/TaskListStandaloneTest.java deleted file mode 100644 index e16599139..000000000 --- a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/TaskListStandaloneTest.java +++ /dev/null @@ -1,151 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.bugzilla.tests; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.List; -import java.util.Set; - -import junit.framework.TestCase; - -import org.eclipse.mylar.internal.bugzilla.core.BugzillaTask; -import org.eclipse.mylar.internal.bugzilla.ui.tasklist.BugzillaTaskExternalizer; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskListExternalizer; -import org.eclipse.mylar.tasks.core.Task; -import org.eclipse.mylar.tasks.ui.TaskListManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Mik Kersten - * @author Rob Elves - */ -public class TaskListStandaloneTest extends TestCase { - - private TaskListManager manager; - - @Override - protected void setUp() throws Exception { - super.setUp(); - TasksUiPlugin.getRepositoryManager().clearRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - manager = TasksUiPlugin.getTaskListManager(); - - // file = new File("tasklist" + TasksUiPlugin.FILE_EXTENSION); - // file.deleteOnExit(); - // new TaskListManager(writer, file); - manager.resetTaskList(); - assertEquals("should be empty: " + manager.getTaskList().getRootTasks(), 0, manager.getTaskList() - .getRootTasks().size()); - } - - @Override - protected void tearDown() throws Exception { - manager.resetTaskList(); - manager.saveTaskList(); - super.tearDown(); - } - - public void testPastReminder() { - ITask task = new Task("1", "1", true); - long now = new Date().getTime(); - task.setReminderDate(new Date(now - 1000)); - assertTrue(task.isPastReminder()); - - task.setReminderDate(new Date(now + 1000)); - assertFalse(task.isPastReminder()); - - task.setReminderDate(new Date(now - 1000)); - task.setCompleted(true); - assertTrue(task.isPastReminder()); - } - - public void testDates() { - Date start = Calendar.getInstance().getTime(); - Date creation = new Date(); - Task task = new Task("1", "task 1", true); - - manager.getTaskList().moveToRoot(task); - assertDatesCloseEnough(task.getCreationDate(), start); - - task.setCompleted(true); - assertDatesCloseEnough(task.getCompletionDate(), start); - - task.setReminderDate(start); - assertDatesCloseEnough(task.getReminderDate(), start); - - assertEquals(2, manager.getTaskList().getRootElements().size()); - manager.saveTaskList(); - - assertNotNull(manager.getTaskList()); - // TaskList list = new TaskList(); - // manager.setTaskList(list); - // assertEquals(0, manager.getTaskList().getRootTasks().size()); - // manager.readOrCreateTaskList(); - // assertNotNull(manager.getTaskList()); - assertEquals(1, manager.getTaskList().getRootTasks().size()); - - Set<ITask> readList = manager.getTaskList().getRootTasks(); - ITask readTask = readList.iterator().next(); - assertTrue(readTask.getDescription().equals("task 1")); - - assertEquals("should be: " + creation, task.getCreationDate(), readTask.getCreationDate()); - assertEquals(task.getCompletionDate(), readTask.getCompletionDate()); - assertEquals(task.getReminderDate(), readTask.getReminderDate()); - } - - public void testTaskRetentionWhenConnectorMissing() { - List<ITaskListExternalizer> originalExternalizers = manager.getTaskListWriter().getExternalizers(); - List<ITaskListExternalizer> externalizers; - externalizers = new ArrayList<ITaskListExternalizer>(); - externalizers.add(new BugzillaTaskExternalizer()); - // make some tasks - // save them - BugzillaTask task = new BugzillaTask("http://bugs-1", "1", true); - manager.getTaskList().addTask(task); - manager.saveTaskList(); - - // reload tasklist and check that they persist - manager.resetTaskList(); - manager.readExistingOrCreateNewList(); - assertEquals(1, manager.getTaskList().getAllTasks().size()); - - // removed/disable externalizers - externalizers.clear(); - manager.getTaskListWriter().setDelegateExternalizers(externalizers); - - // reload tasklist ensure task didn't load - manager.resetTaskList(); - manager.readExistingOrCreateNewList(); - assertEquals(0, manager.getTaskList().getAllTasks().size()); - // Save the task list (tasks with missing connectors should get - // persisted) - manager.saveTaskList(); - - // re-enable connector - externalizers.add(new BugzillaTaskExternalizer()); - manager.getTaskListWriter().setDelegateExternalizers(externalizers); - - // re-load tasklist - manager.resetTaskList(); - manager.readExistingOrCreateNewList(); - - // ensure that task now gets loaded - assertEquals(1, manager.getTaskList().getAllTasks().size()); - manager.getTaskListWriter().setDelegateExternalizers(originalExternalizers); - } - - public void assertDatesCloseEnough(Date first, Date second) { - assertTrue(second.getTime() - first.getTime() < 100); - } -} diff --git a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/TaskReportGeneratorTest.java b/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/TaskReportGeneratorTest.java deleted file mode 100644 index 661f3daac..000000000 --- a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/TaskReportGeneratorTest.java +++ /dev/null @@ -1,190 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.bugzilla.tests; - -import java.lang.reflect.InvocationTargetException; -import java.util.Date; -import java.util.HashSet; -import java.util.Set; - -import junit.framework.TestCase; - -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaQueryHit; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaRepositoryQuery; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaTask; -import org.eclipse.mylar.internal.tasks.ui.planner.CompletedTaskCollector; -import org.eclipse.mylar.internal.tasks.ui.planner.TaskReportGenerator; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.mylar.tasks.core.Task; -import org.eclipse.mylar.tasks.core.TaskCategory; -import org.eclipse.mylar.tasks.ui.TaskListManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Mik Kersten - * @author Rob Elves - */ -public class TaskReportGeneratorTest extends TestCase { - - private TaskListManager manager; - - @Override - protected void setUp() throws Exception { - super.setUp(); - manager = TasksUiPlugin.getTaskListManager(); - manager.resetTaskList(); - assertEquals(0, manager.getTaskList().getAllTasks().size()); - } - - @Override - protected void tearDown() throws Exception { - super.tearDown(); - manager.resetTaskList(); - TasksUiPlugin.getDefault().getTaskListSaveManager().saveTaskList(true); - assertEquals(0, manager.getTaskList().getAllTasks().size()); - } - - public void testCompletedTasksRetrieved() throws InvocationTargetException, InterruptedException { - Task task1 = new Task(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), "task 1", true); - manager.getTaskList().moveToRoot(task1); - - CompletedTaskCollector collector = new CompletedTaskCollector(new Date(0)); - TaskReportGenerator generator = new TaskReportGenerator(manager.getTaskList()); - generator.addCollector(collector); - generator.run(new NullProgressMonitor()); - assertEquals(0, generator.getAllCollectedTasks().size()); - - task1.setCompleted(true); - generator.run(new NullProgressMonitor()); - assertEquals(1, generator.getAllCollectedTasks().size()); - assertEquals(task1, generator.getAllCollectedTasks().get(0)); - } - - public void testCompletedTasksDateBoundsRetrieved() throws InvocationTargetException, InterruptedException { - Task task1 = new Task(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), "task 1", true); - manager.getTaskList().moveToRoot(task1); - task1.setCompleted(true); - Thread.sleep(1000); - long now = new Date().getTime(); - - CompletedTaskCollector collector = new CompletedTaskCollector(new Date(now)); - TaskReportGenerator generator = new TaskReportGenerator(manager.getTaskList()); - generator.addCollector(collector); - generator.run(new NullProgressMonitor()); - assertEquals(0, generator.getAllCollectedTasks().size()); - - generator = new TaskReportGenerator(manager.getTaskList()); - collector = new CompletedTaskCollector(new Date(now - 8000)); - generator.addCollector(collector); - generator.run(new NullProgressMonitor()); - assertEquals(1, generator.getAllCollectedTasks().size()); - assertEquals(task1, generator.getAllCollectedTasks().get(0)); - } - - public void testCompletedBugzillaTasksRetrieved() throws InvocationTargetException, InterruptedException { - BugzillaTask task1 = new BugzillaTask(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), - "bugzillatask 1", true); - manager.getTaskList().moveToRoot(task1); - - CompletedTaskCollector collector = new CompletedTaskCollector(new Date(0)); - TaskReportGenerator generator = new TaskReportGenerator(manager.getTaskList()); - generator.addCollector(collector); - generator.run(new NullProgressMonitor()); - assertEquals(0, generator.getAllCollectedTasks().size()); - - BugzillaTestUtil.setBugTaskCompleted(task1, true); - generator.run(new NullProgressMonitor()); - assertEquals(1, generator.getAllCollectedTasks().size()); - assertEquals(task1, generator.getAllCollectedTasks().get(0)); - } - - public void testCompletedTasksInCategoryRetrieved() throws InvocationTargetException, InterruptedException { - Task task1 = new Task(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), "task 1", true); - manager.getTaskList().moveToRoot(task1); - task1.setCompleted(true); - TaskCategory cat1 = new TaskCategory("TaskReportGeneratorTest Category", manager.getTaskList()); - manager.getTaskList().addCategory(cat1); - - Set<ITaskListElement> catagories = new HashSet<ITaskListElement>(); - catagories.add(cat1); - - CompletedTaskCollector collector = new CompletedTaskCollector(new Date(0)); - TaskReportGenerator generator = new TaskReportGenerator(manager.getTaskList(), catagories); - generator.addCollector(collector); - generator.run(new NullProgressMonitor()); - assertEquals(0, generator.getAllCollectedTasks().size()); - - manager.getTaskList().moveToContainer(cat1, task1); - - generator.run(new NullProgressMonitor()); - assertEquals(1, generator.getAllCollectedTasks().size()); - assertEquals(task1, generator.getAllCollectedTasks().get(0)); - } - - public void testCompletedBugzillaTasksInCategoryRetrieved() throws InvocationTargetException, InterruptedException { - BugzillaTask task1 = new BugzillaTask(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), "task 1", - true); - manager.getTaskList().moveToRoot(task1); - BugzillaTestUtil.setBugTaskCompleted(task1, true); - TaskCategory cat1 = new TaskCategory("TaskReportGeneratorTest Category", manager.getTaskList()); - manager.getTaskList().addCategory(cat1); - - Set<ITaskListElement> catagories = new HashSet<ITaskListElement>(); - catagories.add(cat1); - - CompletedTaskCollector collector = new CompletedTaskCollector(new Date(0)); - TaskReportGenerator generator = new TaskReportGenerator(manager.getTaskList(), catagories); - generator.addCollector(collector); - generator.run(new NullProgressMonitor()); - assertEquals(0, generator.getAllCollectedTasks().size()); - - manager.getTaskList().moveToContainer(cat1, task1); - - generator.run(new NullProgressMonitor()); - assertEquals(1, generator.getAllCollectedTasks().size()); - assertEquals(task1, generator.getAllCollectedTasks().get(0)); - } - - public void testCompletedBugzillaTasksInQueryRetrieved() throws InvocationTargetException, InterruptedException { - BugzillaTask task1 = new BugzillaTask(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), "task 1", - true); - manager.getTaskList().moveToRoot(task1); - BugzillaTestUtil.setBugTaskCompleted(task1, false); - - BugzillaRepositoryQuery bugQuery = new BugzillaRepositoryQuery("repositoryUrl", "queryUrl", - "TaskReportGeneratorBugzillaQueryCategory", "maxHits", manager.getTaskList()); - - manager.getTaskList().addQuery(bugQuery); - - Set<ITaskListElement> catagories = new HashSet<ITaskListElement>(); - catagories.add(bugQuery); - - CompletedTaskCollector collector = new CompletedTaskCollector(new Date(0)); - TaskReportGenerator generator = new TaskReportGenerator(manager.getTaskList(), catagories); - generator.addCollector(collector); - generator.run(new NullProgressMonitor()); - assertEquals(0, generator.getAllCollectedTasks().size()); - - bugQuery.addHit(new BugzillaQueryHit(null, "task1description", "low", "repositoryURL", "1", task1, "FIXED"), manager.getTaskList()); - - generator.run(new NullProgressMonitor()); - assertEquals(0, generator.getAllCollectedTasks().size()); - - BugzillaTestUtil.setBugTaskCompleted(task1, true); - - generator.run(new NullProgressMonitor()); - assertEquals(1, generator.getAllCollectedTasks().size()); - assertEquals(task1, generator.getAllCollectedTasks().get(0)); - } - -} diff --git a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/headless/BugzillaQueryTest.java b/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/headless/BugzillaQueryTest.java deleted file mode 100644 index cad12b43b..000000000 --- a/org.eclipse.mylyn.bugzilla.tests/src/org/eclipse/mylyn/bugzilla/tests/headless/BugzillaQueryTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.bugzilla.tests.headless; - -import java.io.IOException; -import java.net.InetSocketAddress; -import java.net.Proxy; -import java.security.GeneralSecurityException; -import java.security.KeyManagementException; -import java.util.List; - -import junit.framework.TestCase; - -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.mylar.context.tests.support.MylarTestUtils; -import org.eclipse.mylar.context.tests.support.MylarTestUtils.Credentials; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaException; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaReportElement; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaRepositoryConnector; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaRepositoryQuery; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaServerFacade; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.QueryHitCollector; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.mylar.tasks.core.TaskList; -import org.eclipse.mylar.tasks.core.TaskRepository; - -/** - * - * Runs headless (can be run as regular junit test without platform plugin - * support). - * - * @author Rob Elves - * @author Nathan Hapke - */ -public class BugzillaQueryTest extends TestCase { - - private TaskRepository repository; - - @Override - protected void setUp() throws Exception { - super.setUp(); - repository = new TaskRepository(BugzillaCorePlugin.REPOSITORY_KIND, IBugzillaConstants.TEST_BUGZILLA_222_URL); - } - - /** - * This is the first test so that the repository credentials are correctly - * set for the other tests - */ - public void testAddCredentials() { - if (!repository.hasCredentials()) { - Credentials credentials = MylarTestUtils.readCredentials(); - repository.setAuthenticationCredentials(credentials.username, credentials.password); - - assertTrue(repository.hasCredentials()); - } - } - - public void testValidateCredentials() throws IOException, BugzillaException, KeyManagementException, - GeneralSecurityException { - BugzillaServerFacade.validateCredentials(null, repository.getUrl(), repository.getUserName(), repository - .getPassword()); - } - - public void testValidateCredentialsInvalidProxy() throws IOException, BugzillaException, KeyManagementException, - GeneralSecurityException { - BugzillaServerFacade.validateCredentials(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("localhost", 12356)), - repository.getUrl(), repository.getUserName(), repository.getPassword()); - } - - public void testGetBug() throws Exception { - RepositoryTaskData taskData = BugzillaServerFacade.getBug(repository.getUrl(), repository.getUserName(), - repository.getPassword(), null, repository.getCharacterEncoding(), 1); - assertNotNull(taskData); - assertEquals("user@mylar.eclipse.org", taskData.getAssignedTo()); - - // Notice that comment 0 is the Bug Description - assertEquals("foo", taskData.getComments().get(0).getText()); - assertEquals("nhapke@cs.ubc.ca", taskData.getComments().get(0).getAuthor()); - - // You can use the getAttributeValue to pull up the information on any - // part of the bug - assertEquals("P1", taskData.getAttributeValue(BugzillaReportElement.PRIORITY.getKeyString())); - } - - public void testGetProductList() throws Exception { - List<String> products = BugzillaServerFacade.getProductList(repository.getUrl(), null, - repository.getUserName(), repository.getPassword(), repository.getCharacterEncoding()); - - assertEquals(3, products.size()); - assertTrue(products.contains("Read Only Test Cases")); - assertTrue(products.contains("Read Write Test Cases")); - assertTrue(products.contains("TestProduct")); - } - - public void testQueryViaConnector() throws Exception { - String queryUrlString = repository.getUrl() - + "/buglist.cgi?ctype=rdf&query_format=advanced&short_desc_type=allwordssubstr&short_desc=search-match-test&product=TestProduct&long_desc_type=substring&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&deadlinefrom=&deadlineto=&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&emailassigned_to1=1&emailtype1=substring&email1=&emailassigned_to2=1&emailreporter2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0="; - TaskList taskList = new TaskList(); - QueryHitCollector collector = new QueryHitCollector(new TaskList()); - BugzillaRepositoryConnector connector = new BugzillaRepositoryConnector(); - connector.init(taskList); - BugzillaRepositoryQuery query = new BugzillaRepositoryQuery(repository.getUrl(), queryUrlString, "description", - "-1", taskList); - connector.performQuery(query, repository, null, new NullProgressMonitor(), collector); - assertEquals(2, collector.getHits().size()); - for (AbstractQueryHit hit : collector.getHits()) { - assertTrue(hit.getDescription().contains("search-match-test")); - } - } -} - -// public void testQueryBugs() throws Exception { -// -// QueryHitCollector collector = new QueryHitCollector(new TaskList()); -// -// // Note need for ctype=rdf in query url -// String urlString = -// "http://mylar.eclipse.org/bugs222/buglist.cgi?ctype=rdf&query_format=advanced&short_desc_type=allwordssubstr&short_desc=search-match-test&product=TestProduct&long_desc_type=substring&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&deadlinefrom=&deadlineto=&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&emailassigned_to1=1&emailtype1=substring&email1=&emailassigned_to2=1&emailreporter2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0="; -// RepositoryQueryResultsFactory queryFactory = new -// RepositoryQueryResultsFactory(); -// -// // Tasklist can be null but calls to hit.getOrCreateCorrespondingTask() will -// return null. -// queryFactory.performQuery(null, repository.getUrl(), collector, urlString, -// null, -1, repository -// .getCharacterEncoding()); -// -// assertEquals(2, collector.getHits().size()); -// for (AbstractQueryHit hit : collector.getHits()) { -// assertTrue(hit.getDescription().contains("search-match-test")); -// } -// } diff --git a/org.eclipse.mylyn.bugzilla.tests/testdata/configuration/rdfconfig218.txt b/org.eclipse.mylyn.bugzilla.tests/testdata/configuration/rdfconfig218.txt deleted file mode 100644 index f6b897fb6..000000000 --- a/org.eclipse.mylyn.bugzilla.tests/testdata/configuration/rdfconfig218.txt +++ /dev/null @@ -1,442 +0,0 @@ -<?xml version="1.0"?> -<!-- Note: this interface is experimental and under development. - - We may and probably will make breaking changes to it in the future. --> - -<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:bz="http://www.bugzilla.org/rdf#"> - -<bz:installation rdf:about=""> -<!-- NOTE: rdf:about="http://mylar.eclipse.org/bugs218/" - changed to "" for testing --> - <bz:install_version>2.18.5</bz:install_version> - <bz:maintainer>relves@cs.ubc.ca</bz:maintainer> - - <bz:status> - <Seq> - <li>UNCONFIRMED</li> - <li>NEW</li> - <li>ASSIGNED</li> - <li>REOPENED</li> - <li>RESOLVED</li> - <li>VERIFIED</li> - <li>CLOSED</li> - </Seq> - </bz:status> - - <bz:status_open> - <Seq> - <li>UNCONFIRMED</li> - <li>NEW</li> - <li>ASSIGNED</li> - <li>REOPENED</li> - </Seq> - </bz:status_open> - - <bz:status_closed> - <Seq> - <li>RESOLVED</li> - <li>VERIFIED</li> - <li>CLOSED</li> - </Seq> - </bz:status_closed> - - <bz:resolution> - <Seq> - <li></li> - <li>FIXED</li> - <li>INVALID</li> - <li>WONTFIX</li> - <li>LATER</li> - <li>REMIND</li> - <li>DUPLICATE</li> - <li>WORKSFORME</li> - <li>MOVED</li> - </Seq> - </bz:resolution> - - <bz:keyword> - <Seq> - </Seq> - </bz:keyword> - - <bz:platform> - <Seq> - <li>All</li> - <li>DEC</li> - <li>HP</li> - <li>Macintosh</li> - <li>PC</li> - <li>SGI</li> - <li>Sun</li> - <li>Other</li> - </Seq> - </bz:platform> - - <bz:op_sys> - <Seq> - <li>All</li> - <li>Windows 3.1</li> - <li>Windows 95</li> - <li>Windows 98</li> - <li>Windows ME</li> - <li>Windows 2000</li> - <li>Windows NT</li> - <li>Windows XP</li> - <li>Windows Server 2003</li> - <li>Mac System 7</li> - <li>Mac System 7.5</li> - <li>Mac System 7.6.1</li> - <li>Mac System 8.0</li> - <li>Mac System 8.5</li> - <li>Mac System 8.6</li> - <li>Mac System 9.x</li> - <li>Mac OS X 10.0</li> - <li>Mac OS X 10.1</li> - <li>Mac OS X 10.2</li> - <li>Mac OS X 10.3</li> - <li>Linux</li> - <li>BSD/OS</li> - <li>FreeBSD</li> - <li>NetBSD</li> - <li>OpenBSD</li> - <li>AIX</li> - <li>BeOS</li> - <li>HP-UX</li> - <li>IRIX</li> - <li>Neutrino</li> - <li>OpenVMS</li> - <li>OS/2</li> - <li>OSF/1</li> - <li>Solaris</li> - <li>SunOS</li> - <li>other</li> - </Seq> - </bz:op_sys> - - <bz:priority> - <Seq> - <li>P1</li> - <li>P2</li> - <li>P3</li> - <li>P4</li> - <li>P5</li> - </Seq> - </bz:priority> - - <bz:severity> - <Seq> - <li>blocker</li> - <li>critical</li> - <li>major</li> - <li>normal</li> - <li>minor</li> - <li>trivial</li> - <li>enhancement</li> - </Seq> - </bz:severity> - - <bz:products> - <Seq> - <li> - <bz:product rdf:about="http://mylar.eclipse.org/bugs218/product.cgi?name=TestProduct"> - <bz:name>TestProduct</bz:name> - - <bz:components> - <Seq> - <li resource="http://mylar.eclipse.org/bugs218/component.cgi?name=TestComponent"/> - </Seq> - </bz:components> - - <bz:versions> - <Seq> - <li resource="http://mylar.eclipse.org/bugs218/version.cgi?name=other"/> - </Seq> - </bz:versions> - - - </bz:product> - </li> - </Seq> - </bz:products> - - <bz:components> - <Seq> - <li> - <bz:component rdf:about="http://mylar.eclipse.org/bugs218/component.cgi?name=TestComponent"> - <bz:name>TestComponent</bz:name> - </bz:component> - </li> - </Seq> - </bz:components> - - <bz:versions> - <Seq> - <li> - <bz:version rdf:about="http://mylar.eclipse.org/bugs218/version.cgi?name=other"> - <bz:name>other</bz:name> - </bz:version> - </li> - </Seq> - </bz:versions> - - - <bz:fields> - <Seq> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=bug_id"> - <bz:name>bug_id</bz:name> - <bz:description>Bug ID</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=short_desc"> - <bz:name>short_desc</bz:name> - <bz:description>Summary</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=product"> - <bz:name>product</bz:name> - <bz:description>Product</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=version"> - <bz:name>version</bz:name> - <bz:description>Version</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=rep_platform"> - <bz:name>rep_platform</bz:name> - <bz:description>Hardware</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=bug_file_loc"> - <bz:name>bug_file_loc</bz:name> - <bz:description>URL</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=op_sys"> - <bz:name>op_sys</bz:name> - <bz:description>OS</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=bug_status"> - <bz:name>bug_status</bz:name> - <bz:description>Status</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=status_whiteboard"> - <bz:name>status_whiteboard</bz:name> - <bz:description>Whiteboard</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=keywords"> - <bz:name>keywords</bz:name> - <bz:description>Keywords</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=resolution"> - <bz:name>resolution</bz:name> - <bz:description>Resolution</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=bug_severity"> - <bz:name>bug_severity</bz:name> - <bz:description>Severity</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=priority"> - <bz:name>priority</bz:name> - <bz:description>Priority</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=component"> - <bz:name>component</bz:name> - <bz:description>Component</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=assigned_to"> - <bz:name>assigned_to</bz:name> - <bz:description>Assignee</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=reporter"> - <bz:name>reporter</bz:name> - <bz:description>Reporter</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=votes"> - <bz:name>votes</bz:name> - <bz:description>Votes</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=qa_contact"> - <bz:name>qa_contact</bz:name> - <bz:description>QA Contact</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=cc"> - <bz:name>cc</bz:name> - <bz:description>CC</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=dependson"> - <bz:name>dependson</bz:name> - <bz:description>Depends on</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=blocked"> - <bz:name>blocked</bz:name> - <bz:description>Blocks</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=attachments.description"> - <bz:name>attachments.description</bz:name> - <bz:description>Attachment description</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=attachments.thedata"> - <bz:name>attachments.thedata</bz:name> - <bz:description>Attachment data</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=attachments.filename"> - <bz:name>attachments.filename</bz:name> - <bz:description>Attachment filename</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=attachments.mimetype"> - <bz:name>attachments.mimetype</bz:name> - <bz:description>Attachment mime type</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=attachments.ispatch"> - <bz:name>attachments.ispatch</bz:name> - <bz:description>Attachment is patch</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=attachments.isobsolete"> - <bz:name>attachments.isobsolete</bz:name> - <bz:description>Attachment is obsolete</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=attachments.isprivate"> - <bz:name>attachments.isprivate</bz:name> - <bz:description>Attachment is private</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=target_milestone"> - <bz:name>target_milestone</bz:name> - <bz:description>Target Milestone</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=delta_ts"> - <bz:name>delta_ts</bz:name> - <bz:description>Last Changed time</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=(to_days(now())%20-%20to_days(bugs.delta_ts))"> - <bz:name>(to_days(now()) - to_days(bugs.delta_ts))</bz:name> - <bz:description>Days since bug changed</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=longdesc"> - <bz:name>longdesc</bz:name> - <bz:description>Comment</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=alias"> - <bz:name>alias</bz:name> - <bz:description>Alias</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=everconfirmed"> - <bz:name>everconfirmed</bz:name> - <bz:description>Ever confirmed?</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=reporter_accessible"> - <bz:name>reporter_accessible</bz:name> - <bz:description>Reporter accessible?</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=cclist_accessible"> - <bz:name>cclist_accessible</bz:name> - <bz:description>CC list accessible?</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=bug_group"> - <bz:name>bug_group</bz:name> - <bz:description>Group</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=flagtypes.name"> - <bz:name>flagtypes.name</bz:name> - <bz:description>Flag</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=requestees.login_name"> - <bz:name>requestees.login_name</bz:name> - <bz:description>Flag Requestee</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=setters.login_name"> - <bz:name>setters.login_name</bz:name> - <bz:description>Flag Setter</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=content"> - <bz:name>content</bz:name> - <bz:description>Content</bz:description> - </bz:field> - </li> - <li> - <bz:field rdf:about="http://mylar.eclipse.org/bugs218/field.cgi?name=owner_idle_time"> - <bz:name>owner_idle_time</bz:name> - <bz:description>Time Since Owner Touched</bz:description> - </bz:field> - </li> - </Seq> - </bz:fields> -</bz:installation> - -</RDF>
\ No newline at end of file diff --git a/org.eclipse.mylyn.bugzilla.ui/.classpath b/org.eclipse.mylyn.bugzilla.ui/.classpath deleted file mode 100644 index c9c6503f7..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/.classpath +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="src" path="src"/> - <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"> - <accessrules> - <accessrule kind="accessible" pattern="**/internal/**"/> - </accessrules> - </classpathentry> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"> - <accessrules> - <accessrule kind="nonaccessible" pattern="com/sun/**"/> - </accessrules> - </classpathentry> - <classpathentry kind="output" path="bin"/> -</classpath> diff --git a/org.eclipse.mylyn.bugzilla.ui/META-INF/MANIFEST.MF b/org.eclipse.mylyn.bugzilla.ui/META-INF/MANIFEST.MF deleted file mode 100644 index 215a18fea..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/META-INF/MANIFEST.MF +++ /dev/null @@ -1,34 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Mylar Bugzilla Client Ui Plug-in -Bundle-SymbolicName: org.eclipse.mylar.bugzilla.ui; singleton:=true -Bundle-Version: 0.7.0 -Bundle-Activator: org.eclipse.mylar.internal.bugzilla.ui.BugzillaUiPlugin -Bundle-Vendor: Eclipse.org -Bundle-Localization: plugin -Require-Bundle: org.eclipse.ui, - org.eclipse.core.runtime, - org.eclipse.core.resources, - org.eclipse.compare, - org.eclipse.search, - org.eclipse.ui.views, - org.eclipse.ui.ide, - org.eclipse.ui.forms, - org.eclipse.jface.text, - org.eclipse.team.ui, - org.eclipse.team.cvs.ui, - org.eclipse.ui.editors, - org.eclipse.ui.workbench.texteditor, - org.eclipse.update.ui, - org.eclipse.mylar.bugzilla.core, - org.eclipse.mylar.context.core, - org.eclipse.mylar.tasks.ui, - org.eclipse.mylar.tasks.core -Eclipse-AutoStart: true -Export-Package: org.eclipse.mylar.internal.bugzilla.ui, - org.eclipse.mylar.internal.bugzilla.ui.editor, - org.eclipse.mylar.internal.bugzilla.ui.search, - org.eclipse.mylar.internal.bugzilla.ui.tasklist, - org.eclipse.mylar.internal.bugzilla.ui.wizard -Bundle-RequiredExecutionEnvironment: J2SE-1.5 -Bundle-ClassPath: . diff --git a/org.eclipse.mylyn.bugzilla.ui/plugin.xml b/org.eclipse.mylyn.bugzilla.ui/plugin.xml deleted file mode 100644 index 97b9a8136..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/plugin.xml +++ /dev/null @@ -1,153 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<?eclipse version="3.0"?> -<?eclipse version="3.0"?> -<plugin> - - <!-- TODO: remove? --> - <extension - id="searchHit" - name="Bugzilla Search Match" - point="org.eclipse.core.resources.markers"> - <super type="org.eclipse.search.searchmarker"/> - <attribute name="id"/> - <attribute name="href"/> - <attribute name="description"/> - <attribute name="label"/> - <attribute name="severity"/> - <attribute name="priority"/> - <attribute name="platform"/> - <attribute name="status"/> - <attribute name="result"/> - <attribute name="owner"/> - <attribute name="query"/> - </extension> - - <extension - id="org.eclipse.mylar.bugzilla.repository" - name="Bugzilla Repository" - point="org.eclipse.mylar.tasks.ui.repositories"> - - <connectorCore - class="org.eclipse.mylar.internal.bugzilla.core.BugzillaRepositoryConnector" - id="org.eclipse.mylar.bugzilla.tasklist.repositories" - name="Bugzilla Repository Connector" - type="bugzilla"/> - - <connectorUi - brandingIcon="icons/eview16/bugzilla-logo.gif" - class="org.eclipse.mylar.internal.bugzilla.ui.tasklist.BugzillaRepositoryUi" - name="Bugzilla Repository Ui" - overlayIcon="icons/eview16/overlay-bugzilla.gif"/> - - <externalizer - class="org.eclipse.mylar.internal.bugzilla.ui.tasklist.BugzillaTaskExternalizer" - id="org.eclipse.mylar.bugzilla.tasklist.externalizer"/> - </extension> - - <extension - point="org.eclipse.mylar.tasks.ui.editors"> - <editorFactory class="org.eclipse.mylar.internal.bugzilla.ui.tasklist.BugzillaReportEditorFactory"/> - <hyperlinkDetector - class="org.eclipse.mylar.internal.bugzilla.ui.BugzillaTaskHyperlinkDetector" - id="org.eclipse.mylar.tasks.hyperlinkdetector.bugzillatask"/> - </extension> - - <extension - point="org.eclipse.ui.perspectiveExtensions"> - <perspectiveExtension targetID="org.eclipse.jdt.ui.JavaPerspective"> - <newWizardShortcut id="org.eclipse.mylar.bugzilla.bugWizard"/> - </perspectiveExtension> - </extension> - - <extension - point="org.eclipse.ui.decorators"> - <decorator - class="org.eclipse.mylar.internal.bugzilla.ui.tasklist.BugzillaTaskDecorator" - id="org.eclipse.mylar.bugzilla.ui.decorator.task" - label="Mylar Bugzilla Task Decorator" - lightweight="true" - objectClass="org.eclipse.mylar.tasks.core.ITaskListElement" - state="true"> - <description> - Mylar Bugzilla Task Decorator - </description> - </decorator> - </extension> - - <extension - point="org.eclipse.ui.editors"> - <editor - name="Bugzilla viewer" - icon="icons/etool16/task-remote.gif" - class="org.eclipse.mylar.internal.bugzilla.ui.editor.ExistingBugEditor" - id="org.eclipse.mylar.bugzilla.ui.existingBugEditor"> - </editor> - <editor - name="Bugzilla viewer" - icon="icons/etool16/task-remote.gif" - class="org.eclipse.mylar.internal.bugzilla.ui.editor.NewBugzillaTaskEditor" - contributorClass="org.eclipse.mylar.internal.tasks.ui.editors.TaskEditorActionContributor" - id="org.eclipse.mylar.bugzilla.ui.newBugEditor"> - </editor> - <editor - icon="icons/etool16/task-repository.gif" - name="Bugzilla task viewer" - class="org.eclipse.mylar.internal.bugzilla.ui.tasklist.BugzillaTaskEditor" - id="org.eclipse.mylar.bugzilla.ui.tasklist.bugzillaTaskEditor"/> - </extension> - <extension - id="org.eclipse.mylar.bugzilla.help.context" - name="Bugzilla Context-sensitive Help" - point="org.eclipse.help.contexts"> - <contexts - file="bugzilla-help.xml"> - </contexts> - </extension> -<!-- <extension - point="org.eclipse.search.searchPages" - id="org.eclipse.mylar.bugzilla.core.search.searchPage" - name="Bugzilla Search Page"> - <page - class="org.eclipse.mylar.internal.bugzilla.ui.search.BugzillaSearchPage" - enabled="true" - icon="icons/elcl16/bug-search.gif" - id="org.eclipse.mylar.bugzilla.core.search.bugzillaSearchPage" - label="Bugzilla Search" - tabPosition="999"/> - </extension> - <extension - id="BugzillaSearchPage" - point="org.eclipse.search.searchResultViewPages"> - <viewPage - class="org.eclipse.mylar.internal.tasks.ui.search.RepositorySearchResultView" - searchResultClass="org.eclipse.mylar.internal.bugzilla.ui.search.BugzillaSearchResult" - id="org.eclipse.mylar.bugzilla.BugzillaSearchResultPage"/> - </extension>--> - <extension - point="org.eclipse.mylar.tasks.ui.templates"> - <repository - addAutomatically="true" - label="Eclipse.org" - repositoryKind="bugzilla" - urlRepository="https://bugs.eclipse.org/bugs" - version="2.20"/> - </extension> -<!-- <extension - id="org.eclipse.mylar.bugzilla.core.search.repositorySearchPage" - name="Repository Search Page" - point="org.eclipse.search.searchPages"> - <page - class="org.eclipse.mylar.internal.tasks.ui.TaskSearchPage" - enabled="true" - icon="icons/elcl16/bug-search.gif" - id="org.eclipse.mylar.bugzilla.core.search.repositorySearchPage" - label="Repository Search" - tabPosition="999"/> - </extension>--> -<!-- <extension - point="org.eclipse.mylar.tasklist.editors"> - <hyperlinkListener - class="org.eclipse.mylar.internal.bugzilla.ui.BugzillaTaskHyperlinkDetector" - type="org.eclipse.mylar.bugzilla.ui.hyperlinkListener1"/> - </extension>--> -</plugin> diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaAuthenticator.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaAuthenticator.java deleted file mode 100644 index 33682ca51..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaAuthenticator.java +++ /dev/null @@ -1,58 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.ui; - -import java.net.Authenticator; -import java.net.InetAddress; -import java.net.PasswordAuthentication; - -import org.eclipse.update.internal.ui.security.Authentication; -import org.eclipse.update.internal.ui.security.UserValidationDialog; - -/** - * Update Manager Authenticator Sadly there can only be one registered per VM - */ -public class BugzillaAuthenticator extends Authenticator { - // private Authentication savedPasswordAuthentication; - - /* - * @see Authenticator#getPasswordAuthentication() - */ - protected PasswordAuthentication getPasswordAuthentication() { - // String protocol = getRequestingProtocol(); - String host = getRequestingHost(); // can be null; - InetAddress address = getRequestingSite(); // can be null; - // int port = getRequestingPort(); - String prompt = getRequestingPrompt(); // realm or message, not - // documented that can be null - // String scheme = getRequestingScheme(); // not documented that can be - // null - - String hostString = host; - if (hostString == null && address != null) { - address.getHostName(); - } - if (hostString == null) { - hostString = ""; //$NON-NLS-1$ - } - String promptString = prompt; - if (prompt == null) { - promptString = ""; //$NON-NLS-1$ - } - - Authentication auth = UserValidationDialog.getAuthentication(hostString, promptString); - if (auth != null) - return new PasswordAuthentication(auth.getUser(), auth.getPassword().toCharArray()); - else - return null; - } -} diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaHyperLink.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaHyperLink.java deleted file mode 100644 index 14a0dd91d..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaHyperLink.java +++ /dev/null @@ -1,74 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.bugzilla.ui; - -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.hyperlink.IHyperlink; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; - -/** - * @author Mik Kersten - */ -public class BugzillaHyperLink implements IHyperlink { - - private static final String SHOW_BUG_CGI = "/show_bug.cgi?id="; - - private IRegion region; - - private String id; - - private String repositoryUrl; - - public BugzillaHyperLink(IRegion nlsKeyRegion, String id, String repositoryUrl) { - this.region = nlsKeyRegion; - this.id = id; - this.repositoryUrl = repositoryUrl; - } - - public IRegion getHyperlinkRegion() { - return region; - } - - public String getTypeLabel() { - return null; - } - - public String getHyperlinkText() { - return SHOW_BUG_CGI + id; - } - - public void open() { - // TaskRepository repository = - // MylarTaskListPlugin.getRepositoryManager().getRepositoryForActiveTask(BugzillaPlugin.REPOSITORY_KIND); - // TaskRepository repository = - // MylarTaskListPlugin.getRepositoryManager().getDefaultRepository( - // BugzillaPlugin.REPOSITORY_KIND); - if (repositoryUrl != null) { - TaskUiUtil.openRepositoryTask(repositoryUrl, id, repositoryUrl + IBugzillaConstants.POST_ARGS_SHOW_BUG - + id); - // OpenBugzillaReportJob job = new - // OpenBugzillaReportJob(repository.getUrl(), id); - // IProgressService service = - // PlatformUI.getWorkbench().getProgressService(); - // try { - // service.run(true, false, job); - // } catch (Exception e) { - // MylarStatusHandler.fail(e, "Could not open report", true); - // } - } else { - MessageDialog.openError(null, IBugzillaConstants.TITLE_MESSAGE_DIALOG, - "Could not determine repository for report"); - } - } - -} diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaResultMatchAdapter.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaResultMatchAdapter.java deleted file mode 100644 index 6c93d8774..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaResultMatchAdapter.java +++ /dev/null @@ -1,71 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.ui; - -import org.eclipse.mylar.internal.bugzilla.ui.search.IBugzillaResultEditorMatchAdapter; -import org.eclipse.mylar.internal.tasks.ui.editors.AbstractBugEditorInput; -import org.eclipse.mylar.internal.tasks.ui.editors.ExistingBugEditorInput; -import org.eclipse.mylar.internal.tasks.ui.search.RepositorySearchResult; -import org.eclipse.search.ui.text.AbstractTextSearchResult; -import org.eclipse.search.ui.text.Match; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorPart; - -/** - * @author Mik Kersten (clean-up) - */ -public class BugzillaResultMatchAdapter implements IBugzillaResultEditorMatchAdapter { - - /** An empty array of matches */ - private final Match[] EMPTY_ARR = new Match[0]; - - private RepositorySearchResult result; - - /* - * (non-Javadoc) - * - * @see org.eclipse.search.ui.text.IEditorMatchAdapter#isShownInEditor(org.eclipse.search.ui.text.Match, - * org.eclipse.ui.IEditorPart) - */ - public boolean isShownInEditor(Match match, IEditorPart editor) { - if (result == null) - return false; - IEditorInput ei = editor.getEditorInput(); - if (ei instanceof ExistingBugEditorInput) { - AbstractBugEditorInput bi = (AbstractBugEditorInput) ei; - return match.getElement().equals(bi.getRepositoryTaskData()); - } - return false; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.search.ui.text.IEditorMatchAdapter#computeContainedMatches(org.eclipse.search.ui.text.AbstractTextSearchResult, - * org.eclipse.ui.IEditorPart) - */ - public Match[] computeContainedMatches(AbstractTextSearchResult result, IEditorPart editor) { - if (result == null) - return EMPTY_ARR; - IEditorInput ei = editor.getEditorInput(); - if (ei instanceof ExistingBugEditorInput) { - AbstractBugEditorInput bi = (AbstractBugEditorInput) ei; - return result.getMatches(bi.getRepositoryTaskData()); - } - return EMPTY_ARR; - } - - public void setResult(RepositorySearchResult result) { - this.result = result; - } - -} diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaTaskHyperlinkDetector.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaTaskHyperlinkDetector.java deleted file mode 100644 index 5e59cb9f0..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaTaskHyperlinkDetector.java +++ /dev/null @@ -1,69 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.ui; - -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jface.text.hyperlink.IHyperlink; -import org.eclipse.jface.text.hyperlink.IHyperlinkDetector; -import org.eclipse.mylar.internal.tasks.ui.editors.RepositoryTextViewer; -import org.eclipse.mylar.tasks.core.TaskRepository; - -/** - * @author Rob Elves - */ -public class BugzillaTaskHyperlinkDetector implements IHyperlinkDetector { - - private TaskRepository repository; - - public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boolean canShowMultipleHyperlinks) { - if (region == null || textViewer == null) - return null; - - if (!(textViewer instanceof RepositoryTextViewer)) - return null; - - RepositoryTextViewer viewer = (RepositoryTextViewer) textViewer; - - repository = viewer.getRepository(); - - if (repository == null) - return null; - - IDocument document = textViewer.getDocument(); - - int offset = region.getOffset(); - - if (document == null) - return null; - - IRegion lineInfo; - String line; - try { - lineInfo = document.getLineInformationOfOffset(offset); - line = document.get(lineInfo.getOffset(), lineInfo.getLength()); - } catch (BadLocationException ex) { - return null; - } - - int offsetInLine = offset - lineInfo.getOffset(); - - IHyperlink[] links = BugzillaHyperlinkUtil.findBugHyperlinks(repository.getUrl(), offsetInLine, line, lineInfo - .getOffset()); - - return links; - - } - -} diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaUiPlugin.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaUiPlugin.java deleted file mode 100644 index a96aab42c..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaUiPlugin.java +++ /dev/null @@ -1,416 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.bugzilla.ui; - -import java.io.IOException; -import java.net.Authenticator; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.core.runtime.Platform; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaException; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants; -import org.eclipse.mylar.internal.bugzilla.core.RepositoryConfiguration; -import org.eclipse.mylar.internal.bugzilla.ui.search.IBugzillaResultEditorMatchAdapter; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.plugin.AbstractUIPlugin; -import org.eclipse.update.internal.ui.UpdateUI; -import org.osgi.framework.BundleContext; - -/** - * The main plugin class to be used in the desktop. - * - * @author Mik Kersten - */ -public class BugzillaUiPlugin extends AbstractUIPlugin { - - public static final String PLUGIN_ID = "org.eclipse.mylar.bugzilla.ui"; - - // The id's of other bugzilla packages - public static final String EXISTING_BUG_EDITOR_ID = BugzillaUiPlugin.PLUGIN_ID + ".existingBugEditor"; - - public static final String NEW_BUG_EDITOR_ID = BugzillaUiPlugin.PLUGIN_ID + ".newBugEditor"; - - public static final String SEARCH_PAGE_ID = BugzillaUiPlugin.PLUGIN_ID + ".search.bugzillaSearchPage"; - - public static final String SEARCH_PAGE_CONTEXT = BugzillaUiPlugin.PLUGIN_ID + ".bugzillaSearchContext"; - - public static final String EDITOR_PAGE_CONTEXT = BugzillaUiPlugin.PLUGIN_ID + ".bugzillaEditorContext"; - - // The is's for hit markers used in the label provider and sorters - public static final String HIT_MARKER_ATTR_ID = "id"; - - public static final String HIT_MARKER_ATTR_REPOSITORY = "repository"; - - public static final String HIT_MARKER_ATTR_HREF = "href"; - - public static final String HIT_MARKER_ATTR_DESC = "description"; - - public static final String HIT_MARKER_ATTR_LABEL = "label"; - - public static final String HIT_MARKER_ATTR_SEVERITY = "severity"; - - public static final String HIT_MARKER_ATTR_PRIORITY = "priority"; - - public static final String HIT_MARKER_ATTR_PLATFORM = "platform"; - - public static final String HIT_MARKER_ATTR_STATE = "state"; - - public static final String HIT_MARKER_ATTR_RESULT = "result"; - - public static final String HIT_MARKER_ATTR_OWNER = "owner"; - - public static final String HIT_MARKER_ATTR_QUERY = "query"; - - /** - * XXX: remove? - */ - public static final String HIT_MARKER_ID = BugzillaUiPlugin.PLUGIN_ID + ".searchHit"; - - private static BugzillaUiPlugin plugin; - - private Authenticator authenticator = null; - - private static IBugzillaResultEditorMatchAdapter resultEditorMatchAdapter = null; - - public static final char PREF_DELIM_REPOSITORY = ':'; - - public BugzillaUiPlugin() { - plugin = this; - } - - public void start(BundleContext context) throws Exception { - super.start(context); - getPreferenceStore().setDefault(IBugzillaConstants.MAX_RESULTS, 100); - - IPath repConfigCacheFile = getProductConfigurationCachePath(); - if(repConfigCacheFile != null) { - BugzillaCorePlugin.setConfigurationCacheFile(repConfigCacheFile.toFile()); - } - - BugzillaUiPlugin.setResultEditorMatchAdapter(new BugzillaResultMatchAdapter()); - - // TODO: consider removing - authenticator = UpdateUI.getDefault().getAuthenticator(); - if (authenticator == null) { - authenticator = new BugzillaAuthenticator(); - } - Authenticator.setDefault(authenticator); - - // migrateOldAuthenticationData(); - } - - /** - * Returns the path to the file cacheing the product configuration. - */ - private static IPath getProductConfigurationCachePath() { - IPath stateLocation = Platform.getStateLocation(BugzillaCorePlugin.getDefault().getBundle()); - IPath configFile = stateLocation.append("repositoryConfigurations"); - return configFile; - } - - public int getMaxResults() { - return getPreferenceStore().getInt(IBugzillaConstants.MAX_RESULTS); - } - - /** - * This method is called when the plug-in is stopped - */ - public void stop(BundleContext context) throws Exception { - super.stop(context); - plugin = null; - } - - public static IBugzillaResultEditorMatchAdapter getResultEditorMatchAdapter() { - return resultEditorMatchAdapter; - } - - public static void setResultEditorMatchAdapter(IBugzillaResultEditorMatchAdapter resultEditorMatchAdapter) { - BugzillaUiPlugin.resultEditorMatchAdapter = resultEditorMatchAdapter; - } - - /** - * Returns the shared instance. - */ - public static BugzillaUiPlugin getDefault() { - return plugin; - } - - /** - * Returns an image descriptor for the image file at the given plug-in - * relative path. - * - * @param path - * the path - * @return the image descriptor - */ - public static ImageDescriptor getImageDescriptor(String path) { - return AbstractUIPlugin.imageDescriptorFromPlugin(PLUGIN_ID, path); - } - - public static String[] getQueryOptions(String prefId, String[] selectedProducts, String repositoryUrl) { - IPreferenceStore prefs = BugzillaUiPlugin.getDefault().getPreferenceStore(); - if ((prefId.equals(IBugzillaConstants.VALUES_COMPONENT) || prefId.equals(IBugzillaConstants.VALUES_VERSION) || prefId - .equals(IBugzillaConstants.VALUES_TARGET)) - && selectedProducts != null) { - List<String> options = new ArrayList<String>(); - for (String product : selectedProducts) { - for (String option : convertQueryOptionsToArray(prefs.getString(prefId + PREF_DELIM_REPOSITORY - + repositoryUrl + PREF_DELIM_REPOSITORY + product))) { - if(!options.contains(option)) options.add(option); - } - } - return options.toArray(new String[options.size()]); - } else { - return convertQueryOptionsToArray(prefs.getString(prefId + PREF_DELIM_REPOSITORY + repositoryUrl)); - } - } - - private static String queryOptionsToString(List<String> array) { - - StringBuffer buffer = new StringBuffer(); - for (String string : array) { - buffer.append(string); - buffer.append("!"); - } - - return buffer.toString(); - } - - private static String[] convertQueryOptionsToArray(String values) { - // create a new string buffer and array list - StringBuffer buffer = new StringBuffer(); - List<String> options = new ArrayList<String>(); - - char[] chars = values.toCharArray(); - for (int i = 0; i < chars.length; i++) { - if (chars[i] == '!') { - options.add(buffer.toString()); - buffer = new StringBuffer(); - } else { - buffer.append(chars[i]); - } - } - - // create a new string array with the same size as the array list - String[] array = new String[options.size()]; - - // put each element from the list into the array - for (int j = 0; j < options.size(); j++) - array[j] = options.get(j); - return array; - } - - public static String getMostRecentQuery() { - return plugin.getPreferenceStore().getString(IBugzillaConstants.MOST_RECENT_QUERY); - } - - /** - * Update all of the query options for the bugzilla search page - * - * @param monitor - * A reference to a progress monitor - * @throws IOException - * @throws NoSuchAlgorithmException - * @throws KeyManagementException - * @throws BugzillaException - */ - public static void updateQueryOptions(TaskRepository repository, IProgressMonitor monitor) { - - String repositoryUrl = repository.getUrl(); - - if(monitor.isCanceled()) - throw new OperationCanceledException(); - - // TODO: pass monitor along since it is this call that does the work and can hang due to network IO - RepositoryConfiguration config = null; - try { - config = BugzillaCorePlugin.getRepositoryConfiguration(false, repository.getUrl(), TasksUiPlugin.getDefault().getProxySettings(), repository.getUserName(), repository.getPassword(), repository.getCharacterEncoding()); - } catch (Exception e) { - MylarStatusHandler.fail(e, "Could not retrieve repository configuration for: " + repository, true); - return; - } - - if(monitor.isCanceled()) - throw new OperationCanceledException(); - - // get the preferences store so that we can change the data in it - IPreferenceStore prefs = BugzillaUiPlugin.getDefault().getPreferenceStore(); - - prefs.setValue(IBugzillaConstants.VALUES_STATUS + PREF_DELIM_REPOSITORY + repositoryUrl, - queryOptionsToString(config.getStatusValues())); - monitor.worked(1); - - prefs.setValue(IBugzillaConstants.VALUSE_STATUS_PRESELECTED + PREF_DELIM_REPOSITORY + repositoryUrl, - queryOptionsToString(config.getOpenStatusValues())); - monitor.worked(1); - - prefs.setValue(IBugzillaConstants.VALUES_RESOLUTION + PREF_DELIM_REPOSITORY + repositoryUrl, - queryOptionsToString(config.getResolutions())); - monitor.worked(1); - - prefs.setValue(IBugzillaConstants.VALUES_SEVERITY + PREF_DELIM_REPOSITORY + repositoryUrl, - queryOptionsToString(config.getSeverities())); - monitor.worked(1); - - prefs.setValue(IBugzillaConstants.VALUES_PRIORITY + PREF_DELIM_REPOSITORY + repositoryUrl, - queryOptionsToString(config.getPriorities())); - monitor.worked(1); - - prefs.setValue(IBugzillaConstants.VALUES_HARDWARE + PREF_DELIM_REPOSITORY + repositoryUrl, - queryOptionsToString(config.getPlatforms())); - monitor.worked(1); - - prefs.setValue(IBugzillaConstants.VALUES_OS + PREF_DELIM_REPOSITORY + repositoryUrl, - queryOptionsToString(config.getOSs())); - monitor.worked(1); - - prefs.setValue(IBugzillaConstants.VALUES_PRODUCT + PREF_DELIM_REPOSITORY + repositoryUrl, - queryOptionsToString(config.getProducts())); - monitor.worked(1); - - prefs.setValue(IBugzillaConstants.VALUES_COMPONENT + PREF_DELIM_REPOSITORY + repositoryUrl, - queryOptionsToString(config.getComponents())); - monitor.worked(1); - - prefs.setValue(IBugzillaConstants.VALUES_VERSION + PREF_DELIM_REPOSITORY + repositoryUrl, - queryOptionsToString(config.getVersions())); - monitor.worked(1); - - prefs.setValue(IBugzillaConstants.VALUES_TARGET + PREF_DELIM_REPOSITORY + repositoryUrl, - queryOptionsToString(config.getTargetMilestones())); - monitor.worked(1); - - for (String product : config.getProducts()) { - prefs.setValue(IBugzillaConstants.VALUES_COMPONENT + PREF_DELIM_REPOSITORY + repositoryUrl - + PREF_DELIM_REPOSITORY + product, queryOptionsToString(config.getComponents(product))); - monitor.worked(1); - - prefs.setValue(IBugzillaConstants.VALUES_VERSION + PREF_DELIM_REPOSITORY + repositoryUrl - + PREF_DELIM_REPOSITORY + product, queryOptionsToString(config.getVersions(product))); - monitor.worked(1); - - prefs.setValue(IBugzillaConstants.VALUES_TARGET + PREF_DELIM_REPOSITORY + repositoryUrl - + PREF_DELIM_REPOSITORY + product, queryOptionsToString(config.getTargetMilestones(product))); - monitor.worked(1); - } - } -} - -// @SuppressWarnings("unchecked") -// private void migrateOldAuthenticationData() { -// String OLD_PREF_SERVER = "BUGZILLA_SERVER"; -// String serverUrl = -// BugzillaPlugin.getDefault().getPreferenceStore().getString(OLD_PREF_SERVER); -// if (serverUrl != null && serverUrl.trim() != "") { -// URL oldFakeUrl = null; -// try { -// oldFakeUrl = new URL("http://org.eclipse.mylar.bugzilla"); -// } catch (MalformedURLException e) { -// BugzillaPlugin.log(new Status(IStatus.WARNING, BugzillaPlugin.PLUGIN_ID, -// IStatus.OK, -// "Bad temp server url: BugzillaPreferencePage", e)); -// } -// -// String user = ""; -// String password = ""; -// Map<String, String> map = Platform.getAuthorizationInfo(oldFakeUrl, -// "Bugzilla", -// BugzillaPreferencePage.AUTH_SCHEME); -// -// // get the information from the map and save it -// if (map != null && !map.isEmpty()) { -// String username = map.get(BugzillaPreferencePage.INFO_USERNAME); -// if (username != null) -// user = username; -// -// String pwd = map.get(BugzillaPreferencePage.INFO_PASSWORD); -// if (pwd != null) -// password = pwd; -// } -// TaskRepository repository; -// // try { -// repository = new TaskRepository(BugzillaPlugin.REPOSITORY_KIND, serverUrl); -// repository.setAuthenticationCredentials(user, password); -// MylarTaskListPlugin.getRepositoryManager().addRepository(repository); -// BugzillaPlugin.getDefault().getPreferenceStore().setValue(OLD_PREF_SERVER, -// ""); -// // } catch (MalformedURLException e) { -// // MylarStatusHandler.fail(e, "could not create default repository", -// // true); -// // } -// try { -// // reset the authorization -// Platform.addAuthorizationInfo(oldFakeUrl, "Bugzilla", -// BugzillaPreferencePage.AUTH_SCHEME, new HashMap<String, String>()); -// } catch (CoreException e) { -// // ignore -// } -// } -// } - -// private void readOfflineReportsFile() { -// IPath offlineReportsPath = getOfflineReportsFilePath(); -// -// try { -// offlineReportsFile = new OfflineTaskManager(offlineReportsPath.toFile(), -// true); -// } catch (Exception e) { -// MylarStatusHandler.log(e, -// "Could not restore offline Bugzilla reports file, creating new one -// (possible version incompatibility)"); -// offlineReportsPath.toFile().delete(); -// // if (offlineReportsPath.toFile().delete()) { -// try { -// offlineReportsFile = new OfflineTaskManager(offlineReportsPath.toFile(), -// false); -// } catch (Exception e1) { -// MylarStatusHandler.fail(e, "could not reset offline Bugzilla reports -// file", true); -// } -// // } else { -// // MylarStatusHandler.fail(null, "reset of Bugzilla offline reports file -// failed", true); -// // } -// } -// } -// -// /** -// * Returns the path to the file cacheing the offline bug reports. -// */ -// private IPath getOfflineReportsFilePath() { -// IPath stateLocation = -// Platform.getStateLocation(BugzillaPlugin.getDefault().getBundle()); -// IPath configFile = stateLocation.append("offlineReports"); -// return configFile; -// } -// -// public OfflineTaskManager getOfflineReportsFile() { -// if (offlineReportsFile == null) { -// MylarStatusHandler.fail(null, "Offline reports file not created, try -// restarting.", true); -// } -// return offlineReportsFile; -// } - -// public List<BugzillaReport> getSavedBugReports() { -// return offlineReportsFile.elements(); -// }
\ No newline at end of file diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/BugSubmissionHandler.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/BugSubmissionHandler.java deleted file mode 100644 index df614100a..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/BugSubmissionHandler.java +++ /dev/null @@ -1,173 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.ui.editor; - -import java.io.IOException; -import java.net.ConnectException; -import java.net.Proxy; -import java.security.GeneralSecurityException; -import java.util.ArrayList; -import java.util.Set; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.IJobChangeListener; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaException; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaReportSubmitForm; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaTask; -import org.eclipse.mylar.internal.bugzilla.core.PossibleBugzillaFailureException; -import org.eclipse.mylar.internal.bugzilla.core.UnrecognizedReponseException; -import org.eclipse.mylar.internal.bugzilla.ui.BugzillaUiPlugin; -import org.eclipse.mylar.internal.tasks.ui.views.TaskRepositoriesView; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Mik Kersten - */ -public class BugSubmissionHandler { - - private static final String LABEL_JOB_SUBMIT = "Submitting to Bugzilla repository"; - - private AbstractRepositoryConnector connector; - - public BugSubmissionHandler(AbstractRepositoryConnector connector) { - this.connector = connector; - } - - public void submitBugReport(final BugzillaReportSubmitForm form, IJobChangeListener listener, boolean synchExec, final boolean addToTaskListRoot) { - if (synchExec) { - try { - String submittedBugId = form.submitReportToRepository(); - if (form.isNewBugPost()) { - handleNewBugPost(form.getTaskData(), submittedBugId, addToTaskListRoot); - } else { - handleExistingBugPost(form.getTaskData(), submittedBugId); - } - } catch (Exception e) { - throw new RuntimeException(e); - } - } else { - Job submitJob = new Job(LABEL_JOB_SUBMIT) { - - @Override - protected IStatus run(IProgressMonitor monitor) { - try { - String submittedBugId = ""; - try { - submittedBugId = form.submitReportToRepository(); - } catch (ConnectException e) { - form.setProxySettings(Proxy.NO_PROXY); - submittedBugId = form.submitReportToRepository(); - } - - if (form.isNewBugPost()) { - handleNewBugPost(form.getTaskData(), submittedBugId, addToTaskListRoot); - return new Status(Status.OK, BugzillaUiPlugin.PLUGIN_ID, Status.OK, submittedBugId, null); - } else { - handleExistingBugPost(form.getTaskData(), submittedBugId); - return Status.OK_STATUS; - } - } catch (GeneralSecurityException e) { - return new Status( - Status.OK, - BugzillaUiPlugin.PLUGIN_ID, - Status.ERROR, - "Bugzilla could not post your bug, probably because your credentials are incorrect. Ensure proper repository configuration in " - + TaskRepositoriesView.NAME + ".", e); - } catch (IOException e) { - return new Status(Status.OK, BugzillaUiPlugin.PLUGIN_ID, Status.ERROR, - "Check repository credentials and connectivity.", e); - } catch (UnrecognizedReponseException e) { - return new Status(Status.OK, BugzillaUiPlugin.PLUGIN_ID, Status.INFO, - "Unrecognized response from server", e); - } catch (BugzillaException e) { - // MylarStatusHandler.fail(e, "Failed to submit", - // false); - String message = e.getMessage(); - return new Status(Status.OK, BugzillaUiPlugin.PLUGIN_ID, Status.ERROR, - "Bugzilla could not post your bug. \n\n" + message, e); - } catch (PossibleBugzillaFailureException e) { - return new Status(Status.OK, BugzillaUiPlugin.PLUGIN_ID, Status.INFO, - "Possible bugzilla failure", e); - } - } - }; - - submitJob.addJobChangeListener(listener); - submitJob.schedule(); - } - } - - private void handleNewBugPost(RepositoryTaskData taskData, String resultId, boolean addToRoot) throws BugzillaException { - int bugId = -1; - try { - bugId = Integer.parseInt(resultId); - } catch (NumberFormatException e) { - throw new BugzillaException("Invalid bug id returned by repository."); - } - - TaskRepository repository = TasksUiPlugin.getRepositoryManager().getRepository(taskData.getRepositoryKind(), - taskData.getRepositoryUrl()); - - BugzillaTask newTask = new BugzillaTask(AbstractRepositoryTask.getHandle(repository.getUrl(), bugId), - "<bugzilla info>", true); - - if (addToRoot) { - TasksUiPlugin.getTaskListManager().getTaskList().addTask(newTask, - TasksUiPlugin.getTaskListManager().getTaskList().getRootCategory()); - } else { - TasksUiPlugin.getTaskListManager().getTaskList().addTask(newTask); - } - - java.util.List<TaskRepository> repositoriesToSync = new ArrayList<TaskRepository>(); - repositoriesToSync.add(repository); - TasksUiPlugin.getSynchronizationScheduler().synchNow(0, repositoriesToSync); - - } - - private void handleExistingBugPost(RepositoryTaskData repositoryTaskData, String resultId) { - try { - String handle = AbstractRepositoryTask.getHandle(repositoryTaskData.getRepositoryUrl(), repositoryTaskData - .getId()); - ITask task = TasksUiPlugin.getTaskListManager().getTaskList().getTask(handle); - if (task != null) { - Set<AbstractRepositoryQuery> queriesWithHandle = TasksUiPlugin.getTaskListManager().getTaskList() - .getQueriesForHandle(task.getHandleIdentifier()); - TasksUiPlugin.getSynchronizationManager().synchronize(connector, queriesWithHandle, null, Job.SHORT, 0, - false); - TaskRepository repository = TasksUiPlugin.getRepositoryManager().getRepository( - repositoryTaskData.getRepositoryKind(), repositoryTaskData.getRepositoryUrl()); - TasksUiPlugin.getSynchronizationManager().synchronizeChanged(connector, repository); - if (task instanceof AbstractRepositoryTask) { - AbstractRepositoryTask repositoryTask = (AbstractRepositoryTask) task; - // TODO: This is set to null in order for update to bypass - // ui override check with user - // Need to change how this is achieved. - repositoryTask.setTaskData(null); - TasksUiPlugin.getSynchronizationManager().synchronize(connector, repositoryTask, true, null); - } - } - - } catch (Exception e) { - throw new RuntimeException(e); - } - } - -} diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/ExistingBugEditor.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/ExistingBugEditor.java deleted file mode 100644 index 40550956a..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/ExistingBugEditor.java +++ /dev/null @@ -1,1108 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.bugzilla.ui.editor; - -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; -import java.util.StringTokenizer; - -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.IJobChangeEvent; -import org.eclipse.core.runtime.jobs.JobChangeAdapter; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.layout.GridDataFactory; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaReportElement; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaReportSubmitForm; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaRepositoryConnector; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.internal.tasks.ui.editors.AbstractBugEditorInput; -import org.eclipse.mylar.internal.tasks.ui.editors.AbstractRepositoryTaskEditor; -import org.eclipse.mylar.internal.tasks.ui.editors.ExistingBugEditorInput; -import org.eclipse.mylar.internal.tasks.ui.editors.MylarTaskEditor; -import org.eclipse.mylar.internal.tasks.ui.editors.RepositoryTaskOutlineNode; -import org.eclipse.mylar.internal.tasks.ui.editors.RepositoryTaskSelection; -import org.eclipse.mylar.internal.tasks.ui.util.WebBrowserDialog; -import org.eclipse.mylar.internal.tasks.ui.views.DatePicker; -import org.eclipse.mylar.internal.tasks.ui.views.TaskRepositoriesView; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.RepositoryTaskAttribute; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.mylar.tasks.core.TaskComment; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask.RepositoryTaskSyncState; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.layout.RowLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.List; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorSite; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.forms.editor.FormEditor; -import org.eclipse.ui.forms.events.HyperlinkAdapter; -import org.eclipse.ui.forms.events.HyperlinkEvent; -import org.eclipse.ui.forms.widgets.ExpandableComposite; -import org.eclipse.ui.forms.widgets.FormToolkit; -import org.eclipse.ui.forms.widgets.Hyperlink; -import org.eclipse.ui.forms.widgets.Section; - -/** - * An editor used to view a bug report that exists on a server. It uses a - * <code>BugReport</code> object to store the data. - * - * @author Mik Kersten (hardening of prototype) - * @author Rob Elves (adaption to Eclipse Forms) - * @authos Jeff Pound (Attachment work) - */ -public class ExistingBugEditor extends AbstractRepositoryTaskEditor { - - private static final String SECTION_TITLE_PEOPLE = "People"; - - private static final String LABEL_TIME_TRACKING = "Bugzilla Time Tracking"; - - private BugSubmissionHandler submissionHandler; - - protected Set<String> removeCC = new HashSet<String>(); - - // protected BugzillaCompareInput compareInput; - - // protected Button compareButton; - - protected List keyWordsList; - - protected Text keywordsText; - - protected List ccList; - - protected Text ccText; - - protected Text urlText; - - protected RepositoryTaskData taskData; - - protected AbstractRepositoryConnector connector; - - protected Text estimateText; - - protected Text actualText; - - protected Text remainingText; - - protected Text addTimeText; - - protected Text deadlineText; - - protected DatePicker deadlinePicker; - - protected Text votesText; - - /** - * Creates a new <code>ExistingBugEditor</code>. - */ - public ExistingBugEditor(FormEditor editor) { - super(editor); - - // Set up the input for comparing the bug report to the server - // CompareConfiguration config = new CompareConfiguration(); - // config.setLeftEditable(false); - // config.setRightEditable(false); - // config.setLeftLabel("Local Bug Report"); - // config.setRightLabel("Remote Bug Report"); - // config.setLeftImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT)); - // config.setRightImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT)); - // compareInput = new BugzillaCompareInput(config); - } - - @Override - public void init(IEditorSite site, IEditorInput input) { - if (!(input instanceof ExistingBugEditorInput)) - return;// MylarStatusHandler.log("Invalid Input: Must be - // ExistingBugEditorInput", this); - - editorInput = (AbstractBugEditorInput) input; - taskData = editorInput.getRepositoryTaskData(); - repository = editorInput.getRepository(); - connector = TasksUiPlugin.getRepositoryManager().getRepositoryConnector(repository.getKind()); - submissionHandler = new BugSubmissionHandler(connector); - - setSite(site); - setInput(input); - - taskOutlineModel = RepositoryTaskOutlineNode.parseBugReport(editorInput.getRepositoryTaskData()); - - // restoreBug(); - isDirty = false; - updateEditorTitle(); - } - - @Override - protected String getTitleString() { - return taskData.getLabel();// + ": " + checkText(summaryVal); - } - - @Override - public void submitBug() { - submitButton.setEnabled(false); - showBusy(true); - updateBug(); - - final AbstractRepositoryTask modifiedTask = (AbstractRepositoryTask) TasksUiPlugin.getTaskListManager() - .getTaskList().getTask(AbstractRepositoryTask.getHandle(repository.getUrl(), taskData.getId())); - - if (modifiedTask != null) { - modifiedTask.setSyncState(RepositoryTaskSyncState.OUTGOING); - } - - BugzillaReportSubmitForm bugzillaReportSubmitForm; - - try { - if (taskData.isLocallyCreated()) { - boolean wrap = IBugzillaConstants.BugzillaServerVersion.SERVER_218.equals(repository.getVersion()); - bugzillaReportSubmitForm = BugzillaReportSubmitForm.makeNewBugPost(repository.getUrl(), repository - .getUserName(), repository.getPassword(), editorInput.getProxySettings(), repository - .getCharacterEncoding(), taskData, wrap); - } else { - bugzillaReportSubmitForm = BugzillaReportSubmitForm.makeExistingBugPost(taskData, repository.getUrl(), - repository.getUserName(), repository.getPassword(), editorInput.getProxySettings(), removeCC, - repository.getCharacterEncoding()); - } - } catch (UnsupportedEncodingException e) { - // should never get here but just in case... - MessageDialog.openError(null, "Posting Error", "Ensure proper encoding selected in " - + TaskRepositoriesView.NAME + "."); - return; - } - - final BugzillaRepositoryConnector bugzillaRepositoryClient = (BugzillaRepositoryConnector) TasksUiPlugin - .getRepositoryManager().getRepositoryConnector(BugzillaCorePlugin.REPOSITORY_KIND); - - JobChangeAdapter submitJobListener = new JobChangeAdapter() { - - public void done(final IJobChangeEvent event) { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - if (event.getJob().getResult().getCode() == Status.OK - && event.getJob().getResult().getMessage() != null) {// - // Attach context - if (getAttachContext()) { - // ITask task = - // TasksUiPlugin.getTaskListManager().getTaskList().getTask( - // AbstractRepositoryTask.getHandle(repository.getUrl(), - // taskData.getId())); - try { - bugzillaRepositoryClient.attachContext(repository, modifiedTask, "", TasksUiPlugin - .getDefault().getProxySettings()); - } catch (Exception e) { - MylarStatusHandler.fail(e, "Failed to attach task context.", true); - } - } - close(); - return; - } else if (event.getJob().getResult().getCode() == Status.INFO) { - WebBrowserDialog.openAcceptAgreement(null, IBugzillaConstants.REPORT_SUBMIT_ERROR, event - .getJob().getResult().getMessage(), event.getJob().getResult().getException() - .getMessage()); - submitButton.setEnabled(true); - ExistingBugEditor.this.showBusy(false); - } else if (event.getJob().getResult().getCode() == Status.ERROR) { - MessageDialog.openError(null, IBugzillaConstants.REPORT_SUBMIT_ERROR, event.getResult() - .getMessage()); - submitButton.setEnabled(true); - ExistingBugEditor.this.showBusy(false); - } - } - }); - } - }; - submissionHandler.submitBugReport(bugzillaReportSubmitForm, submitJobListener, false, false); - } - - @Override - protected void createPeopleLayout(Composite composite) { - FormToolkit toolkit = getManagedForm().getToolkit(); - Section peopleSection = createSection(composite, SECTION_TITLE_PEOPLE); - GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).applyTo(peopleSection); - Composite peopleComposite = toolkit.createComposite(peopleSection); - GridLayout layout = new GridLayout(2, false); - layout.marginRight = 5; - peopleComposite.setLayout(layout); - GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).applyTo(peopleComposite); - addSelfToCC(peopleComposite); - Label label = toolkit.createLabel(peopleComposite, BugzillaReportElement.ASSIGNED_TO.toString()); - GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.DEFAULT).applyTo(label); - Composite textFieldComposite = toolkit.createComposite(peopleComposite); - GridLayout textLayout = new GridLayout(); - textLayout.marginWidth = 1; - textLayout.verticalSpacing = 0; - textLayout.marginHeight = 0; - textLayout.marginRight = 5; - textFieldComposite.setLayout(textLayout); - String assignedToString = getRepositoryTaskData().getAttributeValue( - BugzillaReportElement.ASSIGNED_TO.getKeyString()); - toolkit.createText(textFieldComposite, assignedToString, SWT.FLAT | SWT.READ_ONLY); - - label = toolkit.createLabel(peopleComposite, BugzillaReportElement.REPORTER.toString()); - GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.DEFAULT).applyTo(label); - textFieldComposite = toolkit.createComposite(peopleComposite); - textLayout = new GridLayout(); - textLayout.marginWidth = 1; - textLayout.verticalSpacing = 0; - textLayout.marginHeight = 0; - textFieldComposite.setLayout(textLayout); - String reporterString = getRepositoryTaskData() - .getAttributeValue(BugzillaReportElement.REPORTER.getKeyString()); - toolkit.createText(textFieldComposite, reporterString, SWT.FLAT | SWT.READ_ONLY); - addCCList("", peopleComposite); - getManagedForm().getToolkit().paintBordersFor(peopleComposite); - peopleSection.setClient(peopleComposite); - } - - @Override - protected void createCustomAttributeLayout(Composite composite) { - FormToolkit toolkit = getManagedForm().getToolkit(); - - toolkit.createLabel(composite, BugzillaReportElement.DEPENDSON.toString()); - Composite textFieldComposite = toolkit.createComposite(composite); - GridLayout textLayout = new GridLayout(); - textLayout.marginWidth = 1; - textLayout.marginHeight = 3; - textLayout.verticalSpacing = 3; - textFieldComposite.setLayout(textLayout); - GridData textData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); - textData.horizontalSpan = 1; - textData.widthHint = 135; - RepositoryTaskAttribute attribute = this.getRepositoryTaskData().getAttribute( - BugzillaReportElement.DEPENDSON.getKeyString()); - if (!attribute.isReadOnly()) { - final Text text = toolkit.createText(textFieldComposite, attribute.getValue(), SWT.FLAT); - text.setLayoutData(textData); - toolkit.paintBordersFor(textFieldComposite); - text.setData(attribute); - text.addListener(SWT.KeyUp, new Listener() { - public void handleEvent(Event event) { - String sel = text.getText(); - RepositoryTaskAttribute a = (RepositoryTaskAttribute) text.getData(); - if (!(a.getValue().equals(sel))) { - a.setValue(sel); - markDirty(true); - } - } - }); - text.addListener(SWT.FocusIn, new GenericListener()); - } - - toolkit.createLabel(composite, BugzillaReportElement.BLOCKED.toString()); - textFieldComposite = toolkit.createComposite(composite); - textLayout = new GridLayout(); - textLayout.marginWidth = 1; - textLayout.marginHeight = 3; - textLayout.verticalSpacing = 3; - textFieldComposite.setLayout(textLayout); - textData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); - textData.horizontalSpan = 1; - textData.widthHint = 135; - attribute = this.getRepositoryTaskData().getAttribute(BugzillaReportElement.BLOCKED.getKeyString()); - if (!attribute.isReadOnly()) { - final Text text = toolkit.createText(textFieldComposite, attribute.getValue(), SWT.FLAT); - text.setLayoutData(textData); - toolkit.paintBordersFor(textFieldComposite); - text.setData(attribute); - text.addListener(SWT.KeyUp, new Listener() { - public void handleEvent(Event event) { - String sel = text.getText(); - RepositoryTaskAttribute a = (RepositoryTaskAttribute) text.getData(); - if (!(a.getValue().equals(sel))) { - a.setValue(sel); - markDirty(true); - } - } - }); - text.addListener(SWT.FocusIn, new GenericListener()); - } - - - - String dependson = getRepositoryTaskData().getAttributeValue(BugzillaReportElement.DEPENDSON.getKeyString()); - String blocked = getRepositoryTaskData().getAttributeValue(BugzillaReportElement.BLOCKED.getKeyString()); - boolean addHyperlinks = (dependson != null && dependson.length() > 0) - || (blocked != null && blocked.length() > 0); - - // Hyperlink showDependencyTree = toolkit.createHyperlink(composite, - // "Show dependency tree", SWT.NONE); - // showDependencyTree.addHyperlinkListener(new HyperlinkAdapter() { - // public void linkActivated(HyperlinkEvent e) { - // if (ExistingBugEditor.this.getEditor() instanceof MylarTaskEditor) { - // MylarTaskEditor mylarTaskEditor = (MylarTaskEditor) - // ExistingBugEditor.this.getEditor(); - // mylarTaskEditor.displayInBrowser(repository.getUrl() + - // IBugzillaConstants.DEPENDENCY_TREE_URL - // + getRepositoryTaskData().getId()); - // } - // } - // }); - - if (addHyperlinks) { - toolkit.createLabel(composite, ""); - addBugHyperlinks(composite, BugzillaReportElement.DEPENDSON.getKeyString()); - } - - // Hyperlink showDependencyGraph = toolkit.createHyperlink(composite, - // "Show dependency graph", SWT.NONE); - // showDependencyGraph.addHyperlinkListener(new HyperlinkAdapter() { - // public void linkActivated(HyperlinkEvent e) { - // if (ExistingBugEditor.this.getEditor() instanceof MylarTaskEditor) { - // MylarTaskEditor mylarTaskEditor = (MylarTaskEditor) - // ExistingBugEditor.this.getEditor(); - // mylarTaskEditor.displayInBrowser(repository.getUrl() + - // IBugzillaConstants.DEPENDENCY_GRAPH_URL - // + getRepositoryTaskData().getId()); - // } - // } - // }); - - if (addHyperlinks) { - toolkit.createLabel(composite, ""); - addBugHyperlinks(composite, BugzillaReportElement.BLOCKED.getKeyString()); - } - - try { - addKeywordsList(getRepositoryTaskData().getAttributeValue(RepositoryTaskAttribute.KEYWORDS), composite); - } catch (IOException e) { - MessageDialog.openInformation(null, "Attribute Display Error", - "Could not retrieve keyword list, ensure proper configuration in " + TaskRepositoriesView.NAME - + "\n\nError reported: " + e.getMessage()); - } - - addVoting(composite); - - Hyperlink viewActivity = toolkit.createHyperlink(composite, "Show Bug Activity", SWT.NONE); - viewActivity.addHyperlinkListener(new HyperlinkAdapter() { - public void linkActivated(HyperlinkEvent e) { - if (ExistingBugEditor.this.getEditor() instanceof MylarTaskEditor) { - MylarTaskEditor mylarTaskEditor = (MylarTaskEditor) ExistingBugEditor.this.getEditor(); - mylarTaskEditor.displayInBrowser(repository.getUrl() + IBugzillaConstants.BUG_ACTIVITY_URL - + getRepositoryTaskData().getId()); - } - } - }); - - if (getRepositoryTaskData().getAttribute(BugzillaReportElement.ESTIMATED_TIME.getKeyString()) != null) - addBugzillaTimeTracker(toolkit, composite); - - } - -// protected void createDependencyLayout(Composite composite) { -// FormToolkit toolkit = getManagedForm().getToolkit(); -// final Section section = createSection(composite, "Dependencies"); -// boolean expand = false; -// final Composite sectionComposite = toolkit.createComposite(section); -// section.setClient(sectionComposite); -// GridLayout sectionLayout = new GridLayout(7, false); -// sectionComposite.setLayout(sectionLayout); -// -// toolkit.createLabel(sectionComposite, BugzillaReportElement.DEPENDSON.toString()); -// Composite textFieldComposite = toolkit.createComposite(sectionComposite); -// GridLayout textLayout = new GridLayout(); -// textLayout.marginWidth = 1; -// textLayout.marginHeight = 3; -// textLayout.verticalSpacing = 3; -// textFieldComposite.setLayout(textLayout); -// GridData textData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); -// textData.horizontalSpan = 1; -// textData.widthHint = 135; -// RepositoryTaskAttribute attribute = this.getRepositoryTaskData().getAttribute( -// BugzillaReportElement.DEPENDSON.getKeyString()); -// expand = attribute.getValue() != null && attribute.getValue().length() > 0; -// if (!attribute.isReadOnly()) { -// final Text text = toolkit.createText(textFieldComposite, attribute.getValue(), SWT.FLAT); -// text.setLayoutData(textData); -// toolkit.paintBordersFor(textFieldComposite); -// text.setData(attribute); -// text.addListener(SWT.KeyUp, new Listener() { -// public void handleEvent(Event event) { -// String sel = text.getText(); -// RepositoryTaskAttribute a = (RepositoryTaskAttribute) text.getData(); -// if (!(a.getValue().equals(sel))) { -// a.setValue(sel); -// markDirty(true); -// } -// } -// }); -// text.addListener(SWT.FocusIn, new GenericListener()); -// } -// -// addBugHyperlinks(sectionComposite, BugzillaReportElement.DEPENDSON.getKeyString()); -// -// // spacer -// GridDataFactory.fillDefaults().hint(20, SWT.DEFAULT).applyTo(toolkit.createLabel(sectionComposite, "")); -// -// toolkit.createLabel(sectionComposite, BugzillaReportElement.BLOCKED.toString()); -// textFieldComposite = toolkit.createComposite(sectionComposite); -// textLayout = new GridLayout(); -// textLayout.marginWidth = 1; -// textLayout.marginHeight = 3; -// textLayout.verticalSpacing = 3; -// textFieldComposite.setLayout(textLayout); -// textData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); -// textData.horizontalSpan = 1; -// textData.widthHint = 135; -// attribute = this.getRepositoryTaskData().getAttribute(BugzillaReportElement.BLOCKED.getKeyString()); -// if (!expand) { -// expand = attribute.getValue() != null && attribute.getValue().length() > 0; -// } -// if (!attribute.isReadOnly()) { -// final Text text = toolkit.createText(textFieldComposite, attribute.getValue(), SWT.FLAT); -// text.setLayoutData(textData); -// toolkit.paintBordersFor(textFieldComposite); -// text.setData(attribute); -// text.addListener(SWT.KeyUp, new Listener() { -// public void handleEvent(Event event) { -// String sel = text.getText(); -// RepositoryTaskAttribute a = (RepositoryTaskAttribute) text.getData(); -// if (!(a.getValue().equals(sel))) { -// a.setValue(sel); -// markDirty(true); -// } -// } -// }); -// text.addListener(SWT.FocusIn, new GenericListener()); -// } -// -// addBugHyperlinks(sectionComposite, BugzillaReportElement.BLOCKED.getKeyString()); -// -// section.setExpanded(expand); -// -// } - - private void addBugHyperlinks(Composite composite, String key) { - FormToolkit toolkit = getManagedForm().getToolkit(); - Composite hyperlinksComposite = toolkit.createComposite(composite); - RowLayout rowLayout = new RowLayout(); - rowLayout.marginBottom = 0; - rowLayout.marginLeft = 0; - rowLayout.marginRight = 0; - rowLayout.marginTop = 0; - rowLayout.spacing = 0; - hyperlinksComposite.setLayout(new RowLayout()); - String values = getRepositoryTaskData().getAttributeValue(key); - - if (values != null && values.length() > 0) { - for (String bugNumber : values.split(",")) { - final String bugId = bugNumber.trim(); - Hyperlink hyperlink = toolkit.createHyperlink(hyperlinksComposite, bugId, SWT.NONE); - final ITask task = TasksUiPlugin.getTaskListManager().getTaskList().getTask( - AbstractRepositoryTask.getHandle(repository.getUrl(), bugId)); - if (task != null) { - hyperlink.setToolTipText(task.getDescription()); - } - hyperlink.addHyperlinkListener(new HyperlinkAdapter() { - public void linkActivated(HyperlinkEvent e) { - if (task != null) { - TaskUiUtil.refreshAndOpenTaskListElement(task); - } else { - TaskUiUtil.openRepositoryTask(repository.getUrl(), bugId, repository.getUrl() - + IBugzillaConstants.POST_ARGS_SHOW_BUG + bugId); - } - } - }); - } - } - } - - protected void addBugzillaTimeTracker(FormToolkit toolkit, Composite parent) { - - Section timeSection = toolkit.createSection(parent, ExpandableComposite.TREE_NODE); - timeSection.setText(LABEL_TIME_TRACKING); - GridLayout gl = new GridLayout(); - GridData gd = new GridData(SWT.FILL, SWT.NONE, true, false); - gd.horizontalSpan = 4; - timeSection.setLayout(gl); - timeSection.setLayoutData(gd); - - Composite timeComposite = toolkit.createComposite(timeSection); - gl = new GridLayout(4, true); - timeComposite.setLayout(gl); - gd = new GridData(); - gd.horizontalSpan = 5; - timeComposite.setLayoutData(gd); - - RepositoryTaskData data = getRepositoryTaskData(); - - toolkit.createLabel(timeComposite, BugzillaReportElement.ESTIMATED_TIME.toString()); - estimateText = toolkit.createText(timeComposite, data.getAttributeValue(BugzillaReportElement.ESTIMATED_TIME - .getKeyString()), SWT.BORDER); - estimateText.setFont(TEXT_FONT); - estimateText.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); - estimateText.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - markDirty(true); - taskData.setAttributeValue(BugzillaReportElement.ESTIMATED_TIME.getKeyString(), estimateText.getText()); - } - }); - - toolkit.createLabel(timeComposite, "Current Estimate:"); - Text currentEstimate = toolkit.createText(timeComposite, "" - + (Float.parseFloat(data.getAttributeValue(BugzillaReportElement.ACTUAL_TIME.getKeyString())) + Float - .parseFloat(data.getAttributeValue(BugzillaReportElement.REMAINING_TIME.getKeyString())))); - currentEstimate.setFont(TEXT_FONT); - currentEstimate.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); - currentEstimate.setEditable(false); - - toolkit.createLabel(timeComposite, BugzillaReportElement.ACTUAL_TIME.toString()); - actualText = toolkit.createText(timeComposite, data.getAttributeValue(BugzillaReportElement.ACTUAL_TIME - .getKeyString())); - actualText.setFont(TEXT_FONT); - actualText.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); - actualText.setEditable(false); - - data.setAttributeValue(BugzillaReportElement.WORK_TIME.getKeyString(), "0"); - toolkit.createLabel(timeComposite, BugzillaReportElement.WORK_TIME.toString()); - addTimeText = toolkit.createText(timeComposite, data.getAttributeValue(BugzillaReportElement.WORK_TIME - .getKeyString()), SWT.BORDER); - addTimeText.setFont(TEXT_FONT); - addTimeText.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); - addTimeText.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - markDirty(true); - taskData.setAttributeValue(BugzillaReportElement.WORK_TIME.getKeyString(), addTimeText.getText()); - } - }); - - toolkit.createLabel(timeComposite, BugzillaReportElement.REMAINING_TIME.toString()); - remainingText = toolkit.createText(timeComposite, data.getAttributeValue(BugzillaReportElement.REMAINING_TIME - .getKeyString()), SWT.BORDER); - remainingText.setFont(TEXT_FONT); - remainingText.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); - remainingText.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - markDirty(true); - taskData - .setAttributeValue(BugzillaReportElement.REMAINING_TIME.getKeyString(), remainingText.getText()); - } - }); - - toolkit.createLabel(timeComposite, BugzillaReportElement.DEADLINE.toString()); - - deadlinePicker = new DatePicker(timeComposite, /* SWT.NONE */SWT.BORDER, data - .getAttributeValue(BugzillaReportElement.DEADLINE.getKeyString())); - deadlinePicker.setFont(TEXT_FONT); - deadlinePicker.setDatePattern("yyyy-MM-dd"); - deadlinePicker.addPickerSelectionListener(new SelectionListener() { - - public void widgetDefaultSelected(SelectionEvent e) { - // ignore - } - - public void widgetSelected(SelectionEvent e) { - Calendar cal = deadlinePicker.getDate(); - if (cal != null) { - Date d = cal.getTime(); - SimpleDateFormat f = (SimpleDateFormat) SimpleDateFormat.getDateInstance(); - f.applyPattern("yyyy-MM-dd"); - - taskData.setAttributeValue(BugzillaReportElement.DEADLINE.getKeyString(), f.format(d)); - markDirty(true); // TODO goes dirty even if user - // presses cancel - } - } - }); - - timeSection.setClient(timeComposite); - } - - protected void addKeywordsList(String keywords, Composite attributesComposite) throws IOException { - // newLayout(attributesComposite, 1, "Keywords:", PROPERTY); - FormToolkit toolkit = getManagedForm().getToolkit(); - Label label = toolkit.createLabel(attributesComposite, "Keywords:"); - GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.CENTER).applyTo(label); - - keywordsText = toolkit.createText(attributesComposite, keywords); - keywordsText.setFont(TEXT_FONT); - keywordsText.setEditable(false); - // keywordsText.setForeground(foreground); - // keywordsText.setBackground(JFaceColors.getErrorBackground(display)); - GridData keywordsData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); - keywordsData.horizontalSpan = 2; - keywordsData.widthHint = 200; - keywordsText.setLayoutData(keywordsData); - // keywordsText.setText(keywords); - keywordsText.addListener(SWT.FocusIn, new GenericListener()); - keyWordsList = new List(attributesComposite, SWT.MULTI | SWT.V_SCROLL); - keyWordsList.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); - keyWordsList.setFont(TEXT_FONT); - GridData keyWordsTextData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); - keyWordsTextData.horizontalSpan = 1; - keyWordsTextData.widthHint = 125; - keyWordsTextData.heightHint = 40; - keyWordsList.setLayoutData(keyWordsTextData); - - // initialize the keywords list with valid values - - java.util.List<String> validKeywords = new ArrayList<String>(); - try { - validKeywords = BugzillaCorePlugin.getRepositoryConfiguration(false, repository.getUrl(), - TasksUiPlugin.getDefault().getProxySettings(), repository.getUserName(), repository.getPassword(), - repository.getCharacterEncoding()).getKeywords(); - } catch (Exception e) { - // ignore - } - - if (validKeywords != null) { - for (Iterator<String> it = validKeywords.iterator(); it.hasNext();) { - String keyword = it.next(); - keyWordsList.add(keyword); - } - - // get the selected keywords for the bug - StringTokenizer st = new StringTokenizer(keywords, ",", false); - ArrayList<Integer> indicies = new ArrayList<Integer>(); - while (st.hasMoreTokens()) { - String s = st.nextToken().trim(); - int index = keyWordsList.indexOf(s); - if (index != -1) - indicies.add(new Integer(index)); - } - - // select the keywords that were selected for the bug - int length = indicies.size(); - int[] sel = new int[length]; - for (int i = 0; i < length; i++) { - sel[i] = indicies.get(i).intValue(); - } - keyWordsList.select(sel); - } - - keyWordsList.addSelectionListener(new KeywordListener()); - keyWordsList.addListener(SWT.FocusIn, new GenericListener()); - } - - protected void addVoting(Composite attributesComposite) { - FormToolkit toolkit = getManagedForm().getToolkit(); - Label label = toolkit.createLabel(attributesComposite, "Votes:"); - GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.CENTER).applyTo(label); - Composite votingComposite = toolkit.createComposite(attributesComposite); - GridLayout layout = new GridLayout(3, false); - layout.marginHeight = 0; - layout.marginWidth = 0; - votingComposite.setLayout(layout); - GridDataFactory.fillDefaults().span(2, 1).applyTo(votingComposite); - RepositoryTaskAttribute votesAttribute = taskData.getAttribute(BugzillaReportElement.VOTES.getKeyString()); - String voteValue = votesAttribute != null ? votesAttribute.getValue() : "0"; - votesText = toolkit.createText(votingComposite, voteValue); - votesText.setFont(TEXT_FONT); - votesText.setEditable(false); - - Hyperlink showVotesHyperlink = toolkit.createHyperlink(votingComposite, "Show votes for this bug", SWT.NONE); - showVotesHyperlink.addHyperlinkListener(new HyperlinkAdapter() { - public void linkActivated(HyperlinkEvent e) { - if (ExistingBugEditor.this.getEditor() instanceof MylarTaskEditor) { - MylarTaskEditor mylarTaskEditor = (MylarTaskEditor) ExistingBugEditor.this.getEditor(); - mylarTaskEditor.displayInBrowser(repository.getUrl() + IBugzillaConstants.SHOW_VOTES_URL - + getRepositoryTaskData().getId()); - } - } - }); - - Hyperlink voteHyperlink = toolkit.createHyperlink(votingComposite, "Vote for this bug", SWT.NONE); - voteHyperlink.addHyperlinkListener(new HyperlinkAdapter() { - public void linkActivated(HyperlinkEvent e) { - if (ExistingBugEditor.this.getEditor() instanceof MylarTaskEditor) { - MylarTaskEditor mylarTaskEditor = (MylarTaskEditor) ExistingBugEditor.this.getEditor(); - mylarTaskEditor.displayInBrowser(repository.getUrl() + IBugzillaConstants.VOTE_URL - + getRepositoryTaskData().getId()); - } - } - }); - } - - protected void addCCList(String ccValue, Composite attributesComposite) { - // newLayout(attributesComposite, 1, "Add CC:", PROPERTY); - FormToolkit toolkit = getManagedForm().getToolkit(); - Label label = toolkit.createLabel(attributesComposite, "Add CC:"); - GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.DEFAULT).applyTo(label); - ccText = toolkit.createText(attributesComposite, ccValue); - ccText.setFont(TEXT_FONT); - ccText.setEditable(true); - // ccText.setForeground(foreground); - // ccText.setBackground(background); - GridData ccData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); - ccData.horizontalSpan = 1; - ccData.widthHint = 150; - ccText.setLayoutData(ccData); - // ccText.setText(ccValue); - ccText.addListener(SWT.FocusIn, new GenericListener()); - ccText.addModifyListener(new ModifyListener() { - - public void modifyText(ModifyEvent e) { - markDirty(true); - taskData.setAttributeValue(BugzillaReportElement.NEWCC.getKeyString(), ccText.getText()); - } - - }); - - // newLayout(attributesComposite, 1, "CC: (Select to remove)", - // PROPERTY); - Label ccListLabel = toolkit.createLabel(attributesComposite, "CC:"); - GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.TOP).applyTo(ccListLabel); - ccList = new List(attributesComposite, SWT.MULTI | SWT.V_SCROLL);// SWT.BORDER - ccList.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); - ccList.setFont(TEXT_FONT); - GridData ccListData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); - ccListData.horizontalSpan = 1; - ccListData.widthHint = 150; - ccListData.heightHint = 95; - ccList.setLayoutData(ccListData); - - java.util.List<String> ccs = taskData.getCC(); - if (ccs != null) { - for (Iterator<String> it = ccs.iterator(); it.hasNext();) { - String cc = it.next(); - ccList.add(cc); - } - } - - ccList.addSelectionListener(new SelectionListener() { - - public void widgetSelected(SelectionEvent e) { - markDirty(true); - - for (String cc : ccList.getItems()) { - int index = ccList.indexOf(cc); - if (ccList.isSelected(index)) { - removeCC.add(cc); - } else { - removeCC.remove(cc); - } - } - } - - public void widgetDefaultSelected(SelectionEvent e) { - } - }); - ccList.addListener(SWT.FocusIn, new GenericListener()); - toolkit.createLabel(attributesComposite, ""); - label = toolkit.createLabel(attributesComposite, "(Select to remove)"); - GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.DEFAULT).applyTo(label); - - } - - @Override - protected void updateBug() { - taskData.setHasLocalChanges(true); - // go through all of the attributes and update the main values to the - // new ones - // for (Iterator<RepositoryTaskAttribute> it = - // bug.getAttributes().iterator(); it.hasNext();) { - // RepositoryTaskAttribute a = it.next(); - // if (a.getNewValue() != null && - // a.getNewValue().compareTo(a.getValue()) != 0) { - // bug.setHasChanged(true); - // } - // a.setValue(a.getNewValue()); - // - // } - // if (bug.getNewComment().compareTo(bug.getNewNewComment()) != 0) { - // // TODO: Ask offline reports if this is true? - // bug.setHasChanged(true); - // } - - // Update some other fields as well. - // bug.setNewComment(bug.getNewNewComment()); - - } - - // @Override - // protected void restoreBug() { - // - // if (taskData == null) - // return; - // - // // go through all of the attributes and restore the new values to the - // // main ones - // // for (Iterator<RepositoryTaskAttribute> it = - // // bug.getAttributes().iterator(); it.hasNext();) { - // // RepositoryTaskAttribute a = it.next(); - // // a.setNewValue(a.getValue()); - // // } - // - // // Restore some other fields as well. - // // bug.setNewNewComment(bug.getNewComment()); - // } - - /** - * This job opens a compare editor to compare the current state of the bug - * in the editor with the bug on the server. - */ - // protected class OpenCompareEditorJob extends Job { - // - // public OpenCompareEditorJob(String name) { - // super(name); - // } - // - // @Override - // protected IStatus run(IProgressMonitor monitor) { - // final RepositoryTaskData serverBug; - // try { - // TaskRepository repository = - // TasksUiPlugin.getRepositoryManager().getRepository( - // BugzillaPlugin.REPOSITORY_KIND, taskData.getRepositoryUrl()); - // serverBug = BugzillaServerFacade.getBug(repository.getUrl(), - // repository.getUserName(), repository - // .getPassword(), editorInput.getProxySettings(), - // repository.getCharacterEncoding(), Integer - // .parseInt(taskData.getId())); - // // If no bug was found on the server, throw an exception so that - // // the - // // user gets the same message that appears when there is a - // // problem reading the server. - // if (serverBug == null) - // throw new Exception(); - // } catch (Exception e) { - // PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - // public void run() { - // MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), - // "Could not open bug.", "Bug #" + taskData.getId() - // + " could not be read from the server."); - // } - // }); - // return new Status(IStatus.OK, BugzillaUiPlugin.PLUGIN_ID, IStatus.OK, - // "Could not get the bug report from the server.", null); - // } - // PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - // public void run() { - // compareInput.setTitle("Bug #" + taskData.getId()); - // compareInput.setLeft(taskData); - // compareInput.setRight(serverBug); - // CompareUI.openCompareEditor(compareInput); - // } - // }); - // return new Status(IStatus.OK, BugzillaUiPlugin.PLUGIN_ID, IStatus.OK, "", - // null); - // } - // - // } - /** - * Class to handle the selection change of the keywords. - */ - protected class KeywordListener implements SelectionListener { - - /* - * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent) - */ - public void widgetSelected(SelectionEvent arg0) { - markDirty(true); - - // get the selected keywords and create a string to submit - StringBuffer keywords = new StringBuffer(); - String[] sel = keyWordsList.getSelection(); - - // allow unselecting 1 keyword when it is the only one selected - if (keyWordsList.getSelectionCount() == 1) { - int index = keyWordsList.getSelectionIndex(); - String keyword = keyWordsList.getItem(index); - if (getRepositoryTaskData().getAttributeValue(BugzillaReportElement.KEYWORDS.getKeyString()).equals( - keyword)) - keyWordsList.deselectAll(); - } - - for (int i = 0; i < keyWordsList.getSelectionCount(); i++) { - keywords.append(sel[i]); - if (i != keyWordsList.getSelectionCount() - 1) { - keywords.append(","); - } - } - - taskData.setAttributeValue(BugzillaReportElement.KEYWORDS.getKeyString(), keywords.toString()); - - // update the keywords text field - keywordsText.setText(keywords.toString()); - } - - /* - * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent) - */ - public void widgetDefaultSelected(SelectionEvent arg0) { - // no need to listen to this - } - - } - - /** - * A listener for selection of a comment. - */ - protected class CommentListener implements Listener { - - /** The comment that this listener is for. */ - private TaskComment taskComment; - - /** - * Creates a new <code>CommentListener</code>. - * - * @param taskComment - * The comment that this listener is for. - */ - public CommentListener(TaskComment taskComment) { - this.taskComment = taskComment; - } - - public void handleEvent(Event event) { - fireSelectionChanged(new SelectionChangedEvent(selectionProvider, new StructuredSelection( - new RepositoryTaskSelection(taskData.getId(), taskData.getRepositoryUrl(), - taskComment.getCreated(), taskComment, taskData.getSummary())))); - } - } - - @Override - protected void validateInput() { - // RepositoryOperation o = taskData.getSelectedOperation(); - // if (o != null && o.getKnobName().compareTo("resolve") == 0 - // && (addCommentsTextBox.getText() == null || - // addCommentsTextBox.getText().equals(""))) { - // // TODO: Highlight (change to light red?) New Comment area to - // // indicate need for message - // submitButton.setEnabled(false); - // } else { - // submitButton.setEnabled(true); - // } - } - - /** - * Adds a text field to display and edit the bug's URL attribute. - * - * @param url - * The URL attribute of the bug. - * @param attributesComposite - * The composite to add the text field to. - */ - protected void addUrlText(String url, Composite attributesComposite) { - FormToolkit toolkit = new FormToolkit(attributesComposite.getDisplay()); - toolkit.createLabel(attributesComposite, "URL:"); - urlText = toolkit.createText(attributesComposite, url); - urlText.setFont(TEXT_FONT); - GridData urlTextData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); - urlTextData.horizontalSpan = 3; - urlTextData.widthHint = 200; - urlText.setLayoutData(urlTextData); - // urlText.setText(url); - urlText.addListener(SWT.KeyUp, new Listener() { - public void handleEvent(Event event) { - String sel = urlText.getText(); - RepositoryTaskAttribute a = getRepositoryTaskData().getAttribute( - BugzillaReportElement.BUG_FILE_LOC.getKeyString()); - if (!(a.getValue().equals(sel))) { - a.setValue(sel); - markDirty(true); - } - } - }); - urlText.addListener(SWT.FocusIn, new GenericListener()); - } - - @Override - public RepositoryTaskData getRepositoryTaskData() { - return editorInput.getRepositoryTaskData(); - } - - // protected void createDescriptionLayout(Composite composite) { - // // This is migration code from 0.6.1 -> 0.6.2 - // // Changes to the abstract editor causes the description - // // field of the bugzilla editor to be editable if the offline - // // task data hasn't been saved yet. Upon being saved it works fine but - // // the initial load of the page would have an editable description - // // area if this was not present. TODO: Remove post 0.6.1. - // super.createDescriptionLayout(composite); - // descriptionTextViewer.setEditable(false); - // } - - // TODO used for spell checking. Add back when we want to support this - // protected Button checkSpellingButton; - // - // private void checkSpelling() { - // SpellingContext context= new SpellingContext(); - // context.setContentType(Platform.getContentTypeManager().getContentType(IContentTypeManager.CT_TEXT)); - // IDocument document = new Document(addCommentsTextBox.getText()); - // ISpellingProblemCollector collector= new - // SpellingProblemCollector(document); - // EditorsUI.getSpellingService().check(document, context, collector, new - // NullProgressMonitor()); - // } - // - // private class SpellingProblemCollector implements - // ISpellingProblemCollector { - // - // private IDocument document; - // - // private SpellingDialog spellingDialog; - // - // public SpellingProblemCollector(IDocument document){ - // this.document = document; - // spellingDialog = new - // SpellingDialog(Display.getCurrent().getActiveShell(), "Spell Checking", - // document); - // } - // - // /* - // * @see - // org.eclipse.ui.texteditor.spelling.ISpellingProblemCollector#accept(org.eclipse.ui.texteditor.spelling.SpellingProblem) - // */ - // public void accept(SpellingProblem problem) { - // try { - // int line= document.getLineOfOffset(problem.getOffset()) + 1; - // String word= document.get(problem.getOffset(), problem.getLength()); - // - // spellingDialog.open(word, problem.getProposals()); - // - // } catch (BadLocationException x) { - // // drop this SpellingProblem - // } - // } - // - // /* - // * @see - // org.eclipse.ui.texteditor.spelling.ISpellingProblemCollector#beginCollecting() - // */ - // public void beginCollecting() { - // - // } - // - // /* - // * @see - // org.eclipse.ui.texteditor.spelling.ISpellingProblemCollector#endCollecting() - // */ - // public void endCollecting() { - // MessageDialog.openInformation(Display.getCurrent().getActiveShell(), - // "Spell Checking Finished", "The spell check has finished"); - // } - // } -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/NewBugEditor.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/NewBugEditor.java deleted file mode 100644 index 00956fdc2..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/NewBugEditor.java +++ /dev/null @@ -1,543 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.bugzilla.ui.editor; - -import java.io.UnsupportedEncodingException; -import java.net.Proxy; -import java.net.URLEncoder; -import java.util.Calendar; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.IJobChangeEvent; -import org.eclipse.core.runtime.jobs.JobChangeAdapter; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaReportSubmitForm; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaRepositoryQuery; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.internal.tasks.ui.editors.AbstractRepositoryTaskEditor; -import org.eclipse.mylar.internal.tasks.ui.editors.RepositoryTaskOutlineNode; -import org.eclipse.mylar.internal.tasks.ui.editors.RepositoryTaskSelection; -import org.eclipse.mylar.internal.tasks.ui.search.SearchHitCollector; -import org.eclipse.mylar.internal.tasks.ui.util.WebBrowserDialog; -import org.eclipse.mylar.internal.tasks.ui.views.DatePicker; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; -import org.eclipse.mylar.internal.tasks.ui.views.TaskRepositoriesView; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.mylar.tasks.core.TaskCategory; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.search.ui.NewSearchUI; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Spinner; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorSite; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.forms.FormColors; -import org.eclipse.ui.forms.editor.FormEditor; -import org.eclipse.ui.forms.widgets.ExpandableComposite; -import org.eclipse.ui.forms.widgets.FormToolkit; -import org.eclipse.ui.forms.widgets.Section; - -/** - * An editor used to view a locally created bug that does not yet exist on a - * server. - * - * @author Rob Elves (modifications) - */ -public class NewBugEditor extends AbstractRepositoryTaskEditor { - - private static final int DEFAULT_ESTIMATED_TIME = 1; - - private static final String LABEL_SEARCH_DUPS = "Search for Duplicates"; - - private static final String LABEL_CREATE = "Create New"; - - private static final String NO_STACK_MESSAGE = "Unable to locate a stack trace in the description text.\nDuplicate search currently only supports stack trace matching."; - - private static final String ERROR_CREATING_BUG_REPORT = "Error creating bug report"; - - protected RepositoryTaskData taskData; - - DatePicker datePicker; - - protected String newSummary = ""; - - private Button searchDuplicatesButton; - - private BugSubmissionHandler submissionHandler; - - private Spinner estimated; - - public NewBugEditor(FormEditor editor) { - super(editor); - } - - @Override - public void init(IEditorSite site, IEditorInput input) { - NewBugEditorInput ei = (NewBugEditorInput) input; - setSite(site); - setInput(input); - editorInput = ei; - taskOutlineModel = RepositoryTaskOutlineNode.parseBugReport(editorInput.getRepositoryTaskData(), false); - taskData = ei.getRepositoryTaskData(); - newSummary = taskData.getSummary(); - repository = editorInput.getRepository(); - isDirty = false; - - AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager().getRepositoryConnector( - repository.getKind()); - submissionHandler = new BugSubmissionHandler(connector); - } - - @Override - public RepositoryTaskData getRepositoryTaskData() { - return taskData; - } - - @Override - protected void createDescriptionLayout(Composite composite) { - FormToolkit toolkit = this.getManagedForm().getToolkit(); - Section section = toolkit.createSection(composite, ExpandableComposite.TITLE_BAR); - section.setText(LABEL_SECTION_DESCRIPTION); - section.setExpanded(true); - section.setLayout(new GridLayout()); - section.setLayoutData(new GridData(GridData.FILL_BOTH)); - - Composite descriptionComposite = toolkit.createComposite(section); - GridLayout descriptionLayout = new GridLayout(); - - descriptionComposite.setLayout(descriptionLayout); - GridData descriptionData = new GridData(GridData.FILL_BOTH); - descriptionData.grabExcessVerticalSpace = true; - descriptionComposite.setLayoutData(descriptionData); - section.setClient(descriptionComposite); - - descriptionTextViewer = addTextEditor(repository, descriptionComposite, - getRepositoryTaskData().getNewComment(), true, SWT.FLAT | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL); - descriptionTextViewer.setEditable(true); - - GridData descriptionTextData = new GridData(GridData.FILL_BOTH); - descriptionTextViewer.getControl().setLayoutData(descriptionTextData); - descriptionTextViewer.getControl().setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); - - toolkit.paintBordersFor(descriptionComposite); - - } - - @Override - protected void createReportHeaderLayout(Composite comp) { - addSummaryText(comp); - } - - // @Override - // protected void createReportHeaderLayout(Composite comp) { - // FormToolkit toolkit = new FormToolkit(comp.getDisplay()); - // Composite headerComposite = toolkit.createComposite(editorComposite); - // headerComposite.setLayout(new GridLayout(2, false)); - // GridDataFactory.fillDefaults().grab(true, - // false).applyTo(headerComposite); - // toolkit.createLabel(headerComposite, "Posting To:").setFont(TITLE_FONT); - // Text target = toolkit.createText(headerComposite, repository.getUrl(), - // SWT.FLAT); - // target.setFont(TITLE_FONT); - // target.setEditable(false); - // addSummaryText(headerComposite); - // toolkit.paintBordersFor(headerComposite); - // } - - @Override - protected void createAttachmentLayout(Composite comp) { - // currently can't attach while creating new bug - } - - @Override - protected void createCommentLayout(Composite comp) { - // Since NewBugModels have no comments, there is no - // GUI for them. - } - - @Override - protected void createNewCommentLayout(Composite comp) { - createPlanningLayout(comp); - } - - protected void createPlanningLayout(Composite comp) { - FormToolkit toolkit = this.getManagedForm().getToolkit(); - - Section section = toolkit.createSection(comp, ExpandableComposite.TITLE_BAR | Section.TWISTIE); - section.setText("Personal Planning"); - section.setLayout(new GridLayout()); - section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - section.setExpanded(true); - - Composite sectionClient = toolkit.createComposite(section); - section.setClient(sectionClient); - GridLayout layout = new GridLayout(); - layout.numColumns = 7; - layout.makeColumnsEqualWidth = false; - sectionClient.setLayout(layout); - GridData clientDataLayout = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); - sectionClient.setLayoutData(clientDataLayout); - - // Reminder - Label label = toolkit.createLabel(sectionClient, "Scheduled for:"); - label.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - datePicker = new DatePicker(sectionClient, SWT.NONE, DatePicker.LABEL_CHOOSE); - datePicker.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE)); - datePicker.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); - Calendar today = Calendar.getInstance(); - TasksUiPlugin.getTaskListManager().setScheduledToday(today); - datePicker.setDate(today); - Button removeReminder = toolkit.createButton(sectionClient, "Clear", SWT.PUSH | SWT.CENTER); - removeReminder.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - datePicker.setDate(null); - } - }); - - // 1 Blank column after Reminder clear button - Label dummy = toolkit.createLabel(sectionClient, ""); - GridData dummyLabelDataLayout = new GridData(GridData.HORIZONTAL_ALIGN_CENTER); - dummyLabelDataLayout.horizontalSpan = 1; - dummyLabelDataLayout.widthHint = 30; - dummy.setLayoutData(dummyLabelDataLayout); - - // Estimated time - label = toolkit.createLabel(sectionClient, "Estimated time:"); - label.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - estimated = new Spinner(sectionClient, SWT.NONE); - estimated.setDigits(0); - estimated.setMaximum(100); - estimated.setMinimum(0); - estimated.setIncrement(1); - estimated.setSelection(DEFAULT_ESTIMATED_TIME); - estimated.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); - GridData estimatedDataLayout = new GridData(); - estimatedDataLayout.widthHint = 110; - estimated.setLayoutData(estimatedDataLayout); - label = toolkit.createLabel(sectionClient, "hours "); - label.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - - // 1 Blank column - Label blankLabel2 = toolkit.createLabel(sectionClient, ""); - GridData blankLabl2Layout = new GridData(GridData.HORIZONTAL_ALIGN_CENTER); - blankLabl2Layout.horizontalSpan = 1; - blankLabl2Layout.widthHint = 25; - blankLabel2.setLayoutData(blankLabl2Layout); - - toolkit.paintBordersFor(sectionClient); - - } - - @Override - protected void addRadioButtons(Composite buttonComposite) { - // Since NewBugModels have no special submitting actions, - // no radio buttons are required. - } - - @Override - protected void createCustomAttributeLayout(Composite composite) { - // ignore - } - - @Override - protected String getTitleString() { - return taskData.getLabel(); - } - - public boolean searchForDuplicates() { - - String stackTrace = getStackTraceFromDescription(); - if (stackTrace == null) { - MessageDialog.openWarning(null, "No Stack Trace Found", NO_STACK_MESSAGE); - return false; - } - - String queryUrl = ""; - try { - queryUrl = repository.getUrl() + "/buglist.cgi?long_desc_type=allwordssubstr&long_desc=" - + URLEncoder.encode(stackTrace, BugzillaCorePlugin.ENCODING_UTF_8); - } catch (UnsupportedEncodingException e) { - // This should never happen - } - - queryUrl += "&product=" + getRepositoryTaskData().getProduct(); - - BugzillaRepositoryQuery bugzillaQuery = new BugzillaRepositoryQuery(repository.getUrl(), queryUrl, "search", - "100", TasksUiPlugin.getTaskListManager().getTaskList()); - Proxy proxySettings = TasksUiPlugin.getDefault().getProxySettings(); - SearchHitCollector collector = new SearchHitCollector(TasksUiPlugin.getTaskListManager().getTaskList(), - repository, bugzillaQuery, proxySettings); - - NewSearchUI.runQueryInBackground(collector); - return true; - } - - public String getStackTraceFromDescription() { - String description = descriptionTextViewer.getTextWidget().getText().trim(); - String stackTrace = null; - - if (description == null) { - return null; - } - - String punct = "!\"#$%&'\\(\\)*+,-./:;\\<=\\>?@\\[\\]^_`\\{|\\}~\n"; - String lineRegex = " *at\\s+[\\w" + punct + "]+ ?\\(.*\\) *\n?"; - Pattern tracePattern = Pattern.compile(lineRegex); - Matcher match = tracePattern.matcher(description); - - if (match.find()) { - // record the index of the first stack trace line - int start = match.start(); - int lastEnd = match.end(); - - // find the last stack trace line - while (match.find()) { - lastEnd = match.end(); - } - - // make sure there's still room to find the exception - if (start <= 0) { - return null; - } - - // count back to the line before the stack trace to find the - // exception - int stackStart = 0; - int index = start - 1; - while (index > 1 && description.charAt(index) == ' ') { - index--; - } - - // locate the exception line index - stackStart = description.substring(0, index - 1).lastIndexOf("\n"); - stackStart = (stackStart == -1) ? 0 : stackStart + 1; - - stackTrace = description.substring(stackStart, lastEnd); - } - - return stackTrace; - } - - @Override - protected void submitBug() { - submitButton.setEnabled(false); - showBusy(true); - if (summaryText != null && summaryText.getText().trim().equals("")) { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - MessageDialog.openInformation(NewBugEditor.this.getSite().getShell(), ERROR_CREATING_BUG_REPORT, - "A summary must be provided with new bug reports."); - summaryText.setFocus(); - submitButton.setEnabled(true); - showBusy(false); - } - }); - return; - } - if (descriptionTextViewer != null && descriptionTextViewer.getTextWidget().getText().trim().equals("")) { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - MessageDialog.openInformation(NewBugEditor.this.getSite().getShell(), ERROR_CREATING_BUG_REPORT, - "A description must be provided with new reports."); - descriptionTextViewer.getTextWidget().setFocus(); - submitButton.setEnabled(true); - showBusy(false); - } - }); - return; - } - - updateBug(); - Proxy proxySettings = TasksUiPlugin.getDefault().getProxySettings(); - boolean wrap = IBugzillaConstants.BugzillaServerVersion.SERVER_218.equals(repository.getVersion()); - - try { - final BugzillaReportSubmitForm bugzillaReportSubmitForm = BugzillaReportSubmitForm.makeNewBugPost( - repository.getUrl(), repository.getUserName(), repository.getPassword(), proxySettings, repository - .getCharacterEncoding(), taskData, wrap); - - JobChangeAdapter submitJobListener = new JobChangeAdapter() { - - public void done(final IJobChangeEvent event) { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - if (event.getJob().getResult().getCode() == Status.OK - && event.getJob().getResult().getMessage() != null) { - close(); - String newTaskHandle = AbstractRepositoryTask.getHandle(repository.getUrl(), event - .getJob().getResult().getMessage()); - ITask newTask = TasksUiPlugin.getTaskListManager().getTaskList().getTask(newTaskHandle); - if (newTask != null) { - Calendar selectedDate = datePicker.getDate(); - if(selectedDate != null) { - //NewLocalTaskAction.scheduleNewTask(newTask); - TasksUiPlugin.getTaskListManager().setReminder(newTask, selectedDate.getTime()); - } - - newTask.setEstimatedTimeHours(estimated.getSelection()); - - Object selectedObject = null; - if (TaskListView.getFromActivePerspective() != null) - selectedObject = ((IStructuredSelection) TaskListView - .getFromActivePerspective().getViewer().getSelection()) - .getFirstElement(); - - if (selectedObject instanceof TaskCategory) { - TasksUiPlugin.getTaskListManager().getTaskList().moveToContainer( - ((TaskCategory) selectedObject), newTask); - } - TaskUiUtil.refreshAndOpenTaskListElement(newTask); - } - return; - } else if (event.getJob().getResult().getCode() == Status.INFO) { - WebBrowserDialog.openAcceptAgreement(NewBugEditor.this.getSite().getShell(), - IBugzillaConstants.REPORT_SUBMIT_ERROR, - event.getJob().getResult().getMessage(), event.getJob().getResult() - .getException().getMessage()); - submitButton.setEnabled(true); - NewBugEditor.this.showBusy(false); - } else if (event.getJob().getResult().getCode() == Status.ERROR) { - MessageDialog.openError(NewBugEditor.this.getSite().getShell(), - IBugzillaConstants.REPORT_SUBMIT_ERROR, event.getResult().getMessage()); - submitButton.setEnabled(true); - NewBugEditor.this.showBusy(false); - } - } - }); - } - }; - - submissionHandler.submitBugReport(bugzillaReportSubmitForm, submitJobListener, false, addToTaskListRoot - .getSelection()); - - } catch (UnsupportedEncodingException e) { - MessageDialog.openError(null, "Posting Error", "Ensure proper encoding selected in " - + TaskRepositoriesView.NAME + "."); - return; - } catch (Exception e) { - MylarStatusHandler.fail(e, "Posting Error. Ensure proper configuration in "+ TaskRepositoriesView.NAME + ".", true); - return; - } - - } - - @Override - protected void updateBug() { - taskData.setSummary(newSummary); - taskData.setDescription(descriptionTextViewer.getTextWidget().getText()); - } - - /** - * A listener for selection of the description textbox. - */ - protected class DescriptionListener implements Listener { - public void handleEvent(Event event) { - fireSelectionChanged(new SelectionChangedEvent(selectionProvider, new StructuredSelection( - new RepositoryTaskSelection(taskData.getId(), taskData.getRepositoryUrl(), "New Description", - false, taskData.getSummary())))); - } - } - - @Override - public void handleSummaryEvent() { - String sel = summaryText.getText(); - if (!(newSummary.equals(sel))) { - newSummary = sel; - markDirty(true); - } - } - - @Override - protected void validateInput() { - // ignore - } - - @Override - public boolean isDirty() { - return true; - } - - @Override - public boolean isSaveAsAllowed() { - return false; - } - - /** - * Creates the button layout. This displays options and buttons at the - * bottom of the editor to allow actions to be performed on the bug. - */ - protected void createActionsLayout(Composite formComposite) { - FormToolkit toolkit = new FormToolkit(formComposite.getDisplay()); - Section section = toolkit.createSection(formComposite, ExpandableComposite.TITLE_BAR); - section.setText(LABEL_SECTION_ACTIONS); - section.setExpanded(true); - section.setLayout(new GridLayout()); - section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - Composite buttonComposite = toolkit.createComposite(section); - GridLayout buttonLayout = new GridLayout(); - buttonLayout.numColumns = 3; - buttonComposite.setLayout(buttonLayout); - GridData buttonData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); - buttonData.horizontalSpan = 1; - buttonData.grabExcessVerticalSpace = false; - buttonComposite.setLayoutData(buttonData); - section.setClient(buttonComposite); - - addActionButtons(buttonComposite); - addToTaskListRoot = toolkit.createButton(buttonComposite, "Add to Task List root", SWT.CHECK); - } - - protected void addActionButtons(Composite buttonComposite) { - FormToolkit toolkit = new FormToolkit(buttonComposite.getDisplay()); - searchDuplicatesButton = toolkit.createButton(buttonComposite, LABEL_SEARCH_DUPS, SWT.NONE); - GridData searchDuplicatesButtonData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); - searchDuplicatesButton.setLayoutData(searchDuplicatesButtonData); - searchDuplicatesButton.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event e) { - searchForDuplicates(); - } - }); - - submitButton = toolkit.createButton(buttonComposite, LABEL_CREATE, SWT.NONE); - GridData submitButtonData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); - submitButton.setLayoutData(submitButtonData); - submitButton.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event e) { - submitBug(); - } - }); - submitButton.addListener(SWT.FocusIn, new GenericListener()); - } - -} diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/NewBugEditorInput.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/NewBugEditorInput.java deleted file mode 100644 index 8845b2069..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/NewBugEditorInput.java +++ /dev/null @@ -1,42 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.ui.editor; - -import org.eclipse.mylar.internal.tasks.ui.editors.AbstractBugEditorInput; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.mylar.tasks.core.TaskRepository; - -/** - * The <code>IEditorInput</code> implementation for <code>NewBugEditor</code>. - * @author Rob Elves (modifications) - */ -public class NewBugEditorInput extends AbstractBugEditorInput { - - - public NewBugEditorInput(TaskRepository repository, RepositoryTaskData taskData) { - super(repository, taskData); - } - - public String getName() { - return "NEW ["+repository.getUrl()+"]"; - } - - @Override - public boolean equals(Object o) { - if (o instanceof NewBugEditorInput) { - NewBugEditorInput input = (NewBugEditorInput) o; - return input.getRepositoryTaskData().equals(this.getRepositoryTaskData()); - } - return false; - } - -} diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/NewBugzillaTaskEditor.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/NewBugzillaTaskEditor.java deleted file mode 100644 index c7d80d7ad..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/NewBugzillaTaskEditor.java +++ /dev/null @@ -1,100 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.ui.editor; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.action.IMenuListener; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.editors.MylarTaskEditor; -import org.eclipse.swt.widgets.Menu; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorSite; -import org.eclipse.ui.PartInitException; - -/** - * @author Rob Elves - * - * TODO: Get rid of this wrapper. - * Before this can be done a factory must be added to handle new bug editor input in MylarTaskEditor.addPages() - * then all occurrences of BugzillaUiPlugin.NEW_BUG_EDITOR_ID can be replaced with TaskListPreferenceConstants.TASK_EDITOR_ID - * so that MylarTaskEditor is opened rather than this. - */ -public class NewBugzillaTaskEditor extends MylarTaskEditor { - - private Menu contextMenu; - - private NewBugEditor newBugEditor; - - @Override - public void init(IEditorSite site, IEditorInput input) throws PartInitException { - setSite(site); - setInput(input); - } - - @Override - protected void addPages() { - MenuManager manager = new MenuManager(); - IMenuListener listener = new IMenuListener() { - public void menuAboutToShow(IMenuManager manager) { - contextMenuAboutToShow(manager); - } - }; - manager.setRemoveAllWhenShown(true); - manager.addMenuListener(listener); - contextMenu = manager.createContextMenu(getContainer()); - getContainer().setMenu(contextMenu); - try { - newBugEditor = new NewBugEditor(this); - int index = addPage(newBugEditor); - String label = "<unsubmitted> "+((NewBugEditorInput)getEditorInput()).getRepository().getUrl(); - setPageText(index, "Bugzilla"); - setPartName(label); - } catch (PartInitException e) { - MylarStatusHandler.fail(e, "Could not add new bug form", true); - } - } - - @Override - public Object getAdapter(Class adapter) { - return newBugEditor.getAdapter(adapter); - } - - public NewBugEditor getPage() { - return newBugEditor; - } - - @Override - public void doSave(IProgressMonitor monitor) { - // ignore - - } - - @Override - public void doSaveAs() { - // ignore - - } - - @Override - public boolean isSaveAsAllowed() { - // ignore - return false; - } - - @Override - public boolean isDirty() { - return true; - } - -} diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/search/BugzillaSearchPage.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/search/BugzillaSearchPage.java deleted file mode 100644 index f76ba397f..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/search/BugzillaSearchPage.java +++ /dev/null @@ -1,1785 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.bugzilla.ui.search; - -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.lang.reflect.InvocationTargetException; -import java.net.Proxy; -import java.net.URLDecoder; -import java.net.URLEncoder; -import java.security.GeneralSecurityException; -import java.util.ArrayList; -import java.util.Arrays; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.dialogs.IDialogSettings; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaRepositoryQuery; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants; -import org.eclipse.mylar.internal.bugzilla.ui.BugzillaUiPlugin; -import org.eclipse.mylar.internal.tasks.ui.search.AbstractRepositoryQueryPage; -import org.eclipse.mylar.internal.tasks.ui.search.SearchHitCollector; -import org.eclipse.mylar.internal.tasks.ui.views.TaskRepositoriesView; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.TaskRepositoryManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.search.ui.NewSearchUI; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Group; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.List; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.internal.help.WorkbenchHelpSystem; -import org.eclipse.ui.progress.IProgressService; - -/** - * Bugzilla search page - * - * @author Mik Kersten (hardening of prototype) - */ -public class BugzillaSearchPage extends AbstractRepositoryQueryPage implements Listener { - - private static final String MAX_HITS_GREATER = "Max hits shown must be greater than 0 or enter -1 for all results found."; - - private static final String NUM_DAYS_POSITIVE = "Number of days must be a positive integer. "; - - private static final String TITLE_BUGZILLA_QUERY = "Bugzilla Query"; - - private static final String MAX_HITS = "100"; - - private static final int HEIGHT_ATTRIBUTE_COMBO = 60; - - private TaskRepository repository = null; - - protected Combo summaryPattern = null; - - // protected Combo repositoryCombo = null; - - private static ArrayList<BugzillaSearchData> previousSummaryPatterns = new ArrayList<BugzillaSearchData>(20); - - private static ArrayList<BugzillaSearchData> previousEmailPatterns = new ArrayList<BugzillaSearchData>(20); - - private static ArrayList<BugzillaSearchData> previousCommentPatterns = new ArrayList<BugzillaSearchData>(20); - - private boolean firstTime = true; - - private IDialogSettings fDialogSettings; - - protected Text maxHitsText; - - private static final String[] patternOperationText = { "all words", "any word", "regexp" }; - - private static final String[] patternOperationValues = { "allwordssubstr", "anywordssubstr", "regexp" }; - - private static final String[] emailOperationText = { "substring", "exact", "regexp" }; - - private static final String[] emailOperationValues = { "substring", "exact", "regexp" }; - - private static final String[] emailRoleValues = { "emailassigned_to1", "emailreporter1", "emailcc1", - "emaillongdesc1" }; - - protected IPreferenceStore prefs = BugzillaUiPlugin.getDefault().getPreferenceStore(); - - protected String maxHits; - - private BugzillaRepositoryQuery originalQuery = null; - - protected boolean restoring = false; - - private boolean restoreQueryOptions = true; - - // private TaskRepository selectedRepository = null; - - private static class BugzillaSearchData { - /** Pattern to match on */ - String pattern; - - /** Pattern matching criterion */ - int operation; - - BugzillaSearchData(String pattern, int operation) { - this.pattern = pattern; - this.operation = operation; - } - } - - public BugzillaSearchPage() { - super(TITLE_BUGZILLA_QUERY); - // setTitle(TITLE); - // setDescription(DESCRIPTION); - // setPageComplete(false); - } - - public BugzillaSearchPage(TaskRepository repository) { - super(TITLE_BUGZILLA_QUERY); - this.repository = repository; - // setTitle(TITLE); - // setDescription(DESCRIPTION); - // setImageDescriptor(TaskListImages.BANNER_REPOSITORY); - // setPageComplete(false); - } - - public BugzillaSearchPage(TaskRepository repository, BugzillaRepositoryQuery origQuery) { - super(TITLE_BUGZILLA_QUERY, origQuery.getDescription()); - originalQuery = origQuery; - this.repository = repository; - setDescription("Select the Bugzilla query parameters. Use the Update Attributes button to retrieve " - + "updated values from the repository."); - // setTitle(TITLE); - // setDescription(DESCRIPTION); - // setPageComplete(false); - } - - public void createControl(Composite parent) { - readConfiguration(); - - Composite control = new Composite(parent, SWT.NONE); - GridLayout layout = new GridLayout(2, false); - layout.marginHeight = 0; - layout.marginWidth = 0; - control.setLayout(layout); - GridData gd = new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL); - control.setLayoutData(gd); - - if (scontainer == null) { - // Not presenting in search pane so want query title - super.createControl(control); - } - // else { - // // if (repository == null) { - // // search pane so add repository selection - // createRepositoryGroup(control); - // } - createSearchGroup(control); - createOptionsGroup(control); - - createEmail(control); - createLastDays(control); - - // createSaveQuery(control); - // createMaxHits(control); - // input = new - // SavedQueryFile(BugzillaPlugin.getDefault().getStateLocation().toString(), - // "/queries"); - // createUpdate(control); - // if (originalQuery != null) { - // try { - // updateDefaults(originalQuery.getQueryUrl(), - // String.valueOf(originalQuery.getMaxHits())); - // } catch (UnsupportedEncodingException e) { - // // ignore - // } - // } - setControl(control); - WorkbenchHelpSystem.getInstance().setHelp(control, BugzillaUiPlugin.SEARCH_PAGE_CONTEXT); - } - - // private void createRepositoryGroup(Composite control) { - // Group group = new Group(control, SWT.NONE); - // group.setText("Repository"); - // GridLayout layout = new GridLayout(); - // layout.numColumns = 1; - // group.setLayout(layout); - // GridData gd = new GridData(GridData.FILL_HORIZONTAL); - // gd.horizontalSpan = 2; - // group.setLayoutData(gd); - // - // repositoryCombo = new Combo(group, SWT.SINGLE | SWT.BORDER); - // repositoryCombo.addSelectionListener(new SelectionAdapter() { - // @Override - // public void widgetSelected(SelectionEvent e) { - // String repositoryUrl = - // repositoryCombo.getItem(repositoryCombo.getSelectionIndex()); - // repository = - // TasksUiPlugin.getRepositoryManager().getRepository(BugzillaCorePlugin.REPOSITORY_KIND, - // repositoryUrl); - // updateAttributesFromRepository(repositoryUrl, null, false); - // restoring = true; - // restoreWidgetValues(); - // } - // }); - // gd = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); - // repositoryCombo.setLayoutData(gd); - // } - - private void createSearchGroup(Composite control) { - Group group = new Group(control, SWT.NONE); - GridLayout layout = new GridLayout(); - layout.numColumns = 1; - group.setLayout(layout); - GridData gd = new GridData(GridData.FILL_HORIZONTAL); - gd.horizontalSpan = 5; - group.setLayoutData(gd); - - createTextSearchComposite(group); - createComment(group); - } - - protected Control createTextSearchComposite(Composite control) { - GridData gd; - Label label; - - Composite group = new Composite(control, SWT.NONE); - GridLayout layout = new GridLayout(3, false); - group.setLayout(layout); - group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - gd = new GridData(GridData.BEGINNING | GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); - gd.horizontalSpan = 2; - group.setLayoutData(gd); - - // Info text - label = new Label(group, SWT.LEFT); - label.setText("Summary/id contains: "); - gd = new GridData(GridData.BEGINNING); - gd.horizontalSpan = 1; - label.setLayoutData(gd); - - // Pattern combo - summaryPattern = new Combo(group, SWT.SINGLE | SWT.BORDER); - summaryPattern.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - if (scontainer != null) { - scontainer.setPerformActionEnabled(canQuery()); - } - } - }); - summaryPattern.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent e) { - handleWidgetSelected(summaryPattern, summaryOperation, previousSummaryPatterns); - } - }); - gd = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); - summaryPattern.setLayoutData(gd); - - summaryOperation = new Combo(group, SWT.SINGLE | SWT.READ_ONLY | SWT.BORDER); - summaryOperation.setItems(patternOperationText); - summaryOperation.setText(patternOperationText[0]); - summaryOperation.select(0); - - return group; - } - - private Control createComment(Composite control) { - GridData gd; - Label label; - - Composite group = new Composite(control, SWT.NONE); - GridLayout layout = new GridLayout(3, false); - group.setLayout(layout); - group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - gd = new GridData(GridData.BEGINNING | GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); - gd.horizontalSpan = 2; - group.setLayoutData(gd); - - // Info text - label = new Label(group, SWT.LEFT); - label.setText("Comment contains: "); - gd = new GridData(GridData.BEGINNING); - label.setLayoutData(gd); - - // Comment pattern combo - commentPattern = new Combo(group, SWT.SINGLE | SWT.BORDER); - commentPattern.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - if (scontainer != null) { - scontainer.setPerformActionEnabled(canQuery()); - } - } - }); - commentPattern.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent e) { - handleWidgetSelected(commentPattern, commentOperation, previousCommentPatterns); - } - }); - gd = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); - commentPattern.setLayoutData(gd); - - commentOperation = new Combo(group, SWT.SINGLE | SWT.READ_ONLY | SWT.BORDER); - commentOperation.setItems(patternOperationText); - commentOperation.setText(patternOperationText[0]); - commentOperation.select(0); - - return group; - } - - protected Control createOptionsGroup(Composite control) { - Group group = new Group(control, SWT.NONE); - // group.setText("Bug Attributes"); - GridLayout layout = new GridLayout(); - layout.numColumns = 1; - group.setLayout(layout); - GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); - gd.horizontalSpan = 5; - group.setLayoutData(gd); - - createProductAttributes(group); - createLists(group); - createUpdate(group); - - return group; - } - - /** - * Creates the area for selection on product/component/version. - */ - protected Control createProductAttributes(Composite control) { - - GridData gd; - GridLayout layout; - - // Search expression - Composite group = new Composite(control, SWT.NONE); - layout = new GridLayout(); - layout.numColumns = 4; - group.setLayout(layout); - gd = new GridData(SWT.FILL, SWT.FILL, true, true); - gd.horizontalSpan = 5; - group.setLayoutData(gd); - - // Labels - Label label = new Label(group, SWT.LEFT); - label.setText("Product"); - - label = new Label(group, SWT.LEFT); - label.setText("Component"); - - label = new Label(group, SWT.LEFT); - label.setText("Version"); - - label = new Label(group, SWT.LEFT); - label.setText("Milestone"); - - // Lists - product = new List(group, SWT.MULTI | SWT.V_SCROLL | SWT.BORDER); - gd = new GridData(SWT.FILL, SWT.FILL, true, true); - gd.heightHint = HEIGHT_ATTRIBUTE_COMBO; - product.setLayoutData(gd); - product.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - if (product.getSelectionIndex() != -1) { - String[] selectedProducts = product.getSelection(); - updateAttributesFromRepository(repository.getUrl(), selectedProducts, false); - } else { - updateAttributesFromRepository(repository.getUrl(), null, false); - } - if (restoring) { - restoring = false; - restoreWidgetValues(); - } - if (scontainer != null) { - scontainer.setPerformActionEnabled(canQuery()); - } - } - }); - - component = new List(group, SWT.MULTI | SWT.V_SCROLL | SWT.BORDER); - gd = new GridData(SWT.FILL, SWT.FILL, true, true); - gd.heightHint = HEIGHT_ATTRIBUTE_COMBO; - component.setLayoutData(gd); - - version = new List(group, SWT.MULTI | SWT.V_SCROLL | SWT.BORDER); - gd = new GridData(SWT.FILL, SWT.FILL, true, true); - gd.heightHint = HEIGHT_ATTRIBUTE_COMBO; - version.setLayoutData(gd); - - target = new List(group, SWT.MULTI | SWT.V_SCROLL | SWT.BORDER); - gd = new GridData(SWT.FILL, SWT.FILL, true, true); - gd.heightHint = HEIGHT_ATTRIBUTE_COMBO; - target.setLayoutData(gd); - - return group; - } - - /** - * Creates the area for selection of bug attributes (status, etc.) - */ - protected Control createLists(Composite control) { - GridData gd; - GridLayout layout; - - // Search expression - Composite group = new Composite(control, SWT.NONE); - layout = new GridLayout(); - layout.numColumns = 6; - group.setLayout(layout); - gd = new GridData(SWT.FILL, SWT.FILL, true, true); - gd.horizontalSpan = 5; - group.setLayoutData(gd); - - // Labels - Label label = new Label(group, SWT.LEFT); - label.setText("Status"); - - label = new Label(group, SWT.LEFT); - label.setText("Resolution"); - - label = new Label(group, SWT.LEFT); - label.setText("Severity"); - - label = new Label(group, SWT.LEFT); - label.setText("Priority"); - - label = new Label(group, SWT.LEFT); - label.setText("Hardware"); - - label = new Label(group, SWT.LEFT); - label.setText("OS"); - - // Lists - status = new List(group, SWT.MULTI | SWT.V_SCROLL | SWT.BORDER); - gd = new GridData(SWT.FILL, SWT.FILL, true, true); - gd.heightHint = 40; - status.setLayoutData(gd); - - resolution = new List(group, SWT.MULTI | SWT.V_SCROLL | SWT.BORDER); - gd = new GridData(SWT.FILL, SWT.FILL, true, true); - gd.heightHint = 40; - resolution.setLayoutData(gd); - - severity = new List(group, SWT.MULTI | SWT.V_SCROLL | SWT.BORDER); - gd = new GridData(SWT.FILL, SWT.FILL, true, true); - gd.heightHint = 40; - severity.setLayoutData(gd); - - priority = new List(group, SWT.MULTI | SWT.V_SCROLL | SWT.BORDER); - gd = new GridData(SWT.FILL, SWT.FILL, true, true); - gd.heightHint = 40; - priority.setLayoutData(gd); - - hardware = new List(group, SWT.MULTI | SWT.V_SCROLL | SWT.BORDER); - gd = new GridData(SWT.FILL, SWT.FILL, true, true); - gd.heightHint = 40; - hardware.setLayoutData(gd); - - os = new List(group, SWT.MULTI | SWT.V_SCROLL | SWT.BORDER); - gd = new GridData(SWT.FILL, SWT.FILL, true, true); - gd.heightHint = 40; - os.setLayoutData(gd); - - return group; - } - - protected Text daysText; - - protected Control createLastDays(Composite control) { - GridLayout layout; - GridData gd; - - Group group = new Group(control, SWT.NONE); - layout = new GridLayout(6, false); - group.setLayout(layout); - group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - gd = new GridData(GridData.BEGINNING | GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); - gd.horizontalSpan = 2; - group.setLayoutData(gd); - - Label label = new Label(group, SWT.LEFT); - label.setText("Only bugs changed in the last "); - - // operation combo - daysText = new Text(group, SWT.BORDER); - daysText.setTextLimit(5); - GridData daysLayoutData = new GridData(); - daysLayoutData.widthHint = 30; - daysText.setLayoutData(daysLayoutData); - daysText.addListener(SWT.Modify, this); - // daysText.addFocusListener(new FocusListener() { - // - // public void focusGained(FocusEvent e) { - // // ignore - // - // } - // - // public void focusLost(FocusEvent e) { - // String days = daysText.getText(); - // if (days.length() == 0) - // return; - // try { - // if (Integer.parseInt(days) < 0) { - // daysText.setText(""); - // } - // } catch (NumberFormatException ex) { - // daysText.setText(""); - // } - // } - // }); - - // daysText.addModifyListener(new ModifyListener() { - // public void modifyText(ModifyEvent e) { - // String days = daysText.getText(); - // if (days.length() == 0) - // return; - // for (int i = days.length() - 1; i >= 0; i--) { - // try { - // if (days.equals("") || Integer.parseInt(days) > -1) { - // if (i == days.length() - 1) - // return; - // else - // break; - // } - // } catch (NumberFormatException ex) { - // days = days.substring(0, i); - // } - // } - // daysText.setText(days); - // } - // }); - label = new Label(group, SWT.LEFT); - label.setText(" days."); - - label = new Label(group, SWT.LEFT); - label.setText(" Show a maximum of "); - - // operation combo - maxHitsText = new Text(group, SWT.BORDER); - maxHitsText.setTextLimit(6); - maxHitsText.addListener(SWT.Modify, this); - - // maxHitsText.addFocusListener(new FocusListener() { - // - // public void focusGained(FocusEvent e) { - // // ignore - // - // } - // - // public void focusLost(FocusEvent e) { - // String maxHitss = maxHitsText.getText(); - // if (maxHitss.length() == 0) - // return; - // - // try { - // if (Integer.parseInt(maxHitss) < 0) { - // maxHitsText.setText(MAX_HITS); - // - // } - // } catch (NumberFormatException ex) { - // maxHitsText.setText(MAX_HITS); - // } - // } - // }); - - // maxHitsText.addModifyListener(new ModifyListener() { - // public void modifyText(ModifyEvent e) { - // String maxHitss = maxHitsText.getText(); - // if (maxHitss.length() == 0) - // return; - // for (int i = maxHitss.length() - 1; i >= 0; i--) { - // try { - // if (maxHitss.equals("") || Integer.parseInt(maxHitss) > -1) { - // if (i == maxHitss.length() - 1) { - // maxHits = maxHitss; - // return; - // } else { - // break; - // } - // } - // } catch (NumberFormatException ex) { - // maxHitss = maxHitss.substring(0, i); - // } - // } - // - // BugzillaSearchPage.this.maxHits = maxHitss; - // } - // }); - gd = new GridData(); - gd.widthHint = 30; - maxHitsText.setLayoutData(gd); - label = new Label(group, SWT.LEFT); - label.setText(" hits. (-1 returns all)"); - - maxHits = MAX_HITS; - maxHitsText.setText(maxHits); - - return group; - } - - // protected Control createMaxHits(Composite control) { - // GridLayout layout; - // GridData gd; - // - // Group group = new Group(control, SWT.NONE); - // layout = new GridLayout(3, false); - // group.setLayout(layout); - // group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - // gd = new GridData(GridData.BEGINNING | GridData.FILL_HORIZONTAL | - // GridData.GRAB_HORIZONTAL); - // gd.horizontalSpan = 2; - // group.setLayoutData(gd); - // - // Label label = new Label(group, SWT.LEFT); - // label.setText("Show a maximum of "); - // - // // operation combo - // maxHitsText = new Text(group, SWT.BORDER); - // maxHitsText.setTextLimit(5); - // maxHitsText.addModifyListener(new ModifyListener() { - // public void modifyText(ModifyEvent e) { - // String maxHitss = maxHitsText.getText(); - // if (maxHitss.length() == 0) - // return; - // for (int i = maxHitss.length() - 1; i >= 0; i--) { - // try { - // if (maxHitss.equals("") || Integer.parseInt(maxHitss) > -1) { - // if (i == maxHitss.length() - 1) { - // maxHits = maxHitss; - // return; - // } else { - // break; - // } - // } - // } catch (NumberFormatException ex) { - // maxHitss = maxHitss.substring(0, i); - // } - // } - // - // BugzillaSearchPage.this.maxHits = maxHitss; - // } - // }); - // gd = new GridData(); - // gd.widthHint = 20; - // maxHitsText.setLayoutData(gd); - // label = new Label(group, SWT.LEFT); - // label.setText(" Hits. (-1 means all hits are returned)"); - // - // maxHits = "100"; - // maxHitsText.setText(maxHits); - // - // return group; - // } - - public String getMaxHits() { - return maxHitsText.getText(); - } - - private static final String[] emailText = { "bug owner", "reporter", "CC list", "commenter" }; - - protected Control createEmail(Composite control) { - GridLayout layout; - GridData gd; - - Group group = new Group(control, SWT.NONE); - layout = new GridLayout(7, false); - group.setLayout(layout); - group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - gd = new GridData(GridData.BEGINNING | GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); - gd.horizontalSpan = 2; - group.setLayoutData(gd); - - Label label = new Label(group, SWT.LEFT); - label.setText("Email: "); - - // pattern combo - emailPattern = new Combo(group, SWT.SINGLE | SWT.BORDER); - emailPattern.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - if (scontainer != null) { - scontainer.setPerformActionEnabled(canQuery()); - } - } - }); - emailPattern.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent e) { - handleWidgetSelected(emailPattern, emailOperation, previousEmailPatterns); - } - }); - gd = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); - gd.widthHint = 110; - emailPattern.setLayoutData(gd); - - // operation combo - emailOperation = new Combo(group, SWT.SINGLE | SWT.READ_ONLY | SWT.BORDER); - emailOperation.setItems(emailOperationText); - emailOperation.setText(emailOperationText[0]); - emailOperation.select(0); - - // Composite buttons = new Composite(group, SWT.NONE); - // layout = new GridLayout(4, false); - // buttons.setLayout(layout); - // buttons.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - // gd = new GridData(GridData.BEGINNING); - // gd.horizontalSpan = 3; - // buttons.setLayoutData(gd); - - emailButton = new Button[emailText.length]; - for (int i = 0; i < emailButton.length; i++) { - Button button = new Button(group, SWT.CHECK); - button.setText(emailText[i]); - emailButton[i] = button; - } - - return group; - } - - /** - * Creates the buttons for remembering a query and accessing previously - * saved queries. - */ - protected Control createSaveQuery(Composite control) { - GridLayout layout; - GridData gd; - - Group group = new Group(control, SWT.NONE); - layout = new GridLayout(3, false); - group.setLayout(layout); - group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - gd = new GridData(GridData.BEGINNING | GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); - gd.horizontalSpan = 2; - group.setLayoutData(gd); - - // loadButton = new Button(group, SWT.PUSH | SWT.LEFT); - // loadButton.setText("Saved Queries..."); - // final BugzillaSearchPage bsp = this; - // loadButton.addSelectionListener(new SelectionAdapter() { - // - // @Override - // public void widgetSelected(SelectionEvent event) { - // GetQueryDialog qd = new GetQueryDialog(getShell(), "Saved Queries", - // input); - // if (qd.open() == InputDialog.OK) { - // selIndex = qd.getSelected(); - // if (selIndex != -1) { - // rememberedQuery = true; - // performAction(); - // bsp.getShell().close(); - // } - // } - // } - // }); - // loadButton.setEnabled(true); - // loadButton.setLayoutData(new - // GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); - // - // saveButton = new Button(group, SWT.PUSH | SWT.LEFT); - // saveButton.setText("Remember..."); - // saveButton.addSelectionListener(new SelectionAdapter() { - // - // @Override - // public void widgetSelected(SelectionEvent event) { - // SaveQueryDialog qd = new SaveQueryDialog(getShell(), "Remember - // Query"); - // if (qd.open() == InputDialog.OK) { - // String qName = qd.getText(); - // if (qName != null && qName.compareTo("") != 0) { - // try { - // input.add(getQueryParameters().toString(), qName, - // summaryPattern.getText()); - // } catch (UnsupportedEncodingException e) { - // /* - // * Do nothing. Every implementation of the Java - // * platform is required to support the standard - // * charset "UTF-8" - // */ - // } - // } - // } - // } - // }); - // saveButton.setEnabled(true); - // saveButton.setLayoutData(new - // GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); - - return group; - } - - // public static SavedQueryFile getInput() { - // return input; - // } - - protected Control createUpdate(final Composite control) { - GridData gd; - // Label label; - - Composite group = new Composite(control, SWT.NONE); - GridLayout layout = new GridLayout(2, false); - group.setLayout(layout); - group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - gd = new GridData(GridData.BEGINNING); - gd.horizontalSpan = 2; - group.setLayoutData(gd); - - // Info text - // label = new Label(group, SWT.LEFT); - // label.setText("Update search options from server:"); - // gd = new GridData(GridData.BEGINNING); - // label.setLayoutData(gd); - - updateButton = new Button(group, SWT.PUSH); - updateButton.setText("Update Attributes from Repository"); - - updateButton.setLayoutData(new GridData()); - - updateButton.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent e) { - if (repository != null) { - updateAttributesFromRepository(repository.getUrl(), null, true); - } else { - MessageDialog.openInformation(Display.getCurrent().getActiveShell(), - IBugzillaConstants.TITLE_MESSAGE_DIALOG, TaskRepositoryManager.MESSAGE_NO_REPOSITORY); - } - } - }); - - return group; - } - - private void handleWidgetSelected(Combo widget, Combo operation, ArrayList<BugzillaSearchData> history) { - if (widget.getSelectionIndex() < 0) - return; - int index = history.size() - 1 - widget.getSelectionIndex(); - BugzillaSearchData patternData = history.get(index); - if (patternData == null || !widget.getText().equals(patternData.pattern)) - return; - widget.setText(patternData.pattern); - operation.setText(operation.getItem(patternData.operation)); - } - - public boolean performAction() { - if (repository == null) { - MessageDialog.openInformation(Display.getCurrent().getActiveShell(), - IBugzillaConstants.TITLE_MESSAGE_DIALOG, TaskRepositoryManager.MESSAGE_NO_REPOSITORY); - return false; - } - - if (restoreQueryOptions) { - saveWidgetValues(); - } - - getPatternData(summaryPattern, summaryOperation, previousSummaryPatterns); - getPatternData(commentPattern, commentOperation, previousCommentPatterns); - getPatternData(this.emailPattern, emailOperation, previousEmailPatterns); - - // try { - // // if the summary contains a single bug id, open the bug directly - // int id = Integer.parseInt(summaryText); - // return BugzillaUITools.show(repository.getUrl(), id); - // } catch (NumberFormatException ignored) { - // // ignore this since this means that the text is not a bug id - // } - - // Don't activate the search result view until it is known that the - // user is not opening a bug directly -- there is no need to open - // the view if no searching is going to take place. - NewSearchUI.activateSearchResultView(); - - String summaryText = summaryPattern.getText(); - BugzillaUiPlugin.getDefault().getPreferenceStore().setValue(IBugzillaConstants.MOST_RECENT_QUERY, summaryText); - - Proxy proxySettings = TasksUiPlugin.getDefault().getProxySettings(); - SearchHitCollector collector = new SearchHitCollector(TasksUiPlugin.getTaskListManager().getTaskList(), - repository, getQuery(), proxySettings); - NewSearchUI.runQueryInBackground(collector); - - return true; - } - - @Override - public void setVisible(boolean visible) { - if (visible && summaryPattern != null) { - if (firstTime) { - if (repository == null) { - repository = TasksUiPlugin.getRepositoryManager().getDefaultRepository( - BugzillaCorePlugin.REPOSITORY_KIND); - } - // Set<TaskRepository> repositories = - // TasksUiPlugin.getRepositoryManager().getRepositories( - // BugzillaCorePlugin.REPOSITORY_KIND); - // String[] repositoryUrls = new String[repositories.size()]; - // int i = 0; - // int indexToSelect = 0; - // for (Iterator<TaskRepository> iter = repositories.iterator(); - // iter.hasNext();) { - // TaskRepository currRepsitory = iter.next(); - // // if (i == 0 && repository == null) { - // // repository = currRepsitory; - // // indexToSelect = 0; - // // } - // if (repository != null && repository.equals(currRepsitory)) { - // indexToSelect = i; - // } - // repositoryUrls[i] = currRepsitory.getUrl(); - // i++; - // } - - // IDialogSettings settings = getDialogSettings(); - // if (repositoryCombo != null) { - // repositoryCombo.setItems(repositoryUrls); - // if (repositoryUrls.length == 0) { - // MessageDialog.openInformation(Display.getCurrent().getActiveShell(), - // IBugzillaConstants.TITLE_MESSAGE_DIALOG, - // TaskRepositoryManager.MESSAGE_NO_REPOSITORY); - // } else { - // String selectRepo = settings.get(STORE_REPO_ID); - // if (selectRepo != null && repositoryCombo.indexOf(selectRepo) - // > -1) { - // repositoryCombo.setText(selectRepo); - // repository = - // TasksUiPlugin.getRepositoryManager().getRepository( - // BugzillaCorePlugin.REPOSITORY_KIND, - // repositoryCombo.getText()); - // if (repository == null) { - // repository = - // TasksUiPlugin.getRepositoryManager().getDefaultRepository( - // BugzillaCorePlugin.REPOSITORY_KIND); - // } - // } else { - // repositoryCombo.select(indexToSelect); - // } - // updateAttributesFromRepository(repositoryCombo.getText(), - // null, false); - // } - // } - - firstTime = false; - // Set item and text here to prevent page from resizing - for (String searchPattern : getPreviousPatterns(previousSummaryPatterns)) { - summaryPattern.add(searchPattern); - } - // summaryPattern.setItems(getPreviousPatterns(previousSummaryPatterns)); - for (String comment : getPreviousPatterns(previousCommentPatterns)) { - commentPattern.add(comment); - } - // commentPattern.setItems(getPreviousPatterns(previousCommentPatterns)); - for (String email : getPreviousPatterns(previousEmailPatterns)) { - emailPattern.add(email); - } - // emailPattern.setItems(getPreviousPatterns(previousEmailPatterns)); - - // TODO: update status, resolution, severity etc if possible... - if (repository != null) { - updateAttributesFromRepository(repository.getUrl(), null, false); - if (product.getItemCount() == 0) { - updateAttributesFromRepository(repository.getUrl(), null, true); - } - } - if (originalQuery != null) { - try { - updateDefaults(originalQuery.getUrl(), String.valueOf(originalQuery.getMaxHits())); - } catch (UnsupportedEncodingException e) { - // ignore - } - } - } - - /* - * hack: we have to select the correct product, then update the - * attributes so the component/version/milestone lists have the - * proper values, then we can restore all the widget selections. - */ - if (repository != null) { - IDialogSettings settings = getDialogSettings(); - String repoId = "." + repository.getUrl(); - if (getWizard() == null && restoreQueryOptions && settings.getArray(STORE_PRODUCT_ID + repoId) != null - && product != null) { - product.setSelection(nonNullArray(settings, STORE_PRODUCT_ID + repoId)); - if (product.getSelection().length > 0) { - updateAttributesFromRepository(repository.getUrl(), product.getSelection(), false); - } - restoreWidgetValues(); - } - } - - if (scontainer != null) { - scontainer.setPerformActionEnabled(canQuery()); - } - if (getWizard() == null) { - // TODO: wierd check - summaryPattern.setFocus(); - } - } - super.setVisible(visible); - } - - /** - * Returns <code>true</code> if at least some parameter is given to query - * on. - */ - private boolean canQuery() { - return product.getSelectionCount() > 0 || component.getSelectionCount() > 0 || version.getSelectionCount() > 0 - || target.getSelectionCount() > 0 || status.getSelectionCount() > 0 - || resolution.getSelectionCount() > 0 || severity.getSelectionCount() > 0 - || priority.getSelectionCount() > 0 || hardware.getSelectionCount() > 0 || os.getSelectionCount() > 0 - || summaryPattern.getText().length() > 0 || commentPattern.getText().length() > 0 - || emailPattern.getText().length() > 0; - } - - /** - * Return search pattern data and update search history list. An existing - * entry will be updated or a new one created. - */ - private BugzillaSearchData getPatternData(Combo widget, Combo operation, - ArrayList<BugzillaSearchData> previousSearchQueryData) { - String pattern = widget.getText(); - if (pattern == null || pattern.trim().equals("")) { - return null; - } - BugzillaSearchData match = null; - int i = previousSearchQueryData.size() - 1; - while (i >= 0) { - match = previousSearchQueryData.get(i); - if (pattern.equals(match.pattern)) { - break; - } - i--; - } - if (i >= 0) { - match.operation = operation.getSelectionIndex(); - // remove - will be added last (see below) - previousSearchQueryData.remove(match); - } else { - match = new BugzillaSearchData(widget.getText(), operation.getSelectionIndex()); - } - previousSearchQueryData.add(match); - return match; - } - - /** - * Returns an array of previous summary patterns - */ - private String[] getPreviousPatterns(ArrayList<BugzillaSearchData> patternHistory) { - int size = patternHistory.size(); - String[] patterns = new String[size]; - for (int i = 0; i < size; i++) - patterns[i] = (patternHistory.get(size - 1 - i)).pattern; - return patterns; - } - - public String getSearchURL(TaskRepository repository) { - try { - // if (rememberedQuery) { - // return getQueryURL(repository, new - // StringBuffer(input.getQueryParameters(selIndex))); - // } else { - return getQueryURL(repository, getQueryParameters()); - // } - } catch (UnsupportedEncodingException e) { - // ignore - } - return ""; - } - - protected String getQueryURL(TaskRepository repository, StringBuffer params) { - StringBuffer url = new StringBuffer(getQueryURLStart(repository).toString()); - url.append(params); - - // HACK make sure that the searches come back sorted by priority. This - // should be a search option though - url.append("&order=Importance"); - // url.append(BugzillaRepositoryUtil.contentTypeRDF); - return url.toString(); - } - - /** - * Creates the bugzilla query URL start. - * - * Example: https://bugs.eclipse.org/bugs/buglist.cgi? - */ - private StringBuffer getQueryURLStart(TaskRepository repository) { - // StringBuffer sb = new - // StringBuffer(BugzillaPlugin.getDefault().getServerName()); - StringBuffer sb = new StringBuffer(repository.getUrl()); - - if (sb.charAt(sb.length() - 1) != '/') { - sb.append('/'); - } - sb.append("buglist.cgi?"); - - // NOTE: authentication now added in BugzillaSsearchEngine constructor - // // use the username and password if we have it - // if (repository.hasCredentials()) { - // try { - // sb.append("GoAheadAndLogIn=1&Bugzilla_login=" - // + URLEncoder.encode(repository.getUserName(), - // BugzillaPlugin.ENCODING_UTF_8) - // + "&Bugzilla_password=" - // + URLEncoder.encode(repository.getPassword(), - // BugzillaPlugin.ENCODING_UTF_8) + "&"); - // } catch (UnsupportedEncodingException e) { - // MylarStatusHandler.fail(e, "unsupported encoding", false); - // } - // } - - return sb; - } - - /** - * Goes through the query form and builds up the query parameters. - * - * Example: short_desc_type=substring&short_desc=bla& ... TODO: The - * encoding here should match TaskRepository.getCharacterEncoding() - * - * @throws UnsupportedEncodingException - */ - protected StringBuffer getQueryParameters() throws UnsupportedEncodingException { - StringBuffer sb = new StringBuffer(); - - sb.append("short_desc_type="); - sb.append(patternOperationValues[summaryOperation.getSelectionIndex()]); - - sb.append("&short_desc="); - sb.append(URLEncoder.encode(summaryPattern.getText(), repository.getCharacterEncoding())); - - int[] selected = product.getSelectionIndices(); - for (int i = 0; i < selected.length; i++) { - sb.append("&product="); - sb.append(URLEncoder.encode(product.getItem(selected[i]), repository.getCharacterEncoding())); - } - - selected = component.getSelectionIndices(); - for (int i = 0; i < selected.length; i++) { - sb.append("&component="); - sb.append(URLEncoder.encode(component.getItem(selected[i]), repository.getCharacterEncoding())); - } - - selected = version.getSelectionIndices(); - for (int i = 0; i < selected.length; i++) { - sb.append("&version="); - sb.append(URLEncoder.encode(version.getItem(selected[i]), repository.getCharacterEncoding())); - } - - selected = target.getSelectionIndices(); - for (int i = 0; i < selected.length; i++) { - sb.append("&target_milestone="); - sb.append(URLEncoder.encode(target.getItem(selected[i]), repository.getCharacterEncoding())); - } - - sb.append("&long_desc_type="); - sb.append(patternOperationValues[commentOperation.getSelectionIndex()]); - sb.append("&long_desc="); - sb.append(URLEncoder.encode(commentPattern.getText(), repository.getCharacterEncoding())); - - selected = status.getSelectionIndices(); - for (int i = 0; i < selected.length; i++) { - sb.append("&bug_status="); - sb.append(status.getItem(selected[i])); - } - - selected = resolution.getSelectionIndices(); - for (int i = 0; i < selected.length; i++) { - sb.append("&resolution="); - sb.append(resolution.getItem(selected[i])); - } - - selected = severity.getSelectionIndices(); - for (int i = 0; i < selected.length; i++) { - sb.append("&bug_severity="); - sb.append(severity.getItem(selected[i])); - } - - selected = priority.getSelectionIndices(); - for (int i = 0; i < selected.length; i++) { - sb.append("&priority="); - sb.append(priority.getItem(selected[i])); - } - - selected = hardware.getSelectionIndices(); - for (int i = 0; i < selected.length; i++) { - sb.append("&ref_platform="); - sb.append(URLEncoder.encode(hardware.getItem(selected[i]), repository.getCharacterEncoding())); - } - - selected = os.getSelectionIndices(); - for (int i = 0; i < selected.length; i++) { - sb.append("&op_sys="); - sb.append(URLEncoder.encode(os.getItem(selected[i]), repository.getCharacterEncoding())); - } - - if (emailPattern.getText() != null) { - for (int i = 0; i < emailButton.length; i++) { - if (emailButton[i].getSelection()) { - sb.append("&"); - sb.append(emailRoleValues[i]); - sb.append("=1"); - } - } - sb.append("&emailtype1="); - sb.append(emailOperationValues[emailOperation.getSelectionIndex()]); - sb.append("&email1="); - sb.append(URLEncoder.encode(emailPattern.getText(), repository.getCharacterEncoding())); - } - - if (daysText.getText() != null && !daysText.getText().equals("")) { - try { - Integer.parseInt(daysText.getText()); - sb.append("&changedin="); - sb.append(URLEncoder.encode(daysText.getText(), repository.getCharacterEncoding())); - } catch (NumberFormatException ignored) { - // this means that the days is not a number, so don't worry - } - } - - return sb; - } - - // --------------- Configuration handling -------------- - - // Dialog store id constants - protected final static String PAGE_NAME = "BugzillaSearchPage"; //$NON-NLS-1$ - - private static final String STORE_PRODUCT_ID = PAGE_NAME + ".PRODUCT"; - - private static final String STORE_COMPONENT_ID = PAGE_NAME + ".COMPONENT"; - - private static final String STORE_VERSION_ID = PAGE_NAME + ".VERSION"; - - private static final String STORE_MSTONE_ID = PAGE_NAME + ".MILESTONE"; - - private static final String STORE_STATUS_ID = PAGE_NAME + ".STATUS"; - - private static final String STORE_RESOLUTION_ID = PAGE_NAME + ".RESOLUTION"; - - private static final String STORE_SEVERITY_ID = PAGE_NAME + ".SEVERITY"; - - private static final String STORE_PRIORITY_ID = PAGE_NAME + ".PRIORITY"; - - private static final String STORE_HARDWARE_ID = PAGE_NAME + ".HARDWARE"; - - private static final String STORE_OS_ID = PAGE_NAME + ".OS"; - - private static final String STORE_SUMMARYMATCH_ID = PAGE_NAME + ".SUMMARYMATCH"; - - private static final String STORE_COMMENTMATCH_ID = PAGE_NAME + ".COMMENTMATCH"; - - private static final String STORE_EMAILMATCH_ID = PAGE_NAME + ".EMAILMATCH"; - - private static final String STORE_MAXHITS_ID = PAGE_NAME + ".MAXHITS"; - - private static final String STORE_EMAILBUTTON_ID = PAGE_NAME + ".EMAILATTR"; - - private static final String STORE_SUMMARYTEXT_ID = PAGE_NAME + ".SUMMARYTEXT"; - - private static final String STORE_COMMENTTEXT_ID = PAGE_NAME + ".COMMENTTEXT"; - - private static final String STORE_EMAILADDRESS_ID = PAGE_NAME + ".EMAILADDRESS"; - - // private static final String STORE_REPO_ID = PAGE_NAME + ".REPO"; - - protected Combo summaryOperation; - - protected List product; - - protected List os; - - protected List hardware; - - protected List priority; - - protected List severity; - - protected List resolution; - - protected List status; - - protected Combo commentOperation; - - protected Combo commentPattern; - - protected List component; - - protected List version; - - protected List target; - - protected Combo emailOperation; - - protected Combo emailPattern; - - protected Button[] emailButton; - - // /** File containing saved queries */ - // protected static SavedQueryFile input; - - // /** "Remember query" button */ - // protected Button saveButton; - - // /** "Saved queries..." button */ - // protected Button loadButton; - - // /** Run a remembered query */ - // protected boolean rememberedQuery = false; - - /** Index of the saved query to run */ - protected int selIndex; - - protected Button updateButton; - - public IDialogSettings getDialogSettings() { - IDialogSettings settings = BugzillaUiPlugin.getDefault().getDialogSettings(); - fDialogSettings = settings.getSection(PAGE_NAME); - if (fDialogSettings == null) - fDialogSettings = settings.addNewSection(PAGE_NAME); - return fDialogSettings; - } - - /** - * Initializes itself from the stored page settings. - */ - private void readConfiguration() { - getDialogSettings(); - } - - private void updateAttributesFromRepository(String repositoryUrl, String[] selectedProducts, boolean connect) { - - if (connect) { - final AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager().getRepositoryConnector( - repository.getKind()); - - IRunnableWithProgress updateRunnable = new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - monitor.beginTask("Updating search options...", IProgressMonitor.UNKNOWN); - - try { - connector.updateAttributes(repository, TasksUiPlugin.getDefault().getProxySettings(), monitor); - } catch (CoreException ce) { - if (ce.getStatus().getException() instanceof GeneralSecurityException) { - MylarStatusHandler.fail(ce, - "Bugzilla could not log you in to get the information you requested since login name or password is incorrect.\n" - + "Please ensure proper configuration in " + TaskRepositoriesView.NAME - + ". ", true); - } else if (ce.getStatus().getException() instanceof IOException) { - MylarStatusHandler.fail(ce, "Connection Error, please ensure proper configuration in " - + TaskRepositoriesView.NAME + ".", true); - } else { - MylarStatusHandler.fail(ce, "Error updating repository attributes for " - + repository.getUrl(), true); - } - return; - } - BugzillaUiPlugin.updateQueryOptions(repository, monitor); - } - }; - - try { - // TODO: make cancelable (bug 143011) - if (getContainer() != null) { - getContainer().run(true, false, updateRunnable); - } else { - IProgressService service = PlatformUI.getWorkbench().getProgressService(); - service.run(true, false, updateRunnable); - } - - } catch (InvocationTargetException e) { - MessageDialog.openError(null, "Error updating search options", "Error was : " - + e.getCause().getMessage()); - } catch (InterruptedException e) { - // Was cancelled... - } - } - - if (selectedProducts == null) { - String[] productsList = BugzillaUiPlugin.getQueryOptions(IBugzillaConstants.VALUES_PRODUCT, null, - repositoryUrl); - Arrays.sort(productsList, String.CASE_INSENSITIVE_ORDER); - product.setItems(productsList); - } - - String[] componentsList = BugzillaUiPlugin.getQueryOptions(IBugzillaConstants.VALUES_COMPONENT, - selectedProducts, repositoryUrl); - Arrays.sort(componentsList, String.CASE_INSENSITIVE_ORDER); - component.setItems(componentsList); - - version.setItems(BugzillaUiPlugin.getQueryOptions(IBugzillaConstants.VALUES_VERSION, selectedProducts, - repositoryUrl)); - - target.setItems(BugzillaUiPlugin.getQueryOptions(IBugzillaConstants.VALUES_TARGET, selectedProducts, - repositoryUrl)); - - if (selectedProducts == null) { - status.setItems(BugzillaUiPlugin.getQueryOptions(IBugzillaConstants.VALUES_STATUS, selectedProducts, - repositoryUrl)); - - // status.setSelection(BugzillaRepositoryUtil.getQueryOptions(IBugzillaConstants.VALUSE_STATUS_PRESELECTED, - // repositoryUrl)); - - resolution.setItems(BugzillaUiPlugin.getQueryOptions(IBugzillaConstants.VALUES_RESOLUTION, - selectedProducts, repositoryUrl)); - - severity.setItems(BugzillaUiPlugin.getQueryOptions(IBugzillaConstants.VALUES_SEVERITY, selectedProducts, - repositoryUrl)); - - priority.setItems(BugzillaUiPlugin.getQueryOptions(IBugzillaConstants.VALUES_PRIORITY, selectedProducts, - repositoryUrl)); - - hardware.setItems(BugzillaUiPlugin.getQueryOptions(IBugzillaConstants.VALUES_HARDWARE, selectedProducts, - repositoryUrl)); - - os - .setItems(BugzillaUiPlugin.getQueryOptions(IBugzillaConstants.VALUES_OS, selectedProducts, - repositoryUrl)); - } - } - - public TaskRepository getRepository() { - return repository; - } - - public void setRepository(TaskRepository repository) { - this.repository = repository; - } - - public boolean canFlipToNextPage() { - // if (getErrorMessage() != null) - // return false; - // - // return true; - return false; - } - - public void handleEvent(Event event) { - String message = null; - if (event.widget == daysText) { - String days = daysText.getText(); - if (days.length() > 0) { - try { - if (Integer.parseInt(days) < 0) { - message = NUM_DAYS_POSITIVE + days + " is invalid."; - } - } catch (NumberFormatException ex) { - message = NUM_DAYS_POSITIVE + days + " is invalid."; - } - } - } else if (event.widget == maxHitsText) { - String maxHitss = maxHitsText.getText(); - if (maxHitss.length() == 0) { - message = MAX_HITS_GREATER; - } else { - try { - if (Integer.parseInt(maxHitss) < -1 || Integer.parseInt(maxHitss) == 0) { - message = MAX_HITS_GREATER; - } - } catch (NumberFormatException ex) { - message = MAX_HITS_GREATER; - } - } - } - - setPageComplete(message == null); - setErrorMessage(message); - if (getWizard() != null) { - getWizard().getContainer().updateButtons(); - } - } - - /** - * TODO: get rid of this? - */ - public void updateDefaults(String startingUrl, String maxHits) throws UnsupportedEncodingException { - // String serverName = startingUrl.substring(0, - // startingUrl.indexOf("?")); - - startingUrl = startingUrl.substring(startingUrl.indexOf("?") + 1); - String[] options = startingUrl.split("&"); - for (String option : options) { - String key = option.substring(0, option.indexOf("=")); - String value = URLDecoder.decode(option.substring(option.indexOf("=") + 1), repository - .getCharacterEncoding()); - if (key == null) - continue; - - if (key.equals("short_desc")) { - summaryPattern.setText(value); - } else if (key.equals("short_desc_type")) { - if (value.equals("allwordssubstr")) - value = "all words"; - else if (value.equals("anywordssubstr")) - value = "any word"; - int index = 0; - for (String item : summaryOperation.getItems()) { - if (item.compareTo(value) == 0) - break; - index++; - } - if (index < summaryOperation.getItemCount()) { - summaryOperation.select(index); - } - } else if (key.equals("product")) { - String[] sel = product.getSelection(); - java.util.List<String> selList = Arrays.asList(sel); - selList = new ArrayList<String>(selList); - selList.add(value); - sel = new String[selList.size()]; - product.setSelection(selList.toArray(sel)); - updateAttributesFromRepository(repository.getUrl(), selList.toArray(sel), false); - } else if (key.equals("component")) { - String[] sel = component.getSelection(); - java.util.List<String> selList = Arrays.asList(sel); - selList = new ArrayList<String>(selList); - selList.add(value); - sel = new String[selList.size()]; - component.setSelection(selList.toArray(sel)); - } else if (key.equals("version")) { - String[] sel = version.getSelection(); - java.util.List<String> selList = Arrays.asList(sel); - selList = new ArrayList<String>(selList); - selList.add(value); - sel = new String[selList.size()]; - version.setSelection(selList.toArray(sel)); - } else if (key.equals("target_milestone")) { // XXX - String[] sel = target.getSelection(); - java.util.List<String> selList = Arrays.asList(sel); - selList = new ArrayList<String>(selList); - selList.add(value); - sel = new String[selList.size()]; - target.setSelection(selList.toArray(sel)); - } else if (key.equals("version")) { - String[] sel = version.getSelection(); - java.util.List<String> selList = Arrays.asList(sel); - selList = new ArrayList<String>(selList); - selList.add(value); - sel = new String[selList.size()]; - version.setSelection(selList.toArray(sel)); - } else if (key.equals("long_desc_type")) { - if (value.equals("allwordssubstr")) - value = "all words"; - else if (value.equals("anywordssubstr")) - value = "any word"; - int index = 0; - for (String item : commentOperation.getItems()) { - if (item.compareTo(value) == 0) - break; - index++; - } - if (index < commentOperation.getItemCount()) { - commentOperation.select(index); - } - } else if (key.equals("long_desc")) { - commentPattern.setText(value); - } else if (key.equals("bug_status")) { - String[] sel = status.getSelection(); - java.util.List<String> selList = Arrays.asList(sel); - selList = new ArrayList<String>(selList); - selList.add(value); - sel = new String[selList.size()]; - status.setSelection(selList.toArray(sel)); - } else if (key.equals("resolution")) { - String[] sel = resolution.getSelection(); - java.util.List<String> selList = Arrays.asList(sel); - selList = new ArrayList<String>(selList); - selList.add(value); - sel = new String[selList.size()]; - resolution.setSelection(selList.toArray(sel)); - } else if (key.equals("bug_severity")) { - String[] sel = severity.getSelection(); - java.util.List<String> selList = Arrays.asList(sel); - selList = new ArrayList<String>(selList); - selList.add(value); - sel = new String[selList.size()]; - severity.setSelection(selList.toArray(sel)); - } else if (key.equals("priority")) { - String[] sel = priority.getSelection(); - java.util.List<String> selList = Arrays.asList(sel); - selList = new ArrayList<String>(selList); - selList.add(value); - sel = new String[selList.size()]; - priority.setSelection(selList.toArray(sel)); - } else if (key.equals("ref_platform")) { - String[] sel = hardware.getSelection(); - java.util.List<String> selList = Arrays.asList(sel); - selList = new ArrayList<String>(selList); - selList.add(value); - sel = new String[selList.size()]; - hardware.setSelection(selList.toArray(sel)); - } else if (key.equals("op_sys")) { - String[] sel = os.getSelection(); - java.util.List<String> selList = Arrays.asList(sel); - selList = new ArrayList<String>(selList); - selList.add(value); - sel = new String[selList.size()]; - os.setSelection(selList.toArray(sel)); - } else if (key.equals("emailassigned_to1")) { // HACK: email - // buttons - // assumed to be - // in same - // position - if (value.equals("1")) - emailButton[0].setSelection(true); - else - emailButton[0].setSelection(false); - } else if (key.equals("emailreporter1")) { // HACK: email - // buttons assumed - // to be in same - // position - if (value.equals("1")) - emailButton[1].setSelection(true); - else - emailButton[1].setSelection(false); - } else if (key.equals("emailcc1")) { // HACK: email buttons - // assumed to be in same - // position - if (value.equals("1")) - emailButton[2].setSelection(true); - else - emailButton[2].setSelection(false); - } else if (key.equals("emaillongdesc1")) { // HACK: email - // buttons assumed - // to be in same - // position - if (value.equals("1")) - emailButton[3].setSelection(true); - else - emailButton[3].setSelection(false); - } else if (key.equals("emailtype1")) { - int index = 0; - for (String item : emailOperation.getItems()) { - if (item.compareTo(value) == 0) - break; - index++; - } - if (index < emailOperation.getItemCount()) { - emailOperation.select(index); - } - } else if (key.equals("email1")) { - emailPattern.setText(value); - } else if (key.equals("changedin")) { - daysText.setText(value); - } - } - this.maxHits = maxHits; - maxHitsText.setText(maxHits); - } - - @Override - public BugzillaRepositoryQuery getQuery() { - if (originalQuery == null) { - try { - originalQuery = new BugzillaRepositoryQuery(repository.getUrl(), getQueryURL(repository, - getQueryParameters()), getQueryTitle(), getMaxHits(), TasksUiPlugin.getTaskListManager() - .getTaskList()); - } catch (UnsupportedEncodingException e) { - return null; - } - - } else { - try { - originalQuery.setUrl(getQueryURL(repository, getQueryParameters())); - originalQuery.setMaxHits(Integer.parseInt(getMaxHits())); - - } catch (UnsupportedEncodingException e) { - return null; - } - } - return originalQuery; - } - - // @Override - // public boolean isPageComplete() { - // return super.canFlipToNextPage(); - // } - - private String[] nonNullArray(IDialogSettings settings, String id) { - String[] value = settings.getArray(id); - if (value == null) { - return new String[] {}; - } - return value; - } - - private void restoreWidgetValues() { - IDialogSettings settings = getDialogSettings(); - String repoId = "." + repository.getUrl(); - if (!restoreQueryOptions || settings.getArray(STORE_PRODUCT_ID + repoId) == null || product == null) { - return; - } - - // set widgets to stored values - product.setSelection(nonNullArray(settings, STORE_PRODUCT_ID + repoId)); - component.setSelection(nonNullArray(settings, STORE_COMPONENT_ID + repoId)); - version.setSelection(nonNullArray(settings, STORE_VERSION_ID + repoId)); - target.setSelection(nonNullArray(settings, STORE_MSTONE_ID + repoId)); - status.setSelection(nonNullArray(settings, STORE_STATUS_ID + repoId)); - resolution.setSelection(nonNullArray(settings, STORE_RESOLUTION_ID + repoId)); - severity.setSelection(nonNullArray(settings, STORE_SEVERITY_ID + repoId)); - priority.setSelection(nonNullArray(settings, STORE_PRIORITY_ID + repoId)); - hardware.setSelection(nonNullArray(settings, STORE_HARDWARE_ID + repoId)); - os.setSelection(nonNullArray(settings, STORE_OS_ID + repoId)); - summaryOperation.select(settings.getInt(STORE_SUMMARYMATCH_ID + repoId)); - commentOperation.select(settings.getInt(STORE_COMMENTMATCH_ID + repoId)); - emailOperation.select(settings.getInt(STORE_EMAILMATCH_ID + repoId)); - maxHitsText.setText(settings.get(STORE_MAXHITS_ID + repoId)); - for (int i = 0; i < emailButton.length; i++) { - emailButton[i].setSelection(settings.getBoolean(STORE_EMAILBUTTON_ID + i + repoId)); - } - summaryPattern.setText(settings.get(STORE_SUMMARYTEXT_ID + repoId)); - commentPattern.setText(settings.get(STORE_COMMENTTEXT_ID + repoId)); - emailPattern.setText(settings.get(STORE_EMAILADDRESS_ID + repoId)); - } - - public void saveWidgetValues() { - String repoId = "." + repository.getUrl(); - IDialogSettings settings = getDialogSettings(); - settings.put(STORE_PRODUCT_ID + repoId, product.getSelection()); - settings.put(STORE_COMPONENT_ID + repoId, component.getSelection()); - settings.put(STORE_VERSION_ID + repoId, version.getSelection()); - settings.put(STORE_MSTONE_ID + repoId, target.getSelection()); - settings.put(STORE_STATUS_ID + repoId, status.getSelection()); - settings.put(STORE_RESOLUTION_ID + repoId, resolution.getSelection()); - settings.put(STORE_SEVERITY_ID + repoId, severity.getSelection()); - settings.put(STORE_PRIORITY_ID + repoId, priority.getSelection()); - settings.put(STORE_HARDWARE_ID + repoId, hardware.getSelection()); - settings.put(STORE_OS_ID + repoId, os.getSelection()); - settings.put(STORE_SUMMARYMATCH_ID + repoId, summaryOperation.getSelectionIndex()); - settings.put(STORE_COMMENTMATCH_ID + repoId, commentOperation.getSelectionIndex()); - settings.put(STORE_EMAILMATCH_ID + repoId, emailOperation.getSelectionIndex()); - settings.put(STORE_MAXHITS_ID + repoId, maxHitsText.getText()); - for (int i = 0; i < emailButton.length; i++) { - settings.put(STORE_EMAILBUTTON_ID + i + repoId, emailButton[i].getSelection()); - } - settings.put(STORE_SUMMARYTEXT_ID + repoId, summaryPattern.getText()); - settings.put(STORE_COMMENTTEXT_ID + repoId, commentPattern.getText()); - settings.put(STORE_EMAILADDRESS_ID + repoId, emailPattern.getText()); - // settings.put(STORE_REPO_ID, repositoryCombo.getText()); - } - - /* Testing hook to see if any products are present */ - public int getProductCount() throws Exception { - return product.getItemCount(); - } - - public boolean isRestoreQueryOptions() { - return restoreQueryOptions; - } - - public void setRestoreQueryOptions(boolean restoreQueryOptions) { - this.restoreQueryOptions = restoreQueryOptions; - } -} diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/search/IBugzillaResultEditorMatchAdapter.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/search/IBugzillaResultEditorMatchAdapter.java deleted file mode 100644 index eba25edf1..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/search/IBugzillaResultEditorMatchAdapter.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.ui.search; - -import org.eclipse.mylar.internal.tasks.ui.search.RepositorySearchResult; -import org.eclipse.search.ui.text.AbstractTextSearchResult; -import org.eclipse.search.ui.text.IEditorMatchAdapter; -import org.eclipse.search.ui.text.Match; -import org.eclipse.ui.IEditorPart; - -/** - * @author Mik Kersten (clean-up) - */ -public interface IBugzillaResultEditorMatchAdapter extends IEditorMatchAdapter { - - public boolean isShownInEditor(Match match, IEditorPart editor); - - public Match[] computeContainedMatches(AbstractTextSearchResult result, IEditorPart editor); - - public void setResult(RepositorySearchResult result); -} diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaCustomQueryWizardPage.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaCustomQueryWizardPage.java deleted file mode 100644 index 62d7cde35..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaCustomQueryWizardPage.java +++ /dev/null @@ -1,135 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.ui.tasklist; - -import org.eclipse.mylar.internal.bugzilla.core.BugzillaRepositoryQuery; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.internal.tasks.ui.search.AbstractRepositoryQueryPage; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.KeyEvent; -import org.eclipse.swt.events.KeyListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Group; -import org.eclipse.swt.widgets.Text; - -/** - * @author Rob Elves - * @author Mik Kersten - */ -public class BugzillaCustomQueryWizardPage extends AbstractRepositoryQueryPage { - - private static final String LABEL_CUSTOM_QUERY = "Enter query URL"; - - private static final String TITLE = "Create query from URL"; - -// private static final String DESCRIPTION = "Enter the name and URL for the query"; - - private Text queryText; - - private Composite composite; - - private BugzillaRepositoryQuery query; - - private TaskRepository repository; - - public BugzillaCustomQueryWizardPage(TaskRepository repository, BugzillaRepositoryQuery query) { - super(TITLE, query.getDescription()); - this.query = query; - this.repository = repository; - setTitle(LABEL_CUSTOM_QUERY); -// setDescription(DESCRIPTION); - setImageDescriptor(TaskListImages.BANNER_REPOSITORY); - } - - public BugzillaCustomQueryWizardPage(TaskRepository repository) { - super(TITLE); - this.repository = repository; - setTitle(LABEL_CUSTOM_QUERY); -// setDescription(DESCRIPTION); - setImageDescriptor(TaskListImages.BANNER_REPOSITORY); - } - - public void createControl(Composite parent) { - composite = new Composite(parent, SWT.NONE); - composite.setLayout(new GridLayout()); - - super.createControl(composite); - createCustomQueryGroup(composite); - composite.pack(); - setControl(composite); - } - - private void createCustomQueryGroup(Composite composite) { - Group group = new Group(composite, SWT.NONE); - group.setText(LABEL_CUSTOM_QUERY); - GridLayout layout = new GridLayout(); - layout.numColumns = 1; - group.setLayout(layout); - GridData gd = new GridData(GridData.FILL_HORIZONTAL); - gd.horizontalSpan = 2; - gd.widthHint = 300; - group.setLayoutData(gd); - - queryText = new Text(group, SWT.BORDER); - gd = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); - queryText.setLayoutData(gd); - - if (query != null) { - queryText.setText(query.getUrl()); - } - - queryText.addKeyListener(new KeyListener() { - - public void keyPressed(KeyEvent e) { - // ignore - - } - - public void keyReleased(KeyEvent e) { - setPageComplete(canFlipToNextPage()); - - } - }); - - } - - public boolean canFlipToNextPage() { - return false; - } - -// @Override -// public boolean isPageComplete() { -// return super.canFlipToNextPage(); -// } - -// @Override -// public IWizardPage getNextPage() { -// return null; -// } - - @Override - public BugzillaRepositoryQuery getQuery() { - if (query == null) { - query = new BugzillaRepositoryQuery(repository.getUrl(), queryText.getText(), this.getQueryTitle(), "-1", - TasksUiPlugin.getTaskListManager().getTaskList()); - query.setCustomQuery(true); - } else { - query.setUrl(queryText.getText()); - } - return query; - } - -} diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaReportEditorFactory.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaReportEditorFactory.java deleted file mode 100644 index 6f32d0757..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaReportEditorFactory.java +++ /dev/null @@ -1,89 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.ui.tasklist; - -import javax.security.auth.login.LoginException; - -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaTask; -import org.eclipse.mylar.internal.bugzilla.ui.editor.ExistingBugEditor; -import org.eclipse.mylar.internal.tasks.ui.ITaskEditorFactory; -import org.eclipse.mylar.internal.tasks.ui.editors.ExistingBugEditorInput; -import org.eclipse.mylar.internal.tasks.ui.editors.MylarTaskEditor; -import org.eclipse.mylar.internal.tasks.ui.views.TaskRepositoriesView; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.part.EditorPart; - -/** - * @author Mik Kersten - */ -public class BugzillaReportEditorFactory implements ITaskEditorFactory { - - private static final String REPOSITORY_INFO = "Bugzilla"; - - public void notifyEditorActivationChange(IEditorPart editor) { - // ignore - } - - public EditorPart createEditor(MylarTaskEditor parentEditor) { - ExistingBugEditor editor = new ExistingBugEditor(parentEditor); - return editor; - } - - public IEditorInput createEditorInput(ITask task) { - if (task instanceof BugzillaTask) { - BugzillaTask bugzillaTask = (BugzillaTask) task; - final TaskRepository repository = TasksUiPlugin.getRepositoryManager().getRepository( - BugzillaCorePlugin.REPOSITORY_KIND, bugzillaTask.getRepositoryUrl()); - try { - BugzillaTaskEditorInput input = new BugzillaTaskEditorInput(repository, bugzillaTask, true); - //input.setOfflineBug(bugzillaTask.getTaskData()); - return input; - } catch (final LoginException e) { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - MessageDialog.openError(Display.getDefault().getActiveShell(), "Report Download Failed", - "Ensure proper repository configuration in " + TaskRepositoriesView.NAME + ".\n" - + "Repository set to: " + repository.getUrl() + ", username: " + repository.getUserName()); - } - }); - } catch (Exception e) { - MylarStatusHandler.fail(e, "Could not create Bugzilla editor input", true); - } - } - return null; - } - - public String getTitle() { - return REPOSITORY_INFO; - } - - public boolean canCreateEditorFor(ITask task) { - return task instanceof BugzillaTask; - } - - public boolean providesOutline() { - return true; - } - - public boolean canCreateEditorFor(IEditorInput input) { - return input instanceof ExistingBugEditorInput; - } -} diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaRepositorySettingsPage.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaRepositorySettingsPage.java deleted file mode 100644 index 1a724c058..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaRepositorySettingsPage.java +++ /dev/null @@ -1,239 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.ui.tasklist; - -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.net.MalformedURLException; -import java.net.Proxy; -import java.net.URL; - -import javax.security.auth.login.LoginException; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaServerFacade; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants; -import org.eclipse.mylar.internal.bugzilla.core.RepositoryConfiguration; -import org.eclipse.mylar.internal.tasks.core.WebClientUtil; -import org.eclipse.mylar.internal.tasks.ui.wizards.AbstractRepositorySettingsPage; -import org.eclipse.mylar.tasks.core.RepositoryTemplate; -import org.eclipse.mylar.tasks.ui.AbstractRepositoryConnectorUi; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; - -/** - * @author Mik Kersten - */ -public class BugzillaRepositorySettingsPage extends AbstractRepositorySettingsPage { - - public static final String LABEL_AUTOMATIC_VERSION = "Automatic (Use Validate Settings)"; - - private static final String MESSAGE_FAILURE_UNKNOWN = "Unknown error occured. Check that server url and credentials are valid."; - - private static final String TITLE = "Bugzilla Repository Settings"; - - private static final String DESCRIPTION = "Example: https://bugs.eclipse.org/bugs (do not include index.cgi)"; - - protected Combo repositoryVersionCombo; - - private boolean testing = false; - - public BugzillaRepositorySettingsPage(AbstractRepositoryConnectorUi repositoryUi) { - super(TITLE, DESCRIPTION, repositoryUi); - setNeedsAnonymousLogin(true); - setNeedsEncoding(true); - setNeedsTimeZone(false); - } - - protected void createAdditionalControls(Composite parent) { - - for (RepositoryTemplate template : connector.getTemplates()) { - serverUrlCombo.add(template.label); - } - serverUrlCombo.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - String text = serverUrlCombo.getText(); - RepositoryTemplate template = connector.getTemplate(text); - if (template != null) { - repositoryLabelEditor.setStringValue(template.label); - setUrl(template.repositoryUrl); - // setAnonymous(info.anonymous); - setBugzillaVersion(template.version); - getContainer().updateButtons(); - return; - } - } - }); - - Label repositoryVersionLabel = new Label(parent, SWT.NONE); - repositoryVersionLabel.setText("Repository Version: "); - repositoryVersionCombo = new Combo(parent, SWT.READ_ONLY); - - repositoryVersionCombo.add(LABEL_AUTOMATIC_VERSION); - - for (String version : getConnector().getSupportedVersions()) { - repositoryVersionCombo.add(version); - } - if (repository != null && repositoryVersionCombo.indexOf(repository.getVersion()) >= 0) { - repositoryVersionCombo.select(repositoryVersionCombo.indexOf(repository.getVersion())); - } else { - int defaultIndex = getConnector().getSupportedVersions().size() - 1; - repositoryVersionCombo.select(defaultIndex); - setVersion(repositoryVersionCombo.getItem(defaultIndex)); - } - - repositoryVersionCombo.addSelectionListener(new SelectionListener() { - - public void widgetSelected(SelectionEvent e) { - if (repositoryVersionCombo.getSelectionIndex() >= 0) { - setVersion(repositoryVersionCombo.getItem(repositoryVersionCombo.getSelectionIndex())); - } - } - - public void widgetDefaultSelected(SelectionEvent e) { - // ignore - } - }); - } - - public void setBugzillaVersion(String version) { - if (version == null) { - repositoryVersionCombo.select(0); - } else { - int i = repositoryVersionCombo.indexOf(version.toString()); - if (i != -1) { - repositoryVersionCombo.select(i); - setVersion(version); - } else { - for (IBugzillaConstants.BugzillaServerVersion serverVersion : IBugzillaConstants.BugzillaServerVersion - .values()) { - if (version.startsWith(serverVersion.toString())) { - i = repositoryVersionCombo.indexOf(serverVersion.toString()); - if (i != -1) { - repositoryVersionCombo.select(i); - setVersion(serverVersion.toString()); - break; - } - } - } - if (i == -1) { - MylarStatusHandler.log("Could not resolve repository version: " + version, this); - setVersion(IBugzillaConstants.BugzillaServerVersion.SERVER_218.toString()); - } - } - } - } - - @Override - public boolean isPageComplete() { - return super.isPageComplete(); - } - - protected boolean isValidUrl(String name) { - if (name.startsWith(URL_PREFIX_HTTPS) || name.startsWith(URL_PREFIX_HTTP)) { - try { - new URL(name); - return true; - } catch (MalformedURLException e) { - } - } - return false; - } - - /* public for testing */ - public void validateSettings() { - - try { - final URL serverURL = new URL(super.getServerUrl()); - final String serverUrl = getServerUrl(); - final String newUserId = getUserName(); - final String newPassword = getPassword(); - final boolean isAnonymous = isAnonymousAccess(); - final String newEncoding = getCharacterEncoding(); - final boolean checkVersion = repositoryVersionCombo.getSelectionIndex() == 0; - final String[] version = new String[1]; - getWizard().getContainer().run(true, false, new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - monitor.beginTask("Validating server settings", IProgressMonitor.UNKNOWN); - try { - - // Check that the server exists and we can connect (proxy or not) - Proxy proxySettings = TasksUiPlugin.getDefault().getProxySettings(); - WebClientUtil.openUrlConnection(serverURL, proxySettings, false); - - if (!isAnonymous) { - // Server exists, connect to service and validate credentials - BugzillaServerFacade.validateCredentials(proxySettings, serverUrl, newUserId, newPassword); - } - - if (checkVersion) { - RepositoryConfiguration config = BugzillaCorePlugin.getRepositoryConfiguration(true, - serverUrl, proxySettings, newUserId, newPassword, newEncoding); - - if (config != null) { - version[0] = config.getInstallVersion(); - } - } - - } catch (Exception e) { - throw new InvocationTargetException(e); - } finally { - monitor.done(); - } - } - }); - - if (version[0] != null) { - setBugzillaVersion(version[0]); - } - - if (!testing) { - MessageDialog.openInformation(null, IBugzillaConstants.TITLE_MESSAGE_DIALOG, - "Authentication credentials are valid."); - } - } catch (InvocationTargetException e) { - if (e.getCause() instanceof MalformedURLException) { - MessageDialog.openWarning(null, IBugzillaConstants.TITLE_MESSAGE_DIALOG, "Server URL is invalid."); - } else if (e.getCause() instanceof LoginException) { - MessageDialog.openWarning(null, IBugzillaConstants.TITLE_MESSAGE_DIALOG, - "Unable to authenticate with server. Login credentials invalid."); - } else if (e.getCause() instanceof IOException) { - MessageDialog.openWarning(null, IBugzillaConstants.TITLE_MESSAGE_DIALOG, - "No Bugzilla server found at url"); - } else { - MessageDialog.openWarning(null, IBugzillaConstants.TITLE_MESSAGE_DIALOG, MESSAGE_FAILURE_UNKNOWN); - } - } catch (MalformedURLException e) { - MessageDialog.openWarning(null, IBugzillaConstants.TITLE_MESSAGE_DIALOG, "Server URL is invalid."); - } catch (InterruptedException e) { - MessageDialog.openWarning(null, IBugzillaConstants.TITLE_MESSAGE_DIALOG, MESSAGE_FAILURE_UNKNOWN); - } - - super.getWizard().getContainer().updateButtons(); - } - - public void setTesting(boolean testing) { - this.testing = testing; - } - -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaRepositoryUi.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaRepositoryUi.java deleted file mode 100644 index 463eb49d9..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaRepositoryUi.java +++ /dev/null @@ -1,84 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.ui.tasklist; - -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.IWizard; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaRepositoryQuery; -import org.eclipse.mylar.internal.bugzilla.ui.search.BugzillaSearchPage; -import org.eclipse.mylar.internal.bugzilla.ui.wizard.NewBugzillaTaskWizard; -import org.eclipse.mylar.internal.tasks.ui.search.AbstractRepositoryQueryPage; -import org.eclipse.mylar.internal.tasks.ui.wizards.AbstractRepositorySettingsPage; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.AbstractRepositoryConnectorUi; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.PlatformUI; - -/** - * @author Mik Kersten - */ -public class BugzillaRepositoryUi extends AbstractRepositoryConnectorUi { - - public AbstractRepositorySettingsPage getSettingsPage() { - return new BugzillaRepositorySettingsPage(this); - } - - @Override - public AbstractRepositoryQueryPage getSearchPage(TaskRepository repository, IStructuredSelection selection) { - return new BugzillaSearchPage(repository); - } - - @Override - public IWizard getNewTaskWizard(TaskRepository taskRepository, IStructuredSelection selection) { - return new NewBugzillaTaskWizard(taskRepository, selection); - } - - public IWizard getQueryWizard(TaskRepository repository, AbstractRepositoryQuery query) { - if (query instanceof BugzillaRepositoryQuery) { - return new EditBugzillaQueryWizard(repository, (BugzillaRepositoryQuery) query); - } else { - return new NewBugzillaQueryWizard(repository); - } - } - - @Override - public boolean hasSearchPage() { - return true; - } - - @Override - public boolean hasRichEditor() { - return true; - } - - @Override - public String getRepositoryType() { - return BugzillaCorePlugin.REPOSITORY_KIND; - } - - @Override - public void openRemoteTask(String repositoryUrl, String idString) { - int id = -1; - try { - id = Integer.parseInt(idString); - } catch (NumberFormatException e) { - // ignore - } - if (id != -1) { - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - OpenBugzillaReportJob job = new OpenBugzillaReportJob(repositoryUrl, id, page); - job.schedule(); - } - } -} diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaTaskDecorator.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaTaskDecorator.java deleted file mode 100644 index eeb696fcc..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaTaskDecorator.java +++ /dev/null @@ -1,58 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.ui.tasklist; - -import org.eclipse.jface.viewers.IDecoration; -import org.eclipse.jface.viewers.ILabelProviderListener; -import org.eclipse.jface.viewers.ILightweightLabelDecorator; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaQueryHit; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaTask; -import org.eclipse.mylar.internal.bugzilla.ui.BugzillaImages; - -/** - * @author Mik Kersten - */ -public class BugzillaTaskDecorator implements ILightweightLabelDecorator { - - public void decorate(Object element, IDecoration decoration) { - if (element instanceof BugzillaTask) { - String kind = ((BugzillaTask)element).getTaskType(); - // XXX: refactor to use configuration - if ("major".equals(kind) || "blocker".equals(kind) || "critical".equals(kind)) { - decoration.addOverlay(BugzillaImages.OVERLAY_MAJOR, IDecoration.BOTTOM_RIGHT); - } else if ("enhancement".equals(kind)){ - decoration.addOverlay(BugzillaImages.OVERLAY_ENHANCEMENT, IDecoration.BOTTOM_RIGHT); - } - } else if (element instanceof BugzillaQueryHit) { - BugzillaQueryHit hit = (BugzillaQueryHit)element; - if (hit.getCorrespondingTask() != null) { - decorate(hit.getCorrespondingTask(), decoration); - } - } - } - - public void addListener(ILabelProviderListener listener) { - // ignore - } - - public void dispose() { - // ignore - } - - public boolean isLabelProperty(Object element, String property) { - return false; - } - - public void removeListener(ILabelProviderListener listener) { - // ignore - } -} diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaTaskEditor.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaTaskEditor.java deleted file mode 100644 index 900b5b123..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaTaskEditor.java +++ /dev/null @@ -1,275 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.ui.tasklist; - -import org.eclipse.core.resources.IMarker; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaTask; -import org.eclipse.mylar.internal.bugzilla.ui.editor.ExistingBugEditor; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.internal.tasks.ui.editors.IRepositoryTaskAttributeListener; -import org.eclipse.mylar.internal.tasks.ui.editors.MylarTaskEditor; -import org.eclipse.mylar.internal.tasks.ui.editors.RepositoryTaskOutlineNode; -import org.eclipse.mylar.internal.tasks.ui.editors.TaskEditorInput; -import org.eclipse.mylar.internal.tasks.ui.editors.TaskFormPage; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorSite; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.PlatformUI; - -/** - * @author Mik Kersten - */ -public class BugzillaTaskEditor extends MylarTaskEditor { - - private static final String EDITOR_TAB_ITLE = "Bug Editor"; - - /** The task that created this editor */ - protected BugzillaTask bugTask; - - /** This bug report can be modified by the user and saved offline. */ - protected RepositoryTaskData offlineBug; - - private ExistingBugEditor bugzillaEditor; - - private BugzillaTaskEditorInput bugzillaEditorInput; - - private IRepositoryTaskAttributeListener ATTRIBUTE_LISTENER = new IRepositoryTaskAttributeListener() { - public void attributeChanged(String attribute, String value) { - // TODO: get rid of this? - if (attribute.equals("Priority")) { - bugTask.setPriority(value); - } - } - }; - - public BugzillaTaskEditor() { - super(); - bugzillaEditor = new ExistingBugEditor(this); - bugzillaEditor.addAttributeListener(ATTRIBUTE_LISTENER); - } - - public TaskFormPage getBugzillaEditor() { - return bugzillaEditor; - } - - public void gotoMarker(IMarker marker) { - // don't do anything - } - - /** - * Creates page 1 of the multi-page editor, which allows you to change the - * font used in page 2. - */ - private void createBugzillaSubmitPage() { - bugzillaEditor.createPartControl(getContainer()); - Composite composite = bugzillaEditor.getEditorComposite(); - int index = addPage(composite); - setPageText(index, EDITOR_TAB_ITLE); - } - - /** - * Creates the pages of the multi-page editor. - */ - @Override - protected void createPages() { - createBugzillaSubmitPage(); - super.createPages(); - } - - /** - * Saves the multi-page editor's document. - */ - @Override - public void doSave(IProgressMonitor monitor) { - super.doSave(monitor); - // if(taskSummaryEditor.isDirty()) - // taskSummaryEditor.doSave(monitor); - if (bugzillaEditor.isDirty()) - bugzillaEditor.doSave(monitor); - - // TODO save both editors if needed - } - - public boolean isDirty() { - return bugzillaEditor.isDirty() || super.isDirty(); - } - - public void changeDirtyStatus(boolean newDirtyStatus) { - firePropertyChange(PROP_DIRTY); - } - - @Override - public void init(IEditorSite site, IEditorInput editorInput) throws PartInitException { - if (!(editorInput instanceof BugzillaTaskEditorInput)) - throw new PartInitException("Invalid Input: Must be BugzillaTaskEditorInput"); - super.init(site, (IEditorInput) new TaskEditorInput(((BugzillaTaskEditorInput) editorInput).getBugTask(), false)); - bugzillaEditorInput = (BugzillaTaskEditorInput) editorInput; - bugTask = bugzillaEditorInput.getBugTask(); - bugzillaEditor.setTaskOutlineModel(RepositoryTaskOutlineNode.parseBugReport(bugzillaEditorInput.getRepositoryTaskData())); - offlineBug = bugzillaEditorInput.getRepositoryTaskData(); - - super.setSite(site); - super.setInput(editorInput); - - try { - bugzillaEditor.init(this.getEditorSite(), this.getEditorInput()); - } catch (Exception e) { - throw new PartInitException(e.getMessage()); - } - - // Set the title on the editor's tab - // this.setPartName("Bug #" + bugzillaEditorInput.getBugId()); - this.setPartName(bugTask.getDescription()); - this.setTitleImage(TaskListImages.getImage(TaskListImages.TASK_REPOSITORY)); - } - - @Override - public boolean isSaveAsAllowed() { - return false; - } - - /** - * Calculates the contents of page 2 when the it is activated. - */ - @Override - protected void pageChange(int newPageIndex) { - super.pageChange(newPageIndex); - } - - /** - * Sets the font related data to be applied to the text in page 2. - */ - @Override - public void setFocus() { - // The default focus for this editor is the submit page - bugzillaEditor.setFocus(); - } - - /** - * @return Returns the bugTask. - */ - public BugzillaTask getBugTask() { - return bugTask; - } - - /** - * @return Returns the offlineBug. - */ - public RepositoryTaskData getOfflineBug() { - return offlineBug; - } - - /** - * Updates the title of the editor to reflect dirty status. If the bug - * report has been modified but not saved, then an indicator will appear in - * the title. - * - * @param isDirty - * is true when the bug report has been modified but not saved - */ - public void showDirtyStatus(boolean isDirty) { - String prefix = (isDirty) ? "*" : ""; - setPartName(prefix + "Bug #" + bugzillaEditorInput.getId()); - } - - -// @Override -// public Object getAdapter(Class adapter) { -// if (IContentOutlinePage.class.equals(adapter)) { -// if (outlinePage == null && bugzillaEditorInput != null) { -// outlinePage = new RepositoryTaskOutlinePage(bugzillaOutlineModel); -// } -// return outlinePage; -// } -// return super.getAdapter(adapter); -// } - - @Override - public Object getAdapter(Class adapter) { - return bugzillaEditor.getAdapter(adapter); - } - - // /** - // * Class to listen for editor events - // */ - // private class BugzillaTaskEditorListener implements IPartListener - // { - // - // public void partActivated(IWorkbenchPart part) { - // // don't care about this event - // } - // - // public void partBroughtToTop(IWorkbenchPart part) { - // // don't care about this event - // } - // - // public void partClosed(IWorkbenchPart part) { - // - // // if we are closing a bug editor - // if (part instanceof BugzillaTaskEditor) { - // BugzillaTaskEditor taskEditor = (BugzillaTaskEditor)part; - // - // // check if it needs to be saved - // if (taskEditor.bugzillaEditor.isDirty) { - // // ask the user whether they want to save it or not and perform the - // appropriate action - // taskEditor.bugzillaEditor.changeDirtyStatus(false); - // boolean response = MessageDialog.openQuestion(null, "Save Changes", - // "You have made some changes to the bug, do you want to save them?"); - // if (response) { - // taskEditor.bugzillaEditor.saveBug(); - // } else { - // ExistingBugEditorInput input = - // (ExistingBugEditorInput)taskEditor.bugzillaEditor.getEditorInput(); - // bugTask.setPriority(input.getBug().getAttribute("Priority").getValue()); - // } - // } - // } - // } - // - // public void partDeactivated(IWorkbenchPart part) { - // // don't care about this event - // } - // - // public void partOpened(IWorkbenchPart part) { - // // don't care about this event - // } - // } - - public void makeNewPage(RepositoryTaskData serverBug, String newCommentText) { - if (serverBug == null) { - MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), - "Could not open bug.", "Bug #" + offlineBug.getId() - + " could not be read from the server. Try refreshing the bug task."); - return; - } - } - - public void close() { - Display display = getSite().getShell().getDisplay(); - display.asyncExec(new Runnable() { - public void run() { - getSite().getPage().closeEditor(BugzillaTaskEditor.this, false); - } - }); - } - - @Override - public void doSaveAs() { - // do nothing here - } -} diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaTaskEditorInput.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaTaskEditorInput.java deleted file mode 100644 index 26fe3bbce..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaTaskEditorInput.java +++ /dev/null @@ -1,98 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -/* - * Created on 1-Feb-2005 - */ -package org.eclipse.mylar.internal.bugzilla.ui.tasklist; - -import java.io.IOException; -import java.security.GeneralSecurityException; - -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaTask; -import org.eclipse.mylar.internal.tasks.ui.editors.ExistingBugEditorInput; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.RepositoryTaskAttribute; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.ui.IPersistableElement; - -/** - * @author Eric Booth - * @author Mik Kersten - */ -public class BugzillaTaskEditorInput extends ExistingBugEditorInput { - - private String bugTitle; - - private BugzillaTask bugTask; - - public BugzillaTaskEditorInput(TaskRepository repository, BugzillaTask bugTask, boolean offline) - throws IOException, GeneralSecurityException { - super(repository, bugTask.getTaskData(), AbstractRepositoryTask.getTaskId(bugTask.getHandleIdentifier())); - this.bugTask = bugTask; - migrateDescToReadOnly(bugTask); - id = AbstractRepositoryTask.getTaskId(bugTask.getHandleIdentifier()); - bugTitle = ""; - - } - - protected void setBugTitle(String str) { - // 03-20-03 Allows editor to store title (once it is known) - bugTitle = str; - } - - @Override - public boolean exists() { - return true; - } - - @Override - public ImageDescriptor getImageDescriptor() { - return null; - } - - @Override - public String getName() { - return bugTask.getDescription(); - } - - @Override - public IPersistableElement getPersistable() { - return null; - } - - @Override - public String getToolTipText() { - return bugTitle; - } - - @Override - public Object getAdapter(Class adapter) { - return null; - } - - /** - * @return Returns the <code>BugzillaTask</code> - */ - public BugzillaTask getBugTask() { - return bugTask; - } - - // TODO: migration code 0.6.1 -> 0.6.2 - private void migrateDescToReadOnly(BugzillaTask task) { - if (task != null && task.getTaskData() != null) { - RepositoryTaskAttribute attrib = task.getTaskData().getDescriptionAttribute(); - if (attrib != null) { - attrib.setReadOnly(true); - } - } - } -} diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaTaskExternalizer.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaTaskExternalizer.java deleted file mode 100644 index 4e8b99db1..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaTaskExternalizer.java +++ /dev/null @@ -1,205 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.ui.tasklist; - -import java.text.SimpleDateFormat; -import java.util.Date; - -import org.eclipse.mylar.internal.bugzilla.core.BugzillaQueryHit; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaRepositoryQuery; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaTask; -import org.eclipse.mylar.internal.tasks.ui.OfflineTaskManager; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.AbstractTaskContainer; -import org.eclipse.mylar.tasks.core.DelegatingTaskExternalizer; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.mylar.tasks.core.TaskExternalizationException; -import org.eclipse.mylar.tasks.core.TaskList; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask.RepositoryTaskSyncState; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -/** - * @author Mik Kersten - */ -public class BugzillaTaskExternalizer extends DelegatingTaskExternalizer { - - private static final String STATUS_RESO = "RESO"; - - private static final String STATUS_NEW = "NEW"; - - private static final String KEY_OLD_LAST_DATE = "LastDate"; - - private static final String TAG_BUGZILLA_QUERY_HIT = "Bugzilla" + KEY_QUERY_HIT; - - private static final String TAG_BUGZILLA_QUERY = "Bugzilla" + KEY_QUERY; - - private static final String TAG_BUGZILLA_CUSTOM_QUERY = "BugzillaCustom" + KEY_QUERY; - - private static final String TAG_BUGZILLA_REPORT = "BugzillaReport"; - - public String getQueryTagNameForElement(AbstractRepositoryQuery query) { - if (query instanceof BugzillaRepositoryQuery) { - if (((BugzillaRepositoryQuery) query).isCustomQuery()) { - return TAG_BUGZILLA_CUSTOM_QUERY; - } else { - return TAG_BUGZILLA_QUERY; - } - } - return ""; - } - - public boolean canReadQuery(Node node) { - return node.getNodeName().equals(TAG_BUGZILLA_CUSTOM_QUERY) || node.getNodeName().equals(TAG_BUGZILLA_QUERY); - } - - public AbstractRepositoryQuery readQuery(Node node, TaskList taskList) throws TaskExternalizationException { - boolean hasCaughtException = false; - Element element = (Element) node; - BugzillaRepositoryQuery query = new BugzillaRepositoryQuery(element.getAttribute(KEY_REPOSITORY_URL), element - .getAttribute(KEY_QUERY_STRING), element.getAttribute(KEY_NAME), element - .getAttribute(KEY_QUERY_MAX_HITS), taskList); - if (node.getNodeName().equals(TAG_BUGZILLA_CUSTOM_QUERY)) { - query.setCustomQuery(true); - } - if (element.getAttribute(KEY_LAST_REFRESH) != null && !element.getAttribute(KEY_LAST_REFRESH).equals("")) { - query.setLastRefreshTimeStamp(element.getAttribute(KEY_LAST_REFRESH)); - } - - NodeList list = node.getChildNodes(); - for (int i = 0; i < list.getLength(); i++) { - Node child = list.item(i); - try { - readQueryHit(child, taskList, query); - } catch (TaskExternalizationException e) { - hasCaughtException = true; - } - } - if (hasCaughtException) { - throw new TaskExternalizationException("Failed to load all tasks"); - } else { - return query; - } - } - - public boolean canCreateElementFor(AbstractRepositoryQuery category) { - return category instanceof BugzillaRepositoryQuery; - } - - public boolean canCreateElementFor(ITask task) { - return task instanceof BugzillaTask; - } - - @Override - public boolean canReadTask(Node node) { - return node.getNodeName().equals(getTaskTagName()); - } - - @Override - public ITask readTask(Node node, TaskList taskList, AbstractTaskContainer category, ITask parent) - throws TaskExternalizationException { - Element element = (Element) node; - String handle; - String label; - if (element.hasAttribute(KEY_HANDLE)) { - handle = element.getAttribute(KEY_HANDLE); - } else { - throw new TaskExternalizationException("Handle not stored for bug report"); - } - if (element.hasAttribute(KEY_LABEL)) { - label = element.getAttribute(KEY_LABEL); - } else { - throw new TaskExternalizationException("Description not stored for bug report"); - } - BugzillaTask task = new BugzillaTask(handle, label, false); - super.readTaskInfo(task, taskList, element, parent, category); - - if (!element.hasAttribute(KEY_LAST_MOD_DATE) || element.getAttribute(KEY_LAST_MOD_DATE).equals("")) { - // migrate to new time stamp 0.5.3 -> 0.6.0 - try { - if (element.hasAttribute(KEY_OLD_LAST_DATE)) { - String DATE_FORMAT_2 = "yyyy-MM-dd HH:mm:ss"; - SimpleDateFormat delta_ts_format = new SimpleDateFormat(DATE_FORMAT_2); - String oldDateStamp = ""; - try { - oldDateStamp = delta_ts_format.format(new Date( - new Long(element.getAttribute(KEY_OLD_LAST_DATE)).longValue())); - task.setLastSyncDateStamp(oldDateStamp); - } catch (NumberFormatException e) { - // For those who may have been working from head... - Date parsedDate = delta_ts_format.parse(element.getAttribute(KEY_OLD_LAST_DATE)); - if (parsedDate != null) { - oldDateStamp = element.getAttribute(KEY_OLD_LAST_DATE); - task.setLastSyncDateStamp(oldDateStamp); - } - } - } - } catch (Exception e) { - // invalid date format/parse - } - } - - return task; - } - - // TODO move to DelegatingTaskExternalizer - @Override - public void readTaskData(AbstractRepositoryTask task) { - RepositoryTaskData data = OfflineTaskManager.findBug(task.getRepositoryUrl(), AbstractRepositoryTask - .getTaskId(task.getHandleIdentifier())); - task.setTaskData((RepositoryTaskData) data); - - if (data != null && data.hasLocalChanges()) { - task.setSyncState(RepositoryTaskSyncState.OUTGOING); - } - } - - public boolean canReadQueryHit(Node node) { - return node.getNodeName().equals(getQueryHitTagName()); - } - - public void readQueryHit(Node node, TaskList taskList, AbstractRepositoryQuery query) - throws TaskExternalizationException { - Element element = (Element) node; - String handle; - String status; - if (element.hasAttribute(KEY_HANDLE)) { - handle = element.getAttribute(KEY_HANDLE); - } else { - throw new TaskExternalizationException("Handle not stored for bug report"); - } - - status = STATUS_NEW; - if (element.hasAttribute(KEY_COMPLETE)) { - status = element.getAttribute(KEY_COMPLETE); - if (status.equals(VAL_TRUE)) { - status = STATUS_RESO; - } - } - BugzillaQueryHit hit = new BugzillaQueryHit(taskList, "", "", query.getRepositoryUrl(), AbstractRepositoryTask - .getTaskId(handle), null, status); - readQueryHitInfo(hit, taskList, query, element); - } - - @Override - public String getTaskTagName() { - return TAG_BUGZILLA_REPORT; - } - - @Override - public String getQueryHitTagName() { - return TAG_BUGZILLA_QUERY_HIT; - } -} diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/EditBugzillaQueryWizard.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/EditBugzillaQueryWizard.java deleted file mode 100644 index 9802d9c2d..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/EditBugzillaQueryWizard.java +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.ui.tasklist; - -import org.eclipse.mylar.internal.bugzilla.core.BugzillaRepositoryQuery; -import org.eclipse.mylar.internal.bugzilla.ui.search.BugzillaSearchPage; -import org.eclipse.mylar.internal.tasks.ui.wizards.AbstractEditQueryWizard; -import org.eclipse.mylar.tasks.core.TaskRepository; - -/** - * @author Rob Elves - */ -public class EditBugzillaQueryWizard extends AbstractEditQueryWizard { - - public EditBugzillaQueryWizard(TaskRepository repository, BugzillaRepositoryQuery query) { - super(repository, query); - } - - @Override - public void addPages() { - if (((BugzillaRepositoryQuery) query).isCustomQuery()) { - page = new BugzillaCustomQueryWizardPage(repository, (BugzillaRepositoryQuery) query); - } else { - page = new BugzillaSearchPage(repository, (BugzillaRepositoryQuery) query); - } - addPage(page); - } - - @Override - public boolean canFinish() { - if (page != null && page.isPageComplete()) { - return true; - } - return false; - } -} diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/NewBugzillaQueryWizard.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/NewBugzillaQueryWizard.java deleted file mode 100644 index 5bb32a90f..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/NewBugzillaQueryWizard.java +++ /dev/null @@ -1,99 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.ui.tasklist; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaRepositoryQuery; -import org.eclipse.mylar.internal.tasks.ui.search.AbstractRepositoryQueryPage; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.actions.WorkspaceModifyOperation; - -/** - * @author Mik Kersten - * @author Brock Janiczak - */ -public class NewBugzillaQueryWizard extends Wizard { - - private static final String TITLE = "New Bugzilla Query"; - - private final TaskRepository repository; - - BugzillaQueryTypeWizardPage page1; - - public NewBugzillaQueryWizard(TaskRepository repository) { - this.repository = repository; - setNeedsProgressMonitor(true); - setWindowTitle(TITLE); - } - - @Override - public void addPages() { - page1 = new BugzillaQueryTypeWizardPage(repository); - page1.setWizard(this); - addPage(page1); - - } - - @Override - public boolean performFinish() { - - AbstractRepositoryQueryPage page; - - if (page1.getNextPage() != null && page1.getNextPage() instanceof AbstractRepositoryQueryPage) { - page = (AbstractRepositoryQueryPage) page1.getNextPage(); - } else { - return false; - } - - final BugzillaRepositoryQuery queryCategory = (BugzillaRepositoryQuery) page.getQuery(); - - TasksUiPlugin.getTaskListManager().getTaskList().addQuery(queryCategory); -// boolean offline = MylarTaskListPlugin.getMylarCorePrefs().getBoolean(TaskListPreferenceConstants.WORK_OFFLINE); -// if (!offline) { - WorkspaceModifyOperation op = new WorkspaceModifyOperation() { - protected void execute(IProgressMonitor monitor) throws CoreException { - monitor.beginTask("Executing query", 50); - try { - AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager() - .getRepositoryConnector(BugzillaCorePlugin.REPOSITORY_KIND); - TasksUiPlugin.getSynchronizationManager().synchronize(connector, queryCategory, null); - } finally { - monitor.done(); - } - } - }; - - try { - getContainer().run(true, false, op); - } catch (Exception e) { - MylarStatusHandler.log(e, "There was a problem executing the query refresh"); - } -// } - - return true; - } - - @Override - public boolean canFinish() { - if (page1.getNextPage() != null && page1.getNextPage().isPageComplete()) { - return true; - } - return false; - } - -} diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/OpenBugzillaReportJob.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/OpenBugzillaReportJob.java deleted file mode 100644 index b985e87d4..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/OpenBugzillaReportJob.java +++ /dev/null @@ -1,144 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.bugzilla.ui.tasklist; - -import java.io.IOException; - -import javax.security.auth.login.LoginException; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaCorePlugin; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaServerFacade; -import org.eclipse.mylar.internal.bugzilla.ui.BugzillaUiPlugin; -import org.eclipse.mylar.internal.tasks.ui.TaskListPreferenceConstants; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.internal.tasks.ui.editors.AbstractBugEditorInput; -import org.eclipse.mylar.internal.tasks.ui.editors.ExistingBugEditorInput; -import org.eclipse.mylar.internal.tasks.ui.views.TaskRepositoriesView; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.PlatformUI; - -/** - * @author Mik Kersten - */ -public class OpenBugzillaReportJob extends Job { - - private int id; - - private String serverUrl; - - private IWorkbenchPage page; - - public OpenBugzillaReportJob(String serverUrl, int id, IWorkbenchPage page) { - super("Opening Bugzilla report: " + id); - this.id = id; - this.serverUrl = serverUrl; - this.page = page; - } - - public IStatus run(IProgressMonitor monitor) { - - // @Override - // public IStatus runInUIThread(IProgressMonitor monitor) { - try { - monitor.beginTask("Opening Bugzilla Report", 10); - Integer bugId = id; - - try { - // try to open a new editor on the bug - TaskRepository repository = TasksUiPlugin.getRepositoryManager().getRepository( - BugzillaCorePlugin.REPOSITORY_KIND, serverUrl); - - if (repository == null) { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - MessageDialog.openError(null, "Repository Not Found", - "Could not find repository configuration for " + serverUrl - + ". \nPlease set up repository via " + TaskRepositoriesView.NAME + "."); - String bugUrl = BugzillaServerFacade.getBugUrlWithoutLogin(serverUrl, id); - TaskUiUtil.openUrl(bugUrl); - } - - }); - return Status.OK_STATUS; - } - - RepositoryTaskData data = BugzillaServerFacade.getBug(repository.getUrl(), repository.getUserName(), - repository.getPassword(), TasksUiPlugin.getDefault().getProxySettings(), repository - .getCharacterEncoding(), bugId.intValue()); - - String url = BugzillaServerFacade.getBugUrlWithoutLogin(repository.getUrl(), id); - - final AbstractBugEditorInput editorInput = new ExistingBugEditorInput(url, repository, data); - - // final ExistingBugEditorInput editorInput = new - // ExistingBugEditorInput(repository, bugId.intValue()); - - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - - public void run() { - if (editorInput.getRepositoryTaskData() == null) { - MessageDialog.openError(null, "Server Setting Error", "Incorrect server set for the bug."); - } else { - try { - page.openEditor(editorInput, TaskListPreferenceConstants.TASK_EDITOR_ID); - - // AbstractRepositoryTaskEditor abe = - // (AbstractRepositoryTaskEditor) - // page.openEditor(editorInput, - // TaskListPreferenceConstants.TASK_EDITOR_ID);//BugzillaUiPlugin.EXISTING_BUG_EDITOR_ID - // abe.selectDescription(); - - // if (commentNumber == 0) { - // abe.selectDescription(); - // } else if (commentNumber == 1) { - // abe.select(commentNumber); - // } else { - // abe.select(commentNumber - 1); - // } - } catch (PartInitException e) { - BugzillaCorePlugin.log(e); - } - } - } - }); - } catch (LoginException e) { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - - public void run() { - MessageDialog - .openError( - null, - "Login Error", - "Bugzilla could not log you in to get the information you requested since login name or password is incorrect.\nPlease check your settings in the bugzilla preferences. "); - } - }); - } catch (IOException e) { - MylarStatusHandler.fail(e, "Error opening Bugzilla report", true); - } finally { - monitor.done(); - } - } catch (Exception e) { - MylarStatusHandler.fail(e, "Unable to open Bug report: " + id, true); - } - return new Status(IStatus.OK, BugzillaUiPlugin.PLUGIN_ID, IStatus.OK, "", null); - } -} diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/wizard/BugzillaProductPage.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/wizard/BugzillaProductPage.java deleted file mode 100644 index 9bb211200..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/wizard/BugzillaProductPage.java +++ /dev/null @@ -1,546 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.bugzilla.ui.wizard; - -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.lang.reflect.InvocationTargetException; -import java.net.URLDecoder; -import java.security.GeneralSecurityException; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import javax.security.auth.login.LoginException; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Status; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaException; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaQueryHit; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaReportElement; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaRepositoryQuery; -import org.eclipse.mylar.internal.bugzilla.core.BugzillaServerFacade; -import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants; -import org.eclipse.mylar.internal.bugzilla.core.NewBugzillaReport; -import org.eclipse.mylar.internal.bugzilla.ui.BugzillaUiPlugin; -import org.eclipse.mylar.internal.tasks.ui.views.TaskRepositoriesView; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.RepositoryTaskAttribute; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.PlatformUI; - -/** - * @author Shawn Minto - * @author Rob Elves - * @author Mik Kersten - * - * Product selection page of new bug wizard - */ -public class BugzillaProductPage extends WizardPage implements Listener { - - // A Map from Java's OS and Platform to Buzilla's - private Map<String, String> java2buzillaOSMap = new HashMap<String, String>(); - - private Map<String, String> java2buzillaPlatformMap = new HashMap<String, String>(); - - private static final String NEW_BUGZILLA_TASK_ERROR_TITLE = "New Bugzilla Task Error"; - - private static final String DESCRIPTION = "Pick a product to open the new bug editor.\n" - + "Press the Update button if the product is not in the list."; - - private static final String LABEL_UPDATE = "Update Products from Repository"; - - /** The list of products to submit a bug report for */ - private List<String> products = null; - - /** - * Reference to the bug wizard which created this page so we can create the - * second page - */ - private NewBugzillaTaskWizard bugWizard; - - /** The instance of the workbench */ - protected IWorkbench workbench; - - /** The list box for the list of items to choose from */ - protected org.eclipse.swt.widgets.List listBox; - - /** Status variable for the possible errors on this page */ - protected IStatus listStatus; - - /** - * String to hold previous product; determines if attribute option values - * need to be updated - */ - private String prevProduct; - - private final TaskRepository repository; - - protected IPreferenceStore prefs = BugzillaUiPlugin.getDefault().getPreferenceStore(); - - private final IStructuredSelection selection; - - /** - * Constructor for BugzillaProductPage - * - * @param workbench - * The instance of the workbench - * @param bugWiz - * The bug wizard which created this page - * @param repository - * The repository the data is coming from - * @param selection - */ - public BugzillaProductPage(IWorkbench workbench, NewBugzillaTaskWizard bugWiz, TaskRepository repository, - IStructuredSelection selection) { - super("Page1"); - this.selection = selection; - setTitle(IBugzillaConstants.TITLE_NEW_BUG); - setDescription(DESCRIPTION); - this.workbench = workbench; - - // set the status for the page - listStatus = new Status(IStatus.OK, "not_used", 0, "", null); - - this.bugWizard = bugWiz; - this.repository = repository; - setImageDescriptor(BugzillaUiPlugin.imageDescriptorFromPlugin("org.eclipse.mylar.bugzilla.ui", - "icons/wizban/bug-wizard.gif")); - - java2buzillaPlatformMap.put("x86", "PC"); - java2buzillaPlatformMap.put("x86_64", "PC"); - java2buzillaPlatformMap.put("ia64", "PC"); - java2buzillaPlatformMap.put("ia64_32", "PC"); - java2buzillaPlatformMap.put("sparc", "Sun"); - java2buzillaPlatformMap.put("ppc", "Power"); - - java2buzillaOSMap.put("aix", "AIX"); - java2buzillaOSMap.put("hpux", "HP-UX"); - java2buzillaOSMap.put("linux", "Linux"); - java2buzillaOSMap.put("macosx", "MacOS X"); - java2buzillaOSMap.put("qnx", "QNX-Photon"); - java2buzillaOSMap.put("solaris", "Solaris"); - java2buzillaOSMap.put("win32", "Windows"); - } - - public void createControl(Composite parent) { - // create the composite to hold the widgets - Composite composite = new Composite(parent, SWT.NULL); - - // create the desired layout for this wizard page - composite.setLayout(new GridLayout(1, true)); - - // create the list of bug reports - listBox = new org.eclipse.swt.widgets.List(composite, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY | SWT.V_SCROLL); - GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); - gd.heightHint = 200; - listBox.setLayoutData(gd); - - // Each wizard has different types of items to add to the list - populateList(true); - - listBox.addListener(SWT.Selection, this); - - listBox.setSelection(getSelectedProducts()); - listBox.showSelection(); -// listBox.addSelectionListener(new SelectionListener() { -// -// public void widgetDefaultSelected(SelectionEvent e) { -// // ignore -// } -// -// public void widgetSelected(SelectionEvent e) { -// getWizard().performFinish(); -// getWizard().dispose(); -// // TODO: is this the wrong way of doing the close? -// getContainer().getShell().close(); -// } -// }); - - Button updateButton = new Button(composite, SWT.LEFT | SWT.PUSH); - updateButton.setText(LABEL_UPDATE); - updateButton.setLayoutData(new GridData()); - - updateButton.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent e) { - try { - final AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager() - .getRepositoryConnector(repository.getKind()); - - getContainer().run(true, false, new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InvocationTargetException, - InterruptedException { - monitor.beginTask("Updating repository report options...", IProgressMonitor.UNKNOWN); - try { - connector.updateAttributes(repository, TasksUiPlugin.getDefault().getProxySettings(), - monitor); - } catch (CoreException ce) { - if (ce.getStatus().getException() instanceof GeneralSecurityException) { - MylarStatusHandler.fail(ce, - "Bugzilla could not log you in to get the information you requested since login name or password is incorrect.\n" - + "Please ensure proper configuration in " - + TaskRepositoriesView.NAME + ". ", true); - } else if (ce.getStatus().getException() instanceof IOException) { - MylarStatusHandler.fail(ce, - "Connection Error, please ensure proper configuration in " - + TaskRepositoriesView.NAME + ".", true); - } else { - MylarStatusHandler.fail(ce, "Error updating repository attributes for " - + repository.getUrl(), true); - } - return; - } - BugzillaUiPlugin.updateQueryOptions(repository, monitor); - - products = new ArrayList<String>(); - for (String product : BugzillaUiPlugin.getQueryOptions(IBugzillaConstants.VALUES_PRODUCT, - null, repository.getUrl())) { - products.add(product); - } - } - }); - populateList(false); - } catch (InvocationTargetException ex) { - MessageDialog.openError(null, "Error updating product list", "Error reported:\n" - + ex.getCause().getMessage()); - } catch (InterruptedException ex) { - // Was cancelled... - } - } - }); - - // set the composite as the control for this page - setControl(composite); - - isPageComplete(); - getWizard().getContainer().updateButtons(); - } - - private void initProducts() { - // try to get the list of products from the server - if (!bugWizard.model.hasParsedProducts()) { - String repositoryUrl = repository.getUrl(); - try { - String[] storedProducts = BugzillaUiPlugin.getQueryOptions(IBugzillaConstants.VALUES_PRODUCT, null, - repositoryUrl); - if (storedProducts.length > 0) { - products = Arrays.asList(storedProducts); - } else { - products = BugzillaServerFacade.getProductList(repository.getUrl(), TasksUiPlugin.getDefault() - .getProxySettings(), repository.getUserName(), repository.getPassword(), repository - .getCharacterEncoding()); - } - bugWizard.model.setConnected(true); - bugWizard.model.setParsedProductsStatus(true); - - } catch (final Exception e) { - bugWizard.model.setConnected(false); - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - MessageDialog.openError(Display.getDefault().getActiveShell(), NEW_BUGZILLA_TASK_ERROR_TITLE, - "Unable to get products. Ensure proper repository configuration in " - + TaskRepositoriesView.NAME + ".\n\n"); - MylarStatusHandler.log(e, "Failed to retrieve products from server"); - } - }); - } - } - } - - /** - * Populates the listBox with all available products. - * - * @param read - */ - protected void populateList(boolean init) { - if (init) { - initProducts(); - } - - if (products != null) { - listBox.removeAll(); - Iterator<String> itr = products.iterator(); - - while (itr.hasNext()) { - String prod = itr.next(); - listBox.add(prod); - } - } - listBox.setFocus(); - } - - private String[] getSelectedProducts() { - ArrayList<String> products = new ArrayList<String>(); - if (selection == null) { - return products.toArray(new String[0]); - } - - BugzillaRepositoryQuery query = null; - Object element = selection.getFirstElement(); - if (element instanceof BugzillaRepositoryQuery) { - query = (BugzillaRepositoryQuery) element; - - } else if (element instanceof BugzillaQueryHit) { - BugzillaQueryHit hit = (BugzillaQueryHit) element; - if (hit.getParent() != null && hit.getParent() instanceof BugzillaRepositoryQuery) { - query = (BugzillaRepositoryQuery) hit.getParent(); - } - } - - if (query != null) { - String queryUrl = query.getUrl(); - queryUrl = queryUrl.substring(queryUrl.indexOf("?") + 1); - String[] options = queryUrl.split("&"); - - for (String option : options) { - String key = option.substring(0, option.indexOf("=")); - if ("product".equals(key)) { - try { - products.add(URLDecoder.decode(option.substring(option.indexOf("=") + 1), repository - .getCharacterEncoding())); - // TODO: list box only accepts a single selection so we - // break on first found - break; - } catch (UnsupportedEncodingException ex) { - // ignore - } - } - } - } - - return products.toArray(new String[products.size()]); - } - - public void handleEvent(Event event) { - handleEventHelper(event, "You must select a product"); - } - - /** - * A helper function for "handleEvent" - * - * @param event - * the event which occurred - * @param errorMessage - * the error message unique to the wizard calling this function - */ - protected void handleEventHelper(Event event, String errorMessage) { - // Initialize a variable with the no error status - Status status = new Status(IStatus.OK, "not_used", 0, "", null); - - // If the event is triggered by the list of items, respond with the - // corresponding status - if (event.widget == listBox) { - if (listBox.getSelectionIndex() == -1) - status = new Status(IStatus.ERROR, "not_used", 0, errorMessage, null); - listStatus = status; - } - - // Show the most serious error - applyToStatusLine(listStatus); - isPageComplete(); - getWizard().getContainer().updateButtons(); - } - - /** - * Applies the status to the status line of a dialog page. - * - * @param status - * The status to apply to the status line - */ - protected void applyToStatusLine(IStatus status) { - String message = status.getMessage(); - if (message.length() == 0) - message = null; - switch (status.getSeverity()) { - case IStatus.OK: - setErrorMessage(null); - setMessage(message); - break; - case IStatus.WARNING: - setErrorMessage(null); - setMessage(message, WizardPage.WARNING); - break; - case IStatus.INFO: - setErrorMessage(null); - setMessage(message, WizardPage.INFORMATION); - break; - default: - setErrorMessage(null); - setMessage(message, WizardPage.ERROR); - break; - } - } - - /** - * Save the currently selected product to the model when next is clicked - * - * @throws IOException - * @throws NoSuchAlgorithmException - * @throws LoginException - * @throws KeyManagementException - * @throws BugzillaException - */ - public void saveDataToModel() throws KeyManagementException, GeneralSecurityException, IOException, - BugzillaException { - NewBugzillaReport model = bugWizard.model; - prevProduct = model.getProduct(); - model.setProduct((listBox.getSelection())[0]); - - if (!model.hasParsedAttributes() || !model.getProduct().equals(prevProduct)) { - BugzillaServerFacade.setupNewBugAttributes(repository.getUrl(), TasksUiPlugin.getDefault() - .getProxySettings(), repository.getUserName(), repository.getPassword(), model, repository - .getCharacterEncoding()); - model.setParsedAttributesStatus(true); - } - - setPlatformOptions(model); - } - - @Override - public boolean isPageComplete() { - bugWizard.completed = listBox.getSelectionIndex() != -1; - return bugWizard.completed; - } - - public void setPlatformOptions(NewBugzillaReport newBugModel) { - try { - - // Get OS Lookup Map - // Check that the result is in Values, if it is not, set it to other - RepositoryTaskAttribute opSysAttribute = newBugModel.getAttribute(BugzillaReportElement.OP_SYS - .getKeyString()); - RepositoryTaskAttribute platformAttribute = newBugModel.getAttribute(BugzillaReportElement.REP_PLATFORM - .getKeyString()); - - String OS = Platform.getOS(); - String platform = Platform.getOSArch(); - - String bugzillaOS = null; // Bugzilla String for OS - String bugzillaPlatform = null; // Bugzilla String for Platform - - if (java2buzillaOSMap != null && java2buzillaOSMap.containsKey(OS) && opSysAttribute != null - && opSysAttribute.getOptionValues() != null) { - bugzillaOS = java2buzillaOSMap.get(OS); - if (opSysAttribute != null && !opSysAttribute.getOptionValues().values().contains(bugzillaOS)) { - // If the OS we found is not in the list of available - // options, set bugzillaOS - // to null, and just use "other" - bugzillaOS = null; - } - } else { - // If we have a strangeOS, then just set buzillaOS to null, and - // use "other" - bugzillaOS = null; - } - - if (platform != null && java2buzillaPlatformMap.containsKey(platform)) { - bugzillaPlatform = java2buzillaPlatformMap.get(platform); - if (platformAttribute != null - && !platformAttribute.getOptionValues().values().contains(bugzillaPlatform)) { - // If the platform we found is not int the list of available - // optinos, set the - // Bugzilla Platform to null, and juse use "other" - bugzillaPlatform = null; - } - } else { - // If we have a strange platform, then just set bugzillaPatforrm - // to null, and use "other" - bugzillaPlatform = null; - } - - // Set the OS and the Platform in the model - if (bugzillaOS != null && opSysAttribute != null) - opSysAttribute.setValue(bugzillaOS); - if (bugzillaPlatform != null && platformAttribute != null) - platformAttribute.setValue(bugzillaPlatform); - - } catch (Exception e) { - MylarStatusHandler.fail(e, "could not set platform options", false); - } - } - - // @Override - // public IWizardPage getNextPage() { - // // save the product information to the model - // saveDataToModel(); - // NewBugzillaTaskWizard wizard = (NewBugzillaTaskWizard) getWizard(); - // NewBugzillaReport model = wizard.model; - // - // // try to get the attributes from the bugzilla server - // try { - // if (!model.hasParsedAttributes() || - // !model.getProduct().equals(prevProduct)) { - // BugzillaRepositoryUtil.setupNewBugAttributes(repository.getUrl(), - // MylarTaskListPlugin.getDefault() - // .getProxySettings(), repository.getUserName(), repository.getPassword(), - // model, repository - // .getCharacterEncoding()); - // model.setParsedAttributesStatus(true); - // } - // - // // if (prevProduct == null) { - // // bugWizard.setAttributePage(new WizardAttributesPage(workbench)); - // // bugWizard.addPage(bugWizard.getAttributePage()); - // // } else { - // // // selected product has changed - // // // will createControl again with new attributes in model - // // bugWizard.getAttributePage().setControl(null); - // // } - // - // } catch (final Exception e) { - // e.printStackTrace(); - // PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - // public void run() { - // MessageDialog.openError(Display.getDefault().getActiveShell(), - // NEW_BUGZILLA_TASK_ERROR_TITLE, e - // .getLocalizedMessage() - // + " Ensure proper repository configuration in " + - // TaskRepositoriesView.NAME + "."); - // } - // }); - // // MylarStatusHandler.fail(e, e.getLocalizedMessage()+" Ensure - // // proper repository configuration in - // // "+TaskRepositoriesView.NAME+".", true); - // // BugzillaPlugin.getDefault().logAndShowExceptionDetailsDialog(e, - // // "occurred.", "Bugzilla Error"); - // } - // return super.getNextPage(); - // } - -} diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/wizard/NewBugzillaTaskWizard.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/wizard/NewBugzillaTaskWizard.java deleted file mode 100644 index 1430f5a8c..000000000 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/wizard/NewBugzillaTaskWizard.java +++ /dev/null @@ -1,162 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.bugzilla.ui.wizard; - -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.mylar.internal.bugzilla.core.NewBugzillaReport; -import org.eclipse.mylar.internal.bugzilla.ui.BugzillaUiPlugin; -import org.eclipse.mylar.internal.bugzilla.ui.editor.NewBugEditorInput; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.INewWizard; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.PlatformUI; - -/** - * @author Mik Kersten - * @author Rob Elves - */ -public class NewBugzillaTaskWizard extends Wizard implements INewWizard { - - private static final String TITLE = "New Bugzilla Task"; - - private IWorkbench workbenchInstance; - - private final TaskRepository repository; - - private final BugzillaProductPage productPage; - - /** - * Flag to indicate if the wizard can be completed (finish button enabled) - */ - protected boolean completed = false; - - /** The model used to store all of the data for the wizard */ - protected NewBugzillaReport model; - - // TODO: Change model to a RepositoryTaskData - // protected RepositoryTaskData model; - - public NewBugzillaTaskWizard(TaskRepository repository, IStructuredSelection selection) { - this(false, repository, selection); - model = new NewBugzillaReport(repository.getUrl(), TasksUiPlugin.getDefault().getOfflineReportsFile() - .getNextOfflineBugId()); - super.setDefaultPageImageDescriptor(BugzillaUiPlugin.imageDescriptorFromPlugin( - "org.eclipse.mylar.internal.bugzilla.ui", "icons/wizban/bug-wizard.gif")); - super.setWindowTitle(TITLE); - setNeedsProgressMonitor(true); - } - - public NewBugzillaTaskWizard(boolean fromDialog, TaskRepository repository, IStructuredSelection selection) { - super(); - this.repository = repository; - this.productPage = new BugzillaProductPage(workbenchInstance, this, repository, selection); - } - - public void init(IWorkbench workbench, IStructuredSelection selection) { - this.workbenchInstance = workbench; - } - - @Override - public void addPages() { - super.addPages(); - addPage(productPage); - } - - @Override - public boolean canFinish() { - return completed; - } - - @Override - public boolean performFinish() { - - try { - productPage.saveDataToModel(); - NewBugEditorInput editorInput = new NewBugEditorInput(repository, model); - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - TaskUiUtil.openEditor(editorInput, BugzillaUiPlugin.NEW_BUG_EDITOR_ID, page); - return true; - } catch (Exception e) { - productPage.applyToStatusLine(new Status(IStatus.ERROR, "not_used", 0, - "Problem occured retrieving repository configuration from " + repository.getUrl(), null)); - } - return false; - } - -} - -// @Override -// protected void saveBugOffline() { -// // AbstractRepositoryConnector client = (AbstractRepositoryConnector) -// // MylarTaskListPlugin.getRepositoryManager() -// // .getRepositoryConnector(BugzillaPlugin.REPOSITORY_KIND); -// // client.saveOffline(model); -// } -// -// @Override -// protected AbstractBugzillaWizardPage getWizardDataPage() { -// return null; -// } - -// Open new bug editor - -// if (super.performFinish()) { -// -// String bugIdString = this.getId(); -// int bugId = -1; -// // boolean validId = false; -// try { -// if (bugIdString != null) { -// bugId = Integer.parseInt(bugIdString); -// // validId = true; -// } -// } catch (NumberFormatException nfe) { -// MessageDialog.openError(null, IBugzillaConstants.TITLE_MESSAGE_DIALOG, -// "Could not create bug id, no valid id"); -// return false; -// } -// // if (!validId) { -// // MessageDialog.openError(null, -// // IBugzillaConstants.TITLE_MESSAGE_DIALOG, -// // "Could not create bug id, no valid id"); -// // return false; -// // } -// -// BugzillaTask newTask = new -// BugzillaTask(AbstractRepositoryTask.getHandle(repository.getUrl(), bugId), -// "<bugzilla info>", true); -// Object selectedObject = null; -// if (TaskListView.getFromActivePerspective() != null) -// selectedObject = ((IStructuredSelection) -// TaskListView.getFromActivePerspective().getViewer() -// .getSelection()).getFirstElement(); -// -// // MylarTaskListPlugin.getTaskListManager().getTaskList().addTask(newTask); -// -// if (selectedObject instanceof TaskCategory) { -// MylarTaskListPlugin.getTaskListManager().getTaskList() -// .addTask(newTask, ((TaskCategory) selectedObject)); -// } else { -// MylarTaskListPlugin.getTaskListManager().getTaskList().addTask(newTask, -// MylarTaskListPlugin.getTaskListManager().getTaskList().getRootCategory()); -// } -// -// TaskUiUtil.refreshAndOpenTaskListElement(newTask); -// MylarTaskListPlugin.getSynchronizationManager().synchNow(0); -// -// return true; -// } diff --git a/org.eclipse.mylyn.help.ui/.classpath b/org.eclipse.mylyn.help.ui/.classpath deleted file mode 100644 index 304e86186..000000000 --- a/org.eclipse.mylyn.help.ui/.classpath +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="src" path="src"/> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/> - <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="output" path="bin"/> -</classpath> diff --git a/org.eclipse.mylyn.help.ui/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.mylyn.help.ui/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 616983fb2..000000000 --- a/org.eclipse.mylyn.help.ui/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,303 +0,0 @@ -#Mon Feb 13 11:20:14 PST 2006 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.5 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.autoboxing=ignore -org.eclipse.jdt.core.compiler.problem.deprecation=warning -org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled -org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled -org.eclipse.jdt.core.compiler.problem.discouragedReference=warning -org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore -org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning -org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning -org.eclipse.jdt.core.compiler.problem.forbiddenReference=error -org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning -org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning -org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore -org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore -org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore -org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning -org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning -org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning -org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore -org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning -org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore -org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled -org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning -org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled -org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore -org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning -org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning -org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning -org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore -org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore -org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled -org.eclipse.jdt.core.compiler.problem.unusedImport=warning -org.eclipse.jdt.core.compiler.problem.unusedLocal=warning -org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled -org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning -org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.5 -org.eclipse.jdt.core.formatter.align_type_members_on_columns=false -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_assignment=0 -org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 -org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 -org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 -org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 -org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_after_package=1 -org.eclipse.jdt.core.formatter.blank_lines_before_field=1 -org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 -org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 -org.eclipse.jdt.core.formatter.blank_lines_before_method=1 -org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 -org.eclipse.jdt.core.formatter.blank_lines_before_package=0 -org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 -org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.comment.clear_blank_lines=false -org.eclipse.jdt.core.formatter.comment.format_comments=true -org.eclipse.jdt.core.formatter.comment.format_header=false -org.eclipse.jdt.core.formatter.comment.format_html=true -org.eclipse.jdt.core.formatter.comment.format_source_code=true -org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true -org.eclipse.jdt.core.formatter.comment.indent_root_tags=true -org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert -org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert -org.eclipse.jdt.core.formatter.comment.line_length=80 -org.eclipse.jdt.core.formatter.compact_else_if=true -org.eclipse.jdt.core.formatter.continuation_indentation=2 -org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 -org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true -org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_empty_lines=false -org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true -org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false -org.eclipse.jdt.core.formatter.indentation.size=4 -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert -org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false -org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false -org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false -org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false -org.eclipse.jdt.core.formatter.lineSplit=120 -org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 -org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 -org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true -org.eclipse.jdt.core.formatter.tabulation.char=tab -org.eclipse.jdt.core.formatter.tabulation.size=4 -org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false diff --git a/org.eclipse.mylyn.help.ui/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.mylyn.help.ui/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index 8eff44dbd..000000000 --- a/org.eclipse.mylyn.help.ui/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,5 +0,0 @@ -#Mon Feb 13 11:20:14 PST 2006 -eclipse.preferences.version=1 -formatter_profile=_Mylar based on Eclipse [built-in] -formatter_settings_version=10 -org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\r\n * @return the ${bare_field_name}\r\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\r\n * @param ${param} the ${bare_field_name} to set\r\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/**\r\n * \r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author ${user}\r\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\r\n * \r\n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"></template><template autoinsert\="false" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">/*******************************************************************************\r\n * Copyright (c) 2004 - 2006 University Of British Columbia and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n *\r\n * Contributors\:\r\n * University Of British Columbia - initial API and implementation\r\n *******************************************************************************/\r\n\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\r\n${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ignore\r\n${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\r\n// ignore</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates> diff --git a/org.eclipse.mylyn.help.ui/META-INF/MANIFEST.MF b/org.eclipse.mylyn.help.ui/META-INF/MANIFEST.MF deleted file mode 100644 index 374805122..000000000 --- a/org.eclipse.mylyn.help.ui/META-INF/MANIFEST.MF +++ /dev/null @@ -1,14 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Mylar Documentation Plug-in -Bundle-SymbolicName: org.eclipse.mylar.doc; singleton:=true -Bundle-Version: 0.7.0 -Bundle-Localization: plugin -Eclipse-AutoStart: true -Bundle-Vendor: Eclipse.org -Require-Bundle: org.eclipse.ui, - org.eclipse.ui.forms, - org.eclipse.mylar.tasks.ui -Export-Package: org.eclipse.mylar.doc.internal.actions, - org.eclipse.mylar.doc.internal.dialogs -Bundle-RequiredExecutionEnvironment: J2SE-1.5 diff --git a/org.eclipse.mylyn.help.ui/doc/context.html b/org.eclipse.mylyn.help.ui/doc/context.html deleted file mode 100644 index 68145d668..000000000 --- a/org.eclipse.mylyn.help.ui/doc/context.html +++ /dev/null @@ -1,19 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> - <head> -<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." > - <link rel="stylesheet" href="book.css" charset="ISO-8859-1" type="text/css"> - <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> - <meta http-equiv="Content-Style-Type" content="text/css"> - <title> - Mylar Tools - </title> - </head> - <body> - <h1> - Task Context</h1> - <p> </p> - <p> </p> - - </body> -</html>
\ No newline at end of file diff --git a/org.eclipse.mylyn.help.ui/doc/contributing.html b/org.eclipse.mylyn.help.ui/doc/contributing.html deleted file mode 100644 index d927dc964..000000000 --- a/org.eclipse.mylyn.help.ui/doc/contributing.html +++ /dev/null @@ -1,216 +0,0 @@ -<html> - <head> - <title> - Mylar FAQ - </title> - </head> - <body> - <center><h1>Mylar Contributor Reference</h1></center> - <p>Those interested in contributing should start out by emailing -<a href="mailto:mylar-dev@eclipse.org">mylar-dev@eclipse.org</a> in order to get -an idea of the current priorities. Also refer to the list of <a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Mylar&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&keywords_type=allwords&keywords=helpwanted&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0="> -reports marked help wanted</a>. </p> - <ul> - <li><a href="#contributing-intro">Introduction</a></li> - <li><a href="#contributing-setup">Workspace setup</a></li> - <li><a href="#tests">Running tests</a></li> - <li><a href="#bootstrap">Working bootstrapped</a></li> - <li><a href="#contributing-patches">Contributing patches</li> -<!-- <li>Building</li>--> - </a></li> - <li><a href="#building-jira">Building the JIRA Connector</a></li> - <li><a href="#building-trac">Building the Trac Connector</a></li> - <li><a href="#building-dist">Building a distribution</a></li> - <li><a href="#web-site-authoring">Web site authoring</a></li> - </ul><hr width="50%"> - <h3> <br> - <a name="contributing-setup">Workspace setup</a></h3> - <ul> - <li>Building Mylar feature from HEAD requires - the latest Eclipse milestone release and - <a href="http://java.sun.com/j2se/1.5.0/download.jsp">JDK 1.5</a>. - Associate the J2SE-1.5 with your installed JRE on the Execution Environments preference page. </li> - <li>In the CVS Repositories view, add the following CVS location: - <b>HOST =</b> dev.eclipse.org <b>Repository Path</b>: - /cvsroot/technology.<br>If you do not have an account you may enter <b>anonymous</b> for the user name -and leave the password blank.</li> - <li>Check out all of the projects under org.eclipse.mylar (except mylar.jira, - mylar.sandbox, mylar.viz, and mylar.zest.* which have additional - dependencies). There should be no errors or warnings.</li> - <li>Run org.eclipse.mylar.tests.AllTests as a JUnit Plug-in Test, with - assertions enabled. All tests should pass and there should be no - console output.</li> - </ul> - <hr> - <h3><a name="tests">Running tests</a></h3> - <p>Each component has it's own All<Component>Tests suite, and all can be run - via org.eclipse.mylar.tests.AllTests. </p> - <ul> - <li>Add the following to the test configuration under Arguments -> VM - Arguments: -enableassertions -Xmx384M</li> - <li>Add a <b>credentials.properties</b> file to - org.eclipse.mylar.bugzilla.tests, and define "username: xxx" and - "password: yyy" in it. Email mylar-dev@ecipse.org for a username and - password.</li> - </ul> - <hr> - <h3><a name="building-jira">JIRA Connector</a></h3> - <ul> - <li>Get the latest <a href="http://subclipse.tigris.org/download.html"> - Subclipse</a> plug-in, e.g. from the following update site: - subclipse.tigris.org/update_1.0.x</li> - <li>Set up a Subversion repository for - <a href="http://jira-dashboard.tigris.org/">JIRA Dashboard</a> (see the - <a href="http://jira-dashboard.tigris.org/servlets/ProjectSource">JIRA - Dahsboard doc</a> for troubleshooting):<ul> - <li>username: <code>guest</code> </li> - <li>password: <blank></li> - <li>repository: - <a href="http://jira-dashboard.tigris.org/svn/jira-dashboard/trunk"> - http://jira-dashboard.tigris.org/svn/jira-dashboard/trunk</a></li> - </ul> - </li> - <li>Check out the JIRA Dashboard Core features:<ul> - <li>org.tigris.jira.core</li> - <li>org.tigris.jira.core.soap</li> - <li>org.tigris.jira.core-feature</li> - </ul> - </li> - <li>Create a working set that excludes <i>org.tigris.jira</i> plug-ins - so that you have no warnings in the Problems list</li> - <li>Note that the JIRA connector has it's own test suite: <i> - org.eclipse.mylar.jira.tests.AllJiraTests</i></li> - </ul> - <hr> - <h3><a name="building-trac">Trac Connector</a></h3> - <ul> - <li>Get the latest <a href="http://subclipse.tigris.org/download.html"> - Subclipse</a> plug-in, e.g. from the following update site: - subclipse.tigris.org/update_1.0.x</li> - <li>Set up a Subversion repository for - <a href="https://oss.steffenpingel.de/"> - oss.steffenpingel.de</a>: - <ul> - <li>repository: - <a href="https://oss.steffenpingel.de/svn/mylar-trac-connector/trunk"> - https://oss.steffenpingel.de/svn/mylar-trac-connector/trunk</a></li> - </ul> - </li> - <li>Check out the library which is required by the connector:<ul> - <li>org.apache.xmlrpc</li> - </ul> - </li> - <li>Note that the Trac connector has it's own test suite: <i> - org.eclipse.mylar.trac.tests.AllTracTests</i></li> - </ul> - <hr> -<h3><a name="bootstrap">Working bootstrapped</a> </h3> -<p>Working bootstrapped (i.e. self-hosted) makes eating your own dog food easier -and avoids having to update to dev builds:</p> - <ul> - <li>Set up a fresh workspace launched from an Eclipse that does not have - Mylar installed, and check out Mylar into - it.</li> - <li>Create a new <i>Launch Configuration</i>, point it at your workspace, - and work in that. Note that the launching workspace will typically - consume very little memory.</li> - <li>Whenever your changes make it into HEAD close your runtime - workspace, update from CVS, and then re-launch. It is possible to - run in debug mode so that the changes apply to the workspace immediately - after synch, but this can cause problems with the running workspace if - classes change or go missing.</li> - </ul> - <hr> -<h3><a name="contributing-patches">Contributing patches</a> </h3> - <p>All contributions to Mylar including patches should be made by using - Mylar in order to ensure that we - <a href="http://en.wikipedia.org/wiki/Eat_one's_own_dog_food">eat our our - own dog food</a>. A task context should be attached to each patch to - make applying and evolving it easier.</p> - <ul> - <li>Each patch should correspond to a single bug report, and a single - patch should be made for each set of changes to be reviewed.</li> - <li>With few exceptions patches should be accompanied by a JUnit test, - and in general unit tests are one of the most valuable and long-lived - contributions. If you are having trouble writing a test (e.g. - trickiness verifying what happens in the UI) comment on the - corresponding bug report so that we can point you at similar test cases - or consider extending the test harness if needed. </li> - <li>Minimize the amount of changes to existing code to make review - easier. </li> - <li>Synchronize often to ensure you have the latest code. Once you - start modifying resources, put the Synchronize view in Outgoing mode and press - the Change Set button so that Mylar tracks the context for the patch.</li> - <li>Before creating a new JUnit test class class check the components test - suite for similar test cases (e.g. - <tt>AllTasklistTests</tt>).</li> - <li>Set the formatter by importing org.eclipse.mylar/developer/javaFormatterSettings.xml - into Window -> Preferences -> Java -> Code Style -> Formatter. - Format code using Eclipse's formatter (Ctrl+Shift+F) - and ensure that no have been added.</li> - <li>Add an @author tag to each class that you create.</li> - <li>Ensure that there is no console output. For logging errors use - <tt>MylarStatusHandler</tt>.</li> - </ul> - <p>To submit:</p> - <ul> - <li>Ensure there are no build errors, warnings, and that <tt>org.eclipse.mylar.tests.AllTests</tt> passes.</li> - <li>Synchronize using Incoming mode and ensure that there are no - conflicts, and merge them locally if there are.</li> - <li>Right click the task context change set (or the project containing - the patch--patches should be made for a project, not a file), press Team - -> Create Patch, and make the file suffix ".txt".</li> - <li>Attach the patch to the bug report, and <i>indicate in the comment - what testing was done to validate it</i> (e.g. unit test coverage, - manual tests performed).</li> - <li>Attach the task context to the bug report.</li> - </ul> - <hr> -<h3><a name=building-dist>Building a distribution</a></h3> -<ul> - <li>Using PDE Build support to create a Mylar distribution from HEAD, using - a plain Eclipse 3.2<ul> - <li>org.eclipse.mylar-feature/feature.xml -> Overview -> change version - number to current date (e.g. 0.4.7.v20060125-0800)<ul> - <li>On Plug-ins tab -> Versions... -> Force feature version into plug-in and - fragment manifests</li> - <li>Repeat above for org.eclipse.mylar-bugzilla-feature.xml</li> -</ul> - </li> - <li>org.eclipse.mylar-site/e3.2/site.xml<ul> - <li>Delete old features (grayed out)</li> - <li>Add new mylar-bugzilla and mylar features</li> - <li>Hit Build All (if this fails restart Eclipse and try again)</li> -</ul> - </li> -</ul> - </li> - <li>To install, add the path of org.eclipse.mylar-site/e3.2/site.xml as a - local update site</li> - <li>Bugzilla support can be built independently of the Mylar UI by checking - out the following projects mylar.bugzilla.core, mylar.bugzilla.ui, - mylar.tasklist, mylar.core </li> -</ul> - <p>Merging and building the 3.1 branch:</p> - <ul> - <li>Right-click the org.eclipse.mylar.java, mylar.ide, and mylar.xml - project, <i>Team</i> -> <i>Switch to Another Branch...</i>, then <i>Refresh</i> the - <i>Branches</i> - and select <b>e_3_1 </b></li> - <li>The list of files that should not be overwritten is in: - org.eclipse.mylar-site/merge.text</li> - </ul> - <p>Deploying:</p> - <ul> - <li>Instructions are in org.eclipse.mylar-site/release.txt</li> - </ul> - <hr> -<h3><a name=web-site-authoring>Web site authoring</a></h3> -<ul> - <li>Create a new CVS location: dev.eclipse.org:/cvsroot/org.eclipse</li> - <li>Check out www/mylar as a project</li> - <li>To push documentation from org.eclipse.mylar.doc to the web site use the - targets in mylar/build.xml</li> -</ul> - <p> </p> -</body></html>
\ No newline at end of file diff --git a/org.eclipse.mylyn.help.ui/doc/dev/changes.html b/org.eclipse.mylyn.help.ui/doc/dev/changes.html deleted file mode 100644 index bea7d91d3..000000000 --- a/org.eclipse.mylyn.help.ui/doc/dev/changes.html +++ /dev/null @@ -1,12395 +0,0 @@ -<HTML> -<HEAD> - <TITLE>Mylar Release Notes</TITLE> - - <style> -<!-- -div.Section1 - {page:Section1;} -a:link - {color:blue; - text-decoration:underline;} - div.MsoNormal - {margin:0in; - margin-bottom:.0001pt; - font-size:12.0pt; - font-family:"Times New Roman"; - color:windowtext;} ---> -</style> - -</HEAD> -<BODY LINK="#4756AC" VLINK="#60657B" BGCOLOR="#FFFFFF"> - - <h2>Release Notes</h2> - <div class="Section1"> - <h3>Mylar 0.3.9 released 2005-09-26</h3> - <p class="MsoPlainText"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Mylar 0.3.9.1 is - now available, includes numerous bug fixes, and support for Eclipse - 3.2M2. Unfortunately due to changes in Eclipse 3.2M2 it is no - longer possible for the same plug-ins to support both 3.1 and 3.2. - But fortunately it was possible to coerce the update site allow you - to select either the 3.1 or 3.2 based feature. Another key change - in this release is that the Mylar Monitor has been almost entirely - decoupled from the UBC user study in preparation for the 0.4 - release, and is now available in CVS at dev.eclipse.org. </span> - </font></p> - <p class="MsoPlainText"><b><font face="Tahoma" size="2"> - <span style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - Acknowledgements</span></font></b></p> - <p class="MsoPlainText"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Thanks go out to - Wes Coelho for contributing making the Previous/Next task navigation - in the Task List persistent, and for helping provide a previous of - whether a task has context. Also, Eugene Kuleshov came up with the - really good idea of making landmark creation work by dragging an - element to an Active view (see below).</span></font></p> - <p class="MsoPlainText"><b><font face="Tahoma" size="2"> - <span style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - Tasks completed (22 total)</span></font></b></p> - <table class="MsoNormalTable" style="WIDTH: 95.22%" cellSpacing="0" cellPadding="0" width="95%" border="0" id="table34"> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109815" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109815"> - 109815</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">add phase - 2 upgrade popup </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110111" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110111"> - 110111</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">create - context activity context </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110113" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110113"> - 110113</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - restructure documentation </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110234" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110234"> - 110234</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">guard - against failure of elements to open </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110132" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110132"> - 110132</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">blo</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">eu@md.pp.ru</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - ClassCircularityError on startup </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110200" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110200"> - 110200</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">clean up - task list extension points and create JIRA plug-in </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104607" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104607"> - 104607</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">create - FAQ document </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110630" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110630"> - 110630</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">blo</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">eu@md.pp.ru</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - java.lang.VerifyError with Mylar 0.3.9 on Eclipse 3.2M2 - </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110112" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110112"> - 110112</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">tasks - fail to get removed from root </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109816" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109816"> - 109816</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">active - search labels blink on every selection </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106257" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106257"> - 106257</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">zazam@uvic.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Proposed - enhancement: Decouple UBC study </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109803" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109803"> - 109803</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">bsd@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Tooltips - on task list cause loss of focus </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109804" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109804"> - 109804</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">bsd@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - Differentiating task categories is difficult with Mylar a... - </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110464" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110464"> - 110464</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">make - active search check box selections disjoint </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107810" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107810"> - 107810</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">toggle of - folding can cause file modification when using ... </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110508" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110508"> - 110508</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">eu@md.pp.ru</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Allow - drag-n-drop to Active Search to create landmark </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109462" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109462"> - 109462</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">can't - change category name </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109783" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109783"> - 109783</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">wes.coelho@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">provide - indication of whether task has context </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110061" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110061"> - 110061</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">wes.coelho@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">previous - task history should be persistent </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107490" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107490"> - 107490</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">if view - is not active content can stick after task de-act... </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110133" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110133"> - 110133</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">maj</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">eu@md.pp.ru</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Unhandled - event loop exception </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110134" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110134"> - 110134</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">maj</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">eu@md.pp.ru</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Wrong - line breaks in Bugzilla comment editors </span></font></td> - </tr> - </table> - </div> - <h3> </h3> - <h3>Mylar 0.3.8 released 2005-09-19</h3> - <div class="Section1"> - <p class="MsoPlainText"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Mylar 0.3.8 is - now available and provides the first cut at predicted interest - facilities such as Active Search (new & noteworthy snippets are - below). These features are available for those users who update and - are in Phase 2 of the user study (under Preferences -> Mylar -> User - Study must have over 25000 events). If you should be in Phase 2 but - don’t see the Phase 2 update site email - <a title="mailto:mylar@cs.ubc.ca" href="mailto:mylar@cs.ubc.ca"> - mylar@cs.ubc.ca</a>. The focus for this week is refactoring - awareness and continuing to de-couple the UBC study. Special thanks - goes out to Brian de Alwis for identifying some important Linux/GTK - issues. </span></font><b><font face="Tahoma" size="2"> - <span style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - </span></font></b></p> - <p class="MsoPlainText"><b><font face="Tahoma" size="2"> - <span style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - Tasks completed last week (20 total)</span></font></b></p> - <table class="MsoNormalTable" style="WIDTH: 100%" cellSpacing="0" cellPadding="0" width="100%" border="0" id="table32"> - <tr> - <td style="PADDING-RIGHT: 0in; PADDING-LEFT: 15pt; PADDING-BOTTOM: 0in; PADDING-TOP: 0in"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109459" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109459"> - 109459</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">maj</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">during - bugzilla refresh focus is repeatedly lost.. </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 0in; PADDING-LEFT: 15pt; PADDING-BOTTOM: 0in; PADDING-TOP: 0in"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109538" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109538"> - 109538</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">make - active search disable when view is not active </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 0in; PADDING-LEFT: 15pt; PADDING-BOTTOM: 0in; PADDING-TOP: 0in"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108408" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108408"> - 108408</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">don't - allow non-existing elements to be landmarks </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 0in; PADDING-LEFT: 15pt; PADDING-BOTTOM: 0in; PADDING-TOP: 0in"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108409" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108409"> - 108409</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">make - usage summary limit results to accepted users </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 0in; PADDING-LEFT: 15pt; PADDING-BOTTOM: 0in; PADDING-TOP: 0in"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109232" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109232"> - 109232</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">package - explorer refreshes too much on marker change </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 0in; PADDING-LEFT: 15pt; PADDING-BOTTOM: 0in; PADDING-TOP: 0in"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109456" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109456"> - 109456</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">problems - list blinks in save in filtered mode </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 0in; PADDING-LEFT: 15pt; PADDING-BOTTOM: 0in; PADDING-TOP: 0in"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109642" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109642"> - 109642</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">maj</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">mylar can - block workspace on startup </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 0in; PADDING-LEFT: 15pt; PADDING-BOTTOM: 0in; PADDING-TOP: 0in"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107384" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107384"> - 107384</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">active - hierarchy can contain duplicate elements </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 0in; PADDING-LEFT: 15pt; PADDING-BOTTOM: 0in; PADDING-TOP: 0in"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109815" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109815"> - 109815</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">add phase - 2 upgarde popup </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 0in; PADDING-LEFT: 15pt; PADDING-BOTTOM: 0in; PADDING-TOP: 0in"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108294" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108294"> - 108294</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">improve - active search laziness </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 0in; PADDING-LEFT: 15pt; PADDING-BOTTOM: 0in; PADDING-TOP: 0in"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109315" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109315"> - 109315</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">package - explorer fails to unlink with editor when Mylar i... </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 0in; PADDING-LEFT: 15pt; PADDING-BOTTOM: 0in; PADDING-TOP: 0in"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109348" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109348"> - 109348</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - streamline date chooser </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 0in; PADDING-LEFT: 15pt; PADDING-BOTTOM: 0in; PADDING-TOP: 0in"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106690" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106690"> - 106690</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">add "edit - highlighters" button to "choose highlighter" menu </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 0in; PADDING-LEFT: 15pt; PADDING-BOTTOM: 0in; PADDING-TOP: 0in"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109534" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109534"> - 109534</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">add - "remove from this category" action </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 0in; PADDING-LEFT: 15pt; PADDING-BOTTOM: 0in; PADDING-TOP: 0in"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109462" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109462"> - 109462</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">can't - change category name </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 0in; PADDING-LEFT: 15pt; PADDING-BOTTOM: 0in; PADDING-TOP: 0in"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106938" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106938"> - 106938</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">maj</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">All</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">eu@md.pp.ru</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Implement - "new" marker for Bugzilla query </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 0in; PADDING-LEFT: 15pt; PADDING-BOTTOM: 0in; PADDING-TOP: 0in"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106931" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106931"> - 106931</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">eu@md.pp.ru</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Improve - icons for bugzilla tasks </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 0in; PADDING-LEFT: 15pt; PADDING-BOTTOM: 0in; PADDING-TOP: 0in"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109262" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109262"> - 109262</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">problems - list filter does not retain state on startup </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 0in; PADDING-LEFT: 15pt; PADDING-BOTTOM: 0in; PADDING-TOP: 0in"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109313" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109313"> - 109313</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 0in; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">outline - view refreshes too often </span></font></td> - </tr> - </table> - </div> - <h3> </h3> - <h3>Mylar 0.3.7 released 2005-09-12</h3> - <div class="Section1"> - <p class="MsoPlainText"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Mylar 0.3.7 is - now available. The most notable changes are synchronization status - for Bugzilla (pasted from the New & Noteworthy below) and a move to - extension points for the Mylar bridges. The focus for this week is - improving Active Search and Active Hierarchy performance and - integration, and 0.3.8 will be the first release of these - facilities. </span></font></p> - <p class="MsoPlainText"><b><font face="Tahoma" size="2"> - <span style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - Tasks completed last week (20 total)</span></font></b></p> - <table class="MsoNormalTable" style="WIDTH: 94.12%" cellSpacing="0" cellPadding="0" width="94%" border="0" id="table9"> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103589" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103589"> - 103589</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">task list - and active search contribution items fail to sh... </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104253" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104253"> - 104253</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">tri</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">make - mylar bridges extension points </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=105516" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=105516"> - 105516</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">s.s@rutgers.edu</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">package - explorer shows nothing upon eclipse startup unles... </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106931" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106931"> - 106931</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">eu@md.pp.ru</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Improve - icons for bugzilla tasks </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106938" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106938"> - 106938</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">maj</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">All</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">eu@md.pp.ru</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Implement - "new" marker for Bugzilla query </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107460" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107460"> - 107460</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">improve - Java Browsing Perspective robustness </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107812" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107812"> - 107812</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">add - prompt to view tutorial video on phase1 start </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108006" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108006"> - 108006</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">add UI - for restoring the tasklist from the backup copy </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108445" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108445"> - 108445</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">eu@md.pp.ru</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">NPE on - shut down from Update Manager </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108446" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108446"> - 108446</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">blo</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">eu@md.pp.ru</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">DUPL</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">NPE on - shut down from Update Manager </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108475" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108475"> - 108475</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">if active - task is only under archive reports it still nee... </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108535" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108535"> - 108535</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ttftestrayv@yahoo.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">INVA</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Bugzilla - Editor has problems in modified bugzilla repository </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108742" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108742"> - 108742</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">min</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ugawhyop001@sneakemail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Eclipse's - Problems filters interact badly with Mylar </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109147" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109147"> - 109147</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">s.s@rutgers.edu</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">"link - with editor" doesn't work </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109155" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109155"> - 109155</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">s.s@rutgers.edu</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">DUPL</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - incorporate working sets into the interest model </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109251" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109251"> - 109251</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">context - is not saved on shutdown or task deactivation </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109252" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109252"> - 109252</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">INVA</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">active - task not consistently highlighted </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109261" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109261"> - 109261</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">maj</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">offline - reports pops up repeatedly </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109262" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109262"> - 109262</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">problems - list filter does not retain state on startup </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109315" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109315"> - 109315</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">package - explorer fails to unlink with editor when Mylar i... </span> - </font></td> - </tr> - </table> - </div> - <h3> </h3> - <h3>Mylar 0.3.6 released 2005-08-29</h3> - <div class="Section1"> - <p class="MsoPlainText"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Mylar 0.3.6 is - out, contains numerous fixes. This week’s focus will be tuning - Active Search, Bugzilla and task list enhancements, and - infrastructure improvements including making the bridges - extension-point based. Also note that per Eugene’s suggestion we - are now tagging bug reports that contain interesting design - discussions with a “[discussion]” prefix on the bug summary. Here - is the - <a title="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=specific&order=relevance+desc&bug_status=__open__&product=Mylar&content=%5Bdiscussion%5D" href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=specific&order=relevance+desc&bug_status=__open__&product=Mylar&content=%5Bdiscussion%5D"> - bugzilla query</a>:</span></font></p> - <table class="MsoNormalTable" style="WIDTH: 100%" cellSpacing="0" cellPadding="0" width="100%" border="0" id="table7"> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107596" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107596"> - 107596</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">timmunro@amazon.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">NEW</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"> - <font face="Tahoma" color="black" size="2"> - <span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Tahoma"> - </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - [discussion] XP / Agile support features </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106940" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106940"> - 106940</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">All</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">eu@md.pp.ru</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">NEW</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"> - <font face="Tahoma" color="black" size="2"> - <span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Tahoma"> - </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - [discussion] Add support for QA tools </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102848" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102848"> - 102848</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P4</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">NEW</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"> - <font face="Tahoma" color="black" size="2"> - <span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Tahoma"> - </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - [discussion] support multiple bug providers </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104497" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104497"> - 104497</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P4</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">eu@md.pp.ru</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">NEW</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"> - <font face="Tahoma" color="black" size="2"> - <span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Tahoma"> - </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - [discussion] automatic task activation </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104638" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104638"> - 104638</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">All</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">jakubwach@o2.pl</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">NEW</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"> - <font face="Tahoma" color="black" size="2"> - <span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Tahoma"> - </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - [discussion] improve automatic folding </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=105100" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=105100"> - 105100</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P4</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ASSI</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"> - <font face="Tahoma" color="black" size="2"> - <span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Tahoma"> - </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - [discussion] prototype sharing of task contexts </span> - </font></td> - </tr> - </table> - <p class="MsoPlainText"><b><font face="Tahoma" size="2"> - <span style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - Tasks completed last week (33 total)</span></font></b></p> - <table class="MsoNormalTable" style="WIDTH: 94.7%" cellSpacing="0" cellPadding="0" width="94%" border="0" id="table8"> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107542" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107542"> - 107542</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">eu@md.pp.ru</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Build - errors should increase interest level for java files </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107477" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107477"> - 107477</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">split out - IDE-specific dependencies into mylar.ide component </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107463" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107463"> - 107463</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - "unfiltered" view selections are reported incorrectly </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103734" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103734"> - 103734</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">add - statistics generation check for phase switch </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106762" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106762"> - 106762</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">add - within user analysis of edit ratio </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107809" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107809"> - 107809</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">make - error logging more verbose </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104873" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104873"> - 104873</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">suppress - active search results showing up in package expl... </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104110" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104110"> - 104110</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">add - support for resetting edges </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104063" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104063"> - 104063</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">DUPL</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">toggling - related element providers fails to remove the se... </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103419" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103419"> - 103419</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">maj</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">improve - active search infrastructure </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106913" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106913"> - 106913</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">eu@md.pp.ru</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Annoying - task description editor activation on single mou... </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107062" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107062"> - 107062</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">support - custom queries </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107087" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107087"> - 107087</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">eu@md.pp.ru</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Remote - changes are not being shown for bugs that have loc... </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106927" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106927"> - 106927</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">automatic - refresh of bugzilla reports fails </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108163" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108163"> - 108163</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">active - tasks disappear </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104601" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104601"> - 104601</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">explore - making Mylar run on JDK 1.4 </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107285" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107285"> - 107285</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">DUPL</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">make task - list save state purely based on changes </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107745" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107745"> - 107745</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">eu@md.pp.ru</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Study - results should be submitted from a background job </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107459" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107459"> - 107459</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">eu@md.pp.ru</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - Deactivate mylar filter in all views on task deactivation - </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107549" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107549"> - 107549</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">eu@md.pp.ru</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - Accessibility of Mylar glasses in all views </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107304" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107304"> - 107304</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">timmunro@amazon.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Make key - project resources always visible </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107659" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107659"> - 107659</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">make sure - that tooltip works for bugzilla hits </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107754" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107754"> - 107754</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">cri</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">entire - tasklist can be lost if mylar is closed before loa... </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106923" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106923"> - 106923</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">maj</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">eu@md.pp.ru</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Bugzilla - operations should run in background jobs </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108154" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108154"> - 108154</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - navigating to previous task doesn't work if only one task... - </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107484" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107484"> - 107484</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">All</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Task - context not saved on restart </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108062" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108062"> - 108062</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">blo</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">eu@md.pp.ru</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">NPE when - opening resources from CVS resources history </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104255" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104255"> - 104255</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">DUPL</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">support - 'context categories' </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102680" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102680"> - 102680</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">DUPL</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">all views - should de-register taskscape listeners when dea... </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108068" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108068"> - 108068</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">DUPL</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">update - active search based on resource changes </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103235" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103235"> - 103235</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P4</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">DUPL</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">support - monitoring multiple workbench windows </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102047" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102047"> - 102047</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P5</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Drag and - Drop overwrites task description </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101947" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101947"> - 101947</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P5</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">ensure - update of XML outline view </span></font></td> - </tr> - </table> - </div> - <h3> </h3> - <h3>Mylar 0.3.5 released 2005-08-22</h3> - <div class="Section1"> - <p class="MsoPlainText"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Mylar 0.3.5 is - out and a big thanks goes out to Eugene Kuleshov and Tim Munro for - contributing so many useful bug reports and comments on improving - the usability and integration of Mylar. The focus for this week’s - 0.3.6 release will be resolving those issues, and getting the - predicted interest features like Active Search ready for the user - study.</span></font></p> - <p class="MsoPlainText"><b><font face="Tahoma" size="2"> - <span style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - Tasks completed last week (30 total)</span></font></b></p> - <table class="MsoNormalTable" style="WIDTH: 93.66%" cellSpacing="0" cellPadding="0" width="93%" border="0" id="table6"> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106930" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106930"> - 106930</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">blo</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Task list - is loosing its content after each restart </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106929" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106929"> - 106929</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Add - tooltip for description column in the tasklist </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107152" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107152"> - 107152</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">make - "unsure" the default for questionnaire responses </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104889" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104889"> - 104889</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - differentiate between element selections of normal, decay... - </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107055" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107055"> - 107055</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">min</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Task List - Filter </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=105516" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=105516"> - 105516</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">package - explorer shows nothing upon eclipse startup unles... </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107129" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107129"> - 107129</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Add - "Collapse All" action to tasklist toolbar </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107074" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107074"> - 107074</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">maj</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Allow - group operation for "Make less interesting" action </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107088" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107088"> - 107088</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Choose - highliter menu should have option to remove highliter </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103234" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103234"> - 103234</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">monitor - seems to be storing too much for preferences </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104512" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104512"> - 104512</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">after a - report is disabled task context can remain in pac... </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106899" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106899"> - 106899</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">INVA</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">suppress - filtering of active tasks </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107081" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107081"> - 107081</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">completed - bugs don't filter from root </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103031" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103031"> - 103031</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">lkf@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">summarize - perspective and activity usage </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107146" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107146"> - 107146</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">text - selections cause too much refreshing ManifestEditor </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107305" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107305"> - 107305</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Eclipse - hangs when modifying ant build.xml </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107351" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107351"> - 107351</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">maj</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">All</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Startup - slow </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=105094" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=105094"> - 105094</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - invalidate search results </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106924" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106924"> - 106924</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">npe when - no products are available </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102852" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102852"> - 102852</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">provide - link to bug report in editor </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103866" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103866"> - 103866</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">All</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Crtl-click - in the code to navigate to bug </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106925" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106925"> - 106925</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">error - stopping bugzilla plug-in </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107085" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107085"> - 107085</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Put a - limit on a fetched query result size </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106926" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106926"> - 106926</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">too many - "download failed" messages in log </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106699" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106699"> - 106699</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Should - not have to redo demographic information when user... </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106861" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106861"> - 106861</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">create - custom drill-down adapter </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106906" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106906"> - 106906</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - Additional actions for tasklist popup menu </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107175" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107175"> - 107175</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">offline - report exception </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107168" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107168"> - 107168</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Show in - browser link improvmemnts </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106566" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106566"> - 106566</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">zazam@uvic.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">make the - sign-up form HTML </span></font></td> - </tr> - </table> - </div> - <h3> </h3> - <h3>Mylar 0.3.4 released 2004-08-15</h3> - <div class="Section1"> - <p class="MsoPlainText"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Mylar 0.3.4 is - out with an improved task list and the bug fixes listed below. Note - that due to vacation schedules this was a 3 week cycle and not our - usual 1 week cycle. A <i><span style="FONT-STYLE: italic">big - thanks goes out Eugene Kuleshov</span></i> who has been very helpful - in clearly outlining usability issues and providing some great ideas - for enhancements. The focus for this week’s 0.3.5 release will be - addressing those usability issues and getting Active Search to the - point where we start using it for our daily development.</span></font></p> - <p class="MsoPlainText"><b><font face="Tahoma" size="2"> - <span style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - Tasks completed last week (33 total)</span></font></b></p> - <table class="MsoNormalTable" style="WIDTH: 93.8%" cellSpacing="0" cellPadding="0" width="93%" border="0" id="table5"> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103729" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103729"> - 103729</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">add - support for disjoint selections in Mylar views </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106629" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106629"> - 106629</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">blo</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">WORK</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - NoSuchMethodError when loading Mylar </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106669" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106669"> - 106669</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">LATE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Phase - Switch problem </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106800" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106800"> - 106800</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">maj</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Add an - option to deactivate task without closing opened e... </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102800" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102800"> - 102800</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - selections in package explorer jump to previous location - </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102689" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102689"> - 102689</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">control - enablement of Mylar actions </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106801" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106801"> - 106801</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">DUPL</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Provide - back/forward navigation in task view </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106820" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106820"> - 106820</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">DUPL</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Select - items of interest based on naming convention </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106899" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106899"> - 106899</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">INVA</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">suppress - filtering of active tasks </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106917" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106917"> - 106917</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">cri</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">DUPL</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Unable to - select two nodes in package explorer view </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104265" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104265"> - 104265</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">create - planning game report </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104793" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104793"> - 104793</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">quick - search action </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103733" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103733"> - 103733</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">support - gamma settings </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104263" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104263"> - 104263</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">support - reminders in task list </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104898" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104898"> - 104898</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - periodically save the task list </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=105098" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=105098"> - 105098</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">WORK</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">dragging - a task from the root to a category fails to remo... </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=105571" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=105571"> - 105571</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">estimated - time for tasks </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103031" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103031"> - 103031</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">lkf@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">summarize - perspective and activity usage </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102959" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102959"> - 102959</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">show - progress during upload </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104089" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104089"> - 104089</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">on bug - change refresh </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104927" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104927"> - 104927</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">maj</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">dozens of - refresh jobs can hang </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=105097" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=105097"> - 105097</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">add - back/forward buttons to task list </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101900" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101900"> - 101900</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">active - search npe </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102592" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102592"> - 102592</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">Oth</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - documentation is out of date </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102850" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102850"> - 102850</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - submitting a comment can fail silently </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103914" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103914"> - 103914</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">WORK</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Using the - outline view to select fails </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=105158" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=105158"> - 105158</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">min</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">"glasses" - icon disappearing on editor pane </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=105516" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=105516"> - 105516</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">package - explorer shows nothing upon eclipse startup unles... </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106664" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106664"> - 106664</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - questionnaire text box should wrap lines </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102683" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102683"> - 102683</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">support - reassinging bugs </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102855" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102855"> - 102855</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">add - support for CC'ing members and viewing CC list </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103537" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103537"> - 103537</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P4</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">password - shows up in query string when internal browser used </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106566" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106566"> - 106566</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">PC</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">zazam@uvic.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">make the - sign-up form HTML </span></font></td> - </tr> - </table> - </div> - <h3> </h3> - <h3>Mylar 0.3.3 released 2005-07-25</h3> - <div class="Section1"> - <p class="MsoPlainText"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Mylar 0.3.3 is - out and has had some substantial improvements in terms of both UI - and architecture. Most of the key bugs have been addressed, and - we’re now focusing on usability enhancements and refinements. We - also worked on Active Search, but that needs considerably more - effort and won’t be release until mid or late next month. Please - note that I will be away on vacation for most of the next two weeks, - so send any critical questions to Shawn (sminto@cs.ubc.ca).</span></font></p> - <p class="MsoPlainText"><b><font face="Tahoma" size="2"> - <span style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - Tasks completed last week (40 total)</span></font></b></p> - <table class="MsoNormalTable" style="WIDTH: 93.62%" cellSpacing="0" cellPadding="0" width="93%" border="0" id="table4"> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102679" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102679"> - 102679</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">add show - filtered action to navigator </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104243" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104243"> - 104243</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">create - flash demo tutorial </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104274" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104274"> - 104274</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">cri</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - interaction event errors </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104644" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104644"> - 104644</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">maj</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">monitor - task activation </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104691" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104691"> - 104691</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">make - collectors support csv export and user id mapping </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104888" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104888"> - 104888</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">revise - docs for 0.3.2 </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103940" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103940"> - 103940</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">update - documentation for 0.3.2 </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104489" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104489"> - 104489</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">clean up - composite context API </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104555" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104555"> - 104555</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">add - mechanism for analyzing statistics per-user </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103869" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103869"> - 103869</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">DUPL</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">make - highlighters a task list decorator </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104425" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104425"> - 104425</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">WONT</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Clear - Task Context Fails for a bugzilla task in a query </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102673" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102673"> - 102673</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">task - editor dirty state </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102946" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102946"> - 102946</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">provide - unified utility for InteractionEvent externalization </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103092" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103092"> - 103092</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">improve - category filtering and sorting </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104257" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104257"> - 104257</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">make mode - where only one task context can be active </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104260" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104260"> - 104260</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">merge - TaskListManager and TaskList </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104663" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104663"> - 104663</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">support - sleeping for more than 3 hours </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104890" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104890"> - 104890</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">cri</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">DUPL</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">tasklist - was lost when upgrading mylar </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103440" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103440"> - 103440</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">support - bugzilla refresh on a standard category </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104261" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104261"> - 104261</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">make time - refresh automatically on task list </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102681" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102681"> - 102681</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">ensure - that non-existing elements can not be searched </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102870" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102870"> - 102870</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">provide - documentation of known limitations </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102959" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102959"> - 102959</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">show - progress during upload </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103288" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103288"> - 103288</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">"close - all editors" not closing all </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103742" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103742"> - 103742</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Packages - do not reappear in Java Browsing Packages view w... </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104074" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104074"> - 104074</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">make all - Java active search categories one and add drop-d... </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104118" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104118"> - 104118</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Bugzilla - refresh fails if task active </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104389" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104389"> - 104389</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">active - search not working on startup, can't be disabled </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104424" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104424"> - 104424</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">active - bugzilla searches fail due to invalid thread access </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104526" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104526"> - 104526</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">make - highlighters and clear context action use task list ... - </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103588" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103588"> - 103588</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">use - extension points in place of ITaskListActionContributor - </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104382" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104382"> - 104382</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">stop - button for active search </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104510" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104510"> - 104510</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">resolving - bugs fails </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103866" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103866"> - 103866</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Crtl-click - in the code to navigate to bug </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103881" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103881"> - 103881</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Context - menu actions are enabled for all elements </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104553" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104553"> - 104553</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">after new - report is created via task list, open it </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103537" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103537"> - 103537</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P4</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">password - shows up in query string when internal browser used </span> - </font></td> - </tr> - </table> - </div> - <h3> </h3> - <h3>Mylar 0.3.2 released 2005-07-18</h3> - <div class="Section1"> - <p class="MsoPlainText"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">0.3.2 went out on - Friday evening with a lot of improvements, hardening of the UI and a - de-coupling of the Tasks plug-in from the Mylar UI. For this - Friday’s 0.3.3 release we’ll be focusing on fixing any bugs that - come in as a result of people starting to use Phase 1, improving the - usability of active views, creating extension points to help manage - the loose coupling we created last week, and making the remaining - planned enhancements to the task list.</span></font></p> - <p class="MsoPlainText"><b><font face="Tahoma" size="2"> - <span style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - Tasks completed last week (51 total)</span></font></b></p> - <table class="MsoNormalTable" style="WIDTH: 93.52%" cellSpacing="0" cellPadding="0" width="93%" border="0" id="table3"> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101920" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101920"> - 101920</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">mylar - editor doesn't provide ruler shortcuts </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102589" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102589"> - 102589</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">decorator - flicker in package explorer </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102676" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102676"> - 102676</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">add - support for moving from study phase1 to phase2 </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102800" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102800"> - 102800</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - selections in package explorer jump to previous location - </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102916" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102916"> - 102916</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">split - bugzilla into core and ui plugins </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103014" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103014"> - 103014</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">problems - list filtering is broken </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103099" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103099"> - 103099</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">decouple - tasks from mylar.ui </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103288" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103288"> - 103288</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">"close - all editors" not closing all </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103368" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103368"> - 103368</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">refactor - bugzilla UI and dependancy with task list </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103373" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103373"> - 103373</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">on task - activation expand all intersting in managed views </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103418" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103418"> - 103418</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">maj</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">improve - active search UI </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103585" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103585"> - 103585</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">cri</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">package - explorer refreshes too much </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103589" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103589"> - 103589</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">task list - and active search contribution items fail to sh... </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103748" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103748"> - 103748</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">make - highlighters work with de-coupled task list </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103915" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103915"> - 103915</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">maj</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - Parameters are missing from the context assist </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104037" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104037"> - 104037</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">ensure - that monitor can progress through phases </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104091" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104091"> - 104091</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">predicted - interest items are never removed from the contest </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102090" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102090"> - 102090</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">package - explorer synchronization with interest filtering off </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102101" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102101"> - 102101</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">mylar - perspective extensions </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102667" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102667"> - 102667</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">clarify - preference wizard effects and preference page </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103415" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103415"> - 103415</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">add new - and noteworthy on Java Browsing perspective </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103435" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103435"> - 103435</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">suppress - automatic wizard launches when in runtime workspace </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103749" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103749"> - 103749</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - Inconsistent font usage in Mylar Task List </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103940" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103940"> - 103940</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">update - documentation for 0.3.2 </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104070" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104070"> - 104070</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">put back - drill-down adapter on task list </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103236" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103236"> - 103236</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">make sure - active reports can't disappear </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103237" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103237"> - 103237</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">provide - mechanism to back up all task scapes, tasklist etc. </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103289" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103289"> - 103289</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">preserve - downloaded labels during refresh </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103364" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103364"> - 103364</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">add - timestamp to user sign-up </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103414" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103414"> - 103414</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">create - task list documentation </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103680" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103680"> - 103680</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">create - preference page for the monitor </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103726" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103726"> - 103726</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">reopened - bug reports are filtered as completed </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103422" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103422"> - 103422</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">labels - showing HTML characters wrong </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103570" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103570"> - 103570</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">ensure - that task list writes versions </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102662" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102662"> - 102662</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">lkf@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">create - summary statistics for perspective usage </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102595" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102595"> - 102595</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">feature - for "About" dialog </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102682" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102682"> - 102682</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">improve - new comment text area </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102852" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102852"> - 102852</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">provide - link to bug report in editor </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103016" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103016"> - 103016</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">cri</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">DUPL</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">silent - failure to open bug reports </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103107" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103107"> - 103107</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">cri</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">bugzilla - fails to load corrupted offline reports </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103332" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103332"> - 103332</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">maj</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">make - buzilla support proxy servers </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103594" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103594"> - 103594</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">cri</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">make - query categories work again </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103744" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103744"> - 103744</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">cri</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">bugzilla - reports are not refreshed </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104057" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104057"> - 104057</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">on - startup active task's context is inactive </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=100661" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=100661"> - 100661</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">make - bugzilla "submit" button use job </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102586" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102586"> - 102586</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">add " - refresh products" button to new bug report wizard page - </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103280" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103280"> - 103280</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">remember - query settings in tasks list </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103411" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103411"> - 103411</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">improve - bug editor UI </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103519" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103519"> - 103519</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">make - single BugzillaContentProvider </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103876" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103876"> - 103876</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">make task - list refresh on bug editor submit </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103880" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103880"> - 103880</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">add - "create bugzilla report" action to task list </span></font> - </td> - </tr> - </table> - </div> - <h3> </h3> - <h3>Mylar 0.3.1 released 2005-07-11</h3> - <p><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">The goals for this - Friday’s 0.3.2 release will be responding to the first user feedback - that we get, hardening predicted interest, improving the UIs of the - active views, and improving the coupling between the Mylar core, - Bugzilla, and Tasks plug-ins. </span></font></p> - <p><b><font face="Tahoma" size="2"> - <span style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - Tasks completed last week (30 total)</span></font></b></p> - <table class="MsoNormalTable" style="WIDTH: 87.32%" cellSpacing="0" cellPadding="0" width="87%" border="0" id="table2"> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101940" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101940"> - 101940</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">maj</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Landmark - notification incorrect </span></font></nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102365" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102365"> - 102365</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">cri</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">fix crazy - explorer selection cascade </span></font></nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102418" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102418"> - 102418</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Java Browsing - views don't update properly </span></font></nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102786" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102786"> - 102786</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">cri</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">keyboard - shortcuts not working </span></font></nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102889" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102889"> - 102889</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">maj</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">use Eclipse - proxy settings for upload/registration </span></font></nobr> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103014" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103014"> - 103014</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">problems list - filtering is broken </span></font></nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103222" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103222"> - 103222</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">maj</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">manual - landmark update is broken </span></font></nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=100920" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=100920"> - 100920</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">mylar - attempts to select everything on update from cvs </span></font> - </nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102667" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102667"> - 102667</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">clarify - preference wizard effects and preference page </span></font> - </nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102675" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102675"> - 102675</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">prune - dangling predicted interest nodes </span></font></nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102800" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102800"> - 102800</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">selections in - package explorer jump to previous location </span></font></nobr> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102954" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102954"> - 102954</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">blo</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Unable to get - a user study id </span></font></nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102896" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102896"> - 102896</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P4</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">restore - default on preference page disables OK button </span></font> - </nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102669" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102669"> - 102669</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">improve - deletions of tasks with context </span></font></nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102593" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102593"> - 102593</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">support for - refreshing a single query </span></font></nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102685" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102685"> - 102685</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">cri</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">add study - sign up wizard </span></font></nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102791" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102791"> - 102791</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">remove the - dependancy on XStream </span></font></nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102871" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102871"> - 102871</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">provide - mechanism for opening reports in a web browser </span></font> - </nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101916" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101916"> - 101916</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">minor task - list UI nits </span></font></nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102409" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102409"> - 102409</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">task list - drag and drop </span></font></nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102671" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102671"> - 102671</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">automatic - elapsed time for tasks </span></font></nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102672" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102672"> - 102672</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">closing the - task editor </span></font></nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103032" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103032"> - 103032</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">npe on close - of eclipse when task list is still refreshing </span></font> - </nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103228" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103228"> - 103228</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">make labels - italic when bug reports are being refreshed </span></font> - </nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103229" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103229"> - 103229</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">provide - preference for automatic bugzilla refresh on work... </span> - </font></nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102795" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102795"> - 102795</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">cri</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P3</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">ksueda@gmail.com</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">preference - page fails to show </span></font></nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102600" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102600"> - 102600</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">nor</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">lkf@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">provide - generic action monitoring facility </span></font></nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102664" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102664"> - 102664</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">lkf@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">monitor - activity/capability changes </span></font></nobr></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103034" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103034"> - 103034</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">enh</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P2</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">lkf@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">log new - workbench window openings and closings </span></font></nobr> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103016" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103016"> - 103016</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">cri</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">P1</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">silent - failure to open bug reports </span></font></nobr></td> - </tr> - </table> - <h3> </h3> - <h3>Mylar 0.3.0 released 2005-07-04</h3> - <p><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">The first cut at the - Mylar 0.3.1 preview release is scheduled for this Friday. All sources - are up on eclipse.org, other than the monitor feature, which will have - to remain at UBC for the duration of the study. Planning and - discussions should take place on this list from now on. Each Monday I - will report on the tasks that we have completed in the past week, the P1 - tasks that need to be done this week, and the P2 tasks that would nice - to have done this week. All reports marked as P3 should be considered - when we schedule the following week’s tasks. For the duration of the - study we’ll rev the minor-minor version number each Friday, making those - updates available to study subjects. I’ll keep the following page - up-to-date as our conventions evolve: - <a title="http://eclipse.org/mylar/dev.html" href="http://eclipse.org/mylar/dev.html"> - http://eclipse.org/mylar/dev.html</a> </span></font></p> - <p><b><font face="Tahoma" size="2"> - <span style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - Tasks completed last week (22 total)</span></font></b></p> - <div class="Section1"> - <table class="MsoNormalTable" style="WIDTH: 88.24%" cellSpacing="0" cellPadding="0" width="88%" border="0" id="table1"> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101891" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101891"> - 101891</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">LATE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">add - support for monitoring preference changes </span></font> - </td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102200" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102200"> - 102200</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">resetting - folding discards unsaved edits </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102588" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102588"> - 102588</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">problem - with UI hang on startup </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102049" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102049"> - 102049</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">add - monitor support for upgrading from baseline to Mylar </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=100461" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=100461"> - 100461</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Unable to - Raise Children Properly </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101561" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101561"> - 101561</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">ksueda@gmail.com - </span></font></nobr></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - Categories and Tasks should be different </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101898" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101898"> - 101898</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">improve - icons </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101899" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101899"> - 101899</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">ksueda@gmail.com - </span></font></nobr></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">problems - with task list refresh </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102249" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102249"> - 102249</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">on shell - de-activation Mylar causes noticeable slowdown </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102352" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102352"> - 102352</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">ksueda@gmail.com - </span></font></nobr></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">adding a - new bugzilla report doesn't cause it to appear </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102382" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102382"> - 102382</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - perspective change monitoring </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101911" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101911"> - 101911</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Support - bugzilla queries </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102399" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102399"> - 102399</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">support - interest filtering in Java Browsing Perspective </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=99420" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=99420"> - 99420</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">beatmik@acm.org</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Plugin - Xml filtering problems </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=100946" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=100946"> - 100946</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">ksueda@gmail.com</span></font></nobr></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">RESO - </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">remove - ability to create subtasks </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101562" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101562"> - 101562</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">ksueda@gmail.com - </span></font></nobr></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">DUPL</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Add - support for creating a bugzilla query category </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=100627" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=100627"> - 100627</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Add - preference for automatic closing </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=100983" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=100983"> - 100983</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">active - search view fails to refresh when results return </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101661" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101661"> - 101661</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">beatmik@acm.org</span></font></nobr></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">view - filters </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101901" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=101901"> - 101901</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">add - keyboard shortcut for "search in task context" </span> - </font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102120" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102120"> - 102120</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">verify - new bugzilla icons </span></font></td> - </tr> - <tr> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 15pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <a title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102243" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102243"> - 102243</a> </span></font></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">sminto@cs.ubc.ca</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">RESO</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <nobr> - <p class="MsoNormal"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> - <font face="Tahoma" size="2">FIXE</font></span></nobr><span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"><font face="Tahoma" size="2"> - </font></span></td> - <td style="PADDING-RIGHT: 3pt; PADDING-LEFT: 3pt; PADDING-BOTTOM: 3pt; PADDING-TOP: 3pt"> - <p class="MsoNormal"><font face="Tahoma" size="2"> - <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">failure - to set status of report to FIXED </span></font></td> - </tr> - </table> - </div> - <p> </p> - <h3>Mylar 0.2 internal release 2005-03</h3> - <p> - <font face="Tahoma" size="2"> - <span style="font-size: 10pt; font-family: Tahoma">Mylar views integrated with standard JDT views, - problems list, navigator, and outline. Aware of Java, plugin.xml, Ant build.xml, and Bugzilla - structure. Active search prototype. Task - list, generic interest decorators, sorters, filters. - </span></font> - </p> - <p> - </p> - <h3>Mylar 0.1 internal release 2004-08</h3> - <p><font face="Tahoma" size="2"> - <span style="font-size: 10pt; font-family: Tahoma">Private release for - IBM Toronto Lab user study. Mylar degree-of-interest visualization - appears in the following new Eclipse views intended to replace their - Eclipse counterparts: Package Explorer, - Problems List, and Document Outline.</span></font></p> - </body> -</html>
\ No newline at end of file diff --git a/org.eclipse.mylyn.help.ui/doc/dev/dependencies.vsd b/org.eclipse.mylyn.help.ui/doc/dev/dependencies.vsd Binary files differdeleted file mode 100644 index 1ece91b2c..000000000 --- a/org.eclipse.mylyn.help.ui/doc/dev/dependencies.vsd +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/dev/index.html b/org.eclipse.mylyn.help.ui/doc/dev/index.html deleted file mode 100644 index b2832954a..000000000 --- a/org.eclipse.mylyn.help.ui/doc/dev/index.html +++ /dev/null @@ -1,20 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> - <head> -<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." > - <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css"> - <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> - <meta http-equiv="Content-Style-Type" content="text/css"> - <title> - Mylar Tools - </title> - </head> - <body> - <h1> - Developer Documentation</h1> - <p>The latest developer documentation is at: - <a href="http://eclipse.org/mylar/dev.html"> - http://eclipse.org/mylar/dev.html</a> </p> - - </body> -</html>
\ No newline at end of file diff --git a/org.eclipse.mylyn.help.ui/doc/dev/model.vsd b/org.eclipse.mylyn.help.ui/doc/dev/model.vsd Binary files differdeleted file mode 100644 index 168c5f186..000000000 --- a/org.eclipse.mylyn.help.ui/doc/dev/model.vsd +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/dev/plan.html b/org.eclipse.mylyn.help.ui/doc/dev/plan.html deleted file mode 100644 index c8f211a16..000000000 --- a/org.eclipse.mylyn.help.ui/doc/dev/plan.html +++ /dev/null @@ -1,371 +0,0 @@ -<html> - -<head> -<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> -<title>April 2006</title> -</head> - -<body> - - <p>The following is a high-level plan for Mylar releases up to 1.0.0. Current priorities are represented by the - <a href="bugs.php">prioritized bugzilla reports</a> and discussed in our - <a href="http://wiki.eclipse.org/index.php/Mylar_Meetings">meetings</a>. - </p> - - <table border="0" cellspacing="0" cellpadding="0" align="center"> - <tr> - - <td height="18" align="right"></td> - <td height="18" align="center"> - </td> - <td align="center" height="18"></td> - <td height="18" align="center"></td> - <td height="18" align="center">Eclipse</td> - <td height="18" align="center"></td> - <td align="center" height="18">Mylar</td> - <td height="18" align="center"></td> - <td align="center">Planned Features</td> - <td height="18" align="center"></td> - <td align="center">Planned API*</td> - </tr> - <tr> - - <td height="18" align="right"><b>April </b></td> - <td height="18"> - <img src="http://www.eclipse.org/mylar/doc/images/dev/tbar_l.gif" width="24" height="18"></td> - <td align="right" height="18"></td> - <td height="18"></td> - <td height="18"></td> - <td height="18"></td> - <td align="right" height="18"></td> - <td height="18"></td> - <td></td> - <td height="18"></td> - <td> </td> - </tr> - <tr> - - <td height="18" align="right"></td> - <td height="18"><img src="http://www.eclipse.org/mylar/doc/images/dev/tbar_r.gif" width="24" height="18"></td> - <td align="right" height="18">7</td> - <td height="18"> </td> - <td height="18"> 3.2M6</td> - <td height="18"> </td> - <td align="right" height="18"> 0.5.0</td> - <td height="18"> </td> - <td rowspan="3" align="left" valign="top">Tasks: task list and - personal planning, Bugzilla and JIRA connectors<br> - Context: SDK integration and Focused UI</td> - <td height="18"> </td> - <td rowspan="3" align="left" valign="top">Repository Connectors - (provisional)</td> - </tr> - - <tr> - <td height="18" align="right"></td> - <td height="18"><img src="http://www.eclipse.org/mylar/doc/images/dev/tbar_r.gif" width="24" height="18"></td> - <td align="right" height="18"></td> - - <td height="18"></td> - - <td height="18"></td> - - <td height="18"></td> - - <td align="right" height="18"></td> - - <td height="18"></td> - - </tr> - - <tr> - <td height="18" align="right"></td> - <td height="18"><img src="http://www.eclipse.org/mylar/doc/images/dev/tbar_r.gif" width="24" height="18"></td> - <td align="right" height="18"></td> - <td height="18"></td> - <td height="18"></td> - <td height="18"></td> - <td align="right" height="18"></td> - <td height="18"></td> - </tr> - <tr> - <td height="18" align="right"></td> - <td height="18"><img src="http://www.eclipse.org/mylar/doc/images/dev/tbar_r.gif" width="24" height="18"></td> - <td align="right" height="18">28</td> - - <td height="18"></td> - - <td height="18">3.2RC2</td> - - <td height="18"></td> - - <td align="right" height="18">0.5.1</td> - - <td height="18"></td> - - <td rowspan="4" align="left" valign="top">Tasks: repository task - change notifications<br> - Context: repository context attachments </td> - - <td height="18"></td> - - <td rowspan="4" align="left" valign="top">Changes to plug-in refactoring and - cleanup</td> - - </tr> - <tr> - - <td height="18" align="right"><b>May </b></td> - <td height="18"> - <img src="http://www.eclipse.org/mylar/doc/images/dev/tbar_l.gif" width="24" height="18"></td> - <td align="right" height="18"></td> - <td height="18"></td> - <td height="18"></td> - <td height="18"></td> - <td align="right" height="18"></td> - <td height="18"></td> - </tr> - <tr> - <td height="18" align="right"></td> - <td height="18"><img src="http://www.eclipse.org/mylar/doc/images/dev/tbar_r.gif" width="24" height="18"></td> - <td align="right" height="18"></td> - - <td height="18"></td> - - <td height="18"></td> - <td height="18"></td> - - <td align="right" height="18"></td> - <td height="18"></td> - </tr> - <tr> - <td height="18" align="right"></td> - <td height="18"><img src="http://www.eclipse.org/mylar/doc/images/dev/tbar_r.gif" width="24" height="18"></td> - <td align="right" height="18"></td> - - <td height="18"></td> - - <td height="18"></td> - - <td height="18"></td> - - <td align="right" height="18"></td> - - <td height="18"></td> - - </tr> - <tr> - <td height="18" align="right"></td> - <td height="18"><img src="http://www.eclipse.org/mylar/doc/images/dev/tbar_r.gif" width="24" height="18"></td> - <td align="right" height="18">19</td> - - <td height="18"></td> - - <td height="18">3.2RC4</td> - - <td height="18"></td> - - <td align="right" height="18">0.5.2</td> - - <td height="18"></td> - - <td rowspan="4" align="left" valign="top">Tasks: generic attributes - in task list<br> - Context: monitor - improvements</td> - - <td height="18"></td> - - <td rowspan="4" align="left" valign="top">Changes to ITask hierarchy</td> - - </tr> - - <tr> - <td height="18" align="right"></td> - <td height="18"><img src="http://www.eclipse.org/mylar/doc/images/dev/tbar_r.gif" width="24" height="18"></td> - <td align="right" height="18"></td> - <td height="18"></td> - <td height="18"></td> - <td height="18"></td> - <td align="right" height="18"> </td> - <td height="18"></td> - </tr> - - <tr> - - <td height="18" align="right"><b>June </b></td> - <td height="18"> - <img src="http://www.eclipse.org/mylar/doc/images/dev/tbar_l.gif" width="24" height="18"></td> - <td align="right" height="18"></td> - <td height="18"></td> - <td height="18"></td> - <td height="18"></td> - <td align="right" height="18"></td> - <td height="18"></td> - </tr> - <tr> - <td height="18" align="right"></td> - <td height="18"><img src="http://www.eclipse.org/mylar/doc/images/dev/tbar_r.gif" width="24" height="18"></td> - <td align="right" height="18"></td> - - <td height="18"></td> - - <td height="18"></td> - <td height="18"></td> - - <td align="right" height="18"></td> - <td height="18"></td> - </tr> - <tr> - <td height="18" align="right"></td> - <td height="18"><img src="http://www.eclipse.org/mylar/doc/images/dev/tbar_r.gif" width="24" height="18"></td> - <td align="right" height="18">9</td> - - <td height="18"></td> - - <td height="18"></td> - - <td height="18"></td> - - <td align="right" height="18">0.5.3</td> - - <td height="18"></td> - - <td rowspan="3" align="left" valign="top">Tasks: common editor</td> - - <td height="18"></td> - - <td rowspan="3" align="left" valign="top">Monitor API (provisional)</td> - - </tr> - <tr> - <td height="18" align="right"></td> - <td height="18"><img src="http://www.eclipse.org/mylar/doc/images/dev/tbar_r.gif" width="24" height="18"></td> - <td align="right" height="18"></td> - - <td height="18"></td> - - <td height="18"></td> - - <td height="18"></td> - - <td align="right" height="18"></td> - - <td height="18"></td> - - </tr> - <tr> - <td height="18" align="right"></td> - <td height="18"><img src="http://www.eclipse.org/mylar/doc/images/dev/tbar_r.gif" width="24" height="18"></td> - <td align="right" height="18"></td> - <td height="18"></td> - <td height="18"></td> - <td height="18"></td> - <td align="right" height="18"> </td> - <td height="18"></td> - </tr> - <tr> - <td height="18" align="right"></td> - <td height="18"><img src="http://www.eclipse.org/mylar/doc/images/dev/tbar_r.gif" width="24" height="18"></td> - <td align="right" height="18">28</td> - <td height="18"></td> - <td height="18">Callisto</td> - <td height="18"></td> - <td align="right" height="18"> 0.6.0</td> - <td height="18"></td> - <td align="left" valign="top" rowspan="2">UI and tuning, repository - task change notifications</td> - <td height="18"></td> - <td align="left" valign="top">Tasks API (provisional)</td> - </tr> - <tr> - <td height="18" align="right"></td> - <td align="center" height="18"><img src="http://www.eclipse.org/mylar/doc/images/dev/gray.gif" width="2" height="18"></td> - <td align="right" height="18"></td> - - <td height="18"></td> - - <td height="18"></td> - - <td height="18"></td> - - <td align="right" height="18"></td> - - <td height="18"></td> - - <td height="18"></td> - <td align="left" valign="top"> </td> - </tr> - <tr> - - <td height="18" align="right"><b>Sept </b></td> - <td height="18"> - <img src="http://www.eclipse.org/mylar/doc/images/dev/tbar_l.gif" width="24" height="18"></td> - <td align="right" height="18"></td> - <td height="18"></td> - <td height="18"></td> - <td height="18"></td> - <td align="right" height="18"></td> - <td height="18"></td> - <td align="left" valign="top"> </td> - - <td height="18"></td> - - <td align="left" valign="top"> </td> - </tr> - <tr> - <td height="18" align="right"></td> - <td height="18"><img src="http://www.eclipse.org/mylar/doc/images/dev/tbar_r.gif" width="24" height="18"></td> - <td align="right" height="18"></td> - <td height="18"></td> - <td height="18"></td> - <td height="18"></td> - <td align="right" height="18"> 0.7.0</td> - <td height="18"></td> - <td>Debug integration, task editor improvements, Trac Connector</td> - - <td height="18"></td> - - <td>Context API (provisional)</td> - </tr> - <tr> - - <td height="18" align="right"><b> </b></td> - <td height="18"> - <img src="http://www.eclipse.org/mylar/doc/images/dev/tbar_l.gif" width="24" height="18"></td> - <td align="right" height="18"></td> - <td height="18"></td> - <td height="18"></td> - <td height="18"></td> - <td align="right" height="18"></td> - <td height="18"></td> - <td align="left" valign="top"> </td> - - <td height="18"></td> - - <td align="left" valign="top"> </td> - </tr> - <tr> - <td height="18" align="right"></td> - <td height="18"><img src="http://www.eclipse.org/mylar/doc/images/dev/tbar_r.gif" width="24" height="18"></td> - <td align="right" height="18"></td> - <td height="18"></td> - <td height="18"></td> - <td height="18"></td> - <td align="right" height="18"> 1.0.0</td> - <td height="18"></td> - <td>Tools project quality</td> - - <td height="18"></td> - - <td>Eclipse API contract</td> - </tr> - - </table> -<p>* See the -<a href="http://wiki.eclipse.org/index.php/Mylar_Contributor_Reference">Contributor Reference</a> for the extensibility overview. </p> - <p><i>Last updated: 2005-08-03</i></p> - <p> </p> -</body> - -</html>
\ No newline at end of file diff --git a/org.eclipse.mylyn.help.ui/doc/faq.html b/org.eclipse.mylyn.help.ui/doc/faq.html deleted file mode 100644 index 7abe2a2c5..000000000 --- a/org.eclipse.mylyn.help.ui/doc/faq.html +++ /dev/null @@ -1,11 +0,0 @@ -<html> - <head> - <title> - Mylar FAQ - </title> - </head> - <body> - <p> </p> - <p>See: <b><a href="http://wiki.eclipse.org/index.php/Mylar_FAQ"> - http://wiki.eclipse.org/index.php/Mylar_FAQ</a> </b></p> -</body></html>
\ No newline at end of file diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/active-hierarchy.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/active-hierarchy.gif Binary files differdeleted file mode 100644 index 35651b170..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/active-hierarchy.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/active-search-linked.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/active-search-linked.gif Binary files differdeleted file mode 100644 index 1407080bf..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/active-search-linked.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/active-search-manipulation.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/active-search-manipulation.gif Binary files differdeleted file mode 100644 index b3e3784ab..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/active-search-manipulation.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/active-search-qualify.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/active-search-qualify.gif Binary files differdeleted file mode 100644 index 83109c54a..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/active-search-qualify.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/active-search.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/active-search.gif Binary files differdeleted file mode 100644 index 63af2fd51..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/active-search.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/alt-click.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/alt-click.gif Binary files differdeleted file mode 100644 index fc2a91bcf..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/alt-click.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/bugzilla-hyperlink.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/bugzilla-hyperlink.gif Binary files differdeleted file mode 100644 index 22dfa8780..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/bugzilla-hyperlink.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/bugzilla-internal-browser.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/bugzilla-internal-browser.gif Binary files differdeleted file mode 100644 index 6087ee5b8..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/bugzilla-internal-browser.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/bugzilla-query-custom.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/bugzilla-query-custom.gif Binary files differdeleted file mode 100644 index 7f341e135..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/bugzilla-query-custom.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/bugzilla-synch.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/bugzilla-synch.gif Binary files differdeleted file mode 100644 index 390e6ea86..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/bugzilla-synch.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/filter-auto-toggle.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/filter-auto-toggle.gif Binary files differdeleted file mode 100644 index 02670b06a..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/filter-auto-toggle.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/filtering-ant.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/filtering-ant.gif Binary files differdeleted file mode 100644 index eac12cbf4..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/filtering-ant.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/filtering-declarations.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/filtering-declarations.gif Binary files differdeleted file mode 100644 index 9362a231f..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/filtering-declarations.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/filtering-exclusion.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/filtering-exclusion.gif Binary files differdeleted file mode 100644 index ff1c65b23..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/filtering-exclusion.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/filtering-navigator.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/filtering-navigator.gif Binary files differdeleted file mode 100644 index fd9d2157e..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/filtering-navigator.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/folding-toggle.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/folding-toggle.gif Binary files differdeleted file mode 100644 index bfaa55233..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/folding-toggle.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/highlight.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/highlight.gif Binary files differdeleted file mode 100644 index 7368b7f25..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/highlight.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/interest-content-assist.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/interest-content-assist.gif Binary files differdeleted file mode 100644 index 67c85f9d8..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/interest-content-assist.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/interest-error.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/interest-error.gif Binary files differdeleted file mode 100644 index d57c90d25..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/interest-error.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/interest-java-browsing.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/interest-java-browsing.gif Binary files differdeleted file mode 100644 index 031d55daf..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/interest-java-browsing.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/interest-manipulate.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/interest-manipulate.gif Binary files differdeleted file mode 100644 index 5640c2b2a..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/interest-manipulate.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/monitor-enable.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/monitor-enable.gif Binary files differdeleted file mode 100644 index bc26204e9..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/monitor-enable.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/open-type.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/open-type.gif Binary files differdeleted file mode 100644 index 2b1879eb4..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/open-type.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/overview.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/overview.gif Binary files differdeleted file mode 100644 index b005ae592..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/overview.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/preference-error-interest.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/preference-error-interest.gif Binary files differdeleted file mode 100644 index ee172dfbe..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/preference-error-interest.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/search-context.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/search-context.gif Binary files differdeleted file mode 100644 index 43aed77ec..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/search-context.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/task-context-visible.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/task-context-visible.gif Binary files differdeleted file mode 100644 index 2a3943b3e..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/task-context-visible.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/tasklist-actions.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/tasklist-actions.gif Binary files differdeleted file mode 100644 index 880813f89..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/tasklist-actions.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-archive.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-archive.gif Binary files differdeleted file mode 100644 index a060adbfd..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-archive.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-drilldown.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-drilldown.gif Binary files differdeleted file mode 100644 index 18c536aad..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-drilldown.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-go-navigation.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-go-navigation.gif Binary files differdeleted file mode 100644 index 7be278ba6..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-go-navigation.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-history.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-history.gif Binary files differdeleted file mode 100644 index 419a2d2d5..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-history.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-offline.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-offline.gif Binary files differdeleted file mode 100644 index 96c74ab4a..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-offline.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-quick-filter.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-quick-filter.gif Binary files differdeleted file mode 100644 index a0fd9f09e..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-quick-filter.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-reminders.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-reminders.gif Binary files differdeleted file mode 100644 index d1abb52ce..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/tasks-reminders.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.3/test-context.gif b/org.eclipse.mylyn.help.ui/doc/images/0.3/test-context.gif Binary files differdeleted file mode 100644 index dba15f26a..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.3/test-context.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.1/bugzilla-editor-browser.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.1/bugzilla-editor-browser.gif Binary files differdeleted file mode 100644 index a5d53afe1..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.1/bugzilla-editor-browser.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.1/bugzilla-prefs-220.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.1/bugzilla-prefs-220.gif Binary files differdeleted file mode 100644 index b7e813cca..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.1/bugzilla-prefs-220.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.1/bugzilla-prefs-open-reports.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.1/bugzilla-prefs-open-reports.gif Binary files differdeleted file mode 100644 index 10a606847..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.1/bugzilla-prefs-open-reports.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.1/context-pause.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.1/context-pause.gif Binary files differdeleted file mode 100644 index d2814d752..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.1/context-pause.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.1/tasklist-context.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.1/tasklist-context.gif Binary files differdeleted file mode 100644 index 3a5fdef72..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.1/tasklist-context.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.1/tasklist-export.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.1/tasklist-export.gif Binary files differdeleted file mode 100644 index 26a2bc189..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.1/tasklist-export.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.1/tasklist-popup.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.1/tasklist-popup.gif Binary files differdeleted file mode 100644 index 6d1181141..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.1/tasklist-popup.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.1/tasklist-weblink-editor.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.1/tasklist-weblink-editor.gif Binary files differdeleted file mode 100644 index dd903ec8e..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.1/tasklist-weblink-editor.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.1/tasklist-weblink.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.1/tasklist-weblink.gif Binary files differdeleted file mode 100644 index 7cf37988f..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.1/tasklist-weblink.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.10/bugzilla-editor.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.10/bugzilla-editor.gif Binary files differdeleted file mode 100644 index ecfd2e891..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.10/bugzilla-editor.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.10/bugzilla-versions.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.10/bugzilla-versions.gif Binary files differdeleted file mode 100644 index c211f3c04..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.10/bugzilla-versions.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.10/task-activity.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.10/task-activity.gif Binary files differdeleted file mode 100644 index 22a4b73a1..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.10/task-activity.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.10/tasklist-status.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.10/tasklist-status.gif Binary files differdeleted file mode 100644 index 88c6ab700..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.10/tasklist-status.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.2/context-change-set.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.2/context-change-set.gif Binary files differdeleted file mode 100644 index 1ee152822..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.2/context-change-set.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.2/context-commit-prefix.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.2/context-commit-prefix.gif Binary files differdeleted file mode 100644 index 4d5514d1c..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.2/context-commit-prefix.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.2/context-commit-wizard.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.2/context-commit-wizard.gif Binary files differdeleted file mode 100644 index e08ac28fc..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.2/context-commit-wizard.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.2/context-commit.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.2/context-commit.gif Binary files differdeleted file mode 100644 index a14de8c03..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.2/context-commit.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.2/problems-hierarchical.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.2/problems-hierarchical.gif Binary files differdeleted file mode 100644 index e028912b7..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.2/problems-hierarchical.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.2/tasklist-editors-manage.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.2/tasklist-editors-manage.gif Binary files differdeleted file mode 100644 index 1377eae2c..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.2/tasklist-editors-manage.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.3/bugzilla-outline.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.3/bugzilla-outline.gif Binary files differdeleted file mode 100644 index 4cb7376ff..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.3/bugzilla-outline.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.3/context-capture-pause-indicator.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.3/context-capture-pause-indicator.gif Binary files differdeleted file mode 100644 index 3397ba934..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.3/context-capture-pause-indicator.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.3/cvs-resource-history-open.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.3/cvs-resource-history-open.gif Binary files differdeleted file mode 100644 index dfdbbc283..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.3/cvs-resource-history-open.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.3/editors-auto-manage-pref.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.3/editors-auto-manage-pref.gif Binary files differdeleted file mode 100644 index 83edcb27e..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.3/editors-auto-manage-pref.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.3/editors-auto-manage.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.3/editors-auto-manage.gif Binary files differdeleted file mode 100644 index 466922c8b..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.3/editors-auto-manage.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.3/synchronize-change-sets.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.3/synchronize-change-sets.gif Binary files differdeleted file mode 100644 index bb320c141..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.3/synchronize-change-sets.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.4/changeset-addto.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.4/changeset-addto.gif Binary files differdeleted file mode 100644 index 5475c529c..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.4/changeset-addto.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.5/taskist-planner.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.5/taskist-planner.gif Binary files differdeleted file mode 100644 index 30b927a5b..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.5/taskist-planner.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.5/tasklist-drag.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.5/tasklist-drag.gif Binary files differdeleted file mode 100644 index 5d5b49f53..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.5/tasklist-drag.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.6/tasklist-pastreminder.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.6/tasklist-pastreminder.gif Binary files differdeleted file mode 100644 index fd354ff42..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.6/tasklist-pastreminder.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.7/bugzilla-encoding.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.7/bugzilla-encoding.gif Binary files differdeleted file mode 100644 index c4c8cb69c..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.7/bugzilla-encoding.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.7/tasklist-open-external.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.7/tasklist-open-external.gif Binary files differdeleted file mode 100644 index 769fe65cb..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.7/tasklist-open-external.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.7/tasklist-repositories.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.7/tasklist-repositories.gif Binary files differdeleted file mode 100644 index f47a5916b..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.7/tasklist-repositories.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.9/jira-query.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.9/jira-query.gif Binary files differdeleted file mode 100644 index 1262bb773..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.9/jira-query.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.9/jira-select-type.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.9/jira-select-type.gif Binary files differdeleted file mode 100644 index e7237f26e..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.9/jira-select-type.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.9/tasklist-import.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.9/tasklist-import.gif Binary files differdeleted file mode 100644 index 1c62eb08e..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.9/tasklist-import.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.9/tasklist-indication-active.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.9/tasklist-indication-active.gif Binary files differdeleted file mode 100644 index 99be376e1..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.9/tasklist-indication-active.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.4.9/tasklist-notification.gif b/org.eclipse.mylyn.help.ui/doc/images/0.4.9/tasklist-notification.gif Binary files differdeleted file mode 100644 index 788d9fae0..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.4.9/tasklist-notification.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.0/apply-project-explorer.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.0/apply-project-explorer.gif Binary files differdeleted file mode 100644 index 3dabe9c5b..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.0/apply-project-explorer.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.0/apply-task-markers.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.0/apply-task-markers.gif Binary files differdeleted file mode 100644 index 84a923cb7..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.0/apply-task-markers.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.0/colors-and-fonts.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.0/colors-and-fonts.gif Binary files differdeleted file mode 100644 index 36a82463a..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.0/colors-and-fonts.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.0/navigate-alt-click.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.0/navigate-alt-click.gif Binary files differdeleted file mode 100644 index 8b687aac5..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.0/navigate-alt-click.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.0/open-task-from-history.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.0/open-task-from-history.gif Binary files differdeleted file mode 100644 index d8db0972c..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.0/open-task-from-history.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.0/query-synchronization.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.0/query-synchronization.gif Binary files differdeleted file mode 100644 index 4ddaba40f..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.0/query-synchronization.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.0/resource-history-open-task.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.0/resource-history-open-task.gif Binary files differdeleted file mode 100644 index 5a2beb235..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.0/resource-history-open-task.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.0/task-editor-hyperlinks.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.0/task-editor-hyperlinks.gif Binary files differdeleted file mode 100644 index 15223483e..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.0/task-editor-hyperlinks.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.0/tasklist-archive.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.0/tasklist-archive.gif Binary files differdeleted file mode 100644 index a455fc3fc..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.0/tasklist-archive.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.0/tasklist-backup.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.0/tasklist-backup.gif Binary files differdeleted file mode 100644 index a2d110bd1..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.0/tasklist-backup.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.1/apply-tasklist.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.1/apply-tasklist.gif Binary files differdeleted file mode 100644 index df618d3b9..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.1/apply-tasklist.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.1/context-attach-popup.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.1/context-attach-popup.gif Binary files differdeleted file mode 100644 index 10e6c4be4..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.1/context-attach-popup.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.1/context-retrieve.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.1/context-retrieve.gif Binary files differdeleted file mode 100644 index 6f9015f34..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.1/context-retrieve.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.1/editors-close.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.1/editors-close.gif Binary files differdeleted file mode 100644 index 2b5ec2de0..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.1/editors-close.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.1/jira-query-custom.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.1/jira-query-custom.gif Binary files differdeleted file mode 100644 index 89bcc93fe..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.1/jira-query-custom.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.2/bugzilla-encodings-editor.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.2/bugzilla-encodings-editor.gif Binary files differdeleted file mode 100644 index 8501646c7..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.2/bugzilla-encodings-editor.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.2/bugzilla-encodings-settings.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.2/bugzilla-encodings-settings.gif Binary files differdeleted file mode 100644 index 5afa19dbb..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.2/bugzilla-encodings-settings.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.2/bugzilla-search.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.2/bugzilla-search.gif Binary files differdeleted file mode 100644 index f67baeb31..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.2/bugzilla-search.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.2/changesets-model-based.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.2/changesets-model-based.gif Binary files differdeleted file mode 100644 index 07b7474e4..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.2/changesets-model-based.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.2/jira-editor.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.2/jira-editor.gif Binary files differdeleted file mode 100644 index 441e8b8e3..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.2/jira-editor.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.2/task-repository-sync.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.2/task-repository-sync.gif Binary files differdeleted file mode 100644 index 8503d1cdb..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.2/task-repository-sync.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.2/tasklist-apply-mylar.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.2/tasklist-apply-mylar.gif Binary files differdeleted file mode 100644 index e53ffb440..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.2/tasklist-apply-mylar.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.3/bugzilla-attach.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.3/bugzilla-attach.gif Binary files differdeleted file mode 100644 index 2b0fda251..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.3/bugzilla-attach.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.3/changeset-subclipse.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.3/changeset-subclipse.gif Binary files differdeleted file mode 100644 index ea000dd4d..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.3/changeset-subclipse.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.3/repository-synch.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.3/repository-synch.gif Binary files differdeleted file mode 100644 index b244cddda..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.3/repository-synch.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.5.3/resources-exclusion.gif b/org.eclipse.mylyn.help.ui/doc/images/0.5.3/resources-exclusion.gif Binary files differdeleted file mode 100644 index f6ab8a92e..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.5.3/resources-exclusion.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.6.0/bugzilla-attachments.gif b/org.eclipse.mylyn.help.ui/doc/images/0.6.0/bugzilla-attachments.gif Binary files differdeleted file mode 100644 index f446bd65e..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.6.0/bugzilla-attachments.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.6.0/bugzilla-notifications.gif b/org.eclipse.mylyn.help.ui/doc/images/0.6.0/bugzilla-notifications.gif Binary files differdeleted file mode 100644 index 11f7d1047..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.6.0/bugzilla-notifications.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.6.0/bugzilla-search.gif b/org.eclipse.mylyn.help.ui/doc/images/0.6.0/bugzilla-search.gif Binary files differdeleted file mode 100644 index 4df31448b..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.6.0/bugzilla-search.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.6.0/jira-new.gif b/org.eclipse.mylyn.help.ui/doc/images/0.6.0/jira-new.gif Binary files differdeleted file mode 100644 index 75a0602a8..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.6.0/jira-new.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.6.0/perspective-management.gif b/org.eclipse.mylyn.help.ui/doc/images/0.6.0/perspective-management.gif Binary files differdeleted file mode 100644 index 1a08c457f..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.6.0/perspective-management.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.6.0/task-editor-menu.gif b/org.eclipse.mylyn.help.ui/doc/images/0.6.0/task-editor-menu.gif Binary files differdeleted file mode 100644 index 3548a220e..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.6.0/task-editor-menu.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.6.1/context-debug.gif b/org.eclipse.mylyn.help.ui/doc/images/0.6.1/context-debug.gif Binary files differdeleted file mode 100644 index c093226b9..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.6.1/context-debug.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.6.1/context-prefs-ui-management.gif b/org.eclipse.mylyn.help.ui/doc/images/0.6.1/context-prefs-ui-management.gif Binary files differdeleted file mode 100644 index 35516cb41..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.6.1/context-prefs-ui-management.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.6.1/jira-query.gif b/org.eclipse.mylyn.help.ui/doc/images/0.6.1/jira-query.gif Binary files differdeleted file mode 100644 index 6521086be..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.6.1/jira-query.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.6.1/tasks-create-error-log.gif b/org.eclipse.mylyn.help.ui/doc/images/0.6.1/tasks-create-error-log.gif Binary files differdeleted file mode 100644 index 5c467ffd2..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.6.1/tasks-create-error-log.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.6.1/tasks-duplicate-detection.gif b/org.eclipse.mylyn.help.ui/doc/images/0.6.1/tasks-duplicate-detection.gif Binary files differdeleted file mode 100644 index fbdc6f5c4..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.6.1/tasks-duplicate-detection.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.6.1/tasks-editor-hyperlinks.gif b/org.eclipse.mylyn.help.ui/doc/images/0.6.1/tasks-editor-hyperlinks.gif Binary files differdeleted file mode 100644 index 9ccb3e0e5..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.6.1/tasks-editor-hyperlinks.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.6.1/trac-add-repository.gif b/org.eclipse.mylyn.help.ui/doc/images/0.6.1/trac-add-repository.gif Binary files differdeleted file mode 100644 index 85087ccef..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.6.1/trac-add-repository.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.6.1/trac-editor-web.gif b/org.eclipse.mylyn.help.ui/doc/images/0.6.1/trac-editor-web.gif Binary files differdeleted file mode 100644 index 01a9b357d..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.6.1/trac-editor-web.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.6.1/trac-query.gif b/org.eclipse.mylyn.help.ui/doc/images/0.6.1/trac-query.gif Binary files differdeleted file mode 100644 index 88b5a0d20..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.6.1/trac-query.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.6.2/attachments-open.gif b/org.eclipse.mylyn.help.ui/doc/images/0.6.2/attachments-open.gif Binary files differdeleted file mode 100644 index 8c12f2b66..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.6.2/attachments-open.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.6.2/open-task-dialog.gif b/org.eclipse.mylyn.help.ui/doc/images/0.6.2/open-task-dialog.gif Binary files differdeleted file mode 100644 index fdb9497d6..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.6.2/open-task-dialog.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.6.2/package-explorer-hierarchical.gif b/org.eclipse.mylyn.help.ui/doc/images/0.6.2/package-explorer-hierarchical.gif Binary files differdeleted file mode 100644 index 31ec48eff..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.6.2/package-explorer-hierarchical.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.6.2/spell-checking.gif b/org.eclipse.mylyn.help.ui/doc/images/0.6.2/spell-checking.gif Binary files differdeleted file mode 100644 index 3e788a94d..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.6.2/spell-checking.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.6.2/tasklist-restore.gif b/org.eclipse.mylyn.help.ui/doc/images/0.6.2/tasklist-restore.gif Binary files differdeleted file mode 100644 index 65940549e..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.6.2/tasklist-restore.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.6.2/trac-editor.gif b/org.eclipse.mylyn.help.ui/doc/images/0.6.2/trac-editor.gif Binary files differdeleted file mode 100644 index b54510cdb..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.6.2/trac-editor.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.6.2/trac-search.gif b/org.eclipse.mylyn.help.ui/doc/images/0.6.2/trac-search.gif Binary files differdeleted file mode 100644 index dd048e9e5..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.6.2/trac-search.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.7.0/bugzilla-attributes.gif b/org.eclipse.mylyn.help.ui/doc/images/0.7.0/bugzilla-attributes.gif Binary files differdeleted file mode 100644 index f514f1e5c..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.7.0/bugzilla-attributes.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.7.0/task-editor-improvements.gif b/org.eclipse.mylyn.help.ui/doc/images/0.7.0/task-editor-improvements.gif Binary files differdeleted file mode 100644 index 7b84d6a8f..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.7.0/task-editor-improvements.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.7.0/task-mark-unread.gif b/org.eclipse.mylyn.help.ui/doc/images/0.7.0/task-mark-unread.gif Binary files differdeleted file mode 100644 index 781b00210..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.7.0/task-mark-unread.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/0.7.0/task-repository-association.gif b/org.eclipse.mylyn.help.ui/doc/images/0.7.0/task-repository-association.gif Binary files differdeleted file mode 100644 index 20899d93e..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/0.7.0/task-repository-association.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/dev/gray.gif b/org.eclipse.mylyn.help.ui/doc/images/dev/gray.gif Binary files differdeleted file mode 100644 index 09ebe09a3..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/dev/gray.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/dev/tbar_l.gif b/org.eclipse.mylyn.help.ui/doc/images/dev/tbar_l.gif Binary files differdeleted file mode 100644 index bc9edc1c2..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/dev/tbar_l.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/dev/tbar_r.gif b/org.eclipse.mylyn.help.ui/doc/images/dev/tbar_r.gif Binary files differdeleted file mode 100644 index d748bab4b..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/dev/tbar_r.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/faq/changeset-subclipse.gif b/org.eclipse.mylyn.help.ui/doc/images/faq/changeset-subclipse.gif Binary files differdeleted file mode 100644 index ea000dd4d..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/faq/changeset-subclipse.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/faq/changesets-model-based.gif b/org.eclipse.mylyn.help.ui/doc/images/faq/changesets-model-based.gif Binary files differdeleted file mode 100644 index 07b7474e4..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/faq/changesets-model-based.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/faq/content-assist.gif b/org.eclipse.mylyn.help.ui/doc/images/faq/content-assist.gif Binary files differdeleted file mode 100644 index 47e59b973..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/faq/content-assist.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/faq/eclipse-manage-configuration.gif b/org.eclipse.mylyn.help.ui/doc/images/faq/eclipse-manage-configuration.gif Binary files differdeleted file mode 100644 index dbafa4af2..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/faq/eclipse-manage-configuration.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/faq/filtering-declarations.gif b/org.eclipse.mylyn.help.ui/doc/images/faq/filtering-declarations.gif Binary files differdeleted file mode 100644 index 9362a231f..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/faq/filtering-declarations.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/faq/tasklist-backup.gif b/org.eclipse.mylyn.help.ui/doc/images/faq/tasklist-backup.gif Binary files differdeleted file mode 100644 index 1a6a284d2..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/faq/tasklist-backup.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/reference/book-allen-gettingThingsDone.gif b/org.eclipse.mylyn.help.ui/doc/images/reference/book-allen-gettingThingsDone.gif Binary files differdeleted file mode 100644 index bd7b3343a..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/reference/book-allen-gettingThingsDone.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/reference/book-beck-xp.gif b/org.eclipse.mylyn.help.ui/doc/images/reference/book-beck-xp.gif Binary files differdeleted file mode 100644 index a9d5c32fa..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/reference/book-beck-xp.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/reference/book-bloch-effectiveJava.gif b/org.eclipse.mylyn.help.ui/doc/images/reference/book-bloch-effectiveJava.gif Binary files differdeleted file mode 100644 index dfab14d9e..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/reference/book-bloch-effectiveJava.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/reference/book-gamma-eclipse.gif b/org.eclipse.mylyn.help.ui/doc/images/reference/book-gamma-eclipse.gif Binary files differdeleted file mode 100644 index 464197b96..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/reference/book-gamma-eclipse.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/tips/icon-task-completed.gif b/org.eclipse.mylyn.help.ui/doc/images/tips/icon-task-completed.gif Binary files differdeleted file mode 100644 index ec07a104e..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/tips/icon-task-completed.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/tips/icon-task-notes.gif b/org.eclipse.mylyn.help.ui/doc/images/tips/icon-task-notes.gif Binary files differdeleted file mode 100644 index fd01f49e0..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/tips/icon-task-notes.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/images/tips/icon-task.gif b/org.eclipse.mylyn.help.ui/doc/images/tips/icon-task.gif Binary files differdeleted file mode 100644 index 754611bbd..000000000 --- a/org.eclipse.mylyn.help.ui/doc/images/tips/icon-task.gif +++ /dev/null diff --git a/org.eclipse.mylyn.help.ui/doc/integrating.html b/org.eclipse.mylyn.help.ui/doc/integrating.html deleted file mode 100644 index b43da3ed5..000000000 --- a/org.eclipse.mylyn.help.ui/doc/integrating.html +++ /dev/null @@ -1,80 +0,0 @@ -<html> - <head> - <title> - Mylar FAQ - </title> - </head> - <body> - <center><h1>Mylar Integrator Reference</h1></center> - <p align="left">We recommend that those interested in integrating Mylar - email <a href="mailto:mylar-dev@eclipse.org"> -mylar-dev@eclipse.org</a> regarding for pointers to examples and guidance on - upcoming changes.</p> - <ul> - <li><a href="#extending-overview">Extensibility Overview</a></li> - <li><a href="#frameworks">Frameworks & APIs</a></li> - <li><a href="#repository-requirements">Task repository requirements</a></li> - </ul> - <hr width="50%"> - <h3> <br> - <a name="extending-overview">Extensibility overview</a></h3> -<p>Following the Eclipse conventions, Mylar will not make any API guarantees -until the 1.0 release. However, a driving goal of the Mylar project is to -provide a task management and focused UI framework that can be easily extended -by any Eclipse SDK and RCP based applications. The Mylar components are -loosely coupled by preliminary extension points and APIs, and these will be -stabilizing between the 0.5 and 1.0 releases. </p> - <hr> - <h3><a name="frameworks">Frameworks and APIs</a></h3> -<p>Mylar provides the following Frameworks. See the -<a href="http://www.eclipse.org/mylar/presentations.php">EclipseCon 2006 -presentation</a> for more information.</p> - <ul> - <li>Tasks (org.eclipse.mylar.tasklist): adds first class task - abstraction for tasks to Eclipse, similar to Eclipse's facilities for - resources.</li> - <li>Context (org.eclipse.mylar.core): abstractions for focusing the UI - on context. Contexts ties tasks to resources.</li> - <li>Monitor (org.eclipse.mylar.monitor): facilities for monitoring - interaction with Eclipse.</li> - </ul> - <p>In addition Mylar provides the following API:</p> - <ul> - <li>Bugzilla (org.eclipse.mylar.bugzilla.core): Java API used for - accessing Bugzilla reports on a server, not coupled to Eclipse.</li> - </ul> - <hr> - <h3><a name="repository-requirements">Task repository requirements</a></h3> -<p>Mylar can be extended to any task/bug/issue/story repository or tracker by -creating a Repository Connector that links Mylar's task management facilities -with the repository. Connection to the task repository is handled by the -connector (e.g. via HTTP for the Bugzilla Connector, via SOAP for the JIRA -Connector). The following are required to support task list integration:</p> - <ul> - <li>Tasks must be uniquely identifiable by a per-repository integer or - string handle (e.g. repository: https://bugs.eclipse.org/bugs, id - 138144)</li> - <li>Mechanism for executing a string-based query and returning task IDs - (e.g. submit query via SOAP, retrieve matching task IDs)</li> - <li>Mechanism for accessing all of the task attributes (e.g. - description, priority, comment thread)</li> - </ul> - <p>The following are optional:</p> - <ul> - <li>Notification of changes (e.g. RSS-based notification of an update - made via that web UI)</li> - <li>Retrieving a user's saved queries (e.g. searches or filters saved - via the web UI)</li> - </ul> - <p>The following additional mechanisms enable task authoring:</p> - <ul> - <li>Retrieving all of the operations possible on a task given login - credentials (e.g. ability to reassign, change priority)</li> - <li>Accessing all of the repository attributes (e.g. lists of products, - components, versions)</li> - <li>Setting any of the task's attributes (e.g. changing components, - reassigning)</li> - <li>Adding and retrieving attachments (e.g. adding screenshots)</li> - </ul> -<p> </p> -</body></html>
\ No newline at end of file diff --git a/org.eclipse.mylyn.help.ui/doc/new-0.3.html b/org.eclipse.mylyn.help.ui/doc/new-0.3.html deleted file mode 100644 index 6dc16be72..000000000 --- a/org.eclipse.mylyn.help.ui/doc/new-0.3.html +++ /dev/null @@ -1,711 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> -<html> -<head> -<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." > -<meta http-equiv="Content-Language" content="en-us"> -<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> -<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" - type="text/css"> -<title>Mylar New & Noteworthy</title> -</head> -<body> -<h1 align="center">New and Noteworthy for Mylar 0.3</h1> -<p>Covers 0.3.1 (released July 11, 2005) to 0.4.0 (released October 28, 2005). Send questions to <a href="mailto:mylar-users@eclipse.org">mylar-users@eclipse.org</a>. -Submit feature requests to -<a href="https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Mylar">Bugzilla</a>.</p> -<h2>Task context</h2> - -<table cellpadding="10" cellspacing="0" width="600" id="table62"> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>JUnit testing of task context</b></p> - </td> - <td width="70%" valign="top"> - To automatically test every - element in your task context add one of the two Mylar JUnit launch - configurations visible below. This has the effect of - automatically creating a suite with every interesting test in your - context (those that you've selected and edited), as well as every - test that has a predicted interest (those whose test methods show up - in the Active Search view).<p> - <img border="0" src="images/0.3/test-context.gif" width="555" height="194"></td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table63"> - <tr> - <td> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table60"> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>Linked mode for Active Search</b></p> - </td> - <td width="70%" valign="top"> - The Active Search view now - has a "Link with Editor" button.<p> - <img border="0" src="images/0.3/active-search-linked.gif" width="241" height="158"></td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table61"> - <tr> - <td> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table64"> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>Predicted interest of errors</b></p> - </td> - <td width="70%" valign="top"> - The predicted interest of - errors can be turned and off in the Java preferences. When on, Java elements that have errors get a predicted - interest, which means that they show up in views such as a the - package explorer. Once the errors are fixed the predicted - interest goes away. Set this on the Java preference page. - Off by default.<p> - <img border="0" src="images/0.3/preference-error-interest.gif" width="488" height="131"><p> - <img border="0" src="images/0.3/interest-error.gif" width="233" height="189"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table55"> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>Reduced context size</b></p> - </td> - <td width="70%" valign="top"> - When a context is saved it - now gets collapsed to remove redundancy in how interaction events - contribute to interest. This results in an order of magnitude file - size reduction, and much faster activation/deactivation. </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table56"> - <tr> - <td> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table42"> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>Open Type integration</b></p> - </td> - <td width="70%" valign="top"> - If a task context is active, the Open Type dialog will first types - that are in the task context, and then place those matches on top of - the list as you type. When no task is active the Open Type - dialog reverts to its standard behavior of showing types that you - have selected from within the dialog.<p> - <img border="0" src="images/0.3/open-type.gif" width="487" height="259"></td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table51"> - <tr> - <td> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table45"> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>Qualified names in Active Search</b></p> - </td> - <td width="70%" valign="top"> - A toolbar button controls whether element names are qualified in the - Active Search view.<p> - <img border="0" src="images/0.3/active-search-qualify.gif" width="236" height="125"></td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table52"> - <tr> - <td> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table48"> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>Increased laziness</b></p> - </td> - <td width="70%" valign="top"> - When no task is active, Mylar is inactive and Eclipse should behave - as if Mylar were not installed. Also, when the Active Search - view is closed, no background searches will be run.</td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table50"> - <tr> - <td> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table41"> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>Drag-and-drop Landmark creation</b></p> - </td> - <td width="70%" valign="top"> - Elements such as methods and - types can be drag-and-dropped into the Active Search and Active - Hierarchy views. This will cause them to become landmarks, and - to populate those views with related elements. To get rid of - an element from an active view it needs to be made less interesting - than a landmark, which can be done by right-clicking it in any view - and selecting the "Make Less Interesting" action, or by hitting - Ctrl+Alt+Shift+Down Arrow when editing that element.<p> - <img border="0" src="images/0.3/active-search-manipulation.gif" width="509" height="219"></td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table49"> - <tr> - <td> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table26"> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>Active Search</b></p> - </td> - <td width="70%" valign="top"> - As you work and elements become landmarks - (bold decoration), Active Search eagerly finds related elements. - To force an element to populate the Active Search view manually make - it a landmark by right-clicking or hitting Ctrl+Alt+Shift+Up Arrow. - Use the pull-downs on the toolbar to alter the degree-of-separation - scope of the search. Note that elements with predicted - interest are gray.<p> - <img border="0" src="images/0.3/active-search.gif" width="340" height="309"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table27"> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>Active Hierarchy</b></p> - </td> - <td width="70%" valign="top"> - Similar to Active Search, this view actively - finds and presents the type hierarchy of the current set of - landmarks.<p> - <img border="0" src="images/0.3/active-hierarchy.gif" width="364" height="145"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table29"> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>Filter declarations in Package Explorer </b></p> - </td> - <td width="70%" valign="top"> - If you don't like Mylar's constant showing of Java members in the - Package Explorer, select the drop-down menu, then "Filters..." and - enable the "Mylar Java Declarations Filter". It will then - stick in the menu in case you want to toggle between modes.<p> - <img border="0" src="images/0.3/filtering-declarations.gif" width="441" height="211"></p> - </td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> - </table> - -<table cellpadding="10" cellspacing="0" width="600" id="table23"> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>Interest filter exclusions</b></p> - </td> - <td width="70%" valign="top"> - Resources that are always - considered interesting can be configured to always show when the - interest filter is on, via the root Mylar preference page. - Note that the parent of the resource, e.g. the project or folder, - needs to be interesting for it's children to show. - <p> - <img border="0" src="images/0.3/filtering-exclusion.gif" width="420" height="240"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table16"> - <tr> - <td align="left" valign="top" width="30%"> - <p align="right"><b>Context highlighters</b></p> - </td> - <td valign="top" width="70%"> - You can associate a task with a highlighter. This can be useful if - you are using Mylar without the filtering support. It also - allows you to distinguish between task contexts if you have multiple - tasks active. <p><img - src="images/0.3/highlight.gif"></p> - - </td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>Ant editing</b></p> - </td> - <td width="70%" valign="top"> - Interest-based filtering is now supported in the Ant editor's - Outline view by toggling the glasses.<p> - <img border="0" src="images/0.3/filtering-ant.gif" width="464" height="113"></p> - </td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table8"> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>Interest-based content assist</b></p> - </td> - <td width="70%" valign="top"> - The top of the content assist menu will put the items that are in - your task context on top of the list, to enable quick selection via - arrow keys. Once you start typing the menu will work as usual. Note - that the Mylar Java Editor needs to be set as default for ".java" - files (this is the only new functionality that comes from the Mylar - Java editor).<p> - <img border="0" src="images/0.3/interest-content-assist.gif" width="432" height="131"></p> - </td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table40"> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>Navigator interest filtering</b></p> - </td> - <td width="70%" valign="top"> - Interest filtering works in the navigator, similarly to the Package - Explorer. To temporarily un filter a node Alt+click it<p> - <img border="0" src="images/0.3/filtering-navigator.gif" width="353" height="195"></p> - </td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table9"> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>Toggle auto folding</b></p> - </td> - <td width="70%" valign="top"> - Pressing the editor toolbar button with the Mylar glasses on it will - enable/disable Mylar's automatic folding. This can be useful - when needing to browse through the code, or copy/paste code around - (since Eclipse's folding support can cause odd expansions when - copying folded regions, - <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=104648">bug - 104648</a>). The - keyboard shortcut is Ctrl+Alt+Shift+F.<p> - <img border="0" src="images/0.3/folding-toggle.gif" width="276" height="127"></p> - </td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table4"> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>Show all filtered children</b></p> - </td> - <td width="70%" valign="top"> - When you are using filtering in a Mylar view you have the option of - temporarily showing all children of a filtered node by Alt+clicking - a node that is not currently selected. For example, you can - Alt+click a source folder, keep the Alt+key down, and continue - drilling down until you find a method of interest. - To navigate using the - keyboard alone use the Right Arrow key instead of Alt+clicking, and - the Down Arrow key to select elements. <p><img src="images/0.3/alt-click.gif" alt="Alt Click" - title="New Java Project Wizard"></p> - </td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> - </table> - -<table cellpadding="10" cellspacing="0" width="600" id="table5"> - <tr> - <td align="left" valign="top" width="30%"> - <p align="right"><b>Search within task context</b></p> - </td> - <td valign="top" width="70%">The automatically updated Mylar Task - Context working set can be searched as any other working set, either - via the popup menus or using the search dialog. For example, - to find all System.out/err calls before checking in, search for - "System." within the task context. To quickly search all references - click Alt+Shift+G.<p> - <img border="0" src="images/0.3/search-context.gif" width="470" height="133"></p> - - </td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table6"> - <tr> - <td align="left" valign="top" width="30%"> - <p align="right"><b>Directly manipulate interest</b></p> - </td> - <td valign="top" width="70%">Directly manually manipulate the - interest level of one or more elements by right clicking them and using the two - Mylar actions in the popup menu. Keyboard shortcuts for these - are Ctrl+Alt+Shift+Up Arrow for Make Landmark, and - Ctrl+Alt+Shift+Down Arrow for Make Less Interesting. This now supports disjoint - selections.<p> - <img border="0" src="images/0.3/interest-manipulate.gif" width="262" height="65"></p> - - </td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table7"> - <tr> - <td align="left" valign="top" width="30%"> - <p align="right"><b>Interest filtering for the Java Browsing - perspective</b></p> - </td> - <td valign="top" width="70%">Interest filtering can be toggled for - the Packages, Types, and Members views simultaneously by clicking - the leftmost toolbar button visible below.<p> - <img border="0" src="images/0.3/interest-java-browsing.gif" width="404" height="100"></p> - - </td> - </tr> - </table> - -<h3> </h3> -<h2>Task List</h2> - -<table cellpadding="10" cellspacing="0" width="600" id="table46"> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>Task history</b></p> - </td> - <td width="70%" valign="top"> - The task list now has a - back/forward navigation history with drop-downs of previously - activated tasks.<p> - <img border="0" src="images/0.3/tasks-history.gif" width="495" height="169"></td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table47"> - <tr> - <td> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table31"> - <tr> - <td align="left" valign="top" width="30%"> - <p align="right"><b>Synchronization state</b></p> - </td> - <td valign="top" width="70%"> - If a bug report has information on it that has not been viewed, such - as new comments, the blue "incoming" overlay is displayed. If - a bug has changes on it that have been saved but have not been - committed to Bugzilla, the gray "outgoing" overlay is displayed. - A red overlay appears if there is a conflict.<p> - <img border="0" src="images/0.3/bugzilla-synch.gif" width="323" height="186"></p> - - </td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table30"> - <tr> - <td align="left" valign="top" width="30%"> - <p align="right"><b>Offline mode</b></p> - </td> - <td valign="top" width="70%"> - You can now explicitly state - whether you want to work with cached copies of Bugzilla reports and - avoid refresh with the server. In offline mode the cached bug - copy is always used. In online mode the Bugzilla server is - always checked for the latest report.<p> - <img border="0" src="images/0.3/tasks-offline.gif" width="326" height="207"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table32"> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>Task history navigation</b></p> - </td> - <td width="70%" valign="top"> - Navigate between previously - activate tasks using the Task List view's pull down menu (upper - right-hand corner of the toolbar).<p> - <img border="0" src="images/0.3/tasks-history.gif"></p> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table33"> - <tr> - <td> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table17"> - <colgroup> - <col width="20%" valign="top" align="right"> - <col width="80%" valign="top" align="left"> - </colgroup> - <tbody> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>Focus on a single task category</b></p> - </td> - <td width="70%" valign="top"> - To see only the tasks for a single category - select the "Go Into Category" action from the context menu. To - go back to viewing all tasks and categories under the root use the - "Go Up To Root" action in the Task List's toolbar pull down menu - (visible above).<p> - <img border="0" src="images/0.3/tasks-go-navigation.gif" width="284" height="74"></p> - </td> - </tr> - </tbody> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table13"> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>Quick filter</b></p> - </td> - <td width="70%" valign="top"> - To filter task by name or - regexp type the filter text into the field and all matched tasks - will display. Note that this will temporarily suppress all - other filters. To clear the query press the "x" button to the - right of the text field.<p> - <img border="0" src="images/0.3/tasks-quick-filter.gif" width="315" height="173"></p> - </td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table14"> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>Reminders</b></p> - </td> - <td width="70%" valign="top"> - Set a reminder for a task when creating it, or by selecting the - "Summary" tab of the Task Editor. When you start using Eclipse - on the given day the reminders will come up.<p> - <img border="0" src="images/0.3/tasks-reminders.gif" width="452" height="154"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table10"> - <colgroup> - <col width="20%" valign="top" align="right"> - <col width="80%" valign="top" align="left"> - </colgroup> - <tbody> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>Open reports in web browser</b></p> - </td> - <td width="70%" valign="top"> - Bug reports can be opened with either the Bug Editor or the Internal - Web Browser. This can be set as a Task List preferences. - When the Bug Editor is open you can click the hyperlink to show the - report in the browser (e.g. to use a feature not yet available in - the editor, such as voting). <p> - <img border="0" src="images/0.3/bugzilla-internal-browser.gif" width="344" height="157"></p> - </td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> - </tbody> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table57"> - <colgroup> - <col width="20%" valign="top" align="right"> - <col width="80%" valign="top" align="left"> - </colgroup> - <tbody> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>Move tasks directory</b></p> - </td> - <td width="70%" valign="top"> - Bug reports can be opened with either the Bug Editor or the Internal - Web Browser. This can be set as a Task List preferences. - When the Bug Editor is open you can click the hyperlink to show the - report in the browser (e.g. to use a feature not yet available in - the editor, such as voting). - </td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> - </tbody> -</table> - -<h3>Bugzilla Client</h3> - -<table cellpadding="10" cellspacing="0" width="600" id="table36"> - <tr> - <td width="30%" valign="top" align="left"> - <p align="right"><b>Support Ctrl+click in Java Editor to navigate to - bug</b></p> - </td> - <td width="70%" valign="top"> - Ctrl+click on a comment that - contains one of the following forms will open the bug with the given - id: bug# 123, bug 123, - Bug #123, - Bug#123. (Note that all of these are - case insensitive and can be followed by a colon or whitespace).<p> - <img border="0" src="images/0.3/bugzilla-hyperlink.gif" width="381" height="102"></p> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table37"> - <tr> - <td> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="600" id="table38"> - <tr> - <td align="left" valign="top" width="30%"> - <p align="right"><b>Custom queries</b></p> - </td> - <td valign="top" width="70%"> - To create a custom Bugzilla - query paste the query URL into the New Bugzilla Query dialog. This - enables support of queries that can not be configured via the - dialog, and as such some query hits may not open or format properly.<p> - <img border="0" src="images/0.3/bugzilla-query-custom.gif" width="483" height="106"></p> - - </td> - </tr> - </table> - -</body> -</html> diff --git a/org.eclipse.mylyn.help.ui/doc/new-0.4.html b/org.eclipse.mylyn.help.ui/doc/new-0.4.html deleted file mode 100644 index b150304f5..000000000 --- a/org.eclipse.mylyn.help.ui/doc/new-0.4.html +++ /dev/null @@ -1,1053 +0,0 @@ -<html> -<head> - <title>Mylar New & Noteworthy</title> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> - <meta name="author" content="Mik Kersten" /> - <meta name="keywords" content="Mylar, Eclipse" /> - <link rel="stylesheet" type="text/css" href="http://eclipse.org/eclipse.org-common/themes/Phoenix/css/visual.css" media="screen" /> -</head> -<body> -<div align=center><h1>New & Noteworthy for Mylar 0.4.1 - 0.5.0</h1></div> -<ul> - <li>To avoid potentially confusing the update manager use "Search for new -features.." when installing.</li> - <li><b>Bugzilla Connector users</b>: after updating, if you get a "Could not log in" error when -synchronizing a query and your credentials are correct open it, verify that it is associated to the correct -repository, and click OK (some older task lists did not properly associate -queries with repositories). </li> - <li><b>JIRA Connector users</b>: JIRA Core Services 0.8.0 (from Tigris.org) will -get installed with this release if it was not downloaded with a previous one.</li> - <li><b>Eclipse 3.2 users</b>: this release supports Eclipse 3.2M6 (not M5). The custom Mylar - Java editor is gone, so before restarting - deactivate the current task or close all active editors, and run the New -> - Mylar -> Preference Configuration wizard if it does not pop up - automatically. If auto folding doesn't work reset the folding provider (see - <a href="#active-folding">Active Folding</a>).<br> - </li> -</ul> - -<table border="1" style="border-collapse: collapse" width="100%" id="table128" cellpadding="4" bordercolor="#FFFFFF"> - <tr> - <td bgcolor="#595791" width="7%" align="center"><b> - <font color="#FFFFFF" size="1">Release</font></b></td> - <td bgcolor="#595791" width="5%" align="center"><b> - <font color="#FFFFFF" size="1">Resolved - </font></b></td> - <td bgcolor="#595791" width="*" align="center"><b> - <font color="#FFFFFF" size="1">Community Contributions</font></b></td> - </tr> - <tr> - <td bgcolor="#FAF7FB"><font size="1">0.5.0<br> - <i>April 07</i></font></td> - <td bgcolor="#FAF7FB" align="center"> - <a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Mylar&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=2006-03-18&chfieldto=2006-04-08&chfield=resolution&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0="> - <font size="1">62</font><font size="1"> <br> - reports</a></font></td> - <td bgcolor="#FAF7FB"><font size="1">Robert Elves contributed the bug - editor improvements and numerous other patches, and has now been voted - in as a committer. Brock Janiczak contributed patches to JIRA and - and task list support. Brian de Alwis provided a patch to the - Monitor to make obfuscation a preference.</font></td> - </tr> - <tr> - <td bgcolor="#FAF7FB"><font size="1">0.4.10<br> - <i>March 17</i></font></td> - <td bgcolor="#FAF7FB" align="center"> - <a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Mylar&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=2006-02-24&chfieldto=2006-03-18&chfield=resolution&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0="> - <font size="1">80 - <br> - reports</a></font></td> - <td bgcolor="#FAF7FB"><font size="1">Robert Elves contributed the Task - Activity view, ported the Bugzilla editor to Forms, and resolved - numerous bugs. Ian Whalley provided patches for Bugzilla and IBM JDK - compliance. Eugene Kuleshov provided patches for improved task - comparison and repository protocols. Wang Bin provided additional source - code scrutiny and optimizations. Peik Aschan provided a useful assertion - test case. </font></td> - </tr> - <tr> - <td bgcolor="#FAF7FB"><font size="1">0.4.9<br> - <i>Feb. 23</i></font></td> - <td bgcolor="#FAF7FB" align="center"> - <font size="1"> - <a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Mylar&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=2006-01-31&chfieldto=2006-02-23&chfield=resolution&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0="> - 50<br> - reports</a></font></td> - <td bgcolor="#FAF7FB"><font size="1">Robert Elves provided patches that - resolved 17 reports. The JIRA support was made possible by Brock - Janiczak's help and his JIRA Core Services feature. Wesley Coelho - provided initial integration patches and 10 very valuable JIRA test - cases, and Eugene Kuleshov helped with debugging. Wang Bin provided - patches for JUnit integration and code quality. Tom Eicher and Daniel - Megert made tighter editor integration possible with new SDK content - assist and folding APIs.</font></td> - </tr> - <tr> - <td bgcolor="#FAF7FB"><font size="1">0.4.8 - <br> - <i>Jan. 30</i></font></td> - <td bgcolor="#FAF7FB" align="center"> - <font size="1"> - <a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Mylar&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=2006-01-15&chfieldto=2006-01-31&chfield=resolution&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0="> - 52<br> - reports</a></font></td> - <td bgcolor="#FAF7FB"><font size="1">Robert Elves has provided numerous - fixes to the Task List and Bugzilla Client. Brock Janiczak - provided a patch that improved the multi-repository aware wizard, and - with Eugene Kuleshov provided valuable feedback on the UI and - architecture for task repository support.</font></td> - </tr> - <tr> - <td bgcolor="#FAF7FB"><font size="1">0.4.7 - <br> - <i>Jan.16 '06</i></font></td> - <td bgcolor="#FAF7FB" align="center"> - <font size="1"> - <a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Mylar&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=2005-12-17&chfieldto=2006-01-14&chfield=resolution&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0="> - 36<br> - reports</a></font></td> - <td bgcolor="#FAF7FB"><font size="1">Brock Janiczak fixed lazy loading - of image registry, provided 3.2M4 patches, and a highlighter fix. Robert - Elves improved external browser integration and the task editor. David - Bari and Tomasz Smietanka set up bugzilla servers with alternate - encodings. Eugene Kuleshov provided an idea for avoiding inducing - interest on resources upon check-out.</font></td> - </tr> - <tr> - <td bgcolor="#FAF7FB"><font size="1">0.4.6 - <br> - <i>Dec. 16</i></font></td> - <td bgcolor="#FAF7FB" align="center"><font size="1"><a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Mylar&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=2005-12-12&chfieldto=2005-12-16&chfield=resolution&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0=">16 - <br> - reports</a></font></td> - <td bgcolor="#FAF7FB"><font size="1">Brock Janiczak contributed SAX - based context externalization to replace the considerably slower DOM - based version.</font></td> - </tr> - <tr> - <td bgcolor="#FAF7FB"><font size="1">0.4.5<br> - <i>Dec. 12</i></font></td> - <td bgcolor="#FAF7FB" align="center"> - <font size="1"> - <a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Mylar&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=2005-12-04&chfieldto=2005-12-11&chfield=resolution&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0="> - 24<br> - reports</a></font></td> - <td bgcolor="#FAF7FB"><font size="1">Brock Janiczak contributed an - improvement to the Task List extension point schema and patches for - compatibility with the upcoming Eclipse 3.2M4 release. Wes Coelho - improved the date chooser dialog.</font></td> - </tr> - <tr> - <td bgcolor="#FAF7FB"><font size="1">0.4.4<br> - <i>Dec. 2</i></font></td> - <td bgcolor="#FAF7FB" align="center"> - <font size="1"> - <a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Mylar&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=2005-11-22&chfieldto=2005-12-03&chfield=resolution&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0="> - 39<br> - reports</a></font></td> - <td bgcolor="#FAF7FB"><font size="1">Wesley Coelho added support for - in-progress tasks in the Task Planner and background saves of the task - list. Igor Fedorenko provided a patch for an NPE in the java problem - resolution, and Ian Bull provided a patch to the for setting platform - and hardware defaults in the bug wizard.</font></td> - </tr> - <tr> - <td bgcolor="#FAF7FB"><font size="1">0.4.3<br> - <i>Nov. 22</i></font></td> - <td bgcolor="#FAF7FB" align="center"> - <font size="1"> - <a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Mylar&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=2005-11-14&chfieldto=2005-11-21&chfield=resolution&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0="> - 32<br> - reports</a></font></td> - <td bgcolor="#FAF7FB"><font size="1">Leah Findlater continued to improve - the extensibility of the Mylar Monitor for her upcoming study of WTP - usage. </font></td> - </tr> - <tr> - <td bgcolor="#FAF7FB"><font size="1">0.4.2<br> - <i>Nov. 14</i></font></td> - <td bgcolor="#FAF7FB" align="center"> - <font size="1"> - <a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Mylar&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=2005-11-06&chfieldto=2005-11-15&chfield=resolution&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0="> - 31<br> - reports</a></font></td> - <td bgcolor="#FAF7FB"><font size="1">Leah Findlater helped make the - Monitor more extensible to other user studies.</font></td> - </tr> - <tr> - <td bgcolor="#FAF7FB"><font size="1">0.4.1<br> - <i>Nov. 4</i></font></td> - <td bgcolor="#FAF7FB" align="center"> - <font size="1"> - <a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Mylar&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=2005-10-31&chfieldto=2005-11-05&chfield=resolution&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0="> - 28<br> - reports</a></font></td> - <td bgcolor="#FAF7FB"><font size="1">Wesley Coelho provided a history - navigation patch and other - improvements to the Task List. </font></td> - </tr> -</table> - -<hr> - -<h2>Task Context</h2> - -<table cellpadding="10" cellspacing="0" id="table177"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Apply Mylar to Project Explorer<br> - (3.2 only)</b></p> - </td> - <td valign="top" width="70%"> - Mylar can be applied to the Eclipse 3.2 Project Explorer view.<p> - <img border="0" src="images/0.5.0/apply-project-explorer.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table178"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Apply Mylar to Tasks Marker view</b></p> - </td> - <td valign="top" width="70%"> - Mylar can now be applied to the 'Tasks' Markers view. This can - be useful for looking over the TODO and other tasks in the active - task context before committing.<p> - <img border="0" src="images/0.5.0/apply-task-markers.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table171"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Alt+Click Navigation Improvements</b></p> - </td> - <td valign="top" width="70%"> - When a view is in filtered mode, Alt+Click a tree node to unfilter - all of its children. This can be repeated until the desired - element is found. You can also Alt+Click the white space in - Package Explorer to unfilter all of the projects. If Alt is - let go, the view will spring back to showing only the task context. - Note that on some Linux configurations Alt must be pressed along - with another modifier key.<p> - <img border="0" src="images/0.5.0/navigate-alt-click.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table192"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Editor Management</b></p> - </td> - <td valign="top" width="70%"> - If the Manage Editors with Context option is selected open editors - will correspond to the active task context:<br> - - On task activation the editors of the most interesting elements - will be automatically opened, and populate the Ctrl+E list. - Set the number of editors to open on the Mylar preference page.<br> - - Closing an editor will mark the corresponding file and all - children uninteresting (Note that "Mark Less Interesting" now - recurses to children). So if you navigate to something - uninteresting simply hit Ctrl+F4.<br> - - Marking a file less interesting will cause it to close.<p>It is - recommended that you either turn off the "Close Editors - Automatically" workbench setting, or set a high number to leave - open.</p> - <p> - <img border="0" src="images/0.4.3/editors-auto-manage.gif" width="318" height="150"><p> - <img border="0" src="images/0.4.3/editors-auto-manage-pref.gif" width="400" height="43"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" width="601" id="table187"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>No more custom Java Editor <br> - (3.2 only)</b></p> - </td> - <td valign="top" width="70%"> - The custom Mylar Java editor is gone, and the automatic folding and - content assist integration will now work with any Java editor, e.g. - AJDT's, thanks to new Eclipse APIs.</td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table188"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b><a name="active-folding">Active Folding Improvements </a> - <br> - <a name="active-folding">(3.2 only)</a></b></p> - </td> - <td valign="top" width="70%"> - Active folding has been improved, no longer requires the Mylar Java - Folding provider, and should work with any Eclipse 3.2-based Java - folding provider in addition to the default one. If you were - using Mylar's active folding restore the default provider via - Preferences -> Java -> Editor -> Folding -> Restore Defaults (first - deactivate the active context to close all open Java editors).</td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table194"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Support for Hierarchical Problems Layout<br> - (3.2 only) </b></p> - </td> - <td valign="top" width="70%"> - The Mylar interest filter can now be applied to the Eclipse 3.2 - Hierarchical Layout of the Problems view. The Flat Layout is - recommended when Mylar is applied, since it helps focus on the - markers of interest. - <p> - <img border="0" src="images/0.4.2/problems-hierarchical.gif" width="451" height="189"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table191"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Context Capture Pause Indication</b></p> - </td> - <td valign="top" width="70%"> - Pausing context capture is now indicated on the status bar. - Note that other notifications can occlude this one, so if you notice - newly selected elements not populating the context check the state - of the toggle button on the Task List.<p> - <img border="0" src="images/0.4.3/context-capture-pause-indicator.gif" width="305" height="126"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table193"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Task context indication</b></p> - </td> - <td valign="top" width="70%"> - If a task is inactive, but has a context associated with it, the - Activate widget appears lightly filled (i.e. as bug 111722 below). <p> - <img border="0" src="images/0.4.1/tasklist-context.gif" width="297" height="191"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<h3> </h3> -<h3>Task List</h3> - -<table cellpadding="10" cellspacing="0" id="table168"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Automatic task list backup</b></p> - </td> - <td valign="top" width="70%"> - Using <i>Preferences -> Mylar -> Task List</i> the task list and contexts are now automatically backed up to - the specified location. - Backup has the same effect as the Task Data export, and will create - a zip file at the desired location. The zip files can later be - imported used using File -> Import -> Mylar Task Data.<p> - <img border="0" src="images/0.5.0/tasklist-backup.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table169"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Background query synchronization</b></p> - </td> - <td valign="top" width="70%"> - Using <i>Preferences -> Mylar -> Task Repositories </i>queries and - repository tasks can be synchronized given the specified schedule.<p> - <img border="0" src="images/0.5.0/query-synchronization.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table167"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Color and Font settings</b></p> - </td> - <td valign="top" width="70%"> - Task list and task editor colors and fonts can be configured via the - global preference settings.<p> - <img border="0" src="images/0.5.0/colors-and-fonts.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table195"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Archive category</b></p> - </td> - <td valign="top" width="70%"> - The Archive category includes all tasks that have been worked on. - It is filtered by default, but shows up when the "Find:" view filter - is used. Filtering can be toggled using the view menu.<p> - <img border="0" src="images/0.5.0/tasklist-archive.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table174"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Task priorities and status indication</b></p> - </td> - <td valign="top" width="70%"> - NOTE: you may need to resize your columns after - updating.<p>Task priorities are now icon based instead of using the Bugzilla - P1..5 scheme, and the default priority has no icon. More task - status is indicated</p> - <ul> - <li>Notes are overlaid on top (see "long: ui issues" below)</li> - <li>Severity is overlaid in the bottom right (for Bugzilla green - triangle means enhancement, red circle means blocker/major, for - JIRA additional task types appear).</li> - <li>For Bugzilla incoming/outgoing state is in a separate - column.</li> - <li>Tooltips indicate the repository connector branding icon.</li> - </ul> - <p> - <img border="0" src="http://eclipse.org/mylar/doc/images/0.4.10/tasklist-status.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table175"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Task Activity view<br> - (Experimental)</b></p> - </td> - <td valign="top" width="70%"> - The experimental Task Activity view and will replaces the Task - Planner wizard for viewing task activity, and appears in the new - Planning perspective. This view shows the task activity context, - which will drive the Apply Mylar to Task List action coming in 0.5. - Note that elapsed times are still approximate, and will be more - configurable for 0.5. Tasks can be dragged to the current, next, or - future week to set reminders for those weeks.<p> - <img border="0" src="http://eclipse.org/mylar/doc/images/0.4.10/task-activity.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table153"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>JIRA Connector</b></p> - </td> - <td valign="top" width="70%"> - JIRA tasks and queries are now supported in the task list. Add - a new JIRA repository via the Task Repositories view, then - right-click in the task list to Add a New Repository Query, and - select from one of your existing JIRA filters. Note that on - very large repositories (e.g. Codehaus the very first query that's - run on a newly added repository will be slow). - <p>Refer to the <a href="http://www.eclipse.org/mylar/start.php"> - Getting Started</a> page for an integration overview. Also note that the task list now provides icon overlays indicating - repository task type/severity, and text overlays for queries indicating the repository. - </p> - <p> - <img border="0" src="http://eclipse.org/mylar/doc/images/0.4.9/jira-select-type.gif"></p> - <p> - <img border="0" src="http://eclipse.org/mylar/doc/images/0.4.9/jira-query.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table151"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Task data import</b></p> - </td> - <td valign="top" width="70%"> - Task date can now be imported from an existing .mylar directory, or - from a backup zip file created by the Mylar export wizard.<p> - <img border="0" src="http://eclipse.org/mylar/doc/images/0.4.9/tasklist-import.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table152"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Active task indication<br> - (3.2 only)</b></p> - </td> - <td valign="top" width="70%"> - The currently active task is indicated with a hyperlink below the - toolbar that can be used to bring the task into focus.<p> - <img border="0" src="http://eclipse.org/mylar/doc/images/0.4.9/tasklist-indication-active.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table150"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Notification popups<br> - (3.2 only)</b></p> - </td> - <td valign="top" width="70%"> - Task reminders no longer appear in a separate dialog windows. - When a task becomes overdue, a notification 'toaster' pops up that - can be used to bring the task up. The notification will not - come up again, since the overdue task will be colored red and always - visible in the task list until the reminder is reset.<p> - <img border="0" src="http://eclipse.org/mylar/doc/images/0.4.9/tasklist-notification.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table126"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Support for Multiple Repositories</b></p> - </td> - <td valign="top" width="70%"> - Preliminary support for multiple repositories is included, so more - than one Bugzilla repository can be used. The repositories - view is visible by default in the Team Synchronizing and CVS - Repositories perspectives.<p> - <img border="0" src="images/0.4.7/tasklist-repositories.gif" width="391" height="121"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table124"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>External Browser Integration</b></p> - </td> - <td valign="top" width="70%"> - Tasks can be created by drag-and-dropping a URL from a link or from - the Address bar onto the task list, causing the web link and - description to be set automatically. In Mozilla, simply drag - the URL. In Internet Explorer you must have Ctrl pressed in - order for Eclipse to recognize the drop.<p> - Tasks with web links and bug reports can also be opened using the - default external browser.</p> - <p> - <img border="0" src="images/0.4.7/tasklist-open-external.gif" width="347" height="60"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table122"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Overdue Tasks</b></p> - </td> - <td valign="top" width="70%"> - If you have been using task reminders you may notice tasks - previously filtered showing in red. Tasks that are not - completed and are past their reminder date will no longer get - filtered away. The reminder date of a task a task or bug - report can be cleared using the Task Info editor tab. - If a category has overdue - tasks in it that category will be colored red.<p> - <img border="0" src="images/0.4.6/tasklist-pastreminder.gif" width="589" height="234"><br> - </td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table123"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Multiple Selections</b></p> - </td> - <td valign="top" width="70%"> - Multiple selections, made by Ctrl and Shift clicking, are now - supported. You can now drag-and-drop multiple tasks, mark - completed, delete, and synchronize multiple reports. If you - are using Eclipse 3.1, note that elements will not be selected - automatically when your right-click them to bring up the popup menu, - so you need to first select the element and then bring up the popup.</td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table120"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Improved Task Manipulation</b></p> - </td> - <td valign="top" width="70%"> - Dragging and dropping items to categories moves them, and items can - be dragged into the root. Also, if the Mylar Tasks view is in - fast view mode the active task will be indicated when you mouse over - the icon and on the view description bar.<p> <img border="0" src="images/0.4.5/tasklist-drag.gif" width="303" height="172"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table121"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Task Planner</b></p> - </td> - <td valign="top" width="70%"> - The Task Planner has been available for a while is still - experimental, but the UI has improved. Invoke it via File -> - New -> Other -> Mylar Task Planner, specify the number of days, and - you will see a report of your past activity. You can drag - tasks from the task list into the plan (e.g. from a Bugzilla query), - and set their reminders and estimates. All tasks in the plan - can be automatically added to a category.<p> - <img border="0" src="images/0.4.5/taskist-planner.gif" width="603" height="407"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table114"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Improved Task List actions and shortcuts</b></p> - </td> - <td valign="top" width="70%"> - The Task List popup menu has been improved to be more context - sensitive and to always create items in the category that is - currently in focus. Tooltip behavior has been improved. - Common actions are now keyboard shortcuts:<br> - - New Task: ins<br> - - Delete: del<br> - - Rename: F2<br> - - Copy Description: Ctrl+C<p> - <img border="0" src="images/0.4.1/tasklist-popup.gif" width="231" height="297"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table115"> - <tr> - <td width="15%" valign="top" align="left"> - <p align="right"><b>Links to web reports</b></p> - </td> - <td width="70%" valign="top"> - Tasks can be linked to web pages. For example, if you want a - task to correspond to a Wiki page or to a bug report copy the URL of - the report, click the New Task button on the Task List, and the URL - will automatically be inserted in the Web Link field. If you - click Get Description the title of the page will be inserted into - the Description field. The task will appear with a Web icon - decorator, and will automatically bring up a Task Editor page that - loads the web link when opened. - <p> - <img border="0" src="images/0.4.1/tasklist-weblink.gif" width="528" height="155"></p> - <p> - <img border="0" src="images/0.4.1/tasklist-weblink-editor.gif" width="585" height="195"></td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table116"> - <tr> - <td> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table117"> - <tr> - <td width="15%" valign="top" align="left"> - <p align="right"><b>Task context data export</b></p> - </td> - <td width="70%" valign="top"> - The Mylar Task List and related data can be exported, e.g. for - backup purposes. You can now export to an archive file.<p> - <img border="0" src="images/0.4.1/tasklist-export.gif" width="555" height="343"></td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table118"> - <tr> - <td> - <hr> - </td> - </tr> -</table> - -<h3> </h3> -<h3>Team Integration</h3> - -<table cellpadding="10" cellspacing="0" id="table196"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Task Context Change Sets</b></p> - </td> - <td valign="top" width="70%"> - The active task now corresponds to a Change Set that's managed by - Mylar. All resources in the task's context automatically get - included in this change set, making it possible to synchronize and - commit only those resources. Resources modified that are not - part of the Task Context will appear outside of the Change Set in - the Synchronize view. Note that as with other Change Sets you - need to set the Synchronize view into either Incoming or Outgoing - mode and toggle the "Show Change Sets" button.<p> - <img border="0" src="images/0.4.2/context-change-set.gif" width="498" height="192"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table197"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Context Change Set Persistence and Manipulation</b></p> - </td> - <td valign="top" width="70%"> - The active task context change sets now persist, so that if there - are any uncommitted resources in the change set it will not - disappear when the task is deactivated, and multiple change sets can - be present. While the context change sets are affected by - interest manipulations (i.e. marking a file uninteresting will - remove it from the change set), they do not 'see' the interest decay - in order to indefinitely retain any resources modified as part of - that task. If resources are changed outside of the context - (e.g. by applying a patch) they can be added to the task via the Add - To menu (visible below). If the task context they are added to - is active those resources will be also come interesting.<p> - <img border="0" src="images/0.4.4/changeset-addto.gif" width="592" height="271"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table198"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Active Change Set Improvements </b></p> - </td> - <td valign="top" width="70%"> - Mylar's Active Change sets now capture now include resources - that are edited indirectly, e.g. resources modified as a result of - refactorings and applying patches.<p>Note that if on Eclipse 3.2M6 - your Synchronize view gets stuck now showing Show Change Sets button - select Remove Current Synchronization from the view menu.</td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table199"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Mapping of Incoming Changes to Reports</b></p> - </td> - <td valign="top" width="70%"> - When the Synchronize view is in Incoming and Change Sets mode - (visible below), and Mylar Change Set support was used to commit, - incoming changes will be grouped by task description. Right - clicking a Change Set will bring up an "Open Corresponding Report" - action to navigate to the corresponding issue (either Bugzilla - report or Web Link). The same action is available for - navigating from commit messages to reports in the CVS Resource - History view. <p> - <img border="0" src="images/0.4.3/synchronize-change-sets.gif" width="593" height="206"></p> - <p> - <img border="0" src="images/0.4.3/cvs-resource-history-open.gif" width="476" height="163"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table200"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Open Task from History View<br> - (3.2 only)</b></p> - </td> - <td valign="top" width="70%"> - Change set support<p> - <img border="0" src="images/0.5.0/open-task-from-history.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table201"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Commit Task Context</b></p> - </td> - <td valign="top" width="70%"> - Resources in the Task Context can be committed either by - right-clicking the active task and selecting the Commit Task Context - action, or by right-clicking the Change Set in the Synchronize view. - In both cases the commit message will be populated by the - description and URL of the task (if available). The comment - prefix can be changed in the Task List preferences page. <p> - <img border="0" src="images/0.4.2/context-commit.gif" width="231" height="79"><p> - <img border="0" src="images/0.4.2/context-commit-wizard.gif" width="525" height="369"><p> - <img border="0" src="images/0.4.2/context-commit-prefix.gif" width="432" height="84"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<h3> </h3> -<h3>Bugzilla Connector</h3> - -<table cellpadding="10" cellspacing="0" id="table173"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Form-based Bugzilla Editor with Hyperlink - support</b></p> - </td> - <td valign="top" width="70%"> - The editor now uses Eclipse forms, collapses comments that expand on - selection. The following hyperlinks are supported in comment - bodies:<ul> - <li>Java elements in stack traces</li> - <li>Bug links (e.g. bug 123)</li> - <li>Hyperlinks</li> - <li>Attachments</li> - </ul> - <p> - On Eclipse 3.1, click the comment for the links to become active.<p> - To apply a patch click the "view" link, hit Ctrl+A and Ctrl+C on the - text to get it into the clipboard, then Apply Patch). To - expand all comments click the "Expand All" button at the bottom of - the editor. - <p> - <img border="0" src="images/0.5.0/task-editor-hyperlinks.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table165"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Multiple Bugzilla versions supported</b></p> - </td> - <td valign="top" width="70%"> - Bugzilla versions are now associated with each repository, and can - be set from the Task Repositories view. Uncustomized versions - 2.16-2.22 are supported.<p>If you are switching from Bugzilla 2.18 - to 2.20 you will need to update the existing Bugzilla Queries in - your task list. Double click each query category to edit it, - press "Update Options", and then simply click OK to save the query. - Please note that the default Bugzilla configuration is now 2.20.</p> - <p> - <img border="0" src="http://eclipse.org/mylar/doc/images/0.4.10/bugzilla-versions.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table125"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Support for Unicode Character Sets</b></p> - </td> - <td valign="top" width="70%"> - Bugzilla character settings are honored. For repositories - older than 2.20 you may need to use the internal browser for - submission if encoding is ignored.<p> - <img border="0" src="images/0.4.7/bugzilla-encoding.gif" width="354" height="42"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table106"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Improved Outline</b></p> - </td> - <td valign="top" width="70%"> - The Bug Editor Outline can be used to navigate the report by - commenter and date.<p> - <img border="0" src="images/0.4.3/bugzilla-outline.gif" width="382" height="165"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table100"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Proxy Settings</b></p> - </td> - <td valign="top" width="70%"> - To enable use with firewalls and proxy servers the Bugzilla Client - follows proxy settings set in the Install/Update preference page.</td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" id="table77"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Browser tab for Bugzilla reports</b></p> - </td> - <td valign="top" width="70%"> - A new editor tab makes it easy to switch from the Bug Editor to - Browser-based editing. Note that when using the Browser - queries will not automatically refresh after submitting changes on a - bug. You can set the Browser to be the default editor in the - Task List preference page.<p> - <img border="0" src="images/0.4.1/bugzilla-prefs-open-reports.gif" width="231" height="50"><p> - <img border="0" src="images/0.4.1/bugzilla-editor-browser.gif" width="563" height="360"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -</body> -</html>
\ No newline at end of file diff --git a/org.eclipse.mylyn.help.ui/doc/new-0.5.html b/org.eclipse.mylyn.help.ui/doc/new-0.5.html deleted file mode 100644 index e902daa1e..000000000 --- a/org.eclipse.mylyn.help.ui/doc/new-0.5.html +++ /dev/null @@ -1,616 +0,0 @@ -<html> -<head> - <title>Mylar New & Noteworthy</title> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> - <meta name="author" content="Mik Kersten" /> - <meta name="keywords" content="Mylar, Eclipse" /> - <link rel="stylesheet" type="text/css" href="http://eclipse.org/eclipse.org-common/themes/Phoenix/css/visual.css" media="screen" /> -</head> -<body> -<div align=center><h1>New & Noteworthy for Mylar 0.5.1 - 0.6.0</h1></div> - -<table border="1" style="border-collapse: collapse" width="100%" id="table128" cellpadding="4" bordercolor="#FFFFFF"> - <tr> - <td bgcolor="#595791" width="7%" align="center"><b> - <font color="#FFFFFF" size="1">Release</font></b></td> - <td bgcolor="#595791" width="5%" align="center"><b> - <font color="#FFFFFF" size="1">Resolved - </font></b></td> - <td bgcolor="#595791" width="*" align="center"><b> - <font color="#FFFFFF" size="1">Community Contributions</font></b></td> - </tr> - <tr> - <td bgcolor="#E0D0E6"><font size="1">0.6.0<br> - <i>June 30</i></font></td> - <td bgcolor="#E0D0E6" align="center"> - <font size="1"> - <a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Mylar&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=2006-06-14&chfieldto=2006-06-30&chfield=resolution&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0="> - 82<br> - reports</a></font></td> - <td bgcolor="#E0D0E6"><font size="1">Jeff Pound added Bugzilla search - <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=142891">attribute - persistence</a> and - <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102851"> - attachment improvements</a>, Brock Janiczak and Gunnar Wagenknecht - contributed - <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=145074">Team - provider extension points</a> and Subclipse - <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=148512"> - integration improvements</a>. Eugene Kuleshov integrated JIRA task - creation. Stephen Pingel, Nathan Hapke, Raphael Ackermann and - Felix Schwarz provided helpful bug fixes and unit tests. </font></td> - </tr> - <tr> - <td bgcolor="#FAF7FB"><font size="1">0.5.3<br> - <i>June 13</i></font></td> - <td bgcolor="#FAF7FB" align="center"> - <font size="1"> - <a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Mylar&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=2006-05-23&chfieldto=2006-06-13&chfield=resolution&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0="> - 84<br> - reports</a></font></td> - <td bgcolor="#FAF7FB"><font size="1">Brian de Alwis patches resolved the - long-standing - <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=103235">multiple - workbench windows limitation</a>. Eugene Kuleshov added support for - <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=139314">editing - custom JIRA queries</a>. Brock Janiczak added - <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=142875">Subclipse - change set support</a>. Jeff Pound added support for - <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102851">Bugzilla - attachments</a>. Raphael Ackermann improved - <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=142898">Bugzilla - search selections</a>. Gunnar Wagenknecht fixed - <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=146385">Subclipse - dependency loading</a>. </font></td> - </tr> - <tr> - <td bgcolor="#FAF7FB"><font size="1">0.5.2<br> - <i>May 22</i></font></td> - <td bgcolor="#FAF7FB" align="center"> - <font size="1"> - <a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Mylar&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=2006-04-29&chfieldto=2006-05-20&chfield=resolution&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0="> - 64<br> - reports</a></font></td> - <td bgcolor="#FAF7FB"><font size="1">Brock Janiczak made another big - contribution with the - <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=133764"> - form-based JIRA editor</a>, updates for - <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=139320">new JIRA - APIs</a>, and - <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=141251">wizard - progress</a>. David Barri's patch and help were instrumental in - supporting - <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=117035">alternate - encodings</a>. Sefan Langer made use of the internal browser for - tasks <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=132656"> - optional</a>. Minor fixes were also contributed by - <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=142362">Brian de - Alwis</a> and - <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=139293">Leah - Findlater</a>.</font></td> - </tr> - <tr> - <td bgcolor="#FAF7FB"><font size="1">0.5.1<br> - <i>April 28</i></font></td> - <td bgcolor="#FAF7FB" align="center"> - <a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Mylar&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=2006-04-08&chfieldto=2006-04-29&chfield=resolution&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0="> - <font size="1">34</font><font size="1"><br> - reports</a></font></td> - <td bgcolor="#FAF7FB"><font size="1">Brock Janiczak and - Eugene Kuleshov made a very substantial contribution of custom JIRA - query support. Gunnar Wagenknecht contributed a patch for RC1 - compatibility.</font></td> - </tr> - </table> - -<p>Also see:</p> -<ul> - <li><b><a href="new-0.4.html">New & Noteworthy for Mylar 0.4.x</a></b></li> - <li><b><a href="new-0.3.html">New & Noteworthy for -Mylar 0.3.x</a></b></li> -</ul> - -<p>Update instructions:</p> -<ul> - <li>Use "Search for new features.." when updating to avoid confusing the - Update Manager</li> - <li>Bugzilla users: submit all outgoing changes before updating since this - update will recreate the offline file</li> - <li>JIRA users: JIRA Core Services 0.9.1 is required and included on the - update site, synch queries after updating</li> -</ul> - -<hr> - -<p> </p> -<h2>Task List</h2> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table256"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#E0D0E6> - <p align="right"><b>Popup menu on Task Editor</b></p> - </td> - <td valign="top" width="70%"> - The Task Editor now provides a popup menu similar to the Task List.<p> - <img src="images/0.6.0/task-editor-menu.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table240"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#FAF7FB> - <p align="right"><b>Open in Browser</b></p> - </td> - <td valign="top" width="70%"> - The Task List "Open in Browser" and hyperlink actions now follow the - Platform browser settings in <i>Preferences -> General -> Web - Browser</i>. This allows you to open repository tasks and - queries in the internal or external browser via the Task List - context menu. - </td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0"> - <tr> - <td align="left" valign="top" width="15%" bgcolor="#FAF7FB"> - <p align="right"><b>Daily Progress </b></p> - </td> - <td valign="top" width="70%"> - Using - Apply Mylar in the Task List now helps track daily task - progress by highlighting tasks scheduled for today (default - is blue) and always showing tasks completed today - (default is green). With Apply Mylar enabled the - previous sort order is removed and interest based - sorting is added (e.g. brings overdue tasks to the top - and completed ones to the bottom, then sorts by priority - and description).<p>Repository tasks with incoming - comments are now always considered to be interesting - (e.g. 133196 below). - Note that if you see too many tasks with incoming - notifications you can select them all and click <i> - Synchronize with Repository</i> on the context menu to - catch up. </p> - <p> - <img src="images/0.5.2/tasklist-apply-mylar.gif"></td> - </tr> - <tr> - <td colspan=2> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table208"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#FAF7FB> - <p align="right"><b>Apply Mylar to Task Activity</b></p> - </td> - <td valign="top" width="70%"> - Similar to how Mylar only shows the resources interesting to a task - when applied to a resource view, the Mylar filter will show only the - tasks relevant to the current work week when applied to the Task - List view. This helps reduce information overload for those - that make heavy use of the Task List by focusing on the tasks - scheduled for this week, incomplete tasks that have become - interesting by being worked on recently, and those that are past - their reminders. To mark a task uninteresting set its reminder - for next week or later. Also note that tasks scheduled for - today are highlighted in blue by default (see <i>Preferences -> - General -> Fonts and Colors</i> to change).<p> - <img src="images/0.5.1/apply-tasklist.gif"></td> - </tr> - </table> - -<h2> </h2> -<h2>Task Context</h2> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table255"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#E0D0E6> - <p align="right"><b>Perspective management</b></p> - </td> - <td valign="top" width="70%"> - Turning on the preference visible below via <i>Preferences -> Mylar</i> - will cause the perspective last used when a task was active to be - opened when the task is re-activated. This can be useful when - switching between different kinds of tasks (e.g. between Java and - PHP development) each of which is associated with a perspective.<p> - <img src="images/0.6.0/perspective-management.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table239"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#FAF7FB> - <p align="right"><b>Resource Exclusions</b></p> - </td> - <td valign="top" width="70%"> - Files and directories can be excluded from the change monitoring - that causes them to get automatically added to the context. - This can be useful for not monitoring settings files (.* is enabled - default), generated files not in output folders (e.g. source code - generation), or shared directories (e.g. linked network drives used - by others). See <i>Preferences -> Mylar -> Resources</i>.<p> - <img src="images/0.5.3/resources-exclusion.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table211"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#FAF7FB> - <p align="right"><b>Editor Auto Close</b></p> - </td> - <td valign="top" width="70%"> - Editors now close automatically when the corresponding files become - uninteresting. This ensures that the number of open editors - does not bloat, and that the editors match the context visible in - vies like the Package Explorer. Note that when a context is - activated the Eclipse preference for closing editors will be - disabled, and re-enabled on deactivation if previously set.<p> - <img src="images/0.5.1/editors-close.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table210"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#FAF7FB> - <p align="right"><b>Filter Auto Removal</b></p> - </td> - <td valign="top" width="70%"> - When Mylar is applied to a view, the existing filters will be - removed from the view. This enables Alt+click browsing of all - elements (e.g. .settings folder), and ensures that filters such as - Referenced Libraries and Working Sets do not hide elements - interesting to a context. The filters are restored when the - Apply Mylar button is toggled off.</td> - </tr> - </table> - -<p> </p> - -<h2>Team</h2> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table258"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#FAF7FB> - <p align="right"><b>Change Set Management for Subclipse</b></p> - </td> - <td valign="top" width="70%"> - Mylar's automatic change set management now integrates with - <a href="http://subclipse.tigris.org/servlets/ReadMsg?list=users&msgNo=6914"> - Subclipse 1.1.0</a> (<a href="http://subclipse.tigris.org/update_1.2.x">update - site</a>). Note that you need to have the Synchronize view in - either Incoming or Outgoing mode in order for change sets to work. - If a change set does not show up for an existing synchronization - deactivate and activate the current task. Commit changes - either via the Synchronize view or the Task List's <i>Commit Context</i> - popup menu action.<p> - <img src="images/0.5.3/changeset-subclipse.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table259"> - <tr> - <td align="left" valign="top" width="15%" bgcolor="#FAF7FB"> - <p align="right"><b>Support for CVS Change Sets with Models</b></p> - </td> - <td valign="top" width="70%"> - If you are using the model-based change sets, you will notice that - the Mylar Active Change sets work show up with a decoration in the - lower-right corner, and that you can view both incoming and outgoing - change sets at the same time. However, note that there is a - refresh problem on startup, so if a change - set you expect is missing or if you get a <i>There are no more Incoming/Outgoing changes</i> message - in the view on startup toggle the third toolbar button between <i> - All Models</i> and <i>Change Sets</i> (see Platform/Team - <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=142395">bug - 142395</a>). - <p> - <img src="images/0.5.2/changesets-model-based.gif"></td> - </tr> -</table> - - <h2> </h2> -<h2>Bugzilla Connector</h2> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table252"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#E0D0E6> - <p align="right"><b>Incoming change notifications<br> - (3.2 only)</b></p> - </td> - <td valign="top" width="70%"> - A notification popup dialog in the lower-right corner of the screen - will notify you of incoming changes to Bugzilla reports. - Toggle this and set the synchronization schedule via <i>Preferences -> - Mylar -> Task List</i>. To mark tasks with the incoming indicator - as 'read' without opening them Right+Click one or more tasks and - select <i>Synchronize</i>.<p> - <img src="images/0.6.0/bugzilla-notifications.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table253"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#E0D0E6> - <p align="right"><b>Search parameters persist</b></p> - </td> - <td valign="top" width="70%"> - Bugzilla Search parameters will persist across search invocations, - making it easier to iterate on searches.<p> - <img src="images/0.6.0/bugzilla-search.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table254"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#E0D0E6> - <p align="right"><b>Attachment sources</b></p> - </td> - <td valign="top" width="70%"> - New attachments can be selected from the clipboard, a file, or from - the workspace. Using the pop up menu on the Attachments table - in the task editor existing attachments can be opened, saved, or - loaded into the clipboard.<p> - <img src="images/0.6.0/bugzilla-attachments.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table260"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#FAF7FB> - <p align="right"><b>Background Synch on Open</b></p> - </td> - <td valign="top" width="70%"> - Incremental background synchronization and offline support has been - further improved, and opening a Bugzilla report will now open the - offline copy and synchronize with the server in the background. - Note that if you have a large Task List your first - synchronization may be slow since every report will be synched. - The preference settings have been simplified and are in <i> - Preferences -> Mylar -> Task List</i>. <p> - <img src="images/0.5.3/repository-synch.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table242"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#FAF7FB> - <p align="right"><b>File Attachments</b></p> - </td> - <td valign="top" width="70%"> - Attachments can be added from the bugzilla editor. Note - that you must provide a description.<p> - <img src="images/0.5.3/bugzilla-attach.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table227"> - <tr> - <td align="left" valign="top" width="15%" bgcolor="#FAF7FB"> - <p align="right"><b>Search Integration</b></p> - </td> - <td valign="top" width="70%"> - The Bugzilla search page now only shows attributes relevant to the - selected product. The results shown in the Search view are now - opened and displayed consistently with the Task List (e.g. - indicating which hits are in the Task list via the icon).<p> - <img src="images/0.5.2/bugzilla-search.gif"></td> - </tr> - <tr> - <td colspan=2> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table228"> - <tr> - <td align="left" valign="top" width="15%" bgcolor="#FAF7FB"> - <p align="right"><b>Bugzilla Connector Uses XML/RDF</b></p> - </td> - <td valign="top" width="70%"> - The Bugzilla connector now exclusively uses XML and RDF to run - queries and retrieve bug reports (previously relied on HTML - parsing). This means that it can now be used with many - customized repositories (e.g. RedHat), and that all bug attributes - should be visible and editable (e.g. keywords). Attachments - now show up in a new section on the report.<p>Synchronization and incoming change notification has been - streamlined and only downloads changed reports (refer to Time Zone - settings below).</p> - <p> - <img src="images/0.5.2/task-repository-sync.gif"></td> - </tr> - <tr> - <td colspan=2> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table229"> - <tr> - <td align="left" valign="top" width="15%" bgcolor="#FAF7FB"> - <p align="right"><b>Character Encodings and Time Zones</b></p> - </td> - <td valign="top" width="70%"> - The Bugzilla Connector now has full support for encodings (note - UTF-8 support was improved in Bugzilla 2.22). - For most installations - the default UTF-8 settings should work, but you can also force the - encoding used in the repository settings page.<p> - <img src="images/0.5.2/bugzilla-encodings-editor.gif"><p> - The time zone setting <b>must be set correctly</b> for synchronization to - only synchronize changed tasks correctly. If you do not set this - value your local time zone will be used. Note that the - eclipse.org repository is on Canada/Eastern time.<p> - <img src="images/0.5.2/bugzilla-encodings-settings.gif"></td> - </tr> - <tr> - <td colspan=2> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table209"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#FAF7FB> - <p align="right"><b>Task Context Attachments</b></p> - </td> - <td valign="top" width="70%"> - Task contexts can now be attached to Bugzilla tasks and retrieved - into the workspace, via the Task List popup menu. When a task - has a repository context the lower-left repository icon turns purple and - gets taller.<p>Note: not (yet) supported on - Bugzilla 2.18.<p> - <img src="images/0.5.1/context-attach-popup.gif"><p> - <img src="images/0.5.1/context-retrieve.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table205"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#FAF7FB> - <p align="right"><b>End of Support for 2.16</b></p> - </td> - <td valign="top" width="70%"> - This release marks the end of both bugzilla.org and Mylar support - for Bugzilla 2.16, so those using the old installation will need to - <a href="http://www.bugzilla.org/news/">upgrade</a>.</td> - </tr> - </table> - -<h2> </h2> -<h2>JIRA Connector</h2> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table257"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#E0D0E6> - <p align="right"><b>Create New Tasks</b></p> - </td> - <td valign="top" width="70%"> - New tasks can be created without leaving Eclipse via the web browser integration.<p> - <img src="images/0.6.0/jira-new.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table223"> - <tr> - <td align="left" valign="top" width="15%" bgcolor="#FAF7FB"> - <p align="right"><b>Integrated JIRA Editor</b></p> - </td> - <td valign="top" width="70%"> - The Eclipse Forms-based JIRA editor provides integrated - editing for JIRA repository tasks. At this time - only new comment posting is supported, and attributes - can not be edited. Since offline editing for JIRA - tasks is not yet supported saving a comment will result - in it being posted. Note that you must synchronize - your queries before using this editor.<p> - <img src="images/0.5.2/jira-editor.gif"></td> - </tr> - <tr> - <td colspan=2> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table224"> - <tr> - <td align="left" valign="top" width="15%" bgcolor="#FAF7FB"> - <p align="right"><b>Add Individual Tasks</b></p> - </td> - <td valign="top" width="70%"> - Individual JIRA tasks can now be added by issue key via the - Task List (via context menu -> <i>Add Existing Repository Task</i>)</td> - </tr> - <tr> - <td colspan=2> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table204"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#FAF7FB> - <p align="right"><b>Custom Queries</b></p> - </td> - <td valign="top" width="70%"> - In addition to using filters stored on the server, custom JIRA - queries can now be added via <i>New Repository Query</i> wizard. <p> - <img src="images/0.5.1/jira-query-custom.gif"></td> - </tr> - </table> - -</body> -</html>
\ No newline at end of file diff --git a/org.eclipse.mylyn.help.ui/doc/new.html b/org.eclipse.mylyn.help.ui/doc/new.html deleted file mode 100644 index 8c850161f..000000000 --- a/org.eclipse.mylyn.help.ui/doc/new.html +++ /dev/null @@ -1,443 +0,0 @@ -<html> -<body> -<div align=center><h1>New & Noteworthy for Mylar 0.7.0</h1></div> - -<table border="1" style="border-collapse: collapse" width="100%" id="table128" cellpadding="4" bordercolor="#FFFFFF"> - <tr> - <td bgcolor="#595791" width="7%" align="center"><b> - <font color="#FFFFFF" size="1">Release</font></b></td> - <td bgcolor="#595791" width="5%" align="center"><b> - <font color="#FFFFFF" size="1">Resolved - </font></b></td> - <td bgcolor="#595791" width="*" align="center"><b> - <font color="#FFFFFF" size="1">Community Contributions</font></b></td> - </tr> - <tr> - <td bgcolor="#E0D0E6"><font size="1">0.7.0<br> - <i>Sep 29</i></font></td> - <td bgcolor="#E0D0E6" align="center"> - <a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Mylar&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=2006-08-28&chfieldto=2006-09-30&chfield=resolution&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0="> - <font size="1">92</font><br><font size="1">reports</a></font></td> - <td bgcolor="#E0D0E6"><font size="1">Eugene Kuleshov streamlined adding - new repositories, improved the generic web connector, and JIRA query - dialog. Willian Mitsuda provided several layout UI layout and - presentation improvements. Yuri V. Baburov improved task activity - timing. John Anvik and Nathan Hapke also contributed patches and - tests.</font></td> - </tr> - <tr> - <td bgcolor="#FAF7FB"><font size="1">0.6.2<br> - <i>Aug 25</i></font></td> - <td bgcolor="#FAF7FB" align="center"> - <font size="1"> - <a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Mylar&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=2006-08-01&chfieldto=2006-08-27&chfield=resolution&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0="> - 125<br> - reports</a></font></td> - <td bgcolor="#FAF7FB"><font size="1">Steffen Pingel provided numerous patches to the tasks framework and - improvements to the Trac connector, and has been - voted in as a committer. Jeff Pound improved attachment handling and - spell checking. Eugene Kuleshov contributed web connector support for - Google's new code hosting service. Willian Mitsuda contributed the open - task dialogs. Felix Schwarz contributed patches improving the - usability of connector selection. Izzet Safer and Nathan Hapke also - contributed a number of patches and tests. </font></td> - </tr> - <tr> - <td bgcolor="#FAF7FB"><font size="1">0.6.1<br> - <i>July 31</i></font></td> - <td bgcolor="#FAF7FB" align="center"> - <font size="1"> - <a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Mylar&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=2006-08-02&chfieldto=2006-08-27&chfield=resolution&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0="> - 126<br> - reports</a></font></td> - <td bgcolor="#FAF7FB"><font size="1">Steffen Pingel contributed Trac - support as well as numerous patches to the Tasks framework. Jeff - Pound contributed duplicate detection, Error Log bug reporting and - streamlined context attachments. Eugene Kuleshov improved the JIRA query - dialog and provided numerous patches for the sandbox web repository - connector. Willian Mitsuda provided a patches for Tasks UI streamlining. - Brian de Alwis, Brock Janiczak, Izzet Safer and Nathan Hapke also - contributed useful patches and tests.</font></td> - </tr> - </table> - -<p><b>Also: New & Noteworthy for: <a href="new-0.5.html">Mylar 0.5</a>, -<a href="new-0.4.html">Mylar 0.4</a>, <a href="new-0.3.html">Mylar 0.3</a></b></p> -<p><b>Update notes</b>: </p> -<ul> - <li>When updating to 0.7.0: If you have a lot of contexts the restart will - take slightly longer as they are migrated to a compressed format.</li> - <li>If updating from 0.6.0: the <i>Preferences -> Tasks</i> settings will be reset to their defaults - due to plug-in name changes. If you use a non-default <i>Task - Data</i> directory you will need to update this setting after restart.</li> - <li>If updating from 0.5.x or earlier: you must first update to 0.6.0: download.eclipse.org/technology/mylar/update-site-archive/0.6.0/e3.2. - <br> - </li> -</ul> - -<hr> - -<h2>Tasks</h2> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table281"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#E0D0E6> - <p align="right"><b>Incoming Changes</b></p> - </td> - <td valign="top" width="70%"> - All comments added since your last reading of a repository task will - be automatically expanded when the task is opened. Incoming - changes are retrieved with the background synchronization and - available without the round-trip to the server (note that a - background synchronization is still kicked off on open to ensure you - are looking at the latest contents). Tasks can now be - explicitly marked as read or unread.<p> - <img src="images/0.7.0/task-mark-unread.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table277"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#E0D0E6> - <p align="right"><b>Task Editor Improvements</b></p> - </td> - <td valign="top" width="70%"> - All <p> - <img src="images/0.7.0/task-editor-improvements.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table278"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#E0D0E6> - <p align="right"><b>Task Repository Integration</b></p> - </td> - <td valign="top" width="70%"> - Task repositories are easier to add, validate, and can be named via - the <i>Task Repositories</i> view. An icon decorated indicates - the repository type. A task repository can be associated with - a project, enabling it to be used for actions such as resolving bug - hyperlinks. Note that you do not need to associate all of your - projects with repositories after updating, since you will be - prompted to do this if when the associate is needed. - <p> - <img src="images/0.7.0/task-repository-association.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table269"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Spell Checking</b></p> - </td> - <td valign="top" width="70%"> - Spell checking is supported in the task editor for local tasks and - for connectors that support rich editing (e.g. Bugzilla, Trac). - Please see the FAQ for how to turn on this preference: - <a href="http://wiki.eclipse.org/index.php/Mylar_FAQ#Spell_Checking"> - http://wiki.eclipse.org/index.php/Mylar_FAQ#Spell_Checking</a> <p> - <img src="images/0.6.2/spell-checking.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table264"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Open/Active Task dialogs</b></p> - </td> - <td valign="top" width="70%"> - An <i>Open Type</i> style dialog is available for opening tasks - (Ctrl+Shift+F11) and for activating tasks (Ctrl+Shift+F12). - The list is initially populated by recently active tasks. The - active task can also be deactivated via Ctrl+Shift+F9. This - can be used as a keyboard only alternative for multi-tasking - without the <i>Task List</i> view visible. These - actions appear in the <i>Navigate</i> menu.<p> - <img src="images/0.6.2/open-task-dialog.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table276"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Attachment Improvements</b></p> - </td> - <td valign="top" width="70%"> - Repository task attachments (supported by the Bugzilla and Trac - connectors) can now be attached via drag-and-drop from both within - the Eclipse workspace and from outside, and from text selections, - which will invoke the attachment wizard. Attachment can be opened - with a browser or corresponding editor.<p> - <img src="images/0.6.2/attachments-open.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table265"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Task List Restore</b></p> - </td> - <td valign="top" width="70%"> - Task and context data can be restored from a backup snapshot via <i> - File -> Import -> Mylar Task Data</i>. By default backup - snapshots are taken daily and kept for 30 days.<p> - <img src="images/0.6.2/tasklist-restore.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table256"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#FAF7FB> - <p align="right"><b>Report Bugs from Error Log</b></p> - </td> - <td valign="top" width="70%"> - Bugs can created directly from events in the - <i>Error Log</i> view. - This will create a new repository task editor with the summary and - description populated with the error event's details. If - the Connector you are using does not have a rich editor, the event - details will be placed into the clipboard so that you can paste them - into the web-based editor that will be opened automatically.<p> - <img src="images/0.6.1/tasks-create-error-log.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table259"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#FAF7FB> - <p align="right"><b>Automatic Duplicate Detection</b></p> - </td> - <td valign="top" width="70%"> - The <i>Search for Duplicates</i> button on the <i>New Repository - Task</i> editor encourages and facilitates finding similar bug - reports before creating a new one. Potential duplicates are displayed in - the <i>Search</i> view which can be used to open a bug and comment - or vote if a duplicate is found. The current duplicate - detection mechanism uses stack traces, either automatically inserted - by the <i>Report as Bug</i> mechanism, or manually pasted into the - <i>Description </i>area. All descriptions and comments of bugs - on the corresponding repository are included in the search.<p> - <img src="images/0.6.1/tasks-duplicate-detection.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table260"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#FAF7FB> - <p align="right"><b>Task Editor Improvements</b></p> - </td> - <td valign="top" width="70%"> - All hyperlinks (URLs, bug/task references, Java stack traces) now - work in the <i>New Comment</i> and <i>Notes</i> editors. Note - that hyperlinks need to be hovered over in order to get underlined. - Multiple undo/redo and other editor shortcuts now work, and - editing actions are integrated into the context menu. When - submitting comments, contexts can be more easily attached by selecting the corresponding check-box in the <i>Actions</i> - section.<p> - <img src="images/0.6.1/tasks-editor-hyperlinks.gif"></td> - </tr> - </table> - -<h2> </h2> -<h2>Task Context</h2> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table274"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Hierarchical Layout in Package Explorer</b></p> - </td> - <td valign="top" width="70%"> - The long-standing limitation of not being able to use the Package - Explorer in hierarchical mode has been resolved for Eclipse 3.2.1 - and later (3.3M1 and the upcoming 3.2.1 release).<p> - <img src="images/0.6.2/package-explorer-hierarchical.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table255"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#FAF7FB> - <p align="right"><b>Apply Mylar to Debug view<br> - (Experimental)</b></p> - </td> - <td valign="top" width="70%"> - Mylar can now be applied to the <i>Debug</i> view, making the thread - tree focusing on the task context by hiding uninteresting stack - frames. <p> - <img src="images/0.6.1/context-debug.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table261"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#FAF7FB> - <p align="right"><b>Auto Apply Mylar on Navigator Views</b></p> - </td> - <td valign="top" width="70%"> - For navigator views (<i>Package Explorer</i>, <i>Project Explorer</i> - and <i>Navigator</i>) the <i>Apply Mylar</i> button can be set to automatically toggle on - with task activation and off with task deactivation. - Note that the context-related preferences including this one are now in <i> - Preferences -> Mylar -> Context</i>.<p> - <img src="images/0.6.1/context-prefs-ui-management.gif"></td> - </tr> - </table> - -<h2> </h2> -<h2>Bugzilla Connector</h2> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table282"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#E0D0E6> - <p align="right"><b>Votes and Links</b></p> - </td> - <td valign="top" width="70%"> - Additional attributes that do not have rich editor components - (votes, bug activity log) are now linked to remove the need to - manually check the Browser tab. Bug dependencies can be - navigated with hyperlinks, and the tooltips for linked bugs are the - bug descriptions.<p> - <img src="images/0.7.0/bugzilla-attributes.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<h2> </h2> -<h2>Trac Connector</h2> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table270"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Rich Editor, Attachments and Offline support</b></p> - </td> - <td valign="top" width="70%"> - The Trac connector now supports the rich task editor. As with - the Bugzilla editor, this means that attributes and comments can be - for viewed and edited offline, synchronization is done in the - background, and attachments can be posted and retrieved. Task - Context attachments are supported via the context menu actions in - the Task List. This support requires the Trac XML-RPC plug-in - to be enabled and the integration will fall back to the web mode if - it is not, see: - <a href="http://wiki.eclipse.org/index.php/Mylar_FAQ#Trac_Connector_troubleshooting"> - http://wiki.eclipse.org/index.php/Mylar_FAQ#Trac_Connector_troubleshooting</a> <p> - <img src="images/0.6.2/trac-editor.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table273"> - <tr> - <td align="left" valign="top" width="15%"> - <p align="right"><b>Search Integration</b></p> - </td> - <td valign="top" width="70%"> - Trac search is now integrated with the generic Task search facility.<p> - <img src="images/0.6.2/trac-search.gif"></td> - </tr> - <tr> - <td colspan="2"> - <hr> - </td> - </tr> -</table> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table257"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#FAF7FB> - <p align="right"><b>Query Integration</b></p> - </td> - <td valign="top" width="70%"> - The new connector for the open source - <a href="http://trac.edgewall.org/">Trac</a> issue tracking system - integrates Trac queries into the Task List. If you do not know your - Trac repository version use the <i>Automatic</i> setting and click - <i>Validate Settings.</i><p> - <img src="images/0.6.1/trac-add-repository.gif"></p> - <p> - <img src="images/0.6.1/trac-query.gif"><p> - <img src="images/0.6.1/trac-editor-web.gif"></td> - </tr> - </table> - -<p> </p> -<h2>JIRA Connector</h2> - -<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table262"> - <tr> - <td align="left" valign="top" width="15%" bgcolor=#FAF7FB> - <p align="right"><b>Improved JIRA Query Dialog</b></p> - </td> - <td valign="top" width="70%"> - The JIRA query dialog has been streamlined into a single page. - Date range queries are now supported.<p> - <img src="images/0.6.1/jira-query.gif"></p> - </td> - </tr> - </table> - -</body> -</html>
\ No newline at end of file diff --git a/org.eclipse.mylyn.help.ui/doc/overview.html b/org.eclipse.mylyn.help.ui/doc/overview.html deleted file mode 100644 index 457042e14..000000000 --- a/org.eclipse.mylyn.help.ui/doc/overview.html +++ /dev/null @@ -1,23 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> - <head> -<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." > - <link rel="stylesheet" href="book.css" charset="ISO-8859-1" type="text/css"> - <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> - <meta http-equiv="Content-Style-Type" content="text/css"> - <title> - Mylar Overview - </title> - </head> - <body> - <h1> - Mylar</h1> - <p><b>Please note: </b>the best way to get an overview of Mylar is by watching the flash - demos and by reviewing the latest <b><a href="new.html">New & Noteworthy</a> - </b> and the <b><a href="http://wiki.eclipse.org/index.php/Mylar_FAQ"> - FAQ</a></b>.</p> - <p><b>Also see: <a href="http://eclipse.org/mylar/start.php"> - http://eclipse.org/mylar/start.php</a> </b> </p> - - </body> -</html> diff --git a/org.eclipse.mylyn.help.ui/doc/tips.html b/org.eclipse.mylyn.help.ui/doc/tips.html deleted file mode 100644 index ae36a45d6..000000000 --- a/org.eclipse.mylyn.help.ui/doc/tips.html +++ /dev/null @@ -1,110 +0,0 @@ -<html> - <head> - <title> - Mylar FAQ - </title> - </head> - <body> - <h1> - Mylar Tips and Tricks</h1> - -<p><b>Common Shortcuts</b></p> - - <table border="1" width="100%" id="table1"> - <tr> - <td width="223" align="center">Action</td> - <td width="862" align="center">Description</td> - </tr> - <tr> - <td width="223">Create Task</td> - <td width="862">INS key, toolbar button, or Ctrl+N and type "task"</td> - </tr> - <tr> - <td width="223">Create task from URL<p> </td> - <td width="862">Mozilla: drag URL from Browser onto Task List view<br> - Internet Explorer: as above but hold down CTRL</td> - </tr> - <tr> - <td width="223">Show filtered elements</td> - <td width="862">Alt+Click in the view, holding down Alt for - subsequent clicks.</td> - </tr> - <tr> - <td width="223">Increase or reduce interest of elements</td> - <td width="862">In view: Right Click and use the menu [show figure]<br> - In editor: Alt+Shift+Up Arrow, Alt+Shift+Down Arrow</td> - </tr> - <tr> - <td width="223"> </td> - <td width="862"> </td> - </tr> - </table> - - <p><b>Visual Design Legend</b></p> - - <table border="1" width="100%" id="table2"> - <tr> - <td width="1085" align="center" colspan="2">Tasks</td> - </tr> - <tr> - <td width="223" align="center"> - <p align="left"><img src="images/tips/icon-task.gif"><img src="images/tips/icon-task-notes.gif"><img src="images/tips/icon-task-completed.gif"></td> - <td width="862" align="center"> - <p align="left">Task, task with notes, completed task, overdue task</td> - </tr> - <tr> - <td width="223" align="center"> - <p align="left"> </td> - <td width="862" align="center"> - <p align="left">Category, Query, Task Archive</td> - </tr> - <tr> - <td width="223" align="center"> </td> - <td width="862" align="center"> - <p align="left">Query hit, shared Task, incoming changes, outgoing - changes</td> - </tr> - <tr> - <td width="223"> </td> - <td width="862">Priorities: Very high, high, normal, low, very low</td> - </tr> - <tr> - <td width="1085" colspan="2"> - <p align="center">Scheduling</td> - </tr> - <tr> - <td width="223">[list of 3 tasks]</td> - <td width="862">Overdue task, scheduled for today, scheduled for - this week, completed today, completed previously</td> - </tr> - <tr> - <td width="223">[bold]</td> - <td width="862">Active task</td> - </tr> - <tr> - <td width="1085" colspan="2"> - <p align="center">Context</td> - </tr> - <tr> - <td width="223">[tree with 3 items]</td> - <td width="862">Landmark, landmark gutter annotation, interesting, - uninteresting</td> - </tr> - <tr> - <td width="223"> </td> - <td width="862">Active task, ask without context, with personal context, with - repository context</td> - </tr> - <tr> - <td width="223"> </td> - <td width="862">Apply Mylar to a view, to the editor, Apply Mylar - overlay</td> - </tr> - </table> - -<p> </p> - - - <p><b>Drag and Drop?</b></p> - - </body></html> diff --git a/org.eclipse.mylyn.help.ui/doc/toc.xml b/org.eclipse.mylyn.help.ui/doc/toc.xml deleted file mode 100644 index a3ee64273..000000000 --- a/org.eclipse.mylyn.help.ui/doc/toc.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<?NLS TYPE="org.eclipse.help.toc"?> - -<toc label="Mylar"> - <topic label="Overview" href="doc/overview.html"/> - <topic label="New & Noteworthy" href="doc/new.html"/> - <anchor id="concepts"/> - <anchor id="tasklist"/> - <anchor id="java"/> - <anchor id="xml"/> - <anchor id="bugzilla"/> - <anchor id="monitor"/> - <!-- - <topic label="For Developers" href="doc/developer/index.html"> - <topic label="Release Notes" href="doc/developer/changes.html"/> - </topic> - --> -</toc> - - diff --git a/org.eclipse.mylyn.help.ui/plugin.xml b/org.eclipse.mylyn.help.ui/plugin.xml deleted file mode 100644 index f3351c4e6..000000000 --- a/org.eclipse.mylyn.help.ui/plugin.xml +++ /dev/null @@ -1,53 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<?eclipse version="3.0"?> -<?eclipse version="3.0"?> -<plugin> - <extension - id="org.eclipse.mylar.helpDocs" - name="Mylar Help" - point="org.eclipse.help.toc"> - <toc - file="doc/toc.xml" - primary="true"> - </toc> - </extension> - - <!-- - <extension point="org.eclipse.ui.actionSets"> - <actionSet - id="org.eclipse.mylar.doc.actionSet" - label="Mylar Documentation" - visible="true"> - <action - class="org.eclipse.mylar.doc.internal.actions.ShowMylarLegendAction" - definitionId="org.eclipse.mylar.doc.legend.show" - icon="icons/etool16/icons-legend.gif" - id="org.eclipse.mylar.doc.legend.show.action" - label="Mylar UI Legend..." - menubarPath="help/helpStart" - style="push" - tooltip="Mylar UI Legend..."> - </action> - </actionSet> - </extension> - - <extension point="org.eclipse.ui.commands"> - <command - categoryId="org.eclipse.mylar.ui" - description="Show Mylar UI Legend" - id="org.eclipse.mylar.doc.legend.show" - name="Show Mylar UI Legend"> - </command> - </extension> - - <extension point="org.eclipse.ui.bindings"> - <key - sequence="M1+M2+M3+?" - contextId="org.eclipse.ui.globalScope" - commandId="org.eclipse.mylar.doc.legend.show" - schemeId ="org.eclipse.ui.defaultAcceleratorConfiguration"> - </key> - </extension> - --> - -</plugin> diff --git a/org.eclipse.mylyn.help.ui/src/org/eclipse/mylyn/doc/internal/dialogs/UiLegendDialog.java b/org.eclipse.mylyn.help.ui/src/org/eclipse/mylyn/doc/internal/dialogs/UiLegendDialog.java deleted file mode 100644 index fa72b0cba..000000000 --- a/org.eclipse.mylyn.help.ui/src/org/eclipse/mylyn/doc/internal/dialogs/UiLegendDialog.java +++ /dev/null @@ -1,139 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.doc.internal.dialogs; - -import org.eclipse.jface.dialogs.PopupDialog; -import org.eclipse.jface.layout.GridDataFactory; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.layout.RowLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.forms.events.HyperlinkAdapter; -import org.eclipse.ui.forms.events.HyperlinkEvent; -import org.eclipse.ui.forms.widgets.Form; -import org.eclipse.ui.forms.widgets.FormToolkit; -import org.eclipse.ui.forms.widgets.ImageHyperlink; -import org.eclipse.ui.forms.widgets.Section; - -/** - * @author Mik Kersten - */ -public class UiLegendDialog extends PopupDialog { - - private static final String LABEL = "Mylar UI Legend"; - - private FormToolkit toolkit; - - private Form form; - - private Rectangle bounds; - - private Composite sectionClient; - - public UiLegendDialog(Shell parent) { - super(parent, PopupDialog.INFOPOPUP_SHELLSTYLE | SWT.ON_TOP, false, false, false, false, null, null); - } - - protected Control createContents(Composite parent) { - getShell().setBackground(getShell().getDisplay().getSystemColor(SWT.COLOR_GRAY)); - return createDialogArea(parent); - } - - protected final Control createDialogArea(final Composite parent) { - - getShell().setText("Mylar UI Legend"); - - toolkit = new FormToolkit(parent.getDisplay()); - form = toolkit.createForm(parent); - form.getBody().setLayout(new GridLayout()); - - Section section = toolkit.createSection(form.getBody(), Section.TITLE_BAR); - - section.setText(LABEL); - section.setLayout(new GridLayout()); - - sectionClient = toolkit.createComposite(section); - sectionClient.setLayout(new GridLayout(2, false)); - - String descriptionText = "xxxxxxxxxxxxxxx"; - Label descriptionLabel = toolkit.createLabel(sectionClient, descriptionText); - GridDataFactory.fillDefaults().span(2, SWT.DEFAULT).applyTo(descriptionLabel); - - section.setClient(sectionClient); - - Composite buttonsComposite = toolkit.createComposite(section); - section.setTextClient(buttonsComposite); - buttonsComposite.setLayout(new RowLayout()); - buttonsComposite.setBackground(section.getTitleBarBackground()); - final ImageHyperlink closeHyperlink = toolkit.createImageHyperlink(buttonsComposite, SWT.NONE); - // closeHyperlink.setBackgroundMode(SWT.INHERIT_FORCE); - closeHyperlink.setBackground(section.getTitleBarBackground()); - closeHyperlink.setImage(TaskListImages.getImage(TaskListImages.NOTIFICATION_CLOSE)); - closeHyperlink.addHyperlinkListener(new HyperlinkAdapter() { - public void linkActivated(HyperlinkEvent e) { - close(); - } - }); - - form.pack(); - return parent; - } - - /** - * Initialize the shell's bounds. - */ - public void initializeBounds() { - getShell().setBounds(restoreBounds()); - } - - private Rectangle restoreBounds() { - bounds = form.getBounds(); - Rectangle maxBounds = null; - if (getShell() != null && !getShell().isDisposed()) - maxBounds = getShell().getDisplay().getClientArea(); - else { - // fallback - Display display = Display.getCurrent(); - if (display == null) - display = Display.getDefault(); - if (display != null && !display.isDisposed()) - maxBounds = display.getBounds(); - } - - if (bounds.width > -1 && bounds.height > -1) { - if (maxBounds != null) { - bounds.width = Math.min(bounds.width, maxBounds.width); - bounds.height = Math.min(bounds.height, maxBounds.height); - } - // Enforce an absolute minimal size - bounds.width = Math.max(bounds.width, 30); - bounds.height = Math.max(bounds.height, 30); - } - - if (bounds.x > -1 && bounds.y > -1 && maxBounds != null) { - bounds.x = Math.max(bounds.x, maxBounds.x); - bounds.y = Math.max(bounds.y, maxBounds.y); - - if (bounds.width > -1 && bounds.height > -1) { - bounds.x = maxBounds.width - bounds.width; - bounds.y = maxBounds.height - bounds.height; - } - } - return bounds; - } -} diff --git a/org.eclipse.mylyn.tasks.core/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.mylyn.tasks.core/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 398008f59..000000000 --- a/org.eclipse.mylyn.tasks.core/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,303 +0,0 @@ -#Mon Feb 13 11:20:13 PST 2006 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.5 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.autoboxing=ignore -org.eclipse.jdt.core.compiler.problem.deprecation=warning -org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled -org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled -org.eclipse.jdt.core.compiler.problem.discouragedReference=warning -org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore -org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning -org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning -org.eclipse.jdt.core.compiler.problem.forbiddenReference=error -org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning -org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning -org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore -org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore -org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore -org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning -org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning -org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning -org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore -org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning -org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore -org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled -org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning -org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled -org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore -org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning -org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning -org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning -org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore -org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore -org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled -org.eclipse.jdt.core.compiler.problem.unusedImport=warning -org.eclipse.jdt.core.compiler.problem.unusedLocal=warning -org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled -org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning -org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.5 -org.eclipse.jdt.core.formatter.align_type_members_on_columns=false -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_assignment=0 -org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 -org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 -org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 -org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 -org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_after_package=1 -org.eclipse.jdt.core.formatter.blank_lines_before_field=1 -org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 -org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 -org.eclipse.jdt.core.formatter.blank_lines_before_method=1 -org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 -org.eclipse.jdt.core.formatter.blank_lines_before_package=0 -org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 -org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.comment.clear_blank_lines=false -org.eclipse.jdt.core.formatter.comment.format_comments=true -org.eclipse.jdt.core.formatter.comment.format_header=false -org.eclipse.jdt.core.formatter.comment.format_html=true -org.eclipse.jdt.core.formatter.comment.format_source_code=true -org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true -org.eclipse.jdt.core.formatter.comment.indent_root_tags=true -org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert -org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert -org.eclipse.jdt.core.formatter.comment.line_length=80 -org.eclipse.jdt.core.formatter.compact_else_if=true -org.eclipse.jdt.core.formatter.continuation_indentation=2 -org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 -org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true -org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_empty_lines=false -org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true -org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false -org.eclipse.jdt.core.formatter.indentation.size=4 -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert -org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false -org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false -org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false -org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false -org.eclipse.jdt.core.formatter.lineSplit=120 -org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 -org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 -org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true -org.eclipse.jdt.core.formatter.tabulation.char=tab -org.eclipse.jdt.core.formatter.tabulation.size=4 -org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false diff --git a/org.eclipse.mylyn.tasks.core/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.mylyn.tasks.core/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index 092916a2d..000000000 --- a/org.eclipse.mylyn.tasks.core/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,6 +0,0 @@ -#Mon Feb 13 11:20:03 PST 2006 -eclipse.preferences.version=1 -formatter_profile=_Mylar based on Eclipse [built-in] -formatter_settings_version=10 -internal.default.compliance=default -org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\r\n * @return the ${bare_field_name}\r\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\r\n * @param ${param} the ${bare_field_name} to set\r\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/**\r\n * \r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author ${user}\r\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\r\n * \r\n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"></template><template autoinsert\="false" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">/*******************************************************************************\r\n * Copyright (c) 2004 - 2006 University Of British Columbia and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n *\r\n * Contributors\:\r\n * University Of British Columbia - initial API and implementation\r\n *******************************************************************************/\r\n\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\r\n${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ignore\r\n${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\r\n// ignore</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates> diff --git a/org.eclipse.mylyn.tasks.core/META-INF/MANIFEST.MF b/org.eclipse.mylyn.tasks.core/META-INF/MANIFEST.MF deleted file mode 100644 index c8c4fa07a..000000000 --- a/org.eclipse.mylyn.tasks.core/META-INF/MANIFEST.MF +++ /dev/null @@ -1,13 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Mylar Tasks Core Plug-in -Bundle-SymbolicName: org.eclipse.mylar.tasks.core;singleton:=true -Bundle-Version: 0.7.0 -Bundle-Localization: plugin -Eclipse-AutoStart: true -Bundle-Vendor: Eclipse.org -Bundle-RequiredExecutionEnvironment: J2SE-1.5 -Require-Bundle: org.eclipse.core.runtime, - org.eclipse.mylar.context.core -Export-Package: org.eclipse.mylar.internal.tasks.core, - org.eclipse.mylar.tasks.core diff --git a/org.eclipse.mylyn.tasks.core/plugin.xml b/org.eclipse.mylyn.tasks.core/plugin.xml deleted file mode 100644 index 5a5adfd94..000000000 --- a/org.eclipse.mylyn.tasks.core/plugin.xml +++ /dev/null @@ -1,29 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<?eclipse version="3.0"?> -<?eclipse version="3.0"?> -<plugin> - <!-- - <extension - point="org.eclipse.ui.workbench.texteditor.hyperlinkDetectors"> - <hyperlinkDetector class="org.eclipse.mylar.internal.bugs.java.BugzillaHyperLinkDetector"/> - </extension> - --> - -<!-- - <extension - point="org.eclipse.mylar.core.context"> - <structureBridge - activeSearchIcon="icons/elcl16/edge-ref-bug.gif" - activeSearchLabel="Bugzilla References" - class="org.eclipse.mylar.bugs.BugzillaStructureBridge" - name="Bugzilla Structure Bridge"/> - </extension> - - <extension - point="org.eclipse.mylar.ui.context"> - <uiBridge - class="org.eclipse.mylar.bugs.BugzillaUiBridge" - contentType="bugzilla"/> - </extension> ---> -</plugin> diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/HtmlStreamTokenizer.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/HtmlStreamTokenizer.java deleted file mode 100644 index 1afcc459e..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/HtmlStreamTokenizer.java +++ /dev/null @@ -1,1116 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.core; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.Reader; -import java.net.URL; -import java.text.ParseException; -import java.util.HashMap; - -public class HtmlStreamTokenizer { - - /** parser state */ - private State state; - - /** reader from which to parse the text */ - private BufferedReader in; - - /** base URL for resolving relative URLs */ - private URL base; - - /** buffer holding the text of the current token */ - private StringBuffer textBuffer; - - /** buffer holding whitespace preceding the current token */ - private StringBuffer whitespaceBuffer; - - /** - * holds a token that was read and then put back in the queue to be returned - * again on <code>nextToken</code> call - */ - private Token pushbackToken; - - /** - * holds a character that was read and then determined not to be part of the - * current token - */ - private int pushbackChar; - - /** current quote delimiter (single or double) */ - private int quoteChar; - - /** Allow class client to choose if tag attributes are escaped or not */ - private boolean escapeTagValues; - - /** - * Constructor. - * - * @param in - * reader for the HTML document to tokenize - * @param base - * URL for resolving relative URLs - */ - public HtmlStreamTokenizer(Reader in, URL base) { - textBuffer = new StringBuffer(); - whitespaceBuffer = new StringBuffer(); - pushbackChar = 0; - state = State.TEXT; - this.in = new BufferedReader(in); - this.base = base; - escapeTagValues = true; - } - - public void escapeTagAttributes(boolean value) { - escapeTagValues = value; - } - - /** - * Returns the next token from the stream. - */ - public Token nextToken() throws IOException, ParseException { - if (pushbackToken != null) { - Token token = pushbackToken; - pushbackToken = null; - return token; - } - - int closingComment = 0; - - textBuffer.setLength(0); - whitespaceBuffer.setLength(0); - do { - int ch; - if (pushbackChar != 0) { - ch = pushbackChar; - pushbackChar = 0; - } else { - ch = in.read(); - } - if (ch < 0) { - State oldState = state; - state = State.EOF; - if (textBuffer.length() > 0 && oldState == State.TEXT) { - return new Token(textBuffer, whitespaceBuffer, false); - } else { - return new Token(); - } - } - if (state == State.TEXT) { - if (ch == '<') { - state = State.TAG; - if (textBuffer.length() > 0) - return new Token(textBuffer, whitespaceBuffer, false); - } else if (Character.isWhitespace((char) ch)) { - pushbackChar = ch; - state = State.WS; - if (textBuffer.length() > 0) - return new Token(textBuffer, whitespaceBuffer, false); - } else { - textBuffer.append((char) ch); - } - } else if (state == State.WS) { - if (!Character.isWhitespace((char) ch)) { - pushbackChar = ch; - state = State.TEXT; - } else { - whitespaceBuffer.append((char) ch); - } - } else if (state == State.TAG) { - if (ch == '>') { - state = State.TEXT; - HtmlTag tag = new HtmlTag(base); - parseTag(textBuffer.toString(), tag, escapeTagValues); - return new Token(tag, whitespaceBuffer); - } - if (ch == '<' && textBuffer.length() == 0) { - textBuffer.append("<<"); - state = State.TEXT; - } else if (ch == '-' && textBuffer.length() == 2 && textBuffer.charAt(1) == '-' - && textBuffer.charAt(0) == '!') { - textBuffer.setLength(0); - state = State.COMMENT; - } else if (ch == '\'' || ch == '"') { - quoteChar = ch; - textBuffer.append((char) ch); - state = State.TAG_QUOTE; - } else { - textBuffer.append((char) ch); - } - } else if (state == State.TAG_QUOTE) { - if (ch == '>') { - pushbackChar = ch; - state = State.TAG; - } else { - textBuffer.append((char) ch); - if (ch == quoteChar) - state = State.TAG; - } - } else if (state == State.COMMENT) { - if (ch == '>' && closingComment >= 2) { - textBuffer.setLength(textBuffer.length() - 2); - closingComment = 0; - state = State.TEXT; - return new Token(textBuffer, whitespaceBuffer, true); - } - if (ch == '-') { - closingComment++; - } else { - closingComment = 0; - } - textBuffer.append((char) ch); - } - } while (true); - } - - /** - * Pushes the token back into the queue, to be returned by the subsequent - * call to <code>nextToken</code> - */ - public void pushback(Token token) { - pushbackToken = token; - } - - /** - * Parses an HTML tag out of a string of characters. - */ - private static void parseTag(String s, HtmlTag tag, boolean escapeValues) throws ParseException { - - int i = 0; - for (; i < s.length() && Character.isWhitespace(s.charAt(i)); i++) { - // just move forward - } - if (i == s.length()) - throw new ParseException("parse empty tag", 0); - - int start = i; - for (; i < s.length() && !Character.isWhitespace(s.charAt(i)); i++) { - // just move forward - } - tag.setTagName(s.substring(start, i)); - - for (; i < s.length() && Character.isWhitespace(s.charAt(i)); i++) { - // just move forward - } - if (i == s.length()) { - return; - } else { - parseAttributes(tag, s, i, escapeValues); - return; - } - } - - /** - * parses HTML tag attributes from a buffer and sets them in an HtmlTag - */ - private static void parseAttributes(HtmlTag tag, String s, int i, boolean escapeValues) throws ParseException { - while (i < s.length()) { - // skip whitespace - while (i < s.length() && Character.isWhitespace(s.charAt(i))) - i++; - - if (i == s.length()) - return; - - // read the attribute name -- the rule might be looser than the RFC - // specifies: - // everything up to a space or an equal sign is included - int start = i; - for (; i < s.length() && !Character.isWhitespace(s.charAt(i)) && s.charAt(i) != '='; i++) { - // just move forward - } - String attributeName = s.substring(start, i).toLowerCase(); - - if (attributeName.equals("/")) { - tag.setSelfTerminating(true); - continue; - } - - for (; i < s.length() && Character.isWhitespace(s.charAt(i)); i++) { - // just move forward - } - if (i == s.length() || s.charAt(i) != '=') { - // no attribute value - tag.setAttribute(attributeName, ""); - continue; - } - - // skip whitespace to the start of attribute value - for (i = i + 1; i < s.length() && Character.isWhitespace(s.charAt(i)); i++) { - // just move forward - } - if (i == s.length()) - return; - - // read the attribute value -- the rule for unquoted attribute value - // is - // looser than the one in Conolly's W3C 1996 lexical analyzer draft: - // everything - // is included up to the next space - String attributeValue; - if (s.charAt(i) == '"') { - start = ++i; - for (; i < s.length() && s.charAt(i) != '"'; i++) { - // just move forward - } - if (i == s.length()) - return; // shouldn't happen if input returned by nextToken - if (escapeValues) - attributeValue = unescape(s.substring(start, i)); - else - attributeValue = s.substring(start, i); - i++; - } else if (s.charAt(i) == '\'') { - start = ++i; - for (; i < s.length() && s.charAt(i) != '\''; i++) { - // just move forward - } - if (i == s.length()) - return; // shouldn't happen if input returned by nextToken - attributeValue = unescape(s.substring(start, i)); - i++; - } else { - start = i; - for (; i < s.length() && !Character.isWhitespace(s.charAt(i)); i++) { - // just move forward - } - attributeValue = s.substring(start, i); - } - tag.setAttribute(attributeName, attributeValue); - } - } - - /** - * Returns a string with HTML escapes changed into their corresponding - * characters. - */ - public static String unescape(String s) { - if (s.indexOf('&') == -1) { - return s; - } else { - StringBuffer sb = new StringBuffer(s); - unescape(sb); - return sb.toString(); - } - } - - /** - * Replaces (in-place) HTML escapes in a StringBuffer with their - * corresponding characters. - */ - public static StringBuffer unescape(StringBuffer sb) { - int i = 0; // index into the unprocessed section of the buffer - int j = 0; // index into the processed section of the buffer - - while (i < sb.length()) { - char ch = sb.charAt(i); - if (ch == '&') { - int start = i; - String escape = null; - for (i = i + 1; i < sb.length(); i++) { - ch = sb.charAt(i); - if (!Character.isLetterOrDigit(ch) && !(ch == '#' && i == (start + 1))) { - escape = sb.substring(start + 1, i); - break; - } - } - if (i == sb.length() && i != (start + 1)) { - escape = sb.substring(start + 1); - } - if (escape != null) { - Character character = parseReference(escape); - if (character != null) { - ch = character.charValue(); - } else { - // not an HTML escape; rewind - i = start; - ch = '&'; - } - } - } - sb.setCharAt(j, ch); - i++; - j++; - } - - sb.setLength(j); - return sb; - } - - /** - * Parses HTML character and entity references and returns the corresponding - * character. - */ - private static Character parseReference(String s) { - if (s.length() == 0) - return null; - - if (s.charAt(0) == '#') { - // character reference - if (s.length() == 1) - return null; - - try { - int value; - if (s.charAt(1) == 'x') { - // Hex reference - value = Integer.parseInt(s.substring(2), 16); - } else { - // Decimal reference - value = Integer.parseInt(s.substring(1)); - } - return new Character((char) value); - } catch (NumberFormatException e) { - return null; - } - } else { - return entities.get(s); - } - } - - /** - * Class for current token. - */ - public static class Token { - public static final Type EOF = new Type(); - - public static final Type TEXT = new Type(); - - public static final Type TAG = new Type(); - - public static final Type COMMENT = new Type(); - - /** token's type */ - private Type type; - - /** token's value */ - private Object value; - - /** whitespace preceding the token */ - private StringBuffer whitespace; - - /** - * Constructor for the EOF token. - */ - protected Token() { - type = EOF; - value = null; - whitespace = null; - } - - /** - * Constructor for the HTML tag tokens. - */ - protected Token(HtmlTag tag, StringBuffer whitespace) { - type = TAG; - value = tag; - this.whitespace = whitespace; - } - - /** - * Constructor for regular text and comments. - */ - protected Token(StringBuffer text, StringBuffer whitespace, boolean comment) { - if (comment) { - type = COMMENT; - } else { - type = TEXT; - } - this.value = text; - this.whitespace = whitespace; - } - - /** - * Returns the token's type. - */ - public Type getType() { - return type; - } - - /** - * Returns the whitespace preceding the token. - */ - public StringBuffer getWhitespace() { - return whitespace; - } - - /** - * Returns the token's value. This is an HtmlTag for tokens of type - * <code>TAG</code> and a StringBuffer for tokens of type - * <code>TEXT</code> and <code>COMMENT</code>. For tokens of type - * <code>EOF</code>, the value is <code>null</code>. - */ - public Object getValue() { - return value; - } - - /** - * Returns the string representation of the token, including the - * preceding whitespace. - */ - @Override - public String toString() { - StringBuffer sb = new StringBuffer(); - if (whitespace != null) { - sb.append(whitespace); - } - if (value != null) { - if (type == TAG) { - // sb.append('<'); - } else if (type == COMMENT) { - sb.append("<!--"); - } - sb.append(value); - if (type == TAG) { - // if(value instanceof HtmlTag) { - // HtmlTag htmlTag = (HtmlTag)value; - // if(htmlTag.getTagName().startsWith("?xml")) { - // sb.append("?>"); - // } - // } else { - // sb.append('>'); - - } else if (type == COMMENT) { - sb.append("-->"); - } - - } - return sb.toString(); - } - - /** - * Private enum class for token type. - */ - private static class Type { - private Type() { - // don't need to do anything - } - } - } - - /** - * Enum class for parser state. - */ - private static class State { - static final State EOF = new State(); - - static final State COMMENT = new State(); - - static final State TEXT = new State(); - - static final State TAG = new State(); - - static final State WS = new State(); - - static final State TAG_QUOTE = new State(); - - private State() { - // don't need to do anything - } - } - - /** names and values of HTML entity references */ - private static HashMap<String, Character> entities; - - /* - * Based on ISO 8879. - * - * Portions (c) International Organization for Standardization 1986 - * Permission to copy in any form is granted for use with conforming SGML - * systems and applications as defined in ISO 8879, provided this notice is - * included in all copies. - * - */ - static { - entities = new HashMap<String, Character>(); - entities.put("nbsp", new Character('\240')); // no-break - // space = - // non-breaking - // space - entities.put("iexcl", new Character('\241')); // inverted - // exclamation - // mark - entities.put("cent", new Character('\242')); // cent sign - entities.put("pound", new Character('\243')); // pound - // sign - entities.put("curren", new Character('\244')); // currency - // sign - entities.put("yen", new Character('\245')); // yen sign = - // yuan sign - entities.put("brvbar", new Character('\246')); // broken - // bar = - // broken - // vertical - // bar - entities.put("sect", new Character('\247')); // section - // sign - entities.put("uml", new Character('\250')); // diaeresis = - // spacing - // diaeresis - entities.put("copy", new Character('\251')); // copyright - // sign - entities.put("ordf", new Character('\252')); // feminine - // ordinal - // indicator - entities.put("laquo", new Character('\253')); // left-pointing - // double - // angle - // quotation - // mark = - // left - // pointing - // guillemet - entities.put("not", new Character('\254')); // not sign - entities.put("shy", new Character('\255')); // soft hyphen = - // discretionary - // hyphen - entities.put("reg", new Character('\256')); // registered - // sign = - // registered - // trade mark - // sign - entities.put("macr", new Character('\257')); // macron = - // spacing - // macron = - // overline - // = APL - // overbar - entities.put("deg", new Character('\260')); // degree sign - entities.put("plusmn", new Character('\261')); // plus-minus - // sign = - // plus-or-minus - // sign - entities.put("sup2", new Character('\262')); // superscript - // two = - // superscript - // digit two - // = squared - entities.put("sup3", new Character('\263')); // superscript - // three = - // superscript - // digit - // three = - // cubed - entities.put("acute", new Character('\264')); // acute - // accent = - // spacing - // acute - entities.put("micro", new Character('\265')); // micro - // sign - entities.put("para", new Character('\266')); // pilcrow - // sign = - // paragraph - // sign - entities.put("middot", new Character('\267')); // middle - // dot = - // Georgian - // comma = - // Greek - // middle - // dot - entities.put("cedil", new Character('\270')); // cedilla = - // spacing - // cedilla - entities.put("sup1", new Character('\271')); // superscript - // one = - // superscript - // digit one - entities.put("ordm", new Character('\272')); // masculine - // ordinal - // indicator - entities.put("raquo", new Character('\273')); // right-pointing - // double - // angle - // quotation - // mark = - // right - // pointing - // guillemet - entities.put("frac14", new Character('\274')); // vulgar - // fraction - // one - // quarter = - // fraction - // one - // quarter - entities.put("frac12", new Character('\275')); // vulgar - // fraction - // one half - // = - // fraction - // one half - entities.put("frac34", new Character('\276')); // vulgar - // fraction - // three - // quarters - // = - // fraction - // three - // quarters - entities.put("iquest", new Character('\277')); // inverted - // question - // mark = - // turned - // question - // mark - entities.put("Agrave", new Character('\300')); // latin - // capital - // letter A - // with - // grave = - // latin - // capital - // letter A - // grave - entities.put("Aacute", new Character('\301')); // latin - // capital - // letter A - // with - // acute - entities.put("Acirc", new Character('\302')); // latin - // capital - // letter A - // with - // circumflex - entities.put("Atilde", new Character('\303')); // latin - // capital - // letter A - // with - // tilde - entities.put("Auml", new Character('\304')); // latin - // capital - // letter A - // with - // diaeresis - entities.put("Aring", new Character('\305')); // latin - // capital - // letter A - // with ring - // above = - // latin - // capital - // letter A - // ring - entities.put("AElig", new Character('\306')); // latin - // capital - // letter AE - // = latin - // capital - // ligature - // AE - entities.put("Ccedil", new Character('\307')); // latin - // capital - // letter C - // with - // cedilla - entities.put("Egrave", new Character('\310')); // latin - // capital - // letter E - // with - // grave - entities.put("Eacute", new Character('\311')); // latin - // capital - // letter E - // with - // acute - entities.put("Ecirc", new Character('\312')); // latin - // capital - // letter E - // with - // circumflex - entities.put("Euml", new Character('\313')); // latin - // capital - // letter E - // with - // diaeresis - entities.put("Igrave", new Character('\314')); // latin - // capital - // letter I - // with - // grave - entities.put("Iacute", new Character('\315')); // latin - // capital - // letter I - // with - // acute - entities.put("Icirc", new Character('\316')); // latin - // capital - // letter I - // with - // circumflex - entities.put("Iuml", new Character('\317')); // latin - // capital - // letter I - // with - // diaeresis - entities.put("ETH", new Character('\320')); // latin capital - // letter ETH - entities.put("Ntilde", new Character('\321')); // latin - // capital - // letter N - // with - // tilde - entities.put("Ograve", new Character('\322')); // latin - // capital - // letter O - // with - // grave - entities.put("Oacute", new Character('\323')); // latin - // capital - // letter O - // with - // acute - entities.put("Ocirc", new Character('\324')); // latin - // capital - // letter O - // with - // circumflex - entities.put("Otilde", new Character('\325')); // latin - // capital - // letter O - // with - // tilde - entities.put("Ouml", new Character('\326')); // latin - // capital - // letter O - // with - // diaeresis - entities.put("times", new Character('\327')); // multiplication - // sign - entities.put("Oslash", new Character('\330')); // latin - // capital - // letter O - // with - // stroke = - // latin - // capital - // letter O - // slash - entities.put("Ugrave", new Character('\331')); // latin - // capital - // letter U - // with - // grave - entities.put("Uacute", new Character('\332')); // latin - // capital - // letter U - // with - // acute - entities.put("Ucirc", new Character('\333')); // latin - // capital - // letter U - // with - // circumflex - entities.put("Uuml", new Character('\334')); // latin - // capital - // letter U - // with - // diaeresis - entities.put("Yacute", new Character('\335')); // latin - // capital - // letter Y - // with - // acute - entities.put("THORN", new Character('\336')); // latin - // capital - // letter - // THORN - entities.put("szlig", new Character('\337')); // latin - // small - // letter - // sharp s = - // ess-zed - entities.put("agrave", new Character('\340')); // latin - // small - // letter a - // with - // grave = - // latin - // small - // letter a - // grave - entities.put("aacute", new Character('\341')); // latin - // small - // letter a - // with - // acute - entities.put("acirc", new Character('\342')); // latin - // small - // letter a - // with - // circumflex - entities.put("atilde", new Character('\343')); // latin - // small - // letter a - // with - // tilde - entities.put("auml", new Character('\344')); // latin - // small - // letter a - // with - // diaeresis - entities.put("aring", new Character('\345')); // latin - // small - // letter a - // with ring - // above = - // latin - // small - // letter a - // ring - entities.put("aelig", new Character('\346')); // latin - // small - // letter ae - // = latin - // small - // ligature - // ae - entities.put("ccedil", new Character('\347')); // latin - // small - // letter c - // with - // cedilla - entities.put("egrave", new Character('\350')); // latin - // small - // letter e - // with - // grave - entities.put("eacute", new Character('\351')); // latin - // small - // letter e - // with - // acute - entities.put("ecirc", new Character('\352')); // latin - // small - // letter e - // with - // circumflex - entities.put("euml", new Character('\353')); // latin - // small - // letter e - // with - // diaeresis - entities.put("igrave", new Character('\354')); // latin - // small - // letter i - // with - // grave - entities.put("iacute", new Character('\355')); // latin - // small - // letter i - // with - // acute - entities.put("icirc", new Character('\356')); // latin - // small - // letter i - // with - // circumflex - entities.put("iuml", new Character('\357')); // latin - // small - // letter i - // with - // diaeresis - entities.put("eth", new Character('\360')); // latin small - // letter eth - entities.put("ntilde", new Character('\361')); // latin - // small - // letter n - // with - // tilde - entities.put("ograve", new Character('\362')); // latin - // small - // letter o - // with - // grave - entities.put("oacute", new Character('\363')); // latin - // small - // letter o - // with - // acute - entities.put("ocirc", new Character('\364')); // latin - // small - // letter o - // with - // circumflex - entities.put("otilde", new Character('\365')); // latin - // small - // letter o - // with - // tilde - entities.put("ouml", new Character('\366')); // latin - // small - // letter o - // with - // diaeresis - entities.put("divide", new Character('\367')); // division - // sign - entities.put("oslash", new Character('\370')); // latin - // small - // letter o - // with - // stroke = - // latin - // small - // letter o - // slash - entities.put("ugrave", new Character('\371')); // latin - // small - // letter u - // with - // grave - entities.put("uacute", new Character('\372')); // latin - // small - // letter u - // with - // acute - entities.put("ucirc", new Character('\373')); // latin - // small - // letter u - // with - // circumflex - entities.put("uuml", new Character('\374')); // latin - // small - // letter u - // with - // diaeresis - entities.put("yacute", new Character('\375')); // latin - // small - // letter y - // with - // acute - entities.put("thorn", new Character('\376')); // latin - // small - // letter - // thorn - entities.put("yuml", new Character('\377')); // latin - // small - // letter y - // with - // diaeresis - - // Special characters - entities.put("quot", new Character('\42')); // quotation - // mark = APL - // quote - entities.put("amp", new Character('\46')); // ampersand - entities.put("lt", new Character('\74')); // less-than - // sign - entities.put("gt", new Character('\76')); // greater-than - // sign - // Latin Extended-A - entities.put("OElig", new Character('\u0152')); // latin - // capital - // ligature - // OE - entities.put("oelig", new Character('\u0153')); // latin - // small - // ligature - // oe, - // ligature - // is a - // misnomer, - // this is a - // separate - // character - // in some - // languages - entities.put("Scaron", new Character('\u0160')); // latin - // capital - // letter - // S - // with - // caron - entities.put("scaron", new Character('\u0161')); // latin - // small - // letter - // s - // with - // caron - entities.put("Yuml", new Character('\u0178')); // latin - // capital - // letter Y - // with - // diaeresis - // Spacing Modifier Letters - entities.put("circ", new Character('\u02c6')); // modifier - // letter - // circumflex - // accent - entities.put("tilde", new Character('\u02dc')); // small - // tilde - // General punctuation - entities.put("ensp", new Character('\u2002')); // en space - entities.put("emsp", new Character('\u2003')); // em space - entities.put("thinsp", new Character('\u2009')); // thin - // space - entities.put("zwnj", new Character('\u200c')); // zero - // width - // non-joiner - entities.put("zwj", new Character('\u200d')); // zero - // width - // joiner - entities.put("lrm", new Character('\u200e')); // left-to-right - // mark - entities.put("rlm", new Character('\u200f')); // right-to-left - // mark - entities.put("ndash", new Character('\u2013')); // en dash - entities.put("mdash", new Character('\u2014')); // em dash - entities.put("lsquo", new Character('\u2018')); // left - // single - // quotation - // mark - entities.put("rsquo", new Character('\u2019')); // right - // single - // quotation - // mark - entities.put("sbquo", new Character('\u201a')); // single - // low-9 - // quotation - // mark - entities.put("ldquo", new Character('\u201c')); // left - // double - // quotation - // mark - entities.put("rdquo", new Character('\u201d')); // right - // double - // quotation - // mark - entities.put("bdquo", new Character('\u201e')); // double - // low-9 - // quotation - // mark - entities.put("dagger", new Character('\u2020')); // dagger - entities.put("Dagger", new Character('\u2021')); // double - // dagger - entities.put("permil", new Character('\u2030')); // per - // mille - // sign - entities.put("lsaquo", new Character('\u2039')); // single - // left-pointing - // angle - // quotation - // mark, - // not - // yet - // standardized - entities.put("rsaquo", new Character('\u203a')); // single - // right-pointing - // angle - // quotation - // mark, - // not - // yet - // standardized - entities.put("euro", new Character('\u20ac')); // euro sign - } -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/HtmlTag.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/HtmlTag.java deleted file mode 100644 index 1588eb46c..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/HtmlTag.java +++ /dev/null @@ -1,364 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.core; - -import java.net.URL; -import java.text.ParseException; -import java.util.HashMap; -import java.util.Iterator; -import javax.swing.text.html.HTML.Tag; - -/** - * Class representing an HTML (3.2) tag and its attributes. - */ -public class HtmlTag { - /** tag's name */ - private String tagName; - - /** tag type enum */ - private Tag tagType; - - /** true if the tag is a closing tag */ - private boolean isEndTag; - - /** tag's attributes (keys are lowercase attribute names) */ - private HashMap<String, String> attributes; - - /** tag's base url */ - private URL baseUrl; - - /** tag is self terminated */ - private boolean selfTerminating; - - /** - * Basic constructor. The tag is uninitialized. - */ - public HtmlTag() { - tagName = null; - tagType = Type.UNKNOWN; - isEndTag = false; - attributes = new HashMap<String, String>(); - baseUrl = null; - } - - /** - * Copy constructor. - */ - @SuppressWarnings("unchecked") - public HtmlTag(HtmlTag htmltag) { - tagName = null; - tagType = Type.UNKNOWN; - isEndTag = false; - attributes = new HashMap<String, String>(); - tagName = htmltag.tagName; - baseUrl = htmltag.baseUrl; - tagType = htmltag.tagType; - isEndTag = htmltag.isEndTag; - attributes = (HashMap) htmltag.attributes.clone(); - } - - /** - * Constructor. - */ - public HtmlTag(String s) throws ParseException { - attributes = new HashMap<String, String>(); - setTagName(s); - baseUrl = null; - } - - /** - * Constructor creating an otherwise empty tag, but with a given base url. - */ - public HtmlTag(URL url) { - tagName = null; - tagType = Type.UNKNOWN; - isEndTag = false; - attributes = new HashMap<String, String>(); - baseUrl = url; - } - - /** - * Returns the tag's type (linked to the tag's name). - */ - public Tag getTagType() { - return tagType; - } - - /** - * Returns the tag's name (e.g., "HEAD", "P", etc.). - */ - public String getTagName() { - return tagName; - } - - /** - * Sets the tag's name and type, if known. - * - * @throws IllegalArgumentException - * if the argument is <code>null</code> or empty string - */ - public void setTagName(String s) throws IllegalArgumentException { - if (s == null || s.length() == 0) - throw new IllegalArgumentException("Empty tag name"); - if (s.charAt(0) == '/') { - isEndTag = true; - s = s.substring(1); - } - if (s.length() == 0) - throw new IllegalArgumentException("Empty tag name"); - tagName = s; - tagType = tags.get(s.toUpperCase()); - if (tagType == null) { - tagType = Type.UNKNOWN; - } - } - - /** - * Returns <code>true</code> if the tag is a closing tag. - */ - public boolean isEndTag() { - return isEndTag; - } - - /** - * Returns the value of a tag's attribute as an integer. - */ - public int getIntAttribute(String s) throws NumberFormatException { - return Integer.parseInt(getAttribute(s)); - } - - /** - * Returns the value of a tag's attribute, or NULL if it doesn't exist. - */ - public String getAttribute(String s) { - return attributes.get(s); - } - - /** - * Returns <code>true</code> if the tag contains attribute with the given - * name. - */ - public boolean hasAttribute(String s) { - return getAttribute(s) != null; - } - - /** - * Sets the value of a tag's attribute. - */ - public void setAttribute(String name, String value) { - attributes.put(name.toLowerCase(), value); - } - - public StringBuffer getURLs() { - StringBuffer sb = new StringBuffer(); - - Iterator<String> attributeNames = attributes.keySet().iterator(); - Iterator<String> attributeValues = attributes.values().iterator(); - while (attributeNames.hasNext()) { - String attributeName = attributeNames.next(); - if (attributeName.compareTo("href") == 0 || attributeName.compareTo("src") == 0) { - String target = attributeValues.next(); - if (!target.endsWith(".jpg") && !target.endsWith(".gif") && !target.endsWith(".css") - && !target.endsWith(".js") && !target.startsWith("mailto") && target.lastIndexOf("#") == -1 - && target.length() > 0) { - - for (int i = 0; i < target.length(); i++) { - char ch = target.charAt(i); - if (!Character.isWhitespace(ch)) { - if (i > 0) - target = target.substring(i + 1); - break; - } - } - target = target.replace('\\', '/'); - - if (target.startsWith("news:") || (target.indexOf("://") != -1 && target.length() >= 7)) { - // Absolute URL - if (target.substring(0, 7).compareToIgnoreCase("http://") == 0) - sb.append(target); - } else { - // Relative URL - - String baseDir = baseUrl.getPath(); - int lastSep = -1; - for (int i = 0; i < baseDir.length(); i++) { - char ch = baseDir.charAt(i); - if (ch == '/') - lastSep = i; - else if (ch == '?') - break; - } - if (lastSep >= 0) - baseDir = baseDir.substring(0, lastSep); - while (baseDir.length() > 1 && baseDir.endsWith("/.")) { - baseDir = baseDir.substring(0, baseDir.length() - 2); - } - - if (target.startsWith("//")) { - sb.append(baseUrl.getProtocol() + ":" + target); - } else if (target.startsWith("/")) { - sb.append(baseUrl.getProtocol() + "://" + baseUrl.getHost() + target); - } else { - while (target.startsWith("../")) { - if (baseDir.length() > 0) { - // can't go above root - baseDir = baseDir.substring(0, baseDir.lastIndexOf("/")); - } - target = target.substring(3); - } - sb.append(baseUrl.getProtocol() + "://" + baseUrl.getHost() + baseDir + "/" + target); - } - } - } - } else { - attributeValues.next(); - } - } - - return sb; - } - - @Override - public String toString() { - StringBuffer sb = new StringBuffer(); - sb.append('<'); - if (isEndTag) - sb.append('/'); - sb.append(tagName); - Iterator<String> keys = attributes.keySet().iterator(); - Iterator<String> values = attributes.values().iterator(); - while (keys.hasNext()) { - String name = keys.next(); - sb.append(' '); - sb.append(name); - String value = values.next(); - if (value.length() > 0) { - sb.append("=\""); - sb.append(value); - sb.append('"'); - } else { - sb.append("=\"\""); - } - } - if(selfTerminating) { - sb.append('/'); - } - sb.append('>'); - - return sb.toString(); - } - - /** - * Enum class for tag types. - */ - public static class Type extends Tag { - public static final Tag UNKNOWN = new Tag(); - - public static final Tag THEAD = new Type("THEAD"); - - public static final Tag DOCTYPE = new Type("!DOCTYPE"); - - public static final Tag LABEL = new Type("LABEL"); - - private Type(String name) { - super(name); - } - } - - private static HashMap<String, Tag> tags; - static { - tags = new HashMap<String, Tag>(); - tags.put("A", Tag.A); - tags.put("ADDRESS", Tag.ADDRESS); - tags.put("APPLET", Tag.APPLET); - tags.put("AREA", Tag.AREA); - tags.put("B", Tag.B); - tags.put("BASE", Tag.BASE); - tags.put("BASEFONT", Tag.BASEFONT); - tags.put("BIG", Tag.BIG); - tags.put("BLOCKQUOTE", Tag.BLOCKQUOTE); - tags.put("BODY", Tag.BODY); - tags.put("BR", Tag.BR); - tags.put("CAPTION", Tag.CAPTION); - tags.put("CENTER", Tag.CENTER); - tags.put("CITE", Tag.CITE); - tags.put("CODE", Tag.CODE); - tags.put("DD", Tag.DD); - tags.put("DFN", Tag.DFN); - tags.put("DIR", Tag.DIR); - tags.put("DIV", Tag.DIV); - tags.put("DL", Tag.DL); - tags.put("!DOCTYPE", Type.DOCTYPE); - tags.put("DT", Tag.DT); - tags.put("EM", Tag.EM); - tags.put("FONT", Tag.FONT); - tags.put("FORM", Tag.FORM); - tags.put("FRAME", Tag.FRAME); - tags.put("FRAMESET", Tag.FRAMESET); - tags.put("H1", Tag.H1); - tags.put("H2", Tag.H2); - tags.put("H3", Tag.H3); - tags.put("H4", Tag.H4); - tags.put("H5", Tag.H5); - tags.put("H6", Tag.H6); - tags.put("HEAD", Tag.HEAD); - tags.put("HTML", Tag.HTML); - tags.put("HR", Tag.HR); - tags.put("I", Tag.I); - tags.put("IMG", Tag.IMG); - tags.put("INPUT", Tag.INPUT); - tags.put("ISINDEX", Tag.ISINDEX); - tags.put("KBD", Tag.KBD); - tags.put("LI", Tag.LI); - tags.put("LABEL", Type.LABEL); - tags.put("LINK", Tag.LINK); - tags.put("MAP", Tag.MAP); - tags.put("MENU", Tag.MENU); - tags.put("META", Tag.META); - tags.put("NOFRAMES", Tag.NOFRAMES); - tags.put("OBJECT", Tag.OBJECT); - tags.put("OL", Tag.OL); - tags.put("OPTION", Tag.OPTION); - tags.put("P", Tag.P); - tags.put("PARAM", Tag.PARAM); - tags.put("PRE", Tag.PRE); - tags.put("S", Tag.S); - tags.put("SAMP", Tag.SAMP); - tags.put("SCRIPT", Tag.SCRIPT); - tags.put("SELECT", Tag.SELECT); - tags.put("SMALL", Tag.SMALL); - tags.put("STRONG", Tag.STRONG); - tags.put("STYLE", Tag.STYLE); - tags.put("SUB", Tag.SUB); - tags.put("SUP", Tag.SUP); - tags.put("TABLE", Tag.TABLE); - tags.put("TD", Tag.TD); - tags.put("TEXTAREA", Tag.TEXTAREA); - tags.put("TH", Tag.TH); - tags.put("THEAD", Type.THEAD); - tags.put("TITLE", Tag.TITLE); - tags.put("TR", Tag.TR); - tags.put("TT", Tag.TT); - tags.put("U", Tag.U); - tags.put("UL", Tag.UL); - tags.put("VAR", Tag.VAR); - } - - public void setSelfTerminating(boolean terminating) { - this.selfTerminating = terminating; - - } - - public boolean isSelfTerminating() { - return selfTerminating; - } -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/RepositoryTrustManager.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/RepositoryTrustManager.java deleted file mode 100644 index aca5d6e9f..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/RepositoryTrustManager.java +++ /dev/null @@ -1,58 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.core; - -import javax.net.ssl.X509TrustManager; - -/** - * TrustAll class implements X509TrustManager to access all https servers with - * signed and unsigned certificates. - */ -public class RepositoryTrustManager implements X509TrustManager { - // seems to be no purpose - public boolean checkClientTrusted(java.security.cert.X509Certificate[] chain) { - return true; - } - - // seems to be no purpose - public boolean isServerTrusted(java.security.cert.X509Certificate[] chain) { - return true; - } - - // seems to be no purpose - public boolean isClientTrusted(java.security.cert.X509Certificate[] chain) { - return true; - } - - /** - * @see javax.net.ssl.X509TrustManager#getAcceptedIssuers() - */ - public java.security.cert.X509Certificate[] getAcceptedIssuers() { - return null; - } - - /** - * @see javax.net.ssl.X509TrustManager#checkClientTrusted(java.security.cert.X509Certificate[], - * java.lang.String) - */ - public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) { - // don't need to do any checks - } - - /** - * @see javax.net.ssl.X509TrustManager#checkServerTrusted(java.security.cert.X509Certificate[], - * java.lang.String) - */ - public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) { - // don't need to do any checks - } -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/SaxRepositoriesContentHandler.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/SaxRepositoriesContentHandler.java deleted file mode 100644 index 072b8ae85..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/SaxRepositoriesContentHandler.java +++ /dev/null @@ -1,62 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.core; - -import java.util.HashSet; -import java.util.Set; - -import org.eclipse.mylar.internal.context.core.util.XmlStringConverter; -import org.eclipse.mylar.tasks.core.IRepositoryConstants; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; -import org.xml.sax.helpers.DefaultHandler; - -/** - * Adapted from SaxContextContentHandler - * - * @author Rob Elves - */ -public class SaxRepositoriesContentHandler extends DefaultHandler { - - - static final String ATTRIBUTE_INTERACTION_EVENT = "InteractionEvent"; - - private Set<TaskRepository> taskRepositories = new HashSet<TaskRepository>(); - - @Override - public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { - try { - if (localName.equals(TaskRepositoriesExternalizer.ELEMENT_TASK_REPOSITORY) && attributes != null) { - String kind = XmlStringConverter.convertXmlToString(attributes - .getValue(IRepositoryConstants.PROPERTY_KIND)); - String url = XmlStringConverter.convertXmlToString(attributes - .getValue(IRepositoryConstants.PROPERTY_URL)); - if (kind != null && kind.length() > 0 && url != null && url.length() > 0) { - TaskRepository repository = new TaskRepository(kind, url); - for (int index = 0; index < attributes.getLength(); index++) { - String key = XmlStringConverter.convertXmlToString(attributes.getLocalName(index)); - String value = XmlStringConverter.convertXmlToString(attributes.getValue(index)); - repository.setProperty(key, value); - } - taskRepositories.add(repository); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - - } - - public Set<TaskRepository> getRepositories() { - return taskRepositories; - } -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/SaxRepositoriesWriter.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/SaxRepositoriesWriter.java deleted file mode 100644 index 336582edb..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/SaxRepositoriesWriter.java +++ /dev/null @@ -1,180 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.core; - -import java.io.IOException; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.Collection; - -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.sax.SAXSource; -import javax.xml.transform.stream.StreamResult; - -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.context.core.util.XmlStringConverter; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.xml.sax.ContentHandler; -import org.xml.sax.DTDHandler; -import org.xml.sax.EntityResolver; -import org.xml.sax.ErrorHandler; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import org.xml.sax.SAXNotRecognizedException; -import org.xml.sax.SAXNotSupportedException; -import org.xml.sax.XMLReader; -import org.xml.sax.helpers.AttributesImpl; - -/** - * Adapted from SaxContextWriter - * - * @author Rob Elves - */ -public class SaxRepositoriesWriter { - - private OutputStream outputStream; - - public void setOutputStream(OutputStream outputStream) { - this.outputStream = outputStream; - } - - public void writeRepositoriesToStream(Collection<TaskRepository> repositories) throws IOException { - if (outputStream == null) { - IOException ioe = new IOException("OutputStream not set"); - throw ioe; - } - - try { - Transformer transformer = TransformerFactory.newInstance().newTransformer(); - transformer.transform( - new SAXSource(new RepositoriesWriter(), new TaskRepositoriesInputSource(repositories)), - new StreamResult(outputStream)); - } catch (TransformerException e) { - MylarStatusHandler.fail(e, "could not write repositories", false); - throw new IOException(e.getMessage()); - } - - } - - private static class TaskRepositoriesInputSource extends InputSource { - private Collection<TaskRepository> repositories; - - public TaskRepositoriesInputSource(Collection<TaskRepository> repositories) { - this.repositories = repositories; - } - - public Collection<TaskRepository> getRepositories() { - return this.repositories; - } - - } - - private static class RepositoriesWriter implements XMLReader { - -// private static final String ELEMENT_TASK_REPOSITORIES = "TaskRepositories"; -// -// public static final String ELEMENT_TASK_REPOSITORY = "TaskRepository"; -// -// private static final String ATTRIBUTE_VERSION = "xmlVersion"; - -// private static final String ATTRIBUTE_URL = "Url"; -// -// private static final String ATTRIBUTE_KIND = "Kind"; - - private ContentHandler handler; - - private ErrorHandler errorHandler; - - public boolean getFeature(String name) throws SAXNotRecognizedException, SAXNotSupportedException { - return false; - } - - public void setFeature(String name, boolean value) throws SAXNotRecognizedException, SAXNotSupportedException { - - } - - public Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException { - return null; - } - - public void setProperty(String name, Object value) throws SAXNotRecognizedException, SAXNotSupportedException { - } - - public void setEntityResolver(EntityResolver resolver) { - } - - public EntityResolver getEntityResolver() { - return null; - } - - public void setDTDHandler(DTDHandler handler) { - } - - public DTDHandler getDTDHandler() { - return null; - } - - public void setContentHandler(ContentHandler handler) { - this.handler = handler; - - } - - public ContentHandler getContentHandler() { - return handler; - } - - public void setErrorHandler(ErrorHandler handler) { - this.errorHandler = handler; - - } - - public ErrorHandler getErrorHandler() { - return errorHandler; - } - - public void parse(InputSource input) throws IOException, SAXException { - if (!(input instanceof TaskRepositoriesInputSource)) { - throw new SAXException("Can only parse writable input sources"); - } - - Collection<TaskRepository> repositories = ((TaskRepositoriesInputSource) input).getRepositories(); - - handler.startDocument(); - AttributesImpl rootAttributes = new AttributesImpl(); - rootAttributes.addAttribute("", TaskRepositoriesExternalizer.ATTRIBUTE_VERSION, TaskRepositoriesExternalizer.ATTRIBUTE_VERSION, "", "1"); - - handler.startElement("", TaskRepositoriesExternalizer.ELEMENT_TASK_REPOSITORIES, TaskRepositoriesExternalizer.ELEMENT_TASK_REPOSITORIES, rootAttributes); - - for (TaskRepository repository : new ArrayList<TaskRepository>(repositories)) { - - AttributesImpl ieAttributes = new AttributesImpl(); - for (String key : repository.getProperties().keySet()) { - ieAttributes.addAttribute("", key, key, "", XmlStringConverter.convertToXmlString(repository - .getProperties().get(key))); - } - - handler.startElement("", TaskRepositoriesExternalizer.ELEMENT_TASK_REPOSITORY, TaskRepositoriesExternalizer.ELEMENT_TASK_REPOSITORY, ieAttributes); - handler.endElement("", TaskRepositoriesExternalizer.ELEMENT_TASK_REPOSITORY, TaskRepositoriesExternalizer.ELEMENT_TASK_REPOSITORY); - } - handler.endElement("", TaskRepositoriesExternalizer.ELEMENT_TASK_REPOSITORIES, TaskRepositoriesExternalizer.ELEMENT_TASK_REPOSITORIES); - - handler.endDocument(); - } - - public void parse(String systemId) throws IOException, SAXException { - throw new SAXException("Can only parse writable input sources"); - } - - } -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/SslProtocolSocketFactory.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/SslProtocolSocketFactory.java deleted file mode 100644 index 0e95a6970..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/SslProtocolSocketFactory.java +++ /dev/null @@ -1,67 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.core; - -import java.io.IOException; -import java.net.InetAddress; -import java.net.InetSocketAddress; -import java.net.Socket; -import java.net.UnknownHostException; - -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; - -import org.apache.commons.httpclient.ConnectTimeoutException; -import org.apache.commons.httpclient.params.HttpConnectionParams; -import org.apache.commons.httpclient.protocol.ProtocolSocketFactory; -import org.eclipse.mylar.context.core.MylarStatusHandler; - -/** - * @author Nathan Hapke - */ -public class SslProtocolSocketFactory implements ProtocolSocketFactory { - - private SSLContext sslContext; - - private SSLContext getSslContext() { - if (sslContext == null) { - try { - sslContext = SSLContext.getInstance("SSL"); - sslContext.init(null, new TrustManager[] { new RepositoryTrustManager() }, null); - } catch (Exception e) { - MylarStatusHandler.log(e, "could not get SSL context"); - } - } - return sslContext; - } - - public Socket createSocket(String remoteHost, int remotePort) throws IOException, UnknownHostException { - return getSslContext().getSocketFactory().createSocket(remoteHost, remotePort); - } - - public Socket createSocket(String remoteHost, int remotePort, InetAddress clientHost, int clientPort) - throws IOException, UnknownHostException { - return getSslContext().getSocketFactory().createSocket(remoteHost, remotePort, clientHost, clientPort); - } - - public Socket createSocket(String remoteHost, int remotePort, InetAddress clientHost, int clientPort, - HttpConnectionParams params) throws IOException, UnknownHostException, ConnectTimeoutException { - if (params == null || params.getConnectionTimeout() == 0) - return getSslContext().getSocketFactory().createSocket(remoteHost, remotePort, clientHost, clientPort); - - Socket socket = getSslContext().getSocketFactory().createSocket(); - socket.bind(new InetSocketAddress(clientHost, clientPort)); - socket.connect(new InetSocketAddress(remoteHost, remotePort), params.getConnectionTimeout()); - return socket; - } - -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskRepositoriesExternalizer.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskRepositoriesExternalizer.java deleted file mode 100644 index 27144ed48..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskRepositoriesExternalizer.java +++ /dev/null @@ -1,107 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.core; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.Collection; -import java.util.Set; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; -import java.util.zip.ZipOutputStream; - -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.TaskRepositoryManager; -import org.xml.sax.InputSource; -import org.xml.sax.XMLReader; -import org.xml.sax.helpers.XMLReaderFactory; - -/** - * Adapted from MylarContextExternalizer - * - * @author Rob Elves - */ -public class TaskRepositoriesExternalizer { - - private SaxRepositoriesWriter writer = new SaxRepositoriesWriter(); - - public static final String ELEMENT_TASK_REPOSITORIES = "TaskRepositories"; - - public static final String ELEMENT_TASK_REPOSITORY = "TaskRepository"; - - public static final String ATTRIBUTE_VERSION = "OutputVersion"; - - public void writeRepositoriesToXML(Collection<TaskRepository> repositories, File file) { - if (repositories.isEmpty()) - return; - ZipOutputStream outputStream = null; - try { - if (!file.exists()) - file.createNewFile(); - - outputStream = new ZipOutputStream(new FileOutputStream(file)); - ZipEntry zipEntry = new ZipEntry(TaskRepositoryManager.OLD_REPOSITORIES_FILE); - outputStream.putNextEntry(zipEntry); - outputStream.setMethod(ZipOutputStream.DEFLATED); - - // OutputStream stream = new FileOutputStream(file); - writer.setOutputStream(outputStream); - writer.writeRepositoriesToStream(repositories); - outputStream.flush(); - outputStream.closeEntry(); - outputStream.close(); - - } catch (IOException e) { - MylarStatusHandler.fail(e, "Could not write: " + file.getAbsolutePath(), true); - } finally { - if (outputStream != null) { - try { - outputStream.close(); - } catch (IOException e) { - MylarStatusHandler.fail(e, "Unable to terminate output stream to repositories file.", false); - } - } - } - } - - public Set<TaskRepository> readRepositoriesFromXML(File file) { - - if (!file.exists()) - return null; - InputStream inputStream = null; - try { - inputStream = new ZipInputStream(new FileInputStream(file)); - ((ZipInputStream) inputStream).getNextEntry(); - SaxRepositoriesContentHandler contentHandler = new SaxRepositoriesContentHandler(); - XMLReader reader = XMLReaderFactory.createXMLReader(); - reader.setContentHandler(contentHandler); - reader.parse(new InputSource(inputStream)); - return contentHandler.getRepositories(); - } catch (Throwable e) { - file.renameTo(new File(file.getAbsolutePath() + "-save")); - MylarStatusHandler.log(e, "Error while reading context file"); - return null; - } finally { - if (inputStream != null) { - try { - inputStream.close(); - } catch (IOException e) { - MylarStatusHandler.fail(e, "Failed to close repositories input stream.", false); - } - } - } - } -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/WebClientUtil.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/WebClientUtil.java deleted file mode 100644 index b247357c7..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/WebClientUtil.java +++ /dev/null @@ -1,186 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.core; - -import java.io.IOException; -import java.net.ConnectException; -import java.net.HttpURLConnection; -import java.net.InetSocketAddress; -import java.net.MalformedURLException; -import java.net.Proxy; -import java.net.URL; -import java.net.URLConnection; -import java.security.GeneralSecurityException; -import java.security.KeyManagementException; - -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLContext; - -import org.apache.commons.httpclient.HttpClient; -import org.apache.commons.httpclient.protocol.Protocol; - -/** - * @author Mik Kersten - * @author Steffen Pingel - */ -public class WebClientUtil { - - private static final int HTTP_PORT = 80; - - private static final int HTTPS_PORT = 443; - - private static final int COM_TIME_OUT = 30000; - - public static final String ENCODING_GZIP = "gzip"; - - public static void initCommonsLoggingSettings() { - // TODO: move? - System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog"); - System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire.header", "off"); - System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient", "off"); - } - - /** - * Returns an opened HttpURLConnection. If the proxy fails a direct connection - * is attempted. - */ - public static HttpURLConnection openUrlConnection(URL url, Proxy proxy, boolean useTls) throws IOException, - KeyManagementException, GeneralSecurityException { - - if (proxy == null) { - proxy = Proxy.NO_PROXY; - } - - HttpURLConnection remoteConnection = getUrlConnection(url, proxy, useTls); - try { - remoteConnection = openConnection(url, proxy); - } catch (ConnectException e) { - remoteConnection = openConnection(url, Proxy.NO_PROXY); - } - - return remoteConnection; - } - - /** - * Returns connection that has yet to be opened (can still set connection parameters). - * Catch ConnectException and retry with Proxy.NO_PROXY if necessary. - */ - public static HttpURLConnection getUrlConnection(URL url, Proxy proxy, boolean useTls) throws IOException, - KeyManagementException, GeneralSecurityException { - SSLContext ctx; - if (useTls) { - ctx = SSLContext.getInstance("TLS"); - } else { - ctx = SSLContext.getInstance("SSL"); - } - - javax.net.ssl.TrustManager[] tm = new javax.net.ssl.TrustManager[] { new RepositoryTrustManager() }; - ctx.init(null, tm, null); - HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory()); - - if (proxy == null) { - proxy = Proxy.NO_PROXY; - } - - URLConnection connection = url.openConnection(proxy); - if (connection == null || !(connection instanceof HttpURLConnection)) { - throw new MalformedURLException(); - } - return (HttpURLConnection)connection; - } - - private static HttpURLConnection openConnection(URL url, Proxy proxy) throws IOException { - URLConnection connection = url.openConnection(proxy); - if (connection == null || !(connection instanceof HttpURLConnection)) { - throw new MalformedURLException(); - } - HttpURLConnection remoteConnection = (HttpURLConnection) connection; - remoteConnection.addRequestProperty("Accept-Encoding", ENCODING_GZIP); - remoteConnection.setConnectTimeout(COM_TIME_OUT); - remoteConnection.setReadTimeout(COM_TIME_OUT); - remoteConnection.connect(); - return remoteConnection; - } - - /** - * public for testing - */ - public static boolean repositoryUsesHttps(String repositoryUrl) { - return repositoryUrl.matches("https.*"); - } - - public static int getPort(String repositoryUrl) { - int colonSlashSlash = repositoryUrl.indexOf("://"); - int colonPort = repositoryUrl.indexOf(':', colonSlashSlash + 1); - if (colonPort < 0) - return repositoryUsesHttps(repositoryUrl) ? HTTPS_PORT : HTTP_PORT; - - int requestPath = repositoryUrl.indexOf('/', colonPort + 1); - - int end; - if (requestPath < 0) - end = repositoryUrl.length(); - else - end = requestPath; - - return Integer.parseInt(repositoryUrl.substring(colonPort + 1, end)); - } - - public static String getDomain(String repositoryUrl) { - int colonSlashSlash = repositoryUrl.indexOf("://"); - - int colonPort = repositoryUrl.indexOf(':', colonSlashSlash + 1); - int requestPath = repositoryUrl.indexOf('/', colonSlashSlash + 3); - - int substringEnd; - - // minimum positive, or string length - if (colonPort > 0 && requestPath > 0) - substringEnd = Math.min(colonPort, requestPath); - else if (colonPort > 0) - substringEnd = colonPort; - else if (requestPath > 0) - substringEnd = requestPath; - else - substringEnd = repositoryUrl.length(); - - return repositoryUrl.substring(colonSlashSlash + 3, substringEnd); - } - - public static String getRequestPath(String repositoryUrl) { - int colonSlashSlash = repositoryUrl.indexOf("://"); - int requestPath = repositoryUrl.indexOf('/', colonSlashSlash + 3); - - if (requestPath < 0) - return ""; - else - return repositoryUrl.substring(requestPath); - } - - public static void setupHttpClient(HttpClient client, Proxy proxySettings, String repositoryUrl) { - if (proxySettings != null && proxySettings.address() instanceof InetSocketAddress) { - InetSocketAddress address = (InetSocketAddress) proxySettings.address(); - client.getHostConfiguration().setProxy(address.getHostName(), address.getPort()); - } - - if (WebClientUtil.repositoryUsesHttps(repositoryUrl)) { - Protocol acceptAllSsl = new Protocol("https", new SslProtocolSocketFactory(), WebClientUtil - .getPort(repositoryUrl)); - client.getHostConfiguration().setHost(WebClientUtil.getDomain(repositoryUrl), - WebClientUtil.getPort(repositoryUrl), acceptAllSsl); - } else { - client.getHostConfiguration().setHost(WebClientUtil.getDomain(repositoryUrl), - WebClientUtil.getPort(repositoryUrl)); - } - } - -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/WebTask.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/WebTask.java deleted file mode 100644 index 08fa99a23..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/WebTask.java +++ /dev/null @@ -1,57 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.core; - -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; - -/** - * Task used with generic web-based repositories - * - * @author Eugene Kuleshov - */ -public class WebTask extends AbstractRepositoryTask { - - private final String id; - - private final String taskPrefix; - - private final String repositoryUrl; - - private final String repsitoryType; - - public WebTask(String id, String label, String taskPrefix, String repositoryUrl, String repsitoryType) { - super(taskPrefix + id, label, false); - this.id = id; - this.taskPrefix = taskPrefix; - this.repositoryUrl = repositoryUrl; - this.repsitoryType = repsitoryType; - setUrl(taskPrefix + id); - } - - public String getRepositoryKind() { - return repsitoryType; - } - - public String getTaskPrefix() { - return this.taskPrefix; - } - - public String getId() { - return this.id; - } - - @Override - public String getRepositoryUrl() { - return repositoryUrl; - } - -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/.AbstractRepositoryTask.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/.AbstractRepositoryTask.java deleted file mode 100644 index 73473f890..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/.AbstractRepositoryTask.java +++ /dev/null @@ -1,169 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.core; - -import java.util.Date; - -import org.eclipse.mylar.internal.tasks.core.HtmlStreamTokenizer; - -/** - * Virtual proxy for a repository task. - * - * @author Mik Kersten - * @author Rob Elves - */ -public abstract class AbstractRepositoryTask extends Task { - - private static final String CONTEXT_HANDLE_DELIM = "-"; - - private static final String MISSING_REPOSITORY_HANDLE = "norepository" + CONTEXT_HANDLE_DELIM; - - /** The last time this task's bug report was in a synchronized (read?) state. */ - protected String lastSynchronizedDateStamp; - - protected transient RepositoryTaskData taskData; - - protected boolean currentlySynchronizing; - - protected boolean isNotifiedIncoming = true; - - /** - * Value is <code>true</code> if the bug report has saved changes that - * need synchronizing with the repository. - */ - protected boolean isDirty; - - public enum RepositoryTaskSyncState { - OUTGOING, SYNCHRONIZED, INCOMING, CONFLICT - } - - protected RepositoryTaskSyncState syncState = RepositoryTaskSyncState.SYNCHRONIZED; - - public static final String HANDLE_DELIM = "-"; - - public AbstractRepositoryTask(String handle, String label, boolean newTask) { - super(handle, label, newTask); - } - - public abstract String getRepositoryKind(); - - public boolean isDownloaded() { - return taskData != null; - } - - public String getLastSyncDateStamp() { - return lastSynchronizedDateStamp; - } - - public void setLastSyncDateStamp(String lastSyncDateStamp) { - this.lastSynchronizedDateStamp = lastSyncDateStamp; - } - - public void setSyncState(RepositoryTaskSyncState syncState) { - this.syncState = syncState; - } - - public RepositoryTaskSyncState getSyncState() { - return syncState; - } - - public String getRepositoryUrl() { - return AbstractRepositoryTask.getRepositoryUrl(getHandleIdentifier()); - } - - @Override - public boolean isLocal() { - return false; - } - - public static long getLastRefreshTimeInMinutes(Date lastRefresh) { - Date timeNow = new Date(); - if (lastRefresh == null) - lastRefresh = new Date(); - long timeDifference = (timeNow.getTime() - lastRefresh.getTime()) / 60000; - return timeDifference; - } - - public boolean isSynchronizing() { - return currentlySynchronizing; - } - - public void setCurrentlySynchronizing(boolean currentlySychronizing) { - this.currentlySynchronizing = currentlySychronizing; - } - - public static String getTaskId(String taskHandle) { - int index = taskHandle.lastIndexOf(AbstractRepositoryTask.HANDLE_DELIM); - if (index != -1) { - String id = taskHandle.substring(index + 1); - return id; - } - return null; - } - - public static String getRepositoryUrl(String taskHandle) { - int index = taskHandle.lastIndexOf(AbstractRepositoryTask.HANDLE_DELIM); - String url = null; - if (index != -1) { - url = taskHandle.substring(0, index); - } - return url; - } - - public static String getHandle(String repositoryUrl, String taskId) { - if (repositoryUrl == null) { - return MISSING_REPOSITORY_HANDLE + taskId; - } else if (taskId.contains(CONTEXT_HANDLE_DELIM)) { - throw new RuntimeException("invalid handle for task, can not contain: " + CONTEXT_HANDLE_DELIM + ", was: " + taskId); - } else { - return repositoryUrl + CONTEXT_HANDLE_DELIM + taskId; - } - } - - public static String getHandle(String repositoryUrl, int taskId) { - return AbstractRepositoryTask.getHandle(repositoryUrl, "" + taskId); - } - - public boolean isDirty() { - return isDirty; - } - - public void setDirty(boolean isDirty) { - this.isDirty = isDirty; - } - - public RepositoryTaskData getTaskData() { - return taskData; - } - - public void setTaskData(RepositoryTaskData taskData) { - this.taskData = taskData; - // TODO: remove? - if (taskData != null) { - setDescription(HtmlStreamTokenizer.unescape(AbstractRepositoryTask.getTaskId(getHandleIdentifier()) - + ": " + taskData.getSummary())); - } - } - - public boolean isNotified() { - return isNotifiedIncoming; - } - - public void setNotified(boolean notified) { - isNotifiedIncoming = notified; - } - - - public String getOwner() { - return "<unknown>"; - } -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractAttributeFactory.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractAttributeFactory.java deleted file mode 100644 index a464517af..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractAttributeFactory.java +++ /dev/null @@ -1,36 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.core; - -import java.io.Serializable; - - -/** - * @author Rob Elves - */ -public abstract class AbstractAttributeFactory implements Serializable { - - public RepositoryTaskAttribute createAttribute(String key) { - String mapped = mapCommonAttributeKey(key); - RepositoryTaskAttribute attribute = new RepositoryTaskAttribute(mapped, getName(mapped), getIsHidden(mapped)); - attribute.setReadOnly(isReadOnly(mapped)); - return attribute; - } - - public abstract String mapCommonAttributeKey(String key); - - public abstract boolean getIsHidden(String key); - - public abstract String getName(String key); - - public abstract boolean isReadOnly(String key); -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractQueryHit.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractQueryHit.java deleted file mode 100644 index 501e32739..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractQueryHit.java +++ /dev/null @@ -1,131 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.tasks.core; - - -/** - * @author Mik Kersten - */ -public abstract class AbstractQueryHit implements ITaskListElement { - - protected String repositoryUrl; - - protected String description; - - protected String priority; - - protected String id; - - protected boolean isNotified = false; - - private AbstractRepositoryQuery parent; - - protected AbstractQueryHit(String repositoryUrl, String description, String id) { - this.repositoryUrl = repositoryUrl; - this.description = description; - this.id = id; - } - - public AbstractRepositoryQuery getParent() { - return parent; - } - - public void setParent(AbstractRepositoryQuery parent) { - this.parent = parent; - } - - public String getRepositoryUrl() { - return repositoryUrl; - } - - public void setRepositoryUrl(String repositoryUrl) { - this.repositoryUrl = repositoryUrl; - } - - public abstract AbstractRepositoryTask getOrCreateCorrespondingTask(); - - /** - * @return null if there is no corresponding report - */ - public abstract AbstractRepositoryTask getCorrespondingTask(); - - public abstract boolean isCompleted(); - - public abstract void setCorrespondingTask(AbstractRepositoryTask task); - - public String getHandleIdentifier() { - return AbstractRepositoryTask.getHandle(repositoryUrl, id); - } - - public String getId() { - return id; - } - - public boolean isNotified() { - return isNotified; - } - - public void setNotified(boolean notified) { - isNotified = notified; - } - - @Override - public boolean equals(Object obj) { - if(!(obj instanceof AbstractQueryHit)) { - return false; - } - AbstractQueryHit hit = (AbstractQueryHit)obj; - return hit.getHandleIdentifier().equals(this.getHandleIdentifier()); - } - - @Override - public int hashCode() { - return this.getHandleIdentifier().hashCode(); - } - - /** - * @return the url of the hit without any additional login information etc. - */ - public String getUrl() { - return ""; - } - - public String getPriority() { - AbstractRepositoryTask task = getCorrespondingTask(); - if (task != null) { - return task.getPriority(); - } else { - return priority; - } - } - - public String getDescription() { - AbstractRepositoryTask task = getCorrespondingTask(); - if (task != null) { - return task.getDescription(); - } else { - return description; - } - } - - public void setPriority(String priority) { - this.priority = priority; - } - - public void setDescription(String description) { - this.description = description; - } - - public void setHandleIdentifier(String id) { - //ignore - } - -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryConnector.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryConnector.java deleted file mode 100644 index 2443d25fd..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryConnector.java +++ /dev/null @@ -1,225 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.core; - -import java.io.File; -import java.net.Proxy; -import java.util.HashSet; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.mylar.context.core.ContextCorePlugin; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask.RepositoryTaskSyncState; - -/** - * Encapsulates synchronization policy. - * - * @author Mik Kersten - * @author Rob Elves - */ -public abstract class AbstractRepositoryConnector { - - public static final String MESSAGE_ATTACHMENTS_NOT_SUPPORTED = "Attachments not supported by connector: "; - - public static final String MYLAR_CONTEXT_DESCRIPTION = "mylar/context/zip"; - - private static final String APPLICATION_OCTET_STREAM = "application/octet-stream"; - - protected List<String> supportedVersions; - - protected Set<RepositoryTemplate> templates = new LinkedHashSet<RepositoryTemplate>(); - - protected TaskList taskList; - - public void init(TaskList taskList) { - this.taskList = taskList; - } - - /** - * @return null if not supported - */ - public abstract IAttachmentHandler getAttachmentHandler(); - - /** - * @return null if not supported - */ - public abstract IOfflineTaskHandler getOfflineTaskHandler(); - - public abstract String getRepositoryUrlFromTaskUrl(String url); - - public abstract boolean canCreateTaskFromKey(TaskRepository repository); - - public abstract boolean canCreateNewTask(TaskRepository repository); - - /** - * Reset and update the repository attributes from the server (e.g. - * products, components) - * - * @param proxySettings - * TODO - * @throws CoreException - * TODO - */ - public abstract void updateAttributes(TaskRepository repository, Proxy proxySettings, IProgressMonitor monitor) - throws CoreException; - - /** - * @param id - * identifier, e.g. "123" bug Bugzilla bug 123 - * @param proxySettings - * TODO - * @return null if task could not be created - * @throws CoreException - * TODO - */ - public abstract ITask createTaskFromExistingKey(TaskRepository repository, String id, Proxy proxySettings) - throws CoreException; - - /** - * Implementors must execute query synchronously. - * - * @param query - * @param repository - * TODO - * @param proxySettings - * TODO - * @param monitor - * @param resultCollector - * IQueryHitCollector that collects the hits found - */ - public abstract IStatus performQuery(AbstractRepositoryQuery query, TaskRepository repository, Proxy proxySettings, - IProgressMonitor monitor, QueryHitCollector resultCollector); - - public abstract String getLabel(); - - /** - * @return the unique type of the repository, e.g. "bugzilla" - */ - public abstract String getRepositoryType(); - - public abstract List<String> getSupportedVersions(); - - public abstract void updateTaskState(AbstractRepositoryTask repositoryTask); - - public String[] repositoryPropertyNames() { - return new String[] { IRepositoryConstants.PROPERTY_VERSION, IRepositoryConstants.PROPERTY_TIMEZONE, - IRepositoryConstants.PROPERTY_ENCODING }; - } - - /** - * Implementors of this repositoryOperations must perform it locally without - * going to the server since it is used for frequent repositoryOperations - * such as decoration. - * - * @return an empty set if no contexts - */ - public final Set<RepositoryAttachment> getContextAttachments(TaskRepository repository, AbstractRepositoryTask task) { - Set<RepositoryAttachment> contextAttachments = new HashSet<RepositoryAttachment>(); - if (task.getTaskData() != null) { - for (RepositoryAttachment attachment : task.getTaskData().getAttachments()) { - if (attachment.getDescription().equals(MYLAR_CONTEXT_DESCRIPTION)) { - contextAttachments.add(attachment); - } - } - } - return contextAttachments; - } - - // TODO: move - public final boolean hasRepositoryContext(TaskRepository repository, AbstractRepositoryTask task) { - if (repository == null || task == null) { - return false; - } else { - Set<RepositoryAttachment> remoteContextAttachments = getContextAttachments(repository, task); - return (remoteContextAttachments != null && remoteContextAttachments.size() > 0); - } - } - - /** - * Attaches the associated context to <code>task</code>. - * - * @return false, if operation is not supported by repository - */ - public final boolean attachContext(TaskRepository repository, AbstractRepositoryTask task, String longComment, - Proxy proxySettings) throws CoreException { - ContextCorePlugin.getContextManager().saveContext(task.getHandleIdentifier()); - File sourceContextFile = ContextCorePlugin.getContextManager().getFileForContext(task.getHandleIdentifier()); - - if (sourceContextFile != null && sourceContextFile.exists()) { - IAttachmentHandler handler = getAttachmentHandler(); - if (handler == null) { - return false; - } - - try { - // TODO: 'faking' outgoing state - task.setSyncState(RepositoryTaskSyncState.OUTGOING); - handler.uploadAttachment(repository, task, longComment, MYLAR_CONTEXT_DESCRIPTION, sourceContextFile, - APPLICATION_OCTET_STREAM, false, proxySettings); - } catch (CoreException e) { - task.setSyncState(RepositoryTaskSyncState.SYNCHRONIZED); - throw e; - } - task.setTaskData(null); - } - return true; - } - - /** - * Retrieves a context stored in <code>attachment</code> from - * <code>task</code>. - * - * @return false, if operation is not supported by repository - */ - public final boolean retrieveContext(TaskRepository repository, AbstractRepositoryTask task, - RepositoryAttachment attachment, Proxy proxySettings, String destinationPath) throws CoreException { - IAttachmentHandler attachmentHandler = getAttachmentHandler(); - if (attachmentHandler == null) { - return false; - } - - File destinationContextFile = ContextCorePlugin.getContextManager().getFileForContext( - task.getHandleIdentifier()); - - // TODO: add functionality for not overwriting previous context - if(destinationContextFile.exists()) { - if(!destinationContextFile.delete()) { - return false; - } - } - attachmentHandler.downloadAttachment(repository, task, attachment, destinationContextFile, proxySettings); - return true; - } - - public void addTemplate(RepositoryTemplate template) { - this.templates.add(template); - } - - public Set<RepositoryTemplate> getTemplates() { - return templates; - } - - /** returns null if template not found */ - public RepositoryTemplate getTemplate(String label) { - for (RepositoryTemplate template : getTemplates()) { - if (template.label.equals(label)) { - return template; - } - } - return null; - } - -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryQuery.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryQuery.java deleted file mode 100644 index 8c462f40d..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryQuery.java +++ /dev/null @@ -1,161 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.tasks.core; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -/** - * @author Mik Kersten - * @author Eugene Kuleshov - */ -public abstract class AbstractRepositoryQuery extends AbstractTaskContainer { - - protected String repositoryUrl; - - protected int maxHits; - - private Set<AbstractQueryHit> hits = new HashSet<AbstractQueryHit>(); - - protected String lastRefreshTimeStamp = "<never>"; - - private boolean currentlySynchronizing = false; - - public abstract String getRepositoryKind(); - - public AbstractRepositoryQuery(String description, TaskList taskList) { - super(description, taskList); - } - - // TODO: this overriding is a bit weird - public Set<ITask> getChildren() { - Set<ITask> tasks = new HashSet<ITask>(); - for (AbstractQueryHit hit : getHits()) { - ITask task = hit.getCorrespondingTask(); - if (task != null) { - tasks.add(task); - } - } - return tasks; - } - - public boolean isArchive() { - return false; - } - - public void setIsArchive(boolean isArchive) { - // ignore - } - - public synchronized AbstractQueryHit findQueryHit(String handle) { - if (handle != null) { - for (AbstractQueryHit hit : hits) { - if (handle.equals(hit.getHandleIdentifier())) { - return hit; - } - } - } - return null; - } - - public synchronized Set<AbstractQueryHit> getHits() { - return new HashSet<AbstractQueryHit>(hits); - } - - public synchronized void updateHits(List<AbstractQueryHit> newHits, TaskList taskList) { - Set<AbstractQueryHit> oldHits = new HashSet<AbstractQueryHit>(hits); - hits.clear(); - for (AbstractQueryHit oldHit : oldHits) { - if (newHits.contains(oldHit)) { - newHits.get(newHits.indexOf(oldHit)).setNotified(oldHit.isNotified); - } - } - for (AbstractQueryHit hit : newHits) { - this.addHit(hit, taskList); - } - } - - public synchronized void addHit(AbstractQueryHit hit, TaskList taskList) { - ITask correspondingTask = taskList.getTask(hit.getHandleIdentifier()); - if (correspondingTask instanceof AbstractRepositoryTask) { - hit.setCorrespondingTask((AbstractRepositoryTask) correspondingTask); - } - hit.setParent(this); - hits.add(hit); - } - - public synchronized void removeHit(AbstractQueryHit hit) { - hits.remove(hit); - } - - public synchronized String getPriority() { - if (hits.isEmpty()) { - return Task.PriorityLevel.P1.toString(); - } - String highestPriority = Task.PriorityLevel.P5.toString(); - for (AbstractQueryHit hit : hits) { - if (highestPriority.compareTo(hit.getPriority()) > 0) { - highestPriority = hit.getPriority(); - } - } - return highestPriority; - } - - public boolean isLocal() { - return false; - } - - public boolean isCompleted() { - return false; - } - - public int getMaxHits() { - return maxHits; - } - - public void setMaxHits(int maxHits) { - this.maxHits = maxHits; - } - - public String getRepositoryUrl() { - return repositoryUrl; - } - - public void setRepositoryUrl(String newRepositoryUrl) { - if (repositoryUrl != null && url != null) { - // the repository url has changed, so change corresponding part of query URL - this.url = newRepositoryUrl + url.substring(repositoryUrl.length()); - } - this.repositoryUrl = newRepositoryUrl; - } - - public boolean isSynchronizing() { - return currentlySynchronizing; - } - - public void setCurrentlySynchronizing(boolean currentlySynchronizing) { - this.currentlySynchronizing = currentlySynchronizing; - } - - @Override - final void add(ITask task) { - // ignore, can not add tasks to a query - } - - public String getLastRefreshTimeStamp() { - return lastRefreshTimeStamp; - } - - public void setLastRefreshTimeStamp(String lastRefreshTimeStamp) { - this.lastRefreshTimeStamp = lastRefreshTimeStamp; - } -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryTask.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryTask.java deleted file mode 100644 index 73473f890..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryTask.java +++ /dev/null @@ -1,169 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.core; - -import java.util.Date; - -import org.eclipse.mylar.internal.tasks.core.HtmlStreamTokenizer; - -/** - * Virtual proxy for a repository task. - * - * @author Mik Kersten - * @author Rob Elves - */ -public abstract class AbstractRepositoryTask extends Task { - - private static final String CONTEXT_HANDLE_DELIM = "-"; - - private static final String MISSING_REPOSITORY_HANDLE = "norepository" + CONTEXT_HANDLE_DELIM; - - /** The last time this task's bug report was in a synchronized (read?) state. */ - protected String lastSynchronizedDateStamp; - - protected transient RepositoryTaskData taskData; - - protected boolean currentlySynchronizing; - - protected boolean isNotifiedIncoming = true; - - /** - * Value is <code>true</code> if the bug report has saved changes that - * need synchronizing with the repository. - */ - protected boolean isDirty; - - public enum RepositoryTaskSyncState { - OUTGOING, SYNCHRONIZED, INCOMING, CONFLICT - } - - protected RepositoryTaskSyncState syncState = RepositoryTaskSyncState.SYNCHRONIZED; - - public static final String HANDLE_DELIM = "-"; - - public AbstractRepositoryTask(String handle, String label, boolean newTask) { - super(handle, label, newTask); - } - - public abstract String getRepositoryKind(); - - public boolean isDownloaded() { - return taskData != null; - } - - public String getLastSyncDateStamp() { - return lastSynchronizedDateStamp; - } - - public void setLastSyncDateStamp(String lastSyncDateStamp) { - this.lastSynchronizedDateStamp = lastSyncDateStamp; - } - - public void setSyncState(RepositoryTaskSyncState syncState) { - this.syncState = syncState; - } - - public RepositoryTaskSyncState getSyncState() { - return syncState; - } - - public String getRepositoryUrl() { - return AbstractRepositoryTask.getRepositoryUrl(getHandleIdentifier()); - } - - @Override - public boolean isLocal() { - return false; - } - - public static long getLastRefreshTimeInMinutes(Date lastRefresh) { - Date timeNow = new Date(); - if (lastRefresh == null) - lastRefresh = new Date(); - long timeDifference = (timeNow.getTime() - lastRefresh.getTime()) / 60000; - return timeDifference; - } - - public boolean isSynchronizing() { - return currentlySynchronizing; - } - - public void setCurrentlySynchronizing(boolean currentlySychronizing) { - this.currentlySynchronizing = currentlySychronizing; - } - - public static String getTaskId(String taskHandle) { - int index = taskHandle.lastIndexOf(AbstractRepositoryTask.HANDLE_DELIM); - if (index != -1) { - String id = taskHandle.substring(index + 1); - return id; - } - return null; - } - - public static String getRepositoryUrl(String taskHandle) { - int index = taskHandle.lastIndexOf(AbstractRepositoryTask.HANDLE_DELIM); - String url = null; - if (index != -1) { - url = taskHandle.substring(0, index); - } - return url; - } - - public static String getHandle(String repositoryUrl, String taskId) { - if (repositoryUrl == null) { - return MISSING_REPOSITORY_HANDLE + taskId; - } else if (taskId.contains(CONTEXT_HANDLE_DELIM)) { - throw new RuntimeException("invalid handle for task, can not contain: " + CONTEXT_HANDLE_DELIM + ", was: " + taskId); - } else { - return repositoryUrl + CONTEXT_HANDLE_DELIM + taskId; - } - } - - public static String getHandle(String repositoryUrl, int taskId) { - return AbstractRepositoryTask.getHandle(repositoryUrl, "" + taskId); - } - - public boolean isDirty() { - return isDirty; - } - - public void setDirty(boolean isDirty) { - this.isDirty = isDirty; - } - - public RepositoryTaskData getTaskData() { - return taskData; - } - - public void setTaskData(RepositoryTaskData taskData) { - this.taskData = taskData; - // TODO: remove? - if (taskData != null) { - setDescription(HtmlStreamTokenizer.unescape(AbstractRepositoryTask.getTaskId(getHandleIdentifier()) - + ": " + taskData.getSummary())); - } - } - - public boolean isNotified() { - return isNotifiedIncoming; - } - - public void setNotified(boolean notified) { - isNotifiedIncoming = notified; - } - - - public String getOwner() { - return "<unknown>"; - } -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractTaskContainer.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractTaskContainer.java deleted file mode 100644 index f9d40381c..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractTaskContainer.java +++ /dev/null @@ -1,109 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.tasks.core; - -import java.util.HashSet; -import java.util.Set; - -/** - * Manipulate containers via TaskListManager - * - * @author Mik Kersten - */ -public abstract class AbstractTaskContainer implements ITaskListElement { - - private String handle = ""; - - private Set<String> childHandles = new HashSet<String>(); - - private TaskList taskList; - - /** - * Optional URL corresponding to the web resource associated with this container. - */ - protected String url = null; - - public AbstractTaskContainer(String handleAndDescription, TaskList taskList) { - assert handle != null; - this.handle = handleAndDescription; - this.taskList = taskList; - } - - public abstract boolean isLocal(); - - public Set<ITask> getChildren() { - Set<ITask> children = new HashSet<ITask>(); - for (String childHandle : childHandles) { - ITask task = taskList.getTask(childHandle); - if (task != null) { - children.add(task); - } - } - return children; - } - - public String getDescription() { - return handle; - } - - public String getHandleIdentifier() { - return handle; - } - - void setDescription(String description) { - this.handle = description; - } - - public void setHandleIdentifier(String handle) { - this.handle = handle; - } - - void add(ITask task) { - childHandles.add(task.getHandleIdentifier()); - } - - void remove(ITask task) { - childHandles.remove(task.getHandleIdentifier()); - } - - public boolean isCompleted() { - return false; - } - - public int hashCode() { - return handle.hashCode(); - } - - public void setUrl(String url) { - this.url = url; - } - - public String getUrl() { - return url; - } - - @Override - public boolean equals(Object object) { - if (object == null) - return false; - if (object instanceof AbstractTaskContainer) { - AbstractTaskContainer compare = (AbstractTaskContainer) object; - return this.getHandleIdentifier().equals(compare.getHandleIdentifier()); - } else { - return false; - } - } - - @Override - public String toString() { - return "container: " + handle; - } -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AttributeContainer.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AttributeContainer.java deleted file mode 100644 index 09d32ea6b..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AttributeContainer.java +++ /dev/null @@ -1,149 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.core; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.mylar.context.core.MylarStatusHandler; - -/** - * @author Rob Elves - */ -public class AttributeContainer implements Serializable { - - public static final String ERROR_NO_ATTRIBUTE_FACTORY = "Attribute factory not available."; - - private static final long serialVersionUID = 3533078709450471836L; - - /** The keys for the report attributes */ - private ArrayList<String> attributeKeys; - - /** report attributes (status, resolution, etc.) */ - private HashMap<String, RepositoryTaskAttribute> attributes; - - transient private AbstractAttributeFactory attributeFactory; - - public AttributeContainer(AbstractAttributeFactory attributeFactory) { - this.attributeFactory = attributeFactory; - attributeKeys = new ArrayList<String>(); - attributes = new HashMap<String, RepositoryTaskAttribute>(); - } - - public void setAttributeFactory(AbstractAttributeFactory factory) { - this.attributeFactory = factory; - } - - public void addAttribute(String key, RepositoryTaskAttribute attribute) { - if (attributeFactory == null) { - MylarStatusHandler.log(ERROR_NO_ATTRIBUTE_FACTORY, this); - return; - } - String mapped = attributeFactory.mapCommonAttributeKey(key); - if (!attributes.containsKey(mapped)) { - attributeKeys.add(mapped); - } - attributes.put(mapped, attribute); - } - - public RepositoryTaskAttribute getAttribute(String key) { - if (attributeFactory == null) { - MylarStatusHandler.log(ERROR_NO_ATTRIBUTE_FACTORY, this); - return null; - } - String mapped = attributeFactory.mapCommonAttributeKey(key); - return attributes.get(mapped); - } - - public void removeAttribute(Object key) { - attributeKeys.remove(key); - attributes.remove(key); - } - - public List<RepositoryTaskAttribute> getAttributes() { - ArrayList<RepositoryTaskAttribute> attributeEntries = new ArrayList<RepositoryTaskAttribute>(attributeKeys - .size()); - for (Iterator<String> it = attributeKeys.iterator(); it.hasNext();) { - String key = it.next(); - RepositoryTaskAttribute attribute = attributes.get(key); - attributeEntries.add(attribute); - } - return attributeEntries; - } - - public void removeAllAttributes() { - attributeKeys.clear(); - attributes.clear(); - } - - public void addAttributeValue(String key, String value) { - if (attributeFactory == null) { - MylarStatusHandler.log(ERROR_NO_ATTRIBUTE_FACTORY, this); - return; - } - RepositoryTaskAttribute attrib = getAttribute(key); - if (attrib != null) { - attrib.addValue(value); - } else { - attrib = attributeFactory.createAttribute(key); - attrib.addValue(value); - addAttribute(key, attrib); - } - } - - /** - * sets a value on an attribute, if attribute doesn't exist, appropriate - * attribute is created - */ - public void setAttributeValue(String key, String value) { - if (attributeFactory == null) { - MylarStatusHandler.log(ERROR_NO_ATTRIBUTE_FACTORY, this); - return; - } - RepositoryTaskAttribute attrib = getAttribute(key); - if (attrib == null) { - attrib = attributeFactory.createAttribute(key); - addAttribute(key, attrib); - } - attrib.setValue(value); - } - - public String getAttributeValue(String key) { - if (attributeFactory == null) { - MylarStatusHandler.log(ERROR_NO_ATTRIBUTE_FACTORY, this); - return ""; - } - String returnValue = ""; - RepositoryTaskAttribute attrib = getAttribute(key); - if (attrib != null) { - returnValue = attrib.getValue(); - } - return returnValue; - } - - public List<String> getAttributeValues(String key) { - List<String> returnValue = new ArrayList<String>(); - if (attributeFactory == null) { - MylarStatusHandler.log(ERROR_NO_ATTRIBUTE_FACTORY, this); - return returnValue; - } - RepositoryTaskAttribute attrib = getAttribute(key); - if (attrib != null) { - returnValue = attrib.getValues(); - } - return returnValue; - } - -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/DateRangeActivityDelegate.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/DateRangeActivityDelegate.java deleted file mode 100644 index 9f0f0fa20..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/DateRangeActivityDelegate.java +++ /dev/null @@ -1,247 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.core; - -import java.util.Calendar; -import java.util.Date; -import java.util.Set; - - -/** - * @author Rob Elves - * @author Mik Kersten - */ -public class DateRangeActivityDelegate implements ITask { - - private ITask task = null; - - private DateRangeContainer parent; - - private long startMili = 0; - - private long endMili = 0; - - private long inactivity = 0; - - public DateRangeActivityDelegate(DateRangeContainer parent, ITask task, Calendar start, Calendar end) { - this(parent, task, start, end, 0); - } - - public DateRangeActivityDelegate(DateRangeContainer parent, ITask task, Calendar start, Calendar end, - long inactivity) { - if (task == null) { - throw new RuntimeException("attempted to instantiated with null task: " + parent); - } - this.task = task; - if (start != null) { - this.startMili = start.getTimeInMillis(); - } - if (end != null) { - this.endMili = end.getTimeInMillis(); - } - // this.start = start; - // this.end = end; - this.parent = parent; - this.inactivity = inactivity; - } - - public long getEnd() { - return endMili; - } - - public long getStart() { - return startMili; - } - - public long getInactivity() { - return inactivity; - } - - public long getActivity() { - return (endMili - startMili) - inactivity; - } - - public ITask getCorrespondingTask() { - return task; - } - - @Override - public int hashCode() { - final int PRIME = 31; - int result = 1; - result = PRIME * result + ((task == null) ? 0 : task.hashCode()); - result = PRIME * result + ((parent == null) ? 0 : parent.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - final DateRangeActivityDelegate other = (DateRangeActivityDelegate) obj; - if (task == null) { - if (other.task != null) - return false; - } else if (!task.equals(other.task)) - return false; - if (parent == null) { - if (other.parent != null) - return false; - } else if (!parent.equals(other.parent)) - return false; - return true; - } - - public DateRangeContainer getDateRangeContainer() { - return parent; - } - - public void addSubTask(ITask task) { - task.addSubTask(task); - } - - public AbstractTaskContainer getContainer() { - return task.getContainer(); - } - - public Set<ITask> getChildren() { - return task.getChildren(); - } - - public Date getCompletionDate() { - return task.getCompletionDate(); - } - - public Date getCreationDate() { - return task.getCreationDate(); - } - - public String getDescription() { - return task.getDescription(); - } - - public int getEstimateTimeHours() { - return task.getEstimateTimeHours(); - } - - public String getHandleIdentifier() { - return task.getHandleIdentifier(); - } - - public String getTaskType() { - return task.getTaskType(); - } - - public String getNotes() { - return task.getNotes(); - } - - public ITask getParent() { - return task.getParent(); - } - - public String getPriority() { - return task.getPriority(); - } - - public Date getReminderDate() { - return task.getReminderDate(); - } - - public String getUrl() { - return task.getUrl(); - } - - public boolean hasBeenReminded() { - return task.hasBeenReminded(); - } - - public boolean hasValidUrl() { - return task.hasValidUrl(); - } - - public boolean isActive() { - return task.isActive(); - } - - public boolean isCompleted() { - return task.isCompleted(); - } - - public boolean isPastReminder() { - return task.isPastReminder(); - } - - public void removeSubTask(ITask task) { - task.removeSubTask(task); - } - - public void setActive(boolean active) { - task.setActive(active); - } - - public void setContainer(AbstractTaskContainer category) { - task.setContainer(category); - } - - public void setCompleted(boolean completed) { - task.setCompleted(completed); - } - - public void setCompletionDate(Date date) { - task.setCompletionDate(date); - } - - public void setCreationDate(Date date) { - task.setCreationDate(date); - } - - public void setEstimatedTimeHours(int estimated) { - task.setEstimatedTimeHours(estimated); - } - - public void setHandleIdentifier(String id) { - task.setHandleIdentifier(id); - } - - public void setKind(String kind) { - task.setKind(kind); - } - - public void setNotes(String notes) { - task.setNotes(notes); - } - - public void setParent(ITask parent) { - task.setParent(parent); - } - - public void setPriority(String priority) { - task.setPriority(priority); - } - - public void setReminded(boolean reminded) { - task.setReminded(reminded); - } - - public void setReminderDate(Date date) { - task.setReminderDate(date); - } - - public void setUrl(String url) { - task.setUrl(url); - } -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/DateRangeContainer.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/DateRangeContainer.java deleted file mode 100644 index 9afd68e0c..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/DateRangeContainer.java +++ /dev/null @@ -1,197 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.core; - -import java.text.DateFormat; -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - - -/** - * @author Rob Elves - * @author Mik Kersten - */ -public class DateRangeContainer extends AbstractTaskContainer { - - private Set<ITask> children = new HashSet<ITask>(); - - private Map<DateRangeActivityDelegate, Long> taskToDuration = new HashMap<DateRangeActivityDelegate, Long>(); - - private Calendar startDate; - - private Calendar endDate; - - private long totalElapsed = 0; - - private long totalEstimated = 0; - - public DateRangeContainer(GregorianCalendar startDate, GregorianCalendar endDate, String description, - TaskList taskList) { - super(description, taskList); - this.startDate = startDate; - this.endDate = endDate; - } - - public DateRangeContainer(Calendar startDate, Calendar endDate, String description, TaskList taskList) { - super(description, taskList); - this.startDate = startDate; - this.endDate = endDate; - } - - public DateRangeContainer(GregorianCalendar startDate, GregorianCalendar endDate, TaskList taskList) { - super(DateFormat.getDateInstance(DateFormat.FULL).format(startDate.getTime()) + " to " - + DateFormat.getDateInstance(DateFormat.FULL).format(endDate.getTime()), taskList); - // super(startDate.hashCode() + endDate.hashCode() + ""); - // String start = - // DateFormat.getDateInstance(DateFormat.FULL).format(startDate.getTime()); - // String end = - // DateFormat.getDateInstance(DateFormat.FULL).format(endDate.getTime()); - // this.description = start + " to " + end; - this.startDate = startDate; - this.endDate = endDate; - } - - public DateRangeContainer(Date time, Date time2, String description, TaskList taskList) { - super(description, taskList); - startDate = new GregorianCalendar(); - startDate.setTime(time); - endDate = new GregorianCalendar(); - endDate.setTime(time2); - // this.description = description; - } - - public boolean includes(Calendar cal) { - return (startDate.getTimeInMillis() <= cal.getTimeInMillis()) - && (endDate.getTimeInMillis() >= cal.getTimeInMillis()); - } - - public void clear() { - children.clear(); - } - - public void addTask(DateRangeActivityDelegate taskWrapper) { - long taskActivity = taskWrapper.getActivity(); - if (taskActivity < 0) - taskActivity = 0; - totalElapsed += taskActivity; - children.remove(taskWrapper); - children.add(taskWrapper); - if (taskToDuration.containsKey(taskWrapper)) { - long previous = taskToDuration.get(taskWrapper); - long newDuration = previous + taskActivity; - taskToDuration.put(taskWrapper, newDuration); - } else { - taskToDuration.put(taskWrapper, taskActivity); - } - } - - public void remove(DateRangeActivityDelegate taskWrapper) { - children.remove(taskWrapper); - } - - public Calendar getStart() { - return startDate; - } - - public Calendar getEnd() { - return endDate; - } - - public long getTotalElapsed() { - return totalElapsed; - } - - public long getElapsed(DateRangeActivityDelegate taskWrapper) { - if (taskToDuration.containsKey(taskWrapper)) { - return taskToDuration.get(taskWrapper); - } else { - return 0; - } - } - - public long getTotalEstimated() { - totalEstimated = 0; - for (ITask task : children) { - totalEstimated += task.getEstimateTimeHours(); - } - return totalEstimated; - } - - public boolean isArchive() { - return false; - } - - public void setIsArchive(boolean isArchive) { - // ignore - } - - public String getPriority() { - return ""; - } - - public void setHandleIdentifier(String id) { - // ignore - } - - public Set<ITask> getChildren() { - return children; - } - - public boolean isFuture() { - return !isPresent() && getStart().after(Calendar.getInstance()); - } - - public boolean isPresent() { - return getStart().before(Calendar.getInstance()) && getEnd().after(Calendar.getInstance()); - } - - @Override - public int hashCode() { - final int PRIME = 31; - int result = 1; - result = PRIME * result + ((startDate == null) ? 0 : startDate.hashCode()); - result = PRIME * result + ((endDate == null) ? 0 : endDate.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - final DateRangeContainer other = (DateRangeContainer) obj; - if (startDate == null) { - if (other.startDate != null) - return false; - } else if (!startDate.equals(other.startDate)) - return false; - if (endDate == null) { - if (other.endDate != null) - return false; - } else if (!endDate.equals(other.endDate)) - return false; - return true; - } - - @Override - public boolean isLocal() { - return true; - } -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/DelegatingTaskExternalizer.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/DelegatingTaskExternalizer.java deleted file mode 100644 index 7eef923f5..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/DelegatingTaskExternalizer.java +++ /dev/null @@ -1,561 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.core; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.List; -import java.util.Locale; - -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask.RepositoryTaskSyncState; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -/** - * @author Mik Kersten - * @author Ken Sueda (XML serialization support) - * @author Steffen Pingel - */ -public class DelegatingTaskExternalizer implements ITaskListExternalizer { - - private static final String DEFAULT_PRIORITY = Task.PriorityLevel.P3.toString(); - - private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss.S z"; - - public static final String KEY_QUERY = "Query"; - - public static final String KEY_QUERY_HIT = "QueryHit"; - - public static final String KEY_QUERY_MAX_HITS = "MaxHits"; - - public static final String KEY_QUERY_STRING = "QueryString"; - - public static final String KEY_NOTIFIED_INCOMING = "NotifiedIncoming"; - - public static final String KEY_LAST_REFRESH = "LastRefreshTimeStamp"; - - public static final String KEY_LABEL = "Label"; - - public static final String KEY_HANDLE = "Handle"; - - public static final String KEY_REPOSITORY_URL = "RepositoryUrl"; - - public static final String KEY_CATEGORY = "Category"; - - public static final String VAL_ROOT = "Root"; - - public static final String KEY_TASK = "Task"; - - public static final String KEY_KIND = "Kind"; - - public static final String KEY_TASK_CATEGORY = "Task" + KEY_CATEGORY; - - public static final String KEY_LINK = "Link"; - - public static final String KEY_PLAN = "Plan"; - - public static final String KEY_TIME_ESTIMATED = "Estimated"; - - public static final String KEY_ISSUEURL = "IssueURL"; - - public static final String KEY_NOTES = "Notes"; - - public static final String KEY_ACTIVE = "Active"; - - public static final String KEY_COMPLETE = "Complete"; - - public static final String KEY_PRIORITY = "Priority"; - - public static final String KEY_PATH = "Path"; - - public static final String VAL_FALSE = "false"; - - public static final String VAL_TRUE = "true"; - - public static final String KEY_NAME = "Name"; - - public static final String KEY_DATE_END = "EndDate"; - - public static final String KEY_DATE_CREATION = "CreationDate"; - - public static final String KEY_DATE_REMINDER = "ReminderDate"; - - public static final String KEY_REMINDED = "Reminded"; - - public static final String LABEL_AUTOMATIC = "<automatic>"; - - /** - * This element holds the date stamp recorded upon last - * transition to a synchronized state. - */ - public static final String KEY_LAST_MOD_DATE = "LastModified"; - - public static final String KEY_DIRTY = "Dirty"; - - public static final String KEY_SYNC_STATE = "offlineSyncState"; - - private List<ITaskListExternalizer> delegateExternalizers = new ArrayList<ITaskListExternalizer>(); - - /** - * Set these on the TaskListWriter instead - */ - public void setDelegateExternalizers(List<ITaskListExternalizer> externalizers) { - this.delegateExternalizers = externalizers; - } - - public Element createCategoryElement(AbstractTaskContainer category, Document doc, Element parent) { - if (category instanceof TaskArchive) { - return parent; - } else { - Element node = doc.createElement(getCategoryTagName()); - node.setAttribute(KEY_NAME, category.getDescription()); - parent.appendChild(node); - return node; - } - } - - public boolean canCreateElementFor(ITask task) { - return true; - } - - public Element createTaskElement(ITask task, Document doc, Element parent) { - Element node = doc.createElement(getTaskTagName()); - node.setAttribute(KEY_LABEL, task.getDescription()); - node.setAttribute(KEY_HANDLE, task.getHandleIdentifier()); - - if (task.getContainer() != null) { - if (task.getContainer().getHandleIdentifier().equals(TaskList.LABEL_ROOT)) { - node.setAttribute(KEY_CATEGORY, VAL_ROOT); - } else { - node.setAttribute(KEY_CATEGORY, task.getContainer().getHandleIdentifier()); - } - } else { - // TODO: if/when subtasks are supported this should be handled - } - - node.setAttribute(KEY_PRIORITY, task.getPriority()); - node.setAttribute(KEY_KIND, task.getTaskType()); - - if (task.isCompleted()) { - node.setAttribute(KEY_COMPLETE, VAL_TRUE); - } else { - node.setAttribute(KEY_COMPLETE, VAL_FALSE); - } - if (task.isActive()) { - node.setAttribute(KEY_ACTIVE, VAL_TRUE); - } else { - node.setAttribute(KEY_ACTIVE, VAL_FALSE); - } - - if (task.getUrl() != null) { - node.setAttribute(KEY_ISSUEURL, task.getUrl()); - } - node.setAttribute(KEY_NOTES, task.getNotes()); - node.setAttribute(KEY_TIME_ESTIMATED, "" + task.getEstimateTimeHours()); - node.setAttribute(KEY_DATE_END, formatExternDate(task.getCompletionDate())); - node.setAttribute(KEY_DATE_CREATION, formatExternDate(task.getCreationDate())); - node.setAttribute(KEY_DATE_REMINDER, formatExternDate(task.getReminderDate())); - if (task.hasBeenReminded()) { - node.setAttribute(KEY_REMINDED, VAL_TRUE); - } else { - node.setAttribute(KEY_REMINDED, VAL_FALSE); - } - - if (task instanceof AbstractRepositoryTask) { - AbstractRepositoryTask abstractTask = (AbstractRepositoryTask) task; - if (abstractTask.getLastSyncDateStamp() != null) { - node.setAttribute(KEY_LAST_MOD_DATE, abstractTask.getLastSyncDateStamp()); - } - - if(abstractTask.isNotified()) { - node.setAttribute(KEY_NOTIFIED_INCOMING, VAL_TRUE); - } else { - node.setAttribute(KEY_NOTIFIED_INCOMING, VAL_FALSE); - } - - node.setAttribute(KEY_SYNC_STATE, abstractTask.getSyncState().toString()); - - if (abstractTask.isDirty()) { - node.setAttribute(KEY_DIRTY, VAL_TRUE); - } else { - node.setAttribute(KEY_DIRTY, VAL_FALSE); - } - } - - for (ITask t : task.getChildren()) { - createTaskElement(t, doc, node); - } - parent.appendChild(node); - return node; - } - - protected String formatExternDate(Date date) { - if (date == null) - return ""; - String f = DATE_FORMAT; - SimpleDateFormat format = new SimpleDateFormat(f, Locale.ENGLISH); - return format.format(date); - } - - public boolean canReadCategory(Node node) { - return node.getNodeName().equals(getCategoryTagName()); - } - - public void readCategory(Node node, TaskList taskList) throws TaskExternalizationException { - boolean hasCaughtException = false; - Element element = (Element) node; - - AbstractTaskContainer category; - if (element.hasAttribute(KEY_NAME)) { - category = new TaskCategory(element.getAttribute(KEY_NAME), taskList); - taskList.internalAddCategory(category); - } else { - // LEGACY: registry categories did not have names - category = taskList.getArchiveContainer(); - } - - NodeList list = node.getChildNodes(); - for (int i = 0; i < list.getLength(); i++) { - Node child = list.item(i); - boolean read = false; - try { - for (ITaskListExternalizer externalizer : delegateExternalizers) { - // LEGACY: categories used to contain tasks - if (externalizer.canReadTask(child)) { - externalizer.readTask(child, taskList, category, null); - read = true; - } - } - if (!read && canReadTask(child)) { - category.add(readTask(child, taskList, category, null)); - } - } catch (Throwable t) { - hasCaughtException = true; - } - } - if (hasCaughtException) { - throw new TaskExternalizationException("Failed to load all tasks"); - } - } - - public boolean canReadTask(Node node) { - return node.getNodeName().equals(getTaskTagName()); - } - - public ITask readTask(Node node, TaskList taskList, AbstractTaskContainer category, ITask parent) - throws TaskExternalizationException { - Element element = (Element) node; - String handle; - String label; - if (element.hasAttribute(KEY_HANDLE)) { - handle = element.getAttribute(KEY_HANDLE); - } else { - throw new TaskExternalizationException("Handle not stored for task"); - } - if (element.hasAttribute(KEY_LABEL)) { - label = element.getAttribute(KEY_LABEL); - } else { - label = "Description was corrupted in stored tasklist"; - } - - Task task = new Task(handle, label, false); - readTaskInfo(task, taskList, element, parent, category); - return task; - } - - protected void readTaskInfo(ITask task, TaskList taskList, Element element, ITask parent, - AbstractTaskContainer legacyCategory) throws TaskExternalizationException { - - String categoryHandle = null; - if (element.hasAttribute(KEY_CATEGORY)) { - categoryHandle = element.getAttribute(KEY_CATEGORY); - AbstractTaskContainer category = null; - if (categoryHandle != null) { - category = taskList.getContainerForHandle(categoryHandle); - } - - if (category != null) { - // if (category.equals(VAL_ROOT)) { - // taskList.internalAddRootTask(task); - // } else { - taskList.internalAddTask(task, category); - // } - } else if (parent == null) { - taskList.internalAddRootTask(task); - } - } else if (legacyCategory != null && !(legacyCategory instanceof TaskArchive)) { // && - // !legacyCategory.getHandleIdentifier().equals(TaskList.LABEL_ARCHIVE)) - // { - task.setContainer(legacyCategory); - legacyCategory.add(task); - } else if (legacyCategory == null && parent == null) { - if (task instanceof AbstractRepositoryTask) { - taskList.internalAddTask(task, taskList.getArchiveContainer()); - } else { - taskList.internalAddRootTask(task); - } - } else if (parent != null) { - task.setParent(parent); - } else { - taskList.internalAddTask(task, taskList.getArchiveContainer()); - } - if (element.hasAttribute(KEY_PRIORITY)) { - task.setPriority(element.getAttribute(KEY_PRIORITY)); - } else { - task.setPriority(DEFAULT_PRIORITY); - } - - if (element.hasAttribute(KEY_KIND)) { - task.setKind(element.getAttribute(KEY_KIND)); - } - - if (element.getAttribute(KEY_ACTIVE).compareTo(VAL_TRUE) == 0) { - task.setActive(true); - taskList.setActive(task, true); - } else { - task.setActive(false); - } - if (element.hasAttribute(KEY_ISSUEURL)) { - task.setUrl(element.getAttribute(KEY_ISSUEURL)); - } else { - task.setUrl(""); - } - if (element.hasAttribute(KEY_NOTES)) { - task.setNotes(element.getAttribute(KEY_NOTES)); - } else { - task.setNotes(""); - } - - if (element.hasAttribute(KEY_TIME_ESTIMATED)) { - String est = element.getAttribute(KEY_TIME_ESTIMATED); - try { - int estimate = Integer.parseInt(est); - task.setEstimatedTimeHours(estimate); - } catch (Exception e) { - task.setEstimatedTimeHours(0); - } - } else { - task.setEstimatedTimeHours(0); - } - // NOTE: do not change the order of complete and end date!! - if (element.getAttribute(KEY_COMPLETE).compareTo(VAL_TRUE) == 0) { - task.setCompleted(true); - } else { - task.setCompleted(false); - } - if (element.hasAttribute(KEY_DATE_END)) { - task.setCompletionDate(getDateFromString(element.getAttribute(KEY_DATE_END))); - } else { - task.setCompletionDate(null); - } - if (element.hasAttribute(KEY_DATE_CREATION)) { - task.setCreationDate(getDateFromString(element.getAttribute(KEY_DATE_CREATION))); - } else { - task.setCreationDate(Calendar.getInstance().getTime()); - } - if (element.hasAttribute(KEY_DATE_REMINDER)) { - task.setReminderDate(getDateFromString(element.getAttribute(KEY_DATE_REMINDER))); - } else { - task.setReminderDate(null); - } - if (element.hasAttribute(KEY_REMINDED) && element.getAttribute(KEY_REMINDED).compareTo(VAL_TRUE) == 0) { - task.setReminded(true); - } else { - task.setReminded(false); - } - - if (task instanceof AbstractRepositoryTask) { - AbstractRepositoryTask abstractTask = (AbstractRepositoryTask) task; - abstractTask.setCurrentlySynchronizing(false); - if (element.hasAttribute(KEY_LAST_MOD_DATE) && !element.getAttribute(KEY_LAST_MOD_DATE).equals("")) { - abstractTask.setLastSyncDateStamp(element.getAttribute(KEY_LAST_MOD_DATE)); - } - - if (VAL_TRUE.equals(element.getAttribute(KEY_DIRTY))) { - abstractTask.setDirty(true); - } else { - abstractTask.setDirty(false); - } - - if (VAL_TRUE.equals(element.getAttribute(KEY_NOTIFIED_INCOMING))) { - abstractTask.setNotified(true); - } else { - abstractTask.setNotified(false); - } - - try { - readTaskData(abstractTask); - } catch (Exception e) { - MylarStatusHandler.log(e, "Failed to read bug report"); - } - - if (element.hasAttribute(KEY_SYNC_STATE)) { - String syncState = element.getAttribute(KEY_SYNC_STATE); - if (syncState.compareTo(RepositoryTaskSyncState.SYNCHRONIZED.toString()) == 0) { - abstractTask.setSyncState(RepositoryTaskSyncState.SYNCHRONIZED); - } else if (syncState.compareTo(RepositoryTaskSyncState.INCOMING.toString()) == 0) { - abstractTask.setSyncState(RepositoryTaskSyncState.INCOMING); - } else if (syncState.compareTo(RepositoryTaskSyncState.OUTGOING.toString()) == 0) { - abstractTask.setSyncState(RepositoryTaskSyncState.OUTGOING); - } else if (syncState.compareTo(RepositoryTaskSyncState.CONFLICT.toString()) == 0) { - abstractTask.setSyncState(RepositoryTaskSyncState.CONFLICT); - } - } - } - - NodeList list = element.getChildNodes(); - for (int j = 0; j < list.getLength(); j++) { - Node child = list.item(j); - task.addSubTask(readTask(child, taskList, null, task)); - } - } - - // TODO pull up implementation from BugzillaTaskExternalizer and TracTaskExternalizer - protected void readTaskData(AbstractRepositoryTask task) { - } - - protected Date getDateFromString(String dateString) { - Date date = null; - if ("".equals(dateString)) - return null; - String formatString = DATE_FORMAT; - SimpleDateFormat format = new SimpleDateFormat(formatString, Locale.ENGLISH); - try { - date = format.parse(dateString); - } catch (ParseException e) { - MylarStatusHandler.fail(e, "Could not parse end date", false); - } - return date; - } - - public String getCategoryTagName() { - return KEY_TASK_CATEGORY; - } - - public String getTaskTagName() { - return KEY_TASK; - } - - public boolean canCreateElementFor(AbstractRepositoryQuery query) { - return true; - } - - public Element createQueryElement(AbstractRepositoryQuery query, Document doc, Element parent) { - String queryTagName = getQueryTagNameForElement(query); - Element node = doc.createElement(queryTagName); - node.setAttribute(KEY_NAME, query.getDescription()); - node.setAttribute(KEY_QUERY_MAX_HITS, query.getMaxHits() + ""); - node.setAttribute(KEY_QUERY_STRING, query.getUrl()); - node.setAttribute(KEY_REPOSITORY_URL, query.getRepositoryUrl()); - if (query.getLastRefreshTimeStamp() != null) { - node.setAttribute(KEY_LAST_REFRESH, query.getLastRefreshTimeStamp()); - } - for (AbstractQueryHit hit : query.getHits()) { - try { - Element element = null; - for (ITaskListExternalizer externalizer : delegateExternalizers) { - if (externalizer.canCreateElementFor(hit)) - element = externalizer.createQueryHitElement(hit, doc, node); - } - if (element == null) - createQueryHitElement(hit, doc, node); - } catch (Exception e) { - MylarStatusHandler.log(e, e.getMessage()); - } - } - parent.appendChild(node); - return node; - } - - public boolean canReadQuery(Node node) { - return false; - } - - public AbstractRepositoryQuery readQuery(Node node, TaskList tlist) throws TaskExternalizationException { - // doesn't know how to read any queries - return null; - } - - public String getQueryTagNameForElement(AbstractRepositoryQuery query) { - return KEY_QUERY; - } - - public String getQueryHitTagName() { - return KEY_QUERY_HIT; - } - - public boolean canCreateElementFor(AbstractQueryHit queryHit) { - return true; - } - - public Element createQueryHitElement(AbstractQueryHit queryHit, Document doc, Element parent) { - Element node = doc.createElement(getQueryHitTagName()); - node.setAttribute(KEY_NAME, queryHit.getDescription()); - node.setAttribute(KEY_HANDLE, queryHit.getHandleIdentifier()); - node.setAttribute(KEY_PRIORITY, queryHit.getPriority()); - if (queryHit.isCompleted()) { - node.setAttribute(KEY_COMPLETE, VAL_TRUE); - } else { - node.setAttribute(KEY_COMPLETE, VAL_FALSE); - } - if (queryHit.isNotified()) { - node.setAttribute(KEY_NOTIFIED_INCOMING, VAL_TRUE); - } else { - node.setAttribute(KEY_NOTIFIED_INCOMING, VAL_FALSE); - } - parent.appendChild(node); - return null; - } - - public boolean canReadQueryHit(Node node) { - return false; - } - - public void readQueryHit(Node node, TaskList tlist, AbstractRepositoryQuery query) - throws TaskExternalizationException { - // doesn't know how to read a query hit - } - - public void readQueryHitInfo(AbstractQueryHit hit, TaskList taskList, AbstractRepositoryQuery query, Element element) - throws TaskExternalizationException { - if (element.hasAttribute(KEY_NAME)) { - hit.setDescription(element.getAttribute(KEY_NAME)); - } - if (element.hasAttribute(KEY_PRIORITY)) { - hit.setPriority(element.getAttribute(KEY_PRIORITY)); - } - - if (element.hasAttribute(KEY_NOTIFIED_INCOMING) - && element.getAttribute(KEY_NOTIFIED_INCOMING).compareTo(VAL_TRUE) == 0) { - hit.setNotified(true); - } else { - hit.setNotified(false); - } - - ITask correspondingTask = taskList.getTask(hit.getHandleIdentifier()); - if (correspondingTask instanceof AbstractRepositoryTask) { - hit.setCorrespondingTask((AbstractRepositoryTask) correspondingTask); - } - - query.addHit(hit, taskList); - } - - public List<ITaskListExternalizer> getDelegateExternalizers() { - return delegateExternalizers; - } -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/IAttachmentHandler.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/IAttachmentHandler.java deleted file mode 100644 index d3e45c63a..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/IAttachmentHandler.java +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.core; - -import java.io.File; -import java.net.Proxy; - -import org.eclipse.core.runtime.CoreException; - -/** - * @author Mik Kersten - * @author Rob Elves - */ -public interface IAttachmentHandler { - - public void uploadAttachment(TaskRepository repository, AbstractRepositoryTask task, String comment, - String description, File file, String contentType, boolean isPatch, Proxy proxySettings) throws CoreException; - - public void downloadAttachment(TaskRepository taskRepository, AbstractRepositoryTask task, - RepositoryAttachment attachment, File file, Proxy proxySettings) throws CoreException; - - public boolean canUploadAttachment(TaskRepository repository, AbstractRepositoryTask task); - - public boolean canDownloadAttachment(TaskRepository repository, AbstractRepositoryTask task); - - public boolean canDeprecate(TaskRepository repository, RepositoryAttachment attachment); - - /** To deprecate, change the attribute on the RepositoryAttachment and pass to this method */ - public void updateAttachment(TaskRepository repository, RepositoryAttachment attachment) throws CoreException; - -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/IOfflineTaskHandler.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/IOfflineTaskHandler.java deleted file mode 100644 index 9582cc139..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/IOfflineTaskHandler.java +++ /dev/null @@ -1,43 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.core; - -import java.io.UnsupportedEncodingException; -import java.net.Proxy; -import java.util.Date; -import java.util.Set; - -import javax.security.auth.login.LoginException; - -import org.eclipse.core.runtime.CoreException; - -/** - * @author Mik Kersten - * @author Rob Elves - */ -public interface IOfflineTaskHandler { - - /** - * @return null if date cannot be parsed - */ - public Date getDateForAttributeType(String attributeKey, String dateString); - - public AbstractAttributeFactory getAttributeFactory(); - - public RepositoryTaskData downloadTaskData(AbstractRepositoryTask repositoryTask, TaskRepository repository, Proxy proxySettings) throws CoreException, LoginException; - - /** - * returns all tasks if date is null or an error occurs - */ - public abstract Set<AbstractRepositoryTask> getChangedSinceLastSync(TaskRepository repository, - Set<AbstractRepositoryTask> tasks, Proxy proxySettings) throws CoreException, UnsupportedEncodingException; - } diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/IRepositoryConstants.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/IRepositoryConstants.java deleted file mode 100644 index ba6228360..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/IRepositoryConstants.java +++ /dev/null @@ -1,36 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.tasks.core; - -/** - * @author Mik Kersten - */ -public interface IRepositoryConstants { - - public static final String OLD_PROPERTY_SYNCTIME = "synctime"; - - public static final String PROPERTY_SYNCTIMESTAMP = "lastsynctimestamp"; - - public static final String PROPERTY_TIMEZONE = "timezone"; - - public static final String PROPERTY_ENCODING = "encoding"; - - public static final String PROPERTY_VERSION = "version"; - - public static final String PROPERTY_KIND = "kind"; - - public static final String PROPERTY_URL = "url"; - - public static final String PROPERTY_LABEL = "label"; - - public static final String PROPERTY_DELIM = ":"; - -// public static final String PROPERTY_MIGRATION060 = "migration060"; - -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/ITask.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/ITask.java deleted file mode 100644 index 31906424c..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/ITask.java +++ /dev/null @@ -1,99 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -/* - * Created on Jan 13, 2005 - */ -package org.eclipse.mylar.tasks.core; - -import java.util.Date; -import java.util.Set; - -/** - * @author Mik Kersten - */ -public interface ITask extends ITaskListElement { - - public abstract String getHandleIdentifier(); - - public abstract ITask getParent(); - - public abstract void setParent(ITask parent); - - public abstract boolean isActive(); - - public abstract void setActive(boolean active); - -// abstract void setDescription(String description); - - public String getTaskType(); - - public void setKind(String kind); - - public abstract boolean isCompleted(); - - public abstract void setCompleted(boolean completed); - - public abstract boolean hasValidUrl(); - - public abstract void setUrl(String url); - - public abstract String getUrl(); - - public abstract String getNotes(); - - public abstract void setNotes(String notes); - - /** - * TODO: change to millis - */ - public abstract int getEstimateTimeHours(); - - public abstract void setEstimatedTimeHours(int estimated); - - public abstract Set<ITask> getChildren(); - - public abstract void addSubTask(ITask task); - - public abstract void removeSubTask(ITask task); - - public abstract void setPriority(String priority); - - public abstract void setContainer(AbstractTaskContainer category); - - /** - * @return null if root task - */ - public abstract AbstractTaskContainer getContainer(); - - public abstract Date getCompletionDate(); - - public abstract void setCompletionDate(Date date); - - public abstract Date getCreationDate(); - - public abstract void setCreationDate(Date date); - - public abstract void setReminderDate(Date date); - - public abstract Date getReminderDate(); - - /** - * TODO: move - */ - public abstract boolean hasBeenReminded(); - - /** - * TODO: move - */ - public abstract void setReminded(boolean reminded); - - public abstract boolean isPastReminder(); -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/ITaskListChangeListener.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/ITaskListChangeListener.java deleted file mode 100644 index e3907574f..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/ITaskListChangeListener.java +++ /dev/null @@ -1,43 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.core; - - -/** - * Listener for task list modifications and task content modifications. - * - * @author Mik Kersten - */ -public interface ITaskListChangeListener { - - public abstract void localInfoChanged(ITask task); - - public abstract void repositoryInfoChanged(ITask task); - - public abstract void taskDeleted(ITask task); - - public abstract void containerAdded(AbstractTaskContainer container); - - public abstract void containerDeleted(AbstractTaskContainer container); - - public abstract void containerInfoChanged(AbstractTaskContainer container); - - /** - * @param task - * @param fromContainer can be null - * @param toContainer can be null - */ - public abstract void taskMoved(ITask task, AbstractTaskContainer fromContainer, AbstractTaskContainer toContainer); - - public abstract void taskAdded(ITask task); - -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/ITaskListElement.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/ITaskListElement.java deleted file mode 100644 index 6dadf126c..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/ITaskListElement.java +++ /dev/null @@ -1,35 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.tasks.core; - - -/** - * @author Mik Kersten - */ -public interface ITaskListElement { - - public abstract String getPriority(); - - public abstract String getDescription(); - -// public abstract void setDescription(String description); - - public abstract String getHandleIdentifier(); - - public abstract void setHandleIdentifier(String id); - - /** - * TODO: refactor to use repository kinds? - */ -// public abstract boolean isLocal(); - -} - diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/ITaskListExternalizer.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/ITaskListExternalizer.java deleted file mode 100644 index 815b15e95..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/ITaskListExternalizer.java +++ /dev/null @@ -1,74 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.core; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -/** - * Used to externalize things like tasks and bug reports along with the task - * list so that information about them can be persisted across invocations. - * - * @author Mik Kersten - * @author Ken Sueda - * - * TODO: consider merging tasks and categories - */ -public interface ITaskListExternalizer { - - public abstract String getCategoryTagName(); - - public abstract String getTaskTagName(); - - public abstract String getQueryTagNameForElement(AbstractRepositoryQuery query); - - public abstract String getQueryHitTagName(); - - /** - * @return the element that was created, null if failed - */ - public abstract Element createCategoryElement(AbstractTaskContainer category, Document doc, Element parent); - - public abstract boolean canCreateElementFor(ITask task); - - /** - * @return the element that was created, null if failed - */ - public abstract Element createTaskElement(ITask task, Document doc, Element parent); - - public abstract boolean canReadCategory(Node node); - - public abstract void readCategory(Node node, TaskList tlist) throws TaskExternalizationException; - - public abstract boolean canReadTask(Node node); - - public abstract ITask readTask(Node node, TaskList tlist, AbstractTaskContainer category, ITask parent) - throws TaskExternalizationException; - - public abstract boolean canCreateElementFor(AbstractRepositoryQuery category); - - public abstract Element createQueryElement(AbstractRepositoryQuery query, Document doc, Element parent); - - public abstract boolean canReadQuery(Node node); - - public abstract AbstractRepositoryQuery readQuery(Node node, TaskList tlist) throws TaskExternalizationException; - - public abstract boolean canCreateElementFor(AbstractQueryHit queryHit); - - public abstract Element createQueryHitElement(AbstractQueryHit queryHit, Document doc, Element parent); - - public abstract boolean canReadQueryHit(Node node); - - public abstract void readQueryHit(Node node, TaskList tlist, AbstractRepositoryQuery query) - throws TaskExternalizationException; -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/QueryHitCollector.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/QueryHitCollector.java deleted file mode 100644 index e94f48da4..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/QueryHitCollector.java +++ /dev/null @@ -1,116 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.tasks.core; - -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.NullProgressMonitor; - -/** - * Collects QueryHits resulting from repository search - * - * @author Shawn Minto - * @author Rob Elves (generalized from bugzilla) - */ -public class QueryHitCollector { - - private List<AbstractQueryHit> results = new ArrayList<AbstractQueryHit>(); - - /** The progress monitor for the search operation */ - private IProgressMonitor monitor = new NullProgressMonitor(); - - /** The number of matches found */ - private int matchCount; - - /** The string to display to the user while querying */ - private static final String STARTING = "querying the server"; - - /** The string to display to the user when we have 1 match */ - private static final String MATCH = "1 match"; - - /** The string to display to the user when we have multiple or no matches */ - private static final String MATCHES = "{0} matches"; - - /** The string to display to the user when the query is done */ - private static final String DONE = "done"; - - private TaskList taskList; - - public QueryHitCollector(TaskList tasklist) { - this.taskList = tasklist; - } - - public void aboutToStart(int startMatchCount) throws CoreException { - results.clear(); - matchCount = startMatchCount; - monitor.setTaskName(STARTING); - } - - public void accept(AbstractQueryHit hit) throws CoreException { - - ITask correspondingTask = taskList.getTask(hit.getHandleIdentifier()); - if (correspondingTask instanceof AbstractRepositoryTask) { - hit.setCorrespondingTask((AbstractRepositoryTask) correspondingTask); - } - - addMatch(hit); - matchCount++; - - if (!getProgressMonitor().isCanceled()) { - // if the operation is canceled finish with whatever data was - // already found - getProgressMonitor().subTask(getFormattedMatchesString(matchCount)); - getProgressMonitor().worked(1); - } - } - - public void done() { - if (monitor != null && !monitor.isCanceled()) { - // if the operation is cancelled, finish with the data that we - // already have - String matchesString = getFormattedMatchesString(matchCount); - monitor.setTaskName(MessageFormat.format(DONE, new Object[] { matchesString })); - monitor.done(); - } - - // Cut no longer used references because the collector might be re-used - monitor = null; - } - - protected String getFormattedMatchesString(int count) { - if (count == 1) { - return MATCH; - } - Object[] messageFormatArgs = { new Integer(count) }; - return MessageFormat.format(MATCHES, messageFormatArgs); - } - - public IProgressMonitor getProgressMonitor() { - return monitor; - } - - public void setProgressMonitor(IProgressMonitor monitor) { - this.monitor = monitor; - } - - public void addMatch(AbstractQueryHit hit) { - results.add(hit); - } - - public List<AbstractQueryHit> getHits() { - return results; - } - -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/RepositoryAttachment.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/RepositoryAttachment.java deleted file mode 100644 index fe4da0faa..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/RepositoryAttachment.java +++ /dev/null @@ -1,107 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.core; - -import java.io.Serializable; - - -/** - * @author Rob Elves - */ -public class RepositoryAttachment extends AttributeContainer implements Serializable { - - public RepositoryAttachment(AbstractAttributeFactory attributeFactory) { - super(attributeFactory); - } - - private static final long serialVersionUID = -9123545810321250785L; - - // /** Parser for dates in the report */ - // // TODO: this is repository specific so need to pull out - // private static SimpleDateFormat creation_ts_date_format = new - // SimpleDateFormat("yyyy-MM-dd HH:mm"); - - private boolean isObsolete = false; - - // private Date created; - - private String creator = ""; - - private boolean isPatch = false; - - public boolean isObsolete() { - return isObsolete; - } - - public void setObsolete(boolean isObsolete) { - this.isObsolete = isObsolete; - } - - /** - * Get the time that this attachment was posted - * - * @return The attachment's creation timestamp - */ - public String getDateCreated() { - return getAttributeValue(RepositoryTaskAttribute.ATTACHMENT_DATE); - // if (created == null) { - // // created = Calendar.getInstance().getTime(); - // try { - // created = - // creation_ts_date_format.parse(getAttributeValue(RepositoryTaskAttribute.ATTACHMENT_DATE)); - // } catch (Exception e) { - // } - // } - // return created; - } - - public String getCreator() { - return creator; - } - - public void setCreator(String creator) { - this.creator = creator; - } - - public String getDescription() { - return getAttributeValue(RepositoryTaskAttribute.DESCRIPTION); - } - - public int getId() { - try { - return Integer.parseInt(getAttributeValue(RepositoryTaskAttribute.ATTACHMENT_ID)); - } catch (NumberFormatException e) { - return -1; - } - } - - public String getUrl() { - return getAttributeValue(RepositoryTaskAttribute.ATTACHMENT_URL); - } - - public String getContentType() { - // I've seen both "ctype" and "type" occur for this, investigate - if (getAttribute(RepositoryTaskAttribute.ATTACHMENT_TYPE) != null) { - return getAttributeValue(RepositoryTaskAttribute.ATTACHMENT_TYPE); - } else { - return getAttributeValue(RepositoryTaskAttribute.ATTACHMENT_CTYPE); - } - } - - public boolean isPatch() { - return isPatch; - } - - public void setPatch(boolean b) { - isPatch = b; - } -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/RepositoryTaskAttribute.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/RepositoryTaskAttribute.java deleted file mode 100644 index 240544785..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/RepositoryTaskAttribute.java +++ /dev/null @@ -1,216 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.core; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -/** - * Class representing a report attribute - * - * @author Rob Elves - */ -public class RepositoryTaskAttribute implements Serializable { - - private static final long serialVersionUID = 6959987055086133307L; - - public static final String USER_OWNER = "task.common.user.owner"; - - public static final String USER_CC = "task.common.user.cc"; - - public static final String COMMENT_TEXT = "task.common.comment.text"; - - public static final String COMMENT_DATE = "task.common.comment.date"; - - public static final String DESCRIPTION = "task.common.description"; - - public static final String ATTACHMENT_ID = "task.common.attachment.id"; - - public static final String ATTACHMENT_TYPE = "task.common.attachment.type"; - - public static final String ATTACHMENT_CTYPE = "task.common.attachment.ctype"; - - public static final String ATTACHMENT_DATE = "task.common.attachment.date"; - - public static final String ATTACHMENT_URL = "task.common.attachment.url"; - - public static final String ATTACHMENT_FILENAME = "filename"; - - public static final String USER_ASSIGNED = "task.common.user.assigned"; - - public static final String RESOLUTION = "task.common.resolution"; - - public static final String STATUS = "task.common.status"; - - public static final String PRIORITY = "task.common.priority"; - - public static final String DATE_MODIFIED = "task.common.date.modified"; - - public static final String USER_REPORTER = "task.common.user.reporter"; - - public static final String SUMMARY = "task.common.summary"; - - public static final String PRODUCT = "task.common.product"; - - public static final String DATE_CREATION = "task.common.date.created"; - - public static final String KEYWORDS = "task.common.keywords"; - - public static final String ADD_SELF_CC = "task.common.addselfcc"; - - private boolean hidden = false; - - private boolean isReadOnly = false; - - /** Attribute pretty printing name */ - private String name; - - /** Name of the option used when updating the attribute on the server */ - private String key; - - /** Legal values of the attribute */ - private LinkedHashMap<String, String> optionValues; - - /** - * Attribute's values (selected or added) - */ - private List<String> values = new ArrayList<String>(); - -// public RepositoryTaskAttribute(String key, ) { -// this(element.toString(), element.isHidden()); -// setID(element.getKeyString()); -// setReadOnly(element.isReadOnly()); -// } - - public RepositoryTaskAttribute(String key, String name, boolean hidden) { - this.key = key; - this.name = name; - this.hidden = hidden; - optionValues = new LinkedHashMap<String, String>(); - } - - public String getName() { - return name; - } - - public String getID() { - return key; - } - - public boolean isReadOnly() { - return isReadOnly ; - } - - public void setReadOnly(boolean readonly) { - this.isReadOnly = readonly; - } - - public Map<String, String> getOptionValues() { - return optionValues; - } - - public String getValue() { - if (values.size() > 0) { - return values.get(0); - } else { - return ""; - } - } - - public List<String> getValues() { - return values; - } - - public void setValue(String value) { - if(values.size() > 0) { - values.set(0, value); - } else { - values.add(value); - } - } - - public void setValues(List<String> values) { - values.clear(); - values.addAll(values); - } - - public void addValue(String value) { - values.add(value); - } - - public void removeValue(String value) { - if (values.contains(value)) { - values.remove(values.indexOf(value)); - } - } - - public void clearValues() { - values.clear(); - } - -// /** -// * Sets the name of the option used when updating the attribute on the -// * server -// * -// * @param parameterName -// * The name of the option when updating from the server -// */ -// public void setID(String parameterName) { -// this.id = parameterName; -// } - - /** - * Adds an attribute option value - * - * @param readableValue - * The value displayed on the screen - * @param parameterValue - * The option value used when sending the form to the server - */ - public void addOptionValue(String readableValue, String parameterValue) { - optionValues.put(readableValue, parameterValue); - } - - /** - * Determine if the field was hidden or not - * - * @return True if the field was hidden - */ - public boolean isHidden() { - return hidden; - } - - /** - * Set whether the field was hidden in the bug - * - * @param b - * Whether the field was hidden or not - */ - public void setHidden(boolean b) { - hidden = b; - } - - public String toString() { - return getValue(); - } - - public boolean hasOptions() { - return optionValues.size() > 0; - } - - public void clearOptions() { - optionValues.clear(); - } -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/RepositoryTaskData.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/RepositoryTaskData.java deleted file mode 100644 index 0eab892cc..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/RepositoryTaskData.java +++ /dev/null @@ -1,368 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.core; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Date; -import java.util.Iterator; -import java.util.List; -import java.util.StringTokenizer; - -/** - * @author Mik Kersten - * @author Rob Elves - */ -public class RepositoryTaskData extends AttributeContainer implements Serializable { - - private static final long serialVersionUID = 2746931358107812373L; - - public static final String VAL_STATUS_NEW = "NEW"; - - private String reportID; - - private boolean hasChanges = false; - - private String repositoryURL; - - protected String newComment = ""; - - private List<TaskComment> taskComments = new ArrayList<TaskComment>(); - - private List<RepositoryAttachment> attachments = new ArrayList<RepositoryAttachment>(); - - - /** The operation that was selected to do to the bug */ - protected RepositoryOperation selectedOperation = null; - - /** Whether or not this bug report is saved offline. */ - protected boolean savedOffline = false; - - protected String charset = null; - - /** The repositoryOperations that can be done on the report */ - protected List<RepositoryOperation> repositoryOperations = new ArrayList<RepositoryOperation>(); - - // private static final RepositoryTaskAttributeFactory attributeFactory = - // new BugzillaAttributeFactory(); - - // /** Parser for dates in the report */ - // private static SimpleDateFormat delta_ts_format = new - // SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - // - // private static SimpleDateFormat creation_ts_format = new - // SimpleDateFormat("yyyy-MM-dd HH:mm"); - - /** The bugs valid keywords */ - protected List<String> validKeywords; - - /** Description of the bug */ - protected String description; - - /** Creation timestamp */ - protected Date created; - - /** Modification timestamp */ - protected Date lastModified = null; - - protected String repositoryKind; - - public RepositoryTaskData(AbstractAttributeFactory factory, String repositoryKind, String repositoryURL, String id) { - super(factory); - this.reportID = id; - this.repositoryKind = repositoryKind; - this.repositoryURL = repositoryURL; - } - -// /** -// * TODO: move? -// */ -// public static boolean isResolvedStatus(String status) { -// if (status != null) { -// return status.equals(VAL_STATUS_RESOLVED) || status.equals(VAL_STATUS_CLOSED) -// || status.equals(VAL_STATUS_VERIFIED); -// } else { -// return false; -// } -// } - - public String getLabel() { - return getSummary(); - } - - /** - * Get the resolution of the bug - * - * @return The resolution of the bug - */ - public String getResolution() { - return getAttributeValue(RepositoryTaskAttribute.RESOLUTION); - } - - /** - * Get the status of the bug - * - * @return The bugs status - */ - public String getStatus() { - return getAttributeValue(RepositoryTaskAttribute.STATUS); - } - - public String getLastModified() { - return getAttributeValue(RepositoryTaskAttribute.DATE_MODIFIED); - } - - public void setSelectedOperation(RepositoryOperation o) { - selectedOperation = o; - } - - public RepositoryOperation getSelectedOperation() { - return selectedOperation; - } - - /** - * Get all of the repositoryOperations that can be done to the bug - * - * @return The repositoryOperations that can be done to the bug - */ - public List<RepositoryOperation> getOperations() { - return repositoryOperations; - } - - /** - * Get the person who reported the bug - * - * @return The person who reported the bug - */ - public String getReporter() { - return getAttributeValue(RepositoryTaskAttribute.USER_REPORTER); - // return - // getAttributeValue(BugzillaReportElement.REPORTER.getKeyString()); - } - - /** - * Get an operation from the bug based on its display name - * - * @param displayText - * The display text for the operation - * @return The operation that has the display text - */ - public RepositoryOperation getOperation(String displayText) { - Iterator<RepositoryOperation> itr = repositoryOperations.iterator(); - while (itr.hasNext()) { - RepositoryOperation o = itr.next(); - String opName = o.getOperationName(); - opName = opName.replaceAll("</.*>", ""); - opName = opName.replaceAll("<.*>", ""); - if (opName.equals(displayText)) - return o; - } - return null; - } - - /** - * Get the summary for the bug - * - * @return The bugs summary - */ - public String getSummary() { - return getAttributeValue(RepositoryTaskAttribute.SUMMARY); - // return - // getAttributeValue(BugzillaReportElement.SHORT_DESC.getKeyString()); - } - - public void setSummary(String summary) { - throw new NullPointerException("not impelmented"); - // setAttributeValue(RepositoryTaskAttribute.SHORT_DESC, summary); - // setAttributeValue(BugzillaReportElement.SHORT_DESC.getKeyString(), - // summary); - } - - public String getProduct() { - return getAttributeValue(RepositoryTaskAttribute.PRODUCT); - // return - // getAttributeValue(BugzillaReportElement.PRODUCT.getKeyString()); - } - - public boolean isLocallyCreated() { - return false; - } - -// public boolean isResolved() { -// return isResolvedStatus(getStatus()); -// } - - /** - * Get the date that the bug was created - * - * @return The bugs creation date - */ - public String getCreated() { - return getAttributeValue(RepositoryTaskAttribute.DATE_CREATION); - } - - /** - * Get the keywords for the bug - * - * @return The keywords for the bug - */ - public List<String> getKeywords() { - - // get the selected keywords for the bug - StringTokenizer st = new StringTokenizer(getAttributeValue(RepositoryTaskAttribute.KEYWORDS), ",", false); - List<String> keywords = new ArrayList<String>(); - while (st.hasMoreTokens()) { - String s = st.nextToken().trim(); - keywords.add(s); - } - - return keywords; - } - - /** - * Add an operation to the bug - * - * @param o - * The operation to add - */ - public void addOperation(RepositoryOperation o) { - repositoryOperations.add(o); - } - - public List<String> getCC() { - return getAttributeValues(RepositoryTaskAttribute.USER_CC); - // return getAttributeValues(BugzillaReportElement.CC.getKeyString()); - } - - public void removeCC(String email) { - removeAttributeValue(RepositoryTaskAttribute.USER_CC, email); - // removeAttributeValue(BugzillaReportElement.CC.getKeyString(), email); - } - - public String getAssignedTo() { - return getAttributeValue(RepositoryTaskAttribute.USER_ASSIGNED); - // return getAttributeValue(BugzillaReportElement.ASSIGNED_TO); - } - - /** - * Get the new comment that is to be added to the bug - */ - public String getNewComment() { - return newComment; - } - - /** - * Set the new comment that will be added to the bug - */ - public void setNewComment(String newComment) { - this.newComment = newComment; - } - - public void addComment(TaskComment taskComment) { - TaskComment preceding = null; - if (taskComments.size() > 0) { - // if there are some comments, get the last comment and set the next - // value to be the new comment - preceding = taskComments.get(taskComments.size() - 1); - preceding.setNext(taskComment); - } - taskComment.setPrevious(preceding); - taskComments.add(taskComment); - } - - public List<TaskComment> getComments() { - return taskComments; - } - - public void setDescription(String description) { - RepositoryTaskAttribute attribute = getDescriptionAttribute(); - if(attribute != null) { - attribute.setValue(description); - } - } - - public String getDescription() { - RepositoryTaskAttribute attribute = getDescriptionAttribute(); - return (attribute != null) ? attribute.getValue() : ""; - } - - public RepositoryTaskAttribute getDescriptionAttribute() { - RepositoryTaskAttribute attribute = getAttribute(RepositoryTaskAttribute.DESCRIPTION); - if (attribute != null) { - return attribute; - } else { - List<TaskComment> coms = this.getComments(); - if (coms != null && coms.size() > 0) { - return coms.get(0).getAttribute(RepositoryTaskAttribute.COMMENT_TEXT); - } - } - return null; - } - - public void addAttachment(RepositoryAttachment attachment) { - attachments.add(attachment); - } - - public List<RepositoryAttachment> getAttachments() { - return attachments; - } - - public String getId() { - return reportID; - } - - /** - * @return the server for this report - */ - public String getRepositoryUrl() { - return repositoryURL; - } - - public boolean hasLocalChanges() { - return hasChanges; - } - - public void setHasLocalChanges(boolean b) { - hasChanges = b; - } - - public List<String> getAttributeValues(String key) { - RepositoryTaskAttribute attribute = getAttribute(key); - if (attribute != null) { - return attribute.getValues(); - } - return new ArrayList<String>(); - } - - public void removeAttributeValue(String key, String value) { - RepositoryTaskAttribute attrib = getAttribute(key); - if (attrib != null) { - attrib.removeValue(value); - } - } - - public String getRepositoryKind() { - return repositoryKind; - } - - @Override - public void setAttributeFactory(AbstractAttributeFactory factory) { - super.setAttributeFactory(factory); - for (TaskComment taskComment : taskComments) { - taskComment.setAttributeFactory(factory); - } - for (RepositoryAttachment attachment : attachments) { - attachment.setAttributeFactory(factory); - } - } - -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/RepositoryTemplate.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/RepositoryTemplate.java deleted file mode 100644 index 07023398b..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/RepositoryTemplate.java +++ /dev/null @@ -1,63 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.core; - -import java.util.HashMap; -import java.util.Map; - -/** - * @author Eugene Kuleshov - * @author Steffen Pingel - */ -public class RepositoryTemplate { - - public final Map<String, String> genericAttributes = new HashMap<String, String>(); - - public final String label; - - public final String repositoryUrl; - - public final String newTaskUrl; - - public final String taskPrefixUrl; - - public final String taskQueryUrl; - - public final String newAccountUrl; - - public final boolean anonymous; - - public final String version; - - public final boolean addAutomatically; - - public RepositoryTemplate(String label, String repositoryUrl, String version, String newTaskUrl, String taskPrefix, - String taskQuery, String newAccountUrl, boolean anonymous, boolean addAutomatically) { - this.label = label; - this.repositoryUrl = repositoryUrl; - this.newTaskUrl = newTaskUrl; - this.taskPrefixUrl = taskPrefix; - this.taskQueryUrl = taskQuery; - this.newAccountUrl = newAccountUrl; - this.version = version; - this.anonymous = anonymous; - this.addAutomatically = addAutomatically; - } - - public void addAttribute(String name, String value) { - genericAttributes.put(name, value); - } - - public String getAttribute(String name) { - return genericAttributes.get(name); - } -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/Task.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/Task.java deleted file mode 100644 index ec156016b..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/Task.java +++ /dev/null @@ -1,371 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.core; - -import java.net.MalformedURLException; -import java.net.URL; -import java.util.Date; -import java.util.HashSet; -import java.util.Set; - -import org.eclipse.mylar.context.core.MylarStatusHandler; - -/** - * @author Mik Kersten - */ -public class Task implements ITask { - - private static final String REPOSITORY_KIND_LOCAL = "local"; - - public enum PriorityLevel { - P1, P2, P3, P4, P5; - - @Override - public String toString() { - switch (this) { - case P1: - return "P1"; - case P2: - return "P2"; - case P3: - return "P3"; - case P4: - return "P4"; - case P5: - return "P5"; - default: - return "P3"; - } - } - - public String getDescription() { - switch (this) { - case P1: - return "Very High"; - case P2: - return "High"; - case P3: - return "Normal"; - case P4: - return "Low"; - case P5: - return "Very Low"; - default: - return ""; - } - } - - public static PriorityLevel fromString(String string) { - if (string == null) - return null; - if (string.equals("P1")) - return P1; - if (string.equals("P2")) - return P2; - if (string.equals("P3")) - return P3; - if (string.equals("P4")) - return P4; - if (string.equals("P5")) - return P5; - return P3; - } - - public static PriorityLevel fromDescription(String string) { - if (string == null) - return null; - if (string.equals("Very High")) - return P1; - if (string.equals("High")) - return P2; - if (string.equals("Normal")) - return P3; - if (string.equals("Low")) - return P4; - if (string.equals("Very Low")) - return P5; - return null; - } - - } - - private boolean active = false; - - protected String handle = "-1"; - - private boolean category = false; - - private boolean hasReminded = false; - - private String description; - - private String priority = PriorityLevel.P3.toString(); - - private String notes = ""; - - private int estimatedTimeHours = 1; - - private boolean completed; - - private String url = ""; - - private AbstractTaskContainer parentCategory = null; - - private long timeActive = 0; - - private Date completionDate = null; - - private Date creationDate = null; - - private Date reminderDate = null; - - /** - * @return null if root - */ - private transient ITask parent; - - private Set<ITask> children = new HashSet<ITask>(); - - protected String kind; - - @Override - public String toString() { - return description; - } - - public Task(String handle, String label, boolean newTask) { - this.handle = handle; - this.description = label; - if (newTask) { - creationDate = new Date(); - } - } - - public String getHandleIdentifier() { - return handle; - } - - public void setHandleIdentifier(String id) { - this.handle = id; - } - - public ITask getParent() { - return parent; - } - - public void setParent(ITask parent) { - this.parent = parent; - } - - /** - * Package visible in order to prevent sets that don't update the index. - */ - public void setActive(boolean active) { - this.active = active; - } - - public boolean isActive() { - return active; - } - - public String getToolTipText() { - return getDescription(); - } - - @Override - public boolean equals(Object obj) { - if (obj instanceof Task && obj != null) { - return this.getHandleIdentifier().compareTo(((Task) obj).getHandleIdentifier()) == 0; - } else { - return false; - } - } - - @Override - public int hashCode() { - return this.getHandleIdentifier().hashCode(); - } - - public boolean isCompleted() { - return completed; - } - - public void setCompleted(boolean completed) { - this.completed = completed; - if (completed) { - completionDate = new Date(); - } else { - completionDate = null; - } - } - - public boolean isCategory() { - return category; - } - - public void setIsCategory(boolean category) { - this.category = category; - } - - public String getPriority() { - return priority; - } - - public void setPriority(String priority) { - this.priority = priority; - } - - public void setUrl(String url) { - this.url = url; - } - - public String getUrl() { - return url; - } - - public String getNotes() { - // TODO: removed check for null once xml updated. - if (notes == null) { - notes = ""; - } - return notes; - } - - public void setNotes(String notes) { - this.notes = notes; - } - - public long getElapsedTime() { - return timeActive; - } - - public void setElapsedTime(long elapsedTime) { - if (elapsedTime >= 0) { - this.timeActive = elapsedTime; - } else { - MylarStatusHandler.log("Attempt to set negative time on task: " + getDescription(), this); - } - } - - public int getEstimateTimeHours() { - return estimatedTimeHours; - } - - public void setEstimatedTimeHours(int estimated) { - this.estimatedTimeHours = estimated; - } - - public Set<ITask> getChildren() { - return children; - } - - public void addSubTask(ITask t) { - children.add(t); - } - - public void removeSubTask(ITask t) { - children.remove(t); - } - - public void setContainer(AbstractTaskContainer cat) { - this.parentCategory = cat; - } - - public AbstractTaskContainer getContainer() { - return parentCategory; - } - - public String getDescription() { - return description; - } - - public boolean isLocal() { - return true; - } - - public Date getCompletionDate() { - return completionDate; - } - - public void setReminderDate(Date date) { - reminderDate = date; - } - - public Date getReminderDate() { - return reminderDate; - } - - public boolean hasBeenReminded() { - return hasReminded; - } - - public void setReminded(boolean reminded) { - this.hasReminded = reminded; - } - - public Date getCreationDate() { - if (creationDate == null) - creationDate = new Date(); - return creationDate; - } - - public void setCreationDate(Date date) { - this.creationDate = date; - } - - public void setDescription(String description) { - this.description = description; - } - - public void setCompletionDate(Date completionDate) { - this.completionDate = completionDate; - } - - public boolean isPastReminder() { - if (reminderDate == null) { - return false; - } else { - Date now = new Date(); - if (reminderDate.compareTo(now) < 0) { - return true; - } else { - return false; - } - } - } - - public boolean hasValidUrl() { - String taskUrl = getUrl(); - if (taskUrl != null && !taskUrl.equals("") && !taskUrl.equals("http://") && !taskUrl.equals("https://")) { - try { - new URL(taskUrl); - return true; - } catch (MalformedURLException e) { - return false; - } - } - return false; - } - - public String getRepositoryKind() { - return REPOSITORY_KIND_LOCAL; - } - - public String getTaskType() { - return kind; - } - - public void setKind(String kind) { - this.kind = kind; - } - -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskArchive.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskArchive.java deleted file mode 100644 index a00571346..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskArchive.java +++ /dev/null @@ -1,46 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.core; - - - -/** - * @author Mik Kersten - */ -public class TaskArchive extends AbstractTaskContainer { - - public static final String HANDLE = "archive"; - - public static final String LABEL_ARCHIVE = "Archive (all tasks)"; - - public TaskArchive(TaskList taskList) { - super(HANDLE, taskList); - } - - public String getPriority() { - return Task.PriorityLevel.P1.toString(); - } - - @Override - public String getHandleIdentifier() { - return HANDLE; - } - - public String getDescription() { - return LABEL_ARCHIVE; - } - - @Override - public boolean isLocal() { - return true; - } -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskComment.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskComment.java deleted file mode 100644 index 9d9f56a27..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskComment.java +++ /dev/null @@ -1,185 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.core; - -import java.io.Serializable; - -/** - * A comment posted on a bug. - * - * @author Rob Elves (revisions for bug 136219) - */ -public class TaskComment extends AttributeContainer implements Serializable { - - private static final long serialVersionUID = -1760372869047050979L; - - // /** Parser for dates in the report */ - // public static SimpleDateFormat creation_ts_date_format = new - // SimpleDateFormat("yyyy-MM-dd HH:mm"); - - /** Comment's bug */ - private final RepositoryTaskData bug; - - /** Comment's number */ - private final int number; - - // /** Comment's creation timestamp */ - // private Date created; - - /** Preceding comment */ - private TaskComment previous; - - /** Following comment */ - private TaskComment next; - - private boolean hasAttachment; - - private int attachmentId; - - public TaskComment(AbstractAttributeFactory attributeFactory, RepositoryTaskData report, int num) { - super(attributeFactory); - this.bug = report; - this.number = num; - } - - /** - * Get the bug that this comment is associated with - * - * @return The bug that this comment is associated with - */ - public RepositoryTaskData getBug() { - return bug; - } - - /** - * Get this comment's number - * - * @return This comment's number - */ - public int getNumber() { - return number; - } - - /** - * Get the time that this comment was created - * - * @return The comments creation timestamp - */ - public String getCreated() { - return getAttributeValue(RepositoryTaskAttribute.COMMENT_DATE); - // TaskRepository repository = - // MylarTaskListPlugin.getRepositoryManager().getRepository(bug.getRepositoryKind(), - // bug.getRepositoryUrl()); - // TimeZone timeZone = TimeZone.getDefault(); - // if(repository != null) { - // timeZone = TimeZone.getTimeZone(repository.getTimeZoneId()); - // } - // if (created == null) { - // created = Calendar.getInstance().getTime(); - // try { - // creation_ts_date_format.setTimeZone(timeZone); - // created = - // creation_ts_date_format.parse(getAttributeValue(RepositoryTaskAttribute.COMMENT_DATE)); - // } catch (Exception e) { - // // ignore - // // MylarStatusHandler.log("Comment creation date parse error, - // // setting to NOW.", Comment.class); - // } - // } - // return created; - } - - /** - * Get the author of the comment - * - * @return The comments author - */ - public String getAuthor() { - return getAttributeValue(RepositoryTaskAttribute.USER_OWNER); - } - - /** - * Get the authors real name - * - * @return Returns author's name, or <code>null</code> if not known - */ - public String getAuthorName() { - // TODO: Currently we don't get the real name from the xml. - // Need retrieve these names somehow - return getAuthor(); - } - - /** - * Get the text contained in the comment - * - * @return The comments text - */ - public String getText() { - return getAttributeValue(RepositoryTaskAttribute.COMMENT_TEXT); - } - - /** - * Get the next comment for the bug - * - * @return Returns the following comment, or <code>null</code> if the last - * one. - */ - public TaskComment getNext() { - return next; - } - - /** - * Set the next comment for the bug - * - * @param next - * The comment that is after this one - */ - protected void setNext(TaskComment next) { - this.next = next; - } - - /** - * Get the previous comment - * - * @return Returns preceding comment, or <code>null</code> if the first - * one - */ - public TaskComment getPrevious() { - return previous; - } - - /** - * Seth the previous comment for the bug - * - * @param previous - * The comment that is before this one - */ - protected void setPrevious(TaskComment previous) { - this.previous = previous; - } - - public void setHasAttachment(boolean b) { - this.hasAttachment = b; - } - - public boolean hasAttachment() { - return hasAttachment; - } - - public void setAttachmentId(int attachmentID) { - this.attachmentId = attachmentID; - } - - public int getAttachmentId() { - return attachmentId; - } -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskList.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskList.java deleted file mode 100644 index d032d678a..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskList.java +++ /dev/null @@ -1,532 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.core; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.eclipse.mylar.context.core.MylarStatusHandler; - -/** - * TODO: some asymetry left between query containers and other task containers - * - * @author Mik Kersten - */ -public class TaskList { - - public static final String LABEL_ROOT = "Root (automatic)"; - - private List<ITaskListChangeListener> changeListeners = new ArrayList<ITaskListChangeListener>(); - - private Map<String, ITask> tasks; - - private TaskArchive archiveContainer; - - private TaskCategory rootCategory; - - private Set<AbstractTaskContainer> categories; - - private Set<AbstractRepositoryQuery> queries; - - private List<ITask> activeTasks; - - public TaskList() { - reset(); - } - - /** - * Public for testing. - */ - public void reset() { - tasks = new HashMap<String, ITask>(); - archiveContainer = new TaskArchive(this); - rootCategory = new TaskCategory(LABEL_ROOT, this); - categories = new HashSet<AbstractTaskContainer>(); - queries = new HashSet<AbstractRepositoryQuery>(); - activeTasks = new ArrayList<ITask>(); - - categories.add(archiveContainer); - } - - public void addTask(ITask task) { - addTask(task, archiveContainer); - } - - public void addTask(ITask task, AbstractTaskContainer category) { - tasks.put(task.getHandleIdentifier(), task); - if (category != null) { - category.add(task); - task.setContainer(category); - } else { - rootCategory.add(task); - task.setContainer(rootCategory); - } - for (ITaskListChangeListener listener : changeListeners) { - listener.taskAdded(task); - } - } - - public void refactorRepositoryUrl(Object oldUrl, String newUrl) { - for (ITask task : new ArrayList<ITask>(tasks.values())) { - if (task instanceof AbstractRepositoryTask) { - AbstractRepositoryTask repositoryTask = (AbstractRepositoryTask) task; - if (oldUrl.equals(AbstractRepositoryTask.getRepositoryUrl(repositoryTask.getHandleIdentifier()))) { - tasks.remove(repositoryTask.getHandleIdentifier()); - String id = AbstractRepositoryTask.getTaskId(repositoryTask.getHandleIdentifier()); - String newHandle = AbstractRepositoryTask.getHandle(newUrl, id); - repositoryTask.setHandleIdentifier(newHandle); - tasks.put(newHandle, repositoryTask); - } - } - } - - for (AbstractRepositoryQuery query : queries) { - if (query.getRepositoryUrl().equals(oldUrl)) { - query.setRepositoryUrl(newUrl); - for (AbstractQueryHit hit : query.getHits()) { - hit.setRepositoryUrl(newUrl); - } - for (ITaskListChangeListener listener : changeListeners) { - listener.containerInfoChanged(query); - } - } - } - } - - public void moveToRoot(ITask task) { - moveToContainer(rootCategory, task); - } - - public void moveToContainer(AbstractTaskContainer toContainer, ITask task) { - if (!tasks.containsKey(task.getHandleIdentifier())) { - tasks.put(task.getHandleIdentifier(), task); - } - - AbstractTaskContainer fromContainer = task.getContainer(); - if (fromContainer instanceof AbstractTaskContainer) { - ((AbstractTaskContainer) fromContainer).remove(task); - } - if (toContainer != null) { - internalAddTask(task, toContainer); - } else { - internalAddTask(task, archiveContainer); - } - for (ITaskListChangeListener listener : changeListeners) { - listener.taskMoved(task, fromContainer, toContainer); - } - } - - public void addCategory(AbstractTaskContainer category) { - categories.add(category); - for (ITaskListChangeListener listener : changeListeners) { - listener.containerAdded(category); - } - } - - public void removeFromCategory(TaskCategory category, ITask task) { - moveToContainer(archiveContainer, task); - } - - public void removeFromRoot(ITask task) { - moveToContainer(archiveContainer, task); - } - - public void renameTask(Task task, String description) { - task.setDescription(description); - for (ITaskListChangeListener listener : changeListeners) { - listener.localInfoChanged(task); - } - } - - public void renameContainer(AbstractTaskContainer container, String newDescription) { - if (!(container instanceof TaskArchive)) { - if (queries.remove(container)) { - container.setDescription(newDescription); - if (container instanceof AbstractRepositoryQuery) { - this.addQuery((AbstractRepositoryQuery) container); - } - } else if (categories.remove(container)) { - container.setDescription(newDescription); - this.addCategory(container); - } - } - for (ITaskListChangeListener listener : changeListeners) { - listener.containerInfoChanged(container); - } - } - - public void addQuery(AbstractRepositoryQuery query) { - queries.add(query); - for (ITaskListChangeListener listener : changeListeners) { - listener.containerAdded(query); - } - } - - /** - * TODO: refactor around querying containers for their tasks - * - * Task is removed from all containers: root, archive, category, and tasks - * catchall (Currently no support for deletion of subtasks) - */ - public void deleteTask(ITask task) { - archiveContainer.remove(task); - rootCategory.remove(task); - if (task.getContainer() != null) { - task.getContainer().remove(task); - task.setContainer(null); - } - tasks.remove(task.getHandleIdentifier()); - for (ITaskListChangeListener listener : changeListeners) { - listener.taskDeleted(task); - } - } - - public void deleteCategory(AbstractTaskContainer category) { - for (ITask task : category.getChildren()) { - rootCategory.add(task); - } - categories.remove(category); - for (ITaskListChangeListener listener : changeListeners) { - listener.containerDeleted(category); - } - } - - public void deleteQuery(AbstractRepositoryQuery query) { - queries.remove(query); - for (ITaskListChangeListener listener : changeListeners) { - listener.containerDeleted(query); - } - } - - public void markComplete(ITask task, boolean complete) { - task.setCompleted(complete); - for (ITaskListChangeListener listener : new ArrayList<ITaskListChangeListener>(changeListeners)) { - listener.localInfoChanged(task); - } - } - - public void addChangeListener(ITaskListChangeListener listener) { - changeListeners.add(listener); - } - - public void removeChangeListener(ITaskListChangeListener listener) { - changeListeners.remove(listener); - } - - /** - * NOTE: Only public so that other externalizers can use it - */ - public void internalAddCategory(AbstractTaskContainer cat) { - categories.add(cat); - } - - public void internalAddTask(ITask task, AbstractTaskContainer container) { - tasks.put(task.getHandleIdentifier(), task); - if (container != null) { - task.setContainer(container); - container.add(task); - } else { - task.setContainer(rootCategory); - rootCategory.add(task); - } - } - - public void internalAddRootTask(ITask task) { - internalAddTask(task, rootCategory); - } - - public void internalAddQuery(AbstractRepositoryQuery query) { - queries.add(query); - } - - public void setActive(ITask task, boolean active) { - task.setActive(active); - if (active && !activeTasks.contains(task)) { - activeTasks.add(task); - } else if (!active) { - activeTasks.remove(task); - } - } - - // private boolean deleteTaskHelper(Set<ITask> tasks, ITask toDelete) { - // for (ITask task : tasks) { - // if (task.getHandleIdentifier().equals(toDelete.getHandleIdentifier())) { - // tasks.remove(task); - // return true; - // } else { - // if (deleteTaskHelper(task.getChildren(), toDelete)) - // return true; - // } - // } - // return false; - // } - - public List<ITask> getActiveTasks() { - return activeTasks; - } - - /** - * HACK: returns first - * - * @return - */ - public ITask getActiveTask() { - if (activeTasks.size() > 0) { - return activeTasks.get(0); - } else { - return null; - } - } - - public Set<ITask> getRootTasks() { - return rootCategory.getChildren(); - } - - public Set<AbstractTaskContainer> getCategories() { - return categories; - } - - public List<AbstractTaskContainer> getUserCategories() { - List<AbstractTaskContainer> included = new ArrayList<AbstractTaskContainer>(); - for (AbstractTaskContainer category : categories) { - if (!category.getDescription().endsWith(DelegatingTaskExternalizer.LABEL_AUTOMATIC)) { - included.add(category); - } - } - return included; - } - - public Set<AbstractRepositoryQuery> getQueries() { - return queries; - } - - public int findLargestTaskHandle() { - int max = 0; - max = Math.max(largestTaskHandleHelper(tasks.values()), max); - for (AbstractTaskContainer cat : getTaskContainers()) { - max = Math.max(largestTaskHandleHelper(cat.getChildren()), max); - } - return max; - } - - private int largestTaskHandleHelper(Collection<ITask> tasks) { - int ihandle = 0; - int max = 0; - for (ITask task : tasks) { - if (!(task instanceof AbstractRepositoryTask)) { - String string = task.getHandleIdentifier().substring(task.getHandleIdentifier().lastIndexOf('-') + 1, - task.getHandleIdentifier().length()); - try { - ihandle = Integer.parseInt(string); - } catch (NumberFormatException nfe) { - } - } - max = Math.max(ihandle, max); - ihandle = largestTaskHandleHelper(task.getChildren()); - max = Math.max(ihandle, max); - } - return max; - } - - public Set<ITaskListElement> getRootElements() { - Set<ITaskListElement> roots = new HashSet<ITaskListElement>(); - for (ITask task : rootCategory.getChildren()) - roots.add(task); - for (AbstractTaskContainer cat : categories) - roots.add(cat); - for (AbstractRepositoryQuery query : queries) - roots.add(query); - return roots; - } - - public Collection<ITask> getAllTasks() { - return tasks.values(); - } - - public Set<AbstractTaskContainer> getTaskContainers() { - Set<AbstractTaskContainer> containers = new HashSet<AbstractTaskContainer>(); - for (AbstractTaskContainer container : categories) { - if (container instanceof TaskCategory || container instanceof TaskArchive) { - containers.add((AbstractTaskContainer) container); - } - } - return containers; - } - - public AbstractRepositoryQuery getQueryForHandle(String handle) { - if (handle == null) { - return null; - } - for (AbstractRepositoryQuery query : queries) { - if (query.findQueryHit(handle) != null) { - return query; - } - } - return null; - } - - /** - * NOTE: will only return first occurrence of the hit in the first category - * it is matched in. - */ - public AbstractQueryHit getQueryHitForHandle(String handle) { - if (handle != null) { - for (AbstractRepositoryQuery query : queries) { - AbstractQueryHit foundHit = query.findQueryHit(handle); - if (foundHit!= null) { - return foundHit; - } - } - } - return null; - } - - public boolean isEmpty() { - boolean archiveIsEmpty = getCategories().size() == 1 - && getCategories().iterator().next().equals(archiveContainer) - && archiveContainer.getChildren().isEmpty(); - return getAllTasks().size() == 0 && archiveIsEmpty && getQueries().size() == 0; - } - - public ITask getTask(String handleIdentifier) { - return tasks.get(handleIdentifier); - } - - public AbstractTaskContainer getContainerForHandle(String categoryHandle) { - for (AbstractTaskContainer cat : categories) { - if (cat instanceof AbstractTaskContainer) { - if (cat.getHandleIdentifier().equals(categoryHandle)) { - return (AbstractTaskContainer) cat; - } - } - } - return null; - } - - public TaskCategory getRootCategory() { - return rootCategory; - } - - public TaskArchive getArchiveContainer() { - return archiveContainer; - } - - /** if handle == null or no queries found an empty set is returned * */ - public Set<AbstractRepositoryQuery> getQueriesForHandle(String handle) { - if (handle == null) { - return Collections.emptySet(); - } - Set<AbstractRepositoryQuery> queriesForHandle = new HashSet<AbstractRepositoryQuery>(); - for (AbstractRepositoryQuery query : queries) { - if (query.findQueryHit(handle) != null) { - queriesForHandle.add(query); - } - } - return queriesForHandle; - } - - /** - * return all queries for the given repository url - */ - public Set<AbstractRepositoryQuery> getRepositoryQueries(String repositoryUrl) { - Set<AbstractRepositoryQuery> repositoryQueries = new HashSet<AbstractRepositoryQuery>(); - if (repositoryUrl != null) { - for (AbstractRepositoryQuery query : queries) { - if (query.getRepositoryUrl().equals(repositoryUrl)) { - repositoryQueries.add(query); - } - } - } - return repositoryQueries; - } - - /** - * return all tasks for the given repository url - */ - public Set<AbstractRepositoryTask> getRepositoryTasks(String repositoryUrl) { - Set<AbstractRepositoryTask> repositoryTasks = new HashSet<AbstractRepositoryTask>(); - if (repositoryUrl != null) { - for (ITask task : tasks.values()) { - if (task instanceof AbstractRepositoryTask) { - AbstractRepositoryTask repositoryTask = (AbstractRepositoryTask) task; - if (repositoryTask.getRepositoryUrl().equals(repositoryUrl)) { - repositoryTasks.add(repositoryTask); - } - } - } - } - return repositoryTasks; - } - - /** if handle == null or no query hits found an empty set is returned * */ - public Set<AbstractQueryHit> getQueryHitsForHandle(String handle) { - if (handle == null) { - return Collections.emptySet(); - } - Set<AbstractQueryHit> hitsForHandle = new HashSet<AbstractQueryHit>(); - for (AbstractRepositoryQuery query : queries) { - AbstractQueryHit foundHit = query.findQueryHit(handle); - if (foundHit != null) { - hitsForHandle.add(foundHit); - } - } - return hitsForHandle; - } - - /** - * Exposed for unit testing - * - * @return unmodifiable collection of ITaskActivityListeners - */ - public List<ITaskListChangeListener> getChangeListeners() { - return Collections.unmodifiableList(changeListeners); - } - - /** - * TODO: refactor into task deltas? - */ - public void notifyLocalInfoChanged(ITask task) { - for (ITaskListChangeListener listener : new ArrayList<ITaskListChangeListener>(changeListeners)) { - try { - listener.localInfoChanged(task); - } catch (Throwable t) { - MylarStatusHandler.fail(t, "notification failed for: " + listener, false); - } - } - } - - public void notifyRepositoryInfoChanged(ITask task) { - for (ITaskListChangeListener listener : new ArrayList<ITaskListChangeListener>(changeListeners)) { - try { - listener.repositoryInfoChanged(task); - } catch (Throwable t) { - MylarStatusHandler.fail(t, "notification failed for: " + listener, false); - } - } - } - - public void notifyContainerUpdated(AbstractTaskContainer container) { - for (ITaskListChangeListener listener : new ArrayList<ITaskListChangeListener>(changeListeners)) { - try { - listener.containerInfoChanged(container); - } catch (Throwable t) { - MylarStatusHandler.fail(t, "notification failed for: " + listener, false); - } - } - } -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskRepository.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskRepository.java deleted file mode 100644 index af430c4ec..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskRepository.java +++ /dev/null @@ -1,273 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.core; - -import java.net.MalformedURLException; -import java.net.URL; -import java.util.HashMap; -import java.util.Map; -import java.util.TimeZone; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.Platform; -import org.eclipse.mylar.context.core.MylarStatusHandler; - -/** - * Note that task repositories use Strings for storing time stamps because using - * Date objects led to the following problems: - * <ul> - * <li>Often we are unable to get the time zone of the repository so - * interpreting the date string correctly doesn't work.</li> - * <li>Even if we do know the time zone information the local clock may be - * wrong. This can cause lost incoming when asking the repository for all - * changes since date X.</li> - * <li>The solution we have come up with thus far is not to interpret the date - * as a DATE object but rather simply use the date string given to us by the - * repository itself.</li> - * </ul> - * - * @author Mik Kersten - * @author Rob Elves - */ -public class TaskRepository { - - public static final String DEFAULT_CHARACTER_ENCODING = "UTF-8"; - - public static final String AUTH_PASSWORD = "org.eclipse.mylar.tasklist.repositories.password"; //$NON-NLS-1$ - - public static final String AUTH_USERNAME = "org.eclipse.mylar.tasklist.repositories.username"; //$NON-NLS-1$ - - public static final String NO_VERSION_SPECIFIED = "unknown"; - - private static final String AUTH_SCHEME = "Basic"; - - private static final String AUTH_REALM = ""; - - private static final URL DEFAULT_URL; - - static { - URL u = null; - try { - u = new URL("http://eclipse.org/mylar"); - } catch (Exception ex) { - // TODO ? - } - DEFAULT_URL = u; - } - - private Map<String, String> properties = new HashMap<String, String>(); - - /** - * for testing purposes - */ - public TaskRepository(String kind, String serverUrl) { - this(kind, serverUrl, NO_VERSION_SPECIFIED); - } - - /** - * for testing purposes sets repository time zone to local default time zone - * sets character encoding to DEFAULT_CHARACTER_ENCODING - */ - public TaskRepository(String kind, String serverUrl, String version) { - this(kind, serverUrl, version, DEFAULT_CHARACTER_ENCODING, TimeZone.getDefault().getID()); - } - - public TaskRepository(String kind, String serverUrl, String version, String encoding, String timeZoneId) { - this.properties.put(IRepositoryConstants.PROPERTY_KIND, kind); - this.properties.put(IRepositoryConstants.PROPERTY_URL, serverUrl); - this.properties.put(IRepositoryConstants.PROPERTY_VERSION, version); - this.properties.put(IRepositoryConstants.PROPERTY_ENCODING, encoding); - this.properties.put(IRepositoryConstants.PROPERTY_TIMEZONE, timeZoneId); - } - - public TaskRepository(String kind, String serverUrl, Map<String, String> properties) { - this.properties.put(IRepositoryConstants.PROPERTY_KIND, kind); - this.properties.put(IRepositoryConstants.PROPERTY_URL, serverUrl); - this.properties.putAll(properties); - } - - public String getUrl() { - return properties.get(IRepositoryConstants.PROPERTY_URL); - } - - public void setUrl(String newUrl) { - properties.put(IRepositoryConstants.PROPERTY_URL, newUrl); - } - - public boolean hasCredentials() { - String username = getUserName(); - String password = getPassword(); - return username != null && username.length() > 0 && password != null && password.length() > 0; - } - - @SuppressWarnings("unchecked") - public String getUserName() { - Map<String, String> map = getAuthInfo(); - if (map != null && map.containsKey(AUTH_USERNAME)) { - return map.get(AUTH_USERNAME); - } else { - return null; - } - } - - @SuppressWarnings("unchecked") - public String getPassword() { - Map<String, String> map = getAuthInfo(); - if (map != null && map.containsKey(AUTH_PASSWORD)) { - return map.get(AUTH_PASSWORD); - } else { - return null; - } - } - - @SuppressWarnings("unchecked") - public void setAuthenticationCredentials(String username, String password) { - Map<String, String> map = getAuthInfo(); - - if (map == null) { - map = new java.util.HashMap<String, String>(); - } - - if (username != null) { - map.put(AUTH_USERNAME, username); - } - if (password != null) { - map.put(AUTH_PASSWORD, password); - } - try { - // write the map to the keyring - try { - Platform.addAuthorizationInfo(new URL(getUrl()), AUTH_REALM, AUTH_SCHEME, map); - } catch (MalformedURLException ex) { - Platform.addAuthorizationInfo(DEFAULT_URL, getUrl(), AUTH_SCHEME, map); - } - } catch (CoreException e) { - MylarStatusHandler.fail(e, "could not set authorization", true); - } - } - - public void flushAuthenticationCredentials() { - try { - try { - Platform.flushAuthorizationInfo(new URL(getUrl()), AUTH_REALM, AUTH_SCHEME); - } catch (MalformedURLException ex) { - Platform.flushAuthorizationInfo(DEFAULT_URL, getUrl(), AUTH_SCHEME); - } - } catch (CoreException e) { - MylarStatusHandler.fail(e, "could not set authorization", true); - } - } - - private Map getAuthInfo() { - try { - return Platform.getAuthorizationInfo(new URL(getUrl()), AUTH_REALM, AUTH_SCHEME); - } catch (MalformedURLException ex) { - return Platform.getAuthorizationInfo(DEFAULT_URL, getUrl(), AUTH_SCHEME); - } - } - - @Override - public boolean equals(Object object) { - if (object instanceof TaskRepository && getUrl() != null) { - return getUrl().equals(((TaskRepository) object).getUrl()); - } else { - return super.equals(object); - } - } - - @Override - public int hashCode() { - if (getUrl() != null) { - return getUrl().hashCode(); - } else { - return super.hashCode(); - } - } - - public String toString() { - return getUrl(); - } - - public String getKind() { - return properties.get(IRepositoryConstants.PROPERTY_KIND); - } - - public String getVersion() { - final String version = properties.get(IRepositoryConstants.PROPERTY_VERSION); - return version == null || "".equals(version) ? NO_VERSION_SPECIFIED : version; - } - - public void setVersion(String ver) { - properties.put(IRepositoryConstants.PROPERTY_VERSION, ver == null ? NO_VERSION_SPECIFIED : ver); - } - - public String getCharacterEncoding() { - final String encoding = properties.get(IRepositoryConstants.PROPERTY_ENCODING); - return encoding == null || "".equals(encoding) ? DEFAULT_CHARACTER_ENCODING : encoding; - } - - /** - * for testing purposes - */ - public void setCharacterEncoding(String characterEncoding) { - properties.put(IRepositoryConstants.PROPERTY_ENCODING, characterEncoding == null ? DEFAULT_CHARACTER_ENCODING - : characterEncoding); - } - - public String getTimeZoneId() { - final String timeZoneId = properties.get(IRepositoryConstants.PROPERTY_TIMEZONE); - return timeZoneId == null || "".equals(timeZoneId) ? TimeZone.getDefault().getID() : timeZoneId; - } - - public void setTimeZoneId(String timeZoneId) { - this.properties.put(IRepositoryConstants.PROPERTY_TIMEZONE, timeZoneId == null ? TimeZone.getDefault().getID() - : timeZoneId); - } - - public String getSyncTimeStamp() { - return this.properties.get(IRepositoryConstants.PROPERTY_SYNCTIMESTAMP); - } - - /** - * ONLY for use by IRepositoryConstants. To set the sync time call - * IRepositoryConstants.setSyncTime(repository, date); - */ - public void setSyncTimeStamp(String syncTime) { - this.properties.put(IRepositoryConstants.PROPERTY_SYNCTIMESTAMP, syncTime); - } - - public void setRepositoryLabel(String repositoryLabel) { - this.properties.put(IRepositoryConstants.PROPERTY_LABEL, repositoryLabel); - } - - public String getRepositoryLabel() { - return this.properties.get(IRepositoryConstants.PROPERTY_LABEL); - } - - public Map<String, String> getProperties() { - return this.properties; - } - - public String getProperty(String name) { - return this.properties.get(name); - } - - public void setProperty(String name, String value) { - this.properties.put(name, value); - } - - public boolean hasProperty(String name) { - String value = getProperty(name); - return value != null && value.trim().length() > 0; - } - -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskRepositoryFilter.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskRepositoryFilter.java deleted file mode 100644 index 5f2dca42d..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskRepositoryFilter.java +++ /dev/null @@ -1,42 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.core; - - -/** - * Task repository filter to build list of repositories with required capabilities. - * - * @author Eugene Kleshov - */ -public interface TaskRepositoryFilter { - - public static TaskRepositoryFilter ALL = new TaskRepositoryFilter() { - public boolean accept(TaskRepository repository, AbstractRepositoryConnector connector) { - return true; - } - }; - - public static TaskRepositoryFilter CAN_CREATE_NEW_TASK = new TaskRepositoryFilter() { - public boolean accept(TaskRepository repository, AbstractRepositoryConnector connector) { - return connector.canCreateNewTask(repository); - } - }; - - public static TaskRepositoryFilter CAN_CREATE_TASK_FROM_KEY = new TaskRepositoryFilter() { - public boolean accept(TaskRepository repository, AbstractRepositoryConnector connector) { - return connector.canCreateTaskFromKey(repository); - } - }; - - boolean accept(TaskRepository repository, AbstractRepositoryConnector connector); - -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskRepositoryManager.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskRepositoryManager.java deleted file mode 100644 index ac6ea6ced..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskRepositoryManager.java +++ /dev/null @@ -1,319 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.core; - -import java.io.File; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.eclipse.core.runtime.Platform; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.core.TaskRepositoriesExternalizer; - -/** - * @author Mik Kersten - * @author Rob Elves - */ -public class TaskRepositoryManager { - - public static final String OLD_REPOSITORIES_FILE = "repositories.xml"; - - public static final String DEFAULT_REPOSITORIES_FILE = "repositories.xml.zip"; - - public static final String PREF_REPOSITORIES = "org.eclipse.mylar.tasklist.repositories."; - - private Map<String, AbstractRepositoryConnector> repositoryConnectors = new HashMap<String, AbstractRepositoryConnector>(); - - private Map<String, Set<TaskRepository>> repositoryMap = new HashMap<String, Set<TaskRepository>>(); - - private Set<ITaskRepositoryListener> listeners = new HashSet<ITaskRepositoryListener>(); - - private Set<TaskRepository> orphanedRepositories = new HashSet<TaskRepository>(); - - public static final String MESSAGE_NO_REPOSITORY = "No repository available, please add one using the Task Repositories view."; - - public static final String PREFIX_LOCAL = "local-"; - - private TaskRepositoriesExternalizer externalizer = new TaskRepositoriesExternalizer(); - - private TaskList taskList; - - public TaskRepositoryManager(TaskList taskList) { - this.taskList = taskList; - } - - public Collection<AbstractRepositoryConnector> getRepositoryConnectors() { - return Collections.unmodifiableCollection(repositoryConnectors.values()); - } - - public AbstractRepositoryConnector getRepositoryConnector(String kind) { - return repositoryConnectors.get(kind); - } - - public void addRepositoryConnector(AbstractRepositoryConnector repositoryConnector) { - if (!repositoryConnectors.values().contains(repositoryConnector)) { - repositoryConnector.init(taskList); - repositoryConnectors.put(repositoryConnector.getRepositoryType(), repositoryConnector); - } - } - - public void addRepository(TaskRepository repository, String repositoryFilePath) { - Set<TaskRepository> repositories; - if (!repositoryMap.containsKey(repository.getKind())) { - repositories = new HashSet<TaskRepository>(); - repositoryMap.put(repository.getKind(), repositories); - } else { - repositories = repositoryMap.get(repository.getKind()); - } - repositories.add(repository); - saveRepositories(repositoryFilePath); - for (ITaskRepositoryListener listener : listeners) { - listener.repositoryAdded(repository); - } - } - - public void removeRepository(TaskRepository repository, String repositoryFilePath) { - Set<TaskRepository> repositories = repositoryMap.get(repository.getKind()); - if (repositories != null) { - repository.flushAuthenticationCredentials(); - repositories.remove(repository); - } - saveRepositories(repositoryFilePath); - for (ITaskRepositoryListener listener : listeners) { - listener.repositoryRemoved(repository); - } - } - - public void addListener(ITaskRepositoryListener listener) { - listeners.add(listener); - } - - public void removeListener(ITaskRepositoryListener listener) { - listeners.remove(listener); - } - - public TaskRepository getRepository(String kind, String urlString) { - if (repositoryMap.containsKey(kind)) { - for (TaskRepository repository : repositoryMap.get(kind)) { - if (repository.getUrl().equals(urlString)) { - return repository; - } - } - } - return null; - } - - /** - * @return first repository that matches the given url - */ - public TaskRepository getRepository(String urlString) { - for (String kind: repositoryMap.keySet()) { - for (TaskRepository repository : repositoryMap.get(kind)) { - if (repository.getUrl().equals(urlString)) { - return repository; - } - } - } - return null; - } - - /** - * @return the first connector to accept the URL - */ - public AbstractRepositoryConnector getRepositoryForTaskUrl(String url) { - for (AbstractRepositoryConnector connector : getRepositoryConnectors()) { - if (connector.getRepositoryUrlFromTaskUrl(url) != null) { - return connector; - } - } - return null; - } - - public Set<TaskRepository> getRepositories(String kind) { - if (repositoryMap.containsKey(kind)) { - return repositoryMap.get(kind); - } else { - return Collections.emptySet(); - } - } - - public List<TaskRepository> getAllRepositories() { - List<TaskRepository> repositories = new ArrayList<TaskRepository>(); - for (AbstractRepositoryConnector repositoryConnector : repositoryConnectors.values()) { - if (repositoryMap.containsKey(repositoryConnector.getRepositoryType())) { - repositories.addAll(repositoryMap.get(repositoryConnector.getRepositoryType())); - } - } - return repositories; - } - - public TaskRepository getRepositoryForActiveTask(String repositoryKind, TaskList taskList) { - List<ITask> activeTasks = taskList.getActiveTasks(); - if (activeTasks.size() == 1) { - ITask activeTask = activeTasks.get(0); - if (activeTask instanceof AbstractRepositoryTask) { - String repositoryUrl = AbstractRepositoryTask.getRepositoryUrl(activeTask.getHandleIdentifier()); - for (TaskRepository repository : getRepositories(repositoryKind)) { - if (repository.getUrl().equals(repositoryUrl)) { - return repository; - } - } - } - } - return null; - } - - /** - * TODO: implement default support, this just returns first found - */ - public TaskRepository getDefaultRepository(String kind) { - // HACK: returns first repository found - if (repositoryMap.containsKey(kind)) { - for (TaskRepository repository : repositoryMap.get(kind)) { - return repository; - } - } else { - Collection values = repositoryMap.values(); - if (!values.isEmpty()) { - HashSet repoistorySet = (HashSet) values.iterator().next(); - return (TaskRepository) repoistorySet.iterator().next(); - } - } - return null; - } - - public Map<String, Set<TaskRepository>> readRepositories(String repositoriesFilePath) { - - repositoryMap.clear(); - orphanedRepositories.clear(); - loadRepositories(repositoriesFilePath); - - for (ITaskRepositoryListener listener : listeners) { - listener.repositoriesRead(); - } - return repositoryMap; - } - - private void loadRepositories(String repositoriesFilePath) { - try { -// String dataDirectory = TasksUiPlugin.getDefault().getDataDirectory(); - File repositoriesFile = new File(repositoriesFilePath); - - // Will only load repositories for which a connector exists - for (AbstractRepositoryConnector repositoryConnector : repositoryConnectors.values()) { - repositoryMap.put(repositoryConnector.getRepositoryType(), new HashSet<TaskRepository>()); - } - if (repositoriesFile.exists()) { - Set<TaskRepository> repositories = externalizer.readRepositoriesFromXML(repositoriesFile); - if (repositories != null && repositories.size() > 0) { - for (TaskRepository repository : repositories) { - if (repositoryMap.containsKey(repository.getKind())) { - repositoryMap.get(repository.getKind()).add(repository); - } else { - orphanedRepositories.add(repository); - } - } - } - } - } catch (Throwable t) { - MylarStatusHandler.fail(t, "could not load repositories", false); - } - } - - /** - * for testing purposes - */ - public void setVersion(TaskRepository repository, String version, String repositoriesFilePath) { - repository.setVersion(version); - saveRepositories(repositoriesFilePath); - } - - /** - * for testing purposes - */ - public void setEncoding(TaskRepository repository, String encoding, String repositoriesFilePath) { - repository.setCharacterEncoding(encoding); - saveRepositories(repositoriesFilePath); - } - - /** - * for testing purposes - */ - public void setTimeZoneId(TaskRepository repository, String timeZoneId, String repositoriesFilePath) { - repository.setTimeZoneId(timeZoneId); - saveRepositories(repositoriesFilePath); - } - - public void setSyncTime(TaskRepository repository, String syncTime, String repositoriesFilePath) { - repository.setSyncTimeStamp(syncTime); - saveRepositories(repositoriesFilePath); - - // String prefIdSyncTime = repository.getUrl() + PROPERTY_DELIM + - // PROPERTY_SYNCTIMESTAMP; - // if (repository.getSyncTimeStamp() != null) { - // MylarTaskListPlugin.getMylarCorePrefs().setValue(prefIdSyncTime, - // repository.getSyncTimeStamp()); - // } - } - - public boolean saveRepositories(String destinationPath) { - if (!Platform.isRunning()) {// || TasksUiPlugin.getDefault() == null) { - return false; - } - Set<TaskRepository> repositoriesToWrite = new HashSet<TaskRepository>(getAllRepositories()); - // if for some reason a repository is added/changed to equal one in the - // orphaned set the orphan is discarded - for (TaskRepository repository : orphanedRepositories) { - if (!repositoriesToWrite.contains(repository)) { - repositoriesToWrite.add(repository); - } - } - - try { -// String dataDirectory = TasksUiPlugin.getDefault().getDataDirectory(); -// File repositoriesFile = new File(dataDirectory + File.separator + TasksUiPlugin.DEFAULT_REPOSITORIES_FILE); - File repositoriesFile = new File(destinationPath); - externalizer.writeRepositoriesToXML(repositoriesToWrite, repositoriesFile); - } catch (Throwable t) { - MylarStatusHandler.fail(t, "could not save repositories", false); - return false; - } - return true; - } - - /** - * For testing. - */ - public void clearRepositories(String repositoriesFilePath) { - repositoryMap.clear(); - orphanedRepositories.clear(); - saveRepositories(repositoriesFilePath); - // for (AbstractRepositoryConnector repositoryConnector : - // repositoryConnectors.values()) { - // String prefId = PREF_REPOSITORIES + - // repositoryConnector.getRepositoryType(); - // MylarTaskListPlugin.getMylarCorePrefs().setValue(prefId, ""); - // } - } - - public void notifyRepositorySettingsChagned(TaskRepository repository) { - for (ITaskRepositoryListener listener : listeners) { - listener.repositorySettingsChanged(repository); - } - } -} diff --git a/org.eclipse.mylyn.tasks.tests/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.mylyn.tasks.tests/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index fbd5e0a79..000000000 --- a/org.eclipse.mylyn.tasks.tests/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,303 +0,0 @@ -#Tue Jun 20 10:25:00 PDT 2006 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.5 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.autoboxing=ignore -org.eclipse.jdt.core.compiler.problem.deprecation=warning -org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled -org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled -org.eclipse.jdt.core.compiler.problem.discouragedReference=warning -org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore -org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning -org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning -org.eclipse.jdt.core.compiler.problem.forbiddenReference=error -org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning -org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning -org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore -org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore -org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore -org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning -org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning -org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning -org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore -org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning -org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore -org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled -org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning -org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled -org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore -org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning -org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning -org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning -org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore -org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore -org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled -org.eclipse.jdt.core.compiler.problem.unusedImport=warning -org.eclipse.jdt.core.compiler.problem.unusedLocal=warning -org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled -org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning -org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.5 -org.eclipse.jdt.core.formatter.align_type_members_on_columns=false -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_assignment=0 -org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 -org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 -org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 -org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 -org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_after_package=1 -org.eclipse.jdt.core.formatter.blank_lines_before_field=1 -org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 -org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 -org.eclipse.jdt.core.formatter.blank_lines_before_method=1 -org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 -org.eclipse.jdt.core.formatter.blank_lines_before_package=0 -org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 -org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.comment.clear_blank_lines=false -org.eclipse.jdt.core.formatter.comment.format_comments=true -org.eclipse.jdt.core.formatter.comment.format_header=false -org.eclipse.jdt.core.formatter.comment.format_html=true -org.eclipse.jdt.core.formatter.comment.format_source_code=true -org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true -org.eclipse.jdt.core.formatter.comment.indent_root_tags=true -org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert -org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert -org.eclipse.jdt.core.formatter.comment.line_length=80 -org.eclipse.jdt.core.formatter.compact_else_if=true -org.eclipse.jdt.core.formatter.continuation_indentation=2 -org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 -org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true -org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_empty_lines=false -org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true -org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false -org.eclipse.jdt.core.formatter.indentation.size=4 -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert -org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false -org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false -org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false -org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false -org.eclipse.jdt.core.formatter.lineSplit=120 -org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 -org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 -org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true -org.eclipse.jdt.core.formatter.tabulation.char=tab -org.eclipse.jdt.core.formatter.tabulation.size=4 -org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false diff --git a/org.eclipse.mylyn.tasks.tests/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.mylyn.tasks.tests/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index 5e612caf2..000000000 --- a/org.eclipse.mylyn.tasks.tests/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,5 +0,0 @@ -#Tue Jun 20 10:25:00 PDT 2006 -eclipse.preferences.version=1 -formatter_profile=_Mylar based on Eclipse [built-in] -formatter_settings_version=10 -org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\r\n * @return the ${bare_field_name}\r\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\r\n * @param ${param} the ${bare_field_name} to set\r\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/**\r\n * \r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author ${user}\r\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\r\n * \r\n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"></template><template autoinsert\="false" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">/*******************************************************************************\r\n * Copyright (c) 2004 - 2006 Mylar committers and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n *******************************************************************************/\r\n\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\r\n${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ignore\r\n${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\r\n// ignore</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\r\n * ${tags}\r\n * ${see_to_target}\r\n */</template></templates> diff --git a/org.eclipse.mylyn.tasks.tests/META-INF/MANIFEST.MF b/org.eclipse.mylyn.tasks.tests/META-INF/MANIFEST.MF deleted file mode 100644 index 44f3c513d..000000000 --- a/org.eclipse.mylyn.tasks.tests/META-INF/MANIFEST.MF +++ /dev/null @@ -1,26 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Mylar Tasks Tests Plug-in -Bundle-SymbolicName: org.eclipse.mylar.tasks.tests;singleton:=true -Bundle-Version: 0.0.0 -Bundle-Activator: org.eclipse.mylar.tasks.tests.MylarTasksTestsPlugin -Bundle-Vendor: Eclipse.org -Bundle-Localization: plugin -Require-Bundle: org.eclipse.core.runtime, - org.junit, - org.eclipse.mylar.context.core, - org.eclipse.mylar.core.tests, - org.eclipse.jdt.core, - org.eclipse.core.resources, - org.eclipse.ui, - org.eclipse.mylar.tasks.ui, - org.eclipse.mylar.context.ui, - org.eclipse.mylar.tasks.core, - org.eclipse.mylar.monitor, - org.eclipse.ui.forms, - org.eclipse.mylar.resources.tests -Eclipse-AutoStart: true -Bundle-ClassPath: mylar-tasklist-tests.jar -Export-Package: org.eclipse.mylar.tasks.tests, - org.eclipse.mylar.tasks.tests.connector -Bundle-RequiredExecutionEnvironment: J2SE-1.5 diff --git a/org.eclipse.mylyn.tasks.tests/plugin.xml b/org.eclipse.mylyn.tasks.tests/plugin.xml deleted file mode 100644 index 30ad05809..000000000 --- a/org.eclipse.mylyn.tasks.tests/plugin.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<?eclipse version="3.0"?> -<plugin> - - <extension - id="org.eclipse.mylar.jira.repository" - name="JIRA Repository" - point="org.eclipse.mylar.tasks.ui.repositories"> - - <connectorCore - class="org.eclipse.mylar.tasks.tests.connector.MockRepositoryConnector" - id="org.eclipse.mylar.tasklist.tests.repositories" - name="Mock Repository Client" - type="mock"/> - <externalizer - class="org.eclipse.mylar.tasks.tests.connector.MockRepositoryExternalizer" - id="org.eclipse.mylar.tasklist.tests.externalizer"/> - </extension> - -</plugin> diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/AllTasksTests.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/AllTasksTests.java deleted file mode 100644 index e5bb4514b..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/AllTasksTests.java +++ /dev/null @@ -1,52 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author Mik Kersten - */ -public class AllTasksTests { - - public static Test suite() { - TestSuite suite = new TestSuite("Test for org.eclipse.mylar.tasklist.tests"); - - // $JUnit-BEGIN$ - suite.addTestSuite(ProjectRepositoryAssociationTest.class); - suite.addTestSuite(TaskListDataMigrationTest.class); - suite.addTestSuite(TaskPlanningEditorTest.class); - suite.addTestSuite(TaskListManagerTest.class); - suite.addTestSuite(RepositoryTaskSynchronizationTest.class); - suite.addTestSuite(TaskRepositoryManagerTest.class); - suite.addTestSuite(TaskRepositoriesExternalizerTest.class); - suite.addTestSuite(TaskListContentProviderTest.class); - suite.addTestSuite(TaskListBackupManagerTest.class); - suite.addTestSuite(TableSorterTest.class); - suite.addTestSuite(TaskKeyComparatorTest.class); - suite.addTestSuite(TaskTest.class); - suite.addTestSuite(TaskListUiTest.class); - suite.addTestSuite(TaskListDnDTest.class); - suite.addTestSuite(TaskDataExportTest.class); - suite.addTestSuite(TaskDataImportTest.class); - suite.addTestSuite(BackgroundSaveTest.class); - suite.addTestSuite(TaskActivityViewTest.class); - suite.addTestSuite(TaskAttachmentActionsTest.class); - suite.addTestSuite(RepositorySettingsPageTest.class); - // suite.addTestSuite(RetrieveTitleFromUrlTest.class); - suite.addTestSuite(TaskHistoryTest.class); - suite.addTestSuite(UrlConnectionUtilTest.class); - // $JUnit-END$ - return suite; - } -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/BackgroundSaveTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/BackgroundSaveTest.java deleted file mode 100644 index 663424e5b..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/BackgroundSaveTest.java +++ /dev/null @@ -1,61 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.tasks.tests; - -import java.io.File; -import java.io.IOException; - -import junit.framework.TestCase; - -import org.eclipse.mylar.internal.tasks.ui.util.BackgroundSaveTimer; -import org.eclipse.mylar.internal.tasks.ui.util.TaskListSaveManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * Tests the mechanism for saving the task data periodically. If this test fails - * unexpectedly, try adjusting the timing. - * - * @author Wesley Coelho - * @author Mik Kersten (rewrite) - */ -public class BackgroundSaveTest extends TestCase { - - private BackgroundSaveTimer saveTimer; - - private TaskListSaveManager policy; - - protected void setUp() throws Exception { - super.setUp(); - policy = TasksUiPlugin.getDefault().getTaskListSaveManager(); - - saveTimer = new BackgroundSaveTimer(TasksUiPlugin.getDefault().getTaskListSaveManager()); - saveTimer.setSaveIntervalMillis(50); - saveTimer.start(); - TasksUiPlugin.getDefault().getTaskListSaveManager().setForceBackgroundSave(true); - } - - protected void tearDown() throws Exception { - saveTimer.stop(); - super.tearDown(); - TasksUiPlugin.getDefault().getTaskListSaveManager().setForceBackgroundSave(false); - } - - public void testBackgroundSave() throws InterruptedException, IOException { - if (System.getProperty("os.name").toLowerCase().contains("linux")) { - System.out.println("> BackgroundSaveTest.testBackgroundSave() not run on Linux due to IO concurrency"); - } else { - File file = TasksUiPlugin.getTaskListManager().getTaskListFile(); - long previouslyModified = file.lastModified(); - policy.saveTaskList(true); - assertTrue(file.lastModified() > previouslyModified); - } - } -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/ProjectRepositoryAssociationTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/ProjectRepositoryAssociationTest.java deleted file mode 100644 index 09faefe2d..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/ProjectRepositoryAssociationTest.java +++ /dev/null @@ -1,69 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests; - -import junit.framework.TestCase; - -import org.eclipse.core.resources.IFolder; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.mylar.resources.tests.ResourceTestUtil; -import org.eclipse.mylar.resources.tests.TestProject; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Rob Elves - */ -public class ProjectRepositoryAssociationTest extends TestCase { - - private static final String REPOSITORY_URL = "http://mylar.eclipse.org/bugs222"; - - private static final String REPOSITORY_KIND = "bugzilla"; - - private TestProject projectWrapper; - - protected void setUp() throws Exception { - super.setUp(); - projectWrapper = new TestProject(this.getClass().getName()); - } - - protected void tearDown() throws Exception { - super.tearDown(); - ResourceTestUtil.deleteProject(projectWrapper.getProject()); - TasksUiPlugin.getRepositoryManager().clearRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - } - - public void testRepositoryForProject() throws CoreException { - assertNull(TasksUiPlugin.getDefault().getRepositoryForResource(projectWrapper.getProject(), true)); - TaskRepository repository = new TaskRepository(REPOSITORY_KIND, REPOSITORY_URL); - TasksUiPlugin.getRepositoryManager().addRepository(repository, - TasksUiPlugin.getDefault().getRepositoriesFilePath()); - TasksUiPlugin.getDefault().setRepositoryForResource(projectWrapper.getProject(), repository); - TaskRepository returnedRepository = TasksUiPlugin.getDefault().getRepositoryForResource( - projectWrapper.getProject(), true); - assertNotNull(returnedRepository); - assertEquals(REPOSITORY_KIND, returnedRepository.getKind()); - assertEquals(REPOSITORY_URL, returnedRepository.getUrl()); - } - - public void testRepositoryForFolder() throws CoreException { - IFolder folder = projectWrapper.createFolder("testFolder"); - assertTrue(folder.exists()); - assertNull(TasksUiPlugin.getDefault().getRepositoryForResource(folder, true)); - TaskRepository repository = new TaskRepository(REPOSITORY_KIND, REPOSITORY_URL); - TasksUiPlugin.getRepositoryManager().addRepository(repository, - TasksUiPlugin.getDefault().getRepositoriesFilePath()); - TasksUiPlugin.getDefault().setRepositoryForResource(folder, repository); - TaskRepository returnedRepository = TasksUiPlugin.getDefault().getRepositoryForResource( - folder, true); - assertNotNull(returnedRepository); - assertEquals(REPOSITORY_KIND, returnedRepository.getKind()); - assertEquals(REPOSITORY_URL, returnedRepository.getUrl()); - } -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/RepositorySettingsPageTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/RepositorySettingsPageTest.java deleted file mode 100644 index 939ab1973..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/RepositorySettingsPageTest.java +++ /dev/null @@ -1,169 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests; - -import junit.framework.TestCase; - -import org.eclipse.jface.preference.StringFieldEditor; -import org.eclipse.mylar.internal.tasks.ui.wizards.AbstractRepositorySettingsPage; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.tests.connector.MockRepositoryUi; -import org.eclipse.mylar.tasks.ui.AbstractRepositoryConnectorUi; -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.PlatformUI; - -/** - * @author Steffen Pingel - */ -public class RepositorySettingsPageTest extends TestCase { - - public void testNeedsEncoding() { - TaskRepository repository = new TaskRepository("kind", "http://localhost/"); - repository.setCharacterEncoding("UTF-8"); - - MockRepositorySettingsPage page = new MockRepositorySettingsPage(new MockRepositoryUi()); - page.setNeedsEncoding(true); - - Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); - page.createControl(shell); - page.setVisible(true); - - TaskRepository repository2 = page.createTaskRepository(); - assertEquals("UTF-8", repository2.getCharacterEncoding()); - } - - public void testNeedsEncodingFalse() { - MockRepositorySettingsPage page = new MockRepositorySettingsPage(new MockRepositoryUi()); - page.setNeedsEncoding(false); - - Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); - page.createControl(shell); - page.setVisible(true); - - page.createTaskRepository(); - } - - public void testNeedsAnonyoumousLoginFalse() { - MockRepositorySettingsPage page = new MockRepositorySettingsPage(new MockRepositoryUi()); - page.setNeedsAnonymousLogin(false); - - Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); - page.createControl(shell); - page.setVisible(true); - - assertNull(page.getAnonymousButton()); - } - - public void testNeedsAnonyoumousLoginNoRepository() { - MockRepositorySettingsPage page = new MockRepositorySettingsPage(new MockRepositoryUi()); - page.setNeedsAnonymousLogin(true); - - Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); - page.createControl(shell); - page.setVisible(true); - - assertNotNull(page.getAnonymousButton()); - - assertFalse(page.getAnonymousButton().getSelection()); - assertTrue(page.getUserNameEditor().getTextControl(page.getParent()).isEnabled()); - assertTrue(page.getPasswordEditor().getTextControl(page.getParent()).isEnabled()); - assertEquals("", page.getUserName()); - assertEquals("", page.getPassword()); - } - - public void testNeedsAnonyoumousLogin() { - TaskRepository repository = new TaskRepository("kind", "http://localhost/"); - MockRepositorySettingsPage page = new MockRepositorySettingsPage(new MockRepositoryUi()); - page.setNeedsAnonymousLogin(true); - page.setRepository(repository); - - Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); - page.createControl(shell); - page.setVisible(true); - - assertNotNull(page.getAnonymousButton()); - - assertTrue(page.getAnonymousButton().getSelection()); - assertFalse(page.getUserNameEditor().getTextControl(page.getParent()).isEnabled()); - assertFalse(page.getPasswordEditor().getTextControl(page.getParent()).isEnabled()); - assertEquals("", page.getUserName()); - assertEquals("", page.getPassword()); - - page.getAnonymousButton().setSelection(false); - page.getAnonymousButton().notifyListeners(SWT.Selection, new Event()); - assertTrue(page.getUserNameEditor().getTextControl(page.getParent()).isEnabled()); - assertTrue(page.getPasswordEditor().getTextControl(page.getParent()).isEnabled()); - page.getUserNameEditor().setStringValue("user"); - page.getPasswordEditor().setStringValue("password"); - assertEquals("user", page.getUserName()); - assertEquals("password", page.getPassword()); - - page.getAnonymousButton().setSelection(true); - page.getAnonymousButton().notifyListeners(SWT.Selection, new Event()); - assertFalse(page.getUserNameEditor().getTextControl(page.getParent()).isEnabled()); - assertFalse(page.getPasswordEditor().getTextControl(page.getParent()).isEnabled()); - assertEquals("", page.getUserName()); - assertEquals("", page.getPassword()); - - page.getAnonymousButton().setSelection(false); - page.getAnonymousButton().notifyListeners(SWT.Selection, new Event()); - assertTrue(page.getUserNameEditor().getTextControl(page.getParent()).isEnabled()); - assertTrue(page.getPasswordEditor().getTextControl(page.getParent()).isEnabled()); - assertEquals("user", page.getUserNameEditor().getStringValue()); - assertEquals("password", page.getPasswordEditor().getStringValue()); - assertEquals("user", page.getUserName()); - assertEquals("password", page.getPassword()); - } - - private class MockRepositorySettingsPage extends AbstractRepositorySettingsPage { - - private Composite parent; - - public MockRepositorySettingsPage(AbstractRepositoryConnectorUi repositoryUi) { - super("title", "description", repositoryUi); - } - - @Override - protected void createAdditionalControls(Composite parent) { - this.parent = parent; - } - - @Override - protected boolean isValidUrl(String name) { - // ignore - return false; - } - - @Override - protected void validateSettings() { - // ignore - } - - Button getAnonymousButton() { - return anonymousButton; - } - - StringFieldEditor getUserNameEditor() { - return userNameEditor; - } - - StringFieldEditor getPasswordEditor() { - return passwordEditor; - } - - Composite getParent() { - return parent; - } - } - -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/RepositoryTaskSynchronizationTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/RepositoryTaskSynchronizationTest.java deleted file mode 100644 index b127588c1..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/RepositoryTaskSynchronizationTest.java +++ /dev/null @@ -1,381 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests; - -import java.io.UnsupportedEncodingException; -import java.net.Proxy; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Set; - -import javax.security.auth.login.LoginException; - -import junit.framework.TestCase; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.mylar.tasks.core.AbstractAttributeFactory; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.IOfflineTaskHandler; -import org.eclipse.mylar.tasks.core.RepositoryTaskAttribute; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask.RepositoryTaskSyncState; -import org.eclipse.mylar.tasks.tests.connector.MockAttributeFactory; -import org.eclipse.mylar.tasks.tests.connector.MockRepositoryConnector; -import org.eclipse.mylar.tasks.tests.connector.MockRepositoryTask; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Rob Elves - */ -public class RepositoryTaskSynchronizationTest extends TestCase { - - private static final String DATE_STAMP_3 = "2006-06-21 15:29:42"; - - private static final String DATE_STAMP_2 = "2006-06-21 15:29:41"; - - private static final String DATE_STAMP_1 = "2006-06-21 15:29:40"; - - private static final String HANDLE1 = "handle1"; - - private static final String URL1 = "http://www.eclipse.org/mylar"; - - private TestRepositoryConnector connector = new TestRepositoryConnector(); - - private TestOfflineTaskHandler handler = new TestOfflineTaskHandler(); - - private RepositoryTaskData newData; - - protected void setUp() throws Exception { - super.setUp(); - TasksUiPlugin.getSynchronizationManager().setForceSyncExec(true); - } - - protected void tearDown() throws Exception { - super.tearDown(); - } - - public void testHasIncoming() { - AbstractRepositoryTask task = new MockRepositoryTask(HANDLE1); - RepositoryTaskData taskData = new RepositoryTaskData(new MockAttributeFactory(), connector.getRepositoryType(), - URL1, "1"); - //assertTrue(TasksUiPlugin.getSynchronizationManager().checkHasIncoming(task, taskData)); - task.setLastSyncDateStamp("never"); - assertTrue(TasksUiPlugin.getSynchronizationManager().checkHasIncoming(task, taskData)); - taskData.setAttributeValue(RepositoryTaskAttribute.DATE_MODIFIED, "2006-06-21 15:29:39"); - assertTrue(TasksUiPlugin.getSynchronizationManager().checkHasIncoming(task, taskData)); - taskData.setAttributeValue(RepositoryTaskAttribute.DATE_MODIFIED, DATE_STAMP_1); - assertTrue(TasksUiPlugin.getSynchronizationManager().checkHasIncoming(task, taskData)); - task.setLastSyncDateStamp("2006-06-21 15:29:39"); - assertTrue(TasksUiPlugin.getSynchronizationManager().checkHasIncoming(task, taskData)); - task.setLastSyncDateStamp(DATE_STAMP_1); - assertFalse(TasksUiPlugin.getSynchronizationManager().checkHasIncoming(task, taskData)); - } - - public void testIncomingToIncoming() { - /* - * - Synchronize task with incoming changes - Make another change using - * browser - Open report in tasklist (editor opens with old 'new' data - * and background sync occurs) - Incoming status set again on task due - * to 2nd occurrence of new incoming data - */ - - // Test unforced - AbstractRepositoryTask task = primeTaskAndRepository(RepositoryTaskSyncState.INCOMING, - RepositoryTaskSyncState.INCOMING); - assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); - assertEquals(RepositoryTaskSyncState.INCOMING, task.getSyncState()); - TasksUiPlugin.getSynchronizationManager().updateOfflineState(task, newData, false); - assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); - assertEquals(RepositoryTaskSyncState.INCOMING, task.getSyncState()); - assertEquals(DATE_STAMP_2, task.getTaskData().getLastModified()); - // and again... - - RepositoryTaskData taskData3 = new RepositoryTaskData(new MockAttributeFactory(), connector.getRepositoryType(), URL1, "1"); - taskData3.setAttributeValue(RepositoryTaskAttribute.DATE_MODIFIED, DATE_STAMP_3); - TasksUiPlugin.getSynchronizationManager().updateOfflineState(task, taskData3, false); - // last modified stamp not updated until user synchronizes (newdata == olddata) - assertEquals(RepositoryTaskSyncState.INCOMING, task.getSyncState()); - assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); - assertEquals(DATE_STAMP_3, task.getTaskData().getLastModified()); - - // Should keep INCOMING state state since new data has same date samp and sych is not forced. - TasksUiPlugin.getSynchronizationManager().updateOfflineState(task, taskData3, false); - assertEquals(RepositoryTaskSyncState.INCOMING, task.getSyncState()); - assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); - assertEquals(DATE_STAMP_3, task.getTaskData().getLastModified()); - } - - public void testIncomingToSynchronized() { - // When not forced, tasks with incoming state should remain in incoming state if - // if new data has same date stamp as old data. - AbstractRepositoryTask task = primeTaskAndRepository(RepositoryTaskSyncState.INCOMING, - RepositoryTaskSyncState.SYNCHRONIZED); - assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); - TasksUiPlugin.getSynchronizationManager().updateOfflineState(task, newData, false); - assertEquals(RepositoryTaskSyncState.INCOMING, task.getSyncState()); - assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); - - // Test forced (should move to synced state if new data has same date stamp) - task = primeTaskAndRepository(RepositoryTaskSyncState.INCOMING, RepositoryTaskSyncState.SYNCHRONIZED); - assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); - TasksUiPlugin.getSynchronizationManager().updateOfflineState(task, newData, true); - assertEquals(RepositoryTaskSyncState.SYNCHRONIZED, task.getSyncState()); - assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); - - // Test forced with remote incoming - task = primeTaskAndRepository(RepositoryTaskSyncState.INCOMING, RepositoryTaskSyncState.INCOMING); - assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); - TasksUiPlugin.getSynchronizationManager().updateOfflineState(task, newData, true); - assertEquals(RepositoryTaskSyncState.SYNCHRONIZED, task.getSyncState()); - assertEquals(DATE_STAMP_2, task.getLastSyncDateStamp()); - - } - -// public void testIncomingToSynchronizedWithVoidSyncTime() { -// // IF the last sync time (modified timestamp on task) is null, this can result -// // in the editor refresh/repoen going into an infinite loops since the task never -// // gets to a synchronized state if the last mod time isn't set. It is now being set -// // if found to be null. -// AbstractRepositoryTask task = primeTaskAndRepository(RepositoryTaskSyncState.INCOMING, -// RepositoryTaskSyncState.SYNCHRONIZED); -// assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); -// task.setLastSyncDateStamp(null); -// TasksUiPlugin.getSynchronizationManager().updateOfflineState(task, newData, false); -// assertEquals(RepositoryTaskSyncState.INCOMING, task.getSyncState()); -// assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); -// -// TasksUiPlugin.getSynchronizationManager().updateOfflineState(task, newData, false); -// assertEquals(RepositoryTaskSyncState.SYNCHRONIZED, task.getSyncState()); -// assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); -// } - - /* - * public void testIncomingToConflict() { // invalid } - */ - - /* - * public void testIncomingToOutgoing() { // invalid } - */ - - public void testSynchronizedToIncoming() { - AbstractRepositoryTask task = primeTaskAndRepository(RepositoryTaskSyncState.SYNCHRONIZED, - RepositoryTaskSyncState.INCOMING); - assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); - TasksUiPlugin.getSynchronizationManager().updateOfflineState(task, newData, false); - assertEquals(RepositoryTaskSyncState.INCOMING, task.getSyncState()); - assertEquals(DATE_STAMP_2, task.getTaskData().getLastModified()); - // assertEquals(DATE_STAMP_2, task.getLastModifiedDateStamp()); - } - - public void testSynchronizedToSynchronized() { - AbstractRepositoryTask task = primeTaskAndRepository(RepositoryTaskSyncState.SYNCHRONIZED, - RepositoryTaskSyncState.SYNCHRONIZED); - assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); - TasksUiPlugin.getSynchronizationManager().updateOfflineState(task, newData, false); - assertEquals(RepositoryTaskSyncState.SYNCHRONIZED, task.getSyncState()); - assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); - } - - /* - * public void testSynchronizedToConflict() { // invalid } - */ - - public void testSynchronizedToOutgoing() { - AbstractRepositoryTask task = primeTaskAndRepository(RepositoryTaskSyncState.SYNCHRONIZED, - RepositoryTaskSyncState.SYNCHRONIZED); - assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); - - task.getTaskData().setNewComment("new comment"); - task.getTaskData().setHasLocalChanges(true); - - TasksUiPlugin.getSynchronizationManager().updateOfflineState(task, task.getTaskData(), false); - assertEquals(RepositoryTaskSyncState.OUTGOING, task.getSyncState()); - assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); - } - - public void testConflictToIncoming() { - // Forced - AbstractRepositoryTask task = primeTaskAndRepository(RepositoryTaskSyncState.CONFLICT, - RepositoryTaskSyncState.INCOMING); - assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); - TasksUiPlugin.getSynchronizationManager().updateOfflineState(task, newData, true); - assertEquals(RepositoryTaskSyncState.INCOMING, task.getSyncState()); - assertEquals(DATE_STAMP_2, task.getTaskData().getLastModified()); - // assertEquals(DATE_STAMP_2, task.getLastModifiedDateStamp()); - } - - public void testConflictToSynchonized() { - // Forced - AbstractRepositoryTask task = primeTaskAndRepository(RepositoryTaskSyncState.CONFLICT, - RepositoryTaskSyncState.SYNCHRONIZED); - assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); - TasksUiPlugin.getSynchronizationManager().updateOfflineState(task, newData, true); - assertEquals(RepositoryTaskSyncState.SYNCHRONIZED, task.getSyncState()); - assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); - } - - /* - * public void testConflictToConflict() { // ui involved } - */ - - /* - * public void testConflictToOutgoing() { // invalid? } - */ - - public void testOutgoingToIncoming() { - // Forced - AbstractRepositoryTask task = primeTaskAndRepository(RepositoryTaskSyncState.OUTGOING, - RepositoryTaskSyncState.INCOMING); - assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); - TasksUiPlugin.getSynchronizationManager().updateOfflineState(task, newData, true); - assertEquals(RepositoryTaskSyncState.INCOMING, task.getSyncState()); - assertEquals(DATE_STAMP_2, task.getTaskData().getLastModified()); - // assertEquals(DATE_STAMP_2, task.getLastModifiedDateStamp()); - } - - public void testOutgoingToSynchronized() { - // Forced - AbstractRepositoryTask task = primeTaskAndRepository(RepositoryTaskSyncState.OUTGOING, - RepositoryTaskSyncState.SYNCHRONIZED); - assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); - TasksUiPlugin.getSynchronizationManager().updateOfflineState(task, newData, true); - assertEquals(RepositoryTaskSyncState.SYNCHRONIZED, task.getSyncState()); - assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); - - // Forced with Incoming (user submits a report) - task = primeTaskAndRepository(RepositoryTaskSyncState.OUTGOING, RepositoryTaskSyncState.INCOMING); - task.setTaskData(null); - assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); - TasksUiPlugin.getSynchronizationManager().updateOfflineState(task, newData, true); - assertEquals(RepositoryTaskSyncState.SYNCHRONIZED, task.getSyncState()); - assertEquals(DATE_STAMP_2, task.getLastSyncDateStamp()); - } - - /* - * public void testOutgoingToConflict() { // ui required } - */ - - public void testOutgoingToOutgoing() { - AbstractRepositoryTask task = primeTaskAndRepository(RepositoryTaskSyncState.OUTGOING, - RepositoryTaskSyncState.SYNCHRONIZED); - assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); - TasksUiPlugin.getSynchronizationManager().updateOfflineState(task, newData, false); - assertEquals(RepositoryTaskSyncState.OUTGOING, task.getSyncState()); - assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); - } - - public void testMarkRead() { - AbstractRepositoryTask task = primeTaskAndRepository(RepositoryTaskSyncState.INCOMING, - RepositoryTaskSyncState.SYNCHRONIZED); - task.setLastSyncDateStamp(null); - assertEquals(RepositoryTaskSyncState.INCOMING, task.getSyncState()); - TasksUiPlugin.getSynchronizationManager().setTaskRead(task, true); - assertEquals(DATE_STAMP_1, task.getLastSyncDateStamp()); - assertEquals(RepositoryTaskSyncState.SYNCHRONIZED, task.getSyncState()); - } - - public void testMarkUnread() { - AbstractRepositoryTask task = primeTaskAndRepository(RepositoryTaskSyncState.SYNCHRONIZED, - RepositoryTaskSyncState.SYNCHRONIZED); - task.setLastSyncDateStamp(null); - assertEquals(RepositoryTaskSyncState.SYNCHRONIZED, task.getSyncState()); - TasksUiPlugin.getSynchronizationManager().setTaskRead(task, false); - assertEquals(RepositoryTaskSyncState.INCOMING, task.getSyncState()); - } - - private class TestOfflineTaskHandler implements IOfflineTaskHandler { - - private final String DATE_FORMAT_2 = "yyyy-MM-dd HH:mm:ss"; - - private final SimpleDateFormat format = new SimpleDateFormat(DATE_FORMAT_2); - - public AbstractAttributeFactory getAttributeFactory() { - // ignore - return null; - } - - public Date getDateForAttributeType(String attributeKey, String dateString) { - - try { - return format.parse(dateString); - } catch (ParseException e) { - return null; - } - } - - public Set<AbstractRepositoryTask> getChangedSinceLastSync(TaskRepository repository, - Set<AbstractRepositoryTask> tasks, Proxy proxySettings) throws CoreException, UnsupportedEncodingException { - return null; - } - - public RepositoryTaskData downloadTaskData(AbstractRepositoryTask repositoryTask, TaskRepository repository, - Proxy proxySettings) throws CoreException, LoginException { - return null; - } - - } - - private class TestRepositoryConnector extends MockRepositoryConnector { - - @Override - public IOfflineTaskHandler getOfflineTaskHandler() { - return handler; - } - - // @Override - // protected void removeOfflineTaskData(RepositoryTaskData bug) { - // // ignore - // } - // - // @Override - // public void saveOffline(RepositoryTaskData taskData) { - // // ignore - // } - - // @Override - // protected RepositoryTaskData - // loadOfflineTaskData(AbstractRepositoryTask repositoryTask) { - // return repositoryTask.getTaskData(); - // } - - } - - private AbstractRepositoryTask primeTaskAndRepository(RepositoryTaskSyncState localState, - RepositoryTaskSyncState remoteState) { - RepositoryTaskData taskData = null; - AbstractRepositoryTask task = new MockRepositoryTask(HANDLE1); - - taskData = new RepositoryTaskData(new MockAttributeFactory(), connector.getRepositoryType(), URL1, "1"); - taskData.setAttributeValue(RepositoryTaskAttribute.DATE_MODIFIED, DATE_STAMP_1); - task.setLastSyncDateStamp(DATE_STAMP_1); - task.setTaskData(taskData); - task.setSyncState(localState); - - newData = new RepositoryTaskData(new MockAttributeFactory(), connector.getRepositoryType(), URL1, "1"); - - switch (remoteState) { - case CONFLICT: - case INCOMING: - newData.setAttributeValue(RepositoryTaskAttribute.DATE_MODIFIED, DATE_STAMP_2); - break; - case SYNCHRONIZED: - newData.setAttributeValue(RepositoryTaskAttribute.DATE_MODIFIED, DATE_STAMP_1); - break; - default: - fail("Remote repository can only be INCOMING or SYNCHRONIZED wrt the local task."); - - } - - return task; - - } - -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/RetrieveTitleFromUrlTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/RetrieveTitleFromUrlTest.java deleted file mode 100644 index 96279315a..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/RetrieveTitleFromUrlTest.java +++ /dev/null @@ -1,42 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests; - -import java.lang.reflect.InvocationTargetException; - -import junit.framework.TestCase; - -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.mylar.internal.tasks.ui.RetrieveTitleFromUrlJob; - -/** - * @author Mik Kersten - */ -public class RetrieveTitleFromUrlTest extends TestCase { - - // XXX broken due to hang that causes the scheduled job to never complete - public void testRetrieve() throws InterruptedException, InvocationTargetException { - final String url = "http://eclipse.org/mylar/index.php"; - final String knownTitle = "Mylar Technology Project"; - - RetrieveTitleFromUrlJob job = new RetrieveTitleFromUrlJob(url) { - - public void setTitle(String title) { - assertEquals(knownTitle, title); - } - }; - job.run(new NullProgressMonitor()); - - assertTrue(job.isTitleRetrieved()); - assertEquals(knownTitle, job.getPageTitle()); - } -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TableSorterTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TableSorterTest.java deleted file mode 100644 index 9c1744ac8..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TableSorterTest.java +++ /dev/null @@ -1,35 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests; - -import junit.framework.TestCase; - -import org.eclipse.mylar.internal.tasks.ui.views.TaskListTableSorter; -import org.eclipse.mylar.tasks.core.Task; -import org.eclipse.mylar.tasks.core.TaskCategory; -import org.eclipse.mylar.tasks.core.TaskList; - -/** - * @author Mik Kersten - */ -public class TableSorterTest extends TestCase { - - public void testRootTaskSorting() { - TaskListTableSorter sorter = new TaskListTableSorter(null, "description"); - - Task task = new Task("1", "", true); - TaskCategory category = new TaskCategory("cat", new TaskList()); - - assertEquals(-1, sorter.compare(null, task, category)); - assertEquals(1, sorter.compare(null, category, task)); - } -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskActivityViewTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskActivityViewTest.java deleted file mode 100644 index 808146a04..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskActivityViewTest.java +++ /dev/null @@ -1,535 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests; - -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; - -import junit.framework.TestCase; - -import org.eclipse.mylar.context.core.InteractionEvent; -import org.eclipse.mylar.internal.context.core.MylarContextManager; -import org.eclipse.mylar.tasks.core.DateRangeActivityDelegate; -import org.eclipse.mylar.tasks.core.DateRangeContainer; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.Task; -import org.eclipse.mylar.tasks.core.TaskList; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Rob Elves - */ -public class TaskActivityViewTest extends TestCase { - - private long currentStartMili = 1200; - - private long currentEndMili = 1900; - - private TaskList taskList; - - protected void setUp() throws Exception { - super.setUp(); - taskList = TasksUiPlugin.getTaskListManager().getTaskList(); - } - - protected void tearDown() throws Exception { -// MylarTaskListPlugin.getTaskListManager().readExistingOrCreateNewList(); - TasksUiPlugin.getTaskListManager().resetTaskList(); - super.tearDown(); - } - - public void testDateRangeContainer() { - - Calendar startDate = GregorianCalendar.getInstance(); - startDate.setTimeInMillis(1000); - Calendar endDate = GregorianCalendar.getInstance(); - endDate.setTimeInMillis(2000); - - DateRangeContainer testContainer = new DateRangeContainer(startDate, endDate, "test date range container", taskList); - assertTrue(testContainer.includes(startDate)); - assertTrue(testContainer.includes(endDate)); - Calendar midTime = GregorianCalendar.getInstance(); - midTime.setTimeInMillis(1500); - assertTrue(testContainer.includes(midTime)); - - ITask task1 = new Task("task 1", "Task 1", true); - ITask task2 = new Task("task 2", "Task 2", true); - - Calendar currentTaskStart = GregorianCalendar.getInstance(); - currentTaskStart.setTimeInMillis(currentStartMili); - Calendar currentTaskEnd = GregorianCalendar.getInstance(); - currentTaskEnd.setTimeInMillis(currentEndMili); - testContainer.addTask(new DateRangeActivityDelegate(testContainer, task1, currentTaskStart, currentTaskEnd, 0)); - assertEquals(currentEndMili - currentStartMili, testContainer.getTotalElapsed()); - testContainer.addTask(new DateRangeActivityDelegate(testContainer, task2, currentTaskStart, currentTaskEnd, 0)); - assertEquals(2 * (currentEndMili - currentStartMili), testContainer.getTotalElapsed()); - assertEquals(2, testContainer.getChildren().size()); - testContainer.addTask(new DateRangeActivityDelegate(testContainer, task2, currentTaskStart, currentTaskEnd)); - assertEquals(3 * (currentEndMili - currentStartMili), testContainer.getTotalElapsed()); - assertEquals(2 * (currentEndMili - currentStartMili), testContainer.getElapsed(new DateRangeActivityDelegate( - testContainer, task2, currentTaskStart, currentTaskEnd))); - assertEquals(2, testContainer.getChildren().size()); - } - - public void testNegativeInactivity() { - Calendar startDate = GregorianCalendar.getInstance(); - startDate.setTimeInMillis(1000); - Calendar endDate = GregorianCalendar.getInstance(); - endDate.setTimeInMillis(2000); - ITask task1 = new Task("task 1", "Task 1", true); - DateRangeContainer testContainer = new DateRangeContainer(startDate, endDate, "test date range container", taskList); - testContainer.addTask(new DateRangeActivityDelegate(testContainer, task1, startDate, endDate, 3000)); - assertEquals(0, testContainer.getTotalElapsed()); - } - - public void testTaskListManagerActivity() { - - ITask task1 = new Task("task 1", "Task 1", true); - ITask task2 = new Task("task 2", "Task 2", true); - TasksUiPlugin.getTaskListManager().getTaskList().addTask(task1); - TasksUiPlugin.getTaskListManager().getTaskList().addTask(task2); - - // test this week - DateRangeContainer thisWeekActivity = TasksUiPlugin.getTaskListManager().getActivityThisWeek(); - assertNotNull(thisWeekActivity); - assertEquals(0, thisWeekActivity.getChildren().size()); - assertEquals(0, thisWeekActivity.getTotalElapsed()); - Calendar thisWeekCalendarStart = GregorianCalendar.getInstance(); - thisWeekCalendarStart.setTime(thisWeekActivity.getStart().getTime()); - Calendar thisWeekCalendarStop = GregorianCalendar.getInstance(); - thisWeekCalendarStop.setTime(thisWeekActivity.getStart().getTime()); - thisWeekCalendarStop.add(Calendar.MILLISECOND, 2); - assertTrue(thisWeekActivity.includes(thisWeekCalendarStart)); - - InteractionEvent event1 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task1 - .getHandleIdentifier(), "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_ACTIVATED, 2f, - thisWeekCalendarStart.getTime(), thisWeekCalendarStart.getTime()); - InteractionEvent event2 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task1 - .getHandleIdentifier(), "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_DEACTIVATED, 2f, - thisWeekCalendarStop.getTime(), thisWeekCalendarStop.getTime()); - - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event1); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event2); - assertEquals(1, thisWeekActivity.getChildren().size()); - assertEquals(thisWeekCalendarStop.getTime().getTime() - thisWeekCalendarStart.getTime().getTime(), - thisWeekActivity.getTotalElapsed()); - - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event1); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event2); - assertEquals(1, thisWeekActivity.getChildren().size()); - assertEquals(2 * (thisWeekCalendarStop.getTime().getTime() - thisWeekCalendarStart.getTime().getTime()), - thisWeekActivity.getTotalElapsed()); - assertEquals(2 * (thisWeekCalendarStop.getTime().getTime() - thisWeekCalendarStart.getTime().getTime()), - thisWeekActivity.getElapsed(new DateRangeActivityDelegate(thisWeekActivity, task1, null, null))); - - // multiple tasks in category - event1 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task2.getHandleIdentifier(), - "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_ACTIVATED, 2f, thisWeekCalendarStart - .getTime(), thisWeekCalendarStart.getTime()); - event2 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task2.getHandleIdentifier(), - "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_DEACTIVATED, 2f, thisWeekCalendarStop - .getTime(), thisWeekCalendarStop.getTime()); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event1); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event2); - assertEquals(2, thisWeekActivity.getChildren().size()); - - // test Past - DateRangeContainer pastActivity = TasksUiPlugin.getTaskListManager().getActivityPast(); - assertNotNull(pastActivity); - assertEquals(0, pastActivity.getChildren().size()); - - InteractionEvent event3 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task2 - .getHandleIdentifier(), "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_ACTIVATED, 2f, - pastActivity.getStart().getTime(), pastActivity.getStart().getTime()); - InteractionEvent event4 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task2 - .getHandleIdentifier(), "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_DEACTIVATED, 2f, - pastActivity.getEnd().getTime(), pastActivity.getEnd().getTime()); - - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event3); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event4); - assertEquals(1, pastActivity.getChildren().size()); - - // test Future - DateRangeContainer futureActivity = TasksUiPlugin.getTaskListManager().getActivityFuture(); - assertNotNull(futureActivity); - assertEquals(0, futureActivity.getChildren().size()); - - InteractionEvent event5 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task2 - .getHandleIdentifier(), "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_ACTIVATED, 2f, - futureActivity.getStart().getTime(), futureActivity.getStart().getTime()); - InteractionEvent event6 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task2 - .getHandleIdentifier(), "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_DEACTIVATED, 2f, - futureActivity.getEnd().getTime(), futureActivity.getEnd().getTime()); - - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event5); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event6); - assertEquals(1, futureActivity.getChildren().size()); - - // test Next week activity - DateRangeContainer activityNextWeek = TasksUiPlugin.getTaskListManager().getActivityNextWeek(); - assertNotNull(activityNextWeek); - assertEquals(0, activityNextWeek.getChildren().size()); - - InteractionEvent event7 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task2 - .getHandleIdentifier(), "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_ACTIVATED, 2f, - activityNextWeek.getStart().getTime(), activityNextWeek.getStart().getTime()); - InteractionEvent event8 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task2 - .getHandleIdentifier(), "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_DEACTIVATED, 2f, - activityNextWeek.getEnd().getTime(), activityNextWeek.getEnd().getTime()); - - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event7); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event8); - assertEquals(1, activityNextWeek.getChildren().size()); - - // test Previous week activity - DateRangeContainer activityPreviousWeek = TasksUiPlugin.getTaskListManager().getActivityPrevious(); - assertNotNull(activityPreviousWeek); - assertEquals(0, activityPreviousWeek.getChildren().size()); - - InteractionEvent event9 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task2 - .getHandleIdentifier(), "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_ACTIVATED, 2f, - activityPreviousWeek.getStart().getTime(), activityPreviousWeek.getStart().getTime()); - InteractionEvent event10 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task2 - .getHandleIdentifier(), "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_DEACTIVATED, 2f, - activityPreviousWeek.getEnd().getTime(), activityPreviousWeek.getEnd().getTime()); - - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event9); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event10); - assertEquals(1, activityPreviousWeek.getChildren().size()); - } - - /** - * Some 'attention' events when all tasks are inactive - * @author Yuri Baburov (burchik@gmail.com) - */ - public void testTaskListManagerActivity2(){ - ITask task1 = new Task("task 1", "Task 1", true); - TasksUiPlugin.getTaskListManager().getTaskList().addTask(task1); - DateRangeContainer thisWeekActivity = TasksUiPlugin.getTaskListManager().getActivityThisWeek(); - assertNotNull(thisWeekActivity); - assertEquals(0, thisWeekActivity.getChildren().size()); - assertEquals(0, thisWeekActivity.getTotalElapsed()); - thisWeekActivity.getStart().setTimeInMillis(1149490800000L); // Start of the week Jun 5 2006 - Jun 11 2006, NOVST - thisWeekActivity.getEnd().setTimeInMillis(1150095600000L); // End of the week - - Date time1 = new Date(1149911820812L); // Sat Jun 10 10:57:00 NOVST 2006 - task 1 - activated - Date time2 = new Date(1149911820812L); // Sat Jun 10 10:57:00 NOVST 2006 - task 1 - deactivated - Date time3 = new Date(1149911840812L); // Sat Jun 10 10:57:20 NOVST 2006 - attention - deactivated - Date time4 = new Date(1149911941765L); // Sat Jun 10 10:59:01 NOVST 2006 - attention - activated - Date time5 = new Date(1149911948953L); // Sat Jun 10 10:59:08 NOVST 2006 - task 1 - activated - Date time6 = new Date(1149911988781L); // Sat Jun 10 10:59:48 NOVST 2006 - task 1 - deactivated - - String task1handle = task1.getHandleIdentifier(); - InteractionEvent event1 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task1handle, - "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_ACTIVATED, 2f, time1, time1); - InteractionEvent event2 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task1handle, - "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_DEACTIVATED, 2f, time2, time2); - InteractionEvent event3 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", "attention", - "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_DEACTIVATED, 2f, time3, time3); - InteractionEvent event4 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", "attention", - "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_ACTIVATED, 2f, time4, time4); - InteractionEvent event5 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task1handle, - "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_ACTIVATED, 2f, time5, time5); - InteractionEvent event6 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task1handle, - "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_DEACTIVATED, 2f, time6, time6); - - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event1); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event2); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event3); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event4); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event5); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event6); - assertEquals(1, thisWeekActivity.getChildren().size()); - long expectedTotalTime = time6.getTime() - time5.getTime() + time2.getTime() - time1.getTime(); - assertEquals(expectedTotalTime, thisWeekActivity.getTotalElapsed()); - assertEquals(expectedTotalTime, TasksUiPlugin.getTaskListManager().getElapsedTime(task1)); - assertEquals(expectedTotalTime, thisWeekActivity.getElapsed(new DateRangeActivityDelegate(thisWeekActivity, - task1, null, null))); - } - - /** - * Task with some inner 'attention' events - * @author Yuri Baburov (burchik@gmail.com) - */ - public void testTaskListManagerActivity3(){ - ITask task1 = new Task("task 1", "Task 1", true); - TasksUiPlugin.getTaskListManager().getTaskList().addTask(task1); - DateRangeContainer thisWeekActivity = TasksUiPlugin.getTaskListManager().getActivityThisWeek(); - assertNotNull(thisWeekActivity); - assertEquals(0, thisWeekActivity.getChildren().size()); - assertEquals(0, thisWeekActivity.getTotalElapsed()); - thisWeekActivity.getStart().setTimeInMillis(1149490800000L); // Start of the week Jun 5 2006 - Jun 11 2006, NOVST - thisWeekActivity.getEnd().setTimeInMillis(1150095600000L); // End of the week - - Date time1 = new Date(1150007053171L); // Sun Jun 11 13:24:13 NOVST 2006 - task 1 - activated - Date time2 = new Date(1150007263468L); // Sun Jun 11 13:27:43 NOVST 2006 - attention - deactivated - Date time3 = new Date(1150021535953L); // Sun Jun 11 17:25:35 NOVST 2006 - attention - activated - Date time4 = new Date(1150021658500L); // Sun Jun 11 17:27:38 NOVST 2006 - attention - deactivated - Date time5 = new Date(1150031089250L); // Sun Jun 11 20:04:49 NOVST 2006 - attention - activated - Date time6 = new Date(1150031111578L); // Sun Jun 11 20:05:11 NOVST 2006 - attention - deactivated - Date time7 = new Date(1150031111578L); // Sun Jun 11 20:05:11 NOVST 2006 - task 1 - deactivated - - String task1handle = task1.getHandleIdentifier(); - InteractionEvent event1 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task1handle, - "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_ACTIVATED, 2f, time1, time1); - InteractionEvent event2 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", "attention", - "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_DEACTIVATED, 2f, time2, time2); - InteractionEvent event3 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", "attention", - "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_ACTIVATED, 2f, time3, time3); - InteractionEvent event4 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", "attention", - "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_DEACTIVATED, 2f, time4, time4); - InteractionEvent event5 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", "attention", - "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_ACTIVATED, 2f, time5, time5); - InteractionEvent event6 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", "attention", - "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_DEACTIVATED, 2f, time6, time6); - InteractionEvent event7 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task1handle, - "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_DEACTIVATED, 2f, time7, time7); - - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event1); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event2); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event3); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event4); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event5); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event6); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event7); - assertEquals(1, thisWeekActivity.getChildren().size()); - long expectedTotalTime = - time6.getTime() - time5.getTime() + - time4.getTime() - time3.getTime() + - time2.getTime() - time1.getTime(); - assertEquals(expectedTotalTime, thisWeekActivity.getTotalElapsed()); - assertEquals(expectedTotalTime, thisWeekActivity.getElapsed(new DateRangeActivityDelegate(thisWeekActivity, - task1, null, null))); - } - - public void testTaskListManagerInactivity() { - - ITask task1 = new Task("task 1", "Task 1", true); - TasksUiPlugin.getTaskListManager().getTaskList().addTask(task1); - - DateRangeContainer activityThisWeek = TasksUiPlugin.getTaskListManager().getActivityThisWeek(); - assertNotNull(activityThisWeek); - assertEquals(0, activityThisWeek.getChildren().size()); - - InteractionEvent event1 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task1 - .getHandleIdentifier(), "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_ACTIVATED, 2f, - activityThisWeek.getStart().getTime(), activityThisWeek.getStart().getTime()); - InteractionEvent event2 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task1 - .getHandleIdentifier(), "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_DEACTIVATED, 2f, - activityThisWeek.getEnd().getTime(), activityThisWeek.getEnd().getTime()); - - Calendar inactivityStart = GregorianCalendar.getInstance(); - Calendar inactivityEnd = GregorianCalendar.getInstance(); - inactivityEnd.add(Calendar.HOUR_OF_DAY, 1); - - InteractionEvent inactivityEvent1 = new InteractionEvent(InteractionEvent.Kind.COMMAND, "structureKind", - MylarContextManager.ACTIVITY_HANDLE_ATTENTION, "originId", "navigatedRelation", - MylarContextManager.ACTIVITY_DELTA_DEACTIVATED, 2f, inactivityStart.getTime(), inactivityStart.getTime()); - InteractionEvent inactivityEvent2 = new InteractionEvent(InteractionEvent.Kind.COMMAND, "structureKind", - MylarContextManager.ACTIVITY_HANDLE_ATTENTION, "originId", "navigatedRelation", - MylarContextManager.ACTIVITY_DELTA_ACTIVATED, 2f, inactivityEnd.getTime(), inactivityEnd.getTime()); - - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event1); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(inactivityEvent1); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(inactivityEvent2); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event2); - assertEquals(1, activityThisWeek.getChildren().size()); - - long expectedTotalTime = (activityThisWeek.getEnd().getTime().getTime() - activityThisWeek.getStart().getTime() - .getTime()) - - (inactivityEnd.getTime().getTime() - inactivityStart.getTime().getTime()); - assertEquals(expectedTotalTime, activityThisWeek.getTotalElapsed()); - assertEquals(expectedTotalTime, activityThisWeek.getElapsed(new DateRangeActivityDelegate(activityThisWeek, - task1, null, null))); - - } - - // attention:Deactivated -> task:Activated -> attention:Activated -> - // task:Deactivated - public void testInterleavedActivation() { - - ITask task1 = new Task("task 1", "Task 1", true); - TasksUiPlugin.getTaskListManager().getTaskList().addTask(task1); - - DateRangeContainer activityThisWeek = TasksUiPlugin.getTaskListManager().getActivityThisWeek(); - assertNotNull(activityThisWeek); - assertEquals(0, activityThisWeek.getChildren().size()); - - Calendar taskActivationStart = GregorianCalendar.getInstance(); - taskActivationStart.add(Calendar.MILLISECOND, 15); - Calendar taskActivationStop = GregorianCalendar.getInstance(); - taskActivationStop.add(Calendar.MILLISECOND, 25); - - Calendar inactivityStart = GregorianCalendar.getInstance(); - inactivityStart.add(Calendar.MILLISECOND, 5); - Calendar inactivityStop = GregorianCalendar.getInstance(); - inactivityStop.add(Calendar.MILLISECOND, 18); - - InteractionEvent event1 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task1 - .getHandleIdentifier(), "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_ACTIVATED, 2f, - taskActivationStart.getTime(), taskActivationStart.getTime()); - InteractionEvent event2 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task1 - .getHandleIdentifier(), "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_DEACTIVATED, 2f, - taskActivationStop.getTime(), taskActivationStop.getTime()); - - InteractionEvent inactivityEvent1 = new InteractionEvent(InteractionEvent.Kind.COMMAND, "structureKind", - MylarContextManager.ACTIVITY_HANDLE_ATTENTION, "originId", "navigatedRelation", - MylarContextManager.ACTIVITY_DELTA_DEACTIVATED, 2f, inactivityStart.getTime(), inactivityStart.getTime()); - InteractionEvent inactivityEvent2 = new InteractionEvent(InteractionEvent.Kind.COMMAND, "structureKind", - MylarContextManager.ACTIVITY_HANDLE_ATTENTION, "originId", "navigatedRelation", - MylarContextManager.ACTIVITY_DELTA_ACTIVATED, 2f, inactivityStop.getTime(), inactivityStop.getTime()); - - TasksUiPlugin.getTaskListManager().parseInteractionEvent(inactivityEvent1); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event1); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(inactivityEvent2); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event2); - assertEquals(1, activityThisWeek.getChildren().size()); - - long expectedTotalTime = taskActivationStop.getTimeInMillis() - taskActivationStart.getTimeInMillis(); - assertEquals(expectedTotalTime, activityThisWeek.getTotalElapsed()); - assertEquals(expectedTotalTime, activityThisWeek.getElapsed(new DateRangeActivityDelegate(activityThisWeek, - task1, null, null))); - } - - // task:Activated -> attention:Deactivated -> task:Deactivated -> - // attention:Activated - public void testInterleavedActivation2() { - - ITask task1 = new Task("task 1", "Task 1", true); - TasksUiPlugin.getTaskListManager().getTaskList().addTask(task1); - - DateRangeContainer activityThisWeek = TasksUiPlugin.getTaskListManager().getActivityThisWeek(); - assertNotNull(activityThisWeek); - assertEquals(0, activityThisWeek.getChildren().size()); - - Calendar taskActivationStart = GregorianCalendar.getInstance(); - taskActivationStart.add(Calendar.MILLISECOND, 10); - Calendar taskActivationStop = GregorianCalendar.getInstance(); - taskActivationStop.add(Calendar.MILLISECOND, 20); - - Calendar inactivityStart = GregorianCalendar.getInstance(); - inactivityStart.add(Calendar.MILLISECOND, 15); - Calendar inactivityStop = GregorianCalendar.getInstance(); - inactivityStop.add(Calendar.MILLISECOND, 25); - - InteractionEvent event1 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task1 - .getHandleIdentifier(), "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_ACTIVATED, 2f, - taskActivationStart.getTime(), taskActivationStart.getTime()); - InteractionEvent event2 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task1 - .getHandleIdentifier(), "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_DEACTIVATED, 2f, - taskActivationStop.getTime(), taskActivationStop.getTime()); - - InteractionEvent inactivityEvent1 = new InteractionEvent(InteractionEvent.Kind.COMMAND, "structureKind", - MylarContextManager.ACTIVITY_HANDLE_ATTENTION, "originId", "navigatedRelation", - MylarContextManager.ACTIVITY_DELTA_DEACTIVATED, 2f, inactivityStart.getTime(), inactivityStart.getTime()); - InteractionEvent inactivityEvent2 = new InteractionEvent(InteractionEvent.Kind.COMMAND, "structureKind", - MylarContextManager.ACTIVITY_HANDLE_ATTENTION, "originId", "navigatedRelation", - MylarContextManager.ACTIVITY_DELTA_ACTIVATED, 2f, inactivityStop.getTime(), inactivityStop.getTime()); - - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event1); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(inactivityEvent1); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event2); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(inactivityEvent2); - assertEquals(1, activityThisWeek.getChildren().size()); - - long expectedTotalTime = inactivityStart.getTimeInMillis() - taskActivationStart.getTimeInMillis(); - assertEquals(expectedTotalTime, activityThisWeek.getTotalElapsed()); - assertEquals(expectedTotalTime, activityThisWeek.getElapsed(new DateRangeActivityDelegate(activityThisWeek, - task1, null, null))); - } - - public void testResetAndRollOver() { - - DateRangeContainer pastWeeks = TasksUiPlugin.getTaskListManager().getActivityPast(); - DateRangeContainer previousWeek = TasksUiPlugin.getTaskListManager().getActivityPrevious(); - DateRangeContainer thisWeek = TasksUiPlugin.getTaskListManager().getActivityThisWeek(); - DateRangeContainer nextWeek = TasksUiPlugin.getTaskListManager().getActivityNextWeek(); - DateRangeContainer futureWeeks = TasksUiPlugin.getTaskListManager().getActivityFuture(); - - assertTrue(thisWeek.isPresent()); - assertTrue(nextWeek.isFuture()); - - long pastStartTime = pastWeeks.getEnd().getTimeInMillis(); - long previousStartTime = previousWeek.getStart().getTimeInMillis(); - long thisWeekStartTime = thisWeek.getStart().getTimeInMillis(); - long nextStartTime = nextWeek.getStart().getTimeInMillis(); - long futureStartTime = futureWeeks.getStart().getTimeInMillis(); - - Calendar pastWeeksTaskStart = Calendar.getInstance(); - pastWeeksTaskStart.setTimeInMillis(pastStartTime - 10); - assertTrue(pastWeeks.includes(pastWeeksTaskStart)); - - Calendar previousWeekTaskStart = Calendar.getInstance(); - previousWeekTaskStart.setTimeInMillis(previousStartTime + 10); - assertTrue(previousWeek.includes(previousWeekTaskStart)); - - Calendar thisWeekTaskStart = Calendar.getInstance(); - thisWeekTaskStart.setTimeInMillis(thisWeekStartTime + 10); - assertTrue(thisWeek.includes(thisWeekTaskStart)); - - Calendar thisWeekTaskStop = Calendar.getInstance(); - thisWeekTaskStop.setTimeInMillis(thisWeek.getEnd().getTimeInMillis() - 10); - assertTrue(thisWeek.includes(thisWeekTaskStop)); - - Calendar nextWeekTaskStart = Calendar.getInstance(); - nextWeekTaskStart.setTimeInMillis(nextStartTime + 10); - assertTrue(nextWeek.includes(nextWeekTaskStart)); - - Calendar futureWeekTaskStart = Calendar.getInstance(); - futureWeekTaskStart.setTimeInMillis(futureStartTime + 10); - assertTrue(futureWeeks.includes(futureWeekTaskStart)); - - ITask task1 = new Task("task 1", "Task 1", true); - TasksUiPlugin.getTaskListManager().getTaskList().addTask(task1); - InteractionEvent event1 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task1 - .getHandleIdentifier(), "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_ACTIVATED, 2f, - thisWeekTaskStart.getTime(), thisWeekTaskStart.getTime()); - InteractionEvent event2 = new InteractionEvent(InteractionEvent.Kind.SELECTION, "structureKind", task1 - .getHandleIdentifier(), "originId", "navigatedRelation", MylarContextManager.ACTIVITY_DELTA_DEACTIVATED, 2f, - thisWeekTaskStop.getTime(), thisWeekTaskStop.getTime()); - - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event1); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event2); - assertEquals(1, thisWeek.getChildren().size()); - assertEquals(thisWeekTaskStop.getTime().getTime() - thisWeekTaskStart.getTime().getTime(), - thisWeek.getTotalElapsed()); - - // ROLL OVER - TasksUiPlugin.getTaskListManager().startTime = new Date(nextWeek.getStart().getTimeInMillis() + 10); - TasksUiPlugin.getTaskListManager().resetAndRollOver(); - - - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event1); - TasksUiPlugin.getTaskListManager().parseInteractionEvent(event2); - - - DateRangeContainer newPastWeeks = TasksUiPlugin.getTaskListManager().getActivityPast(); - DateRangeContainer newPreviousWeek = TasksUiPlugin.getTaskListManager().getActivityPrevious(); - DateRangeContainer newThisWeek = TasksUiPlugin.getTaskListManager().getActivityThisWeek(); - DateRangeContainer newNextWeek = TasksUiPlugin.getTaskListManager().getActivityNextWeek(); - //DateRangeContainer newFutureWeeks = MylarTaskListPlugin.getTaskListManager().getActivityFuture(); - - assertTrue(newPastWeeks.includes(previousWeekTaskStart)); - assertTrue(newPreviousWeek.includes(thisWeekTaskStart)); - assertTrue(newThisWeek.includes(nextWeekTaskStart)); - assertTrue(newNextWeek.includes(futureWeekTaskStart)); - - assertFalse(newThisWeek.includes(thisWeekTaskStart)); - assertFalse(newThisWeek.isPresent()); - assertTrue(newThisWeek.isFuture()); - - assertEquals(1, newPreviousWeek.getChildren().size()); - assertEquals(thisWeekTaskStop.getTime().getTime() - thisWeekTaskStart.getTime().getTime(), - newPreviousWeek.getTotalElapsed()); - } -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskDataExportTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskDataExportTest.java deleted file mode 100644 index 5c8e13059..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskDataExportTest.java +++ /dev/null @@ -1,161 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.tasks.tests; - -import java.io.File; -import java.io.FileInputStream; -import java.util.ArrayList; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; - -import org.eclipse.mylar.context.core.ContextCorePlugin; -import org.eclipse.mylar.context.core.InteractionEvent; -import org.eclipse.mylar.context.tests.AbstractContextTest; -import org.eclipse.mylar.internal.context.core.MylarContext; -import org.eclipse.mylar.internal.tasks.ui.wizards.TaskDataExportWizard; -import org.eclipse.mylar.internal.tasks.ui.wizards.TaskDataExportWizardPage; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.Task; -import org.eclipse.mylar.tasks.ui.TaskListManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.widgets.Shell; - -/** - * Test case for the Task Export Wizard - * - * @author Wesley Coelho - * @author Mik Kersten (fixes) - */ -public class TaskDataExportTest extends AbstractContextTest { - - private TaskDataExportWizard wizard = null; - - private TaskDataExportWizardPage wizardPage = null; - - private File destinationDir = null; - - private ITask task1 = null; - - private TaskListManager manager = TasksUiPlugin.getTaskListManager(); - - private MylarContext mockContext; - - protected void setUp() throws Exception { - super.setUp(); - - removeFiles(new File(TasksUiPlugin.getDefault().getDataDirectory())); - - // Create the export wizard - wizard = new TaskDataExportWizard(); - wizard.addPages(); - wizard.createPageControls(new Shell()); - wizardPage = (TaskDataExportWizardPage) wizard.getPage(TaskDataExportWizardPage.PAGE_NAME); - assertNotNull(wizardPage); - - // Create test export destination directory - destinationDir = new File(TasksUiPlugin.getDefault().getDataDirectory() + File.separator + "TestDir"); - if(destinationDir.exists()) { - removeFiles(destinationDir); - } else { - destinationDir.mkdir(); - } - assertTrue(destinationDir.exists()); - - // Create a task and context with an interaction event to be saved - task1 = new Task(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), "Export Test Task", true); - manager.getTaskList().moveToRoot(task1); - mockContext = ContextCorePlugin.getContextManager().loadContext(task1.getHandleIdentifier()); - InteractionEvent event = new InteractionEvent(InteractionEvent.Kind.EDIT, "structureKind", "handle", "originId"); - mockContext.parseEvent(event); - ContextCorePlugin.getContextManager().activateContext(mockContext); - - // Save the context file and check that it exists - ContextCorePlugin.getContextManager().saveContext(mockContext.getHandleIdentifier()); - File taskFile = ContextCorePlugin.getContextManager().getFileForContext(task1.getHandleIdentifier()); - assertTrue(ContextCorePlugin.getContextManager().hasContext(task1.getHandleIdentifier())); - assertTrue(taskFile.exists()); - } - - protected void tearDown() throws Exception { - removeFiles(destinationDir); - destinationDir.delete(); - assertFalse(destinationDir.exists()); - ContextCorePlugin.getContextManager().deactivateContext(mockContext.getHandleIdentifier()); - super.tearDown(); - } - - /** - * Tests the wizard when it has been asked to export all task data to a zip - * file - */ - public void testExportAllToZip() throws Exception { - - // Set parameters in the wizard to simulate a user setting them and - // clicking "Finish" - wizardPage.setParameters(true, true, true, true, true, destinationDir.getPath()); - wizard.performFinish(); - - // Check that the task list file was exported - File destZipFile = new File(destinationDir + File.separator + TaskDataExportWizard.getZipFileName()); - assertTrue(destZipFile.exists()); - ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(destZipFile)); - ArrayList<String> entries = new ArrayList<String>(); - - ZipEntry entry = zipInputStream.getNextEntry(); - while (entry != null) { - entries.add(entry.getName()); - entry = zipInputStream.getNextEntry(); - } - zipInputStream.close(); - assertEquals(2, entries.size()); - assertTrue(entries.contains("tasklist.xml.zip")); - assertTrue(entries.contains("contexts/local-1.xml.zip")); - } - - // /** Tests the wizard when it has been asked to export all task data */ - // public void testExportAll() { - // - // // Set parameters in the wizard to simulate a user setting them and - // // clicking "Finish" - // wizardPage.setParameters(true, true, true, true, false, - // destinationDir.getPath()); - // wizard.performFinish(); - // - // // Check that the task list file was exported - // File destTaskListFile = new File(destinationDir + File.separator + - // TasksUiPlugin.OLD_TASK_LIST_FILE); - // assertTrue(destTaskListFile.exists()); - // - // // Check that the activity history file was exported - // File destActivationHistoryFile = new File(destinationDir + File.separator - // + MylarContextManager.CONTEXT_HISTORY_FILE_NAME + - // MylarContextManager.OLD_CONTEXT_FILE_EXTENSION); - // assertTrue(destActivationHistoryFile.exists()); - // - // // Check that the task context file created in setUp() was exported - // File destTaskContextFile = - // ContextCorePlugin.getContextManager().getFileForContext(task1.getHandleIdentifier()); - // // File destTaskContextFile = new File(destinationDir + File.separator + - // // task1.getContextPath() + MylarContextManager.CONTEXT_FILE_EXTENSION); - // assertTrue(destTaskContextFile.exists()); - // } - - private void removeFiles(File root) { - if (root.isDirectory()) { - for (File file : root.listFiles()) { - if (file.isDirectory()) { - removeFiles(file); - } - file.delete(); - } - } - } -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskDataImportTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskDataImportTest.java deleted file mode 100644 index 2bd9bf949..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskDataImportTest.java +++ /dev/null @@ -1,165 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.tasks.tests; - -import java.io.File; -import java.util.Collection; - -import org.eclipse.mylar.context.core.ContextCorePlugin; -import org.eclipse.mylar.context.tests.AbstractContextTest; -import org.eclipse.mylar.internal.context.core.MylarContext; -import org.eclipse.mylar.internal.tasks.ui.wizards.TaskDataImportWizard; -import org.eclipse.mylar.internal.tasks.ui.wizards.TaskDataImportWizardPage; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.Task; -import org.eclipse.mylar.tasks.core.TaskList; -import org.eclipse.mylar.tasks.ui.TaskListManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.widgets.Shell; - -/** - * Test case for the Task Import Wizard - * - * @author Rob Elves - */ -public class TaskDataImportTest extends AbstractContextTest { - - private TaskDataImportWizard wizard = null; - - private TaskDataImportWizardPage wizardPage = null; - - private String sourceDir = "testdata/taskdataimporttest"; - - private File sourceDirFile = null; - - private String sourceZipPath = "testdata/taskdataimporttest/mylardata-2006-02-16.zip"; - - private File sourceZipFile = null; - - private TaskListManager manager = TasksUiPlugin.getTaskListManager(); - - protected void setUp() throws Exception { - super.setUp(); - - // Create the import wizard - wizard = new TaskDataImportWizard(); - wizard.addPages(); - wizard.createPageControls(new Shell()); - wizardPage = (TaskDataImportWizardPage) wizard.getPage(TaskDataImportWizardPage.PAGE_NAME); - assertNotNull(wizardPage); - - manager.resetTaskList(); - assertTrue(manager.getTaskList().getRootElements().size() == 1); - - sourceDirFile = TaskTestUtil.getLocalFile(sourceDir); - assertTrue(sourceDirFile.exists()); - sourceZipFile = TaskTestUtil.getLocalFile(sourceZipPath); - assertTrue(sourceZipFile.exists()); - - // make sure no tasks and categories exist prior to import tests - assertEquals(1, manager.getTaskList().getTaskContainers().size()); - ContextCorePlugin.getContextManager().getActivityHistoryMetaContext().reset(); - } - - protected void tearDown() throws Exception { - ContextCorePlugin.getContextManager().resetActivityHistory(); - TasksUiPlugin.getRepositoryManager().clearRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - TasksUiPlugin.getTaskListManager().resetTaskList(); - super.tearDown(); - } - - /** Tests the wizard when it has been asked to import task data from folder */ - public void testImportFromAllFromFolder() { - TaskList taskList = TasksUiPlugin.getTaskListManager().getTaskList(); - MylarContext historyContext = ContextCorePlugin.getContextManager().getActivityHistoryMetaContext(); - assertNotNull(taskList); - assertNotNull(historyContext); - assertTrue(taskList.getAllTasks().size() == 0); - assertTrue(historyContext.getInteractionHistory().size() == 0); - assertEquals(0, TasksUiPlugin.getRepositoryManager().getAllRepositories().size()); - - wizardPage.setParameters(true, true, true, true, false, sourceDirFile.getPath(), ""); - wizard.performFinish(); - - Collection<ITask> tasks = taskList.getAllTasks(); - assertTrue(tasks.size() > 0); - for (ITask task : tasks) { - assertTrue(ContextCorePlugin.getContextManager().hasContext(task.getHandleIdentifier())); - } - historyContext = ContextCorePlugin.getContextManager().getActivityHistoryMetaContext(); - assertNotNull(historyContext); - assertTrue(historyContext.getInteractionHistory().size() > 0); - assertEquals(2, TasksUiPlugin.getRepositoryManager().getAllRepositories().size()); - } - - /** - * Tests the wizard when it has been asked to import all task data from a - * zip file - */ - public void testImportRepositoriesZip() { - TaskList taskList = TasksUiPlugin.getTaskListManager().getTaskList(); - MylarContext historyContext = ContextCorePlugin.getContextManager().getActivityHistoryMetaContext(); - assertNotNull(taskList); - assertNotNull(historyContext); - assertTrue(taskList.getAllTasks().size() == 0); - assertTrue(historyContext.getInteractionHistory().size() == 0); - assertEquals(0, TasksUiPlugin.getRepositoryManager().getAllRepositories().size()); - - wizardPage.setParameters(true, true, true, true, true, "", sourceZipFile.getPath()); - wizard.performFinish(); - - Collection<ITask> tasks = taskList.getAllTasks(); - assertEquals(2, tasks.size()); - for (ITask task : tasks) { - assertTrue(ContextCorePlugin.getContextManager().hasContext(task.getHandleIdentifier())); - } - historyContext = ContextCorePlugin.getContextManager().getActivityHistoryMetaContext(); - assertNotNull(historyContext); - assertTrue(historyContext.getInteractionHistory().size() > 0); - assertEquals(2, TasksUiPlugin.getRepositoryManager().getAllRepositories().size()); - } - - - /** - * Tests the wizard when it has been asked to import all task data from a - * zip file - */ - public void testImportOverwritesAllTasks() { - TaskList taskList = TasksUiPlugin.getTaskListManager().getTaskList(); - MylarContext historyContext = ContextCorePlugin.getContextManager().getActivityHistoryMetaContext(); - assertNotNull(taskList); - assertNotNull(historyContext); - assertTrue(taskList.getAllTasks().size() == 0); - assertTrue(historyContext.getInteractionHistory().size() == 0); - assertEquals(0, TasksUiPlugin.getRepositoryManager().getAllRepositories().size()); - - Task task1 = new Task("handle", "label", true); - taskList.addTask(task1); - Collection<ITask> tasks = taskList.getAllTasks(); - assertEquals(1, tasks.size()); - - wizardPage.setParameters(true, true, true, true, true, "", sourceZipFile.getPath()); - wizard.performFinish(); - - tasks = taskList.getAllTasks(); - assertEquals(2, tasks.size()); - assertTrue(!taskList.getAllTasks().contains(task1)); - for (ITask task : tasks) { - assertTrue(ContextCorePlugin.getContextManager().hasContext(task.getHandleIdentifier())); - } - historyContext = ContextCorePlugin.getContextManager().getActivityHistoryMetaContext(); - assertNotNull(historyContext); - assertTrue(historyContext.getInteractionHistory().size() > 0); - assertEquals(2, TasksUiPlugin.getRepositoryManager().getAllRepositories().size()); - - } - -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskHistoryTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskHistoryTest.java deleted file mode 100644 index 0fd98f4dc..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskHistoryTest.java +++ /dev/null @@ -1,256 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests; - -import java.util.List; - -import junit.framework.TestCase; - -import org.eclipse.mylar.context.core.ContextCorePlugin; -import org.eclipse.mylar.internal.tasks.ui.actions.PreviousTaskDropDownAction; -import org.eclipse.mylar.internal.tasks.ui.actions.TaskActivateAction; -import org.eclipse.mylar.internal.tasks.ui.actions.TaskDeactivateAction; -import org.eclipse.mylar.internal.tasks.ui.actions.TaskNavigateDropDownAction.TaskNavigateAction; -import org.eclipse.mylar.internal.tasks.ui.views.TaskActivationHistory; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.Task; -import org.eclipse.mylar.tasks.ui.TaskListManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.PartInitException; - -/** - * @author Wes Coelho - * @author Rob Elves - */ -public class TaskHistoryTest extends TestCase { - - protected TaskListManager manager = TasksUiPlugin.getTaskListManager(); - - protected TaskActivationHistory history; - - protected TaskListView taskView = null; - - protected Task task1 = null; - - protected Task task2 = null; - - protected Task task3 = null; - - protected Task task4 = null; - - protected Task task5 = null; - - protected void setUp() throws Exception { - super.setUp(); - - try { - TasksUiPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().showView( - "org.eclipse.mylar.tasks.ui.views.TaskListView"); - } catch (PartInitException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - fail("View not initialized"); - } - - assertNotNull(TaskListView.getFromActivePerspective()); - taskView = TaskListView.getFromActivePerspective(); - - resetHistory(); - - task1 = new Task(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), "task 1", true); - manager.getTaskList().moveToRoot(task1); - - task2 = new Task(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), "task 2", true); - manager.getTaskList().moveToRoot(task2); - - task3 = new Task(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), "task 3", true); - manager.getTaskList().moveToRoot(task3); - - task4 = new Task(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), "task 4", true); - manager.getTaskList().moveToRoot(task4); - - task5 = new Task(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), "task 5", true); - manager.getTaskList().moveToRoot(task5); - - history = manager.getTaskActivationHistory(); - } - - private void resetHistory() { - manager.getTaskActivationHistory().clear(); - ContextCorePlugin.getContextManager().resetActivityHistory(); - } - - /** - * Tests the next task and previous task navigation. - */ - public void testBasicHistoryNavigation() { - (new TaskActivateAction()).run(task1); - history.addTask(task1); - (new TaskActivateAction()).run(task2); - history.addTask(task2); - (new TaskActivateAction()).run(task3); - history.addTask(task3); - - assertTrue(task3.isActive()); - assertFalse(task2.isActive()); - - taskView.getPreviousTaskAction().run(); - assertTrue(task2.isActive()); - - taskView.getPreviousTaskAction().run(); - assertTrue(task1.isActive()); - - taskView.getPreviousTaskAction().run(); - assertTrue(task1.isActive()); - - // taskView.getPreviousTaskAction().run(); - // assertTrue(task1.isActive()); - // - // taskView.getPreviousTaskAction().run(); - // assertTrue(task1.isActive()); - - // taskView.getNextTaskAction().run(); - // assertTrue(task2.isActive()); - // - // taskView.getNextTaskAction().run(); - // assertTrue(task3.isActive()); - // - // taskView.getNextTaskAction().run(); - // assertTrue(task3.isActive()); - // - // taskView.getPreviousTaskAction().run(); - // assertTrue(task2.isActive()); - // - // taskView.getNextTaskAction().run(); - // assertTrue(task3.isActive()); - // - // (new TaskActivateAction()).run(task4); - // history.addTask(task4); // Simulate clicking on it rather - // // than navigating next or previous - // assertTrue(task4.isActive()); - // - // taskView.getNextTaskAction().run(); - // assertTrue(task4.isActive()); - // - // taskView.getPreviousTaskAction().run(); - // assertTrue(task3.isActive()); - // - // taskView.getNextTaskAction().run(); - // assertTrue(task4.isActive()); - - } - - /** - * Tests navigation to previous/next tasks that are chosen from a list - * rather than being sequentially navigated - */ - public void testArbitraryHistoryNavigation() { - - resetHistory(); - - // Simulate activating the tasks by clicking rather than - // navigating previous/next - (new TaskActivateAction()).run(task1); - history.addTask(task1); - (new TaskActivateAction()).run(task2); - history.addTask(task2); - (new TaskActivateAction()).run(task3); - history.addTask(task3); - (new TaskActivateAction()).run(task4); - history.addTask(task4); - - assertTrue(task4.isActive()); - //TaskActivationHistory taskHistory = taskView.getTaskActivationHistory(); - List<ITask> prevHistoryList = history.getPreviousTasks(); - - // Check that the previous history list looks right - assertTrue(prevHistoryList.size() >= 3); - assertTrue(prevHistoryList.get(prevHistoryList.size() - 2) == task3); - assertTrue(prevHistoryList.get(prevHistoryList.size() - 3) == task2); - assertTrue(prevHistoryList.get(prevHistoryList.size() - 4) == task1); - - // Get a task from the list and activate it - PreviousTaskDropDownAction prevAction = new PreviousTaskDropDownAction(taskView, history); - TaskNavigateAction navigateAction = prevAction.new TaskNavigateAction(task2); - navigateAction.run(); - assertTrue(task2.isActive()); - - // Now check that the next and prev lists look right - prevHistoryList = history.getPreviousTasks(); - assertTrue(prevHistoryList.get(prevHistoryList.size() - 1) == task2); - assertTrue(prevHistoryList.get(prevHistoryList.size() - 2) == task4); - assertTrue(prevHistoryList.get(prevHistoryList.size() - 3) == task3); - assertTrue(prevHistoryList.get(prevHistoryList.size() - 4) == task1); - - // Activation of task outside of history navigation tool - history.addTask(task3); - prevHistoryList = history.getPreviousTasks(); - assertTrue(prevHistoryList.get(prevHistoryList.size() - 1) == task3); - assertTrue(prevHistoryList.get(prevHistoryList.size() - 2) == task2); - assertTrue(prevHistoryList.get(prevHistoryList.size() - 3) == task4); - assertTrue(prevHistoryList.get(prevHistoryList.size() - 4) == task1); - - // Pick a task from drop down history - navigateAction = prevAction.new TaskNavigateAction(task4); - navigateAction.run(); - assertTrue(task4.isActive()); - assertTrue(prevHistoryList.get(prevHistoryList.size() - 1) == task4); - assertTrue(prevHistoryList.get(prevHistoryList.size() - 2) == task3); - assertTrue(prevHistoryList.get(prevHistoryList.size() - 3) == task2); - assertTrue(prevHistoryList.get(prevHistoryList.size() - 4) == task1); - - // Hit previous task button - taskView.getPreviousTaskAction().run(); - assertTrue(task3.isActive()); - assertTrue(prevHistoryList.get(prevHistoryList.size() - 1) == task4); - assertTrue(prevHistoryList.get(prevHistoryList.size() - 2) == task3); - assertTrue(prevHistoryList.get(prevHistoryList.size() - 3) == task2); - assertTrue(prevHistoryList.get(prevHistoryList.size() - 4) == task1); - - (new TaskDeactivateAction()).run(task3); - - // List<ITask> nextHistoryList = taskHistory.getNextTasks(); - // assertTrue(nextHistoryList.get(0) == task3); - // assertTrue(nextHistoryList.get(1) == task4); - // - // // Navigate to a next item - // NextTaskDropDownAction nextAction = new - // NextTaskDropDownAction(taskView, taskHistory); - // navigateAction = nextAction.new TaskNavigateAction(task4); - // navigateAction.run(); - // taskHistory.navigatedToTask(task4); - // - // assertTrue(task4.isActive()); - // - // // Check that the prev and next lists look right - // nextHistoryList = taskHistory.getNextTasks(); - // prevHistoryList = taskHistory.getPreviousTasks(); - // assertTrue(nextHistoryList.size() == 0); - // assertTrue(prevHistoryList.get(prevHistoryList.size() - 1) == task3); - // assertTrue(prevHistoryList.get(prevHistoryList.size() - 2) == task2); - // assertTrue(prevHistoryList.get(prevHistoryList.size() - 3) == task1); - // - // // Check that a deactivated task appears first on the history list - // (new TaskActivateAction()).run(task5); - // (new TaskDeactivateAction()).run(task5); - // taskView.addTaskToHistory(task5); - // prevHistoryList = taskHistory.getPreviousTasks(); - // assertTrue(prevHistoryList.get(prevHistoryList.size() - 1) == task5); - - } - - protected void tearDown() throws Exception { - super.tearDown(); - } - -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskKeyComparatorTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskKeyComparatorTest.java deleted file mode 100644 index ad9fb1fe6..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskKeyComparatorTest.java +++ /dev/null @@ -1,64 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests; - -import java.util.Arrays; - -import junit.framework.TestCase; - -import org.eclipse.mylar.internal.tasks.ui.views.TaskKeyComparator; - -/** - * @author Eugene Kuleshov https://bugs.eclipse.org/bugs/show_bug.cgi?id=129511 - * @author Mik Kersten - */ -public class TaskKeyComparatorTest extends TestCase { - - public void testPatterns() { - comparisonCheck("", new String[] { null, null, "" }); - comparisonCheck(" ", new String[] { null, null, " " }); - comparisonCheck("aa", new String[] { null, null, "aa" }); - comparisonCheck("11", new String[] { "", "11", "" }); - comparisonCheck("11 aa", new String[] { "", "11", " aa" }); - comparisonCheck(" 11 aa", new String[] { null, null, " 11 aa" }); - comparisonCheck("aa11 bb", new String[] { "aa", "11", " bb" }); - comparisonCheck("aa-11 bb", new String[] { "aa-", "11", " bb" }); - comparisonCheck("aa 11 bb", new String[] { null, null, "aa 11 bb" }); - comparisonCheck("aa bb 11 cc", new String[] { null, null, "aa bb 11 cc" }); - - comparisonCheck("aa", "aa", 0); - comparisonCheck("aa", "bb", -1); - comparisonCheck("bb", "aa", 1); - - comparisonCheck("aa11", "aa11", 0); - comparisonCheck("aa11", "aa12", -1); - comparisonCheck("aa12", "aa11", 1); - - comparisonCheck("aa1", "aa11", -1); - comparisonCheck("aa1", "aa2", -1); - comparisonCheck("aa1", "aa21", -1); - - comparisonCheck("aa1 aaa", "aa1 aaa", 0); - comparisonCheck("aa1 aaa", "aa1 bbb", -1); - comparisonCheck("aa1 bbb", "aa11 aaa", -1); - } - - private void comparisonCheck(String s, String[] exptecation) { - String[] res = new TaskKeyComparator().split(s); - assertTrue("Invalid " + Arrays.asList(res) + " " + Arrays.asList(exptecation), Arrays.equals(res, exptecation)); - } - - public void comparisonCheck(String s1, String s2, int n) { - assertEquals(n, new TaskKeyComparator().compare(s1, s2)); - } - -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskListBackupManagerTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskListBackupManagerTest.java deleted file mode 100644 index b4143f72b..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskListBackupManagerTest.java +++ /dev/null @@ -1,99 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests; - -import java.io.File; -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; - -import junit.framework.TestCase; - -import org.eclipse.mylar.internal.tasks.ui.TaskListBackupManager; -import org.eclipse.mylar.internal.tasks.ui.TaskListPreferenceConstants; -import org.eclipse.mylar.tasks.core.Task; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Rob Elves - */ -public class TaskListBackupManagerTest extends TestCase { - - private Task task1; - - protected void setUp() throws Exception { - super.setUp(); - task1 = new Task("handle", "label", true); - TasksUiPlugin.getTaskListManager().getTaskList().addTask(task1); - TasksUiPlugin.getTaskListManager().activateTask(task1); - TasksUiPlugin.getTaskListManager().deactivateTask(task1); - TasksUiPlugin.getTaskListManager().saveTaskList(); - } - - protected void tearDown() throws Exception { - super.tearDown(); - // MylarTaskListPlugin.getMylarCorePrefs().setValue(TaskListPreferenceConstants.BACKUP_AUTOMATICALLY, - // false); - } - - public void testAutoBackupDisabled() throws InterruptedException { - TaskListBackupManager backupManager = TasksUiPlugin.getDefault().getBackupManager(); - // MylarTaskListPlugin.getMylarCorePrefs().setValue(TaskListPreferenceConstants.BACKUP_AUTOMATICALLY, - // false); - TasksUiPlugin.getDefault().getPreferenceStore().setValue(TaskListPreferenceConstants.BACKUP_SCHEDULE, 1); - TasksUiPlugin.getDefault().getPreferenceStore().setValue(TaskListPreferenceConstants.BACKUP_LAST, 0f); - assertEquals(0, TasksUiPlugin.getDefault().getPreferenceStore() - .getLong(TaskListPreferenceConstants.BACKUP_LAST)); - backupManager.start(5); - Thread.sleep(3000); - assertEquals(0, TasksUiPlugin.getDefault().getPreferenceStore() - .getLong(TaskListPreferenceConstants.BACKUP_LAST)); - } - - public void testAutoBackupEnabled() throws InterruptedException, InvocationTargetException, IOException { - TaskListBackupManager backupManager = TasksUiPlugin.getDefault().getBackupManager(); - String backupFolder = TasksUiPlugin.getDefault().getBackupFolderPath(); - // String backupFolder = - // MylarTaskListPlugin.getMylarCorePrefs().getDefaultString( - // TaskListPreferenceConstants.BACKUP_FOLDER); - File backupFileFolder = new File(backupFolder); - deleteBackupFolder(backupFileFolder); - // MylarTaskListPlugin.getMylarCorePrefs().setValue(TaskListPreferenceConstants.BACKUP_FOLDER, - // backupFolder); - TasksUiPlugin.getDefault().getPreferenceStore().setValue(TaskListPreferenceConstants.BACKUP_SCHEDULE, 1); - TasksUiPlugin.getDefault().getPreferenceStore().setValue(TaskListPreferenceConstants.BACKUP_LAST, 0f); - // MylarTaskListPlugin.getMylarCorePrefs().setValue(TaskListPreferenceConstants.BACKUP_AUTOMATICALLY, - // true); - backupManager.backupNow(true); - assertFalse(TasksUiPlugin.getDefault().getPreferenceStore().getLong(TaskListPreferenceConstants.BACKUP_LAST) == 0); - assertTrue(backupFileFolder.exists()); - assertTrue(backupFileFolder.isDirectory()); - assertTrue(backupFileFolder.listFiles().length == 1); - - // Test removal of old backups - TasksUiPlugin.getDefault().getPreferenceStore().setValue(TaskListPreferenceConstants.BACKUP_MAXFILES, 0); - backupManager.removeOldBackups(backupFileFolder); - assertEquals(0, backupFileFolder.listFiles().length); - - // TODO: Test that OLDEST backups are deleted first. - - } - - private void deleteBackupFolder(File backupFileFolder) { - if (backupFileFolder.exists()) { - for (File file : backupFileFolder.listFiles()) { - file.delete(); - } - backupFileFolder.delete(); - } - } - -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskListDataMigrationTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskListDataMigrationTest.java deleted file mode 100644 index 2894bf5d7..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskListDataMigrationTest.java +++ /dev/null @@ -1,108 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests; - -import java.io.File; -import java.net.URLEncoder; - -import junit.framework.TestCase; - -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.mylar.internal.context.core.MylarContextManager; -import org.eclipse.mylar.tasks.ui.TaskListDataMigration; - -/** - * @author Rob Elves - */ -public class TaskListDataMigrationTest extends TestCase { - - private String sourceDir = "testdata/tasklistdatamigrationtest"; - private File sourceDirFile; - private TaskListDataMigration migrator; - - protected void setUp() throws Exception { - super.setUp(); - sourceDirFile = TaskTestUtil.getLocalFile(sourceDir); - assertNotNull(sourceDirFile); - deleteAllFiles(sourceDirFile); - migrator = new TaskListDataMigration(sourceDirFile); - assertTrue(sourceDirFile.exists()); - } - - protected void tearDown() throws Exception { - super.tearDown(); - deleteAllFiles(sourceDirFile); - } - - public void testOldTasklistMigration() throws Exception { - File oldTasklistFile = new File(sourceDirFile, "tasklist.xml"); - oldTasklistFile.createNewFile(); - assertTrue(new File(sourceDirFile, "tasklist.xml").exists()); - assertTrue(!new File(sourceDirFile, "tasklist.xml.zip").exists()); - assertTrue(migrator.migrateTaskList(new NullProgressMonitor())); - assertFalse(new File(sourceDirFile, "tasklist.xml").exists()); - assertFalse(!new File(sourceDirFile, "tasklist.xml.zip").exists()); - } - - - public void testOldRepositoriesMigration() throws Exception { - File oldRepositoriesFile = new File(sourceDirFile, "repositories.xml"); - oldRepositoriesFile.createNewFile(); - assertTrue(new File(sourceDirFile, "repositories.xml").exists()); - assertTrue(!new File(sourceDirFile, "repositories.xml.zip").exists()); - assertTrue(migrator.migrateRepositoriesData(new NullProgressMonitor())); - assertFalse(new File(sourceDirFile, "repositories.xml").exists()); - assertTrue(new File(sourceDirFile, "repositories.xml.zip").exists()); - } - - public void testOldContextMigration() throws Exception { - String contextFileName1 = URLEncoder.encode("http://oldcontext1.xml", MylarContextManager.CONTEXT_FILENAME_ENCODING); - String contextFileName2 = URLEncoder.encode("http://oldcontext2.xml", MylarContextManager.CONTEXT_FILENAME_ENCODING); - String contextFileName3 = "task-1.xml"; - File oldContextFile1 = new File(sourceDirFile, contextFileName1); - oldContextFile1.createNewFile(); - File oldContextFile2 = new File(sourceDirFile, contextFileName2); - oldContextFile2.createNewFile(); - File oldContextFile3 = new File(sourceDirFile, contextFileName3); - oldContextFile3.createNewFile(); - File contextFolder = new File(sourceDirFile, MylarContextManager.CONTEXTS_DIRECTORY); - assertTrue(!contextFolder.exists()); - assertTrue(migrator.migrateTaskContextData(new NullProgressMonitor())); - assertFalse(oldContextFile1.exists()); - assertFalse(oldContextFile2.exists()); - assertFalse(oldContextFile3.exists()); - assertTrue(contextFolder.exists()); - assertTrue(new File(contextFolder, contextFileName1+".zip").exists()); - assertTrue(new File(contextFolder, contextFileName2+".zip").exists()); - assertTrue(new File(contextFolder, contextFileName3+".zip").exists()); - } - - public void testOldActivityMigration() throws Exception { - File oldActivityFile = new File(sourceDirFile, MylarContextManager.OLD_CONTEXT_HISTORY_FILE_NAME+MylarContextManager.OLD_CONTEXT_FILE_EXTENSION); - oldActivityFile.createNewFile(); - File contextFolder = new File(sourceDirFile, MylarContextManager.CONTEXTS_DIRECTORY); - assertTrue(!contextFolder.exists()); - assertTrue(migrator.migrateActivityData(new NullProgressMonitor())); - assertFalse(oldActivityFile.exists()); - assertTrue(contextFolder.exists()); - assertTrue(new File(contextFolder, MylarContextManager.CONTEXT_HISTORY_FILE_NAME+MylarContextManager.CONTEXT_FILE_EXTENSION).exists()); - } - - - private void deleteAllFiles(File folder) { - for (File file: folder.listFiles()) { - if(file.isDirectory()) { - deleteAllFiles(file); - file.delete(); - } else { - file.delete(); - } - } - } -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskListDnDTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskListDnDTest.java deleted file mode 100644 index 3c9e54b06..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskListDnDTest.java +++ /dev/null @@ -1,77 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests; - -import java.util.Set; - -import junit.framework.TestCase; - -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListDropAdapter; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.ui.TaskListManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Rob Elves - * @author Mik Kersten - */ -public class TaskListDnDTest extends TestCase { - - private TaskListDropAdapter dropAdapter; - - private TaskListManager manager; - - @Override - protected void setUp() throws Exception { - manager = TasksUiPlugin.getTaskListManager(); - manager.resetTaskList(); - - TreeViewer viewer = TaskListView.getFromActivePerspective().getViewer(); - assertNotNull(viewer); - dropAdapter = new TaskListDropAdapter(viewer); - } - - @Override - protected void tearDown() throws Exception { - super.tearDown(); - manager.resetTaskList(); - TasksUiPlugin.getDefault().getTaskListSaveManager().saveTaskList(true); - assertNull(manager.getTaskList().getActiveTask()); - } - - public void testisUrl() { - String url = "http://eclipse.org"; - String title = "Title"; - String urlData = url + "\n" + title; - assertFalse(dropAdapter.isUrl(title)); - assertTrue(dropAdapter.isUrl(url)); - assertTrue(dropAdapter.isUrl(urlData)); - } - - public void testUrlDrop() { - assertEquals(0, manager.getTaskList().getRootTasks().size()); - String url = "http://eclipse.org/mylar"; - String title = "Mylar Technology Project"; - String urlData = url + "\n" + title; - - dropAdapter.performDrop(urlData); - Set<ITask> tasks = manager.getTaskList().getRootTasks(); - assertNotNull(tasks); - assertEquals(1, tasks.size()); - assertEquals(url, tasks.iterator().next().getUrl()); - - // TODO: Failing due to asynchronous retrieval of title from url - // assertEquals(title, tasks.get(0).getDescription(false)); - } -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskListManagerTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskListManagerTest.java deleted file mode 100644 index 5e5122663..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskListManagerTest.java +++ /dev/null @@ -1,649 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collections; -import java.util.Date; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import junit.framework.TestCase; - -import org.eclipse.mylar.context.core.ContextCorePlugin; -import org.eclipse.mylar.internal.tasks.ui.ScheduledTaskListSynchJob; -import org.eclipse.mylar.internal.tasks.ui.TaskListPreferenceConstants; -import org.eclipse.mylar.internal.tasks.ui.TaskListSynchronizationScheduler; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.AbstractTaskContainer; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.Task; -import org.eclipse.mylar.tasks.core.TaskCategory; -import org.eclipse.mylar.tasks.core.TaskList; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.tests.connector.MockQueryHit; -import org.eclipse.mylar.tasks.tests.connector.MockRepositoryConnector; -import org.eclipse.mylar.tasks.tests.connector.MockRepositoryQuery; -import org.eclipse.mylar.tasks.tests.connector.MockRepositoryTask; -import org.eclipse.mylar.tasks.ui.TaskListManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Mik Kersten - */ -public class TaskListManagerTest extends TestCase { - - private static final String MOCK_REPOSITORY_URL = "http://mock.repository"; - - private TaskListManager manager; - - private TaskRepository repository; - - @Override - protected void setUp() throws Exception { - super.setUp(); - manager = TasksUiPlugin.getTaskListManager(); - manager.resetTaskList(); - manager.readExistingOrCreateNewList(); - - repository = new TaskRepository(MockRepositoryConnector.REPOSITORY_KIND, MOCK_REPOSITORY_URL); - TasksUiPlugin.getRepositoryManager().addRepository(repository, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - - assertEquals(0, manager.getTaskList().getAllTasks().size()); - } - - @Override - protected void tearDown() throws Exception { - super.tearDown(); - manager.resetTaskList(); - TasksUiPlugin.getDefault().getTaskListSaveManager().saveTaskList(true); - TasksUiPlugin.getRepositoryManager().removeRepository(repository, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - } - - public void testSingleTaskDeletion() { - MockRepositoryTask task = new MockRepositoryTask("mock-1"); - manager.getTaskList().moveToRoot(task); - manager.saveTaskList(); - - manager.resetTaskList(); - manager.readExistingOrCreateNewList(); - assertEquals(1, manager.getTaskList().getAllTasks().size()); - - manager.getTaskList().deleteTask(task); - assertEquals(0, manager.getTaskList().getAllTasks().size()); - - manager.resetTaskList(); - manager.readExistingOrCreateNewList(); - assertEquals(0, manager.getTaskList().getAllTasks().size()); - } - - public void testMigrateTaskContextFiles() throws IOException { - File fileA = ContextCorePlugin.getContextManager().getFileForContext("http://a-1"); - fileA.createNewFile(); - fileA.deleteOnExit(); - assertTrue(fileA.exists()); - manager.refactorRepositoryUrl("http://a", "http://b"); - File fileB = ContextCorePlugin.getContextManager().getFileForContext("http://b-1"); - assertTrue(fileB.exists()); - assertFalse(fileA.exists()); - } - - public void testMigrateQueryUrlHandles() { - AbstractRepositoryQuery query = new MockRepositoryQuery("mquery", manager.getTaskList()); - query.setRepositoryUrl("http://foo.bar"); - query.setUrl("http://foo.bar/b"); - manager.getTaskList().addQuery(query); - manager.refactorRepositoryUrl("http://foo.bar", "http://bar.baz"); - AbstractRepositoryQuery changedQuery = manager.getTaskList().getRepositoryQueries("http://bar.baz").iterator().next(); - assertEquals("http://bar.baz/b", changedQuery.getUrl()); - } - - public void testMigrateQueryHandles() { - AbstractRepositoryQuery query = new MockRepositoryQuery("mquery", manager.getTaskList()); - query.setRepositoryUrl("http://a"); - manager.getTaskList().addQuery(query); - manager.refactorRepositoryUrl("http://a", "http://b"); - assertFalse(manager.getTaskList().getRepositoryQueries("http://b").isEmpty()); - assertTrue(manager.getTaskList().getRepositoryQueries("http://a").isEmpty()); - } - - public void testMigrateTaskHandles() { - AbstractRepositoryTask task = new MockRepositoryTask("http://a-123"); - manager.getTaskList().addTask(task); - manager.refactorRepositoryUrl("http://a", "http://b"); - assertNull(manager.getTaskList().getTask("http://a-123")); - assertNotNull(manager.getTaskList().getTask("http://b-123")); - } - - public void testIsActiveToday() { - ITask task = new Task("1", "task-1", true); - assertFalse(manager.isReminderToday(task)); - - task.setReminderDate(new Date()); - assertFalse(manager.isReminderToday(task)); - - task.setReminded(true); - assertFalse(manager.isReminderToday(task)); - task.setReminded(true); - - Calendar inAnHour = Calendar.getInstance(); - inAnHour.set(Calendar.HOUR_OF_DAY, inAnHour.get(Calendar.HOUR_OF_DAY) + 1); - inAnHour.getTime(); - task.setReminderDate(inAnHour.getTime()); - Calendar tomorrow = Calendar.getInstance(); - manager.setSecheduledIn(tomorrow, 1); - assertEquals(-1, inAnHour.compareTo(tomorrow)); - - assertTrue(manager.isReminderToday(task)); - } - - public void testSchedulePastEndOfMonth() { - Calendar calendar = Calendar.getInstance(); - calendar.set(Calendar.MONTH, Calendar.SEPTEMBER); - calendar.set(Calendar.DAY_OF_MONTH, 30); - manager.setSecheduledIn(calendar, 1); - assertEquals("Should be October", Calendar.OCTOBER, calendar.get(Calendar.MONTH)); - } - - public void testIsCompletedToday() { - ITask task = new Task("1", "task-1", true); - task.setCompleted(true); - task.setCompletionDate(new Date()); - assertTrue(manager.isCompletedToday(task)); - - MockRepositoryTask mockTask = new MockRepositoryTask(MOCK_REPOSITORY_URL+"-1"); - manager.getTaskList().addTask(mockTask); - mockTask.setCompleted(true); - mockTask.setCompletionDate(new Date()); - assertFalse(manager.isCompletedToday(mockTask)); - - mockTask = new MockRepositoryTask(MOCK_REPOSITORY_URL+"-2"); - manager.getTaskList().addTask(mockTask); - mockTask.setCompleted(true); - mockTask.setCompletionDate(new Date()); - repository.setAuthenticationCredentials("testUser", "testPassword"); - mockTask.setOwner("testUser"); - assertTrue(manager.isCompletedToday(mockTask)); - - } - - public void testMoveCategories() { - assertEquals(0, manager.getTaskList().getRootTasks().size()); - Task task1 = new Task("t1", "t1", true); - - TaskCategory cat1 = new TaskCategory("cat1", manager.getTaskList()); - manager.getTaskList().addCategory(cat1); - TaskCategory cat2 = new TaskCategory("cat2", manager.getTaskList()); - manager.getTaskList().addCategory(cat2); - - manager.getTaskList().moveToContainer(cat1, task1); - assertEquals(1, manager.getTaskList().getContainerForHandle("cat1").getChildren().size()); - assertEquals(0, manager.getTaskList().getContainerForHandle("cat2").getChildren().size()); - - manager.getTaskList().moveToContainer(cat2, task1); - assertEquals(0, manager.getTaskList().getContainerForHandle("cat1").getChildren().size()); - assertEquals(1, manager.getTaskList().getContainerForHandle("cat2").getChildren().size()); - } - - public void testMoveToRoot() { - assertEquals(0, manager.getTaskList().getRootTasks().size()); - Task task1 = new Task("t1", "t1", true); - manager.getTaskList().moveToRoot(task1); - assertEquals(1, manager.getTaskList().getRootTasks().size()); - assertEquals(TaskList.LABEL_ROOT, task1.getContainer().getHandleIdentifier()); - - TaskCategory cat1 = new TaskCategory("c1", manager.getTaskList()); - manager.getTaskList().addCategory(cat1); - - manager.getTaskList().moveToContainer(cat1, task1); - assertEquals(0, manager.getTaskList().getRootTasks().size()); - assertEquals(cat1, task1.getContainer()); - - manager.getTaskList().moveToRoot(task1); - assertEquals(1, manager.getTaskList().getRootTasks().size()); - assertEquals(0, cat1.getChildren().size()); - assertEquals(TaskList.LABEL_ROOT, task1.getContainer().getHandleIdentifier()); - } - - public void testEmpty() { - manager.resetTaskList(); - assertTrue(manager.getTaskList().isEmpty()); - manager.getTaskList().internalAddRootTask(new Task("", "", true)); - assertFalse(manager.getTaskList().isEmpty()); - } - - public void testCategoryPersistance() { - MockRepositoryTask task = new MockRepositoryTask("bug-1"); - TaskCategory category = new TaskCategory("cat", manager.getTaskList()); - manager.getTaskList().addCategory(category); - manager.getTaskList().moveToContainer(category, task); - assertNotNull(manager.getTaskList()); - assertEquals(2, manager.getTaskList().getCategories().size()); - - manager.saveTaskList(); - manager.resetTaskList(); - manager.readExistingOrCreateNewList(); - assertEquals("" + manager.getTaskList().getCategories(), 2, manager.getTaskList().getCategories().size()); - assertEquals(1, manager.getTaskList().getAllTasks().size()); - } - - public void testDeleteCategory() { - assertNotNull(manager.getTaskList()); - assertEquals(1, manager.getTaskList().getCategories().size()); - TaskCategory category = new TaskCategory("cat", manager.getTaskList()); - manager.getTaskList().addCategory(category); - assertEquals(2, manager.getTaskList().getCategories().size()); - manager.getTaskList().deleteCategory(category); - assertEquals(1, manager.getTaskList().getCategories().size()); - } - - public void testDeleteCategoryMovesTasksToRoot() { - ITask task = new MockRepositoryTask("mock-delete"); - TaskCategory category = new TaskCategory("mock-cat", manager.getTaskList()); - manager.getTaskList().addTask(task, category); - manager.getTaskList().addCategory(category); - assertEquals(0, manager.getTaskList().getRootCategory().getChildren().size()); - manager.getTaskList().deleteCategory(category); - assertEquals(1, manager.getTaskList().getRootCategory().getChildren().size()); - } - - public void testRenameCategory() { - - assertNotNull(manager.getTaskList()); - - TaskCategory category = new TaskCategory("cat", manager.getTaskList()); - manager.getTaskList().addCategory(category); - assertEquals(2, manager.getTaskList().getCategories().size()); - String newDesc = "newDescription"; - manager.getTaskList().renameContainer(category, newDesc); - AbstractTaskContainer container = manager.getTaskList().getContainerForHandle(newDesc); - assertNotNull(container); - assertEquals(newDesc, container.getDescription()); - manager.getTaskList().deleteCategory(container); - assertEquals(1, manager.getTaskList().getCategories().size()); - } - - public void testDeleteCategoryAfterRename() { - String newDesc = "newDescription"; - assertNotNull(manager.getTaskList()); - assertEquals(1, manager.getTaskList().getCategories().size()); - TaskCategory category = new TaskCategory("cat", manager.getTaskList()); - manager.getTaskList().addCategory(category); - assertEquals(2, manager.getTaskList().getCategories().size()); - manager.getTaskList().renameContainer(category, newDesc); - manager.getTaskList().deleteCategory(category); - assertEquals(1, manager.getTaskList().getCategories().size()); - } - - public void testCreateSameCategoryName() { - assertNotNull(manager.getTaskList()); - assertEquals(1, manager.getTaskList().getCategories().size()); - TaskCategory category = new TaskCategory("cat", manager.getTaskList()); - manager.getTaskList().addCategory(category); - assertEquals(2, manager.getTaskList().getCategories().size()); - TaskCategory category2 = new TaskCategory("cat", manager.getTaskList()); - manager.getTaskList().addCategory(category2); - assertEquals(2, manager.getTaskList().getCategories().size()); - AbstractTaskContainer container = manager.getTaskList().getContainerForHandle("cat"); - assertEquals(container, category); - } - - public void testDeleteRootTask() { - ITask task = new Task("task-1", "label", true); - manager.getTaskList().addTask(task); - manager.getTaskList().internalAddRootTask(task); - manager.getTaskList().deleteTask(task); - assertEquals(0, manager.getTaskList().getAllTasks().size()); - assertEquals(0, manager.getTaskList().getRootTasks().size()); - assertEquals(0, manager.getTaskList().getArchiveContainer().getChildren().size()); - } - - public void testDeleteFromCategory() { - assertEquals(0, manager.getTaskList().getAllTasks().size()); - assertEquals(0, manager.getTaskList().getRootTasks().size()); - assertEquals(0, manager.getTaskList().getArchiveContainer().getChildren().size()); - assertEquals(1, manager.getTaskList().getCategories().size()); - - ITask task = new Task("task-1", "label", true); - TaskCategory category = new TaskCategory("handleAndDescription", manager.getTaskList()); - manager.getTaskList().addTask(task); - assertEquals(1, manager.getTaskList().getArchiveContainer().getChildren().size()); - - manager.getTaskList().addCategory(category); - manager.getTaskList().moveToContainer(category, task); - assertEquals(2, manager.getTaskList().getCategories().size()); - assertEquals(1, category.getChildren().size()); - assertEquals(0, manager.getTaskList().getArchiveContainer().getChildren().size()); - assertEquals(1, manager.getTaskList().getAllTasks().size()); - assertEquals(0, manager.getTaskList().getRootTasks().size()); - - manager.getTaskList().deleteTask(task); - assertEquals(0, manager.getTaskList().getAllTasks().size()); - assertEquals(0, manager.getTaskList().getRootTasks().size()); - assertEquals(0, manager.getTaskList().getArchiveContainer().getChildren().size()); - assertEquals(0, category.getChildren().size()); - } - - public void testDeleteRepositoryTask() { - String repositoryUrl = "http://somewhere.com"; - repository = new TaskRepository(MockRepositoryConnector.REPOSITORY_KIND, repositoryUrl); - TasksUiPlugin.getRepositoryManager().addRepository(repository, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - MockRepositoryTask task = new MockRepositoryTask(repositoryUrl + "-1"); - TaskList taskList = TasksUiPlugin.getTaskListManager().getTaskList(); - taskList.moveToRoot(task); - MockRepositoryQuery query = new MockRepositoryQuery("query", taskList); - MockQueryHit hit = new MockQueryHit(repositoryUrl, task.getDescription(), "1"); - hit.setCorrespondingTask(task); - query.addHit(new MockQueryHit(repositoryUrl, task.getDescription(), "1"), manager.getTaskList()); - taskList.addQuery(query); - assertEquals(1, taskList.getAllTasks().size()); - assertEquals(1, taskList.getRootTasks().size()); - taskList.deleteTask(task); - assertEquals(0, taskList.getAllTasks().size()); - assertEquals(0, taskList.getRootTasks().size()); - } - - public void testArchiveRepositoryTaskExternalization() { - MockRepositoryTask repositoryTask = new MockRepositoryTask("bug-1"); - repositoryTask.setKind("kind"); - manager.getTaskList().addTask(repositoryTask); - assertEquals(1, manager.getTaskList().getArchiveContainer().getChildren().size()); - assertEquals(0, manager.getTaskList().getRootTasks().size()); - manager.saveTaskList(); - - manager.resetTaskList(); - manager.readExistingOrCreateNewList(); - assertEquals(1, manager.getTaskList().getArchiveContainer().getChildren().size()); - assertEquals(0, manager.getTaskList().getRootTasks().size()); - } - - public void testRepositoryTasksAndCategoriesMultiRead() { - TaskCategory cat1 = new TaskCategory("Category 1", manager.getTaskList()); - manager.getTaskList().addCategory(cat1); - - MockRepositoryTask reportInCat1 = new MockRepositoryTask("task-123"); - manager.getTaskList().moveToContainer(cat1, reportInCat1); - assertEquals(cat1, reportInCat1.getContainer()); - - manager.saveTaskList(); - assertNotNull(manager.getTaskList()); - manager.resetTaskList(); - // manager.getTaskList().clear(); - // manager.setTaskList(new TaskList()); - manager.readExistingOrCreateNewList(); - - // read once - Set<AbstractTaskContainer> readCats = manager.getTaskList().getTaskContainers(); - assertTrue(manager.getTaskList().getCategories().contains(cat1)); - Iterator<AbstractTaskContainer> iterator = readCats.iterator(); - AbstractTaskContainer readCat1 = iterator.next(); - assertEquals(cat1, readCat1); - assertEquals(1, readCat1.getChildren().size()); - - manager.saveTaskList(); - assertNotNull(manager.getTaskList()); - manager.resetTaskList(); - // manager.getTaskList().clear(); - // manager.setTaskList(new TaskList()); - manager.readExistingOrCreateNewList(); - - // read again - readCats = manager.getTaskList().getTaskContainers(); - assertTrue(manager.getTaskList().getCategories().contains(cat1)); - - iterator = readCats.iterator(); - readCat1 = iterator.next(); - assertEquals(cat1, readCat1); - assertEquals(1, readCat1.getChildren().size()); - } - - public void testCreationAndExternalization() { - Set<ITask> rootTasks = new HashSet<ITask>(); - Task task1 = new Task(manager.genUniqueTaskHandle(), "task 1", true); - manager.getTaskList().moveToRoot(task1); - rootTasks.add(task1); - Task sub1 = new Task(manager.genUniqueTaskHandle(), "sub 1", true); - task1.addSubTask(sub1); - sub1.setParent(task1); - Task task2 = new Task(manager.genUniqueTaskHandle(), "task 2", true); - manager.getTaskList().moveToRoot(task2); - rootTasks.add(task2); - - Set<TaskCategory> categories = new HashSet<TaskCategory>(); - Set<ITask> cat1Contents = new HashSet<ITask>(); - TaskCategory cat1 = new TaskCategory("Category 1", manager.getTaskList()); - manager.getTaskList().addCategory(cat1); - categories.add(cat1); - Task task3 = new Task(manager.genUniqueTaskHandle(), "task 3", true); - manager.getTaskList().moveToContainer(cat1, task3); - cat1Contents.add(task3); - assertEquals(cat1, task3.getContainer()); - Task sub2 = new Task(manager.genUniqueTaskHandle(), "sub 2", true); - task3.addSubTask(sub2); - sub2.setParent(task3); - Task task4 = new Task(manager.genUniqueTaskHandle(), "task 4", true); - manager.getTaskList().moveToContainer(cat1, task4); - cat1Contents.add(task4); - - MockRepositoryTask reportInCat1 = new MockRepositoryTask("task-123"); - manager.getTaskList().moveToContainer(cat1, reportInCat1); - assertEquals(cat1, reportInCat1.getContainer()); - cat1Contents.add(reportInCat1); - - MockRepositoryTask reportInRoot = new MockRepositoryTask("task-124"); - manager.getTaskList().moveToRoot(reportInRoot); - rootTasks.add(reportInRoot); - - assertEquals("" + manager.getTaskList().getRootElements(), 5, manager.getTaskList().getRootElements().size()); - - manager.saveTaskList(); - assertNotNull(manager.getTaskList()); - manager.resetTaskList(); - // manager.getTaskList().clear(); - // TaskList list = new TaskList(); - // manager.setTaskList(list); - manager.readExistingOrCreateNewList(); - - assertNotNull(manager.getTaskList()); - assertEquals(rootTasks, manager.getTaskList().getRootTasks()); - - Set<ITask> readList = manager.getTaskList().getRootTasks(); - for (ITask task : readList) { - if (task.equals(task1)) { - assertEquals(task1.getDescription(), task.getDescription()); - assertEquals(1, task.getChildren().size()); - } - if (task.equals(reportInRoot)) { - assertEquals(reportInRoot.getDescription(), task.getDescription()); - } - } - - Set<AbstractTaskContainer> readCats = manager.getTaskList().getTaskContainers(); - assertTrue(manager.getTaskList().getCategories().contains(cat1)); - Iterator<AbstractTaskContainer> iterator = readCats.iterator(); - AbstractTaskContainer readCat1 = iterator.next(); - assertEquals(cat1, readCat1); - assertEquals(cat1Contents, readCat1.getChildren()); - } - - public void testExternalizationOfHandlesWithDash() { - Set<ITask> rootTasks = new HashSet<ITask>(); - - String handle = AbstractRepositoryTask.getHandle("http://url/repo-location", 1); - Task task1 = new Task(handle, "task 1", true); - manager.getTaskList().moveToRoot(task1); - rootTasks.add(task1); - - manager.saveTaskList(); - assertNotNull(manager.getTaskList()); - manager.resetTaskList(); - assertTrue(manager.readExistingOrCreateNewList()); - - assertNotNull(manager.getTaskList()); - assertEquals(rootTasks, manager.getTaskList().getRootTasks()); - } - - public void testScheduledRefreshJob() throws InterruptedException { - int counter = 3; - ScheduledTaskListSynchJob.resetCount(); - TasksUiPlugin.getDefault().getPreferenceStore().setValue( - TaskListPreferenceConstants.REPOSITORY_SYNCH_SCHEDULE_ENABLED, true); - TasksUiPlugin.getDefault().getPreferenceStore().setValue( - TaskListPreferenceConstants.REPOSITORY_SYNCH_SCHEDULE_MILISECONDS, 1000L); - assertEquals(0, ScheduledTaskListSynchJob.getCount()); - TaskListSynchronizationScheduler manager = new TaskListSynchronizationScheduler(false); - manager.startSynchJob(); - Thread.sleep(3000); - assertTrue(ScheduledTaskListSynchJob.getCount() + " smaller than " + counter, ScheduledTaskListSynchJob - .getCount() >= counter); - manager.cancelAll(); - TasksUiPlugin.getDefault().getPreferenceStore().setValue( - TaskListPreferenceConstants.REPOSITORY_SYNCH_SCHEDULE_ENABLED, false); - } - - public void testgetQueriesAndHitsForHandle() { - - MockQueryHit hit1 = new MockQueryHit("repositoryURL", "description1", "1"); - MockQueryHit hit2 = new MockQueryHit("repositoryURL", "description2", "2"); - MockQueryHit hit3 = new MockQueryHit("repositoryURL", "description3", "3"); - - MockQueryHit hit1twin = new MockQueryHit("repositoryURL", "description1", "1"); - MockQueryHit hit2twin = new MockQueryHit("repositoryURL", "description2", "2"); - MockQueryHit hit3twin = new MockQueryHit("repositoryURL", "description3", "3"); - - MockRepositoryQuery query1 = new MockRepositoryQuery("query1", manager.getTaskList()); - MockRepositoryQuery query2 = new MockRepositoryQuery("query2", manager.getTaskList()); - - query1.addHit(hit1, manager.getTaskList()); - query1.addHit(hit2, manager.getTaskList()); - query1.addHit(hit3, manager.getTaskList()); - assertEquals(query1.getHits().size(), 3); - - query2.addHit(hit1twin, manager.getTaskList()); - query2.addHit(hit2twin, manager.getTaskList()); - query2.addHit(hit3twin, manager.getTaskList()); - assertEquals(query2.getHits().size(), 3); - - manager.getTaskList().addQuery(query1); - manager.getTaskList().addQuery(query2); - - TaskList taskList = manager.getTaskList(); - Set<AbstractRepositoryQuery> queriesReturned = taskList.getQueriesForHandle(AbstractRepositoryTask.getHandle( - "repositoryURL", 1)); - assertNotNull(queriesReturned); - assertEquals(2, queriesReturned.size()); - assertTrue(queriesReturned.contains(query1)); - assertTrue(queriesReturned.contains(query2)); - - Set<AbstractQueryHit> hitsReturned = taskList.getQueryHitsForHandle(AbstractRepositoryTask.getHandle( - "repositoryURL", 2)); - assertNotNull(hitsReturned); - assertEquals(1, hitsReturned.size()); - assertTrue(hitsReturned.contains(hit2)); - assertTrue(hitsReturned.contains(hit2twin)); - - } - - public void testQueryHitHasParent() { - MockQueryHit hit1 = new MockQueryHit(MOCK_REPOSITORY_URL, "description1", "1"); - assertNull(hit1.getParent()); - MockRepositoryQuery query1 = new MockRepositoryQuery("query1", manager.getTaskList()); - query1.addHit(hit1, manager.getTaskList()); - assertEquals(query1, hit1.getParent()); - - } - - public void testUpdateQueryHits() { - - MockQueryHit hit1 = new MockQueryHit("repositoryURL", "description1", "1"); - MockQueryHit hit2 = new MockQueryHit("repositoryURL", "description2", "2"); - MockQueryHit hit3 = new MockQueryHit("repositoryURL", "description3", "3"); - - MockQueryHit hit1twin = new MockQueryHit("repositoryURL", "description1", "1"); - MockQueryHit hit2twin = new MockQueryHit("repositoryURL", "description2", "2"); - MockQueryHit hit3twin = new MockQueryHit("repositoryURL", "description3", "3"); - - MockRepositoryQuery query1 = new MockRepositoryQuery("query1", manager.getTaskList()); - - query1.addHit(hit1, manager.getTaskList()); - query1.addHit(hit2, manager.getTaskList()); - query1.addHit(hit3, manager.getTaskList()); - assertEquals(3, query1.getHits().size()); - List<AbstractQueryHit> newHits = new ArrayList<AbstractQueryHit>(); - query1.updateHits(newHits, manager.getTaskList()); - assertEquals(0, query1.getHits().size()); - newHits.add(hit1); - newHits.add(hit2); - query1.updateHits(newHits, manager.getTaskList()); - assertEquals(2, query1.getHits().size()); - hit1.setNotified(true); - newHits.clear(); - newHits.add(hit1twin); - newHits.add(hit2twin); - newHits.add(hit3twin); - query1.updateHits(newHits, manager.getTaskList()); - assertEquals(3, query1.getHits().size()); - assertTrue(query1.getHits().contains(hit1twin)); - assertTrue(query1.getHits().contains(hit2twin)); - assertTrue(query1.getHits().contains(hit3twin)); - for (AbstractQueryHit hit : query1.getHits()) { - if (hit.equals(hit1twin)) { - assertTrue(hit.isNotified()); - } else { - assertFalse(hit.isNotified()); - } - } - } - - public void testgetRepositoryTasks() { - - String repositoryUrl = "https://bugs.eclipse.org/bugs"; - - String bugNumber = "106939"; - - MockRepositoryTask task1 = new MockRepositoryTask(repositoryUrl + "-" + bugNumber); - manager.getTaskList().addTask(task1); - - MockRepositoryTask task2 = new MockRepositoryTask("https://unresolved-" + bugNumber); - manager.getTaskList().addTask(task2); - - TaskList taskList = manager.getTaskList(); - assertEquals(2, taskList.getAllTasks().size()); - Set<AbstractRepositoryTask> tasksReturned = taskList.getRepositoryTasks(repositoryUrl); - assertNotNull(tasksReturned); - assertEquals(1, tasksReturned.size()); - assertTrue(tasksReturned.contains(task1)); - } - - public void testAllTasksDeactivation() { - Task task1 = new Task("task1", "description1", true); - Task task2 = new Task("task2", "description2", true); - TaskList taskList = manager.getTaskList(); - taskList.addTask(task1); - taskList.addTask(task2); - assertTrue(taskList.getActiveTasks().isEmpty()); - - manager.activateTask(task2); - assertEquals(Collections.singletonList(task2), taskList.getActiveTasks()); - - manager.deactivateAllTasks(); - assertTrue(taskList.getActiveTasks().isEmpty()); - } - -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskListUiTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskListUiTest.java deleted file mode 100644 index bdb8feca3..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskListUiTest.java +++ /dev/null @@ -1,300 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests; - -import java.util.ArrayList; -import java.util.List; - -import junit.framework.TestCase; - -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.mylar.internal.tasks.core.WebTask; -import org.eclipse.mylar.internal.tasks.ui.TaskPriorityFilter; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.internal.tasks.ui.actions.MarkTaskCompleteAction; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskListChangeListener; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.mylar.tasks.core.Task; -import org.eclipse.mylar.tasks.core.TaskCategory; -import org.eclipse.mylar.tasks.ui.TaskListManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.widgets.TreeItem; -import org.eclipse.ui.PartInitException; - -/** - * Tests TaskListView's filtering mechanism. - * - * @author Ken Sueda - * - */ -public class TaskListUiTest extends TestCase { - - private TaskCategory cat1 = null; - - private Task cat1task1 = null; - - private Task cat1task2 = null; - - private Task cat1task3 = null; - - private Task cat1task4 = null; - - private Task cat1task5 = null; - - private Task cat1task1sub1 = null; - - private TaskCategory cat2 = null; - - private Task cat2task1 = null; - - private Task cat2task2 = null; - - private Task cat2task3 = null; - - private Task cat2task4 = null; - - private Task cat2task5 = null; - - private Task cat2task1sub1 = null; - - private final static int CHECK_COMPLETE_FILTER = 1; - - private final static int CHECK_INCOMPLETE_FILTER = 2; - - private final static int CHECK_PRIORITY_FILTER = 3; - - public void setUp() throws PartInitException { - try { - TasksUiPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().showView( - "org.eclipse.mylar.tasks.ui.views.TaskListView"); - TaskListManager manager = TasksUiPlugin.getTaskListManager(); - cat1 = new TaskCategory("First Category", manager.getTaskList()); - - cat1task1 = new Task(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), "task 1", true); - cat1task1.setPriority(Task.PriorityLevel.P1.toString()); - cat1task1.setCompleted(true); - cat1task1.setContainer(cat1); - manager.getTaskList().moveToContainer(cat1, cat1task1); - - cat1task1sub1 = new Task(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), "sub task 1", true); - cat1task1sub1.setPriority(Task.PriorityLevel.P1.toString()); - cat1task1sub1.setCompleted(true); - cat1task1sub1.setParent(cat1task1); - cat1task1.addSubTask(cat1task1sub1); - - cat1task2 = new Task(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), "task 2", true); - cat1task2.setPriority(Task.PriorityLevel.P2.toString()); - cat1task2.setContainer(cat1); - manager.getTaskList().moveToContainer(cat1, cat1task2); - - cat1task3 = new Task(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), "task 3", true); - cat1task3.setPriority(Task.PriorityLevel.P3.toString()); - cat1task3.setCompleted(true); - cat1task3.setContainer(cat1); - manager.getTaskList().moveToContainer(cat1, cat1task3); - - cat1task4 = new Task(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), "task 4", true); - cat1task4.setPriority(Task.PriorityLevel.P4.toString()); - cat1task4.setContainer(cat1); - manager.getTaskList().moveToContainer(cat1, cat1task4); - - cat1task5 = new Task(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), "task 5", true); - cat1task5.setPriority(Task.PriorityLevel.P5.toString()); - cat1task5.setCompleted(true); - cat1task5.setContainer(cat1); - manager.getTaskList().moveToContainer(cat1, cat1task5); - - manager.getTaskList().addCategory(cat1); - assertEquals(cat1.getChildren().size(), 5); - - cat2 = new TaskCategory("Second Category", manager.getTaskList()); - - cat2task1 = new Task(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), "task 1", true); - cat2task1.setPriority(Task.PriorityLevel.P1.toString()); - cat2task1.setContainer(cat2); - manager.getTaskList().moveToContainer(cat2, cat2task1); - - cat2task1sub1 = new Task(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), "sub task 1", true); - cat2task1sub1.setPriority(Task.PriorityLevel.P1.toString()); - cat2task1sub1.setParent(cat2task1); - cat2task1.addSubTask(cat2task1sub1); - - cat2task2 = new Task(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), "task 2", true); - cat2task2.setPriority(Task.PriorityLevel.P2.toString()); - cat2task2.setCompleted(true); - cat2task2.setContainer(cat2); - manager.getTaskList().moveToContainer(cat2, cat2task2); - - cat2task3 = new Task(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), "task 3", true); - cat2task3.setPriority(Task.PriorityLevel.P3.toString()); - cat2task3.setContainer(cat2); - manager.getTaskList().moveToContainer(cat2, cat2task3); - - cat2task4 = new Task(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), "task 4", true); - cat2task4.setPriority(Task.PriorityLevel.P4.toString()); - cat2task4.setCompleted(true); - cat2task4.setContainer(cat2); - manager.getTaskList().moveToContainer(cat2, cat2task4); - - cat2task5 = new Task(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), "task 5", true); - cat2task5.setPriority(Task.PriorityLevel.P5.toString()); - cat2task5.setContainer(cat2); - manager.getTaskList().moveToContainer(cat2, cat2task5); - - manager.getTaskList().addCategory(cat2); - manager.saveTaskList(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public void tearDown() { - // clear everything - } - - public void testMarkWebTaskCompleted() { - TaskListView view = TaskListView.getFromActivePerspective(); - assertNotNull(view); - WebTask webTask = new WebTask("1", "1", "", "", "web"); - TasksUiPlugin.getTaskListManager().getTaskList().addTask(webTask, - TasksUiPlugin.getTaskListManager().getTaskList().getRootCategory()); - view.getViewer().refresh(); - // Arrays.asList(view.getViewer().getVisibleExpandedElements()); - assertFalse(webTask.isCompleted()); - ArrayList<ITaskListElement> tasks = new ArrayList<ITaskListElement>(); - tasks.add(webTask); - new MarkTaskCompleteAction(tasks).run(); - assertTrue(webTask.isCompleted()); - } - - public void testUiFilter() { - try { - assertNotNull(TaskListView.getFromActivePerspective()); - TreeViewer viewer = TaskListView.getFromActivePerspective().getViewer(); - TaskListView.getFromActivePerspective().addFilter( - TaskListView.getFromActivePerspective().getCompleteFilter()); - viewer.refresh(); - viewer.expandAll(); - TreeItem[] items = viewer.getTree().getItems(); - assertTrue(checkFilter(CHECK_COMPLETE_FILTER, items)); - TaskListView.getFromActivePerspective().removeFilter( - TaskListView.getFromActivePerspective().getCompleteFilter()); - - TaskPriorityFilter filter = (TaskPriorityFilter) TaskListView.getFromActivePerspective() - .getPriorityFilter(); - filter.displayPrioritiesAbove("P2"); - TaskListView.getFromActivePerspective().addFilter(filter); - viewer.refresh(); - viewer.expandAll(); - items = viewer.getTree().getItems(); - - // check priority tasks - assertTrue(checkFilter(CHECK_PRIORITY_FILTER, items)); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * Tests that TaskEditors remove all listeners when closed - */ - public void testListenersRemoved() { - - int numListenersBefore = 0; - int numListenersDuring = 0; - int numListenersAfter = 0; - - TaskListManager manager = TasksUiPlugin.getTaskListManager(); - List<ITaskListChangeListener> listeners = manager.getTaskList().getChangeListeners(); - numListenersBefore = listeners.size(); - - // open a task in editor - // cat1task1.setForceSyncOpen(true); - TaskUiUtil.openEditor(cat1task1, false, true); - // cat1task1.openTaskInEditor(false); - // cat1task2.setForceSyncOpen(true); - // cat1task2.openTaskInEditor(false); - TaskUiUtil.openEditor(cat1task2, false, true); - - listeners = manager.getTaskList().getChangeListeners(); - numListenersDuring = listeners.size(); - - assertEquals(numListenersDuring, numListenersBefore + 2); - - TasksUiPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().closeAllEditors(false); - - listeners = manager.getTaskList().getChangeListeners(); - numListenersAfter = listeners.size(); - assertEquals(numListenersBefore, numListenersAfter); - - } - - public boolean checkFilter(int type, TreeItem[] items) { - switch (type) { - case CHECK_COMPLETE_FILTER: - return checkCompleteIncompleteFilter(items, false); - case CHECK_INCOMPLETE_FILTER: - return checkCompleteIncompleteFilter(items, true); - case CHECK_PRIORITY_FILTER: - return checkPriorityFilter(items); - default: - return false; - } - } - - public boolean checkCompleteIncompleteFilter(TreeItem[] items, boolean checkComplete) { - assertEquals(2, items.length); - int count = 0; - for (int i = 0; i < items.length; i++) { - assertTrue(items[i].getData() instanceof TaskCategory); - TreeItem[] sub = items[i].getItems(); - for (int j = 0; j < sub.length; j++) { - assertTrue(sub[j].getData() instanceof ITask); - ITask task = (ITask) sub[j].getData(); - if (checkComplete) { - assertTrue(task.isCompleted()); - } else { - assertFalse(task.isCompleted()); - } - count++; - } - } - assertTrue(count == 5); - return true; - } - - public boolean checkPriorityFilter(TreeItem[] items) { - assertTrue(items.length == 2); - int p2Count = 0; - int p1Count = 0; - for (int i = 0; i < items.length; i++) { - assertTrue(items[i].getData() instanceof TaskCategory); - TreeItem[] sub = items[i].getItems(); - for (int j = 0; j < sub.length; j++) { - assertTrue(sub[j].getData() instanceof ITask); - ITask task = (ITask) sub[j].getData(); - assertTrue(task.getPriority().equals("P2") || task.getPriority().equals("P1")); - if (task.getPriority().equals("P2")) { - p2Count++; - } else { - p1Count++; - } - } - } - assertEquals(2, p1Count); - assertEquals(2, p2Count); - return true; - } - -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskPlanningEditorTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskPlanningEditorTest.java deleted file mode 100644 index 8e67fa1b3..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskPlanningEditorTest.java +++ /dev/null @@ -1,120 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests; - -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.internal.tasks.ui.editors.MylarTaskEditor; -import org.eclipse.mylar.internal.tasks.ui.editors.TaskPlanningEditor; -import org.eclipse.mylar.tasks.core.Task; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.PlatformUI; - -import junit.framework.TestCase; - -/** - * @author Rob Elves - */ -public class TaskPlanningEditorTest extends TestCase { - - private static final String MOCK_LABEL = "label"; - - private static final String MOCK_HANDLE = "handle"; - - private static final String DESCRIPTION = "description"; - - private static final String NEW_DESCRIPTION = "new description"; - - @Override - protected void setUp() throws Exception { - super.setUp(); - } - - @Override - protected void tearDown() throws Exception { - PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().closeAllEditors(false); - TasksUiPlugin.getRepositoryManager().clearRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - TasksUiPlugin.getTaskListManager().resetTaskList(); - TasksUiPlugin.getDefault().getTaskListSaveManager().saveTaskList(true); - super.tearDown(); - } - - - public void testDirtyOnEdit() { - Task task = new Task(MOCK_HANDLE, MOCK_LABEL, true); - task.setDescription(DESCRIPTION); - TasksUiPlugin.getTaskListManager().getTaskList().addTask(task); - TaskUiUtil.openEditor(task, false, true); - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - assertTrue(page.getActiveEditor() instanceof MylarTaskEditor); - MylarTaskEditor taskEditor = (MylarTaskEditor) page.getActiveEditor(); - assertTrue(taskEditor.getActivePageInstance() instanceof TaskPlanningEditor); - TaskPlanningEditor editor = (TaskPlanningEditor) taskEditor.getActivePageInstance(); - assertFalse(editor.isDirty()); - editor.setNotes("notes"); - assertTrue(editor.isDirty()); - editor.doSave(new NullProgressMonitor()); - assertFalse(editor.isDirty()); - editor.setDescription(NEW_DESCRIPTION); - assertTrue(editor.isDirty()); - editor.doSave(new NullProgressMonitor()); - assertEquals(NEW_DESCRIPTION, task.getDescription()); - assertFalse(editor.isDirty()); - } - - public void testNotDirtyOnRename() { - Task task = new Task(MOCK_HANDLE, MOCK_LABEL, true); - task.setDescription(DESCRIPTION); - TasksUiPlugin.getTaskListManager().getTaskList().addTask(task); - TaskUiUtil.openEditor(task, false, true); - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - assertTrue(page.getActiveEditor() instanceof MylarTaskEditor); - MylarTaskEditor taskEditor = (MylarTaskEditor) page.getActiveEditor(); - assertTrue(taskEditor.getActivePageInstance() instanceof TaskPlanningEditor); - TaskPlanningEditor editor = (TaskPlanningEditor) taskEditor.getActivePageInstance(); - assertFalse(editor.isDirty()); - assertEquals(DESCRIPTION, editor.getDescription()); - TasksUiPlugin.getTaskListManager().getTaskList().renameTask(task, NEW_DESCRIPTION); - assertEquals(NEW_DESCRIPTION, task.getDescription()); - editor.updateTaskData(task); - assertEquals(NEW_DESCRIPTION, editor.getFormTitle()); - assertEquals(NEW_DESCRIPTION, editor.getDescription()); - assertFalse(editor.isDirty()); - } - - /** - * Test that if editor is dirty and external rename happens - * editor remains dirty - */ - public void testRenameInDirtyState() { - Task task = new Task(MOCK_HANDLE, MOCK_LABEL, true); - task.setDescription(DESCRIPTION); - TasksUiPlugin.getTaskListManager().getTaskList().addTask(task); - TaskUiUtil.openEditor(task, false, true); - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - assertTrue(page.getActiveEditor() instanceof MylarTaskEditor); - MylarTaskEditor taskEditor = (MylarTaskEditor) page.getActiveEditor(); - assertTrue(taskEditor.getActivePageInstance() instanceof TaskPlanningEditor); - TaskPlanningEditor editor = (TaskPlanningEditor) taskEditor.getActivePageInstance(); - assertFalse(editor.isDirty()); - editor.setDescription(NEW_DESCRIPTION); - assertTrue(editor.isDirty()); - TasksUiPlugin.getTaskListManager().getTaskList().renameTask(task, NEW_DESCRIPTION+"2"); - assertEquals(NEW_DESCRIPTION+"2", task.getDescription()); - editor.updateTaskData(task); - assertEquals(NEW_DESCRIPTION+"2", editor.getFormTitle()); - assertEquals(NEW_DESCRIPTION+"2", editor.getDescription()); - assertTrue(editor.isDirty()); - } - -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskRepositoriesExternalizerTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskRepositoriesExternalizerTest.java deleted file mode 100644 index eb47c4dc1..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskRepositoriesExternalizerTest.java +++ /dev/null @@ -1,90 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests; - -import java.io.File; -import java.util.HashSet; -import java.util.Set; - -import junit.framework.TestCase; - -import org.eclipse.mylar.internal.tasks.core.TaskRepositoriesExternalizer; -import org.eclipse.mylar.tasks.core.TaskRepository; - -/** - * @author Rob Elves - */ -public class TaskRepositoriesExternalizerTest extends TestCase { - - private Set<TaskRepository> taskRepositories = new HashSet<TaskRepository>(); - - private static final String REP_TYPE = "bugzilla"; - - private static final String REPURL1 = "http://somewhere1"; - private static final String REPURL2 = "http://somewhere2"; - - private static final String TIMEZONE = "test time zone"; - private static final String VERSION = "test version"; - private static final String ENCODING = "test encoding"; - private static final String TIMESTAMP = "test time stamp"; - - private static final String SUFFIX = "2"; - - private TaskRepository repository1; - private TaskRepository repository2; - - protected void setUp() throws Exception { - repository1 = new TaskRepository(REP_TYPE, REPURL1); - repository2 = new TaskRepository("bugzilla", REPURL2); - - repository1.setTimeZoneId(TIMEZONE); - repository1.setVersion(VERSION); - repository1.setCharacterEncoding(ENCODING); - repository1.setSyncTimeStamp(TIMESTAMP); - taskRepositories.add(repository1); - - repository2.setTimeZoneId(TIMEZONE + SUFFIX); - repository2.setVersion(VERSION+ SUFFIX); - repository2.setCharacterEncoding(ENCODING+ SUFFIX); - repository2.setSyncTimeStamp(TIMESTAMP+ SUFFIX); - taskRepositories.add(repository2); - } - - public void testExternalization() { - TaskRepositoriesExternalizer externalizer = new TaskRepositoriesExternalizer(); - String path = "repositories.xml"; - File file = new File(path); - file.deleteOnExit(); - externalizer.writeRepositoriesToXML(taskRepositories, file); - taskRepositories.clear(); - assertEquals(0, taskRepositories.size()); - taskRepositories = externalizer.readRepositoriesFromXML(file); - assertEquals(2, taskRepositories.size()); - taskRepositories.contains(repository1); - taskRepositories.contains(repository2); - for (TaskRepository repository: taskRepositories) { - if(repository.getUrl().equals(REPURL1)) { - assertEquals(TIMEZONE, repository.getTimeZoneId()); - assertEquals(VERSION, repository.getVersion()); - assertEquals(ENCODING, repository.getCharacterEncoding()); - assertEquals(TIMESTAMP, repository.getSyncTimeStamp()); - } else if(repository.getUrl().equals(REPURL2)) { - assertEquals(TIMEZONE+ SUFFIX, repository.getTimeZoneId()); - assertEquals(VERSION+ SUFFIX, repository.getVersion()); - assertEquals(ENCODING+ SUFFIX, repository.getCharacterEncoding()); - assertEquals(TIMESTAMP+ SUFFIX, repository.getSyncTimeStamp()); - } - } - - } - -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskRepositoryManagerTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskRepositoryManagerTest.java deleted file mode 100644 index b71562cfa..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskRepositoryManagerTest.java +++ /dev/null @@ -1,202 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests; - -import java.net.MalformedURLException; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -import junit.framework.TestCase; - -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.TaskRepositoryManager; -import org.eclipse.mylar.tasks.tests.connector.MockRepositoryConnector; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Mik Kersten - * @author Rob Elves - */ -public class TaskRepositoryManagerTest extends TestCase { - - private static final String DEFAULT_KIND = MockRepositoryConnector.REPOSITORY_KIND; - - private static final String DEFAULT_URL = "http://eclipse.org"; - - private static final String ANOTHER_URL = "http://codehaus.org"; - - private TaskRepositoryManager manager; - - @Override - protected void setUp() throws Exception { - super.setUp(); - manager = TasksUiPlugin.getRepositoryManager(); - assertNotNull(manager); - manager.clearRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - } - - @Override - protected void tearDown() throws Exception { - super.tearDown(); - if (manager != null) { - manager.clearRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - } - } - - public void testHandles() { - String url = "http://foo.bar"; - String id = "123"; - String handle = AbstractRepositoryTask.getHandle(url, id); - assertEquals(url, AbstractRepositoryTask.getRepositoryUrl(handle)); - assertEquals(id, AbstractRepositoryTask.getTaskId(handle)); -// assertEquals(123, AbstractRepositoryTask.getTaskIdAsInt(handle)); - } - - public void testMultipleNotAdded() throws MalformedURLException { - TaskRepository repository = new TaskRepository(DEFAULT_KIND, DEFAULT_URL); - manager.addRepository(repository, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - TaskRepository repository2 = new TaskRepository(DEFAULT_KIND, DEFAULT_URL); - manager.addRepository(repository2, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - assertEquals(1, manager.getAllRepositories().size()); - } - - public void testGet() throws MalformedURLException { - assertEquals("", TasksUiPlugin.getDefault().getPreferenceStore().getString(TaskRepositoryManager.PREF_REPOSITORIES)); - - TaskRepository repository = new TaskRepository(DEFAULT_KIND, DEFAULT_URL); - manager.addRepository(repository, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - assertEquals(repository, manager.getRepository(DEFAULT_KIND, DEFAULT_URL)); - assertNull(manager.getRepository(DEFAULT_KIND, "foo")); - assertNull(manager.getRepository("foo", DEFAULT_URL)); - } - - public void testConnectorAddition() { - AbstractRepositoryConnector connector = new MockRepositoryConnector(); - manager.addRepositoryConnector(connector); - assertNotNull(manager.getRepositoryConnector(connector.getRepositoryType())); - } - - public void testRepositoryPersistance() throws MalformedURLException { - // assertEquals("", - // MylarTaskListPlugin.getMylarCorePrefs().getString(TaskRepositoryManager.PREF_REPOSITORIES)); - - TaskRepository repository1 = new TaskRepository("bugzilla", "http://bugzilla"); - TaskRepository repository2 = new TaskRepository("jira", "http://jira"); - manager.addRepository(repository1, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - manager.addRepository(repository2, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - - // assertNotNull(MylarTaskListPlugin.getMylarCorePrefs().getString(TaskRepositoryManager.PREF_REPOSITORIES)); - - List<TaskRepository> repositoryList = new ArrayList<TaskRepository>(); - repositoryList.add(repository2); - repositoryList.add(repository1); - manager.readRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - - // NOTE: different conditions for running with and without the JIRA - // Connector - if (manager.getRepositoryConnectors().size() > 1) { - assertTrue(manager.getAllRepositories().contains(repository1)); - assertTrue(manager.getAllRepositories().contains(repository2)); - // assertEquals(repositoryList, manager.getAllRepositories()); - } else { - // TODO there is something wrong with this - assertEquals("all: " + manager.getAllRepositories(), 1, manager.getAllRepositories().size()); - } - } - - public void testRepositoryAttributePersistance() throws MalformedURLException { - assertEquals("", TasksUiPlugin.getDefault().getPreferenceStore().getString(TaskRepositoryManager.PREF_REPOSITORIES)); - - String version = "123"; - String encoding = "UTF-16"; - String fakeTimeZone = "nowhere"; - Date now = new Date(); - String dateString = now.toString(); - - TaskRepository repository1 = new TaskRepository("bugzilla", "http://bugzilla"); - repository1.setVersion(version); - repository1.setCharacterEncoding(encoding); - repository1.setTimeZoneId(fakeTimeZone); - repository1.setSyncTimeStamp(dateString); - manager.addRepository(repository1, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - - manager.readRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - TaskRepository temp = manager.getRepository(repository1.getKind(), repository1.getUrl()); - assertNotNull(temp); - assertEquals(version, temp.getVersion()); - assertEquals(encoding, temp.getCharacterEncoding()); - assertEquals(fakeTimeZone, temp.getTimeZoneId()); - assertEquals(dateString, temp.getSyncTimeStamp()); - - } - - public void testRepositoryPersistanceAfterDelete() throws MalformedURLException { - - TaskRepository repository = new TaskRepository(DEFAULT_KIND, DEFAULT_URL); - manager.addRepository(repository, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - assertNotNull(manager.getRepository(repository.getKind(), repository.getUrl())); - - TaskRepository repository2 = new TaskRepository(DEFAULT_KIND, ANOTHER_URL); - manager.addRepository(repository2, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - assertNotNull(manager.getRepository(repository2.getKind(), repository2.getUrl())); - - manager.removeRepository(repository2, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - - assertNull(manager.getRepository(repository2.getKind(), repository2.getUrl())); - } - - public void testRepositoryWithUnnownUrlHandler() { - TaskRepository repository = new TaskRepository("eclipse.technology.mylar", - "nntp://news.eclipse.org/eclipse.technology.mylar"); - - repository.setAuthenticationCredentials("testUser", "testPassword"); - - assertEquals("testUser", repository.getUserName()); - assertEquals("testPassword", repository.getPassword()); - } - - public void testRepositoryWithCustomAttributes() throws Exception { - - // Note: if a connector doesn't exist the associated repositories are not loaded (orphaned) - // causing this test to fail. - AbstractRepositoryConnector connector = new MockRepositoryConnector(); - manager.addRepositoryConnector(connector); - - TaskRepository repository = new TaskRepository(MockRepositoryConnector.REPOSITORY_KIND, "http://jroller.com/page/eu"); - repository.setProperty("owner", "euxx"); - manager.addRepository(repository, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - - manager.readRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - - TaskRepository temp = manager.getRepository(repository.getKind(), repository.getUrl()); - assertNotNull(temp); - assertEquals("euxx", temp.getProperty("owner")); - } - - public void testRepositoryPersistanceSameUrl() throws MalformedURLException { - TaskRepository repository1 = new TaskRepository("bugzilla", "http://repository"); - TaskRepository repository2 = new TaskRepository("jira", "http://repository"); - manager.addRepository(repository1, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - manager.addRepository(repository2, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - assertEquals(2, manager.getAllRepositories().size()); - - List<TaskRepository> repositoryList = new ArrayList<TaskRepository>(); - repositoryList.add(repository2); - repositoryList.add(repository1); - manager.readRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - - assertEquals(1, manager.getAllRepositories().size()); - } -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskTest.java deleted file mode 100644 index 3777affc4..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskTest.java +++ /dev/null @@ -1,48 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests; - -import junit.framework.TestCase; - -import org.eclipse.mylar.tasks.core.Task; - -/** - * @author Mik Kersten - */ -public class TaskTest extends TestCase { - - protected void setUp() throws Exception { - super.setUp(); - } - - protected void tearDown() throws Exception { - super.tearDown(); - } - - public void testUrl() { - Task task = new Task("handle", "label", true); - task.setUrl("http://eclipse.org/mylar/doc.php"); - assertTrue(task.hasValidUrl()); - - task.setUrl("http://"); - assertFalse(task.hasValidUrl()); - - task.setUrl("https://"); - assertFalse(task.hasValidUrl()); - - task.setUrl(""); - assertFalse(task.hasValidUrl()); - - task.setUrl(null); - assertFalse(task.hasValidUrl()); - } -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/UrlConnectionUtilTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/UrlConnectionUtilTest.java deleted file mode 100644 index df86e73ad..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/UrlConnectionUtilTest.java +++ /dev/null @@ -1,34 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests; - -import junit.framework.TestCase; - -import org.eclipse.mylar.internal.tasks.core.WebClientUtil; - -public class UrlConnectionUtilTest extends TestCase { - - public void testUrlParsers() { - String url = "https://example.com:444/folder/file.txt"; - assertEquals(444, WebClientUtil.getPort(url)); - assertEquals("example.com", WebClientUtil.getDomain(url)); - assertEquals("/folder/file.txt", WebClientUtil.getRequestPath(url)); - - url = "http://example.com/"; - assertEquals(80, WebClientUtil.getPort(url)); - assertEquals("example.com", WebClientUtil.getDomain(url)); - assertEquals("/", WebClientUtil.getRequestPath(url)); - - url = "https://example.com:321"; - assertEquals(321, WebClientUtil.getPort(url)); - assertEquals("example.com", WebClientUtil.getDomain(url)); - assertEquals("", WebClientUtil.getRequestPath(url)); - } - -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockAttributeFactory.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockAttributeFactory.java deleted file mode 100644 index 831ac5dd0..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockAttributeFactory.java +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests.connector; - -import org.eclipse.mylar.tasks.core.AbstractAttributeFactory; - - - -/** - * @author Rob Elves - */ -public class MockAttributeFactory extends AbstractAttributeFactory { - - private static final long serialVersionUID = 7713746838934802731L; - - @Override - public boolean getIsHidden(String key) { - // ignore - return false; - } - - @Override - public String getName(String key) { - // ignore - return key; - } - - @Override - public boolean isReadOnly(String key) { - // ignore - return false; - } - - @Override - public String mapCommonAttributeKey(String key) { - return key; - } - -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockQueryHit.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockQueryHit.java deleted file mode 100644 index e5283b3c8..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockQueryHit.java +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests.connector; - -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; - -/** - * @author Rob Elves - */ -public class MockQueryHit extends AbstractQueryHit { - - AbstractRepositoryTask task = null; - - public MockQueryHit(String repositoryUrl, String description, String id) { - super(repositoryUrl, description, id); - } - - @Override - public AbstractRepositoryTask getCorrespondingTask() { - return task; - } - - @Override - public AbstractRepositoryTask getOrCreateCorrespondingTask() { - return task; - } - - @Override - public boolean isCompleted() { - return task.isCompleted(); - } - - @Override - public void setCorrespondingTask(AbstractRepositoryTask task) { - this.task = task; - } - -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryConnector.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryConnector.java deleted file mode 100644 index 8e04d95a4..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryConnector.java +++ /dev/null @@ -1,104 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests.connector; - -import java.net.Proxy; -import java.util.List; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.IAttachmentHandler; -import org.eclipse.mylar.tasks.core.IOfflineTaskHandler; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.QueryHitCollector; -import org.eclipse.mylar.tasks.core.TaskRepository; - -/** - * @author Mik Kersten - * @author Rob Elves - */ -public class MockRepositoryConnector extends AbstractRepositoryConnector { - - public static final String REPOSITORY_KIND = "mock"; - - @Override - public boolean canCreateNewTask(TaskRepository repository) { - // ignore - return false; - } - - @Override - public boolean canCreateTaskFromKey(TaskRepository repository) { - // ignore - return false; - } - - @Override - public ITask createTaskFromExistingKey(TaskRepository repository, String id, Proxy proxySettings) throws CoreException { - // ignore - return null; - } - - @Override - public IAttachmentHandler getAttachmentHandler() { - // ignore - return null; - } - - @Override - public String getLabel() { - return "Mock Repository (for unit tests)"; - } - - @Override - public IOfflineTaskHandler getOfflineTaskHandler() { - // ignore - return null; - } - - @Override - public String getRepositoryType() { - return REPOSITORY_KIND; - } - - @Override - public String getRepositoryUrlFromTaskUrl(String url) { - // ignore - return null; - } - - @Override - public List<String> getSupportedVersions() { - // ignore - return null; - } - - @Override - public void updateAttributes(TaskRepository repository, Proxy proxySettings, IProgressMonitor monitor) throws CoreException { - // ignore - } - - @Override - public void updateTaskState(AbstractRepositoryTask repositoryTask) { - // ignore - } - - @Override - public IStatus performQuery(AbstractRepositoryQuery query, TaskRepository repository, Proxy proxySettings, IProgressMonitor monitor, QueryHitCollector resultCollector) { - return null; - } - -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryExternalizer.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryExternalizer.java deleted file mode 100644 index abcc319a5..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryExternalizer.java +++ /dev/null @@ -1,60 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests.connector; - -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.DelegatingTaskExternalizer; -import org.eclipse.mylar.tasks.core.ITask; -import org.w3c.dom.Node; - -/** - * @author Mik Kersten - */ -public class MockRepositoryExternalizer extends DelegatingTaskExternalizer { - - @Override - public boolean canCreateElementFor(AbstractRepositoryQuery query) { - return query instanceof MockRepositoryQuery; - } - - @Override - public boolean canCreateElementFor(ITask task) { - return task instanceof MockRepositoryTask; - } - - @Override - public boolean canCreateElementFor(AbstractQueryHit queryHit) { - return false; - } - - @Override - public boolean canReadCategory(Node node) { - return false; - } - - @Override - public boolean canReadQuery(Node node) { - return false; - } - - @Override - public boolean canReadQueryHit(Node node) { - return false; - } - - @Override - public boolean canReadTask(Node node) { - return false; - } - -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryTask.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryTask.java deleted file mode 100644 index 4378e8e1a..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryTask.java +++ /dev/null @@ -1,44 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests.connector; - -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; - -/** - * @author Mik Kersten - */ -public class MockRepositoryTask extends AbstractRepositoryTask { - - private String ownerId; - - public MockRepositoryTask(String handle) { - super(handle, "label for " + handle, true); - } - - @Override - public String getRepositoryKind() { - return "mock"; - } - - public void setOwner(String ownerId) { - this.ownerId = ownerId; - } - - public String getOwner() { - if(ownerId == null) { - return super.getOwner(); - } else { - return ownerId; - } - } - -} diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryUi.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryUi.java deleted file mode 100644 index bf9c0c0db..000000000 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryUi.java +++ /dev/null @@ -1,56 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.tasks.tests.connector; - -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.IWizard; -import org.eclipse.mylar.internal.tasks.ui.wizards.AbstractRepositorySettingsPage; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.AbstractRepositoryConnectorUi; - -/** - * @author Mik Kersten - */ -public class MockRepositoryUi extends AbstractRepositoryConnectorUi { - - @Override - public IWizard getNewTaskWizard(TaskRepository taskRepository, IStructuredSelection selection) { - // ignore - return null; - } - - @Override - public String getRepositoryType() { - return "mock"; - } - - @Override - public AbstractRepositorySettingsPage getSettingsPage() { - // ignore - return null; - } - - @Override - public boolean hasRichEditor() { - // ignore - return false; - } - - @Override - public boolean hasSearchPage() { - return false; - } - - @Override - public IWizard getQueryWizard(TaskRepository repository, AbstractRepositoryQuery query) { - // ignore - return null; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.mylyn.tasks.ui/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 12b2c1a0d..000000000 --- a/org.eclipse.mylyn.tasks.ui/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,303 +0,0 @@ -#Mon Feb 13 11:20:15 PST 2006 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.5 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.autoboxing=ignore -org.eclipse.jdt.core.compiler.problem.deprecation=warning -org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled -org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled -org.eclipse.jdt.core.compiler.problem.discouragedReference=warning -org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore -org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning -org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning -org.eclipse.jdt.core.compiler.problem.forbiddenReference=error -org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning -org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning -org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore -org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore -org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore -org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning -org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning -org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning -org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore -org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning -org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore -org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled -org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning -org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled -org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore -org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning -org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning -org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning -org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore -org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore -org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled -org.eclipse.jdt.core.compiler.problem.unusedImport=warning -org.eclipse.jdt.core.compiler.problem.unusedLocal=warning -org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled -org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning -org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.5 -org.eclipse.jdt.core.formatter.align_type_members_on_columns=false -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_assignment=0 -org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 -org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 -org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 -org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 -org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_after_package=1 -org.eclipse.jdt.core.formatter.blank_lines_before_field=1 -org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 -org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 -org.eclipse.jdt.core.formatter.blank_lines_before_method=1 -org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 -org.eclipse.jdt.core.formatter.blank_lines_before_package=0 -org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 -org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.comment.clear_blank_lines=false -org.eclipse.jdt.core.formatter.comment.format_comments=true -org.eclipse.jdt.core.formatter.comment.format_header=false -org.eclipse.jdt.core.formatter.comment.format_html=true -org.eclipse.jdt.core.formatter.comment.format_source_code=true -org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true -org.eclipse.jdt.core.formatter.comment.indent_root_tags=true -org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert -org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert -org.eclipse.jdt.core.formatter.comment.line_length=80 -org.eclipse.jdt.core.formatter.compact_else_if=true -org.eclipse.jdt.core.formatter.continuation_indentation=2 -org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 -org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true -org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_empty_lines=false -org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true -org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false -org.eclipse.jdt.core.formatter.indentation.size=4 -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert -org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false -org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false -org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false -org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false -org.eclipse.jdt.core.formatter.lineSplit=120 -org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 -org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 -org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true -org.eclipse.jdt.core.formatter.tabulation.char=tab -org.eclipse.jdt.core.formatter.tabulation.size=4 -org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false diff --git a/org.eclipse.mylyn.tasks.ui/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.mylyn.tasks.ui/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index 7f90fdfc1..000000000 --- a/org.eclipse.mylyn.tasks.ui/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,5 +0,0 @@ -#Thu Sep 14 09:00:04 PDT 2006 -eclipse.preferences.version=1 -formatter_profile=_Mylar based on Eclipse [built-in] -formatter_settings_version=10 -org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\r\n * @return the ${bare_field_name}\r\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\r\n * @param ${param} the ${bare_field_name} to set\r\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/**\r\n * \r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author ${user}\r\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\r\n * \r\n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"></template><template autoinsert\="false" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">/*******************************************************************************\r\n * Copyright (c) 2004 - 2006 Mylar committers and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n *******************************************************************************/\r\n\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\r\n${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\r\n * ${tags}\r\n * ${see_to_target}\r\n */</template></templates> diff --git a/org.eclipse.mylyn.tasks.ui/META-INF/MANIFEST.MF b/org.eclipse.mylyn.tasks.ui/META-INF/MANIFEST.MF deleted file mode 100644 index e340dc347..000000000 --- a/org.eclipse.mylyn.tasks.ui/META-INF/MANIFEST.MF +++ /dev/null @@ -1,35 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Mylar Tasks UI Plug-in -Bundle-SymbolicName: org.eclipse.mylar.tasks.ui;singleton:=true -Bundle-Version: 0.7.0 -Bundle-Activator: org.eclipse.mylar.tasks.ui.TasksUiPlugin -Bundle-Localization: plugin -Require-Bundle: org.eclipse.ui, - org.eclipse.core.runtime, - org.eclipse.ui.forms, - org.eclipse.jface.text, - org.eclipse.mylar.context.core, - org.eclipse.update.core, - org.eclipse.ui.browser, - org.eclipse.ui.editors, - org.eclipse.ui.views, - org.eclipse.ui.workbench.texteditor, - org.eclipse.mylar.tasks.core, - org.eclipse.mylar.monitor, - org.eclipse.core.resources, - org.eclipse.ui.ide, - org.eclipse.search -Eclipse-AutoStart: true -Bundle-Vendor: Eclipse.org -Export-Package: org.eclipse.mylar.internal.tasks.ui, - org.eclipse.mylar.internal.tasks.ui.search, - org.eclipse.mylar.internal.tasks.ui.actions, - org.eclipse.mylar.internal.tasks.ui.editors, - org.eclipse.mylar.internal.tasks.ui.planner, - org.eclipse.mylar.internal.tasks.ui.preferences, - org.eclipse.mylar.internal.tasks.ui.util, - org.eclipse.mylar.internal.tasks.ui.views, - org.eclipse.mylar.internal.tasks.ui.wizards, - org.eclipse.mylar.tasks.ui -Bundle-RequiredExecutionEnvironment: J2SE-1.5 diff --git a/org.eclipse.mylyn.tasks.ui/icons/eview16/overlay-repository-context.gif b/org.eclipse.mylyn.tasks.ui/icons/eview16/overlay-repository-context.gif Binary files differdeleted file mode 100644 index cf4b159cc..000000000 --- a/org.eclipse.mylyn.tasks.ui/icons/eview16/overlay-repository-context.gif +++ /dev/null diff --git a/org.eclipse.mylyn.tasks.ui/icons/eview16/repositories.gif b/org.eclipse.mylyn.tasks.ui/icons/eview16/repositories.gif Binary files differdeleted file mode 100644 index d5562226d..000000000 --- a/org.eclipse.mylyn.tasks.ui/icons/eview16/repositories.gif +++ /dev/null diff --git a/org.eclipse.mylyn.tasks.ui/icons/eview16/task-list.gif b/org.eclipse.mylyn.tasks.ui/icons/eview16/task-list.gif Binary files differdeleted file mode 100644 index 6ab2668f7..000000000 --- a/org.eclipse.mylyn.tasks.ui/icons/eview16/task-list.gif +++ /dev/null diff --git a/org.eclipse.mylyn.tasks.ui/plugin.xml b/org.eclipse.mylyn.tasks.ui/plugin.xml deleted file mode 100644 index 161ec23f0..000000000 --- a/org.eclipse.mylyn.tasks.ui/plugin.xml +++ /dev/null @@ -1,617 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<?eclipse version="3.0"?> -<plugin> - <extension-point id="providers" name="Tasklist Providers" schema="schema/providers.exsd"/> - <extension-point id="repositories" name="Task Repositories" schema="schema/repositories.exsd"/> - <extension-point id="editors" name="Task Editors" schema="schema/editors.exsd"/> - <extension-point id="templates" name="templates" schema="schema/templates.exsd"/> - - <extension - point="org.eclipse.mylar.context.core.bridges"> - <contextStore class="org.eclipse.mylar.internal.tasks.ui.WorkspaceAwareContextStore"/> - </extension> - - <extension point="org.eclipse.ui.views"> - <category name="Mylar" id="org.eclipse.mylar"/> - </extension> - - <extension point="org.eclipse.ui.newWizards"> - <category name="Mylar" id="org.eclipse.mylar.wizards"/> - </extension> - - <extension - name="Mylar Task List Startup (required)" - point="org.eclipse.ui.startup"> - </extension> - - <!-- - <extension - id="org.eclipse.mylar.helpDocs" - name="Mylar Help" - point="org.eclipse.help.toc"> - <toc - file="doc/toc.xml" - primary="false"> - </toc> - </extension> - --> - - <extension point="org.eclipse.ui.newWizards"> - <wizard - canFinishEarly="true" - category="org.eclipse.mylar.wizards" - class="org.eclipse.mylar.internal.tasks.ui.wizards.NewLocalTaskWizard" - hasPages="false" - icon="icons/etool16/task-new.gif" - id="org.eclipse.mylar.tasks.ui.wizard.new.task" - name="Task"/> - <wizard - canFinishEarly="true" - category="org.eclipse.mylar.wizards" - class="org.eclipse.mylar.internal.tasks.ui.wizards.NewLocalCategoryWizard" - hasPages="false" - icon="icons/etool16/category-new.gif" - id="org.eclipse.mylar.tasks.ui.wizard.new.category" - name="Category"> - </wizard> - <wizard - category="org.eclipse.mylar.wizards" - class="org.eclipse.mylar.internal.tasks.ui.wizards.NewRepositoryTaskWizard" - icon="icons/etool16/task-repository-new.gif" - id="org.eclipse.mylar.tasks.ui.wizard.new.repository.task" - name="Repository Task"/> - <wizard - category="org.eclipse.mylar.wizards" - class="org.eclipse.mylar.internal.tasks.ui.wizards.NewQueryWizard" - icon="icons/etool16/query-new.gif" - id="org.eclipse.mylar.tasks.ui.wizard.new.query" - name="Query"/> - <wizard - category="org.eclipse.mylar.wizards" - class="org.eclipse.mylar.internal.tasks.ui.planner.TaskActivityWizard" - icon="icons/eview16/task-list.gif" - id="org.eclipse.mylar.tasks.ui.activity.report" - name="Task Activity Report (Experimental)"> - </wizard> - </extension> - - <extension - point="org.eclipse.ui.importWizards"> - <wizard - category="org.eclipse.mylar.tasklist.importcategory" - class="org.eclipse.mylar.internal.tasks.ui.wizards.TaskDataImportWizard" - icon="icons/eview16/task-list.gif" - id="org.eclipse.mylar.tasklist.ui.importWizard" - name="Mylar Task Data"> - <description> - Import Mylar task data files from file system. - </description> - </wizard> - <category - id="org.eclipse.mylar.tasklist.importcategory" - name="Mylar"/> - </extension> - - <extension point="org.eclipse.ui.exportWizards"> - <wizard - category="org.eclipse.mylar.tasklist.exportcategory" - class="org.eclipse.mylar.internal.tasks.ui.wizards.TaskDataExportWizard" - icon="icons/eview16/task-list.gif" - id="org.eclipse.mylar.tasklist.ui.exportWizard" - name="Mylar Task Data"> - <description> - Export Mylar task data files to the file system. - </description> - </wizard> - <category - id="org.eclipse.mylar.tasklist.exportcategory" - name="Mylar"/> - </extension> - - <extension point="org.eclipse.ui.decorators"> - <decorator - class="org.eclipse.mylar.internal.tasks.ui.RepositoryTaskDecorator" - id="org.eclipse.mylar.tasklist.ui.decorator.repositories" - label="Mylar Repository Task Decorator" - lightweight="true" - state="true"> - <description> - Mylar Repository Task Decorator - </description> - <enablement> - <or> - <objectClass - name="org.eclipse.mylar.tasks.core.ITaskListElement"> - </objectClass> - <objectClass - name="org.eclipse.mylar.tasks.core.TaskRepository"> - </objectClass> - </or> - </enablement> - </decorator> - </extension> - - - <extension - point="org.eclipse.ui.views"> - <view - allowMultiple="true" - category="org.eclipse.mylar" - class="org.eclipse.mylar.internal.tasks.ui.views.TaskListView" - icon="icons/eview16/task-list.gif" - id="org.eclipse.mylar.tasks.ui.views.TaskListView" - name="Task List"/> - <view - id="org.eclipse.mylar.tasklist.repositories" - allowMultiple="false" - category="org.eclipse.mylar" - class="org.eclipse.mylar.internal.tasks.ui.views.TaskRepositoriesView" - icon="icons/eview16/repositories.gif" - name="Task Repositories"> - </view> - <view - allowMultiple="false" - category="org.eclipse.mylar" - class="org.eclipse.mylar.internal.tasks.ui.views.TaskActivityView" - icon="icons/eview16/task-activity.gif" - id="org.eclipse.mylar.tasklist.activity" - name="Task Activity (Experimental)"/> - </extension> - - <extension - point="org.eclipse.ui.editors"> - <editor - class="org.eclipse.mylar.internal.tasks.ui.editors.MylarTaskEditor" - contributorClass="org.eclipse.mylar.internal.tasks.ui.editors.TaskEditorActionContributor" - icon="icons/etool16/task.gif" - id="org.eclipse.mylar.tasklist.ui.taskEditor" - name="Task Editor"/> - <editor - icon="icons/etool16/task.gif" - class="org.eclipse.mylar.internal.tasks.ui.editors.CategoryEditor" - name="Category Editor" - id="org.eclipse.mylar.tasklist.ui.catEditor"/> - <editor - class="org.eclipse.mylar.internal.tasks.ui.planner.TaskActivityEditorPart" - contributorClass="org.eclipse.mylar.internal.tasks.ui.editors.TaskEditorActionContributor" - icon="icons/eview16/task-list.gif" - id="org.eclipse.mylar.tasklist.ui.planner.editor" - name="Mylar Task Planner"/> - </extension> - - <extension point="org.eclipse.ui.perspectiveExtensions"> - <perspectiveExtension targetID="org.eclipse.jdt.ui.JavaPerspective"> - <viewShortcut id="org.eclipse.mylar.tasks.ui.views.TaskListView"/> - <view - closeable="true" - id="org.eclipse.mylar.tasks.ui.views.TaskListView" - moveable="true" - ratio="0.5" - relationship="top" - relative="org.eclipse.ui.views.ContentOutline" - visible="true"/> - <newWizardShortcut - id="org.eclipse.mylar.tasks.ui.wizard.new.task"> - </newWizardShortcut> - <newWizardShortcut - id="org.eclipse.mylar.tasks.ui.wizard.new.task"> - </newWizardShortcut> - <newWizardShortcut - id="org.eclipse.mylar.tasks.ui.wizard.new.repository.task"> - </newWizardShortcut> - </perspectiveExtension> - <perspectiveExtension targetID="org.eclipse.jdt.ui.JavaBrowsingPerspective"> - <viewShortcut id="org.eclipse.mylar.tasks.ui.views.TaskListView"/> - </perspectiveExtension> - <perspectiveExtension - targetID="org.eclipse.ui.resourcePerspective"> - <viewShortcut id="org.eclipse.mylar.tasks.ui.views.TaskListView"/> - <view - id="org.eclipse.mylar.tasks.ui.views.TaskListView" - relationship="left" - relative="org.eclipse.ui.views.TaskList" - > - </view> - <newWizardShortcut - id="org.eclipse.mylar.tasks.ui.wizard.new.task"> - </newWizardShortcut> - <newWizardShortcut - id="org.eclipse.mylar.tasks.ui.wizard.new.repository.task"> - </newWizardShortcut> - </perspectiveExtension> - <perspectiveExtension - targetID="org.eclipse.mylar.tasklist.ui.perspectives.planning"> - <newWizardShortcut - id="org.eclipse.mylar.tasks.ui.wizard.new.task"> - </newWizardShortcut> - <newWizardShortcut - id="org.eclipse.mylar.tasks.ui.wizard.new.repository.task"> - </newWizardShortcut> - </perspectiveExtension> - - <perspectiveExtension targetID="org.eclipse.team.cvs.ui.cvsPerspective"> - <view - id="org.eclipse.mylar.tasklist.repositories" - ratio="0.7" - relationship="bottom" - relative="org.eclipse.team.ccvs.ui.RepositoriesView" - visible="true"/> - <viewShortcut id="org.eclipse.mylar.tasklist.repositories"/> - </perspectiveExtension> - <perspectiveExtension targetID="org.tigris.subversion.subclipse.ui.svnPerspective"> - <view - id="org.eclipse.mylar.tasklist.repositories" - ratio="0.7" - relationship="bottom" - relative="org.tigris.subversion.subclipse.ui.repository.RepositoriesView" - visible="true"/> - <viewShortcut id="org.eclipse.mylar.tasklist.repositories"/> - </perspectiveExtension> - <perspectiveExtension targetID="org.eclipse.team.ui.TeamSynchronizingPerspective"> - <view - id="org.eclipse.mylar.tasklist.repositories" - ratio="0.7" - relationship="bottom" - relative="org.eclipse.team.sync.views.SynchronizeView" - visible="true"/> - <viewShortcut id="org.eclipse.mylar.tasklist.repositories"/> - </perspectiveExtension> - </extension> - - <extension point="org.eclipse.ui.viewActions"> - <viewContribution - id="org.eclipse.mylar.tasklist.actions.view" - targetID="org.eclipse.mylar.tasks.ui.views.TaskListView"> - - <action - class="org.eclipse.mylar.internal.tasks.ui.actions.NewRepositoryTaskAction" - enablesFor="*" - icon="icons/etool16/task-repository-new.gif" - id="org.eclipse.mylar.tasklist.new.repositorytask" - label="New Repository Task" - style="push" - toolbarPath="reports" - tooltip="New Repository Task"> - </action> - - <action - class="org.eclipse.mylar.internal.tasks.ui.actions.SynchronizeAllAction" - enablesFor="*" - icon="icons/etool16/repository-synchronize.gif" - id="org.eclipse.mylar.tasklist.synchronize" - label="Synchronize All" - menubarPath="additions" - tooltip="Synchronize All Tasks and Queries"> - </action> - <!-- - <action - class="org.eclipse.mylar.internal.tasklist.ui.actions.CopyDetailsAction" - id="org.eclipse.mylar.tasklist.copy.details" - label="Copy Details" - style="push"/> - --> - </viewContribution> - </extension> - - <extension point="org.eclipse.ui.popupMenus"> - <viewerContribution - id="org.eclipse.mylar.tasklist.ui.viewerContribution" - targetID="org.eclipse.mylar.tasks.ui.views.TaskListView"> - - <action - class="org.eclipse.mylar.internal.tasks.ui.actions.SynchronizeSelectedAction" - definitionId="org.eclipse.ui.file.refresh" - enablesFor="*" - icon="icons/etool16/repository-synchronize.gif" - id="org.eclipse.mylar.tasklist.synchronize.selected" - label="Synchronize" - menubarPath="reports" - tooltip="Synchronize with Repository"> - <enablement> - <or> - <objectClass name="org.eclipse.mylar.tasks.core.AbstractQueryHit"/> - <objectClass name="org.eclipse.mylar.tasks.core.AbstractRepositoryQuery"/> - <objectClass name="org.eclipse.mylar.tasks.core.AbstractRepositoryTask"/> - <objectClass name="org.eclipse.mylar.tasks.core.AbstractTaskContainer"/> - </or> - </enablement> - </action> - - <action - class="org.eclipse.mylar.internal.tasks.ui.actions.AddRepositoryTaskAction" - enablesFor="*" - icon="icons/etool16/task-repository.gif" - id="org.eclipse.mylar.tasklist.actions.addQuery" - menubarPath="reports" - label="Add Existing Task" - style="push" - tooltip="Add Existing Task"> - </action> - - <action - class="org.eclipse.mylar.internal.tasks.ui.actions.NewRepositoryTaskAction" - enablesFor="*" - icon="icons/etool16/task-repository-new.gif" - id="org.eclipse.mylar.tasklist.new.repositorytask" - label="New Repository Task" - menubarPath="reports" - tooltip="New Repository Task"/> - - <action - class="org.eclipse.mylar.internal.tasks.ui.actions.NewQueryAction" - enablesFor="*" - icon="icons/etool16/query-new.gif" - id="org.eclipse.mylar.tasklist.actions.addQuery" - menubarPath="reports" - label="New Query" - style="push" - tooltip="New Query"> - </action> - </viewerContribution> - - </extension> - - <extension point="org.eclipse.ui.preferencePages"> - <page - name="Mylar" - class="org.eclipse.mylar.internal.tasks.ui.preferences.MylarPreferencePage" - id="org.eclipse.mylar.ui.preferences"> - <keywordReference id="org.eclipse.mylar.tasks.keywords"/> - </page> - <page - name="Tasks" - class="org.eclipse.mylar.internal.tasks.ui.preferences.TasksPreferencePage" - id="org.eclipse.mylar.tasklist.ui.preferences" - category="org.eclipse.mylar.ui.preferences"> - <keywordReference id="org.eclipse.mylar.tasks.keywords"/> - </page> - </extension> - - <extension - point="org.eclipse.ui.keywords"> - <keyword - label="mylar tasks" - id="org.eclipse.mylar.tasks.keywords"/> - </extension> - - - -<!-- - <extension point="org.eclipse.ui.commands"> - <command - name="Mylar Tasks" - description="Open Mylar Tasks View" - categoryId="org.eclipse.ui.category.views" - id="org.eclipse.mylar.tasklist.ui.views.TaskListView"> - </command> - </extension> - --> - <extension point="org.eclipse.ui.bindings"> - <key - sequence="M2+M3+Q M" - contextId="org.eclipse.ui.contexts.window" - commandId="org.eclipse.ui.views.showView" - schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"> - <parameter - id="org.eclipse.ui.views.showView.viewId" - value="org.eclipse.mylar.tasks.ui.views.TaskListView"/> - </key> - </extension> - - <extension - point="org.eclipse.ui.themes"> - <themeElementCategory - id="org.eclipse.mylar.tasklist.ui.presentation" - label="Mylar"/> - <colorDefinition - categoryId="org.eclipse.mylar.tasklist.ui.presentation" - id="org.eclipse.mylar.tasklist.ui.colors.foreground.overdue" - isEditable="true" - label="Tasks - Overdue" - value="198,4,38"> - <description> - Text color for overdue tasks. - </description> - </colorDefinition> - <colorDefinition - categoryId="org.eclipse.mylar.tasklist.ui.presentation" - id="org.eclipse.mylar.tasklist.ui.colors.foreground.today.scheduled" - isEditable="true" - label="Tasks - Scheduled for Today" - value="32,21,223"> - <description> - Text color for tasks scheduled for today. - </description> - </colorDefinition> - <colorDefinition - categoryId="org.eclipse.mylar.tasklist.ui.presentation" - id="org.eclipse.mylar.tasklist.ui.colors.foreground.thisweek.scheduled" - isEditable="true" - label="Tasks - Scheduled for This Week" - value="0,0,0"> - <description> - Text color for tasks scheduled for this week - </description> - </colorDefinition> - <colorDefinition - categoryId="org.eclipse.mylar.tasklist.ui.presentation" - id="org.eclipse.mylar.tasklist.ui.colors.foreground.today.completed" - isEditable="true" - label="Tasks - Completed Today" - value="107,169,128"> - <description> - Text color for tasks completed. - </description> - </colorDefinition> - <colorDefinition - categoryId="org.eclipse.mylar.tasklist.ui.presentation" - id="org.eclipse.mylar.tasklist.ui.colors.background.category" - isEditable="true" - label="Categories - Background" - value="234,233,237"> - <description> - Background color of Task List categories and queries. - </description> - </colorDefinition> - - <fontDefinition - categoryId="org.eclipse.mylar.tasklist.ui.presentation" - id="org.eclipse.mylar.tasklist.ui.fonts.task.editor.comment" - isEditable="true" - label="Task Editor - Notes and Comments" - value="Tahoma-regular-10"> - <description> - Text font used for task editor text areas. - </description> - </fontDefinition> - </extension> - <!-- defaultsTo="org.eclipse.jface.dialogfont"--> - - - - <extension - point="org.eclipse.ui.perspectives"> - <perspective - class="org.eclipse.mylar.internal.tasks.ui.PlanningPerspectiveFactory" - icon="icons/eview16/task-activity.gif" - id="org.eclipse.mylar.tasklist.ui.perspectives.planning" - name="Planning"/> - </extension> - - - <extension point="org.eclipse.mylar.tasks.ui.providers"> - <dynamicPopupMenu class="org.eclipse.mylar.internal.tasks.ui.TaskReminderMenuContributor"/> - <dynamicPopupMenu class="org.eclipse.mylar.internal.tasks.ui.TaskStatusMenuContributor"/> - <dynamicPopupMenu class="org.eclipse.mylar.internal.tasks.ui.MoveToCategoryMenuContributor"/> - </extension> - <extension - point="org.eclipse.mylar.tasks.ui.editors"> - <hyperlinkDetector - class="org.eclipse.mylar.internal.tasks.ui.editors.TaskEditorUrlHyperlinkDetector" - id="org.eclipse.mylar.tasklist.hyperlinkdetector.url"/> - </extension> - <extension - point="org.eclipse.mylar.context.core.handlers"> - <status class="org.eclipse.mylar.internal.tasks.ui.RepositoryAwareStatusHandler"/> - </extension> - - <extension - point="org.eclipse.ui.actionSets"> - <actionSet - id="org.eclipse.mylar.tasks.navigation" - label="Task Navigation" - visible="true"> - <action - class="org.eclipse.mylar.internal.tasks.ui.actions.DeactivateAllTasksAction" - definitionId="org.eclipse.mylar.tasks.command.deactivateAllTasks" - id="org.eclipse.mylar.tasks.ui.deactivateAllTasks" - label="&Deactivate Task" - menubarPath="navigate/open.ext3" - style="push"/> - <action - class="org.eclipse.mylar.internal.tasks.ui.actions.ActivateTaskAction" - definitionId="org.eclipse.mylar.tasks.command.activateTask" - id="org.eclipse.mylar.tasks.ui.switchTask" - label="&Activate Task..." - menubarPath="navigate/open.ext3" - style="push"/> - <action - class="org.eclipse.mylar.internal.tasks.ui.actions.OpenTaskAction" - definitionId="org.eclipse.mylar.tasks.command.openTask" - icon="icons/etool16/open-task.gif" - id="org.eclipse.mylar.tasks.ui.openTask" - label="Open Tas&k..." - menubarPath="navigate/open.ext3" - style="push" - toolbarPath="org.eclipse.search.searchActionSet/Search" - tooltip="Open Task"/> - </actionSet> - </extension> - <extension - point="org.eclipse.ui.commands"> - <command - categoryId="org.eclipse.ui.category.navigate" - id="org.eclipse.mylar.tasks.command.openTask" - name="Open Task"/> - <command - categoryId="org.eclipse.ui.category.navigate" - id="org.eclipse.mylar.tasks.command.activateTask" - name="Activate Task"/> - <command - categoryId="org.eclipse.ui.category.navigate" - id="org.eclipse.mylar.tasks.command.deactivateAllTasks" - name="Deactivate Task"/> - </extension> - <extension - point="org.eclipse.ui.bindings"> - <key - commandId="org.eclipse.mylar.tasks.command.openTask" - schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" - sequence="M1+M2+F11"/> - <key - commandId="org.eclipse.mylar.tasks.command.activateTask" - schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" - sequence="M1+M2+F12"/> - <key - commandId="org.eclipse.mylar.tasks.command.deactivateAllTasks" - schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" - sequence="M1+M2+F9"/> - </extension> - <extension - id="BugzillaSearchPage" - point="org.eclipse.search.searchResultViewPages"> - <viewPage - class="org.eclipse.mylar.internal.tasks.ui.search.RepositorySearchResultView" - searchResultClass="org.eclipse.mylar.internal.tasks.ui.search.RepositorySearchResult" - id="org.eclipse.mylar.internal.tasks.ui.search.RepositorySearchResultView"/> -<!-- id="org.eclipse.mylar.bugzilla.BugzillaSearchResultPage"/>--> - </extension> - <extension - id="org.eclipse.mylar.tasks.ui.repositorySearchPage" - name="Task Search Page" - point="org.eclipse.search.searchPages"> - <page - class="org.eclipse.mylar.internal.tasks.ui.TaskSearchPage" - enabled="true" - icon="icons/elcl16/task-search.gif" - id="org.eclipse.mylar.tasks.ui.core.search.page" - label="Task Search" - tabPosition="999"/> - </extension> - <extension - point="org.eclipse.ui.propertyPages"> - <page - adaptable="true" - class="org.eclipse.mylar.tasks.ui.properties.ProjectTaskRepositoryPage" - id="org.eclipse.mylar.tasks.ui.project.repository" - name="Task Repository" - objectClass="org.eclipse.core.resources.IProject"/> - </extension> - -</plugin> - - <!-- - <extension - point="org.eclipse.mylar.tasklist.editors"> - <hyperlinkDetector class="org.eclipse.ui.internal.editors.text.URLHyperlinkDetector"/> - </extension> - --> - - <!--<extension - point="org.eclipse.mylar.tasklist.editors"> - <hyperlinkListener - class="org.eclipse.mylar.internal.tasklist.ui.TaskHyperlinkAdapter" - id="org.eclipse.mylar.tasklist.hyperlinkLister.task" - type="task"/> - </extension>--> - -<!-- - <action - label="Go Into Category" - tooltip="Go Into Category" - menubarPath="tasks" - id="org.eclipse.mylar.tasklist.actions.category.gointo" - class="org.eclipse.mylar.tasklist.ui.actions.GoIntoAction" - icon="icons/etool16/go-into.gif" - enablesFor="1"/> ---> diff --git a/org.eclipse.mylyn.tasks.ui/schema/editors.exsd b/org.eclipse.mylyn.tasks.ui/schema/editors.exsd deleted file mode 100644 index 5bd6099c5..000000000 --- a/org.eclipse.mylyn.tasks.ui/schema/editors.exsd +++ /dev/null @@ -1,135 +0,0 @@ -<?xml version='1.0' encoding='UTF-8'?> -<!-- Schema file written by PDE --> -<schema targetNamespace="org.eclipse.mylar.tasks.ui"> -<annotation> - <appInfo> - <meta.schema plugin="org.eclipse.mylar.tasks.ui" id="editors" name="Task Editors"/> - </appInfo> - <documentation> - - </documentation> - </annotation> - - <element name="extension"> - <complexType> - <sequence> - <element ref="editorFactory" minOccurs="1" maxOccurs="unbounded"/> - <element ref="hyperlinkDetector"/> - </sequence> - <attribute name="point" type="string" use="required"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="id" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="name" type="string"> - <annotation> - <documentation> - - </documentation> - <appInfo> - <meta.attribute translatable="true"/> - </appInfo> - </annotation> - </attribute> - </complexType> - </element> - - <element name="editorFactory"> - <complexType> - <attribute name="id" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="class" type="string" use="required"> - <annotation> - <documentation> - - </documentation> - <appInfo> - <meta.attribute kind="java" basedOn="org.eclipse.mylar.internal.tasklist.ui.ITaskEditorFactory"/> - </appInfo> - </annotation> - </attribute> - </complexType> - </element> - - <element name="hyperlinkDetector"> - <complexType> - <attribute name="id" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="class" type="string" use="required"> - <annotation> - <documentation> - - </documentation> - <appInfo> - <meta.attribute kind="java" basedOn="org.eclipse.jface.text.hyperlink.IHyperlinkDetector"/> - </appInfo> - </annotation> - </attribute> - </complexType> - </element> - - <annotation> - <appInfo> - <meta.section type="since"/> - </appInfo> - <documentation> - [Enter the first release in which this extension point appears.] - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="examples"/> - </appInfo> - <documentation> - [Enter extension point usage example here.] - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="apiInfo"/> - </appInfo> - <documentation> - [Enter API information here.] - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="implementation"/> - </appInfo> - <documentation> - [Enter information about supplied implementation of this extension point.] - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="copyright"/> - </appInfo> - <documentation> - - </documentation> - </annotation> - -</schema> diff --git a/org.eclipse.mylyn.tasks.ui/schema/providers.exsd b/org.eclipse.mylyn.tasks.ui/schema/providers.exsd deleted file mode 100644 index 19a7b0201..000000000 --- a/org.eclipse.mylyn.tasks.ui/schema/providers.exsd +++ /dev/null @@ -1,122 +0,0 @@ -<?xml version='1.0' encoding='UTF-8'?> -<!-- Schema file written by PDE --> -<schema targetNamespace="org.eclipse.mylar.tasks.ui"> -<annotation> - <appInfo> - <meta.schema plugin="org.eclipse.mylar.tasks.ui" id="providers" name="Task UI Providers"/> - </appInfo> - <documentation> - Currently only a work-around for creating a dynamic popupo menu. - </documentation> - </annotation> - - <element name="extension"> - <complexType> - <sequence> - <element ref="dynamicPopupMenu" minOccurs="0" maxOccurs="unbounded"/> - </sequence> - <attribute name="point" type="string" use="required"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="id" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="name" type="string"> - <annotation> - <documentation> - - </documentation> - <appInfo> - <meta.attribute translatable="true"/> - </appInfo> - </annotation> - </attribute> - </complexType> - </element> - - <element name="dynamicPopupMenu"> - <complexType> - <attribute name="class" type="string" use="required"> - <annotation> - <documentation> - - </documentation> - <appInfo> - <meta.attribute kind="java"/> - </appInfo> - </annotation> - </attribute> - <attribute name="id" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="name" type="string"> - <annotation> - <documentation> - - </documentation> - <appInfo> - <meta.attribute translatable="true"/> - </appInfo> - </annotation> - </attribute> - </complexType> - </element> - - <annotation> - <appInfo> - <meta.section type="since"/> - </appInfo> - <documentation> - - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="examples"/> - </appInfo> - <documentation> - - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="apiInfo"/> - </appInfo> - <documentation> - - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="implementation"/> - </appInfo> - <documentation> - - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="copyright"/> - </appInfo> - <documentation> - - </documentation> - </annotation> - -</schema> diff --git a/org.eclipse.mylyn.tasks.ui/schema/repositories.exsd b/org.eclipse.mylyn.tasks.ui/schema/repositories.exsd deleted file mode 100644 index 3ddcfa6bb..000000000 --- a/org.eclipse.mylyn.tasks.ui/schema/repositories.exsd +++ /dev/null @@ -1,232 +0,0 @@ -<?xml version='1.0' encoding='UTF-8'?> -<!-- Schema file written by PDE --> -<schema targetNamespace="org.eclipse.mylar.tasks.ui"> -<annotation> - <appInfo> - <meta.schema plugin="org.eclipse.mylar.tasks.ui" id="repositories" name="Repositories"/> - </appInfo> - <documentation> - [Enter description of this extension point.] - </documentation> - </annotation> - - <element name="extension"> - <annotation> - <documentation> - (no description available) - </documentation> - </annotation> - <complexType> - <sequence> - <element ref="connectorCore"/> - <element ref="externalizer"/> - <element ref="connectorUi"/> - </sequence> - <attribute name="point" type="string" use="required"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="id" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="name" type="string"> - <annotation> - <documentation> - - </documentation> - <appInfo> - <meta.attribute translatable="true"/> - </appInfo> - </annotation> - </attribute> - </complexType> - </element> - - <element name="externalizer"> - <annotation> - <appInfo> - <meta.element labelAttribute="name"/> - </appInfo> - <documentation> - (no description available) - </documentation> - </annotation> - <complexType> - <attribute name="class" type="string" use="required"> - <annotation> - <documentation> - - </documentation> - <appInfo> - <meta.attribute kind="java" basedOn="org.eclipse.mylar.provisional.tasklist.ITaskListExternalizer"/> - </appInfo> - </annotation> - </attribute> - <attribute name="id" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="name" type="string"> - <annotation> - <documentation> - - </documentation> - <appInfo> - <meta.attribute translatable="true"/> - </appInfo> - </annotation> - </attribute> - </complexType> - </element> - - <element name="connectorCore"> - <annotation> - <documentation> - (no description available) - </documentation> - </annotation> - <complexType> - <attribute name="class" type="string" use="required"> - <annotation> - <documentation> - - </documentation> - <appInfo> - <meta.attribute kind="java" basedOn="org.eclipse.mylar.provisional.tasklist.AbstractRepositoryClient"/> - </appInfo> - </annotation> - </attribute> - <attribute name="name" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="id" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="type" type="string" use="required"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - </complexType> - </element> - - <element name="connectorUi"> - <annotation> - <documentation> - (no description available) - </documentation> - </annotation> - <complexType> - <attribute name="class" type="string" use="required"> - <annotation> - <documentation> - (no description available) - </documentation> - <appInfo> - <meta.attribute kind="java" basedOn="org.eclipse.mylar.tasks.ui.AbstractConnectorUi"/> - </appInfo> - </annotation> - </attribute> - <attribute name="id" type="string"> - <annotation> - <documentation> - (no description available) - </documentation> - </annotation> - </attribute> - <attribute name="brandingIcon" type="string"> - <annotation> - <documentation> - (no description available) - </documentation> - <appInfo> - <meta.attribute kind="resource"/> - </appInfo> - </annotation> - </attribute> - <attribute name="name" type="string"> - <annotation> - <documentation> - (no description available) - </documentation> - </annotation> - </attribute> - <attribute name="overlayIcon" type="string"> - <annotation> - <documentation> - (no description available) - </documentation> - <appInfo> - <meta.attribute kind="resource"/> - </appInfo> - </annotation> - </attribute> - </complexType> - </element> - - <annotation> - <appInfo> - <meta.section type="since"/> - </appInfo> - <documentation> - [Enter the first release in which this extension point appears.] - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="examples"/> - </appInfo> - <documentation> - [Enter extension point usage example here.] - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="apiInfo"/> - </appInfo> - <documentation> - [Enter API information here.] - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="implementation"/> - </appInfo> - <documentation> - [Enter information about supplied implementation of this extension point.] - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="copyright"/> - </appInfo> - <documentation> - - </documentation> - </annotation> - -</schema> diff --git a/org.eclipse.mylyn.tasks.ui/schema/templates.exsd b/org.eclipse.mylyn.tasks.ui/schema/templates.exsd deleted file mode 100644 index a6d2c66af..000000000 --- a/org.eclipse.mylyn.tasks.ui/schema/templates.exsd +++ /dev/null @@ -1,187 +0,0 @@ -<?xml version='1.0' encoding='UTF-8'?> -<!-- Schema file written by PDE --> -<schema targetNamespace="org.eclipse.mylar.tasks.ui"> -<annotation> - <appInfo> - <meta.schema plugin="org.eclipse.mylar.tasks.ui" id="templates" name="templates"/> - </appInfo> - <documentation> - Templates describing default parameters for new repository configurations. - </documentation> - </annotation> - - <element name="extension"> - <complexType> - <sequence> - <element ref="repository" minOccurs="1" maxOccurs="unbounded"/> - </sequence> - <attribute name="point" type="string" use="required"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="id" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="name" type="string"> - <annotation> - <documentation> - - </documentation> - <appInfo> - <meta.attribute translatable="true"/> - </appInfo> - </annotation> - </attribute> - </complexType> - </element> - - <element name="repository"> - <complexType> - <sequence> - <element ref="attribute" minOccurs="0" maxOccurs="unbounded"/> - </sequence> - <attribute name="label" type="string" use="required"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="urlRepository" type="string" use="required"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="repositoryKind" type="string" use="required"> - <annotation> - <documentation> - Connector Kind, as declared by the Connector (e.g. "bugzilla"). - </documentation> - </annotation> - </attribute> - <attribute name="version" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="urlNewAccount" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="urlNewTask" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="urlTask" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="urlTaskQuery" type="string"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="addAutomatically" type="boolean"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="anonymous" type="boolean"> - <annotation> - <documentation> - True if an anonymous login is accepted for this repository. - </documentation> - </annotation> - </attribute> - </complexType> - </element> - - <element name="attribute"> - <complexType> - <attribute name="name" type="string" use="required"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - <attribute name="value" type="string" use="required"> - <annotation> - <documentation> - - </documentation> - </annotation> - </attribute> - </complexType> - </element> - - <annotation> - <appInfo> - <meta.section type="since"/> - </appInfo> - <documentation> - [Enter the first release in which this extension point appears.] - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="examples"/> - </appInfo> - <documentation> - [Enter extension point usage example here.] - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="apiInfo"/> - </appInfo> - <documentation> - [Enter API information here.] - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="implementation"/> - </appInfo> - <documentation> - [Enter information about supplied implementation of this extension point.] - </documentation> - </annotation> - - <annotation> - <appInfo> - <meta.section type="copyright"/> - </appInfo> - <documentation> - - </documentation> - </annotation> - -</schema> diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ComboSelectionDialog.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ComboSelectionDialog.java deleted file mode 100644 index c92e1874d..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ComboSelectionDialog.java +++ /dev/null @@ -1,109 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui; - -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Shell; - -/** - * General purpose dialog for selecting an item from a combo box. - * - * @author This was (essentially) copied from Eclipse's internal implementation - * by Wesley Coelho - */ -public class ComboSelectionDialog extends Dialog { - - private String fSelection = null; - - private final String fShellTitle; - - private final String fLabelText; - - private final String[] fAllowedStrings; - - private final int fInitialSelectionIndex; - - private int fSelectedIndex = -1; - - public ComboSelectionDialog(Shell parentShell, String shellTitle, String labelText, String[] comboStrings, - int initialSelectionIndex) { - super(parentShell); - fShellTitle = shellTitle; - fLabelText = labelText; - fAllowedStrings = comboStrings; - fInitialSelectionIndex = initialSelectionIndex; - } - - public String getSelectedString() { - return fSelection; - } - - /* - * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite) - */ - protected Control createDialogArea(Composite parent) { - getShell().setText(fShellTitle); - - Composite composite = (Composite) super.createDialogArea(parent); - Composite innerComposite = new Composite(composite, SWT.NONE); - innerComposite.setLayoutData(new GridData()); - GridLayout gl = new GridLayout(); - gl.numColumns = 2; - innerComposite.setLayout(gl); - - Label label = new Label(innerComposite, SWT.NONE); - label.setText(fLabelText); - label.setLayoutData(new GridData()); - - final Combo combo = new Combo(innerComposite, SWT.READ_ONLY); - for (int i = 0; i < fAllowedStrings.length; i++) { - combo.add(fAllowedStrings[i]); - } - combo.select(fInitialSelectionIndex); - fSelection = combo.getItem(combo.getSelectionIndex()); - GridData gd = new GridData(); - gd.widthHint = convertWidthInCharsToPixels(getMaxStringLength()); - combo.setLayoutData(gd); - combo.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - fSelection = combo.getItem(combo.getSelectionIndex()); - fSelectedIndex = combo.getSelectionIndex(); - } - }); - applyDialogFont(composite); - return composite; - } - - /** - * Returns the array index of the selected string or -1 if no string was - * selected. - */ - public int getSelectedIndex() { - return fSelectedIndex; - } - - private int getMaxStringLength() { - int max = 0; - for (int i = 0; i < fAllowedStrings.length; i++) { - max = Math.max(max, fAllowedStrings[i].length()); - } - return max; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ITaskEditorFactory.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ITaskEditorFactory.java deleted file mode 100644 index 96505f05e..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ITaskEditorFactory.java +++ /dev/null @@ -1,37 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui; - -import org.eclipse.mylar.internal.tasks.ui.editors.MylarTaskEditor; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorPart; - -/** - * @author Mik Kersten - */ -public interface ITaskEditorFactory { - - public IEditorPart createEditor(MylarTaskEditor parentEditor); - - public IEditorInput createEditorInput(ITask task); - - public boolean providesOutline(); - - public String getTitle(); - - public void notifyEditorActivationChange(IEditorPart editor); - - public boolean canCreateEditorFor(ITask task); - - public boolean canCreateEditorFor(IEditorInput input); -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ITaskListNotification.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ITaskListNotification.java deleted file mode 100644 index 46bd19d9f..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ITaskListNotification.java +++ /dev/null @@ -1,37 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui; - -import java.util.Date; - -import org.eclipse.swt.graphics.Image; - -/** - * @author Rob Elves - */ -public interface ITaskListNotification extends Comparable { - - public void openTask(); - - public String getDescription(); - - public String getLabel(); - - public Image getNotificationIcon(); - - public Image getOverlayIcon(); - - public Date getDate(); - - public void setDate(Date date); - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/MoveToCategoryMenuContributor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/MoveToCategoryMenuContributor.java deleted file mode 100644 index 10108a9f0..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/MoveToCategoryMenuContributor.java +++ /dev/null @@ -1,68 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui; - -import java.util.List; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractTaskContainer; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Mik Kersten - */ -public class MoveToCategoryMenuContributor implements IDynamicSubMenuContributor { - - private static final String LABEL = "Move to"; - - public MenuManager getSubMenuManager(final List<ITaskListElement> selectedElements) { - final MenuManager subMenuManager = new MenuManager(LABEL); - - subMenuManager.setVisible(selectedElements.size() > 0 && !(selectedElements.get(0) instanceof AbstractTaskContainer || selectedElements.get(0) instanceof AbstractRepositoryQuery)); - - for (final AbstractTaskContainer category : TasksUiPlugin.getTaskListManager().getTaskList() - .getCategories()) { - if (!category.equals(TasksUiPlugin.getTaskListManager().getTaskList().getArchiveContainer())) { - Action action = new Action() { - @Override - public void run() { - for (ITaskListElement element : selectedElements) { - if (element instanceof ITask) { - TasksUiPlugin.getTaskListManager().getTaskList().moveToContainer(category, - (ITask) element); - } else if (element instanceof AbstractQueryHit) { - ITask task = ((AbstractQueryHit) element).getCorrespondingTask(); - if (task != null) { - TasksUiPlugin.getTaskListManager().getTaskList().moveToContainer(category, - task); - } - } - } - } - }; - action.setText(category.getDescription()); - action.setImageDescriptor(TaskListImages.CATEGORY); - if (selectedElements.size() == 1 && selectedElements.get(0) instanceof AbstractQueryHit) { - AbstractQueryHit hit = (AbstractQueryHit) selectedElements.get(0); - if (hit.getCorrespondingTask() == null) { - action.setEnabled(false); - } - } - subMenuManager.add(action); - } - } - return subMenuManager; - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/OfflineTaskManager.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/OfflineTaskManager.java deleted file mode 100644 index 72bd7c9bf..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/OfflineTaskManager.java +++ /dev/null @@ -1,707 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.tasks.core.AbstractAttributeFactory; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * Class to persist the data for the offline reports list - */ -public class OfflineTaskManager { - - /** The file that the offline reports are written to */ - private File file; - - - private ArrayList<RepositoryTaskData> backingList = new ArrayList<RepositoryTaskData>(); - - /** A list of offline reports */ - private List<RepositoryTaskData> list = Collections.synchronizedList(backingList); - - /** The bug id of the most recently created offline report. */ - protected int latestNewBugId = 0; - - // private boolean updateLocalCopy = false; - - /** - * Constructor that reads the offline reports data persisted in the plugin's - * state directory, if it exists. - * - * @param file - * The file where the offline reports are persisted - * @throws IOException - * Error opening or closing the offline reports file - * @throws ClassNotFoundException - * @throws ClassNotFoundException - * Error deserializing objects from the offline reports file - */ - public OfflineTaskManager(File file, boolean read) throws IOException, ClassNotFoundException { - this.file = file; - if (read && file.exists()) { - readFile(); - } - } - - /** - * Add a RepositoryTaskData to the offline reports file - * - * @param entry - * The bug to add - */ - public void add(final RepositoryTaskData entry) throws CoreException { - int index = -1; - if ((index = find(entry.getRepositoryUrl(), entry.getId())) >= 0) { - - list.remove(index); - - list.add(entry); - writeFile(); - - } else { - list.add(entry); - writeFile(); - } - } - - // /** - // * Add an offline report to the offline reports list - // * - // * @param entry - // * The bug to add - // */ - // public RepositoryTaskSyncState add(final RepositoryTaskData entry, - // boolean forceSync) throws CoreException { - // - // RepositoryTaskSyncState status = RepositoryTaskSyncState.SYNCHRONIZED; - // // - // // try { - // // - // // String handle = - // AbstractRepositoryTask.getHandle(entry.getRepositoryUrl(), - // entry.getId()); - // // ITask task = - // MylarTaskListPlugin.getTaskListManager().getTaskList().getTask(handle); - // // - // // if (task != null && task instanceof AbstractRepositoryTask) { - // // AbstractRepositoryTask repositoryTask = (AbstractRepositoryTask) task; - // // - // // TaskRepository repository = - // MylarTaskListPlugin.getRepositoryManager().getRepository( - // // repositoryTask.getRepositoryKind(), - // repositoryTask.getRepositoryUrl()); - // // - // // if (repository == null) { - // // throw new Exception("No repository associated with task. Unable to - // retrieve timezone information."); - // // } - // // - // // TimeZone repositoryTimeZone = - // DateUtil.getTimeZone(repository.getTimeZoneId()); - // - // int index = -1; - // if ((index = find(entry.getRepositoryUrl(), entry.getId())) >= 0) { - // //RepositoryTaskData oldBug = list.get(index); - // - // // if (repositoryTask.getLastSynchronized() == null - // // || entry.getLastModified(repositoryTimeZone) - // // .compareTo(repositoryTask.getLastSynchronized()) > 0 || forceSync) { - // // - // // if (oldBug.hasChanges()) { - // // - // // PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { - // // public void run() { - // // updateLocalCopy = MessageDialog - // // .openQuestion( - // // null, - // // "Update Local Copy", - // // "Local copy of Report " - // // + entry.getId() - // // + " on " - // // + entry.getRepositoryUrl() - // // + " has changes.\nWould you like to override local changes? \n\nNote: - // if you select No, only the new comment will be saved with the updated - // bug, all other changes will be lost."); - // // } - // // }); - // // - // // if (!updateLocalCopy) { - // // ((RepositoryTaskData) entry).setNewComment(((RepositoryTaskData) - // oldBug).getNewComment()); - // // ((RepositoryTaskData) entry).setHasChanged(true); - // // status = RepositoryTaskSyncState.CONFLICT; - // // } else { - // // ((RepositoryTaskData) entry).setHasChanged(false); - // // status = RepositoryTaskSyncState.SYNCHRONIZED; - // // } - // // } else { - // // if (forceSync) { - // // status = RepositoryTaskSyncState.SYNCHRONIZED; - // // } else { - // // status = RepositoryTaskSyncState.INCOMING; - // // } - // // } - // list.remove(index); - // // if (entry.hasChanges() && status != RepositoryTaskSyncState.CONFLICT) - // { - // // status = RepositoryTaskSyncState.OUTGOING; - // // } - // list.add(entry); - // writeFile(); - // - // } else { - // // report doesn't exist in offline reports - // list.add(entry); - // writeFile(); - // } - // //repositoryTask.setLastSynchronized(entry.getLastModified(repositoryTimeZone)); - // // } - // // } catch (Exception e) { - // // e.printStackTrace(); - // // IStatus runtimestatus = new Status(IStatus.ERROR, - // MylarTaskListPlugin.PLUGIN_ID, IStatus.OK, - // // "failed to add offline report", e); - // // throw new CoreException(runtimestatus); - // // } - // return status; - // } - - // /** - // * Add an offline report to the offline reports list - // * - // * @param entry - // * The bug to add - // */ - // public RepositoryTaskSyncState add(final RepositoryTaskData entry, - // boolean forceSync) throws CoreException { - // - // RepositoryTaskSyncState status = RepositoryTaskSyncState.SYNCHRONIZED; - // - // try { - // - // String handle = - // AbstractRepositoryTask.getHandle(entry.getRepositoryUrl(), - // entry.getId()); - // ITask task = - // MylarTaskListPlugin.getTaskListManager().getTaskList().getTask(handle); - // - // if (task != null && task instanceof AbstractRepositoryTask) { - // AbstractRepositoryTask repositoryTask = (AbstractRepositoryTask) task; - // - // TaskRepository repository = - // MylarTaskListPlugin.getRepositoryManager().getRepository( - // repositoryTask.getRepositoryKind(), repositoryTask.getRepositoryUrl()); - // - // if (repository == null) { - // throw new Exception("No repository associated with task. Unable to - // retrieve timezone information."); - // } - // - // TimeZone repositoryTimeZone = - // DateUtil.getTimeZone(repository.getTimeZoneId()); - // - // int index = -1; - // if ((index = find(entry.getRepositoryUrl(), entry.getId())) >= 0) { - // RepositoryTaskData oldBug = list.get(index); - // - // if (repositoryTask.getLastSynchronized() == null - // || entry.getLastModified(repositoryTimeZone) - // .compareTo(repositoryTask.getLastSynchronized()) > 0 || forceSync) { - // - // if (oldBug.hasChanges()) { - // - // PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { - // public void run() { - // updateLocalCopy = MessageDialog - // .openQuestion( - // null, - // "Update Local Copy", - // "Local copy of Report " - // + entry.getId() - // + " on " - // + entry.getRepositoryUrl() - // + " has changes.\nWould you like to override local changes? \n\nNote: if - // you select No, only the new comment will be saved with the updated bug, - // all other changes will be lost."); - // } - // }); - // - // if (!updateLocalCopy) { - // ((RepositoryTaskData) entry).setNewComment(((RepositoryTaskData) - // oldBug).getNewComment()); - // ((RepositoryTaskData) entry).setHasChanged(true); - // status = RepositoryTaskSyncState.CONFLICT; - // } else { - // ((RepositoryTaskData) entry).setHasChanged(false); - // status = RepositoryTaskSyncState.SYNCHRONIZED; - // } - // } else { - // if (forceSync) { - // status = RepositoryTaskSyncState.SYNCHRONIZED; - // } else { - // status = RepositoryTaskSyncState.INCOMING; - // } - // } - // list.remove(index); - // if (entry.hasChanges() && status != RepositoryTaskSyncState.CONFLICT) { - // status = RepositoryTaskSyncState.OUTGOING; - // } - // list.add(entry); - // writeFile(); - // } - // } else { - // // report doesn't exist in offline reports - // list.add(entry); - // writeFile(); - // } - // repositoryTask.setLastSynchronized(entry.getLastModified(repositoryTimeZone)); - // } - // } catch (Exception e) { - // e.printStackTrace(); - // IStatus runtimestatus = new Status(IStatus.ERROR, - // MylarTaskListPlugin.PLUGIN_ID, IStatus.OK, - // "failed to add offline report", e); - // throw new CoreException(runtimestatus); - // } - // return status; - // } - - // DO NOT REMOVE - // /** - // * Add an offline report to the offline reports list - // * - // * @param entry - // * The bug to add - // */ - // public BugzillaOfflineStatus add(BugzillaReport entry, boolean - // saveChosen) throws CoreException { - // - // BugzillaOfflineStatus status = BugzillaOfflineStatus.SAVED; - // - // try { - // - // // check for bug and do a compare - // int index = -1; - // if ((index = find(entry.getRepositoryUrl(), entry.getId())) >= 0) { - // BugzillaReport oldBug = list.get(index); - // if (oldBug instanceof BugzillaReport && entry instanceof BugzillaReport - // && !saveChosen) { - // CompareConfiguration config = new CompareConfiguration(); - // config.setLeftEditable(false); - // config.setRightEditable(false); - // config.setLeftLabel("Local Bug Report"); - // config.setRightLabel("Remote Bug Report"); - // config.setLeftImage(PlatformUI.getWorkbench().getSharedImages().getImage( - // ISharedImages.IMG_OBJ_ELEMENT)); - // config.setRightImage(PlatformUI.getWorkbench().getSharedImages().getImage( - // ISharedImages.IMG_OBJ_ELEMENT)); - // final BugzillaCompareInput in = new BugzillaCompareInput(config); - // oldBug.setOfflineState(true); - // in.setLeft((BugzillaReport) oldBug); - // in.setRight((BugzillaReport) entry); - // in.setTitle("Bug #" + oldBug.getId()); - // - // try { - // in.run(null); - // // running in new job inside a job causes shell to popup - // // up, losing focus - // // PlatformUI.getWorkbench().getProgressService().run(true, - // // true, in); - // } catch (InterruptedException x) { - // // cancelled by user - // // TODO: Check how errors are handled - // return BugzillaOfflineStatus.ERROR; - // } catch (InvocationTargetException x) { - // BugzillaPlugin.log(x); - // MessageDialog.openError(null, "Compare Failed", - // x.getTargetException().getMessage()); - // return BugzillaOfflineStatus.ERROR; - // } - // - // ITask dirtyTask = getDirtyTask(oldBug); - // - // - // if (in.getCompareResult() == null) { - // status = BugzillaOfflineStatus.SAVED; - // } else if (oldBug.hasChanges() || dirtyTask != null) { - // if (!MessageDialog - // .openQuestion( - // null, - // "Update Local Copy", - // "Local copy of Report " - // + entry.getId() + " on "+entry.getRepositoryUrl() - // + " has changes.\nWould you like to override local changes? \n\nNote: if - // you select No, only the new comment will be saved with the updated bug, - // all other changes will be lost.")) { - // ((BugzillaReport) entry).setNewComment(((BugzillaReport) - // oldBug).getNewComment()); - // ((BugzillaReport) entry).setHasChanged(true); - // status = BugzillaOfflineStatus.CONFLICT; - // } else { - // ((BugzillaReport) entry).setHasChanged(false); - // status = BugzillaOfflineStatus.SAVED; - // } - // if(dirtyTask != null) { - // TaskUiUtil.closeEditorInActivePage(dirtyTask); - // TaskUiUtil.openEditor(dirtyTask, false); - // } - // } else { - // DiffNode node = (DiffNode) in.getCompareResult(); - // IDiffElement[] children = node.getChildren(); - // if (children.length != 0) { - // for (IDiffElement element : children) { - // if (((DiffNode) element).getKind() == Differencer.CHANGE) { - // if(reopenEditors(oldBug)) { - // status = BugzillaOfflineStatus.SAVED; - // } else { - // status = BugzillaOfflineStatus.SAVED_WITH_INCOMMING_CHANGES; - // } - // break; - // } - // } - // } else { - // status = BugzillaOfflineStatus.SAVED; // do we - // // ever get - // // here? - // } - // } - // - // // Display.getDefault().asyncExec(new Runnable(){ - // // public void run() { - // // - // // CompareUI.openCompareDialog(in); - // // } - // // }); - // } - // list.remove(index); - // } - // if (entry.hasChanges() && status != BugzillaOfflineStatus.CONFLICT) { - // status = BugzillaOfflineStatus.SAVED_WITH_OUTGOING_CHANGES; - // } - // // add the entry to the list and write the file to disk - // list.add(entry); - // writeFile(); - // } catch (Exception e) { - // e.printStackTrace(); - // IStatus runtimestatus = new Status(IStatus.ERROR, - // BugzillaUiPlugin.PLUGIN_ID, IStatus.OK, - // "failed to add offline report", e); - // throw new CoreException(runtimestatus); - // } - // return status; - // } - - /** - * Updates the offline reports list. Used when existing offline reports are - * modified and saved. - */ - public void update() { - // check for bug and do a compare - writeFile(); - } - - /** - * @return The id that a new offline bug should use. The value changes each - * time this method is called. - */ - public String getNextOfflineBugId() { - latestNewBugId++; - return ""+latestNewBugId; - } - - /** - * Find a bug in the offline reports list. - * - * @param id - * The bug id that we are looking for - * @return The index of the bug in the array if it exists, else -1. Locally - * created bugs are ignored. - */ - public int find(String repositoryUrl, String id) { - for (int i = 0; i < list.size(); i++) { - RepositoryTaskData currBug = list.get(i); - if (currBug != null && currBug.getRepositoryUrl() != null - && (currBug.getRepositoryUrl().equals(repositoryUrl) && currBug.getId().equals(id)) - && !currBug.isLocallyCreated()) - return i; - } - return -1; - } - - // TODO: move to plugin - public static RepositoryTaskData findBug(String repositoryUrl, String taskId) { - int location = TasksUiPlugin.getDefault().getOfflineReportsFile().find(repositoryUrl, taskId); - if (location != -1) { - return TasksUiPlugin.getDefault().getOfflineReportsFile().elements().get(location); - } - return null; - } - - /** - * Get the list of offline reports - * - * @return The list of offline reports - */ - public List<RepositoryTaskData> elements() { - return Collections.unmodifiableList(list); - } - - /** - * Write the offline reports to disk - */ - private synchronized void writeFile() { - - synchronized (file) { - - ObjectOutputStream out = null; - try { - out = new ObjectOutputStream(new FileOutputStream(file)); - - // Write the size of the list so that we can read it back in - // easier - out.writeInt(list.size()); - - out.writeInt(latestNewBugId); - - // write each element in the array list - for (int i = 0; i < list.size(); i++) { - RepositoryTaskData item = list.get(i); - out.writeObject(item); - } - out.close(); - } catch (IOException e) { - // put up a message and log the error if there is a problem - // writing - // to the file - MylarStatusHandler.fail(e, "Could not write to offline reports file.", false); - } finally { - if (out != null) { - try { - out.close(); - } catch (IOException e) { - // ignore - } - } - } - } - } - - /** - * Read the offline reports in from the file on disk - * - * @throws IOException - * Error opening or closing the offline reports file - * @throws ClassNotFoundException - * @throws ClassNotFoundException - * Error deserializing objects from the offline reports file - */ - private void readFile() throws IOException, ClassNotFoundException { - - synchronized (file) { - - ObjectInputStream in = null; - try { - in = new ObjectInputStream(new FileInputStream(file)); - - // get the number of offline reports in the file - int size = in.readInt(); - - // get the bug id of the most recently created offline report - latestNewBugId = in.readInt(); - - // read in each of the offline reports in the file - for (int nX = 0; nX < size; nX++) { - RepositoryTaskData item = null; - - item = (RepositoryTaskData) in.readObject(); - - if (item != null) { - AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager() - .getRepositoryConnector(item.getRepositoryKind()); - if (connector != null && connector.getOfflineTaskHandler() != null) { - AbstractAttributeFactory factory = connector.getOfflineTaskHandler().getAttributeFactory(); - if (factory != null) { - item.setAttributeFactory(factory); - } - } - list.add(item); - } - } - } finally { - in.close(); - } - } - } - - /** - * Remove some bugs from the offline reports list - * - * @param indicesToRemove - * An array of the indicies of the bugs to be removed - */ - public void remove(List<RepositoryTaskData> sel) { - list.removeAll(sel); - - // rewrite the file so that the data is persistant - writeFile(); - } - - /** - * Remove all of the items in the offline reports menu - */ - public void removeAll() { - list.clear(); - - // rewrite the file so that the data is persistant - writeFile(); - } - -} -// /** -// * Function to sort the offline reports list -// * @param sortOrder The way to sort the bugs in the offline reports list -// */ -// public void sort(int sortOrder) { -// IBugzillaBug[] a = list.toArray(new IBugzillaBug[list.size()]); -// -// // decide which sorting method to use and sort the offline reports -// switch(sortOrder) { -// case ID_SORT: -// Arrays.sort(a, new SortID()); -// lastSel = ID_SORT; -// break; -// case TYPE_SORT: -// Arrays.sort(a, new SortType()); -// lastSel = TYPE_SORT; -// break; -// } -// -// // remove all of the elements from the list so that we can re-add -// // them in a sorted order -// list.clear(); -// -// // add the sorted elements to the list and the table -// for (int j = 0; j < a.length; j++) { -// add(a[j]); -// } -// } - -// /** -// * Inner class to sort by bug id -// */ -// private class SortID implements Comparator<IBugzillaBug> { -// public int compare(IBugzillaBug f1, IBugzillaBug f2) { -// Integer id1 = f1.getId(); -// Integer id2 = f2.getId(); -// -// if(id1 != null && id2 != null) -// return id1.compareTo(id2); -// else if(id1 == null && id2 != null) -// return -1; -// else if(id1 != null && id2 == null) -// return 1; -// else -// return 0; -// } -// } -// -// /** -// * Inner class to sort by bug type (locally created or from the server) -// */ -// private class SortType implements Comparator<IBugzillaBug> { -// public int compare(IBugzillaBug f1, IBugzillaBug f2) { -// boolean isLocal1 = f1.isLocallyCreated(); -// boolean isLocal2 = f2.isLocallyCreated(); -// -// if (isLocal1 && !isLocal2) { -// return -1; -// } -// else if (!isLocal1 && isLocal2) { -// return 1; -// } -// -// // If they are both the same type, sort by ID -// Integer id1 = f1.getId(); -// Integer id2 = f2.getId(); -// -// if(id1 != null && id2 != null) -// return id1.compareTo(id2); -// else if(id1 == null && id2 != null) -// return -1; -// else if(id1 != null && id2 == null) -// return 1; -// else -// return 0; -// } -// } - -// /** -// * Saves the given report to the offlineReportsFile, or, if it already -// * exists in the file, updates it. -// * -// * @param bug -// * The bug to add/update. -// */ -// public static void saveOffline(IBugzillaBug bug, boolean saveChosen) throws -// CoreException { -// OfflineTaskManager file = BugzillaPlugin.getDefault().getOfflineReports(); -// // If there is already an offline report for this bug, update the file. -// if (bug.isSavedOffline()) { -// file.update(); -// } -// // If this bug has not been saved offline before, add it to the file. -// else { -// int index = -1; -// // If there is already an offline report with the same id, don't -// // save this report. -// if ((index = file.find(bug.getId())) >= 0) { -// removeReport(getOfflineBugs().get(index)); -// // MessageDialog.openInformation(null, "Bug's Id is already -// // used.", "There is already a bug saved offline with an -// // identical id."); -// // return; -// } -// file.add(bug, saveChosen); -// bug.setOfflineState(true); -// // file.sort(OfflineTaskManager.lastSel); -// } -// } - -// public static List<IBugzillaBug> getOfflineBugs() { -// OfflineTaskManager file = BugzillaPlugin.getDefault().getOfflineReports(); -// return file.elements(); -// } -// -// /** -// * Removes the given report from the offlineReportsFile. -// * -// * @param bug -// * The report to remove. -// */ -// public static void removeReport(IBugzillaBug bug) { -// ArrayList<IBugzillaBug> bugList = new ArrayList<IBugzillaBug>(); -// bugList.add(bug); -// BugzillaPlugin.getDefault().getOfflineReports().remove(bugList); -// } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/RepositoryAwareStatusHandler.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/RepositoryAwareStatusHandler.java deleted file mode 100644 index 7aab3da9d..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/RepositoryAwareStatusHandler.java +++ /dev/null @@ -1,46 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui; - -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Status; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.mylar.context.core.IStatusHandler; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.PlatformUI; - -/** - * @author Mik Kersten - */ -public class RepositoryAwareStatusHandler implements IStatusHandler { - - protected static final String ERROR_MESSAGE = "Please report the following error by following the bugs link at:\n" - + "http://eclipse.org/mylar\n\n" - + "For details on this error please open the PDE Runtime -> Error Log view"; - - // TODO: implement option to report bug - public void notify(final Status status, boolean informUser) { - if (informUser && Platform.isRunning()) { - try { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - Shell shell = null; - if (PlatformUI.getWorkbench() != null - && PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null) { - shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); - } - ErrorDialog.openError(shell, "Mylar Error", ERROR_MESSAGE, status); - } - }); - } catch (Throwable t) { - status.getException().printStackTrace(); - } - } - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/RepositoryTaskDecorator.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/RepositoryTaskDecorator.java deleted file mode 100644 index 2e87f973c..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/RepositoryTaskDecorator.java +++ /dev/null @@ -1,101 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui; - -import java.net.MalformedURLException; -import java.net.URL; - -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.viewers.IDecoration; -import org.eclipse.jface.viewers.ILabelProviderListener; -import org.eclipse.jface.viewers.ILightweightLabelDecorator; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.AbstractRepositoryConnectorUi; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Mik Kersten - */ -public class RepositoryTaskDecorator implements ILightweightLabelDecorator { - - public void decorate(Object element, IDecoration decoration) { - if (element instanceof AbstractRepositoryQuery) { - AbstractRepositoryQuery query = (AbstractRepositoryQuery)element; - String repositoryUrl = query.getRepositoryUrl(); - if (repositoryUrl != null) { - try { - URL url = new URL(repositoryUrl); - decoration.addSuffix(" [" + url.getHost() + "]"); - } catch (MalformedURLException e) { - decoration.addSuffix(" [ <unknown host> ]"); - } - } - if (query.isSynchronizing()) { - decoration.addOverlay(TaskListImages.OVERLAY_SYNCHRONIZING, IDecoration.TOP_LEFT); - } - } else if (element instanceof AbstractRepositoryTask) { - AbstractRepositoryTask task = (AbstractRepositoryTask)element; - AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager().getRepositoryConnector(task.getRepositoryKind()); - AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getRepositoryUi( - task.getRepositoryKind()); - TaskRepository repository = TasksUiPlugin.getRepositoryManager().getRepository(task.getRepositoryKind(), task.getRepositoryUrl()); - if (!connectorUi.hasRichEditor()) { - decoration.addOverlay(TaskListImages.OVERLAY_WEB, IDecoration.BOTTOM_LEFT); - } else if (connector != null && connector.hasRepositoryContext(repository, task)) { - decoration.addOverlay(TaskListImages.OVERLAY_REPOSITORY_CONTEXT, IDecoration.BOTTOM_LEFT); - } else { - decoration.addOverlay(TaskListImages.OVERLAY_REPOSITORY, IDecoration.BOTTOM_LEFT); - } - if (task.isSynchronizing()) { - decoration.addOverlay(TaskListImages.OVERLAY_SYNCHRONIZING, IDecoration.TOP_LEFT); - } - } else if (element instanceof AbstractQueryHit) { - ITask correspondingTask = ((AbstractQueryHit)element).getCorrespondingTask(); - decorate(correspondingTask, decoration); - } else if (element instanceof ITask) { - String url = ((ITask)element).getUrl(); - if (url != null && !url.trim().equals("") && !url.equals("http://")) { - decoration.addOverlay(TaskListImages.OVERLAY_WEB, IDecoration.BOTTOM_LEFT); - } - } else if (element instanceof TaskRepository) { - ImageDescriptor overlay = TasksUiPlugin.getDefault().getOverlayIcon(((TaskRepository)element).getKind()); - if (overlay != null) { - decoration.addOverlay(overlay, IDecoration.BOTTOM_RIGHT); - } - } - } - - public void addListener(ILabelProviderListener listener) { - // ignore - - } - - public void dispose() { - // ignore - - } - - public boolean isLabelProperty(Object element, String property) { - return false; - } - - public void removeListener(ILabelProviderListener listener) { - // ignore - - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/RetrieveTitleFromUrlJob.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/RetrieveTitleFromUrlJob.java deleted file mode 100644 index 0479357bf..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/RetrieveTitleFromUrlJob.java +++ /dev/null @@ -1,118 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.swt.SWT; -import org.eclipse.swt.browser.Browser; -import org.eclipse.swt.browser.TitleEvent; -import org.eclipse.swt.browser.TitleListener; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Shell; - -/** - * Waits for the title from the browser - * - * @author Wesley Coelho - * @author Mik Kersten - */ -public abstract class RetrieveTitleFromUrlJob extends Job implements TitleListener { - - public static final String LABEL_TITLE = "Retrieving description from URL"; - - private final static long MAX_WAIT_TIME_MILLIS = 1000 * 10; // (10 Seconds) - - private final static long SLEEP_INTERVAL_MILLIS = 500; - - private String url = null; - - private String pageTitle = null; - - private boolean retrievalFailed = false; - - private long timeWaitedMillis = 0; - - boolean ignoreChangeCall = false; - - private boolean titleRetrieved = false; - - public RetrieveTitleFromUrlJob(String url) { - super(LABEL_TITLE); - this.url = url; - } - - protected abstract void setTitle(String pageTitle); - - @Override - public IStatus run(IProgressMonitor monitor) { - - Display.getDefault().asyncExec(new Runnable() { - public void run() { - final Shell shell = new Shell(Display.getDefault()); - shell.setVisible(false); - Browser browser = new Browser(shell, SWT.NONE); - browser.addTitleListener(RetrieveTitleFromUrlJob.this); - browser.setUrl(url); - } - }); - - while (pageTitle == null && !retrievalFailed && (timeWaitedMillis <= MAX_WAIT_TIME_MILLIS)) { - try { - Thread.sleep(SLEEP_INTERVAL_MILLIS); - } catch (InterruptedException e) { - MylarStatusHandler.fail(e, "Thread interrupted during sleep", false); - } - timeWaitedMillis += SLEEP_INTERVAL_MILLIS; - } - - Display.getDefault().asyncExec(new Runnable() { - public void run() { - if (pageTitle == null) { - pageTitle = url; - titleRetrieved = false; - } else { - titleRetrieved = true; - } - setTitle(pageTitle); - } - }); - return Status.OK_STATUS; - } - - public void changed(TitleEvent event) { - if (!ignoreChangeCall) { - if (event.title.equals(url)) { - return; - } else { - ignoreChangeCall = true; - if (event.title.equals(url + "/") || event.title.equals("Object not found!") - || event.title.equals("No page to display") || event.title.equals("Cannot find server") - || event.title.equals("Invalid Bug ID")) { - retrievalFailed = true; - } else { - pageTitle = event.title; - } - } - } - } - - public boolean isTitleRetrieved() { - return titleRetrieved; - } - - public String getPageTitle() { - return pageTitle; - } -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ScheduledTaskListSynchJob.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ScheduledTaskListSynchJob.java deleted file mode 100644 index 99d4af97c..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ScheduledTaskListSynchJob.java +++ /dev/null @@ -1,143 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui; - -import java.util.Collections; -import java.util.List; -import java.util.Set; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.IJobChangeEvent; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.core.runtime.jobs.JobChangeAdapter; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.TaskList; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TaskListManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Rob Elves - */ -public class ScheduledTaskListSynchJob extends Job { - - private static final String LABEL_TASK = "Task Repository Synchronization"; - - private static final String JOB_NAME = "Synchronizing repository tasks"; - - private long scheduleDelay = 1000 * 60 * 20;// 20 minutes default - - private TaskList taskList = null; - - private static long count = 0; - - private TaskListManager taskListManager; - - private List<TaskRepository> repositories = null; - - public ScheduledTaskListSynchJob(long schedule, TaskListManager taskListManager) { - super(JOB_NAME); - this.scheduleDelay = schedule; - this.taskListManager = taskListManager; - this.setSystem(true); - this.setPriority(Job.BUILD); - } - - public ScheduledTaskListSynchJob(TaskListManager taskListManager) { - super(JOB_NAME); - this.taskListManager = taskListManager; - this.setPriority(Job.BUILD); - this.scheduleDelay = -1; - } - - public IStatus run(IProgressMonitor monitor) { - try { - if (monitor == null) { - monitor = new NullProgressMonitor(); - } - - taskList = taskListManager.getTaskList(); - if (repositories == null) { - repositories = TasksUiPlugin.getRepositoryManager().getAllRepositories(); - } - monitor.beginTask(LABEL_TASK, repositories.size()); - - for (final TaskRepository repository : repositories) { - if (monitor.isCanceled()) { - scheduleDelay = -1; - throw new OperationCanceledException(); - } - final AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager() - .getRepositoryConnector(repository.getKind()); - if (connector == null) { - monitor.worked(1); - continue; - } - - Set<AbstractRepositoryQuery> queries = Collections.unmodifiableSet(taskList - .getRepositoryQueries(repository.getUrl())); - if (queries.size() > 0) { - if (connector != null) { - JobChangeAdapter jobAdapter = new JobChangeAdapter() { - @Override - public void done(IJobChangeEvent event) { - TasksUiPlugin.getSynchronizationManager().synchronizeChanged(connector, repository); - } - }; - TasksUiPlugin.getSynchronizationManager().synchronize(connector, queries, jobAdapter, Job.DECORATE, 0, false); - } - } else { - TasksUiPlugin.getSynchronizationManager().synchronizeChanged(connector, repository); - } - monitor.worked(1); - } - } finally { - count++; - if (count == Long.MAX_VALUE) - count = 0; - if (monitor != null) { - monitor.done(); - } - } - return Status.OK_STATUS; - } - - public void setSchedule(long schedule) { - this.scheduleDelay = schedule; - } - - public void setRepositories(List<TaskRepository> repositories) { - this.repositories = repositories; - } - - /** - * for testing purposes - */ - public static long getCount() { - return count; - } - - /** for testing */ - public static void resetCount() { - count = 0; - } - - public long getScheduleDelay() { - return scheduleDelay; - } - -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskArchiveFilter.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskArchiveFilter.java deleted file mode 100644 index 41136b68e..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskArchiveFilter.java +++ /dev/null @@ -1,26 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui; - -import org.eclipse.mylar.tasks.core.TaskArchive; - -/** - * @author Mik Kersten - */ -public class TaskArchiveFilter extends AbstractTaskListFilter { - - public boolean select(Object element) { - if (element instanceof TaskArchive) { - return false; - } - return true; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskCompletionFilter.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskCompletionFilter.java deleted file mode 100644 index 651c191a7..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskCompletionFilter.java +++ /dev/null @@ -1,42 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui; - -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.ITask; - -/** - * @author Mik Kersten - */ -public class TaskCompletionFilter extends AbstractTaskListFilter { - - public boolean select(Object element) { - if (element instanceof ITask) { - ITask task = (ITask) element; - if (shouldAlwaysShow(task)) { - return true; - } - return !task.isCompleted(); - } else if (element instanceof AbstractQueryHit) { - AbstractQueryHit hit = (AbstractQueryHit) element; - if (hit.getCorrespondingTask() != null) { - if (shouldAlwaysShow(hit.getCorrespondingTask())) { - return true; - } else { - return !hit.getCorrespondingTask().isCompleted(); - } - } else { - return !hit.isCompleted(); - } - } - return true; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListBackupManager.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListBackupManager.java deleted file mode 100644 index 47d0351de..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListBackupManager.java +++ /dev/null @@ -1,211 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui; - -import java.io.File; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Comparator; -import java.util.Date; -import java.util.Timer; -import java.util.TimerTask; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.mylar.context.core.ContextCorePlugin; -import org.eclipse.mylar.internal.tasks.ui.util.TaskDataExportJob; -import org.eclipse.mylar.internal.tasks.ui.wizards.TaskDataExportWizard; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.progress.IProgressService; - -/** - * @author Rob Elves - */ -public class TaskListBackupManager implements IPropertyChangeListener { - - private static final String TITLE_TASKLIST_BACKUP = "Tasklist Backup"; - - private static final String BACKUP_JOB_NAME = "Scheduled task data backup"; - - public static final String BACKUP_FAILURE_MESSAGE = "Could not backup task data. Check backup preferences.\n"; - - private static final long SECOND = 1000; - - private static final long MINUTE = 60 * SECOND; - - private static final long HOUR = 60 * MINUTE; - - private static final long DAY = 24 * HOUR; - - private Timer timer; - - public TaskListBackupManager() { -// boolean enabled = MylarTaskListPlugin.getMylarCorePrefs().getBoolean( -// TaskListPreferenceConstants.BACKUP_AUTOMATICALLY); -// if (enabled) { - int days = TasksUiPlugin.getDefault().getPreferenceStore().getInt(TaskListPreferenceConstants.BACKUP_SCHEDULE); - if (days > 0) { - start(MINUTE); - } - } - - public void start(long delay) { - timer = new Timer(); - timer.schedule(new CheckBackupRequired(), delay, HOUR); - } - - public void stop() { - timer.cancel(); - } - - public void propertyChange(PropertyChangeEvent event) { -// if (event.getProperty().equals(TaskListPreferenceConstants.BACKUP_AUTOMATICALLY)) { -// if ((Boolean) event.getNewValue() == true) { -// start(MINUTE); -// } else { -// stop(); -// } -// } - } - - public void backupNow(boolean synchronous) { -// String destination = MylarTaskListPlugin.getMylarCorePrefs().getString( -// TaskListPreferenceConstants.BACKUP_FOLDER); - String destination = TasksUiPlugin.getDefault().getBackupFolderPath(); - - File backupFolder = new File(destination); - if (!backupFolder.exists()) { - backupFolder.mkdir(); - } - - removeOldBackups(backupFolder); - - String fileName = TaskDataExportWizard.getZipFileName(); - - if (!synchronous) { - - ExportJob export = new ExportJob(destination, fileName); - export.schedule(); - - } else { - - final TaskDataExportJob backupJob = new TaskDataExportJob(destination, true, fileName); - - IProgressService service = PlatformUI.getWorkbench().getProgressService(); - try { - service.run(true, false, backupJob); - TasksUiPlugin.getDefault().getPreferenceStore().setValue(TaskListPreferenceConstants.BACKUP_LAST, - new Date().getTime()); - } catch (InterruptedException e) { - // ignore - } catch (InvocationTargetException e) { - MessageDialog.openError(null, TITLE_TASKLIST_BACKUP, BACKUP_FAILURE_MESSAGE); - } - - } - } - - /** public for testing purposes */ - public void removeOldBackups(File folder) { - - int maxBackups = TasksUiPlugin.getDefault().getPreferenceStore().getInt(TaskListPreferenceConstants.BACKUP_MAXFILES); - - File[] files = folder.listFiles(); - ArrayList<File> backupFiles = new ArrayList<File>(); - for (File file : files) { - if (file.getName().startsWith(TaskDataExportWizard.ZIP_FILE_PREFIX)) { - backupFiles.add(file); - } - } - - File[] backupFileArray = backupFiles.toArray(new File[backupFiles.size()]); - - if (backupFileArray != null && backupFileArray.length > 0) { - Arrays.sort(backupFileArray, new Comparator<File>() { - public int compare(File file1, File file2) { - return new Long((file1).lastModified()).compareTo(new Long((file2).lastModified())); - } - - }); - - int toomany = backupFileArray.length - maxBackups; - if (toomany > 0) { - for (int x = 0; x < toomany; x++) { - if(backupFileArray[x] != null) { - backupFileArray[x].delete(); - } - } - } - } - } - - class CheckBackupRequired extends TimerTask { - - @Override - public void run() { - if (!Platform.isRunning() || ContextCorePlugin.getDefault() == null) { - return; - } else { - long lastBackup = TasksUiPlugin.getDefault().getPreferenceStore().getLong( - TaskListPreferenceConstants.BACKUP_LAST); - int days = TasksUiPlugin.getDefault().getPreferenceStore().getInt(TaskListPreferenceConstants.BACKUP_SCHEDULE); - long waitPeriod = days * DAY; - final long now = new Date().getTime(); - - if ((now - lastBackup) > waitPeriod) { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - backupNow(false); - } - }); - } - } - } - } - - static class ExportJob extends Job { - - final TaskDataExportJob backupJob; - - public ExportJob(String destination, String filename) { - super(BACKUP_JOB_NAME); - backupJob = new TaskDataExportJob(destination, true, filename); - } - - @Override - protected IStatus run(IProgressMonitor monitor) { - try { - if (Platform.isRunning()) { - backupJob.run(monitor); - TasksUiPlugin.getDefault().getPreferenceStore().setValue(TaskListPreferenceConstants.BACKUP_LAST, - new Date().getTime()); - } - } catch (InvocationTargetException e) { - MessageDialog - .openError(null, BACKUP_JOB_NAME, - "Error occured during scheduled tasklist backup.\nCheck settings on Tasklist preferences page."); - } catch (InterruptedException e) { - return Status.CANCEL_STATUS; - } - return Status.OK_STATUS; - } - - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListColorsAndFonts.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListColorsAndFonts.java deleted file mode 100644 index 062867edb..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListColorsAndFonts.java +++ /dev/null @@ -1,113 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui; - -import java.lang.reflect.Field; - -import org.eclipse.jface.resource.JFaceResources; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.FontData; -import org.eclipse.swt.widgets.Display; - -/** - * @author Mik Kersten - */ -public class TaskListColorsAndFonts { - - public static final Color BACKGROUND_ARCHIVE = new Color(Display.getDefault(), 225, 226, 246); - - public static final Color COLOR_GRAY_LIGHT = new Color(Display.getDefault(), 170, 170, 170); - - public static final Color COLOR_TASK_COMPLETED = new Color(Display.getDefault(), 170, 170, 170); - - public static final Color COLOR_TASK_ACTIVE = new Color(Display.getDefault(), 36, 22, 50); - - public static final Color COLOR_LABEL_CAUTION = new Color(Display.getDefault(), 200, 10, 30); - - public static final Color COLOR_HYPERLINK = new Color(Display.getDefault(), 0, 0, 255); - - public static final Color COLOR_SPELLING_ERROR = new Color(Display.getDefault(), 255, 0, 0); - - public static final Font BOLD = JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT); - - public static final Font ITALIC = JFaceResources.getFontRegistry().getItalic(JFaceResources.DEFAULT_FONT); - - public static Font STRIKETHROUGH; - - public static final String THEME_COLOR_TASKLIST_CATEGORY = "org.eclipse.mylar.tasklist.ui.colors.background.category"; - - public static final String THEME_COLOR_TASK_OVERDUE = "org.eclipse.mylar.tasklist.ui.colors.foreground.overdue"; - - public static final String THEME_COLOR_TASK_THISWEEK_SCHEDULED = "org.eclipse.mylar.tasklist.ui.colors.foreground.thisweek.scheduled"; - - public static final String THEME_COLOR_TASK_TODAY_SCHEDULED = "org.eclipse.mylar.tasklist.ui.colors.foreground.today.scheduled"; - - public static final String THEME_COLOR_TASK_TODAY_COMPLETED = "org.eclipse.mylar.tasklist.ui.colors.foreground.today.completed"; - - static { - Font defaultFont = JFaceResources.getFontRegistry().get(JFaceResources.DEFAULT_FONT); - FontData[] defaultData = defaultFont.getFontData(); - if (defaultData != null && defaultData.length == 1) { - FontData data = new FontData(defaultData[0].getName(), defaultData[0].getHeight(), defaultData[0] - .getStyle()); - - // NOTE: Windowx XP only, for: data.data.lfStrikeOut = 1; - try { - Field dataField = data.getClass().getDeclaredField("data"); - Object dataObject = dataField.get(data); - Class clazz = dataObject.getClass().getSuperclass(); - Field strikeOutFiled = clazz.getDeclaredField("lfStrikeOut"); - strikeOutFiled.set(dataObject, (byte) 1); - STRIKETHROUGH = new Font(Display.getCurrent(), data); - } catch (Throwable t) { - // Linux or other platform - STRIKETHROUGH = defaultFont; - } - } else { - STRIKETHROUGH = defaultFont; - } - } - - /** - * NOTE: disposal of JFaceResources fonts handled by registry. - */ - public static void dispose() { - if (STRIKETHROUGH != null && !STRIKETHROUGH.isDisposed()) { - STRIKETHROUGH.dispose(); - } - BACKGROUND_ARCHIVE.dispose(); - COLOR_LABEL_CAUTION.dispose(); - COLOR_GRAY_LIGHT.dispose(); - COLOR_TASK_COMPLETED.dispose(); - COLOR_TASK_ACTIVE.dispose(); - COLOR_HYPERLINK.dispose(); - COLOR_SPELLING_ERROR.dispose(); - } - - - public static boolean isTaskListTheme(String property) { - if (property == null) { - return false; - } else { - return property.equals(TaskListColorsAndFonts.THEME_COLOR_TASKLIST_CATEGORY) - || property.equals(TaskListColorsAndFonts.THEME_COLOR_TASK_OVERDUE) - || property.equals(TaskListColorsAndFonts.THEME_COLOR_TASK_TODAY_COMPLETED) - || property.equals(TaskListColorsAndFonts.THEME_COLOR_TASK_TODAY_SCHEDULED) - || property.equals(TaskListColorsAndFonts.THEME_COLOR_TASK_THISWEEK_SCHEDULED); - } - } - - - public static final String TASK_EDITOR_FONT = "org.eclipse.mylar.tasklist.ui.fonts.task.editor.comment"; - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListImages.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListImages.java deleted file mode 100644 index 8c93e0926..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListImages.java +++ /dev/null @@ -1,236 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -/* - * Created on Apr 20, 2004 - */ -package org.eclipse.mylar.internal.tasks.ui; - -import java.net.MalformedURLException; -import java.net.URL; - -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.resource.ImageRegistry; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Point; - -/** - * @author Mik Kersten - */ -public class TaskListImages { - - private static ImageRegistry imageRegistry; - - private static final String T_ELCL = "elcl16"; - - private static final String T_EVIEW = "eview16"; - - private static final String T_TOOL = "etool16"; - - private static final String T_WIZBAN = "wizban"; - - public static final Point SIZE = new Point(16, 16); - - private static final URL baseURL = TasksUiPlugin.getDefault().getBundle().getEntry("/icons/"); - - public static final ImageDescriptor TASKLIST = create("eview16", "task-list.gif"); - - public static final ImageDescriptor REPOSITORY = create("eview16", "repository.gif"); - - public static final ImageDescriptor REPOSITORY_NEW = create("etool16", "repository-new.gif"); - - public static final ImageDescriptor REPOSITORIES = create("eview16", "repositories.gif"); - - public static final ImageDescriptor REMOVE = create(T_ELCL, "remove.gif"); - - public static final ImageDescriptor FILTER_COMPLETE = create(T_ELCL, "filter-complete.gif"); - - public static final ImageDescriptor FILTER_ARCHIVE = create(T_ELCL, "filter-archive.gif"); - - public static final ImageDescriptor FILTER_PRIORITY = create(T_ELCL, "filter-priority.gif"); - - public static final ImageDescriptor COLOR_PALETTE = create(T_ELCL, "color-palette.gif"); - - public static final ImageDescriptor TASK = createSize(create(T_TOOL, "task.gif"), SIZE); - - public static final ImageDescriptor TASK_COMPLETED = createSize(create(T_TOOL, "task-completed.gif"), SIZE); - - public static final ImageDescriptor TASK_NOTES = createSize(create(T_TOOL, "task-notes.gif"), SIZE); - - public static final ImageDescriptor TASK_REPOSITORY_NOTES = createSize(create(T_TOOL, "task-repository-notes.gif"), SIZE); - - public static final ImageDescriptor TASK_REPOSITORY_COMPLETED = createSize(create(T_TOOL, "task-repository-completed.gif"), SIZE); - - public static final ImageDescriptor TASK_NEW = create(T_TOOL, "task-new.gif"); - - public static final ImageDescriptor OVERLAY_WEB = create(T_TOOL, "overlay-web.gif"); - - public static final ImageDescriptor OVERLAY_SYNCHRONIZING = create(T_EVIEW, "overlay-synchronizing.gif"); - - public static final ImageDescriptor TASK_WEB = createWithOverlay(TASK, OVERLAY_WEB, false, true); - - public static final ImageDescriptor TASK_WEB_REMOTE = create(T_TOOL, "overlay-web.gif"); - - public static final ImageDescriptor CATEGORY = createSize(create(T_TOOL, "category.gif"), SIZE); - - public static final ImageDescriptor CATEGORY_NEW = create(T_TOOL, "category-new.gif"); - - public static final ImageDescriptor CATEGORY_ARCHIVE = createSize(create(T_TOOL, "category-archive.gif"), SIZE); - - public static final ImageDescriptor TASK_REMOTE = createSize(create(T_TOOL, "task-remote.gif"), SIZE); - - public static final ImageDescriptor TASK_REPOSITORY = create(T_TOOL, "task-repository.gif"); - - public static final ImageDescriptor TASK_REPOSITORY_NEW = create(T_TOOL, "task-repository-new.gif"); - - public static final ImageDescriptor COMMENT = create(T_TOOL, "comment.gif"); - - public static final ImageDescriptor PERSON = create(T_TOOL, "person.gif"); - - public static final ImageDescriptor CONTEXT_ATTACH = create(T_TOOL, "context-attach.gif"); - - public static final ImageDescriptor OVERLAY_INCOMMING = create(T_EVIEW, "overlay-incoming.gif"); - - public static final ImageDescriptor OVERLAY_OUTGOING = create(T_EVIEW, "overlay-outgoing.gif"); - - public static final ImageDescriptor OVERLAY_CONFLICT = create(T_EVIEW, "overlay-conflicting.gif"); - - public static final ImageDescriptor OVERLAY_REPOSITORY = create(T_EVIEW, "overlay-repository.gif"); - - public static final ImageDescriptor OVERLAY_REPOSITORY_CONTEXT = create(T_EVIEW, "overlay-repository-context.gif"); - - public static final ImageDescriptor STATUS_NORMAL = create(T_EVIEW, "status-normal.gif"); - - public static final ImageDescriptor STATUS_CONTEXT = create(T_EVIEW, "status-server-context.gif"); - - public static final ImageDescriptor STATUS_NORMAL_INCOMING = createWithOverlay( - STATUS_NORMAL, - OVERLAY_INCOMMING, true, true); - - public static final ImageDescriptor STATUS_NORMAL_OUTGOING = createWithOverlay( - STATUS_NORMAL, - OVERLAY_OUTGOING, true, true); - - public static final ImageDescriptor STATUS_NORMAL_CONFLICT = createWithOverlay( - STATUS_NORMAL, - OVERLAY_CONFLICT, true, true); - - public static final ImageDescriptor STATUS_CONTEXT_INCOMING = createWithOverlay( - STATUS_CONTEXT, - OVERLAY_INCOMMING, true, true); - - public static final ImageDescriptor STATUS_CONTEXT_OUTGOING = createWithOverlay( - STATUS_CONTEXT, - OVERLAY_OUTGOING, true, true); - - public static final ImageDescriptor STATUS_CONTEXT_CONFLICT = createWithOverlay( - STATUS_CONTEXT, - OVERLAY_CONFLICT, true, true); - - public static final ImageDescriptor QUERY = createSize(create(T_TOOL, "query.gif"), SIZE); - - public static final ImageDescriptor QUERY_NEW = create(T_TOOL, "query-new.gif"); - - public static final ImageDescriptor REPOSITORY_SYNCHRONIZE = create(T_TOOL, "repository-synchronize.gif"); - - public static final ImageDescriptor NAVIGATE_PREVIOUS = create(T_TOOL, "navigate-previous.gif"); - - public static final ImageDescriptor NAVIGATE_NEXT = create(T_TOOL, "navigate-next.gif"); - - public static final ImageDescriptor COPY = create(T_TOOL, "copy.png"); - - public static final ImageDescriptor GO_UP = create(T_TOOL, "go-up.gif"); - - public static final ImageDescriptor GO_INTO = create(T_TOOL, "go-into.gif"); - - public static final ImageDescriptor TASK_ACTIVE = createSize(create(T_TOOL, "task-active.gif"), SIZE); - - public static final ImageDescriptor TASK_INACTIVE = createSize(create(T_TOOL, "task-inactive.gif"), SIZE); - - public static final ImageDescriptor TASK_INACTIVE_CONTEXT = createSize(create(T_TOOL, "task-context.gif"), - SIZE); - - public static final ImageDescriptor TASK_COMPLETE = create(T_TOOL, "task-complete.gif"); - - public static final ImageDescriptor TASK_INCOMPLETE = create(T_TOOL, "task-incomplete.gif"); - - public static final ImageDescriptor COLLAPSE_ALL = create(T_ELCL, "collapseall.png"); - - public static final ImageDescriptor NOTIFICATION_CLOSE = create(T_EVIEW, "notification-close.gif"); - - public static final ImageDescriptor EXPAND_ALL = create(T_ELCL, "expandall.gif"); - - public static final ImageDescriptor PRIORITY_1 = createSize(create(T_EVIEW, "priority-1.gif"), SIZE); - - public static final ImageDescriptor PRIORITY_2 = createSize(create(T_EVIEW, "priority-2.gif"), SIZE); - - public static final ImageDescriptor PRIORITY_3 = createSize(create(T_EVIEW, "priority-3.gif"), SIZE); - - public static final ImageDescriptor PRIORITY_4 = createSize(create(T_EVIEW, "priority-4.gif"), SIZE); - - public static final ImageDescriptor PRIORITY_5 = createSize(create(T_EVIEW, "priority-5.gif"), SIZE); - - public static final ImageDescriptor CALENDAR = create(T_EVIEW, "task-activity.gif"); - - public static final ImageDescriptor BANNER_REPOSITORY = create(T_WIZBAN, "banner-repository.gif"); - - public static final ImageDescriptor BANNER_REPOSITORY_CONTEXT = create(T_WIZBAN, "banner-repository-context.gif"); - - private static ImageDescriptor create(String prefix, String name) { - try { - return ImageDescriptor.createFromURL(makeIconFileURL(prefix, name)); - } catch (MalformedURLException e) { - return ImageDescriptor.getMissingImageDescriptor(); - } - } - - private static ImageDescriptor createSize(ImageDescriptor base, Point size) { - return new TaskListImageDescriptor(base, size); - } - - private static ImageDescriptor createWithOverlay(ImageDescriptor base, ImageDescriptor overlay, boolean top, - boolean left) { - return new TaskListImageDescriptor(base, overlay, top, left); - } - - private static URL makeIconFileURL(String prefix, String name) throws MalformedURLException { - if (baseURL == null) - throw new MalformedURLException(); - - StringBuffer buffer = new StringBuffer(prefix); - buffer.append('/'); - buffer.append(name); - return new URL(baseURL, buffer.toString()); - } - - private static ImageRegistry getImageRegistry() { - if (imageRegistry == null) { - imageRegistry = new ImageRegistry(); - } - - return imageRegistry; - } - - /** - * Lazily initializes image map. - */ - public static Image getImage(ImageDescriptor imageDescriptor) { - ImageRegistry imageRegistry = getImageRegistry(); - - Image image = imageRegistry.get("" + imageDescriptor.hashCode()); - if (image == null) { - image = imageDescriptor.createImage(); - imageRegistry.put("" + imageDescriptor.hashCode(), image); - } - return image; - } -} - diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationIncoming.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationIncoming.java deleted file mode 100644 index 01fb8776a..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationIncoming.java +++ /dev/null @@ -1,115 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui; - -import java.util.Date; - -import org.eclipse.jface.viewers.DecoratingLabelProvider; -import org.eclipse.mylar.internal.tasks.ui.views.TaskElementLabelProvider; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.swt.graphics.Image; -import org.eclipse.ui.PlatformUI; - -/** - * @author Rob Elves - */ -public class TaskListNotificationIncoming implements ITaskListNotification { - - private final AbstractRepositoryTask task; - - private String description = null; - - private DecoratingLabelProvider labelProvider = new DecoratingLabelProvider(new TaskElementLabelProvider(), - PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator()); - - private Date date; - - public TaskListNotificationIncoming(AbstractRepositoryTask task) { - this.task = task; - } - - public String getDescription() { - return description; - } - - public String getLabel() { - return labelProvider.getText(task); - } - - public void setDescription(String description) { - this.description = description; - } - - public void openTask() { - - PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { - public void run() { - TaskUiUtil.refreshAndOpenTaskListElement(task); - } - }); - - } - - public Image getNotificationIcon() { - return labelProvider.getImage(task); - } -// -// public synchronized void setNotified(boolean notified) { -// task.setNotified(true); -// } -// -// public synchronized boolean isNotified() { -// return task.isNotified(); -// } - - public boolean equals(Object o) { - if (!(o instanceof TaskListNotificationIncoming)) { - return false; - } - TaskListNotificationIncoming notification = (TaskListNotificationIncoming) o; - return notification.getTask().equals(task); - } - - private ITask getTask() { - return task; - } - - public int hashCode() { - return task.hashCode(); - } - - public Image getOverlayIcon() { - return TaskListImages.getImage(TaskListImages.OVERLAY_INCOMMING); - } - - public Date getDate() { - return date; - } - - public void setDate(Date date) { - this.date = date; - } - - public int compareTo(Object anotherNotification) throws ClassCastException { - if (!(anotherNotification instanceof ITaskListNotification)) - throw new ClassCastException("A ITaskListNotification object expected."); - Date anotherDate = ((ITaskListNotification) anotherNotification).getDate(); - if(date != null && anotherDate != null) { - return date.compareTo(anotherDate); - } else if(date == null) { - return -1; - } else { - return 1; - } - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationManager.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationManager.java deleted file mode 100644 index ef4309803..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationManager.java +++ /dev/null @@ -1,215 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.events.ShellEvent; -import org.eclipse.swt.events.ShellListener; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.PlatformUI; - -/** - * @author Rob Elves - */ -public class TaskListNotificationManager implements IPropertyChangeListener { - - private static final String CLOSE_NOTIFICATION_JOB = "Close Notification Job"; - - private static final String OPEN_NOTIFICATION_JOB = "Open Notification Job"; - - private static final long CLOSE_POPUP_DELAY = 1000 * 12; - - private static final long OPEN_POPUP_DELAY = 1000 * 60; - - private static final boolean runSystem = true; - - private TaskListNotificationPopup popup; - - private Set<ITaskListNotification> notifications = new HashSet<ITaskListNotification>(); - - private Set<ITaskListNotification> currentlyNotifying = Collections.synchronizedSet(notifications); - - private List<ITaskListNotificationProvider> notificationProviders = new ArrayList<ITaskListNotificationProvider>(); - - private Job openJob = new Job(OPEN_NOTIFICATION_JOB) { - @Override - protected IStatus run(IProgressMonitor monitor) { - try { - - if (!PlatformUI.getWorkbench().getDisplay().isDisposed()) { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - @SuppressWarnings("unchecked") - public void run() { - if ((popup != null && popup.close()) || popup == null) { - closeJob.cancel(); - collectNotifications(); - //setNotified(); - synchronized (TaskListNotificationManager.class) { - if (currentlyNotifying.size() > 0) { - popup = new TaskListNotificationPopup(new Shell(PlatformUI.getWorkbench() - .getDisplay())); - ArrayList toDisplay = new ArrayList<ITaskListNotification>(currentlyNotifying); - Collections.sort(toDisplay); - popup.setContents(toDisplay); - cleanNotified(); - popup.setBlockOnOpen(false); - popup.open(); - closeJob.setSystem(runSystem); - closeJob.schedule(CLOSE_POPUP_DELAY); - popup.getShell().addShellListener(SHELL_LISTENER); - } - } - } - - } - }); - } - } finally { - schedule(OPEN_POPUP_DELAY); - } - - if (monitor.isCanceled()) - return Status.CANCEL_STATUS; - - return Status.OK_STATUS; - } - - }; - - private Job closeJob = new Job(CLOSE_NOTIFICATION_JOB) { - - @Override - protected IStatus run(IProgressMonitor monitor) { - if (!PlatformUI.getWorkbench().getDisplay().isDisposed()) { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - if (popup != null) { - synchronized (popup) { - popup.close(); - } - } - } - }); - } - if (monitor.isCanceled()) - return Status.CANCEL_STATUS; - - return Status.OK_STATUS; - } - - }; - - private ShellListener SHELL_LISTENER = new ShellListener() { - - public void shellClosed(ShellEvent arg0) { - } - - public void shellDeactivated(ShellEvent arg0) { - popup.close(); - // don't want notifications right away - openJob.cancel(); - openJob.setSystem(runSystem); - openJob.schedule(OPEN_POPUP_DELAY); - } - - public void shellActivated(ShellEvent arg0) { - closeJob.cancel(); - } - - public void shellDeiconified(ShellEvent arg0) { - // ingore - } - - public void shellIconified(ShellEvent arg0) { - // ignore - } - }; - - -// private void setNotified() { -// for (ITaskListNotification notification : currentlyNotifying) { -// notification.setNotified(true); -// } -// } - - private void cleanNotified() { - currentlyNotifying.clear(); - } - - /** public for testing */ - public void collectNotifications() { - for (ITaskListNotificationProvider provider : notificationProviders) { - currentlyNotifying.addAll(provider.getNotifications()); - } - } - - public void startNotification(long initialStartupTime) { - if (TasksUiPlugin.getDefault().getPreferenceStore().getBoolean(TaskListPreferenceConstants.NOTIFICATIONS_ENABLED)) { - if (!openJob.cancel()) { - try { - openJob.join(); - } catch (InterruptedException e) { - // ignore - } - } - openJob.setSystem(runSystem); - openJob.schedule(initialStartupTime); - } - } - - public void stopNotification() { - openJob.cancel(); - closeJob.cancel(); - if (popup != null) { - popup.close(); - } - } - - public void addNotificationProvider(ITaskListNotificationProvider notification_provider) { - notificationProviders.add(notification_provider); - } - - public void removeNotificationProvider(ITaskListNotificationProvider notification_provider) { - notificationProviders.remove(notification_provider); - } - - /** - * public for testing purposes - */ - public Set<ITaskListNotification> getNotifications() { - synchronized (TaskListNotificationManager.class) { - return currentlyNotifying; - } - } - - public void propertyChange(PropertyChangeEvent event) { - if (event.getProperty().equals(TaskListPreferenceConstants.NOTIFICATIONS_ENABLED)) { - if ((Boolean)event.getNewValue() == true) { - startNotification(OPEN_POPUP_DELAY); - } else { - stopNotification(); - } - } - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationPopup.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationPopup.java deleted file mode 100644 index 7bf063e00..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationPopup.java +++ /dev/null @@ -1,206 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui; - -import java.util.List; - -import org.eclipse.jface.dialogs.PopupDialog; -import org.eclipse.jface.layout.GridDataFactory; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.layout.RowLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.forms.events.HyperlinkAdapter; -import org.eclipse.ui.forms.events.HyperlinkEvent; -import org.eclipse.ui.forms.widgets.Form; -import org.eclipse.ui.forms.widgets.FormToolkit; -import org.eclipse.ui.forms.widgets.Hyperlink; -import org.eclipse.ui.forms.widgets.ImageHyperlink; -import org.eclipse.ui.forms.widgets.Section; - -/** - * @author Rob Elves - */ -public class TaskListNotificationPopup extends PopupDialog { - - private static final String NOTIFICATIONS_HIDDEN = " more changes..."; - - private static final int NUM_NOTIFICATIONS_TO_DISPLAY = 3; - - private static final String MYLAR_NOTIFICATION_LABEL = "Mylar Notification"; - - private FormToolkit toolkit; - - private Form form; - - private Rectangle bounds; - - private List<ITaskListNotification> notifications; - - private Composite sectionClient; - - public TaskListNotificationPopup(Shell parent) { - super(parent, PopupDialog.INFOPOPUP_SHELLSTYLE | SWT.ON_TOP, false, false, false, false, null, null); - } - - public void setContents(List<ITaskListNotification> notifications) { - this.notifications = notifications; - } - - protected Control createContents(Composite parent) { - getShell().setBackground(getShell().getDisplay().getSystemColor(SWT.COLOR_GRAY)); - return createDialogArea(parent); - } - - protected final Control createDialogArea(final Composite parent) { - - getShell().setText(MYLAR_NOTIFICATION_LABEL); - - toolkit = new FormToolkit(parent.getDisplay()); - form = toolkit.createForm(parent); - form.getBody().setLayout(new GridLayout()); - - Section section = toolkit.createSection(form.getBody(), Section.TITLE_BAR); - - section.setText(MYLAR_NOTIFICATION_LABEL); - section.setLayout(new GridLayout()); - - sectionClient = toolkit.createComposite(section); - sectionClient.setLayout(new GridLayout(2, false)); - int count = 0; - for (final ITaskListNotification notification : notifications) { - if (count < NUM_NOTIFICATIONS_TO_DISPLAY) { - Label notificationLabelIcon = toolkit.createLabel(sectionClient, ""); - notificationLabelIcon.setImage(notification.getOverlayIcon()); - ImageHyperlink link = toolkit.createImageHyperlink(sectionClient, SWT.BEGINNING | SWT.WRAP); - link.setText(notification.getLabel()); - link.setImage(notification.getNotificationIcon()); - link.addHyperlinkListener(new HyperlinkAdapter() { - public void linkActivated(HyperlinkEvent e) { - notification.openTask(); - IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); - if (window != null) { - Shell windowShell = window.getShell(); - if (windowShell != null) { - windowShell.setMaximized(true); - windowShell.open(); - } - } - } - }); - - String descriptionText = null; - if (notification.getDescription() != null && notification.getDescription().length() > 40) { - String truncated = notification.getDescription().substring(0, 35); - descriptionText = truncated + "..."; - } else if (notification.getDescription() != null) { - descriptionText = notification.getDescription(); - } - if (descriptionText != null) { - Label descriptionLabel = toolkit.createLabel(sectionClient, descriptionText); - GridDataFactory.fillDefaults().span(2, SWT.DEFAULT).applyTo(descriptionLabel); - } - } else { - int numNotificationsRemain = notifications.size() - count; - Hyperlink remainingHyperlink = toolkit.createHyperlink(sectionClient, numNotificationsRemain+NOTIFICATIONS_HIDDEN, SWT.NONE); - GridDataFactory.fillDefaults().span(2, SWT.DEFAULT).applyTo(remainingHyperlink); - remainingHyperlink.addHyperlinkListener(new HyperlinkAdapter() { - - @Override - public void linkActivated(HyperlinkEvent e) { - TaskListView.getFromActivePerspective().setFocus(); - IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); - if (window != null) { - Shell windowShell = window.getShell(); - if (windowShell != null) { - windowShell.setMaximized(true); - windowShell.open(); - } - } - }}); - break; - } - count++; - } - - section.setClient(sectionClient); - - Composite buttonsComposite = toolkit.createComposite(section); - section.setTextClient(buttonsComposite); - buttonsComposite.setLayout(new RowLayout()); - buttonsComposite.setBackground(section.getTitleBarBackground()); - final ImageHyperlink closeHyperlink = toolkit.createImageHyperlink(buttonsComposite, SWT.NONE); - // closeHyperlink.setBackgroundMode(SWT.INHERIT_FORCE); - closeHyperlink.setBackground(section.getTitleBarBackground()); - closeHyperlink.setImage(TaskListImages.getImage(TaskListImages.NOTIFICATION_CLOSE)); - closeHyperlink.addHyperlinkListener(new HyperlinkAdapter() { - public void linkActivated(HyperlinkEvent e) { - close(); - } - }); - - form.pack(); - return parent; - } - - /** - * Initialize the shell's bounds. - */ - public void initializeBounds() { - getShell().setBounds(restoreBounds()); - } - - private Rectangle restoreBounds() { - bounds = form.getBounds(); - Rectangle maxBounds = null; - if (getShell() != null && !getShell().isDisposed()) - maxBounds = getShell().getDisplay().getClientArea(); - else { - // fallback - Display display = Display.getCurrent(); - if (display == null) - display = Display.getDefault(); - if (display != null && !display.isDisposed()) - maxBounds = display.getBounds(); - } - - if (bounds.width > -1 && bounds.height > -1) { - if (maxBounds != null) { - bounds.width = Math.min(bounds.width, maxBounds.width); - bounds.height = Math.min(bounds.height, maxBounds.height); - } - // Enforce an absolute minimal size - bounds.width = Math.max(bounds.width, 30); - bounds.height = Math.max(bounds.height, 30); - } - - if (bounds.x > -1 && bounds.y > -1 && maxBounds != null) { - bounds.x = Math.max(bounds.x, maxBounds.x); - bounds.y = Math.max(bounds.y, maxBounds.y); - - if (bounds.width > -1 && bounds.height > -1) { - bounds.x = maxBounds.width - bounds.width; - bounds.y = maxBounds.height - bounds.height; - } - } - return bounds; - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationQueryIncoming.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationQueryIncoming.java deleted file mode 100644 index 23b45ca82..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationQueryIncoming.java +++ /dev/null @@ -1,100 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui; - -import java.util.Date; - -import org.eclipse.jface.viewers.DecoratingLabelProvider; -import org.eclipse.mylar.internal.tasks.ui.views.TaskElementLabelProvider; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.swt.graphics.Image; -import org.eclipse.ui.PlatformUI; - -/** - * @author Rob Elves - */ -public class TaskListNotificationQueryIncoming implements ITaskListNotification { - - private final AbstractQueryHit hit; - - private DecoratingLabelProvider labelProvider = new DecoratingLabelProvider(new TaskElementLabelProvider(), - PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator()); - - private Date date; - - public TaskListNotificationQueryIncoming(AbstractQueryHit hit) { - this.hit = hit; - } - - public String getDescription() { - return hit.getDescription(); - } - - public String getLabel() { - if (labelProvider.getText(hit).length() > 40) { - String truncated = labelProvider.getText(hit).substring(0, 35); - return truncated + "..."; - } - return labelProvider.getText(hit); - } - - public void openTask() { - - PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { - public void run() { - TaskUiUtil.refreshAndOpenTaskListElement(hit); - } - }); - - } - - public Image getNotificationIcon() { - return labelProvider.getImage(hit); - } - - public boolean equals(Object o) { - if (!(o instanceof TaskListNotificationQueryIncoming)) { - return false; - } - TaskListNotificationQueryIncoming notification = (TaskListNotificationQueryIncoming) o; - return notification.getDescription().equals(hit.getDescription()); - } - - public int hashCode() { - return hit.getDescription().hashCode(); - } - - public Image getOverlayIcon() { - return TaskListImages.getImage(TaskListImages.OVERLAY_INCOMMING); - } - - public Date getDate() { - return date; - } - - public void setDate(Date date) { - this.date = date; - } - - public int compareTo(Object anotherNotification) throws ClassCastException { - if (!(anotherNotification instanceof ITaskListNotification)) - throw new ClassCastException("A ITaskListNotification object expected."); - Date anotherDate = ((ITaskListNotification) anotherNotification).getDate(); - if(date != null && anotherDate != null) { - return date.compareTo(anotherDate); - } else if(date == null) { - return -1; - } else { - return 1; - } - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationReminder.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationReminder.java deleted file mode 100644 index bb5620655..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationReminder.java +++ /dev/null @@ -1,104 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui; - -import java.util.Date; - -import org.eclipse.jface.viewers.DecoratingLabelProvider; -import org.eclipse.mylar.internal.tasks.ui.views.TaskElementLabelProvider; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.swt.graphics.Image; -import org.eclipse.ui.PlatformUI; - -/** - * @author Rob Elves - */ -public class TaskListNotificationReminder implements ITaskListNotification { - - private final ITask task; - - private DecoratingLabelProvider labelProvider = new DecoratingLabelProvider(new TaskElementLabelProvider(), - PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator()); - - private Date date; - - public TaskListNotificationReminder(ITask task) { - this.task = task; - } - - public String getDescription() { - return null; - } - - public String getLabel() { - if (labelProvider.getText(task).length() > 40) { - String truncated = labelProvider.getText(task).substring(0, 35); - return truncated + "..."; - } - return labelProvider.getText(task); - } - - public void openTask() { - - PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { - public void run() { - TaskUiUtil.refreshAndOpenTaskListElement(task); - } - }); - - } - - public Image getNotificationIcon() { - return labelProvider.getImage(task); - } - - public Image getOverlayIcon() { - return TaskListImages.getImage(TaskListImages.CALENDAR); - } - - public boolean equals(Object o) { - if (!(o instanceof TaskListNotificationReminder)) { - return false; - } - TaskListNotificationReminder notification = (TaskListNotificationReminder) o; - return notification.getTask().equals(task); - } - - private ITask getTask() { - return task; - } - - public int hashCode() { - return task.hashCode(); - } - - public Date getDate() { - return date; - } - - public void setDate(Date date) { - this.date = date; - } - - public int compareTo(Object anotherNotification) throws ClassCastException { - if (!(anotherNotification instanceof ITaskListNotification)) - throw new ClassCastException("A ITaskListNotification object expected."); - Date anotherDate = ((ITaskListNotification) anotherNotification).getDate(); - if(date != null && anotherDate != null) { - return date.compareTo(anotherDate); - } else if(date == null) { - return -1; - } else { - return 1; - } - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListPreferenceConstants.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListPreferenceConstants.java deleted file mode 100644 index 85f00683d..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListPreferenceConstants.java +++ /dev/null @@ -1,71 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui; - -/** - * @author Mik Kersten - */ -public class TaskListPreferenceConstants { - - public static final String PLANNER_WIZARD_ID = "org.eclipse.mylar.tasklist.ui.planner.wizard"; - - public static final String PLANNER_EDITOR_ID = "org.eclipse.mylar.tasklist.ui.planner.editor"; - - public static final String REPORT_OPEN_EDITOR = "org.eclipse.mylar.tasklist.report.open.editor"; - - public static final String REPORT_OPEN_INTERNAL = "org.eclipse.mylar.tasklist.report.open.internal"; - - public static final String REPORT_DISABLE_INTERNAL = "org.eclipse.mylar.tasklist.report.disable.internal"; - - public static final String REPORT_OPEN_EXTERNAL = "org.eclipse.mylar.tasklist.report.open.external"; - - public static final String MULTIPLE_ACTIVE_TASKS = "org.eclipse.mylar.tasklist.active.multipe"; - - public static final String COPY_TASK_DATA = "org.eclipse.mylar.tasklist.preferences.copyTaskData"; - - public static final String TASK_EDITOR_ID = "org.eclipse.mylar.tasklist.ui.taskEditor"; - - public static final String CATEGORY_EDITOR_ID = "org.eclipse.mylar.tasklist.ui.catEditor"; - - public static final String SELECTED_PRIORITY = "org.eclipse.mylar.tasklist.filter.priority"; - - public static final String FILTER_COMPLETE_MODE = "org.eclipse.mylar.tasklist.filter.complete"; - - public static final String FILTER_ARCHIVE_MODE = "org.eclipse.mylar.tasklist.filter.archive"; - - public static final String FILTER_INCOMPLETE_MODE = "org.eclipse.mylar.tasklist.filter.incomplete"; - - public static final String SAVE_TASKLIST_MODE = "org.eclipse.mylar.tasklist.save.mode"; - - public static final String PREVIOUS_SAVE_DATE = "org.eclipse.mylar.tasklist.save.last"; - - public static final String CONTEXTS_MIGRATED = "org.eclipse.mylar.tasklist.repositories.migrated.single"; - - public static final String REPOSITORY_SYNCH_SCHEDULE_ENABLED = "org.eclipse.mylar.tasklist.repositories.synch.schedule"; - - public static final String REPOSITORY_SYNCH_SCHEDULE_MILISECONDS = "org.eclipse.mylar.tasklist.repositories.synch.schedule.miliseconds"; - - public static final String NOTIFICATIONS_ENABLED = "org.eclipse.mylar.tasklist.notifications.enabled"; - - public static final String BACKUP_SCHEDULE = "org.eclipse.mylar.tasklist.backup.schedule"; - - public static final String BACKUP_LAST = "org.eclipse.mylar.tasklist.backup.lastarchived"; - - public static final String BACKUP_MAXFILES = "org.eclipse.mylar.tasklist.backup.maxfiles"; - - public static final String PLANNING_STARTHOUR = "org.eclipse.mylar.tasklist.planning.starthour"; - - public static final String PLANNING_ENDHOUR = "org.eclipse.mylar.tasklist.planning.endhour"; - - public static final String ACTIVATE_ON_OPEN = "org.eclipse.mylar.tasks.ui.activate.onopen"; - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskPriorityFilter.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskPriorityFilter.java deleted file mode 100644 index c42535e2e..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskPriorityFilter.java +++ /dev/null @@ -1,61 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui; - -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.mylar.tasks.core.Task; - -/** - * @author Mik Kersten - * @author Ken Sueda - */ -public class TaskPriorityFilter extends AbstractTaskListFilter { - - private static final String PRIORITY_PREFIX = "P"; - - private String priorityLevel = Task.PriorityLevel.P5.toString(); - - public TaskPriorityFilter() { - displayPrioritiesAbove(TaskListView.getCurrentPriorityLevel()); - } - - public void displayPrioritiesAbove(String level) { - priorityLevel = level; - } - - public boolean select(Object element) { - if (element instanceof ITaskListElement) { - if (element instanceof AbstractQueryHit && ((AbstractQueryHit) element).getCorrespondingTask() != null) { - element = ((AbstractQueryHit) element).getCorrespondingTask(); - } - - if (element instanceof ITask) { - ITask task = (ITask) element; - if (shouldAlwaysShow(task)) { - return true; - } - } - String priority = ((ITaskListElement) element).getPriority(); - if (priority == null || !(priority.startsWith(PRIORITY_PREFIX))) { - return true; - } - if (priorityLevel.compareTo(((ITaskListElement) element).getPriority()) >= 0) { - return true; - } - return false; - } - return true; - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskReminderMenuContributor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskReminderMenuContributor.java deleted file mode 100644 index 0389552e8..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskReminderMenuContributor.java +++ /dev/null @@ -1,243 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.GregorianCalendar; -import java.util.List; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.jface.action.Separator; -import org.eclipse.jface.window.Window; -import org.eclipse.mylar.internal.tasks.ui.planner.DateSelectionDialog; -import org.eclipse.mylar.internal.tasks.ui.views.DatePicker; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractTaskContainer; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.PlatformUI; - -/** - * TODO: this has bloated, reafactor - * - * @author Rob Elves - * @author Mik Kersten - */ -public class TaskReminderMenuContributor implements IDynamicSubMenuContributor { - - private static final String LABEL_REMINDER = "Schedule"; - - private static final String LABEL_TODAY = "Today"; - - private static final String LABEL_NEXT_WEEK = "Next Week"; - - private static final String LABEL_FUTURE = "Two Weeks"; - - private static final String LABEL_CALENDAR = "Choose Date..."; - - private static final String LABEL_CLEAR = "Clear"; - - @SuppressWarnings("deprecation") - public MenuManager getSubMenuManager(final List<ITaskListElement> selectedElements) { - - final MenuManager subMenuManager = new MenuManager(LABEL_REMINDER); - - subMenuManager.setVisible(selectedElements.size() > 0 && !(selectedElements.get(0) instanceof AbstractTaskContainer || selectedElements.get(0) instanceof AbstractRepositoryQuery)); - - ITask selectedTask = null; - if (selectedElements.size() == 1) { - ITaskListElement selectedElement = selectedElements.get(0); - if (selectedElement instanceof ITask) { - selectedTask = (ITask) selectedElement; - } else if (selectedElement instanceof AbstractQueryHit) { - if (((AbstractQueryHit) selectedElement).getCorrespondingTask() != null) { - selectedTask = ((AbstractQueryHit) selectedElement).getCorrespondingTask(); - } - } - } - final ITask singleTask = selectedTask; - final List<ITask> tasks = new ArrayList<ITask>(); - for (ITaskListElement selectedElement : selectedElements) { - if (selectedElement instanceof ITask) { - tasks.add((ITask) selectedElement); - } else if (selectedElement instanceof AbstractQueryHit) { - if (((AbstractQueryHit) selectedElement).getCorrespondingTask() != null) { - tasks.add(((AbstractQueryHit) selectedElement).getCorrespondingTask()); - } - } - } - - Action action = new Action() { - @Override - public void run() { - Calendar reminderCalendar = GregorianCalendar.getInstance(); - TasksUiPlugin.getTaskListManager().setScheduledToday(reminderCalendar); - for (ITask task : tasks) { - TasksUiPlugin.getTaskListManager().setReminder(task, reminderCalendar.getTime()); - } - } - }; - action.setText(LABEL_TODAY); - action.setEnabled(canSchedule(singleTask, tasks)); - subMenuManager.add(action); - if (singleTask != null) { - if (TasksUiPlugin.getTaskListManager().isReminderToday(singleTask)) { - action.setChecked(true); - } - } - subMenuManager.add(new Separator()); - - final int today = Calendar.getInstance().get(Calendar.DAY_OF_WEEK); - boolean reachedEndOfWeek = false; - for (int i = today + 1; i <= 8 && !reachedEndOfWeek; i++) { - final int day = i; - action = new Action() { - @Override - public void run() { - Calendar reminderCalendar = GregorianCalendar.getInstance(); - int dueIn = day - today; - TasksUiPlugin.getTaskListManager().setSecheduledIn(reminderCalendar, dueIn); - for (ITask task : tasks) { - TasksUiPlugin.getTaskListManager().setReminder(task, reminderCalendar.getTime()); - } - } - }; - getDayLabel(i, action); - if (singleTask != null) { - if (singleTask != null && singleTask.getReminderDate() != null) { - int tasksCheduledOn = singleTask.getReminderDate().getDay(); - if (TasksUiPlugin.getTaskListManager().isReminderThisWeek(singleTask)) { - if (tasksCheduledOn + 1 == day) { - action.setChecked(true); - } else if (tasksCheduledOn == 0 && day == 8) { - action.setChecked(true); - } - } - } - } - action.setEnabled(canSchedule(singleTask, tasks)); - subMenuManager.add(action); - } - - subMenuManager.add(new Separator()); - - action = new Action() { - @Override - public void run() { - for (ITask task : tasks) { - TasksUiPlugin.getTaskListManager().setReminder(task, - TasksUiPlugin.getTaskListManager().getActivityNextWeek().getStart().getTime()); - } - } - }; - action.setText(LABEL_NEXT_WEEK); - action.setEnabled(canSchedule(singleTask, tasks)); - if (singleTask != null) { - if (TasksUiPlugin.getTaskListManager().isReminderAfterThisWeek(singleTask) - && !TasksUiPlugin.getTaskListManager().isReminderLater(singleTask)) { - action.setChecked(true); - } - } - subMenuManager.add(action); - - action = new Action() { - @Override - public void run() { - for (ITask task : tasks) { - TasksUiPlugin.getTaskListManager().setReminder(task, - TasksUiPlugin.getTaskListManager().getActivityFuture().getStart().getTime()); - } - } - }; - action.setText(LABEL_FUTURE); - action.setEnabled(canSchedule(singleTask, tasks)); - if (singleTask != null) { - if (TasksUiPlugin.getTaskListManager().isReminderLater(singleTask)) { - action.setChecked(true); - } - } - subMenuManager.add(action); - - subMenuManager.add(new Separator()); - - action = new Action() { - @Override - public void run() { - Calendar theCalendar = GregorianCalendar.getInstance(); - if (singleTask != null && singleTask.getReminderDate() != null) { - theCalendar.setTime(singleTask.getReminderDate()); - } - DateSelectionDialog reminderDialog = new DateSelectionDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), - theCalendar, DatePicker.TITLE_DIALOG); - int result = reminderDialog.open(); - if (result == Window.OK) { - for (ITask task : tasks) { - TasksUiPlugin.getTaskListManager().setReminder(task, reminderDialog.getDate()); - } - } - } - }; - action.setText(LABEL_CALENDAR); - action.setEnabled(canSchedule(singleTask, tasks)); - subMenuManager.add(action); - - action = new Action() { - @Override - public void run() { - for (ITask task : tasks) { - TasksUiPlugin.getTaskListManager().setReminder(task, null); - } - } - }; - action.setText(LABEL_CLEAR); - action.setEnabled(tasks.size() > 0); - subMenuManager.add(action); - return subMenuManager; - } - - private void getDayLabel(int i, Action action) { - switch (i) { - case Calendar.MONDAY: - action.setText("Monday"); - break; - case Calendar.TUESDAY: - action.setText("Tuesday"); - break; - case Calendar.WEDNESDAY: - action.setText("Wednesday"); - break; - case Calendar.THURSDAY: - action.setText("Thursday"); - break; - case Calendar.FRIDAY: - action.setText("Friday"); - break; - case Calendar.SATURDAY: - action.setText("Saturday"); - break; - case 8: - action.setText("Sunday"); - break; - default: - break; - } - } - - private boolean canSchedule(ITask singleTask, List<ITask> tasks) { - return (singleTask != null && !singleTask.isCompleted()) - || tasks.size() > 0; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskSearchPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskSearchPage.java deleted file mode 100644 index e88f4d0bb..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskSearchPage.java +++ /dev/null @@ -1,247 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.jface.dialogs.DialogPage; -import org.eclipse.jface.dialogs.IDialogSettings; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.mylar.internal.tasks.ui.search.AbstractRepositoryQueryPage; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.TaskRepositoryManager; -import org.eclipse.mylar.tasks.ui.AbstractRepositoryConnectorUi; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.search.ui.ISearchPage; -import org.eclipse.search.ui.ISearchPageContainer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Group; - -/** - * @author Rob Elves - */ -public class TaskSearchPage extends DialogPage implements ISearchPage { - - private static final String TITLE_REPOSITORY_SEARCH = "Repository Search"; - - private static final String PAGE_NAME = "TaskSearchPage"; - - private static final String STORE_REPO_ID = PAGE_NAME + ".REPO"; - - private Combo repositoryCombo; - - private TaskRepository repository; - - private Composite fParentComposite; - - private IDialogSettings fDialogSettings; - - private int currentPageIndex = -1; - - private boolean firstView = true; - - private WizardPage[] queryPages; - - private ISearchPageContainer pageContainer; - - public boolean performAction() { - saveDialogSettings(); - return ((ISearchPage) queryPages[currentPageIndex]).performAction(); - } - - public void setContainer(ISearchPageContainer container) { - this.pageContainer = container; - } - - public void createControl(Composite parent) { - fParentComposite = new Composite(parent, SWT.NONE); - GridLayout layout = new GridLayout(1, false); - layout.marginHeight = 0; - layout.marginWidth = 0; - fParentComposite.setLayout(layout); - GridData gd = new GridData(GridData.FILL_BOTH); - fParentComposite.setLayoutData(gd); - createRepositoryGroup(fParentComposite); - this.setControl(fParentComposite); - } - - private void createRepositoryGroup(Composite control) { - Group group = new Group(control, SWT.NONE); - group.setText("Repository"); - GridLayout layout = new GridLayout(); - layout.numColumns = 1; - group.setLayout(layout); - GridData gd = new GridData(GridData.FILL_HORIZONTAL); - gd.horizontalSpan = 1; - group.setLayoutData(gd); - - repositoryCombo = new Combo(group, SWT.SINGLE | SWT.BORDER); - repositoryCombo.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - displayQueryPage(repositoryCombo.getSelectionIndex()); - } - }); - gd = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); - repositoryCombo.setLayoutData(gd); - } - - private WizardPage createPage(TaskRepository repository) { - if (repository != null) { - AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getRepositoryUi( - repository.getKind()); - if (connectorUi != null) { - WizardPage searchPage = connectorUi.getSearchPage(repository, null); - if (searchPage != null) { - ((ISearchPage) searchPage).setContainer(pageContainer); - searchPage.createControl(fParentComposite); - return searchPage; - } else { - // Search page not available - } - } - } - return null; - } - - private void displayQueryPage(int pageIndex) { - if (currentPageIndex == pageIndex || pageIndex < 0) - return; - - // TODO: if repository == null display invalid page? - if (currentPageIndex != -1 && queryPages[currentPageIndex] != null) { - queryPages[currentPageIndex].setVisible(false); - GridData data = (GridData) queryPages[currentPageIndex].getControl().getLayoutData(); - data.exclude = true; - queryPages[currentPageIndex].getControl().setLayoutData(data); - } - - if (queryPages[pageIndex] == null) { - String repositoryUrl = repositoryCombo.getItem(pageIndex); - repository = TasksUiPlugin.getRepositoryManager().getRepository(repositoryUrl); - if (repository != null) { - queryPages[pageIndex] = createPage(repository); - } - } - - if (queryPages[pageIndex] != null) { - GridData data = (GridData) queryPages[pageIndex].getControl().getLayoutData(); - data.exclude = false; - queryPages[pageIndex].getControl().setLayoutData(data); - queryPages[pageIndex].setVisible(true); - } - - currentPageIndex = pageIndex; - fParentComposite.getParent().layout(true, true); - } - - @Override - public void setVisible(boolean visible) { - if (firstView) { - List<TaskRepository> repositories = TasksUiPlugin.getRepositoryManager().getAllRepositories(); - List<TaskRepository> searchableRepositories = new ArrayList<TaskRepository>(); - for (TaskRepository repository : repositories) { - AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getRepositoryUi( - repository.getKind()); - if (connectorUi != null && connectorUi.hasSearchPage()) { - searchableRepositories.add(repository); - } - } - - String[] repositoryUrls = new String[searchableRepositories.size()]; - int i = 0; - int indexToSelect = 0; - for (Iterator<TaskRepository> iter = searchableRepositories.iterator(); iter.hasNext();) { - TaskRepository currRepsitory = iter.next(); - if (repository != null && repository.equals(currRepsitory)) { - indexToSelect = i; - } - repositoryUrls[i] = currRepsitory.getUrl(); - i++; - } - - IDialogSettings settings = getDialogSettings(); - if (repositoryCombo != null) { - repositoryCombo.setItems(repositoryUrls); - if (repositoryUrls.length == 0) { - MessageDialog.openInformation(Display.getCurrent().getActiveShell(), TITLE_REPOSITORY_SEARCH, - TaskRepositoryManager.MESSAGE_NO_REPOSITORY); - } else { - String selectRepo = settings.get(STORE_REPO_ID); - if (selectRepo != null && repositoryCombo.indexOf(selectRepo) > -1) { - repositoryCombo.select(repositoryCombo.indexOf(selectRepo)); - repository = TasksUiPlugin.getRepositoryManager().getRepository(repositoryCombo.getText()); - if (repository == null) { - - // TODO: Display no repository error - - // repository = - // TasksUiPlugin.getRepositoryManager().getDefaultRepository( - // BugzillaCorePlugin.REPOSITORY_KIND); - } - } else { - repositoryCombo.select(indexToSelect); - } - - // TODO: Create one page per connector and repopulate based - // on - // repository - queryPages = new AbstractRepositoryQueryPage[repositoryUrls.length]; - displayQueryPage(repositoryCombo.getSelectionIndex()); - // updateAttributesFromRepository(repositoryCombo.getText(), - // null, false); - } - } - firstView = false; - } - - if(queryPages == null) { - pageContainer.setPerformActionEnabled(false); - } - - super.setVisible(visible); - } - - public IDialogSettings getDialogSettings() { - IDialogSettings settings = TasksUiPlugin.getDefault().getDialogSettings(); - fDialogSettings = settings.getSection(PAGE_NAME); - if (fDialogSettings == null) - fDialogSettings = settings.addNewSection(PAGE_NAME); - return fDialogSettings; - } - - private void saveDialogSettings() { - IDialogSettings settings = getDialogSettings(); - settings.put(STORE_REPO_ID, repositoryCombo.getText()); - } - - @Override - public void dispose() { - if (queryPages != null) { - for (WizardPage page : queryPages) { - if (page != null) { - page.dispose(); - } - } - } - super.dispose(); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskStatusMenuContributor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskStatusMenuContributor.java deleted file mode 100644 index 95e9fc199..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskStatusMenuContributor.java +++ /dev/null @@ -1,43 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui; - -import java.util.List; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.jface.action.Separator; -import org.eclipse.mylar.internal.tasks.ui.actions.MarkTaskCompleteAction; -import org.eclipse.mylar.internal.tasks.ui.actions.MarkTaskIncompleteAction; -import org.eclipse.mylar.internal.tasks.ui.actions.MarkTaskReadAction; -import org.eclipse.mylar.internal.tasks.ui.actions.MarkTaskUnreadAction; -import org.eclipse.mylar.tasks.core.ITaskListElement; - -/** - * @author Rob Elves - */ -public class TaskStatusMenuContributor implements IDynamicSubMenuContributor { - - private static final String LABEL = "Mark"; - - public MenuManager getSubMenuManager(final List<ITaskListElement> selectedElements) { - final MenuManager subMenuManager = new MenuManager(LABEL); - Action action = new MarkTaskCompleteAction(selectedElements); - subMenuManager.add(action); - action = new MarkTaskIncompleteAction(selectedElements); - subMenuManager.add(action); - subMenuManager.add(new Separator()); - action = new MarkTaskReadAction(selectedElements); - subMenuManager.add(action); - action = new MarkTaskUnreadAction(selectedElements); - subMenuManager.add(action); - return subMenuManager; - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskUiUtil.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskUiUtil.java deleted file mode 100644 index 478a84478..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskUiUtil.java +++ /dev/null @@ -1,304 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui; - -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.core.runtime.jobs.IJobChangeEvent; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.core.runtime.jobs.JobChangeAdapter; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.editors.CategoryEditorInput; -import org.eclipse.mylar.internal.tasks.ui.editors.MylarTaskEditor; -import org.eclipse.mylar.internal.tasks.ui.editors.TaskEditorInput; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.AbstractTaskContainer; -import org.eclipse.mylar.tasks.core.DateRangeActivityDelegate; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.mylar.tasks.core.Task; -import org.eclipse.mylar.tasks.core.TaskCategory; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.AbstractRepositoryConnectorUi; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IEditorReference; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.browser.IWebBrowser; -import org.eclipse.ui.browser.IWorkbenchBrowserSupport; -import org.eclipse.ui.internal.browser.WebBrowserPreference; -import org.eclipse.ui.internal.browser.WorkbenchBrowserSupport; - -/** - * @author Mik Kersten - */ -public class TaskUiUtil { - - /** - * TODO: move - */ - public static Image getImageForPriority(Task.PriorityLevel priorityLevel) { - if (priorityLevel == null) { - return null; - } - switch (priorityLevel) { - case P1: - return TaskListImages.getImage(TaskListImages.PRIORITY_1); - case P2: - return TaskListImages.getImage(TaskListImages.PRIORITY_2); - case P3: - return TaskListImages.getImage(TaskListImages.PRIORITY_3); - case P4: - return TaskListImages.getImage(TaskListImages.PRIORITY_4); - case P5: - return TaskListImages.getImage(TaskListImages.PRIORITY_5); - default: - return null; - } - } - - public static void closeEditorInActivePage(ITask task) { - IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); - if (window == null) { - return; - } - IWorkbenchPage page = window.getActivePage(); - if (page == null) { - return; - } - IEditorInput input = new TaskEditorInput(task, false); - IEditorPart editor = page.findEditor(input); - if (editor != null) { - page.closeEditor(editor, false); - } - } - - - public static boolean openRepositoryTask(TaskRepository repository, String taskId) { - boolean opened = false; - ITask task = TasksUiPlugin.getTaskListManager().getTaskList().getTask(AbstractRepositoryTask.getHandle(repository.getUrl(), taskId)); - if(task != null) { - TaskUiUtil.refreshAndOpenTaskListElement(task); - opened = true; - } else { - AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getRepositoryUi(repository.getKind()); - if(connectorUi != null) { - connectorUi.openRemoteTask(repository.getUrl(), taskId); - opened = true; - } - } - return opened; - } - - /** - * Either pass in a repository and id, or fullUrl, or all of them - */ - public static boolean openRepositoryTask(String repositoryUrl, String taskId, String fullUrl) { - boolean opened = false; - String handle = AbstractRepositoryTask.getHandle(repositoryUrl, taskId); - ITask task = TasksUiPlugin.getTaskListManager().getTaskList().getTask(handle); - if (task == null) { - // search for it - for (ITask currTask : TasksUiPlugin.getTaskListManager().getTaskList().getAllTasks()) { - if (currTask instanceof AbstractRepositoryTask) { - String currUrl = ((AbstractRepositoryTask) currTask).getUrl(); - if (currUrl != null && currUrl.equals(fullUrl)) { - task = currTask; - break; - } - } - } - } - if (task != null) { - TaskUiUtil.refreshAndOpenTaskListElement(task); - opened = true; - } else { - AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager().getRepositoryForTaskUrl( - fullUrl); - AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getRepositoryUi( - connector.getRepositoryType()); - - if (connector != null) { - connectorUi.openRemoteTask(repositoryUrl, taskId); - opened = true; - } - } - if (!opened) { - TaskUiUtil.openUrl(fullUrl); - opened = true; - } - return opened; - } - - public static void refreshAndOpenTaskListElement(ITaskListElement element) { - if (element instanceof ITask || element instanceof AbstractQueryHit - || element instanceof DateRangeActivityDelegate) { - final ITask task; - if (element instanceof AbstractQueryHit) { - task = ((AbstractQueryHit) element).getOrCreateCorrespondingTask(); - } else if (element instanceof DateRangeActivityDelegate) { - task = ((DateRangeActivityDelegate) element).getCorrespondingTask(); - } else { - task = (ITask) element; - } - - if (task instanceof AbstractRepositoryTask) { - final AbstractRepositoryTask repositoryTask = (AbstractRepositoryTask) task; - String repositoryKind = repositoryTask.getRepositoryKind(); - final AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager() - .getRepositoryConnector(repositoryKind); - - TaskRepository repository = TasksUiPlugin.getRepositoryManager().getRepository(repositoryKind, - repositoryTask.getRepositoryUrl()); - if (repository == null) { // || !connector.validate(repository)) { - return; - } - - if (connector != null) - if (repositoryTask.getTaskData() != null) { - TaskUiUtil.openEditor(task, false, false); - TasksUiPlugin.getSynchronizationManager().setTaskRead(repositoryTask, true); - TasksUiPlugin.getSynchronizationManager().synchronize(connector, repositoryTask, false, null); - } else { - Job refreshJob = TasksUiPlugin.getSynchronizationManager().synchronize(connector, repositoryTask, true, - new JobChangeAdapter() { - public void done(IJobChangeEvent event) { - TaskUiUtil.openEditor(task, false); - } - }); - if (refreshJob == null) { - TaskUiUtil.openEditor(task, false); - } - } - } else { - TaskUiUtil.openEditor(task, false); - } - } else if (element instanceof TaskCategory) { - TaskUiUtil.openEditor((AbstractTaskContainer) element); - } else if (element instanceof AbstractRepositoryQuery) { - AbstractRepositoryQuery query = (AbstractRepositoryQuery) element; - AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getRepositoryUi( - query.getRepositoryKind()); - connectorUi.openEditQueryDialog(query); - } - } - - public static void openEditor(final ITask task, boolean newTask) { - openEditor(task, true, newTask); - } - - /** - * Set asyncExec false for testing purposes. - */ - public static void openEditor(final ITask task, boolean asyncExec, boolean newTask) { - - final IEditorInput editorInput = new TaskEditorInput(task, newTask); - - if (asyncExec) { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - openEditor(editorInput, TaskListPreferenceConstants.TASK_EDITOR_ID, page); - } - }); - } else { - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - openEditor(editorInput, TaskListPreferenceConstants.TASK_EDITOR_ID, page); - } - } - - public static IEditorPart openEditor(IEditorInput input, String editorId, IWorkbenchPage page) { - try { - return page.openEditor(input, editorId); - } catch (PartInitException e) { - MylarStatusHandler.fail(e, "Open for editor failed: " + input + ", id: " + editorId, true); - } - return null; - } - - public static void openEditor(AbstractTaskContainer category) { - final IEditorInput input = new CategoryEditorInput(category); - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - openEditor(input, TaskListPreferenceConstants.CATEGORY_EDITOR_ID, page); - } - }); - } - - public static void openUrl(String url) { - try { - if (WebBrowserPreference.getBrowserChoice() == WebBrowserPreference.EXTERNAL) { - try { - IWorkbenchBrowserSupport support = PlatformUI.getWorkbench().getBrowserSupport(); - support.getExternalBrowser().openURL(new URL(url)); - } catch (Exception e) { - MylarStatusHandler.fail(e, "could not open task url", true); - } - } else { - IWebBrowser browser = null; - int flags = 0; - if (WorkbenchBrowserSupport.getInstance().isInternalWebBrowserAvailable()) { - flags = WorkbenchBrowserSupport.AS_EDITOR | WorkbenchBrowserSupport.LOCATION_BAR - | WorkbenchBrowserSupport.NAVIGATION_BAR; - - } else { - flags = WorkbenchBrowserSupport.AS_EXTERNAL | WorkbenchBrowserSupport.LOCATION_BAR - | WorkbenchBrowserSupport.NAVIGATION_BAR; - } - String title = "Browser"; - browser = WorkbenchBrowserSupport.getInstance().createBrowser(flags, - TasksUiPlugin.PLUGIN_ID + title, null, null); - browser.openURL(new URL(url)); - } - } catch (PartInitException e) { - MessageDialog.openError(Display.getDefault().getActiveShell(), "Browser init error", - "Browser could not be initiated"); - } catch (MalformedURLException e) { - MessageDialog.openError(Display.getDefault().getActiveShell(), "URL not found", "URL Could not be opened"); - } - } - - public static List<MylarTaskEditor> getActiveRepositoryTaskEditors() { - List<MylarTaskEditor> repositoryTaskEditors = new ArrayList<MylarTaskEditor>(); - IWorkbenchWindow[] windows = PlatformUI.getWorkbench().getWorkbenchWindows(); - for (IWorkbenchWindow window : windows) { - IEditorReference[] editorReferences = window.getActivePage().getEditorReferences(); - for (int i = 0; i < editorReferences.length; i++) { - IEditorPart editor = editorReferences[i].getEditor(false); - if (editor instanceof MylarTaskEditor) { - MylarTaskEditor taskEditor = (MylarTaskEditor) editor; - if (taskEditor.getEditorInput() instanceof TaskEditorInput) { - TaskEditorInput input = (TaskEditorInput) taskEditor.getEditorInput(); - if (input.getTask() instanceof AbstractRepositoryTask) { - repositoryTaskEditors.add((MylarTaskEditor) editor); - } - } - } - } - } - return repositoryTaskEditors; - } -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TasksReminderDialog.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TasksReminderDialog.java deleted file mode 100644 index f15ab8f6c..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TasksReminderDialog.java +++ /dev/null @@ -1,267 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui; - -import java.text.DateFormat; -import java.util.Date; -import java.util.List; - -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.viewers.IStructuredContentProvider; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.ITableLabelProvider; -import org.eclipse.jface.viewers.LabelProvider; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerSorter; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; - -/** - * @author Ken Sueda - */ -public class TasksReminderDialog extends Dialog { - private List<ITask> tasks = null; - - private Table table = null; - - private TableViewer tableViewer = null; - - private String[] columnNames = new String[] { "Description", "Priority", "Reminder Day" }; - - private static final int DISMISS_ALL_ID = 200; - - private static final int DISMISS_ID = 201; - - private static final int SNOOZE_ID = 202; - - private static final String DISMISS_ALL_LABEL = "Dismiss All"; - - private static final String DISMISS_LABEL = "Dismiss Selected"; - - private static final String SNOOZE_ALL_LABEL = "Remind tommorrow"; - - private static long DAY = 24 * 3600 * 1000; - - public TasksReminderDialog(Shell parentShell, List<ITask> remTasks) { - super(parentShell); - tasks = remTasks; - setShellStyle(SWT.CLOSE | SWT.MIN | SWT.MODELESS | SWT.BORDER | SWT.TITLE); - } - - @Override - protected void configureShell(Shell shell) { - super.configureShell(shell); - shell.setText("Reminders"); - } - - @Override - protected Control createDialogArea(Composite parent) { - Composite composite = (Composite) super.createDialogArea(parent); - setBlockOnOpen(false); - GridLayout gl = new GridLayout(1, false); - composite.setLayout(gl); - GridData data = new GridData(GridData.FILL_BOTH); - composite.setLayoutData(data); - - Composite container = new Composite(composite, SWT.NONE); - gl = new GridLayout(1, false); - container.setLayout(gl); - createTable(container); - createTableViewer(); - - return composite; - } - - @Override - protected void createButtonsForButtonBar(Composite parent) { - createButton(parent, DISMISS_ALL_ID, DISMISS_ALL_LABEL, false); - createButton(parent, DISMISS_ID, DISMISS_LABEL, false); - createButton(parent, SNOOZE_ID, SNOOZE_ALL_LABEL, true); - } - - private void createTable(Composite parent) { - int style = SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.HIDE_SELECTION; - table = new Table(parent, style); - GridLayout tlayout = new GridLayout(); - table.setLayout(tlayout); - GridData wd = new GridData(GridData.FILL_BOTH); - wd.heightHint = 300; - table.setLayoutData(wd); - - table.setLinesVisible(true); - table.setHeaderVisible(true); - - TableColumn column = new TableColumn(table, SWT.LEFT, 0); - column.setText(columnNames[0]); - column.setWidth(180); - column.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - tableViewer.setSorter(new ReminderTaskSorter(ReminderTaskSorter.DESCRIPTION)); - - } - }); - - column = new TableColumn(table, SWT.LEFT, 1); - column.setText(columnNames[1]); - column.setWidth(50); - column.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - tableViewer.setSorter(new ReminderTaskSorter(ReminderTaskSorter.PRIORITY)); - } - }); - - column = new TableColumn(table, SWT.LEFT, 2); - column.setText(columnNames[2]); - column.setWidth(100); - column.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - tableViewer.setSorter(new ReminderTaskSorter(ReminderTaskSorter.DATE)); - } - }); - } - - private void createTableViewer() { - tableViewer = new TableViewer(table); - tableViewer.setUseHashlookup(true); - tableViewer.setContentProvider(new ReminderTasksContentProvider()); - tableViewer.setLabelProvider(new ReminderTasksLabelProvider()); - tableViewer.setInput(tasks); - } - - protected void buttonPressed(int buttonId) { - if (buttonId == DISMISS_ALL_ID) { - for (ITask t : tasks) { - t.setReminded(true); - } - okPressed(); - } else if (buttonId == DISMISS_ID) { - Object sel = ((IStructuredSelection) tableViewer.getSelection()).getFirstElement(); - if (sel != null && sel instanceof ITask) { - ITask t = (ITask) sel; - t.setReminded(true); - tasks.remove(t); - if (tasks.isEmpty()) { - okPressed(); - } else { - tableViewer.refresh(); - } - } - } else if (buttonId == SNOOZE_ID) { - Object sel = ((IStructuredSelection) tableViewer.getSelection()).getFirstElement(); - if (sel != null && sel instanceof ITask) { - ITask t = (ITask) sel; - t.setReminded(false); - t.setReminderDate(new Date(new Date().getTime() + DAY)); - tasks.remove(t); - if (tasks.isEmpty()) { - okPressed(); - } else { - tableViewer.refresh(); - } - } - } - super.buttonPressed(buttonId); - } - - private class ReminderTasksContentProvider implements IStructuredContentProvider { - - public Object[] getElements(Object inputElement) { - return tasks.toArray(); - } - - public void dispose() { - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - } - } - - private static class ReminderTasksLabelProvider extends LabelProvider implements ITableLabelProvider { - public Image getColumnImage(Object element, int columnIndex) { - return null; - } - - public String getColumnText(Object element, int columnIndex) { - if (element instanceof ITask) { - ITask task = (ITask) element; - switch (columnIndex) { - case 0: - return task.getDescription(); - case 1: - return task.getPriority(); - case 2: - return DateFormat.getDateInstance(DateFormat.MEDIUM).format(task.getReminderDate()); - } - } - return null; - } - - } - - private static class ReminderTaskSorter extends ViewerSorter { - - public final static int DESCRIPTION = 1; - - public final static int PRIORITY = 2; - - public final static int DATE = 3; - - private int criteria; - - public ReminderTaskSorter(int criteria) { - super(); - this.criteria = criteria; - } - - @Override - public int compare(Viewer viewer, Object obj1, Object obj2) { - ITask t1 = (ITask) obj1; - ITask t2 = (ITask) obj2; - - switch (criteria) { - case DESCRIPTION: - return compareDescription(t1, t2); - case PRIORITY: - return comparePriority(t1, t2); - case DATE: - return compareDate(t1, t2); - default: - return 0; - } - } - - private int compareDescription(ITask task1, ITask task2) { - return task1.getDescription().compareTo(task2.getDescription()); - } - - private int comparePriority(ITask task1, ITask task2) { - return task1.getPriority().compareTo(task2.getPriority()); - } - - private int compareDate(ITask task1, ITask task2) { - return task2.getReminderDate().compareTo(task1.getReminderDate()); - } - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/WorkspaceAwareContextStore.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/WorkspaceAwareContextStore.java deleted file mode 100644 index 25c11876f..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/WorkspaceAwareContextStore.java +++ /dev/null @@ -1,44 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui; - -import java.io.File; - -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.mylar.context.core.AbstractContextStore; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.tasks.ui.TaskListDataMigration; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Mik Kersten - */ -public class WorkspaceAwareContextStore extends AbstractContextStore { - - public WorkspaceAwareContextStore() { - migrateFrom06Format(); - } - - public File getRootDirectory() { - return new File(TasksUiPlugin.getDefault().getDataDirectory()); - } - - private void migrateFrom06Format() { - File dataDir = new File(TasksUiPlugin.getDefault().getDataDirectory()); - try { - new TaskListDataMigration(dataDir).run(new NullProgressMonitor()); - } catch (Exception e) { - MylarStatusHandler.fail(e, "Error occurred while migrating mylar data", false); - } - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/AbstractRepositoryAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/AbstractRepositoryAction.java deleted file mode 100644 index 3fc03626f..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/AbstractRepositoryAction.java +++ /dev/null @@ -1,44 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.ui.IViewActionDelegate; -import org.eclipse.ui.IViewPart; - -/** - * Abstract action used to take care of autodetecting repository based on current selection - * - * @author Eugene Kuleshov - */ -public abstract class AbstractRepositoryAction extends Action implements IViewActionDelegate { - - private IStructuredSelection selection; - - public void init(IViewPart view) { - // ignore - } - - public void selectionChanged(IAction action, ISelection selection) { - if(selection instanceof IStructuredSelection) { - this.selection = (IStructuredSelection) selection; - } else { - this.selection = null; - } - } - - public IStructuredSelection getSelection() { - return this.selection; - } - -} - diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/AbstractRepositoryTasksAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/AbstractRepositoryTasksAction.java index 5f18a5738..5dbaa0546 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/AbstractRepositoryTasksAction.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/AbstractRepositoryTasksAction.java @@ -37,14 +37,6 @@ public abstract class AbstractRepositoryTasksAction extends Action { if (repositoryTask != null) { performActionOnTask(repositoryTask); } - } else if (element instanceof AbstractTaskContainer) { - AbstractTaskContainer container = (AbstractTaskContainer) element; - for (ITask iTask : container.getChildren()) { - if (iTask instanceof AbstractRepositoryTask) { - AbstractRepositoryTask repositoryTask = (AbstractRepositoryTask) iTask; - performActionOnTask(repositoryTask); - } - } } else if (element instanceof AbstractRepositoryQuery) { AbstractRepositoryQuery repositoryQuery = (AbstractRepositoryQuery) element; for (AbstractQueryHit queryHit : repositoryQuery.getHits()) { @@ -53,6 +45,14 @@ public abstract class AbstractRepositoryTasksAction extends Action { performActionOnTask(repositoryTask); } } + } else if (element instanceof AbstractTaskContainer) { + AbstractTaskContainer container = (AbstractTaskContainer) element; + for (ITask iTask : container.getChildren()) { + if (iTask instanceof AbstractRepositoryTask) { + AbstractRepositoryTask repositoryTask = (AbstractRepositoryTask) iTask; + performActionOnTask(repositoryTask); + } + } } } } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ActivateTaskAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ActivateTaskAction.java deleted file mode 100644 index 7f7c14f4a..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ActivateTaskAction.java +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.dialogs.IDialogSettings; -import org.eclipse.jface.window.Window; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.ui.TaskListManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.IWorkbenchWindowActionDelegate; -import org.eclipse.ui.actions.ActionDelegate; - -/** - * @author wmitsuda - */ -public class ActivateTaskAction extends ActionDelegate implements IWorkbenchWindowActionDelegate { - - private IWorkbenchWindow window; - - public void init(IWorkbenchWindow window) { - this.window = window; - } - - private static final String ACTIVATE_TASK_ACTION_DIALOG_SETTINGS = "activate.task.action.dialog.settings"; - - @Override - public void run(IAction action) { - TaskSelectionDialog dlg = new TaskSelectionDialog(window.getShell()); - dlg.setTitle("Activate Task"); - - IDialogSettings settings = TasksUiPlugin.getDefault().getDialogSettings(); - IDialogSettings dlgSettings = settings.getSection(ACTIVATE_TASK_ACTION_DIALOG_SETTINGS); - if (dlgSettings == null) { - dlgSettings = settings.addNewSection(ACTIVATE_TASK_ACTION_DIALOG_SETTINGS); - } - dlg.setDialogBoundsSettings(dlgSettings, Dialog.DIALOG_PERSISTLOCATION | Dialog.DIALOG_PERSISTSIZE); - - if (dlg.open() != Window.OK) { - return; - } - - Object result = dlg.getFirstResult(); - TaskListManager manager = TasksUiPlugin.getTaskListManager(); - if (result instanceof ITask) { - ITask task = (ITask) result; - manager.activateTask(task); - manager.getTaskActivationHistory().addTask(task); - } else if (result instanceof AbstractQueryHit) { - AbstractQueryHit hit = (AbstractQueryHit) result; - ITask task = hit.getOrCreateCorrespondingTask(); - if (task != null) { - manager.activateTask(task); - manager.getTaskActivationHistory().addTask(task); - } - } - if (TaskListView.getFromActivePerspective() != null) { - TaskListView.getFromActivePerspective().refreshAndFocus(false); - } - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ActivityReportAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ActivityReportAction.java deleted file mode 100644 index 53e317c9d..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ActivityReportAction.java +++ /dev/null @@ -1,52 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.wizard.WizardDialog; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.internal.tasks.ui.planner.TaskActivityWizard; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.PlatformUI; - -/** - * @author Rob Elves - */ -public class ActivityReportAction extends Action { - - private static final String LABEL = "Activity Report"; - - public static final String ID = "org.eclipse.mylar.tasklist.actions.report.activity"; - - public ActivityReportAction() { - super(LABEL); - setId(ID); - setText(LABEL); - setToolTipText(LABEL); - setImageDescriptor(TaskListImages.TASKLIST); - } - - public void run() { - TaskActivityWizard wizard = new TaskActivityWizard(); - - Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); - if (wizard != null && shell != null && !shell.isDisposed()) { - - WizardDialog dialog = new WizardDialog(shell, wizard); - dialog.setBlockOnOpen(true); - dialog.open(); - - } else { - // ignore - } - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/AddRepositoryAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/AddRepositoryAction.java deleted file mode 100644 index b22374183..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/AddRepositoryAction.java +++ /dev/null @@ -1,68 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.wizard.WizardDialog; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.internal.tasks.ui.wizards.NewRepositoryWizard; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.IViewPart; -import org.eclipse.ui.PlatformUI; - -/** - * @author Mik Kersten - */ -public class AddRepositoryAction extends Action { - - public static final String TITLE = "Add Task Repository"; - - private static final String ID = "org.eclipse.mylar.tasklist.repositories.add"; - - public AddRepositoryAction() { - setImageDescriptor(TaskListImages.REPOSITORY_NEW); - setText(TITLE); - setId(ID); - } - - public void init(IViewPart view) { - // ignore - } - - public void run() { - try { - NewRepositoryWizard wizard = new NewRepositoryWizard(); - Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); - if (wizard != null && shell != null && !shell.isDisposed()) { - WizardDialog dialog = new WizardDialog(shell, wizard); - dialog.create(); - dialog.getShell().setText(TITLE); - // dialog.getShell().setText("Mylar Tasks"); - dialog.setBlockOnOpen(true); - if (dialog.open() == Dialog.CANCEL) { - dialog.close(); - return; - } - } - } catch (Exception e) { - MylarStatusHandler.fail(e, e.getMessage(), true); - } - } - - public void selectionChanged(IAction action, ISelection selection) { - // TODO Auto-generated method stub - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/AddRepositoryTaskAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/AddRepositoryTaskAction.java deleted file mode 100644 index bf9ca72bf..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/AddRepositoryTaskAction.java +++ /dev/null @@ -1,49 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.wizard.WizardDialog; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.wizards.AddExistingTaskWizard; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.PlatformUI; - -/** - * @author Mik Kersten - * @author Eugene Kuleshov - */ -public class AddRepositoryTaskAction extends AbstractRepositoryAction { - - private static final String WIZARD_LABEL = "Add an existing repository task/issue"; - - public void run(IAction action) { - try { - AddExistingTaskWizard wizard = new AddExistingTaskWizard(getSelection()); - Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); - if (shell != null && !shell.isDisposed()) { - WizardDialog dialog = new WizardDialog(shell, wizard); - dialog.create(); - dialog.setTitle(WIZARD_LABEL); - dialog.setBlockOnOpen(true); - if (dialog.open() == Dialog.CANCEL) { - dialog.close(); - return; - } - } - } catch (Exception e) { - MylarStatusHandler.fail(e, e.getMessage(), true); - } - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CollapseAllAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CollapseAllAction.java deleted file mode 100644 index 20c228982..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CollapseAllAction.java +++ /dev/null @@ -1,42 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import org.eclipse.jface.action.Action; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; - -/** - * @author Mik Kersten - */ -public class CollapseAllAction extends Action { - - private static final String LABEL = "Collapse All"; - - public static final String ID = "org.eclipse.mylar.tasklist.actions.collapse.all"; - - private TaskListView taskListView; - - public CollapseAllAction(TaskListView taskListView) { - super(LABEL); - this.taskListView = taskListView; - setId(ID); - setText(LABEL); - setToolTipText(LABEL); - setImageDescriptor(TaskListImages.COLLAPSE_ALL); - } - - public void run() { - if (taskListView.getViewer() != null) - taskListView.getViewer().collapseAll(); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyDetailsAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyDetailsAction.java deleted file mode 100644 index 2724de324..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyDetailsAction.java +++ /dev/null @@ -1,86 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui.actions; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.StyledText; - -/** - * @author Mik Kersten - */ -public class CopyDetailsAction extends Action { - - private static final String LABEL = "Copy Details"; - - public static final String ID = "org.eclipse.mylar.tasklist.actions.copy"; - - private TaskListView view; - - public CopyDetailsAction(TaskListView view) { - this.view = view; - setText(LABEL); - setToolTipText(LABEL); - setId(ID); - setImageDescriptor(TaskListImages.COPY); - setAccelerator(SWT.MOD1 + 'c'); - } - - @Override - public void run() { - ISelection selection = this.view.getViewer().getSelection(); - Object object = ((IStructuredSelection) selection).getFirstElement(); - String text = getTextForTask(object); - - // HACK: this should be done using proper copying - StyledText styledText = new StyledText(view.getDummyComposite(), SWT.NULL); - styledText.setText(text); - styledText.selectAll(); - styledText.copy(); - styledText.dispose(); - } - - public static String getTextForTask(Object object) { - String text = ""; - if (object instanceof ITask || object instanceof AbstractQueryHit) { - ITask task = null; - if (object instanceof AbstractQueryHit) { - task = ((AbstractQueryHit)object).getCorrespondingTask(); - } else if (object instanceof ITask) { - task = (ITask)object; - } - if (task != null) { - text = task.getDescription(); - if (task.hasValidUrl()) { - text += "\n" + task.getUrl(); - } - } else { - text += ((AbstractQueryHit)object).getDescription(); - } - } else if (object instanceof AbstractRepositoryQuery) { - AbstractRepositoryQuery query = (AbstractRepositoryQuery)object; - text += query.getDescription(); - text += "\n" + query.getUrl(); - } else if (object instanceof ITaskListElement) { - ITaskListElement element = (ITaskListElement) object; - text = element.getDescription(); - } - return text; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyToClipboardAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyToClipboardAction.java deleted file mode 100644 index 2c0ac59d3..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyToClipboardAction.java +++ /dev/null @@ -1,56 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import org.eclipse.jface.action.Action; -import org.eclipse.swt.dnd.Clipboard; -import org.eclipse.swt.dnd.TextTransfer; -import org.eclipse.swt.dnd.Transfer; -import org.eclipse.swt.widgets.Control; - -/** - * An <code>Action</code> which copies the specified contents to the clipboard - * obtained from the specified <code>Control</code> - * - * @author Jeff Pound - */ -public class CopyToClipboardAction extends Action { - public static final String TITLE = "Copy to Clipboard"; - - private String contents = null; - - private Control control = null; - - public CopyToClipboardAction() { - super(TITLE); - } - - public void run() { - if (contents == null) { - return; - } - - // use system line endings - contents = contents.replaceAll("\r\n|\n", System.getProperty("line.separator")); - - if (control != null && contents != null) { - Clipboard clipboard = new Clipboard(control.getDisplay()); - clipboard.setContents(new Object[] { contents }, new Transfer[] { TextTransfer.getInstance() }); - clipboard.dispose(); - } - } - - public void setContents(String contents) { - this.contents = contents; - } - - public void setControl(Control control) { - this.control = control; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/DeleteAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/DeleteAction.java deleted file mode 100644 index 67525bb2a..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/DeleteAction.java +++ /dev/null @@ -1,100 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.mylar.context.core.ContextCorePlugin; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.TaskCategory; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.ISharedImages; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.internal.WorkbenchImages; - -/** - * @author Mik Kersten - */ -public class DeleteAction extends Action { - - public static final String ID = "org.eclipse.mylar.tasklist.actions.delete"; - - public DeleteAction() { - setText("Delete"); - setId(ID); - setImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_DELETE)); - } - - @Override - public void run() { - ISelection selection = TaskListView.getFromActivePerspective().getViewer().getSelection(); - for (Object selectedObject : ((IStructuredSelection) selection).toList()) { - if (selectedObject instanceof ITask || selectedObject instanceof AbstractQueryHit) { - ITask task = null; - if (selectedObject instanceof AbstractQueryHit) { - task = ((AbstractQueryHit) selectedObject).getCorrespondingTask(); - } else { - task = (ITask) selectedObject; - } - if (task == null) { - MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), - "Mylar Tasks", "No task data to delete."); - return; - } - - String message = genDeleteConfirmationMessage(task); - boolean deleteConfirmed = MessageDialog.openQuestion(PlatformUI.getWorkbench().getActiveWorkbenchWindow() - .getShell(), "Confirm Delete", message); - if (!deleteConfirmed) { - return; - } - - TasksUiPlugin.getTaskListManager().deactivateTask(task); - TasksUiPlugin.getTaskListManager().getTaskList().deleteTask(task); - ContextCorePlugin.getContextManager().deleteContext(task.getHandleIdentifier()); - TaskUiUtil.closeEditorInActivePage(task); - } else if (selectedObject instanceof AbstractRepositoryQuery) { - boolean deleteConfirmed = MessageDialog.openQuestion(PlatformUI.getWorkbench().getActiveWorkbenchWindow() - .getShell(), "Confirm delete", "Delete the selected query? Task data will not be deleted."); - if (deleteConfirmed) { - TasksUiPlugin.getTaskListManager().getTaskList().deleteQuery((AbstractRepositoryQuery) selectedObject); - } - } else if (selectedObject instanceof TaskCategory) { - boolean deleteConfirmed = MessageDialog.openQuestion(PlatformUI.getWorkbench().getActiveWorkbenchWindow() - .getShell(), "Confirm Delete", "Delete the selected category? Contained tasks will be moved to the root."); - if (!deleteConfirmed) - return; - - TaskCategory cat = (TaskCategory) selectedObject; - for (ITask task : cat.getChildren()) { - ContextCorePlugin.getContextManager().deleteContext(task.getHandleIdentifier()); - TaskUiUtil.closeEditorInActivePage(task); - } - TasksUiPlugin.getTaskListManager().getTaskList().deleteCategory(cat); - } else { - MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Delete failed", - "Nothing selected."); - return; - } - } - } - - public static String genDeleteConfirmationMessage(ITask task) { - return "Delete the selected task and discard task context?\n\n" + task.getDescription(); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/DeleteTaskRepositoryAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/DeleteTaskRepositoryAction.java deleted file mode 100644 index da0385a5b..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/DeleteTaskRepositoryAction.java +++ /dev/null @@ -1,100 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.views.TaskRepositoriesView; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.ISharedImages; -import org.eclipse.ui.IViewPart; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.internal.WorkbenchImages; - -/** - * @author Mik Kersten - */ -public class DeleteTaskRepositoryAction extends Action { - - private static final String ID = "org.eclipse.mylar.tasklist.repositories.delete"; - - private TaskRepositoriesView repositoriesView; - - public DeleteTaskRepositoryAction(TaskRepositoriesView repositoriesView) { - this.repositoriesView = repositoriesView; - setImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_DELETE)); - setText("Delete Repository"); - setId(ID); - } - - public void init(IViewPart view) { - // ignore - } - - public void run() { - try { - - boolean deleteConfirmed = MessageDialog.openQuestion(PlatformUI.getWorkbench().getActiveWorkbenchWindow() - .getShell(), "Confirm Delete", "Delete the selected task repositories?"); - if (deleteConfirmed) { - IStructuredSelection selection = (IStructuredSelection) repositoriesView.getViewer().getSelection(); - Set<AbstractRepositoryQuery> queries = TasksUiPlugin.getTaskListManager().getTaskList() - .getQueries(); - List<TaskRepository> repositoriesInUse = new ArrayList<TaskRepository>(); - List<TaskRepository> repositoriesToDelete = new ArrayList<TaskRepository>(); - for (Object selectedObject : selection.toList()) { - if (selectedObject instanceof TaskRepository) { - TaskRepository taskRepository = (TaskRepository) selectedObject; - if (queries != null && queries.size() > 0) { - for (AbstractRepositoryQuery query : queries) { - if (query.getRepositoryUrl().equals(taskRepository.getUrl())) { - repositoriesInUse.add(taskRepository); - break; - } - } - } - if (!repositoriesInUse.contains(taskRepository)) { - repositoriesToDelete.add(taskRepository); - } - } - } - - for (TaskRepository taskRepository : repositoriesToDelete) { - TasksUiPlugin.getRepositoryManager().removeRepository(taskRepository, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - } - - if (repositoriesInUse.size() > 0) { - MessageDialog - .openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), - "Repository In Use", - "One or more of the selected repositories is being used by a query and can not be deleted."); - } - } - } catch (Exception e) { - MylarStatusHandler.fail(e, e.getMessage(), true); - } - } - - public void selectionChanged(IAction action, ISelection selection) { - // TODO Auto-generated method stub - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/EditRepositoryPropertiesAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/EditRepositoryPropertiesAction.java deleted file mode 100644 index e26d0b458..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/EditRepositoryPropertiesAction.java +++ /dev/null @@ -1,76 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.WizardDialog; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.views.TaskRepositoriesView; -import org.eclipse.mylar.internal.tasks.ui.wizards.EditRepositoryWizard; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.IViewPart; -import org.eclipse.ui.PlatformUI; - -/** - * @author Mik Kersten - */ -public class EditRepositoryPropertiesAction extends Action { - - private static final String ID = "org.eclipse.mylar.tasklist.repositories.properties"; - - private TaskRepositoriesView repositoriesView; - - public EditRepositoryPropertiesAction(TaskRepositoriesView repositoriesView) { - this.repositoriesView = repositoriesView; - setText("Properties"); - setId(ID); - } - - public void init(IViewPart view) { - // ignore - } - - public void run() { - try { - IStructuredSelection selection = (IStructuredSelection) repositoriesView.getViewer().getSelection(); - if (selection.getFirstElement() instanceof TaskRepository) { - EditRepositoryWizard wizard = new EditRepositoryWizard((TaskRepository) selection.getFirstElement()); - Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); - if (wizard != null && shell != null && !shell.isDisposed()) { - WizardDialog dialog = new WizardDialog(shell, wizard); - dialog.create(); - // dialog.getShell().setText("Mylar Tasks"); - dialog.setBlockOnOpen(true); - if (dialog.open() == Dialog.CANCEL) { - dialog.close(); - return; - } - } - } - // TODO: move - if (TaskRepositoriesView.getFromActivePerspective() != null) { - TaskRepositoriesView.getFromActivePerspective().getViewer().refresh(); - } - } catch (Exception e) { - MylarStatusHandler.fail(e, e.getMessage(), true); - } - } - - public void selectionChanged(IAction action, ISelection selection) { - // TODO Auto-generated method stub - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ExpandAllAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ExpandAllAction.java deleted file mode 100644 index 48e125a18..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ExpandAllAction.java +++ /dev/null @@ -1,42 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import org.eclipse.jface.action.Action; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; - -/** - * @author Mik Kersten - */ -public class ExpandAllAction extends Action { - - private static final String LABEL = "Expand All"; - - public static final String ID = "org.eclipse.mylar.tasklist.actions.expand.all"; - - private TaskListView taskListView; - - public ExpandAllAction(TaskListView taskListView) { - super(LABEL); - this.taskListView = taskListView; - setId(ID); - setText(LABEL); - setToolTipText(LABEL); - setImageDescriptor(TaskListImages.EXPAND_ALL); - } - - public void run() { - if (taskListView.getViewer() != null) - taskListView.getViewer().expandAll(); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/GoIntoAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/GoIntoAction.java deleted file mode 100644 index ec25208c3..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/GoIntoAction.java +++ /dev/null @@ -1,60 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; -import org.eclipse.ui.IViewActionDelegate; -import org.eclipse.ui.IViewPart; - -/** - * @author Mik Kersten - */ -public class GoIntoAction extends Action implements IViewActionDelegate { - - private static final String LABEL = "Go Into"; - public static final String ID = "org.eclipse.mylar.tasklist.actions.view.go.into"; - - // - // private DrillDownAdapter drillDownAdapter; - // - public GoIntoAction() { - setId(ID); - setText(LABEL); - setToolTipText(LABEL); - setImageDescriptor(TaskListImages.GO_INTO); - } - - public void init(IViewPart view) { - // TODO Auto-generated method stub - - } - - public void run() { - if (TaskListView.getFromActivePerspective() != null) { - TaskListView.getFromActivePerspective().getFilteredTree().setFilterText(""); - TaskListView.getFromActivePerspective().goIntoCategory(); - } - } - - public void run(IAction action) { - run(); - } - - public void selectionChanged(IAction action, ISelection selection) { - // TODO Auto-generated method stub - - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/MarkTaskCompleteAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/MarkTaskCompleteAction.java deleted file mode 100644 index 27f658470..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/MarkTaskCompleteAction.java +++ /dev/null @@ -1,63 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import java.util.List; - -import org.eclipse.jface.action.Action; -import org.eclipse.mylar.internal.tasks.core.WebTask; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.mylar.tasks.core.Task; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Mik Kersten - */ -public class MarkTaskCompleteAction extends Action { - - public static final String ID = "org.eclipse.mylar.tasklist.actions.mark.completed"; - - private static final String ACTION_NAME = "Complete"; - - private List<ITaskListElement> selectedElements; - - public MarkTaskCompleteAction(List<ITaskListElement> selectedElements) { - this.selectedElements = selectedElements; - setText(ACTION_NAME); - setToolTipText("Mark "+ACTION_NAME); - setId(ID); - setImageDescriptor(TaskListImages.TASK_COMPLETE); - if(selectedElements.size() == 1 && (selectedElements.get(0) instanceof Task)) { - Task task = (Task)selectedElements.get(0); - setEnabled(task.isLocal()); - } else { - setEnabled(false); - } - } - - @Override - public void run() { - for (Object selectedObject : selectedElements) { - if (selectedObject instanceof ITask) { - TasksUiPlugin.getTaskListManager().getTaskList().markComplete(((ITask) selectedObject), true); - } else if (selectedObject instanceof AbstractQueryHit) { - ITask task = ((AbstractQueryHit)selectedObject).getCorrespondingTask(); - if (task instanceof WebTask) { - TasksUiPlugin.getTaskListManager().getTaskList().markComplete(task, true); - } - } - } - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/MarkTaskIncompleteAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/MarkTaskIncompleteAction.java deleted file mode 100644 index 894c45540..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/MarkTaskIncompleteAction.java +++ /dev/null @@ -1,62 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import java.util.List; - -import org.eclipse.jface.action.Action; -import org.eclipse.mylar.internal.tasks.core.WebTask; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.mylar.tasks.core.Task; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Mik Kersten and Ken Sueda - */ -public class MarkTaskIncompleteAction extends Action { - - private static final String ACTION_NAME = "Incomplete"; - - public static final String ID = "org.eclipse.mylar.tasklist.actions.mark.incomplete"; - - private List<ITaskListElement> selectedElements; - public MarkTaskIncompleteAction(List<ITaskListElement> selectedElements) { - this.selectedElements = selectedElements; - setText(ACTION_NAME); - setToolTipText("Mark "+ACTION_NAME); - setId(ID); - setImageDescriptor(TaskListImages.TASK_INCOMPLETE); - if(selectedElements.size() == 1 && (selectedElements.get(0) instanceof Task)) { - Task task = (Task)selectedElements.get(0); - setEnabled(task.isLocal()); - } else { - setEnabled(false); - } - } - - @Override - public void run() { - for (Object selectedObject : selectedElements) { - if (selectedObject instanceof ITask) { - TasksUiPlugin.getTaskListManager().getTaskList().markComplete(((ITask) selectedObject), false); - } else if (selectedObject instanceof AbstractQueryHit) { - ITask task = ((AbstractQueryHit)selectedObject).getCorrespondingTask(); - if (task instanceof WebTask) { - TasksUiPlugin.getTaskListManager().getTaskList().markComplete(task, false); - } - } - } - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/MarkTaskUnreadAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/MarkTaskUnreadAction.java deleted file mode 100644 index 7a03f9ac1..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/MarkTaskUnreadAction.java +++ /dev/null @@ -1,50 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import java.util.List; - -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.mylar.tasks.core.Task; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Rob Elves - */ -public class MarkTaskUnreadAction extends AbstractRepositoryTasksAction { - - private static final String ACTION_NAME = "Unread"; - - public static final String ID = "org.eclipse.mylar.tasklist.actions.mark.unread"; - - public MarkTaskUnreadAction(List<ITaskListElement> selectedElements) { - this.selectedElements = selectedElements; - setText(ACTION_NAME); - setToolTipText(ACTION_NAME); - setToolTipText("Mark " + ACTION_NAME); - setId(ID); - setImageDescriptor(TaskListImages.STATUS_NORMAL_INCOMING); - if (selectedElements.size() == 1 && (selectedElements.get(0) instanceof Task)) { - Task task = (Task) selectedElements.get(0); - setEnabled(!task.isLocal()); - } else { - setEnabled(true); - } - } - - protected void performActionOnTask(AbstractRepositoryTask repositoryTask) { - TasksUiPlugin.getSynchronizationManager().setTaskRead(repositoryTask, false); - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/NewCategoryAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/NewCategoryAction.java deleted file mode 100644 index 42e2d8804..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/NewCategoryAction.java +++ /dev/null @@ -1,51 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.dialogs.InputDialog; -import org.eclipse.jface.window.Window; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; -import org.eclipse.mylar.tasks.core.TaskCategory; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.PlatformUI; - -/** - * @author Mik Kersten and Ken Sueda - */ -public class NewCategoryAction extends Action { - - public static final String ID = "org.eclipse.mylar.tasklist.actions.create.category"; - - private final TaskListView view; - - public NewCategoryAction(TaskListView view) { - this.view = view; - setText("New Category"); - setToolTipText("New Category"); - setId(ID); - setImageDescriptor(TaskListImages.CATEGORY_NEW); - } - - @Override - public void run() { - InputDialog dialog = new InputDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), - "Enter name", "Enter a name for the Category: ", "", null); - int dialogResult = dialog.open(); - if (dialogResult == Window.OK) { - TaskCategory cat = new TaskCategory(dialog.getValue(), TasksUiPlugin.getTaskListManager().getTaskList()); - TasksUiPlugin.getTaskListManager().getTaskList().addCategory(cat); - this.view.getViewer().refresh(); - } - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/NewLocalTaskAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/NewLocalTaskAction.java deleted file mode 100644 index 800bb3387..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/NewLocalTaskAction.java +++ /dev/null @@ -1,104 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import java.util.Calendar; -import java.util.GregorianCalendar; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.internal.tasks.ui.views.TaskInputDialog; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.Task; -import org.eclipse.mylar.tasks.core.TaskCategory; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.widgets.Display; - -/** - * @author Mik Kersten - */ -public class NewLocalTaskAction extends Action { - - public static final String DESCRIPTION_DEFAULT = "New Task"; - - public static final String ID = "org.eclipse.mylar.tasklist.actions.create.task"; - - private final TaskListView view; - - public NewLocalTaskAction() { - this(null); - } - - public NewLocalTaskAction(TaskListView view) { - this.view = view; - setText(TaskInputDialog.LABEL_SHELL); - setToolTipText(TaskInputDialog.LABEL_SHELL); - setId(ID); - setImageDescriptor(TaskListImages.TASK_NEW); - } - - @Override - public void run() { - Task newTask = new Task(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), DESCRIPTION_DEFAULT, true); - - scheduleNewTask(newTask); - - Object selectedObject = null; - if (view != null) { - selectedObject = ((IStructuredSelection) view.getViewer().getSelection()).getFirstElement(); - } - if (selectedObject instanceof TaskCategory) { - TasksUiPlugin.getTaskListManager().getTaskList().addTask(newTask, (TaskCategory) selectedObject); - } else if (selectedObject instanceof ITask) { - ITask task = (ITask) selectedObject; - if (task.getContainer() instanceof TaskCategory) { - TasksUiPlugin.getTaskListManager().getTaskList().addTask(newTask, (TaskCategory) task.getContainer()); - } else if (view.getDrilledIntoCategory() instanceof TaskCategory) { - TasksUiPlugin.getTaskListManager().getTaskList().addTask(newTask, - (TaskCategory) view.getDrilledIntoCategory()); - } else { - TasksUiPlugin.getTaskListManager().getTaskList().addTask(newTask, - TasksUiPlugin.getTaskListManager().getTaskList().getRootCategory()); - } - } else if (view != null && view.getDrilledIntoCategory() instanceof TaskCategory) { - TasksUiPlugin.getTaskListManager().getTaskList().addTask(newTask, - (TaskCategory) view.getDrilledIntoCategory()); - } else { - if (view != null && view.getDrilledIntoCategory() != null) { - MessageDialog - .openInformation(Display.getCurrent().getActiveShell(), TasksUiPlugin.TITLE_DIALOG, - "The new task has been added to the root of the list, since tasks can not be added to a query."); - } - TasksUiPlugin.getTaskListManager().getTaskList().addTask(newTask, - TasksUiPlugin.getTaskListManager().getTaskList().getRootCategory()); - } - - TaskUiUtil.openEditor(newTask, true); - - if (view != null) { - view.getViewer().refresh(); - view.setInRenameAction(true); - view.getViewer().editElement(newTask, 4); - view.setInRenameAction(false); - } - } - - public static void scheduleNewTask(ITask newTask) { - Calendar reminderCalendar = GregorianCalendar.getInstance(); - TasksUiPlugin.getTaskListManager().setScheduledToday(reminderCalendar); - TasksUiPlugin.getTaskListManager().setReminder(newTask, reminderCalendar.getTime()); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/NewQueryAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/NewQueryAction.java deleted file mode 100644 index 7f29aff74..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/NewQueryAction.java +++ /dev/null @@ -1,49 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.wizard.WizardDialog; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.wizards.NewQueryWizard; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.PlatformUI; - -/** - * @author Mik Kersten - * @author Eugene Kuleshov - */ -public class NewQueryAction extends AbstractRepositoryAction { - - private static final String WIZARD_LABEL = "Add or modify repository query"; - - public void run(IAction action) { - try { - NewQueryWizard wizard = new NewQueryWizard(getSelection()); - Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); - if (shell != null && !shell.isDisposed()) { - WizardDialog dialog = new WizardDialog(shell, wizard); - dialog.create(); - dialog.setTitle(WIZARD_LABEL); - dialog.setBlockOnOpen(true); - if (dialog.open() == Dialog.CANCEL) { - dialog.close(); - return; - } - } - } catch (Exception e) { - MylarStatusHandler.fail(e, e.getMessage(), true); - } - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/NewRepositoryTaskAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/NewRepositoryTaskAction.java deleted file mode 100644 index 489c2cf23..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/NewRepositoryTaskAction.java +++ /dev/null @@ -1,65 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import java.util.List; - -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.wizard.IWizard; -import org.eclipse.jface.wizard.WizardDialog; -import org.eclipse.mylar.internal.tasks.ui.wizards.NewRepositoryTaskWizard; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.AbstractRepositoryConnectorUi; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.PlatformUI; - -/** - * @author Mik Kersten - * @author Eugene Kuleshov - */ -public class NewRepositoryTaskAction extends AbstractRepositoryAction { - - public static final String ID = "org.eclipse.mylar.tasklist.ui.repositories.actions.create"; - - @Override - public void run() { - - IWizard wizard; - List<TaskRepository> repositories = TasksUiPlugin.getRepositoryManager().getAllRepositories(); - if (repositories.size() == 1) { - // NOTE: this click-saving should be generalized - TaskRepository taskRepository = repositories.get(0); - AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getRepositoryUi(taskRepository.getKind()); - - wizard = connectorUi.getNewTaskWizard(taskRepository, getSelection()); - } else { - wizard = new NewRepositoryTaskWizard(getSelection()); - } - - Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); - if (shell != null && !shell.isDisposed()) { - - WizardDialog dialog = new WizardDialog(shell, wizard); - dialog.setBlockOnOpen(true); - dialog.open(); - - } else { - // ignore - } - } - - public void run(IAction action) { - run(); - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/OpenTaskAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/OpenTaskAction.java deleted file mode 100644 index fb9db4440..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/OpenTaskAction.java +++ /dev/null @@ -1,87 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.dialogs.IDialogSettings; -import org.eclipse.jface.window.Window; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.IWorkbenchWindowActionDelegate; -import org.eclipse.ui.actions.ActionDelegate; - -/** - * @author wmitsuda - */ -public class OpenTaskAction extends ActionDelegate implements IWorkbenchWindowActionDelegate { - - private IWorkbenchWindow window; - - public void init(IWorkbenchWindow window) { - this.window = window; - } - - private static final String OPEN_TASK_ACTION_DIALOG_SETTINGS = "open.task.action.dialog.settings"; - - private static final String SHOW_IN_BROWSER_SETTING = "show.in.browser.setting"; - - @Override - public void run(IAction action) { - TaskSelectionDialog dlg = new TaskSelectionDialog(window.getShell()); - dlg.setTitle("Open Task"); - dlg.setShowOpenInBrowserOption(true); - - IDialogSettings settings = TasksUiPlugin.getDefault().getDialogSettings(); - IDialogSettings dlgSettings = settings.getSection(OPEN_TASK_ACTION_DIALOG_SETTINGS); - if (dlgSettings == null) { - dlgSettings = settings.addNewSection(OPEN_TASK_ACTION_DIALOG_SETTINGS); - } - dlg.setDialogBoundsSettings(dlgSettings, Dialog.DIALOG_PERSISTLOCATION | Dialog.DIALOG_PERSISTSIZE); - dlg.setOpenInBrowser(dlgSettings.getBoolean(SHOW_IN_BROWSER_SETTING)); - - int ret = dlg.open(); - dlgSettings.put(SHOW_IN_BROWSER_SETTING, dlg.getOpenInBrowser()); - if (ret != Window.OK) { - return; - } - - Object result = dlg.getFirstResult(); - if (result instanceof ITask) { - ITask task = (ITask) result; - if (dlg.getOpenInBrowser()) { - if (task.hasValidUrl()) { - TaskUiUtil.openUrl(task.getUrl()); - TasksUiPlugin.getTaskListManager().getTaskActivationHistory().addTask(task); - } - } else { - TaskUiUtil.refreshAndOpenTaskListElement(task); - TasksUiPlugin.getTaskListManager().getTaskActivationHistory().addTask(task); - } - } else if (result instanceof AbstractQueryHit) { - AbstractQueryHit hit = (AbstractQueryHit) result; - ITask task = hit.getOrCreateCorrespondingTask(); - if (task != null) { - if (dlg.getOpenInBrowser()) { - if (task.hasValidUrl()) { - TaskUiUtil.openUrl(task.getUrl()); - TasksUiPlugin.getTaskListManager().getTaskActivationHistory().addTask(task); - } - } else { - TaskUiUtil.refreshAndOpenTaskListElement(task); - TasksUiPlugin.getTaskListManager().getTaskActivationHistory().addTask(task); - } - } - } - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/OpenTaskListElementAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/OpenTaskListElementAction.java deleted file mode 100644 index eeedfebe4..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/OpenTaskListElementAction.java +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.StructuredViewer; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.tasks.core.ITaskListElement; - -/** - * @author Mik Kersten - */ -public class OpenTaskListElementAction extends Action { - - public static final String ID = "org.eclipse.mylar.tasklist.actions.open"; - - private final StructuredViewer viewer; - - public OpenTaskListElementAction(StructuredViewer view) { - this.viewer = view; - setText("Open"); - setToolTipText("Open Task List Element"); - setId(ID); - } - - @Override - public void run() { - ISelection selection = viewer.getSelection(); - Object element = ((IStructuredSelection) selection).getFirstElement(); - if (element instanceof ITaskListElement) { - TaskUiUtil.refreshAndOpenTaskListElement((ITaskListElement)element); - } - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/OpenWithBrowserAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/OpenWithBrowserAction.java deleted file mode 100644 index 2a003b7ba..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/OpenWithBrowserAction.java +++ /dev/null @@ -1,66 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import java.util.Iterator; - -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractTaskContainer; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.ui.actions.BaseSelectionListenerAction; - -/** - * @author Mik Kersten - * @author Rob Elves - */ -public class OpenWithBrowserAction extends BaseSelectionListenerAction { - - private static final String LABEL = "Open with Browser"; - - public static final String ID = "org.eclipse.mylar.tasklist.actions.open.browser"; - - public OpenWithBrowserAction() { - super(LABEL); - setToolTipText(LABEL); - setId(ID); - } - - @Override - public void run() { - if (super.getStructuredSelection() != null) { - for (Iterator iter = super.getStructuredSelection().iterator(); iter.hasNext();) { - runWithSelection(iter.next()); - } - } - } - - private void runWithSelection(Object selectedObject) { - ITask task = null; - if (selectedObject instanceof ITask) { - task = (ITask) selectedObject; - } else if (selectedObject instanceof AbstractQueryHit) { - AbstractQueryHit hit = (AbstractQueryHit) selectedObject; - task = hit.getOrCreateCorrespondingTask(); - } - String urlString = null; - if (task != null && task.hasValidUrl()) { - urlString = task.getUrl(); - } else if (selectedObject instanceof AbstractTaskContainer) { - AbstractTaskContainer query = (AbstractTaskContainer) selectedObject; - urlString = query.getUrl(); - } - if (urlString != null) { - TaskUiUtil.openUrl(urlString); - } - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/PreviousTaskDropDownAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/PreviousTaskDropDownAction.java deleted file mode 100644 index c5c24a62f..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/PreviousTaskDropDownAction.java +++ /dev/null @@ -1,64 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui.actions; - -import java.util.List; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.ActionContributionItem; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.internal.tasks.ui.views.TaskActivationHistory; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; -import org.eclipse.mylar.tasks.core.ITask; - -/** - * @author Wesley Coelho - */ -public class PreviousTaskDropDownAction extends TaskNavigateDropDownAction { - - public static final String ID = "org.eclipse.mylar.tasklist.actions.navigate.previous"; - - public PreviousTaskDropDownAction(TaskListView view, TaskActivationHistory history) { - super(view, history); - setText("Previous Task"); - setToolTipText("Previous Task"); - setId(ID); - setEnabled(true); - setImageDescriptor(TaskListImages.NAVIGATE_PREVIOUS); - } - - protected void addActionsToMenu() { - List<ITask> tasks = taskHistory.getPreviousTasks(); - - if (tasks.size() > MAX_ITEMS_TO_DISPLAY) { - tasks = tasks.subList(tasks.size() - MAX_ITEMS_TO_DISPLAY, tasks.size()); - } - - for (int i = tasks.size() - 1; i >= 0; i--) { - ITask currTask = tasks.get(i); - Action taskNavAction = new TaskNavigateAction(currTask); - ActionContributionItem item = new ActionContributionItem(taskNavAction); - if(currTask.isActive()) { - taskNavAction.setChecked(true); - } - item.fill(dropDownMenu, -1); - } - } - - public void run() { - if (taskHistory.hasPrevious()) { - new TaskActivateAction().run(taskHistory.getPreviousTask()); - setButtonStatus(); - view.refreshAndFocus(false); - } - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/RemoveFromCategoryAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/RemoveFromCategoryAction.java deleted file mode 100644 index 909fbf7a4..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/RemoveFromCategoryAction.java +++ /dev/null @@ -1,82 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.TaskCategory; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.widgets.TreeItem; -import org.eclipse.ui.PlatformUI; - -/** - * @author Ken Sueda - */ -public class RemoveFromCategoryAction extends Action { - public static final String ID = "org.eclipse.mylar.tasklist.actions.remove"; - - private final TaskListView view; - - public RemoveFromCategoryAction(TaskListView view) { - this.view = view; - setText("Remove From Category"); - setId(ID); - setImageDescriptor(TaskListImages.REMOVE); - } - - @Override - public void run() { - try { - ISelection selection = TaskListView.getFromActivePerspective().getViewer().getSelection(); - for (Object selectedObject : ((IStructuredSelection) selection).toList()) { - if (selectedObject instanceof ITask) { // && !((ITask) selectedObject).isLocal()) { - ITask task = (ITask) selectedObject; - if (task.isActive()) { - MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), - TasksUiPlugin.TITLE_DIALOG, - "Task must be deactivated in order to remove from category."); - return; - } - - TreeItem item = this.view.getViewer().getTree().getSelection()[0]; - if (item.getParentItem() != null && item.getParentItem().getData() instanceof TaskCategory) { - TaskCategory category = (TaskCategory) item.getParentItem().getData(); - TasksUiPlugin.getTaskListManager().getTaskList().removeFromCategory(category, task); - } else { - TasksUiPlugin.getTaskListManager().getTaskList().removeFromRoot(task); - } - // just in case, should already be there -// MylarTaskListPlugin.getTaskListManager().getTaskList().addTaskToArchive(task); -// ITaskContainer cat = task.getCategory(); -// if (cat != null) { -// String message = DeleteAction.genDeleteConfirmationMessage(task); -// boolean deleteConfirmed = MessageDialog.openQuestion(PlatformUI.getWorkbench() -// .getActiveWorkbenchWindow().getShell(), "Confirm delete", message); -// if (!deleteConfirmed) -// return; -// -// MylarTaskListPlugin.getTaskListManager().deleteTask(task); -// ContextCorePlugin.getContextManager().contextDeleted(task.getHandleIdentifier()); // task.getContextPath()); -// } - } - } - } catch (NullPointerException npe) { - MylarStatusHandler.fail(npe, "Could not remove task from category, it may still be refreshing.", true); - } - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/SaveRemoteFileAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/SaveRemoteFileAction.java deleted file mode 100644 index 4ffb6a1fa..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/SaveRemoteFileAction.java +++ /dev/null @@ -1,68 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import java.io.BufferedInputStream; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; - -import org.eclipse.jface.action.Action; - -/** - * An <code>Action</code> which saves the given file contents to the given - * file location on disk. - * - * @author Jeff Pound - */ -public class SaveRemoteFileAction extends Action { - - public static final String TITLE = "Save..."; - - private String destinationFilePath; - - private InputStream inStream; - - public SaveRemoteFileAction() { - super(TITLE); - } - - public void run() { - if (destinationFilePath == null || inStream == null) { - return; - } - - File outFile = new File(destinationFilePath); - try { - /* TODO jpound - Use FileWriter iff text? */ - FileOutputStream writer = new FileOutputStream(outFile); - BufferedInputStream reader = new BufferedInputStream(inStream); - - int c; - while ((c = reader.read()) != -1) { - writer.write(c); - } - - writer.close(); - reader.close(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - public void setDestinationFilePath(String destinationFilePath) { - this.destinationFilePath = destinationFilePath; - } - - public void setInputStream(InputStream inStream) { - this.inStream = inStream; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/SynchronizeSelectedAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/SynchronizeSelectedAction.java deleted file mode 100644 index 7cdc046c7..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/SynchronizeSelectedAction.java +++ /dev/null @@ -1,181 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.TaskCategory; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.IActionBars; -import org.eclipse.ui.IViewActionDelegate; -import org.eclipse.ui.IViewPart; -import org.eclipse.ui.actions.ActionDelegate; -import org.eclipse.ui.actions.ActionFactory; - -/** - * @author Mik Kersten - * @author Rob Elves - */ -public class SynchronizeSelectedAction extends ActionDelegate implements IViewActionDelegate { - - private Map<AbstractRepositoryConnector, List<AbstractRepositoryQuery>> queriesToSyncMap = new LinkedHashMap<AbstractRepositoryConnector, List<AbstractRepositoryQuery>>(); - - private Map<AbstractRepositoryConnector, List<AbstractRepositoryTask>> tasksToSyncMap = new LinkedHashMap<AbstractRepositoryConnector, List<AbstractRepositoryTask>>(); - - // private void checkSyncResult(final IJobChangeEvent event, final - // AbstractRepositoryQuery problemQuery) { - // if (event.getResult().getException() != null) { - // PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - // public void run() { - // MessageDialog.openError(Display.getDefault().getActiveShell(), - // TasksUiPlugin.TITLE_DIALOG, event - // .getResult().getMessage()); - // } - // }); - // } - // } - - public void run(IAction action) { - - if (TaskListView.getFromActivePerspective() != null) { - - ISelection selection = TaskListView.getFromActivePerspective().getViewer().getSelection(); - for (Object obj : ((IStructuredSelection) selection).toList()) { - if (obj instanceof AbstractRepositoryQuery) { - final AbstractRepositoryQuery repositoryQuery = (AbstractRepositoryQuery) obj; - AbstractRepositoryConnector client = TasksUiPlugin.getRepositoryManager().getRepositoryConnector( - repositoryQuery.getRepositoryKind()); - if (client != null) { - List<AbstractRepositoryQuery> queriesToSync = queriesToSyncMap.get(client); - if (queriesToSync == null) { - queriesToSync = new ArrayList<AbstractRepositoryQuery>(); - queriesToSyncMap.put(client, queriesToSync); - } - queriesToSync.add(repositoryQuery); - } - } else if (obj instanceof TaskCategory) { - TaskCategory cat = (TaskCategory) obj; - for (ITask task : cat.getChildren()) { - if (task instanceof AbstractRepositoryTask) { - AbstractRepositoryConnector client = TasksUiPlugin.getRepositoryManager() - .getRepositoryConnector(((AbstractRepositoryTask) task).getRepositoryKind()); - addTaskToSync(client, (AbstractRepositoryTask) task); - } - } - } else if (obj instanceof AbstractRepositoryTask) { - AbstractRepositoryTask repositoryTask = (AbstractRepositoryTask) obj; - AbstractRepositoryConnector client = TasksUiPlugin.getRepositoryManager().getRepositoryConnector( - repositoryTask.getRepositoryKind()); - addTaskToSync(client, repositoryTask); - } else if (obj instanceof AbstractQueryHit) { - AbstractQueryHit hit = (AbstractQueryHit) obj; - if (hit.getOrCreateCorrespondingTask() != null) { - AbstractRepositoryConnector client = TasksUiPlugin.getRepositoryManager() - .getRepositoryConnector(hit.getCorrespondingTask().getRepositoryKind()); - addTaskToSync(client, hit.getCorrespondingTask()); - } - } - } - - if (!queriesToSyncMap.isEmpty()) { - - // determine which repositories to synch changed tasks for - HashMap<String, Set<TaskRepository>> repositoriesToSync = new HashMap<String, Set<TaskRepository>>(); - for (AbstractRepositoryConnector connector : queriesToSyncMap.keySet()) { - List<AbstractRepositoryQuery> queriesToSync = queriesToSyncMap.get(connector); - for (AbstractRepositoryQuery query : queriesToSync) { - TaskRepository repos = TasksUiPlugin.getRepositoryManager().getRepository(query.getRepositoryKind(), query.getRepositoryUrl()); - Set<TaskRepository> repositories = repositoriesToSync.get(connector.getRepositoryType()); - if(repositories == null) { - repositories = new HashSet<TaskRepository>(); - repositoriesToSync.put(connector.getRepositoryType(), repositories); - } - repositories.add(repos); - } - } - - // synch the queries followed by the repositories - for (AbstractRepositoryConnector connector : queriesToSyncMap.keySet()) { - List<AbstractRepositoryQuery> queriesToSync = queriesToSyncMap.get(connector); - if (queriesToSync != null && queriesToSync.size() > 0) { - TasksUiPlugin.getSynchronizationManager().synchronize(connector, new HashSet<AbstractRepositoryQuery>(queriesToSync), null, Job.LONG, 0, - false); - } - - for (TaskRepository taskRepository : repositoriesToSync.get(connector.getRepositoryType())) { - TasksUiPlugin.getSynchronizationManager().synchronizeChanged(connector, taskRepository); - } - - } - } - if (!tasksToSyncMap.isEmpty()) { - for (AbstractRepositoryConnector connector : tasksToSyncMap.keySet()) { - List<AbstractRepositoryTask> tasksToSync = tasksToSyncMap.get(connector); - if (tasksToSync != null && tasksToSync.size() > 0) { - TasksUiPlugin.getSynchronizationManager().synchronize(connector, new HashSet<AbstractRepositoryTask>(tasksToSync), true, null); - } - } - } - - } - - queriesToSyncMap.clear(); - tasksToSyncMap.clear(); - - if (TaskListView.getFromActivePerspective() != null) { - TaskListView.getFromActivePerspective().getViewer().refresh(); - } - - } - - private void addTaskToSync(AbstractRepositoryConnector client, AbstractRepositoryTask repositoryTask) { - if (client != null) { - List<AbstractRepositoryTask> tasksToSync = tasksToSyncMap.get(client); - if (tasksToSync == null) { - tasksToSync = new ArrayList<AbstractRepositoryTask>(); - tasksToSyncMap.put(client, tasksToSync); - } - tasksToSync.add(repositoryTask); - } - } - - private IAction action; - - @Override - public void init(IAction action) { - this.action = action; - } - - public void init(IViewPart view) { - IActionBars actionBars = view.getViewSite().getActionBars(); - actionBars.setGlobalActionHandler(ActionFactory.REFRESH.getId(), action); - actionBars.updateActionBars(); - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskActivateAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskActivateAction.java deleted file mode 100644 index 87d0f14c1..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskActivateAction.java +++ /dev/null @@ -1,62 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.IViewActionDelegate; -import org.eclipse.ui.IViewPart; - -/** - * @author Mik Kersten - */ -public class TaskActivateAction extends Action implements IViewActionDelegate { - - public static final String ID = "org.eclipse.mylar.tasklist.actions.context.activate"; - - public TaskActivateAction() { - setId(ID); - setText("Activate"); - setImageDescriptor(TaskListImages.TASK_ACTIVE); - } - - public void init(IViewPart view) { - // TODO Auto-generated method stub - - } - - public void run() { - run(TaskListView.getFromActivePerspective().getSelectedTask()); - } - - public void run(ITask task) { - if (task != null && !task.isActive()) { - TasksUiPlugin.getTaskListManager().activateTask(task); - if (TaskListView.getFromActivePerspective() != null) { - TaskListView.getFromActivePerspective().refreshAndFocus(false); - } - } - } - - public void run(IAction action) { - run(); - } - - public void selectionChanged(IAction action, ISelection selection) { - // TODO Auto-generated method stub - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskDeactivateAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskDeactivateAction.java deleted file mode 100644 index c11b4da3f..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskDeactivateAction.java +++ /dev/null @@ -1,50 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import org.eclipse.jface.action.Action; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Mik Kersten - */ -public class TaskDeactivateAction extends Action { - - public static final String ID = "org.eclipse.mylar.tasklist.actions.context.deactivate"; - - public TaskDeactivateAction() { - setId(ID); - setText("Deactivate"); - setImageDescriptor(TaskListImages.TASK_INACTIVE); - } - - public void run(ITask task) { - try { - if (task != null) { - TasksUiPlugin.getTaskListManager().deactivateTask(task); -// TaskListView.getFromActivePerspective().refreshAndFocus(); - TaskUiUtil.closeEditorInActivePage(task); - } - } catch (Exception e) { - MylarStatusHandler.log(e, " Closing task editor on task deactivation failed"); - } - } - - public void run() { - run(TaskListView.getFromActivePerspective().getSelectedTask()); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskListElementPropertiesAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskListElementPropertiesAction.java deleted file mode 100644 index 8548afece..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskListElementPropertiesAction.java +++ /dev/null @@ -1,48 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.StructuredViewer; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.mylar.tasks.core.TaskCategory; - -/** - * @author Mik Kersten - */ -public class TaskListElementPropertiesAction extends Action { - - public static final String ID = "org.eclipse.mylar.tasklist.actions.properties"; - - private final StructuredViewer viewer; - - public TaskListElementPropertiesAction(StructuredViewer view) { - this.viewer = view; - setText("Properties"); - setToolTipText("Properties"); - setId(ID); -// setAccelerator(SWT.MOD1 + LegacyActionTools.findKeyCode("enter")); - } - - @Override - public void run() { - ISelection selection = viewer.getSelection(); - Object element = ((IStructuredSelection) selection).getFirstElement(); - if (element instanceof TaskCategory || element instanceof AbstractRepositoryQuery) { - TaskUiUtil.refreshAndOpenTaskListElement((ITaskListElement)element); - } - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskNavigateDropDownAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskNavigateDropDownAction.java deleted file mode 100644 index 0bca8158d..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskNavigateDropDownAction.java +++ /dev/null @@ -1,118 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui.actions; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.IMenuCreator; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.mylar.internal.tasks.ui.views.TaskActivationHistory; -import org.eclipse.mylar.internal.tasks.ui.views.TaskElementLabelProvider; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Menu; - -/** - * This abstract class contains some common code used by NextTaskDropDownAction - * and PreviousTaskDropDownAction - * - * @author Wesley Coelho - * @author Mik Kersten - */ -public abstract class TaskNavigateDropDownAction extends Action implements IMenuCreator { - - protected final TaskListView view; - - protected TaskActivationHistory taskHistory; - - protected Menu dropDownMenu = null; - - protected TaskElementLabelProvider labelProvider = new TaskElementLabelProvider(); - - /** Maximum number of items to appear in the drop-down menu */ - protected final static int MAX_ITEMS_TO_DISPLAY = 12; - - public TaskNavigateDropDownAction(TaskListView view, TaskActivationHistory history) { - super(); - this.view = view; - taskHistory = history; - setMenuCreator(this); - } - - /** - * Action for navigating to a specified task. This class should be protected - * but has been made public for testing only - */ - public class TaskNavigateAction extends Action { - - private ITask targetTask; - - private static final int MAX_LABEL_LENGTH = 40; - - public TaskNavigateAction(ITask task) { - targetTask = task; - String taskDescription = task.getDescription(); - if (taskDescription.length() > MAX_LABEL_LENGTH) { - taskDescription = taskDescription.subSequence(0, MAX_LABEL_LENGTH - 3) + "..."; - } - setText(taskDescription); - setEnabled(true); - setToolTipText(task.getDescription()); - Image image = labelProvider.getImage(task); - setImageDescriptor(ImageDescriptor.createFromImage(image)); - } - - public void run() { - if (targetTask.isActive()) { - return; - } - new TaskActivateAction().run(targetTask); - // taskHistory.navigatedToTask(targetTask); - taskHistory.addTask(targetTask); - setButtonStatus(); - view.refreshAndFocus(false); - } - } - - public void dispose() { - if (dropDownMenu != null) { - dropDownMenu.dispose(); - dropDownMenu = null; - } - } - - public Menu getMenu(Control parent) { - if (dropDownMenu != null) { - dropDownMenu.dispose(); - } - dropDownMenu = new Menu(parent); - addActionsToMenu(); - return dropDownMenu; - } - - public Menu getMenu(Menu parent) { - if (dropDownMenu != null) { - dropDownMenu.dispose(); - } - dropDownMenu = new Menu(parent); - addActionsToMenu(); - return dropDownMenu; - } - - public void setButtonStatus() { - setEnabled(taskHistory.getPreviousTasks() != null && taskHistory.getPreviousTasks().size() > 0); - // view.getNextTaskAction().setEnabled(taskHistory.hasNext()); - } - - protected abstract void addActionsToMenu(); - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskSelectionDialog.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskSelectionDialog.java deleted file mode 100644 index b49f53a70..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskSelectionDialog.java +++ /dev/null @@ -1,254 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.actions; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; -import java.util.regex.Pattern; - -import org.eclipse.jface.viewers.ArrayContentProvider; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerComparator; -import org.eclipse.jface.viewers.ViewerFilter; -import org.eclipse.mylar.internal.tasks.ui.views.TaskElementLabelProvider; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.mylar.tasks.core.TaskList; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.KeyAdapter; -import org.eclipse.swt.events.KeyEvent; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.dialogs.SelectionStatusDialog; - -/** - * @author wmitsuda - */ -public class TaskSelectionDialog extends SelectionStatusDialog { - - /** - * Implements a {@link ViewFilter} based on content typed in the filter - * field - * - * @author wmitsuda - */ - private static class TaskFilter extends ViewerFilter { - - private Pattern pattern; - - public void setFilterText(String filterText) { - if (filterText.trim().equals("")) { - pattern = null; - } else { - filterText = filterText.replace("\\", "\\\\"); - filterText = filterText.replace(".", "\\."); - filterText = filterText.replace("*", ".*"); - filterText = filterText.replace("?", ".?"); - pattern = Pattern.compile(filterText, Pattern.CASE_INSENSITIVE); - } - } - - @Override - public boolean select(Viewer viewer, Object parentElement, Object element) { - if (pattern == null) { - return TasksUiPlugin.getTaskListManager().getTaskActivationHistory().getPreviousTasks().contains( - element); - } - if (element instanceof ITask) { - ITask task = (ITask) element; - String description = task.getDescription(); - return pattern.matcher(description).find(); - } else if (element instanceof AbstractQueryHit) { - AbstractQueryHit hit = (AbstractQueryHit) element; - String description = hit.getDescription(); - return pattern.matcher(description).find(); - } - return false; - } - - } - - private TableViewer viewer; - - private Button openInBrowserCheck; - - private boolean openInBrowser; - - public boolean getOpenInBrowser() { - return openInBrowser; - } - - public void setOpenInBrowser(boolean openInBrowser) { - this.openInBrowser = openInBrowser; - } - - public TaskSelectionDialog(Shell parent) { - super(parent); - setShellStyle(getShellStyle() | SWT.RESIZE); - } - - private boolean showOpenInBrowserOption; - - public void setShowOpenInBrowserOption(boolean showOpenInBrowserOption) { - this.showOpenInBrowserOption = showOpenInBrowserOption; - } - - public boolean getShowOpenInBrowserOption() { - return showOpenInBrowserOption; - } - - @Override - protected Control createDialogArea(Composite parent) { - Composite area = (Composite) super.createDialogArea(parent); - - Label message = new Label(area, SWT.NONE); - message.setText("&Select a task to open (? = any character, * = any String):"); - final Text filterText = new Text(area, SWT.SINGLE | SWT.BORDER); - filterText.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false)); - - Label matches = new Label(area, SWT.NONE); - matches.setText("&Matching tasks:"); - viewer = new TableViewer(area); - Control control = viewer.getControl(); - GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); - control.setLayoutData(gd); - gd.widthHint = 400; - gd.heightHint = 200; - - if (showOpenInBrowserOption) { - openInBrowserCheck = new Button(area, SWT.CHECK); - openInBrowserCheck.setText("Open with &Browser"); - openInBrowserCheck.setSelection(openInBrowser); - } - - final TaskElementLabelProvider labelProvider = new TaskElementLabelProvider(); - viewer.setLabelProvider(labelProvider); - viewer.setContentProvider(new ArrayContentProvider()); - - // Compute all existing tasks or query hits (if corresponding task does - // not exist yet...) - Collection<ITaskListElement> allTasks = new HashSet<ITaskListElement>(); - TaskList taskList = TasksUiPlugin.getTaskListManager().getTaskList(); - allTasks.addAll(taskList.getAllTasks()); - for (AbstractRepositoryQuery query : taskList.getQueries()) { - allTasks.addAll(query.getChildren()); - } - - // Compute the task navigation history (in recent-to-older order) - final List<ITask> taskHistory = new ArrayList<ITask>(TasksUiPlugin.getTaskListManager() - .getTaskActivationHistory().getPreviousTasks()); - Collections.reverse(taskHistory); - - // Compute the task set who will be presented on dialog; the trick to - // make the task history appear first on the list is to add them before - // all other tasks; being a LinkedHashSet, it will not be duplicated - // (this is VERY IMPORTANT) - Set<ITaskListElement> taskSet = new LinkedHashSet<ITaskListElement>(taskHistory); - taskSet.addAll(allTasks); - viewer.setInput(taskSet); - - final TaskSelectionDialog.TaskFilter filter = new TaskSelectionDialog.TaskFilter(); - viewer.addFilter(filter); - viewer.setComparator(new ViewerComparator() { - - private ITask getCorrespondingTask(Object o) { - if (o instanceof ITask) { - return (ITask) o; - } - if (o instanceof AbstractQueryHit) { - AbstractQueryHit hit = (AbstractQueryHit) o; - return hit.getCorrespondingTask(); - } - return null; - } - - @Override - public int compare(Viewer viewer, Object e1, Object e2) { - ITask t1 = getCorrespondingTask(e1); - ITask t2 = getCorrespondingTask(e2); - boolean isInHistory1 = taskHistory.contains(t1); - boolean isInHistory2 = taskHistory.contains(t2); - - // Being on task history takes precedence... - if (isInHistory1 && !isInHistory2) { - return -1; - } - if (!isInHistory1 && isInHistory2) { - return 1; - } - - // Both are in task history; who is more recent? - if (isInHistory1 && isInHistory2) { - return taskHistory.indexOf(t1) - taskHistory.indexOf(t2); - } - - // Both are not in task history; sort by description... - return labelProvider.getText(e1).compareTo(labelProvider.getText(e2)); - } - - }); - - filterText.addKeyListener(new KeyAdapter() { - - @Override - public void keyPressed(KeyEvent e) { - if (e.keyCode == SWT.ARROW_DOWN) { - viewer.getControl().setFocus(); - } - } - - }); - filterText.addModifyListener(new ModifyListener() { - - public void modifyText(ModifyEvent e) { - filter.setFilterText(filterText.getText()); - viewer.refresh(false); - Object first = viewer.getElementAt(0); - if (first != null) { - viewer.setSelection(new StructuredSelection(first)); - } - } - - }); - - return area; - } - - @Override - protected void computeResult() { - setResult(((IStructuredSelection) viewer.getSelection()).toList()); - } - - @Override - public boolean close() { - if (openInBrowserCheck != null) { - openInBrowser = openInBrowserCheck.getSelection(); - } - return super.close(); - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/AbstractBugEditorInput.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/AbstractBugEditorInput.java deleted file mode 100644 index 6afe05d36..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/AbstractBugEditorInput.java +++ /dev/null @@ -1,93 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.editors; - -import java.net.Proxy; - -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IPersistableElement; - -/** - * Abstract base implementation of an <code>IEditorInput</code> for a subclass - * of <code>AbstractRepositoryTaskEditor</code>. - * @author Rob Elves (modifications) - */ -public abstract class AbstractBugEditorInput implements IEditorInput { - - protected String toolTipText = ""; - - protected Proxy proxySettings; - - protected TaskRepository repository; - - protected RepositoryTaskData repositoryTaskData; - - protected AbstractBugEditorInput(TaskRepository repository, RepositoryTaskData taskData) { - this.repositoryTaskData = taskData; - this.repository = repository; - this.proxySettings = TasksUiPlugin.getDefault().getProxySettings(); - } - - /** - * Sets the tool tip text for this editor input. - * - * @param str - * The new tool tip text. - */ - protected void setToolTipText(String str) { - // 03-20-03 Allows editor to store title (once it is known) - toolTipText = str; - } - - public boolean exists() { - return true; - } - - public RepositoryTaskData getRepositoryTaskData() { - return repositoryTaskData; - } - - public ImageDescriptor getImageDescriptor() { - return null; - } - - public IPersistableElement getPersistable() { - return null; - } - - public String getToolTipText() { - return toolTipText; - } - - public Object getAdapter(Class adapter) { - return null; - } - - /** - * @return <code>true</code> if the argument is an editor input on the - * same bug. - */ - @Override - public abstract boolean equals(Object o); - - public Proxy getProxySettings() { - return proxySettings; - } - - public TaskRepository getRepository() { - return repository; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/AbstractRepositoryTaskEditor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/AbstractRepositoryTaskEditor.java deleted file mode 100644 index 1261a961d..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/AbstractRepositoryTaskEditor.java +++ /dev/null @@ -1,2250 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui.editors; - -import java.io.BufferedInputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.jface.action.Separator; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.layout.GridDataFactory; -import org.eclipse.jface.resource.JFaceResources; -import org.eclipse.jface.text.TextViewer; -import org.eclipse.jface.util.SafeRunnable; -import org.eclipse.jface.viewers.DecoratingLabelProvider; -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.IColorProvider; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.ILabelDecorator; -import org.eclipse.jface.viewers.ILabelProvider; -import org.eclipse.jface.viewers.ILabelProviderListener; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.ISelectionProvider; -import org.eclipse.jface.viewers.IStructuredContentProvider; -import org.eclipse.jface.viewers.ITableColorProvider; -import org.eclipse.jface.viewers.ITableLabelProvider; -import org.eclipse.jface.viewers.LabelProvider; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerSorter; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.context.core.util.DateUtil; -import org.eclipse.mylar.internal.tasks.ui.TaskListColorsAndFonts; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.internal.tasks.ui.actions.CopyToClipboardAction; -import org.eclipse.mylar.internal.tasks.ui.actions.SaveRemoteFileAction; -import org.eclipse.mylar.internal.tasks.ui.wizards.NewAttachmentWizard; -import org.eclipse.mylar.internal.tasks.ui.wizards.NewAttachmentWizardDialog; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.IOfflineTaskHandler; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.RepositoryAttachment; -import org.eclipse.mylar.tasks.core.RepositoryOperation; -import org.eclipse.mylar.tasks.core.RepositoryTaskAttribute; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.mylar.tasks.core.TaskComment; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask.RepositoryTaskSyncState; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.CCombo; -import org.eclipse.swt.custom.StyledText; -import org.eclipse.swt.dnd.DND; -import org.eclipse.swt.dnd.DropTarget; -import org.eclipse.swt.dnd.DropTargetEvent; -import org.eclipse.swt.dnd.DropTargetListener; -import org.eclipse.swt.dnd.FileTransfer; -import org.eclipse.swt.dnd.TextTransfer; -import org.eclipse.swt.dnd.Transfer; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.FontData; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.FileDialog; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Menu; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.IEditorDescriptor; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.ISelectionListener; -import org.eclipse.ui.IStorageEditorInput; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchPart; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.actions.RetargetAction; -import org.eclipse.ui.forms.IManagedForm; -import org.eclipse.ui.forms.editor.FormEditor; -import org.eclipse.ui.forms.events.ExpansionAdapter; -import org.eclipse.ui.forms.events.ExpansionEvent; -import org.eclipse.ui.forms.events.HyperlinkAdapter; -import org.eclipse.ui.forms.events.HyperlinkEvent; -import org.eclipse.ui.forms.events.IExpansionListener; -import org.eclipse.ui.forms.widgets.ExpandableComposite; -import org.eclipse.ui.forms.widgets.FormToolkit; -import org.eclipse.ui.forms.widgets.ImageHyperlink; -import org.eclipse.ui.forms.widgets.ScrolledForm; -import org.eclipse.ui.forms.widgets.Section; -import org.eclipse.ui.themes.IThemeManager; -import org.eclipse.ui.views.contentoutline.ContentOutline; -import org.eclipse.ui.views.contentoutline.IContentOutlinePage; - -/** - * @author Mik Kersten - * @author Rob Elves - * @author Jeff Pound (Attachment work) - * @author Steffen Pingel - */ -public abstract class AbstractRepositoryTaskEditor extends TaskFormPage { - - private static final String HEADER_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";// "EEE - // d - // MMM - // yyyy - // HH:mm:ss"; - - private static final String ATTACHMENT_DEFAULT_NAME = "attachment"; - - private static final String CTYPE_ZIP = "zip"; - - private static final String CTYPE_OCTET_STREAM = "octet-stream"; - - private static final String CTYPE_TEXT = "text"; - - private static final String CTYPE_HTML = "html"; - - private static final String LABEL_BROWSER = "Browser"; - - private static final String LABEL_DEFAULT_EDITOR = "Default Editor"; - - private static final String LABEL_TEXT_EDITOR = "Text Editor"; - - protected static final String CONTEXT_MENU_ID = "#MylarRepositoryEditor"; - - public static final String HYPERLINK_TYPE_TASK = "task"; - - public static final String HYPERLINK_TYPE_JAVA = "java"; - - private static final String LABEL_BUTTON_SUBMIT = "Submit to Repository"; - - protected static final String LABEL_SECTION_ACTIONS = "Actions"; - - private static final String LABEL_SECTION_ATTRIBUTES = "Attributes"; - - private static final String LABEL_SECTION_ATTACHMENTS = "Attachments"; - - protected static final String LABEL_SECTION_DESCRIPTION = "Description"; - - protected static final String LABEL_SECTION_COMMENTS = "Comments"; - - protected static final String LABEL_SECTION_NEW_COMMENT = "New Comment"; - - private FormToolkit toolkit; - - private ScrolledForm form; - - protected TaskRepository repository; - - public static final int WRAP_LENGTH = 90; - - protected Display display; - - public static final Font TITLE_FONT = JFaceResources.getBannerFont(); - - public static final Font TEXT_FONT = JFaceResources.getDefaultFont(); - - public static final Font HEADER_FONT = JFaceResources.getDefaultFont(); - - public static final int DESCRIPTION_WIDTH = 79 * 8; // 500; - - public static final int DESCRIPTION_HEIGHT = 10 * 14; - - private static final String REASSIGN_BUG_TO = "Reassign bug to"; - - protected AbstractBugEditorInput editorInput; - - private MylarTaskEditor parentEditor = null; - - protected RepositoryTaskOutlineNode taskOutlineModel = null; - - /** - * Style option for function <code>newLayout</code>. This will create a - * plain-styled, selectable text label. - */ - protected final String VALUE = "VALUE"; - - /** - * Style option for function <code>newLayout</code>. This will create a - * bolded, selectable header. It will also have an arrow image before the - * text (simply for decoration). - */ - protected final String HEADER = "HEADER"; - - /** - * Style option for function <code>newLayout</code>. This will create a - * bolded, unselectable label. - */ - protected final String PROPERTY = "PROPERTY"; - - protected final int HORZ_INDENT = 0; - - protected CCombo attributeCombo; - - protected Button addSelfToCCCheck; - - protected Text summaryText; - - protected Button submitButton; - - protected Button addToTaskListRoot; - - protected Table attachmentsTable; - - protected TableViewer attachmentTableViewer; - - protected String[] attachmentsColumns = { "Description", "Type", "Creator", "Created" }; - - protected int[] attachmentsColumnWidths = { 200, 100, 100, 200 }; - - protected int scrollIncrement; - - protected int scrollVertPageIncrement; - - protected int scrollHorzPageIncrement; - - protected StyledText currentSelectedText; - - protected RetargetAction cutAction; - - protected RetargetAction pasteAction; - - protected Composite editorComposite; - - private List<IRepositoryTaskAttributeListener> attributesListeners = new ArrayList<IRepositoryTaskAttributeListener>(); - - protected final ISelectionProvider selectionProvider = new ISelectionProvider() { - public void addSelectionChangedListener(ISelectionChangedListener listener) { - selectionChangedListeners.add(listener); - } - - public ISelection getSelection() { - return null; - } - - public void removeSelectionChangedListener(ISelectionChangedListener listener) { - selectionChangedListeners.remove(listener); - } - - public void setSelection(ISelection selection) { - // No implementation. - } - }; - - protected List<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>(); - - protected HashMap<CCombo, RepositoryTaskAttribute> comboListenerMap = new HashMap<CCombo, RepositoryTaskAttribute>(); - - private IRepositoryTaskSelection lastSelected = null; - - /** - * Focuses on form widgets when an item in the outline is selected. - */ - protected final ISelectionListener selectionListener = new ISelectionListener() { - public void selectionChanged(IWorkbenchPart part, ISelection selection) { - if ((part instanceof ContentOutline) && (selection instanceof StructuredSelection)) { - Object select = ((StructuredSelection) selection).getFirstElement(); - if (select instanceof RepositoryTaskOutlineNode) { - RepositoryTaskOutlineNode n = (RepositoryTaskOutlineNode) select; - - if (n != null && lastSelected != null - && ContentOutlineTools.getHandle(n).equals(ContentOutlineTools.getHandle(lastSelected))) { - // we don't need to set the selection if it is already - // set - return; - } - lastSelected = n; - - boolean highlight = true; - if (n.getKey().equals(RepositoryTaskOutlineNode.LABEL_COMMENTS)) { - highlight = false; - } - - Object data = n.getData(); - if (n.getKey().equals(RepositoryTaskOutlineNode.LABEL_NEW_COMMENT)) { - selectNewComment(); - } else if (n.getKey().equals(RepositoryTaskOutlineNode.LABEL_DESCRIPTION) - && descriptionTextViewer.isEditable()) { - selectDescription(); - } else if (data != null) { - select(data, highlight); - } - } - } - } - }; - - private TableViewer attachmentsTableViewer; - - private final class AttachmentLabelProvider extends LabelProvider implements IColorProvider { - - public Color getBackground(Object element) { - return attachmentsTable.getDisplay().getSystemColor(SWT.COLOR_WHITE); - } - - public Color getForeground(Object element) { - return attachmentsTable.getDisplay().getSystemColor(SWT.COLOR_BLACK); - } - - } - - private static final class AttachmentTableLabelProvider extends DecoratingLabelProvider implements - ITableColorProvider, ITableLabelProvider { - - public AttachmentTableLabelProvider(ILabelProvider provider, ILabelDecorator decorator) { - super(provider, decorator); - } - - public Image getColumnImage(Object element, int columnIndex) { - // RepositoryAttachment attachment = (RepositoryAttachment) - // element; - return null; - } - - public String getColumnText(Object element, int columnIndex) { - RepositoryAttachment attachment = (RepositoryAttachment) element; - switch (columnIndex) { - case 0: - return attachment.getDescription(); - case 1: - if (attachment.isPatch()) { - return "patch"; - } else { - return attachment.getContentType(); - } - case 2: - return attachment.getCreator(); - case 3: - // TODO should retrieve Date object from IOfflineTaskHandler - return attachment.getDateCreated(); - } - return "unrecognized column"; - } - - public void addListener(ILabelProviderListener listener) { - // ignore - - } - - public void dispose() { - // ignore - - } - - public boolean isLabelProperty(Object element, String property) { - // ignore - return false; - } - - public void removeListener(ILabelProviderListener listener) { - // ignore - - } - - public Color getForeground(Object element, int columnIndex) { - RepositoryAttachment att = (RepositoryAttachment) element; - if (att.isObsolete()) { - return TaskListColorsAndFonts.COLOR_GRAY_LIGHT; - } - return super.getForeground(element); - } - - public Color getBackground(Object element, int columnIndex) { - return super.getBackground(element); - } - - public Font getFont(Object element, int columnIndex) { - return super.getFont(element); - } - } - - protected class ComboSelectionListener extends SelectionAdapter { - - private CCombo combo; - - public ComboSelectionListener(CCombo combo) { - this.combo = combo; - } - - public void widgetDefaultSelected(SelectionEvent event) { - // ignore - } - - public void widgetSelected(SelectionEvent event) { - if (comboListenerMap.containsKey(combo)) { - if (combo.getSelectionIndex() > -1) { - String sel = combo.getItem(combo.getSelectionIndex()); - RepositoryTaskAttribute attribute = comboListenerMap.get(combo); - if (sel != null && !(sel.equals(attribute.getValue()))) { - attribute.setValue(sel); - for (IRepositoryTaskAttributeListener client : attributesListeners) { - client.attributeChanged(attribute.getName(), sel); - } - markDirty(true); - } - } - } - } - } - - public abstract RepositoryTaskData getRepositoryTaskData(); - - protected abstract void validateInput(); - - protected abstract String getTitleString(); - - protected abstract void submitBug(); - - protected abstract void updateBug(); - - /** - * Creates a new <code>AbstractRepositoryTaskEditor</code>. Sets up the - * default fonts and cut/copy/paste actions. - */ - public AbstractRepositoryTaskEditor(FormEditor editor) { - // set the scroll increments so the editor scrolls normally with the - // scroll wheel - super(editor, "id", "label"); //$NON-NLS-1$ //$NON-NLS-2$ - FontData[] fd = TEXT_FONT.getFontData(); - int cushion = 4; - scrollIncrement = fd[0].getHeight() + cushion; - scrollVertPageIncrement = 0; - scrollHorzPageIncrement = 0; - - } - - public String getNewCommentText() { - return addCommentsTextBox.getText(); - } - - // /** - // * @return Any currently selected text. - // */ - // protected StyledText getCurrentText() { - // return currentSelectedText; - // } - - protected void createFormContent(final IManagedForm managedForm) { - super.createFormContent(managedForm); - form = managedForm.getForm(); - toolkit = managedForm.getToolkit(); - - editorComposite = form.getBody(); - GridLayout editorLayout = new GridLayout(); - editorComposite.setLayout(editorLayout); - editorComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); - - if (getRepositoryTaskData() == null) { - toolkit.createLabel(editorComposite, - "Could not download task data, possibly due to timeout or connectivity problem.\n" - + "Please check connection and try again."); - return; - } - - createReportHeaderLayout(editorComposite); - Composite attribComp = createAttributeLayout(editorComposite); - createCustomAttributeLayout(attribComp); - createAttachmentLayout(editorComposite); - createDescriptionLayout(editorComposite); - createCommentLayout(editorComposite); - createNewCommentLayout(editorComposite); - Composite bottomComposite = toolkit.createComposite(editorComposite); - bottomComposite.setLayout(new GridLayout(2, false)); - // GridDataFactory.fillDefaults().grab(true, - // false).applyTo(bottomComposite); - GridDataFactory.fillDefaults().align(SWT.FILL, SWT.DEFAULT).applyTo(bottomComposite); - - createActionsLayout(bottomComposite); - createPeopleLayout(bottomComposite); - - form.reflow(true); - getSite().getPage().addSelectionListener(selectionListener); - getSite().setSelectionProvider(selectionProvider); - if (this.addCommentsTextBox != null) { - registerDropListener(this.addCommentsTextBox); - } - } - - protected void createReportHeaderLayout(Composite composite) { - addSummaryText(composite); - - Composite headerInfoComposite = toolkit.createComposite(composite); - GridLayout headerLayout = new GridLayout(10, false); - headerLayout.verticalSpacing = 1; - headerLayout.marginHeight = 1; - headerLayout.horizontalSpacing = 2; - headerInfoComposite.setLayout(headerLayout); - - toolkit.createLabel(headerInfoComposite, " Status: ").setFont(TITLE_FONT); - String statusValue = this.getRepositoryTaskData().getAttributeValue(RepositoryTaskAttribute.STATUS); - toolkit.createText(headerInfoComposite, statusValue, SWT.FLAT | SWT.READ_ONLY); - toolkit.createLabel(headerInfoComposite, " Priority: ").setFont(TITLE_FONT); - toolkit.createText(headerInfoComposite, getRepositoryTaskData().getAttributeValue(RepositoryTaskAttribute.PRIORITY), SWT.FLAT | SWT.READ_ONLY); -// RepositoryTaskAttribute attribute = getRepositoryTaskData().getAttribute(RepositoryTaskAttribute.PRIORITY); -// if (attribute != null) { -// String value = attribute.getValue() != null ? attribute.getValue() : ""; -// attributeCombo = new CCombo(headerInfoComposite, SWT.FLAT | SWT.READ_ONLY); -// toolkit.adapt(attributeCombo, true, true); -// attributeCombo.setFont(TEXT_FONT); -// if (attribute.getValues() != null) { -// -// Set<String> s = attribute.getOptionValues().keySet(); -// String[] a = s.toArray(new String[s.size()]); -// for (int i = 0; i < a.length; i++) { -// attributeCombo.add(a[i]); -// } -// if (attributeCombo.indexOf(value) != -1) { -// attributeCombo.select(attributeCombo.indexOf(value)); -// } -// } -// attributeCombo.addSelectionListener(new ComboSelectionListener(attributeCombo)); -// comboListenerMap.put(attributeCombo, attribute); -// attributeCombo.addListener(SWT.FocusIn, new GenericListener()); -// } - - toolkit.createLabel(headerInfoComposite, " ID: ").setFont(TITLE_FONT); - toolkit.createText(headerInfoComposite, "" + getRepositoryTaskData().getId(), SWT.FLAT | SWT.READ_ONLY); - - String openedDateString = ""; - String modifiedDateString = ""; - final IOfflineTaskHandler offlineHandler = getOfflineTaskHandler(); - if (offlineHandler != null) { - Date created = offlineHandler.getDateForAttributeType(RepositoryTaskAttribute.DATE_CREATION, - getRepositoryTaskData().getCreated()); - openedDateString = created != null ? DateUtil.getFormattedDate(created, HEADER_DATE_FORMAT) : ""; - - Date modified = offlineHandler.getDateForAttributeType(RepositoryTaskAttribute.DATE_MODIFIED, - getRepositoryTaskData().getLastModified()); - modifiedDateString = modified != null ? DateUtil.getFormattedDate(modified, HEADER_DATE_FORMAT) : ""; - } - - toolkit.createLabel(headerInfoComposite, " Opened: ").setFont(TITLE_FONT); - toolkit.createText(headerInfoComposite, openedDateString, SWT.FLAT | SWT.READ_ONLY); - toolkit.createLabel(headerInfoComposite, " Modified: ").setFont(TITLE_FONT); - toolkit.createText(headerInfoComposite, modifiedDateString, SWT.FLAT | SWT.READ_ONLY); - } - - /** - * Creates the attribute layout, which contains most of the basic attributes - * of the bug (some of which are editable). - */ - protected Composite createAttributeLayout(Composite composite) { - String title = getTitleString(); - - Section section = createSection(composite, LABEL_SECTION_ATTRIBUTES); - section.setExpanded(false); - // Attributes Composite- this holds all the combo fields and text fields - Composite attributesComposite = toolkit.createComposite(section); - GridLayout attributesLayout = new GridLayout(); - attributesLayout.numColumns = 4; - attributesLayout.horizontalSpacing = 5; - attributesLayout.verticalSpacing = 4; - attributesComposite.setLayout(attributesLayout); - GridData attributesData = new GridData(GridData.FILL_BOTH); - attributesData.horizontalSpan = 1; - attributesData.grabExcessVerticalSpace = false; - attributesComposite.setLayoutData(attributesData); - section.setClient(attributesComposite); - editorInput.setToolTipText(title); - - int currentCol = 1; - - for (RepositoryTaskAttribute attribute : getRepositoryTaskData().getAttributes()) { - String name = attribute.getName(); - String value = ""; - value = checkText(attribute.getValue()); - if (attribute.isHidden()) - continue; - Map<String, String> values = attribute.getOptionValues(); - if (values == null) - values = new HashMap<String, String>(); - - GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); - data.horizontalSpan = 1; - data.horizontalIndent = HORZ_INDENT; - - if (attribute.hasOptions() && !attribute.isReadOnly()) { - Label label = toolkit.createLabel(attributesComposite, name); - GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.DEFAULT).applyTo(label); - attributeCombo = new CCombo(attributesComposite, SWT.FLAT | SWT.READ_ONLY); - toolkit.adapt(attributeCombo, true, true); - attributeCombo.setFont(TEXT_FONT); - attributeCombo.setLayoutData(data); - Set<String> s = values.keySet(); - String[] a = s.toArray(new String[s.size()]); - for (int i = 0; i < a.length; i++) { - attributeCombo.add(a[i]); - } - if (attributeCombo.indexOf(value) != -1) { - attributeCombo.select(attributeCombo.indexOf(value)); - } - attributeCombo.addSelectionListener(new ComboSelectionListener(attributeCombo)); - comboListenerMap.put(attributeCombo, attribute); - attributeCombo.addListener(SWT.FocusIn, new GenericListener()); - currentCol += 2; - } else { - Label label = toolkit.createLabel(attributesComposite, name); - GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.DEFAULT).applyTo(label); - Composite textFieldComposite = toolkit.createComposite(attributesComposite); - GridLayout textLayout = new GridLayout(); - textLayout.marginWidth = 1; - textLayout.marginHeight = 2; - textFieldComposite.setLayout(textLayout); - GridData textData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); - textData.horizontalSpan = 1; - textData.widthHint = 135; - - if (attribute.isReadOnly()) { - final Text text = toolkit.createText(textFieldComposite, value, SWT.FLAT | SWT.READ_ONLY); - text.setLayoutData(textData); - } else { - final Text text = toolkit.createText(textFieldComposite, value, SWT.FLAT); - // text.setFont(COMMENT_FONT); - text.setLayoutData(textData); - toolkit.paintBordersFor(textFieldComposite); - text.setData(attribute); - text.addListener(SWT.KeyUp, new Listener() { - public void handleEvent(Event event) { - String sel = text.getText(); - RepositoryTaskAttribute a = (RepositoryTaskAttribute) text.getData(); - if (!(a.getValue().equals(sel))) { - a.setValue(sel); - markDirty(true); - } - } - }); - text.addListener(SWT.FocusIn, new GenericListener()); - } - - currentCol += 2; - } - if (currentCol > attributesLayout.numColumns) { - currentCol -= attributesLayout.numColumns; - } - } - toolkit.paintBordersFor(attributesComposite); - // make sure that we are in the first column - if (currentCol > 1) { - while (currentCol <= attributesLayout.numColumns) { - toolkit.createLabel(attributesComposite, ""); - // newLayout(attributesComposite, 1, "", PROPERTY); - currentCol++; - } - } - return attributesComposite; - } - - // protected void createContextMenu(final Composite comp) { - // contextMenuManager = new MenuManager(CONTEXT_MENU_ID); - // contextMenuManager.setRemoveAllWhenShown(true); - // contextMenuManager.addMenuListener(new IMenuListener() { - // public void menuAboutToShow(IMenuManager manager) { - // manager.add(cutAction); - // manager.add(copyAction); - // manager.add(pasteAction); - // // Clipboard clipboard = new Clipboard(comp.getDisplay()); - // // TextTransfer textTransfer = TextTransfer.getInstance(); - // // String textData = (String) clipboard.getContents(textTransfer); - // // if (textData != null) { - // // pasteAction.setEnabled(true); - // // } else { - // // pasteAction.setEnabled(false); - // // } - // - // if (currentSelectedText == null || - // currentSelectedText.getSelectionText().length() == 0) { - // copyAction.setEnabled(false); - // } else { - // copyAction.setEnabled(true); - // } - // // manager.add(revealAllAction); - // manager.add(new Separator()); - // manager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS)); - // } - // }); - // // getSite().registerContextMenu(CONTEXT_MENU_ID, contextMenuManager, - // // getSite().getSelectionProvider()); - // } - - /** - * Adds a text field to display and edit the bug's summary. - * - * @param attributesComposite - * The composite to add the text field to. - */ - protected void addSummaryText(Composite attributesComposite) { - - Composite summaryComposite = toolkit.createComposite(attributesComposite); - GridLayout summaryLayout = new GridLayout(2, false); - summaryLayout.verticalSpacing = 0; - summaryLayout.marginHeight = 2; - summaryComposite.setLayout(summaryLayout); - GridDataFactory.fillDefaults().grab(true, false).applyTo(summaryComposite); - - toolkit.createLabel(summaryComposite, "Summary:").setFont(TITLE_FONT); - summaryText = toolkit.createText(summaryComposite, getRepositoryTaskData().getSummary(), SWT.FLAT); - IThemeManager themeManager = getSite().getWorkbenchWindow().getWorkbench().getThemeManager(); - Font summaryFont = themeManager.getCurrentTheme().getFontRegistry() - .get(TaskListColorsAndFonts.TASK_EDITOR_FONT); - summaryText.setFont(summaryFont); - GridData summaryTextData = new GridData(GridData.FILL_HORIZONTAL);// HORIZONTAL_ALIGN_FILL - summaryTextData.horizontalSpan = 1; - // summaryTextData.widthHint = 200; - - summaryText.setLayoutData(summaryTextData); - summaryText.addListener(SWT.KeyUp, new SummaryListener()); - summaryText.addListener(SWT.FocusIn, new GenericListener()); - toolkit.paintBordersFor(summaryComposite); - } - - protected void createAttachmentLayout(Composite composite) { - - // TODO: expand to show new attachments - Section section = createSection(composite, LABEL_SECTION_ATTACHMENTS + " (" - + getRepositoryTaskData().getAttachments().size() + ")"); - section.setExpanded(false); - final Composite attachmentsComposite = toolkit.createComposite(section); - attachmentsComposite.setLayout(new GridLayout(1, false)); - attachmentsComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); - section.setClient(attachmentsComposite); - - if (getRepositoryTaskData().getAttachments().size() > 0) { - - attachmentsTable = toolkit.createTable(attachmentsComposite, SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION); - registerDropListener(attachmentsTable); - attachmentsTable.setLinesVisible(true); - attachmentsTable.setHeaderVisible(true); - attachmentsTable.setLayout(new GridLayout()); - GridData tableGridData = new GridData(SWT.FILL, SWT.FILL, true, true); - // tableGridData.heightHint = 100; - // tableGridData.widthHint = DESCRIPTION_WIDTH; - attachmentsTable.setLayoutData(tableGridData); - - for (int i = 0; i < attachmentsColumns.length; i++) { - TableColumn column = new TableColumn(attachmentsTable, SWT.LEFT, i); - column.setText(attachmentsColumns[i]); - column.setWidth(attachmentsColumnWidths[i]); - } - - attachmentsTableViewer = new TableViewer(attachmentsTable); - attachmentsTableViewer.setUseHashlookup(true); - attachmentsTableViewer.setColumnProperties(attachmentsColumns); - - final IOfflineTaskHandler offlineHandler = getOfflineTaskHandler(); - if (offlineHandler != null) { - attachmentsTableViewer.setSorter(new ViewerSorter() { - public int compare(Viewer viewer, Object e1, Object e2) { - RepositoryAttachment attachment1 = (RepositoryAttachment) e1; - RepositoryAttachment attachment2 = (RepositoryAttachment) e2; - Date created1 = offlineHandler.getDateForAttributeType(RepositoryTaskAttribute.ATTACHMENT_DATE, - attachment1.getDateCreated()); - Date created2 = offlineHandler.getDateForAttributeType(RepositoryTaskAttribute.ATTACHMENT_DATE, - attachment2.getDateCreated()); - if (created1 != null && created2 != null) { - return created1.compareTo(created2); - } else if (created1 == null && created2 != null) { - return -1; - } else if (created1 != null && created2 == null) { - return 1; - } else { - return 0; - } - } - }); - } - - attachmentsTableViewer.setContentProvider(new IStructuredContentProvider() { - public Object[] getElements(Object inputElement) { - return getRepositoryTaskData().getAttachments().toArray(); - } - - public void dispose() { - // ignore - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - if (!viewer.getControl().isDisposed()) { - viewer.refresh(); - } - } - }); - - attachmentsTableViewer.setLabelProvider(new AttachmentTableLabelProvider(new AttachmentLabelProvider(), - PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator())); - - attachmentsTableViewer.addDoubleClickListener(new IDoubleClickListener() { - public void doubleClick(DoubleClickEvent event) { - // String address = repository.getUrl() + - // ATTACHMENT_URL_SUFFIX; - if (!event.getSelection().isEmpty()) { - StructuredSelection selection = (StructuredSelection) event.getSelection(); - RepositoryAttachment attachment = (RepositoryAttachment) selection.getFirstElement(); - // address += attachment.getId() + "&action=view"; - TaskUiUtil.openUrl(attachment.getUrl()); - } - } - }); - - attachmentsTableViewer.setInput(getRepositoryTaskData()); - - final MenuManager popupMenu = new MenuManager(); - Menu menu = popupMenu.createContextMenu(attachmentsTable); - attachmentsTable.setMenu(menu); - - final MenuManager openMenu = new MenuManager("Open With"); - - final Action openWithBrowserAction = new Action(LABEL_BROWSER) { - public void run() { - RepositoryAttachment attachment = (RepositoryAttachment) (((StructuredSelection) attachmentsTableViewer - .getSelection()).getFirstElement()); - TaskUiUtil.openUrl(attachment.getUrl()); - } - }; - - final Action openWithDefaultAction = new Action(LABEL_DEFAULT_EDITOR) { - public void run() { - RepositoryAttachment attachment = (RepositoryAttachment) (((StructuredSelection) attachmentsTableViewer - .getSelection()).getFirstElement()); - - // browser shortcut - if (attachment.getContentType().endsWith(CTYPE_HTML)) { - TaskUiUtil.openUrl(attachment.getUrl()); - return; - } - - IStorageEditorInput input = new RepositoryAttachmentEditorInput(attachment); - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - if (page == null) { - return; - } - IEditorDescriptor desc = PlatformUI.getWorkbench().getEditorRegistry().getDefaultEditor( - input.getName()); - try { - page.openEditor(input, desc.getId()); - } catch (PartInitException e) { - MylarStatusHandler.fail(e, "Unable to open editor for: " + attachment.getDescription(), false); - } - } - }; - - final Action openWithTextEditorAction = new Action(LABEL_TEXT_EDITOR) { - public void run() { - RepositoryAttachment attachment = (RepositoryAttachment) (((StructuredSelection) attachmentsTableViewer - .getSelection()).getFirstElement()); - IStorageEditorInput input = new RepositoryAttachmentEditorInput(attachment); - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - if (page == null) { - return; - } - - try { - page.openEditor(input, "org.eclipse.ui.DefaultTextEditor"); - } catch (PartInitException e) { - MylarStatusHandler.fail(e, "Unable to open editor for: " + attachment.getDescription(), false); - } - } - }; - - final Action saveAction = new Action(SaveRemoteFileAction.TITLE) { - public void run() { - RepositoryAttachment attachment = (RepositoryAttachment) (((StructuredSelection) attachmentsTableViewer - .getSelection()).getFirstElement()); - /* Launch Browser */ - FileDialog fileChooser = new FileDialog(attachmentsTable.getShell(), SWT.SAVE); - String fname = attachment.getAttributeValue(RepositoryTaskAttribute.ATTACHMENT_FILENAME); - // Default name if none is found - if (fname.equals("")) { - String ctype = attachment.getContentType(); - if (ctype.endsWith(CTYPE_HTML)) { - fname = ATTACHMENT_DEFAULT_NAME + ".html"; - } else if (ctype.startsWith(CTYPE_TEXT)) { - fname = ATTACHMENT_DEFAULT_NAME + ".txt"; - } else if (ctype.endsWith(CTYPE_OCTET_STREAM)) { - fname = ATTACHMENT_DEFAULT_NAME; - } else if (ctype.endsWith(CTYPE_ZIP)) { - fname = ATTACHMENT_DEFAULT_NAME + "." + CTYPE_ZIP; - } else { - fname = ATTACHMENT_DEFAULT_NAME + "." + ctype.substring(ctype.indexOf("/") + 1); - } - } - fileChooser.setFileName(fname); - String filePath = fileChooser.open(); - - // Check if the dialog was canceled or an error occured - if (filePath == null) { - return; - } - - // TODO: Use IAttachmentHandler instead - SaveRemoteFileAction save = new SaveRemoteFileAction(); - save.setDestinationFilePath(filePath); - save.setInputStream(getAttachmentInputStream(attachment.getUrl())); - save.run(); - } - }; - - final Action copyToClipAction = new Action(CopyToClipboardAction.TITLE) { - public void run() { - RepositoryAttachment attachment = (RepositoryAttachment) (((StructuredSelection) attachmentsTableViewer - .getSelection()).getFirstElement()); - CopyToClipboardAction copyToClip = new CopyToClipboardAction(); - copyToClip.setContents(getAttachmentContents(attachment.getUrl())); - copyToClip.setControl(attachmentsTable.getParent()); - copyToClip.run(); - } - }; - - final Action applyPatchAction = new Action("Apply Patch...") { - public void run() { - // RepositoryAttachment att = - // (RepositoryAttachment)(((StructuredSelection)attachmentsTableViewer.getSelection()).getFirstElement()); - // implementation pending bug 98707 - } - }; - applyPatchAction.setEnabled(false); // pending bug 98707 - - /* - * Rebuild menu with the appropriate items for the selection - */ - attachmentsTableViewer.addSelectionChangedListener(new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent e) { - RepositoryAttachment att = (RepositoryAttachment) (((StructuredSelection) e.getSelection()) - .getFirstElement()); - popupMenu.removeAll(); - popupMenu.add(openMenu); - openMenu.removeAll(); - - IStorageEditorInput input = new RepositoryAttachmentEditorInput(att); - IEditorDescriptor desc = PlatformUI.getWorkbench().getEditorRegistry().getDefaultEditor( - input.getName()); - if (desc != null) { - openMenu.add(openWithDefaultAction); - } - openMenu.add(openWithBrowserAction); - openMenu.add(openWithTextEditorAction); - - popupMenu.add(new Separator()); - popupMenu.add(saveAction); - - if (att.getContentType().startsWith(CTYPE_TEXT) || att.getContentType().endsWith("xml")) { - popupMenu.add(copyToClipAction); - } - if (att.isPatch()) { - popupMenu.add(applyPatchAction); - } - } - }); - - } else { - Label label = toolkit.createLabel(attachmentsComposite, "No attachments"); - registerDropListener(label); - } - - /* Launch a NewAttachemntWizard */ - Button addAttachmentButton = toolkit.createButton(attachmentsComposite, "Add...", SWT.PUSH); - - final RepositoryTaskData taskData = getRepositoryTaskData(); - ITask task = TasksUiPlugin.getTaskListManager().getTaskList().getTask( - AbstractRepositoryTask.getHandle(repository.getUrl(), taskData.getId())); - if (task == null) { - addAttachmentButton.setEnabled(false); - } - - addAttachmentButton.addSelectionListener(new SelectionListener() { - public void widgetDefaultSelected(SelectionEvent e) { - // ignore - } - - public void widgetSelected(SelectionEvent e) { - final RepositoryTaskData taskData = getRepositoryTaskData(); - ITask task = TasksUiPlugin.getTaskListManager().getTaskList().getTask( - AbstractRepositoryTask.getHandle(repository.getUrl(), taskData.getId())); - if (!(task instanceof AbstractRepositoryTask)) { - // Should not happen - return; - } - if (AbstractRepositoryTaskEditor.this.isDirty - || ((AbstractRepositoryTask) task).getSyncState().equals(RepositoryTaskSyncState.OUTGOING)) { - MessageDialog.openInformation(attachmentsComposite.getShell(), - "Task not synchronized or dirty editor", - "Commit edits or synchronize task before adding attachments."); - return; - } - - NewAttachmentWizard naw = new NewAttachmentWizard(repository, (AbstractRepositoryTask) task); - NewAttachmentWizardDialog dialog = new NewAttachmentWizardDialog(attachmentsComposite.getShell(), naw); - naw.setDialog(dialog); - dialog.create(); - dialog.open(); - } - }); - - registerDropListener(section); - registerDropListener(attachmentsComposite); - registerDropListener(addAttachmentButton); - } - - protected IOfflineTaskHandler getOfflineTaskHandler() { - final AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager().getRepositoryConnector( - getRepositoryTaskData().getRepositoryKind()); - if (connector != null) { - return connector.getOfflineTaskHandler(); - } - return null; - } - - private void registerDropListener(final Control control) { - DropTarget target = new DropTarget(control, DND.DROP_COPY | DND.DROP_DEFAULT); - final TextTransfer textTransfer = TextTransfer.getInstance(); - final FileTransfer fileTransfer = FileTransfer.getInstance(); - Transfer[] types = new Transfer[] { textTransfer, fileTransfer }; - target.setTransfer(types); - - // Adapted from eclipse.org DND Article by Veronika Irvine, IBM OTI Labs - // http://www.eclipse.org/articles/Article-SWT-DND/DND-in-SWT.html#_dt10D - target.addDropListener(new DropTargetListener() { - public void dragEnter(DropTargetEvent event) { - if (event.detail == DND.DROP_DEFAULT) { - if ((event.operations & DND.DROP_COPY) != 0) { - event.detail = DND.DROP_COPY; - } else { - event.detail = DND.DROP_NONE; - } - } - // will accept text but prefer to have files dropped - for (int i = 0; i < event.dataTypes.length; i++) { - if (fileTransfer.isSupportedType(event.dataTypes[i])) { - event.currentDataType = event.dataTypes[i]; - // files should only be copied - if (event.detail != DND.DROP_COPY) { - event.detail = DND.DROP_NONE; - } - break; - } - } - } - - public void dragOver(DropTargetEvent event) { - event.feedback = DND.FEEDBACK_SELECT | DND.FEEDBACK_SCROLL; - // if (textTransfer.isSupportedType(event.currentDataType)) { - // // NOTE: on unsupported platforms this will return null - // Object o = textTransfer.nativeToJava(event.currentDataType); - // String t = (String)o; - // if (t != null) System.out.println(t); - // } - } - - public void dragOperationChanged(DropTargetEvent event) { - if ((event.detail == DND.DROP_DEFAULT) || (event.operations & DND.DROP_COPY) != 0) { - - event.detail = DND.DROP_COPY; - } else { - event.detail = DND.DROP_NONE; - } - - // allow text to be moved but files should only be copied - if (fileTransfer.isSupportedType(event.currentDataType)) { - if (event.detail != DND.DROP_COPY) { - event.detail = DND.DROP_NONE; - } - } - } - - public void dragLeave(DropTargetEvent event) { - } - - public void dropAccept(DropTargetEvent event) { - } - - public void drop(DropTargetEvent event) { - if (textTransfer.isSupportedType(event.currentDataType)) { - String text = (String) event.data; - final RepositoryTaskData taskData = getRepositoryTaskData(); - ITask task = TasksUiPlugin.getTaskListManager().getTaskList().getTask( - AbstractRepositoryTask.getHandle(repository.getUrl(), taskData.getId())); - if (!(task instanceof AbstractRepositoryTask)) { - // Should not happen - return; - } - - NewAttachmentWizard naw = new NewAttachmentWizard(repository, (AbstractRepositoryTask) task, text); - NewAttachmentWizardDialog dialog = new NewAttachmentWizardDialog(control.getShell(), naw); - naw.setDialog(dialog); - dialog.create(); - dialog.open(); - } - if (fileTransfer.isSupportedType(event.currentDataType)) { - String[] files = (String[]) event.data; - if (files.length > 0) { - final RepositoryTaskData taskData = getRepositoryTaskData(); - ITask task = TasksUiPlugin.getTaskListManager().getTaskList().getTask( - AbstractRepositoryTask.getHandle(repository.getUrl(), taskData.getId())); - if (!(task instanceof AbstractRepositoryTask)) { - // Should not happen - return; - } - - NewAttachmentWizard naw = new NewAttachmentWizard(repository, (AbstractRepositoryTask) task, - new File(files[0])); - NewAttachmentWizardDialog dialog = new NewAttachmentWizardDialog(control.getShell(), naw); - naw.setDialog(dialog); - dialog.create(); - dialog.open(); - } - } - } - }); - } - - public static InputStream getAttachmentInputStream(String url) { - URLConnection urlConnect; - InputStream stream = null; - try { - urlConnect = (new URL(url)).openConnection(); - urlConnect.connect(); - stream = urlConnect.getInputStream(); - - } catch (MalformedURLException e) { - MylarStatusHandler.fail(e, "Attachment url was malformed.", false); - } catch (IOException e) { - MylarStatusHandler.fail(e, "I/O Error occurred reading attachment.", false); - } - return stream; - } - - public static String getAttachmentContents(String url) { - URLConnection urlConnect; - StringBuffer contents = new StringBuffer(); - try { - urlConnect = (new URL(url)).openConnection(); - urlConnect.connect(); - BufferedInputStream stream = new BufferedInputStream(urlConnect.getInputStream()); - int c; - while ((c = stream.read()) != -1) { - /* TODO jpound - handle non-text */ - contents.append((char) c); - } - stream.close(); - } catch (MalformedURLException e) { - MylarStatusHandler.fail(e, "Attachment url was malformed.", false); - } catch (IOException e) { - MylarStatusHandler.fail(e, "I/O Error occurred reading attachment.", false); - } - return contents.toString(); - } - - protected void createDescriptionLayout(Composite composite) { - final Section section = createSection(composite, LABEL_SECTION_DESCRIPTION); - - final Composite sectionComposite = toolkit.createComposite(section); - section.setClient(sectionComposite); - GridLayout addCommentsLayout = new GridLayout(); - addCommentsLayout.numColumns = 1; - sectionComposite.setLayout(addCommentsLayout); - GridData sectionCompositeData = new GridData(GridData.FILL_HORIZONTAL); - sectionComposite.setLayoutData(sectionCompositeData); - - // descriptionTextViewer = addRepositoryTextViewer(repository, - // sectionComposite, getRepositoryTaskData() - // .getDescription(), SWT.MULTI | SWT.WRAP); - // final StyledText styledText = descriptionTextViewer.getTextWidget(); - // styledText.addListener(SWT.FocusIn, new DescriptionListener()); - // styledText.setLayout(new GridLayout()); - // GridDataFactory.fillDefaults().hint(DESCRIPTION_WIDTH, - // SWT.DEFAULT).applyTo(styledText); - // - // texts.add(textsindex, styledText); - // textHash.put(getRepositoryTaskData().getDescription(), styledText); - // textsindex++; - - RepositoryTaskAttribute attribute = getRepositoryTaskData().getDescriptionAttribute(); - if (attribute != null && !attribute.isReadOnly()) { - descriptionTextViewer = addTextEditor(repository, sectionComposite, getRepositoryTaskData() - .getDescription(), true, SWT.FLAT | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL); - descriptionTextViewer.setEditable(true); - StyledText styledText = descriptionTextViewer.getTextWidget(); - GridData gd = new GridData(GridData.FILL_HORIZONTAL); - gd.widthHint = DESCRIPTION_WIDTH; - gd.heightHint = SWT.DEFAULT; - gd.grabExcessHorizontalSpace = true; - descriptionTextViewer.getControl().setLayoutData(gd); - descriptionTextViewer.getControl().setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); - descriptionTextViewer.getTextWidget().addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - String sel = descriptionTextViewer.getTextWidget().getText(); - if (!(getRepositoryTaskData().getDescription().equals(sel))) { - getRepositoryTaskData().setDescription(sel); - markDirty(true); - } - validateInput(); - } - }); - textHash.put(getRepositoryTaskData().getDescription(), styledText); - } else { - String text = getRepositoryTaskData().getDescription(); - descriptionTextViewer = addTextViewer(repository, sectionComposite, text, SWT.MULTI | SWT.WRAP); - StyledText styledText = descriptionTextViewer.getTextWidget(); - GridDataFactory.fillDefaults().hint(DESCRIPTION_WIDTH, SWT.DEFAULT).applyTo( - descriptionTextViewer.getControl()); - - textHash.put(text, styledText); - } - - descriptionTextViewer.getTextWidget().addListener(SWT.FocusIn, new DescriptionListener()); - - toolkit.paintBordersFor(sectionComposite); - - } - - protected void createCustomAttributeLayout(Composite composite) { - // override - } - - protected void createPeopleLayout(Composite composite) { - // override - } - - /** - * A listener for selection of the description field. - */ - protected class DescriptionListener implements Listener { - public void handleEvent(Event event) { - fireSelectionChanged(new SelectionChangedEvent(selectionProvider, - new StructuredSelection(new RepositoryTaskSelection(getRepositoryTaskData().getId(), - getRepositoryTaskData().getRepositoryUrl(), LABEL_SECTION_DESCRIPTION, true, - getRepositoryTaskData().getSummary())))); - } - } - - protected void createCommentLayout(Composite composite) { - Section section = createSection(composite, LABEL_SECTION_COMMENTS); - - ImageHyperlink hyperlink = toolkit.createImageHyperlink(section, SWT.NONE); - hyperlink.setBackgroundMode(SWT.INHERIT_NONE); - hyperlink.setBackground(section.getTitleBarBackground()); - hyperlink.setImage(TaskListImages.getImage(TaskListImages.EXPAND_ALL)); - hyperlink.addHyperlinkListener(new HyperlinkAdapter() { - public void linkActivated(HyperlinkEvent e) { - revealAllComments(); - } - }); - - section.setTextClient(hyperlink); - - // Additional (read-only) Comments Area - Composite addCommentsComposite = toolkit.createComposite(section); - section.setClient(addCommentsComposite); - GridLayout addCommentsLayout = new GridLayout(); - addCommentsLayout.numColumns = 1; - addCommentsComposite.setLayout(addCommentsLayout); - GridDataFactory.fillDefaults().grab(true, false).applyTo(addCommentsComposite); - AbstractRepositoryTask repositoryTask = null; - IOfflineTaskHandler offlineHandler = null; - IEditorInput input = this.getEditorInput(); - if (input instanceof ExistingBugEditorInput) { - ExistingBugEditorInput existingInput = (ExistingBugEditorInput) input; - repositoryTask = existingInput.getRepositoryTask(); - - AbstractRepositoryConnector connector = (AbstractRepositoryConnector) TasksUiPlugin.getRepositoryManager() - .getRepositoryConnector(getRepositoryTaskData().getRepositoryKind()); - offlineHandler = connector.getOfflineTaskHandler(); - } - StyledText styledText = null; - for (Iterator<TaskComment> it = getRepositoryTaskData().getComments().iterator(); it.hasNext();) { - final TaskComment taskComment = it.next(); - - // skip comment 0 as it is the description - if (taskComment.getNumber() == 0) - continue; - - ExpandableComposite expandableComposite = toolkit.createExpandableComposite(addCommentsComposite, - ExpandableComposite.TREE_NODE); - - // Expand new comments - if (repositoryTask != null && offlineHandler != null) { - Date lastModDate = offlineHandler.getDateForAttributeType(RepositoryTaskAttribute.DATE_MODIFIED, - repositoryTask.getLastSyncDateStamp()); - - if (lastModDate != null) { - // reduce granularity to minutes - Calendar calLastMod = Calendar.getInstance(); - calLastMod.setTime(lastModDate); - calLastMod.set(Calendar.SECOND, 0); - - Date commentDate = offlineHandler.getDateForAttributeType(RepositoryTaskAttribute.COMMENT_DATE, - taskComment.getCreated()); - if (commentDate != null - && (commentDate.after(calLastMod.getTime()) || commentDate.equals(calLastMod.getTime()))) { - expandableComposite.setExpanded(true); - } - } - } else if (repositoryTask != null && repositoryTask.getLastSyncDateStamp() == null && !it.hasNext()) { - // no task data (query hit?) so expand last comment - expandableComposite.setExpanded(true); - } - - expandableComposite.setText(taskComment.getNumber() + ": " + taskComment.getAuthorName() + ", " - + taskComment.getCreated()); - - expandableComposite.addExpansionListener(new ExpansionAdapter() { - public void expansionStateChanged(ExpansionEvent e) { - form.reflow(true); - } - }); - - expandableComposite.setLayout(new GridLayout()); - expandableComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - Composite ecComposite = toolkit.createComposite(expandableComposite); - GridLayout ecLayout = new GridLayout(); - ecLayout.marginHeight = 0; - ecLayout.marginBottom = 10; - ecLayout.marginLeft = 10; - ecComposite.setLayout(ecLayout); - ecComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - expandableComposite.setClient(ecComposite); - - TextViewer viewer = addTextViewer(repository, ecComposite, taskComment.getText(), SWT.MULTI | SWT.WRAP); - viewer.getControl().setBackground(new Color(expandableComposite.getDisplay(), 123, 34, 155)); - styledText = viewer.getTextWidget(); - GridDataFactory.fillDefaults().hint(DESCRIPTION_WIDTH, SWT.DEFAULT).applyTo(styledText); - // GridDataFactory.fillDefaults().hint(DESCRIPTION_WIDTH, - // SWT.DEFAULT).applyTo(viewer.getControl()); - - // code for outline - commentStyleText.add(styledText); - textHash.put(taskComment, styledText); - } - if (getRepositoryTaskData().getComments() == null || getRepositoryTaskData().getComments().size() <= 1) { - section.setExpanded(false); - } - } - - protected void createNewCommentLayout(Composite composite) { - Section section = createSection(composite, LABEL_SECTION_NEW_COMMENT); - - Composite newCommentsComposite = toolkit.createComposite(section); - newCommentsComposite.setLayout(new GridLayout()); - - final TextViewer newCommentTextViewer = addTextEditor(repository, newCommentsComposite, getRepositoryTaskData() - .getNewComment(), true, SWT.FLAT | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL); - newCommentTextViewer.setEditable(true); - - GridData addCommentsTextData = new GridData(GridData.FILL_HORIZONTAL); - addCommentsTextData.widthHint = DESCRIPTION_WIDTH; - addCommentsTextData.heightHint = DESCRIPTION_HEIGHT; - addCommentsTextData.grabExcessHorizontalSpace = true; - newCommentTextViewer.getControl().setLayoutData(addCommentsTextData); - newCommentTextViewer.getControl().setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); - - newCommentTextViewer.getTextWidget().addModifyListener(new ModifyListener() { - - public void modifyText(ModifyEvent e) { - String sel = addCommentsTextBox.getText(); - if (!(getRepositoryTaskData().getNewComment().equals(sel))) { - getRepositoryTaskData().setNewComment(sel); - markDirty(true); - } - validateInput(); - } - }); - - newCommentTextViewer.getTextWidget().addListener(SWT.FocusIn, new NewCommentListener()); - addCommentsTextBox = newCommentTextViewer.getTextWidget(); - - section.setClient(newCommentsComposite); - - toolkit.paintBordersFor(newCommentsComposite); - - } - - /** - * Creates the button layout. This displays options and buttons at the - * bottom of the editor to allow actions to be performed on the bug. - */ - protected void createActionsLayout(Composite composite) { - Section section = createSection(composite, LABEL_SECTION_ACTIONS); - GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP).grab(true, true).applyTo(section); - Composite buttonComposite = toolkit.createComposite(section); - GridLayout buttonLayout = new GridLayout(); - GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP).applyTo(buttonComposite); - buttonLayout.numColumns = 4; - buttonComposite.setLayout(buttonLayout); - addRadioButtons(buttonComposite); - addActionButtons(buttonComposite); - section.setClient(buttonComposite); - } - - protected Section createSection(Composite composite, String title) { - Section section = toolkit.createSection(composite, ExpandableComposite.TITLE_BAR | Section.TWISTIE); - section.setText(title); - section.setExpanded(true); - section.setLayout(new GridLayout()); - section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - section.addExpansionListener(new IExpansionListener() { - public void expansionStateChanging(ExpansionEvent e) { - form.reflow(true); - } - - public void expansionStateChanged(ExpansionEvent e) { - form.reflow(true); - } - }); - return section; - } - - /** - * Adds buttons to this composite. Subclasses can override this method to - * provide different/additional buttons. - * - * @param buttonComposite - * Composite to add the buttons to. - */ - protected void addActionButtons(Composite buttonComposite) { - submitButton = toolkit.createButton(buttonComposite, LABEL_BUTTON_SUBMIT, SWT.NONE); - GridData submitButtonData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); - submitButton.setLayoutData(submitButtonData); - submitButton.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event e) { - submitBug(); - } - }); - submitButton.addListener(SWT.FocusIn, new GenericListener()); - RepositoryTaskData taskData = getRepositoryTaskData(); - ITask task = TasksUiPlugin.getTaskListManager().getTaskList().getTask( - AbstractRepositoryTask.getHandle(repository.getUrl(), taskData.getId())); - if (task != null) { - addAttachContextButton(buttonComposite, task); - } - - } - - /** - * Make sure that a String that is <code>null</code> is changed to a null - * string - * - * @param text - * The text to check if it is null or not - * @return If the text is <code>null</code>, then return the null string (<code>""</code>). - * Otherwise, return the text. - */ - public static String checkText(String text) { - if (text == null) - return ""; - else - return text; - } - - /** - * This refreshes the text in the title label of the info area (it contains - * elements which can change). - */ - protected void setGeneralTitleText() { - // String text = "[Open in Internal Browser]"; - // linkToBug.setText(text); - // linkToBug.setFont(TEXT_FONT); - // if (this instanceof ExistingBugEditor) { - // linkToBug.setUnderlined(true); - // linkToBug.setForeground(JFaceColors.getHyperlinkText(Display.getCurrent())); - // linkToBug.addMouseListener(new MouseListener() { - // - // public void mouseDoubleClick(MouseEvent e) { - // } - // - // public void mouseUp(MouseEvent e) { - // } - // - // public void mouseDown(MouseEvent e) { - // TaskListUiUtil.openUrl(getTitle(), getTitleToolTip(), - // BugzillaRepositoryUtil.getBugUrlWithoutLogin( - // bugzillaInput.getBug().getRepositoryUrl(), - // bugzillaInput.getBug().getId())); - // if (e.stateMask == SWT.MOD3) { - // // XXX come back to look at this ui - // close(); - // } - // - // } - // }); - // } else { - // linkToBug.setEnabled(false); - // } - // linkToBug.addListener(SWT.FocusIn, new GenericListener()); - // - // // Resize the composite, in case the new summary is longer than the - // // previous one. - // // Then redraw it to show the changes. - // linkToBug.getParent().pack(true); - // linkToBug.redraw(); - - // String text = getTitleString(); - // generalTitleText.setText(text); - // StyleRange sr = new StyleRange(generalTitleText.getOffsetAtLine(0), - // text.length(), foreground, background, - // SWT.BOLD); - // generalTitleText.setStyleRange(sr); - // generalTitleText.addListener(SWT.FocusIn, new GenericListener()); - // - // // Resize the composite, in case the new summary is longer than the - // // previous one. - // // Then redraw it to show the changes. - // generalTitleText.getParent().pack(true); - // generalTitleText.redraw(); - } - - /** - * If there is no locally saved copy of the current bug, then it saved - * offline. Otherwise, any changes are updated in the file. - */ - public void saveBug() { - try { - updateBug(); - - IEditorInput input = this.getEditorInput(); - if (input instanceof ExistingBugEditorInput) { - ExistingBugEditorInput existingInput = (ExistingBugEditorInput) input; - AbstractRepositoryTask repositoryTask = existingInput.getRepositoryTask(); - if (repositoryTask != null) { - - if (getRepositoryTaskData().hasLocalChanges() == true) { - TasksUiPlugin.getSynchronizationManager().updateOfflineState(repositoryTask, - getRepositoryTaskData(), false); - } - TasksUiPlugin.getTaskListManager().getTaskList().notifyRepositoryInfoChanged(repositoryTask); - } - } - markDirty(false); - if (parentEditor != null) { - parentEditor.notifyTaskChanged(); - } - } catch (Exception e) { - MylarStatusHandler.fail(e, "bug save offline failed", true); - } - - } - - /** - * Refreshes any text labels in the editor that contain information that - * might change. - */ - protected void updateEditor() { - setGeneralTitleText(); - } - - @Override - public void setFocus() { - form.setFocus(); - } - - // /** - // * Updates the dirty status of this editor page. The dirty status is true - // if - // * the bug report has been modified but not saved. The title of the editor - // * is also updated to reflect the status. - // * - // * @param newDirtyStatus - // * is true when the bug report has been modified but not saved - // */ - // public void changeDirtyStatus(boolean newDirtyStatus) { - // isDirty = newDirtyStatus; - // // if (parentEditor == null) { - // // firePropertyChange(PROP_DIRTY); - // // } else { - // // parentEditor.markDirty(); - // // } - // getManagedForm().dirtyStateChanged(); - // } - - /** - * Updates the title of the editor to reflect dirty status. If the bug - * report has been modified but not saved, then an indicator will appear in - * the title. - */ - protected void updateEditorTitle() { - setPartName(editorInput.getName()); - } - - @Override - public boolean isSaveAsAllowed() { - return false; - } - - @Override - public void doSave(IProgressMonitor monitor) { - saveBug(); - updateEditor(); - } - - @Override - public void doSaveAs() { - // we don't save, so no need to implement - } - - /** - * @return The composite for the whole editor. - */ - public Composite getEditorComposite() { - return editorComposite; - } - - @Override - public void dispose() { - super.dispose(); - isDisposed = true; - getSite().getPage().removeSelectionListener(selectionListener); - } - - // public void handleEvent(Event event) { - // if (event.widget instanceof CCombo) { - // CCombo combo = (CCombo) event.widget; - // if (comboListenerMap.containsKey(combo)) { - // if (combo.getSelectionIndex() > -1) { - // String sel = combo.getItem(combo.getSelectionIndex()); - // Attribute attribute = getBug().getAttribute(comboListenerMap.get(combo)); - // if (sel != null && !(sel.equals(attribute.getNewValue()))) { - // attribute.setNewValue(sel); - // for (IRepositoryTaskAttributeListener client : attributesListeners) { - // client.attributeChanged(attribute.getName(), sel); - // } - // changeDirtyStatus(true); - // } - // } - // } - // } - // } - - /** - * Fires a <code>SelectionChangedEvent</code> to all listeners registered - * under <code>selectionChangedListeners</code>. - * - * @param event - * The selection event. - */ - protected void fireSelectionChanged(final SelectionChangedEvent event) { - Object[] listeners = selectionChangedListeners.toArray(); - for (int i = 0; i < listeners.length; i++) { - final ISelectionChangedListener l = (ISelectionChangedListener) listeners[i]; - SafeRunnable.run(new SafeRunnable() { - public void run() { - l.selectionChanged(event); - } - }); - } - } - - /** - * A generic listener for selection of unimportant items. The default - * selection item sent out is the entire bug object. - */ - public class GenericListener implements Listener { - public void handleEvent(Event event) { - RepositoryTaskData bug = (RepositoryTaskData) getRepositoryTaskData(); - fireSelectionChanged(new SelectionChangedEvent(selectionProvider, new StructuredSelection( - new RepositoryTaskSelection(bug.getId(), bug.getRepositoryUrl(), bug.getLabel(), false, bug - .getSummary())))); - } - } - - /** - * A listener to check if the summary field was modified. - */ - protected class SummaryListener implements Listener { - public void handleEvent(Event event) { - handleSummaryEvent(); - } - } - - /** - * Check if the summary field was modified, and update it if necessary. - */ - public void handleSummaryEvent() { - String sel = summaryText.getText(); - RepositoryTaskAttribute a = getRepositoryTaskData().getAttribute(RepositoryTaskAttribute.SUMMARY); - if (!(a.getValue().equals(sel))) { - a.setValue(sel); - markDirty(true); - } - } - - /*----------------------------------------------------------* - * CODE TO SCROLL TO A COMMENT OR OTHER PIECE OF TEXT - *----------------------------------------------------------*/ - - /** List of the StyledText's so that we can get the previous and the next */ - // protected ArrayList<StyledText> texts = new ArrayList<StyledText>(); - protected HashMap<Object, StyledText> textHash = new HashMap<Object, StyledText>(); - - protected List<StyledText> commentStyleText = new ArrayList<StyledText>(); - - /** Index into the styled texts */ - protected int textsindex = 0; - - protected StyledText addCommentsTextBox = null; - - // protected Text descriptionTextBox = null; - protected TextViewer descriptionTextViewer = null; - - // private FormText previousText = null; - - /** - * Selects the given object in the editor. - * - * @param commentNumber - * The comment number to be selected - */ - public void select(int commentNumber) { - if (commentNumber == -1) - return; - - for (Object o : textHash.keySet()) { - if (o instanceof TaskComment) { - if (((TaskComment) o).getNumber() == commentNumber) { - select(o, true); - } - } - } - } - - public void revealAllComments() { - for (StyledText text : commentStyleText) { - Composite comp = text.getParent(); - while (comp != null) { - if (comp instanceof ExpandableComposite) { - ExpandableComposite ex = (ExpandableComposite) comp; - ex.setExpanded(true); - } - comp = comp.getParent(); - } - } - } - - /** - * Selects the given object in the editor. - * - * @param o - * The object to be selected. - * @param highlight - * Whether or not the object should be highlighted. - */ - public void select(Object o, boolean highlight) { - if (textHash.containsKey(o)) { - StyledText t = textHash.get(o); - if (t != null) { - Composite comp = t.getParent(); - while (comp != null) { - if (comp instanceof ExpandableComposite) { - ExpandableComposite ex = (ExpandableComposite) comp; - ex.setExpanded(true); - } - comp = comp.getParent(); - } - focusOn(t, highlight); - } - } else if (o instanceof RepositoryTaskData) { - focusOn(null, highlight); - } - } - - // public void selectDescription() { - // for (Object o : textHash.keySet()) { - // if (o.equals(editorInput.getRepositoryTaskData().getDescription())) { - // select(o, true); - // } - // } - // } - - public void selectNewComment() { - focusOn(addCommentsTextBox, false); - } - - public void selectDescription() { - focusOn(descriptionTextViewer.getTextWidget(), false); - } - - /** - * Scroll to a specified piece of text - * - * @param selectionComposite - * The StyledText to scroll to - */ - private void focusOn(Control selectionComposite, boolean highlight) { - int pos = 0; - // if (previousText != null && !previousText.isDisposed()) { - // previousText.setsetSelection(0); - // } - - // if (selectionComposite instanceof FormText) - // previousText = (FormText) selectionComposite; - - if (selectionComposite != null) { - - // if (highlight && selectionComposite instanceof FormText && - // !selectionComposite.isDisposed()) - // ((FormText) selectionComposite).set.setSelection(0, ((FormText) - // selectionComposite).getText().length()); - - // get the position of the text in the composite - pos = 0; - Control s = selectionComposite; - if (s.isDisposed()) - return; - s.setEnabled(true); - s.setFocus(); - s.forceFocus(); - while (s != null && s != getEditorComposite()) { - if (!s.isDisposed()) { - pos += s.getLocation().y; - s = s.getParent(); - } - } - - pos = pos - 60; // form.getOrigin().y; - - } - if (!form.getBody().isDisposed()) - form.setOrigin(0, pos); - } - - private RepositoryTaskOutlinePage outlinePage = null; - - @Override - public Object getAdapter(Class adapter) { - if (IContentOutlinePage.class.equals(adapter)) { - if (outlinePage == null && editorInput != null) { - outlinePage = new RepositoryTaskOutlinePage(taskOutlineModel); - } - return outlinePage; - } - return super.getAdapter(adapter); - } - - public RepositoryTaskOutlineNode getOutlineModel() { - return taskOutlineModel; - } - - public RepositoryTaskOutlinePage getOutline() { - return outlinePage; - } - - private boolean isDisposed = false; - - protected Button[] radios; - - protected Control[] radioOptions; - - protected Button attachContextButton; - - public boolean isDisposed() { - return isDisposed; - } - - public void close() { - Display activeDisplay = getSite().getShell().getDisplay(); - activeDisplay.asyncExec(new Runnable() { - public void run() { - if (getSite() != null && getSite().getPage() != null && !AbstractRepositoryTaskEditor.this.isDisposed()) - if (parentEditor != null) { - getSite().getPage().closeEditor(parentEditor, false); - } else { - getSite().getPage().closeEditor(AbstractRepositoryTaskEditor.this, false); - } - } - }); - } - - public void addAttributeListener(IRepositoryTaskAttributeListener listener) { - attributesListeners.add(listener); - } - - public void removeAttributeListener(IRepositoryTaskAttributeListener listener) { - attributesListeners.remove(listener); - } - - public void setParentEditor(MylarTaskEditor parentEditor) { - this.parentEditor = parentEditor; - } - - public RepositoryTaskOutlineNode getTaskOutlineModel() { - return taskOutlineModel; - } - - public void setTaskOutlineModel(RepositoryTaskOutlineNode taskOutlineModel) { - this.taskOutlineModel = taskOutlineModel; - } - - /** - * A listener for selection of the textbox where a new comment is entered - * in. - */ - protected class NewCommentListener implements Listener { - public void handleEvent(Event event) { - fireSelectionChanged(new SelectionChangedEvent(selectionProvider, new StructuredSelection( - new RepositoryTaskSelection(getRepositoryTaskData().getId(), getRepositoryTaskData() - .getRepositoryUrl(), "New Comment", false, getRepositoryTaskData().getSummary())))); - } - } - - public Control getControl() { - return form; - } - - public void setSummaryText(String text) { - this.summaryText.setText(text); - handleSummaryEvent(); - } - - public void setDescriptionText(String text) { - this.descriptionTextViewer.getDocument().set(text); - } - - protected void addRadioButtons(Composite buttonComposite) { - RepositoryTaskData taskData = getRepositoryTaskData(); - FormToolkit toolkit = new FormToolkit(buttonComposite.getDisplay()); - int i = 0; - Button selected = null; - radios = new Button[taskData.getOperations().size()]; - radioOptions = new Control[taskData.getOperations().size()]; - for (Iterator<RepositoryOperation> it = taskData.getOperations().iterator(); it.hasNext();) { - RepositoryOperation o = it.next(); - radios[i] = toolkit.createButton(buttonComposite, "", SWT.RADIO); - radios[i].setFont(TEXT_FONT); - GridData radioData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); - if (!o.hasOptions() && !o.isInput()) - radioData.horizontalSpan = 4; - else - radioData.horizontalSpan = 3; - radioData.heightHint = 20; - String opName = o.getOperationName(); - opName = opName.replaceAll("</.*>", ""); - opName = opName.replaceAll("<.*>", ""); - radios[i].setText(opName); - radios[i].setLayoutData(radioData); - // radios[i].setBackground(background); - radios[i].addSelectionListener(new RadioButtonListener()); - radios[i].addListener(SWT.FocusIn, new GenericListener()); - - if (o.hasOptions()) { - radioData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); - radioData.horizontalSpan = 1; - radioData.heightHint = 20; - radioData.widthHint = AbstractRepositoryTaskEditor.WRAP_LENGTH; - // radioOptions[i] = new Combo(buttonComposite, SWT.NULL); - radioOptions[i] = new CCombo(buttonComposite, SWT.FLAT | SWT.READ_ONLY); - toolkit.adapt(radioOptions[i], true, true); - // radioOptions[i] = new Combo(buttonComposite, SWT.MULTI | - // SWT.V_SCROLL | SWT.READ_ONLY); - // radioOptions[i].setData(FormToolkit.KEY_DRAW_BORDER, - // FormToolkit.TEXT_BORDER); - // radioOptions[i] = new Combo(buttonComposite, - // SWT.NO_BACKGROUND | SWT.MULTI | SWT.V_SCROLL - // | SWT.READ_ONLY); - radioOptions[i].setFont(TEXT_FONT); - radioOptions[i].setLayoutData(radioData); - // radioOptions[i].setBackground(background); - - Object[] a = o.getOptionNames().toArray(); - Arrays.sort(a); - for (int j = 0; j < a.length; j++) { - ((CCombo) radioOptions[i]).add((String) a[j]); - } - ((CCombo) radioOptions[i]).select(0); - ((CCombo) radioOptions[i]).addSelectionListener(new RadioButtonListener()); - } else if (o.isInput()) { - radioData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); - radioData.horizontalSpan = 1; - radioData.widthHint = 120; - - // TODO: add condition for if opName = reassign to... - String assignmentValue = ""; - if (opName.equals(REASSIGN_BUG_TO)) { - assignmentValue = repository.getUserName(); - } - radioOptions[i] = toolkit.createText(buttonComposite, assignmentValue);// , - // SWT.SINGLE); - radioOptions[i].setFont(TEXT_FONT); - radioOptions[i].setLayoutData(radioData); - // radioOptions[i].setBackground(background); - ((Text) radioOptions[i]).setText(o.getInputValue()); - ((Text) radioOptions[i]).addModifyListener(new RadioButtonListener()); - } - - if (i == 0 || o.isChecked()) { - if (selected != null) - selected.setSelection(false); - selected = radios[i]; - radios[i].setSelection(true); - if (o.hasOptions() && o.getOptionSelection() != null) { - int j = 0; - for (String s : ((CCombo) radioOptions[i]).getItems()) { - if (s.compareTo(o.getOptionSelection()) == 0) { - ((CCombo) radioOptions[i]).select(j); - } - j++; - } - } - taskData.setSelectedOperation(o); - } - - i++; - } - toolkit.paintBordersFor(buttonComposite); - } - - protected void addAttachContextButton(Composite buttonComposite, ITask task) { - // File contextFile = - // ContextCorePlugin.getContextManager().getFileForContext(task.getHandleIdentifier()); - FormToolkit toolkit = new FormToolkit(buttonComposite.getDisplay()); - toolkit.createLabel(buttonComposite, ""); - toolkit.createLabel(buttonComposite, ""); - attachContextButton = toolkit.createButton(buttonComposite, "Attach Context", SWT.CHECK); - attachContextButton.setImage(TaskListImages.getImage(TaskListImages.CONTEXT_ATTACH)); - GridData data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); - data.horizontalSpan = 1; - attachContextButton.setLayoutData(data); - // attachContextButton.setEnabled(contextFile != null && - // (contextFile.exists() || task.isActive())); - } - - protected void addSelfToCC(Composite composite) { - // if they aren't already on the cc list create an add self check box - FormToolkit toolkit = getManagedForm().getToolkit(); - final RepositoryTaskData taskData = getRepositoryTaskData(); - RepositoryTaskAttribute owner = taskData.getAttribute(RepositoryTaskAttribute.USER_ASSIGNED); - - if (repository.getUserName() == null) { - return; - } - - if (owner != null && owner.getValue().indexOf(repository.getUserName()) != -1) { - return; - } - - RepositoryTaskAttribute reporter = taskData.getAttribute(RepositoryTaskAttribute.USER_REPORTER); - if (reporter != null && reporter.getValue().indexOf(repository.getUserName()) != -1) { - return; - } - // Don't add addselfcc if already there - RepositoryTaskAttribute ccAttribute = taskData.getAttribute(RepositoryTaskAttribute.USER_CC); - if (ccAttribute != null && ccAttribute.getValues().contains(repository.getUserName())) { - return; - } - toolkit.createLabel(composite, ""); - final Button addSelfButton = toolkit.createButton(composite, "Add self to CC", SWT.CHECK); - addSelfButton.setImage(TaskListImages.getImage(TaskListImages.PERSON)); - addSelfButton.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent e) { - if (addSelfButton.getSelection()) { - taskData.setAttributeValue(RepositoryTaskAttribute.ADD_SELF_CC, "1"); - } else { - taskData.setAttributeValue(RepositoryTaskAttribute.ADD_SELF_CC, "0"); - } - markDirty(true); - } - }); - // GridDataFactory.fillDefaults().span(2, - // SWT.DEFAULT).applyTo(addSelfButton); - } - - // // The implementation of the attach context UI is connector dependant. - // protected boolean getAttachContext() { - // return false; - // } - // - // // The implementation of the attach context UI is connector dependant. - // // this method is called when a user attaches a patch to the task - // protected void setAttachContext(boolean attachContext) { - // - // } - - public boolean getAttachContext() { - if (attachContextButton == null) { - return false; - } - return attachContextButton.getSelection(); - } - - public void setAttachContext(boolean attachContext) { - if (attachContextButton != null && attachContextButton.isEnabled()) { - attachContextButton.setSelection(attachContext); - } - } - - /** - * Class to handle the selection change of the radio buttons. - */ - private class RadioButtonListener implements SelectionListener, ModifyListener { - - public void widgetDefaultSelected(SelectionEvent e) { - widgetSelected(e); - } - - public void widgetSelected(SelectionEvent e) { - Button selected = null; - for (int i = 0; i < radios.length; i++) { - if (radios[i].getSelection()) - selected = radios[i]; - } - // determine the operation to do to the bug - for (int i = 0; i < radios.length; i++) { - if (radios[i] != e.widget && radios[i] != selected) { - radios[i].setSelection(false); - } - - RepositoryTaskData taskData = getRepositoryTaskData(); - if (e.widget == radios[i]) { - RepositoryOperation o = taskData.getOperation(radios[i].getText()); - taskData.setSelectedOperation(o); - AbstractRepositoryTaskEditor.this.markDirty(true); - } else if (e.widget == radioOptions[i]) { - RepositoryOperation o = taskData.getOperation(radios[i].getText()); - o.setOptionSelection(((CCombo) radioOptions[i]).getItem(((CCombo) radioOptions[i]) - .getSelectionIndex())); - - if (taskData.getSelectedOperation() != null) - taskData.getSelectedOperation().setChecked(false); - o.setChecked(true); - - taskData.setSelectedOperation(o); - radios[i].setSelection(true); - if (selected != null && selected != radios[i]) { - selected.setSelection(false); - } - AbstractRepositoryTaskEditor.this.markDirty(true); - } - } - validateInput(); - } - - public void modifyText(ModifyEvent e) { - Button selected = null; - for (int i = 0; i < radios.length; i++) { - if (radios[i].getSelection()) - selected = radios[i]; - } - // determine the operation to do to the bug - for (int i = 0; i < radios.length; i++) { - if (radios[i] != e.widget && radios[i] != selected) { - radios[i].setSelection(false); - } - - RepositoryTaskData taskData = getRepositoryTaskData(); - if (e.widget == radios[i]) { - RepositoryOperation o = taskData.getOperation(radios[i].getText()); - taskData.setSelectedOperation(o); - AbstractRepositoryTaskEditor.this.markDirty(true); - } else if (e.widget == radioOptions[i]) { - RepositoryOperation o = taskData.getOperation(radios[i].getText()); - o.setInputValue(((Text) radioOptions[i]).getText()); - - if (taskData.getSelectedOperation() != null) - taskData.getSelectedOperation().setChecked(false); - o.setChecked(true); - - taskData.setSelectedOperation(o); - radios[i].setSelection(true); - if (selected != null && selected != radios[i]) { - selected.setSelection(false); - } - AbstractRepositoryTaskEditor.this.markDirty(true); - } - } - validateInput(); - } - } -} - -// private class DisplayableLocalAttachment extends RepositoryAttachment { -// private static final long serialVersionUID = 900218036143022422L; -// -// private Date date; -// private String description; -// private String creator; -// private String name; -// -// public String getCreator() { -// return creator; -// } -// public void setCreator(String creator) { -// this.creator = creator; -// } -// public Date getDateCreated() { -// return date; -// } -// public void setDateCreated(Date date) { -// this.date = date; -// } -// public String getDescription() { -// return description; -// } -// public void setDescription(String description) { -// this.description = description; -// } -// public String getName() { -// return name; -// } -// public void setName(String name) { -// this.name = name; -// } -// public DisplayableLocalAttachment(LocalAttachment att) { -// super(null); -// setName(att.getFilePath()); -// setDescription(att.getDescription()); -// setDateCreated(new Date()); -// } -// } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/CategoryEditor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/CategoryEditor.java deleted file mode 100644 index 851b5f54b..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/CategoryEditor.java +++ /dev/null @@ -1,132 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.editors; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorSite; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.forms.FormColors; -import org.eclipse.ui.forms.widgets.ExpandableComposite; -import org.eclipse.ui.forms.widgets.FormToolkit; -import org.eclipse.ui.forms.widgets.ScrolledForm; -import org.eclipse.ui.forms.widgets.Section; -import org.eclipse.ui.forms.widgets.TableWrapData; -import org.eclipse.ui.forms.widgets.TableWrapLayout; -import org.eclipse.ui.part.EditorPart; - -/** - * @author Ken Sueda - * @author Mik Kersten - */ -public class CategoryEditor extends EditorPart { - - private Text url; - private CategoryEditorInput input = null; - - private boolean isDirty = false; - - private Text description = null; - - @Override - public void doSave(IProgressMonitor monitor) { - input.setCategoryName(description.getText()); - input.setUrl(url.getText()); - isDirty = false; - // TODO: save the list -// MylarTaskListPlugin.getTaskListManager().notifyListUpdated(); - firePropertyChange(PROP_DIRTY); - } - - @Override - public void doSaveAs() { - } - - @SuppressWarnings("deprecation") - @Override - public void init(IEditorSite site, IEditorInput input) throws PartInitException { - setSite(site); - setInput(input); - this.input = (CategoryEditorInput) input; - setPartName(input.getName()); - setTitleToolTip(input.getToolTipText()); - } - - @Override - public boolean isDirty() { - return isDirty; - } - - @Override - public boolean isSaveAsAllowed() { - return false; - } - - @Override - public void createPartControl(Composite parent) { - FormToolkit toolkit = new FormToolkit(parent.getDisplay()); - ScrolledForm sform = toolkit.createScrolledForm(parent); - sform.getBody().setLayout(new TableWrapLayout()); - Composite editorComposite = sform.getBody(); - - createSummarySection(editorComposite, toolkit); - } - - @Override - public void setFocus() { - } - - private void createSummarySection(Composite parent, FormToolkit toolkit) { - Section summarySection = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR); - summarySection.setText("Category Summary"); - summarySection.setLayout(new TableWrapLayout()); - summarySection.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB)); - - Composite summaryContainer = toolkit.createComposite(summarySection); - summarySection.setClient(summaryContainer); - TableWrapLayout layout = new TableWrapLayout(); - layout.numColumns = 2; - summaryContainer.setLayout(layout); - - ModifyListener modifyListener = new ModifyListener() { - public void modifyText(ModifyEvent e) { - markDirty(); - } - }; - - Label lblDescription = toolkit.createLabel(summaryContainer, "Description: ", SWT.NULL); - lblDescription.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - description = toolkit.createText(summaryContainer, input.getCategoryName(), SWT.FLAT); - description.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB)); - description.setData(FormToolkit.KEY_DRAW_BORDER); - description.addModifyListener(modifyListener); - - Label lblUrl = toolkit.createLabel(summaryContainer, "URL: ", SWT.NONE); - lblUrl.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - url = toolkit.createText(summaryContainer, input.getUrl(), SWT.FLAT); - url.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP)); - url.addModifyListener(modifyListener); - - toolkit.paintBordersFor(summaryContainer); - } - - private void markDirty() { - isDirty = true; - firePropertyChange(PROP_DIRTY); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/CategoryEditorInput.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/CategoryEditorInput.java deleted file mode 100644 index 83b5b81ef..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/CategoryEditorInput.java +++ /dev/null @@ -1,73 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.editors; - -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.mylar.tasks.core.AbstractTaskContainer; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IPersistableElement; - -/** - * @author Ken Sueda - */ -public class CategoryEditorInput implements IEditorInput { - - private AbstractTaskContainer category; - - public CategoryEditorInput(AbstractTaskContainer cat) { - this.category = cat; - } - - public boolean exists() { - return true; - } - - public ImageDescriptor getImageDescriptor() { - return null; - } - - public String getName() { - return "Category Editor"; - } - - public IPersistableElement getPersistable() { - return null; - } - - public String getToolTipText() { - return "Category Editor"; - } - - public Object getAdapter(Class adapter) { - return null; - } - - public String getCategoryName() { - return category.getDescription(); - } - - public String getUrl() { - return category.getUrl(); - } - - public void setCategoryName(String description) { - TasksUiPlugin.getTaskListManager().getTaskList().renameContainer(category, description); -// category.setDescription(description); - } - - public void setUrl(String url) { - category.setUrl(url); - TasksUiPlugin.getTaskListManager().getTaskList().notifyContainerUpdated(category); - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/ContentOutlineTools.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/ContentOutlineTools.java deleted file mode 100644 index 3fda0da2d..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/ContentOutlineTools.java +++ /dev/null @@ -1,68 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui.editors; - - -/** - * @author Rob Elves - * @author Mik Kersten - */ -public class ContentOutlineTools { - - /** The default string used for locally created bugs. */ - public static final String OFFLINE_SERVER_DEFAULT = "[local]"; - - /** - * Returns a unique handle for the bugzilla selection. Contains the bug id, - * the bug server, and (if applicable) the comment number. - * - * @param taskSelection - * The bugzilla selection. - * @return The handle for the bugzilla selection. - */ - public static String getHandle(IRepositoryTaskSelection taskSelection) { - String handle = taskSelection.getServer() + ";" + taskSelection.getId(); - if (taskSelection.hasComment()) { - int number = taskSelection.getComment().getNumber() + 1; - handle += ";" + number; - } else if (taskSelection.isCommentHeader()) { - handle += ";1"; - } else if (taskSelection.isDescription()) { - handle += ";0"; - } - return handle; - } - - public static String getName(IRepositoryTaskSelection taskSelection) { - String name = taskSelection.getServer() + ": Bug#: " + taskSelection.getId() + ": " + taskSelection.getBugSummary(); - if (taskSelection.hasComment()) { - name += " : Comment#: " + taskSelection.getComment().getNumber(); - } else if (taskSelection.isCommentHeader()) { - name += " : Comment Header"; - } else if (taskSelection.isDescription()) { - name += ": Description"; - } - return name; - } - -// public static String getHandle(RepositoryTaskData taskData) { -// return getHandle(taskData.getRepositoryUrl(), taskData.getId()); -// } -// -// public static String getHandle(String server, String id) { -// return server + ";" + id; -// } - -// public static String getName(RepositoryTaskData taskData) { -// return taskData.getRepositoryUrl() + ": Bug#: " + taskData.getId() + ": " + taskData.getSummary(); -// } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/ExistingBugEditorInput.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/ExistingBugEditorInput.java deleted file mode 100644 index 7de2d7e3b..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/ExistingBugEditorInput.java +++ /dev/null @@ -1,137 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui.editors; - -import java.io.IOException; -import java.security.GeneralSecurityException; - -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * The <code>IEditorInput</code> implementation for - * <code>ExistingBugEditor</code>. - * - * @author Mik Kersten - * @author Rob Elves - */ -public class ExistingBugEditorInput extends AbstractBugEditorInput { - - protected String id; - protected String url; - protected AbstractRepositoryTask repositoryTask = null; - - // Called for existing report without a local task - public ExistingBugEditorInput(String url, TaskRepository repository, RepositoryTaskData taskData) { - super(repository, taskData); - this.id = taskData.getId(); - this.url = url; - } - - public ExistingBugEditorInput(TaskRepository repository, RepositoryTaskData taskData, String bugId) - throws IOException, GeneralSecurityException { - super(repository, taskData); - this.id = bugId; - // this.repository = repository; - // this.repositoryTaskData = getOfflineTaskData(repository, - // proxySettings, bugId); - - String handle = AbstractRepositoryTask.getHandle(repository.getUrl(), bugId); - ITask task = TasksUiPlugin.getTaskListManager().getTaskList().getTask(handle); - if (task != null && task instanceof AbstractRepositoryTask) { - this.repositoryTask = (AbstractRepositoryTask) task; - } - } - - public AbstractRepositoryTask getRepositoryTask() { - return repositoryTask; - } - - // // TODO: move? - // private RepositoryTaskData getOfflineTaskData(final TaskRepository - // repository, Proxy proxySettings, final int id) - // throws IOException, GeneralSecurityException { - // RepositoryTaskData result = null; - // // Look among the offline reports for a bug with the given id. - // OfflineTaskManager reportsFile = - // MylarTaskListPlugin.getDefault().getOfflineReportsFile(); - // if (reportsFile != null) { - // int offlineId = reportsFile.find(repository.getUrl(), id); - // // If an offline bug was found, return it if possible. - // if (offlineId != -1) { - // RepositoryTaskData bug = reportsFile.elements().get(offlineId); - // if (bug instanceof RepositoryTaskData) { - // result = (RepositoryTaskData) bug; - // } - // } - // } - // return result; - // } - - public String getName() { - if(repositoryTaskData != null && repositoryTaskData.getLabel() != null) { - return repositoryTaskData.getLabel(); - } else if(id != null){ - return id; - } else { - return "<unknown>"; - } - } - - /** - * @return The id of the bug for this editor input. - */ - public String getId() { - return id; - } - - - @Override - public int hashCode() { - final int PRIME = 31; - int result = 1; - result = PRIME * result + ((repositoryTask == null) ? 0 : repositoryTask.hashCode()); - return result; - } - - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - final ExistingBugEditorInput other = (ExistingBugEditorInput) obj; - if (repositoryTask == null) { - if (other.repositoryTask != null) { - return false; - } else if(other.getId() != this.getId()) { - return false; - } - } else if (!repositoryTask.equals(other.repositoryTask)) - return false; - return true; - } - - - /** - * @return url for the repositoryTask/hit. Used by MylarTaskEditor when opening browser - */ - public String getUrl() { - return url; - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/IRepositoryTaskSelection.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/IRepositoryTaskSelection.java deleted file mode 100644 index 9bd8531d6..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/IRepositoryTaskSelection.java +++ /dev/null @@ -1,86 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.editors; - -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.mylar.tasks.core.TaskComment; - -public interface IRepositoryTaskSelection extends ISelection { - - /** - * @return <code>true</code> if a comment was selected. - */ - public boolean hasComment(); - - /** - * @return the <code>Comment</code> object for this selection, or - * <code>null</code> if a comment was not selected. - */ - public TaskComment getComment(); - - /** - * Sets the <code>Comment</code> object for this selection. If a comment - * was not selected, then this should be <code>null</code>. - * - * @param taskComment - * The selection's comment, or <code>null</code> if not - * applicable. - */ - public void setComment(TaskComment taskComment); - - /** - * @return The contents of the selection. This can be <code>null</code>. - */ - public String getContents(); - - /** - * Sets the contents of the selection. - * - * @param contents - * The selection. - */ - public void setContents(String contents); - - /** - * @return The id of the Bugzilla object that the selection was on. - */ - public String getId(); - - /** - * Sets the id of the Bugzilla object that the selection was on. - * - * @param id - * The id of the bug. - */ - public void setId(String id); - - /** - * @return The server of the Bugzilla object that the selection was on, or - * <code>null</code> if no server is supplied. - */ - public String getServer(); - - /** - * Sets the server of the Bugzilla object that the selection was on. - * - * @param server - * The server of the bug. - */ - public void setServer(String server); - - public boolean isCommentHeader(); - - public boolean isDescription(); - - public String getBugSummary(); - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/MylarTaskEditor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/MylarTaskEditor.java deleted file mode 100644 index a5289fd8c..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/MylarTaskEditor.java +++ /dev/null @@ -1,456 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.editors; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.action.IMenuListener; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.ITaskEditorFactory; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.internal.tasks.ui.TaskListPreferenceConstants; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTError; -import org.eclipse.swt.browser.Browser; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Menu; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IEditorSite; -import org.eclipse.ui.IPartListener; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchPart; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.forms.editor.FormEditor; -import org.eclipse.ui.forms.editor.IFormPage; -import org.eclipse.ui.forms.widgets.FormToolkit; - -/** - * @author Mik Kersten - * @author Eric Booth (initial prototype) - */ -public class MylarTaskEditor extends FormEditor { - - // private static final String TASK_INFO_PAGE_LABEL = "Planning"; - - private static final String ISSUE_WEB_PAGE_LABEL = "Browser"; - - protected ITask task; - - private TaskPlanningEditor taskPlanningEditor; - - private Browser webBrowser; - - private TaskEditorInput taskEditorInput; - - private TaskEditorListener partListener; - - private List<IEditorPart> editors = new ArrayList<IEditorPart>(); - - private Menu contextMenu; - - private IEditorPart contentOutlineProvider = null; - - private int browserPageIndex; - - public MylarTaskEditor() { - super(); - taskPlanningEditor = new TaskPlanningEditor(this); - taskPlanningEditor.setParentEditor(this); - } - - protected void contextMenuAboutToShow(IMenuManager manager) { - TaskEditorActionContributor contributor = getContributor(); - // IFormPage page = getActivePageInstance(); - if (contributor != null) - contributor.contextMenuAboutToShow(manager); - } - - public TaskEditorActionContributor getContributor() { - return (TaskEditorActionContributor) getEditorSite().getActionBarContributor(); - } - - @Override - public Object getAdapter(Class adapter) { - // TODO: consider adding: IContentOutlinePage.class.equals(adapter) && - if (contentOutlineProvider != null) { - return contentOutlineProvider.getAdapter(adapter); - } else { - return super.getAdapter(adapter); - } - } - - public IEditorPart getActiveEditor() { - return super.getActiveEditor(); - } - - private int createBrowserPage(String url) { - if (!TasksUiPlugin.getDefault().getPreferenceStore().getBoolean( - TaskListPreferenceConstants.REPORT_DISABLE_INTERNAL)) { - try { - webBrowser = new Browser(getContainer(), SWT.NONE); - int index = addPage(webBrowser); - setPageText(index, ISSUE_WEB_PAGE_LABEL); - webBrowser.setUrl(url); - - boolean openWithBrowser = TasksUiPlugin.getDefault().getPreferenceStore().getBoolean( - TaskListPreferenceConstants.REPORT_OPEN_INTERNAL); - // if (!(task instanceof AbstractRepositoryTask) || - // openWithBrowser) { - if (openWithBrowser) { - setActivePage(index); - } - return index; - } catch (SWTError e) { - MylarStatusHandler.fail(e, "Could not create Browser page: " + e.getMessage(), true); - } catch (RuntimeException e) { - MylarStatusHandler.fail(e, "could not create issue report page", false); - } - } - return 0; - } - - @Override - public void doSave(IProgressMonitor monitor) { - // commitFormPages(true); - // editorDirtyStateChanged(); - - for (IFormPage page : getPages()) { - if (page.isDirty()) { - page.doSave(monitor); - } - } - - editorDirtyStateChanged(); - - // for (IEditorPart editor : editors) { - // if (editor.isDirty()) - // editor.doSave(monitor); - // } - // - // if (webBrowser != null) { - // webBrowser.setUrl(task.getUrl()); - // } else if (hasValidUrl()) { - // createBrowserPage(); - // } - } - - // see PDEFormEditor - /* package */@SuppressWarnings("unchecked") - IFormPage[] getPages() { - ArrayList formPages = new ArrayList(); - for (int i = 0; i < pages.size(); i++) { - Object page = pages.get(i); - if (page instanceof IFormPage) - formPages.add(page); - } - return (IFormPage[]) formPages.toArray(new IFormPage[formPages.size()]); - } - - /** - * HACK: perform real check - */ - private String getUrl() { - String url = null; - if(getEditorInput() instanceof ExistingBugEditorInput) { - url = ((ExistingBugEditorInput)getEditorInput()).getUrl(); - } else if(task != null && task.getUrl().length() > 9){ - url = task.getUrl(); - } - return url; - } - - /** - * Saves the multi-page editor's document as another file. Also updates the - * text for page 0's tab, and updates this multi-page editor's input to - * correspond to the nested editor's. - * - * @see org.eclipse.ui.ISaveablePart#doSaveAs() - */ - @Override - public void doSaveAs() { - IEditorPart editor = getEditor(0); - if (editor != null) { - editor.doSaveAs(); - setPageText(0, editor.getTitle()); - setInput(editor.getEditorInput()); - } - } - - @Override - public void init(IEditorSite site, IEditorInput input) throws PartInitException { - - partListener = new TaskEditorListener(); - site.getPage().addPartListener(partListener); - super.init(site, input); - - // taskEditorInput = (TaskEditorInput) input; - setSite(site); - // // selectionProvider = new TaskEditorSelectionProvider(this); - // // site.setSelectionProvider(selectionProvider); - // - // /* - // * The task data is saved only once, at the initialization of the - // * editor. This is then passed to each of the child editors. This way, - // * only one instance of the task data is stored for each editor - // opened. - // */ - // task = taskEditorInput.getTask(); - // - // try { - // // taskPlanningEditor.init(this.getEditorSite(), - // // this.getEditorInput()); - // // taskPlanningEditor.setTask(task); - // // Set the title on the editor's tab - // this.setPartName(taskEditorInput.getLabel()); - // } catch (Exception e) { - // throw new PartInitException(e.getMessage()); - // } - } - - public void notifyTaskChanged() { - TasksUiPlugin.getTaskListManager().getTaskList().notifyLocalInfoChanged(task); - } - - @Override - public boolean isSaveAsAllowed() { - return false; - } - - // public boolean isDirty() { - // fLastDirtyState = computeDirtyState(); - // return fLastDirtyState; - // } - - // private boolean computeDirtyState() { - // IFormPage page = getActivePageInstance(); - // if (page != null && page.isDirty()) - // return true; - // return super.isDirty(); - // } - - @Override - public boolean isDirty() { - for (IFormPage page : getPages()) { - if (page.isDirty()) { - return true; - } - } - return false; - } - - private class TaskEditorListener implements IPartListener { - - public void partActivated(IWorkbenchPart part) { - if (part.equals(MylarTaskEditor.this)) { - if (taskEditorInput != null) { - ITask task = taskEditorInput.getTask(); - if (TaskListView.getFromActivePerspective() != null) { - TaskListView.getFromActivePerspective().selectedAndFocusTask(task); - } - } - } - } - - /** - * @see org.eclipse.ui.IPartListener#partBroughtToTop(org.eclipse.ui.IWorkbenchPart) - */ - public void partBroughtToTop(IWorkbenchPart part) { - // don't care about this event - } - - /** - * @see org.eclipse.ui.IPartListener#partClosed(org.eclipse.ui.IWorkbenchPart) - */ - public void partClosed(IWorkbenchPart part) { - // don't care about this event - } - - /** - * @see org.eclipse.ui.IPartListener#partDeactivated(org.eclipse.ui.IWorkbenchPart) - */ - public void partDeactivated(IWorkbenchPart part) { - // don't care about this event - } - - /** - * @see org.eclipse.ui.IPartListener#partOpened(org.eclipse.ui.IWorkbenchPart) - */ - public void partOpened(IWorkbenchPart part) { - // don't care about this event - } - } - - /** - * Updates the tab titile - */ - public void changeTitle() { - this.setPartName(taskEditorInput.getLabel()); - } - - public void markDirty() { - firePropertyChange(PROP_DIRTY); - return; - } - - @Override - public void setFocus() { - // taskInfoEditor.setFocus(); - } - - public Browser getWebBrowser() { - return webBrowser; - } - - public void revealBrowser() { - setActivePage(browserPageIndex); - } - - public void displayInBrowser(String url) { - webBrowser.setUrl(url); - revealBrowser(); - } - - @Override - protected void pageChange(int newPageIndex) { - for (ITaskEditorFactory factory : TasksUiPlugin.getDefault().getTaskEditorFactories()) { - for (IEditorPart editor : editors) { - factory.notifyEditorActivationChange(editor); - } - } - super.pageChange(newPageIndex); - } - - public void dispose() { - for (IEditorPart part : editors) { - part.dispose(); - } - if (taskPlanningEditor != null) - taskPlanningEditor.dispose(); - if (webBrowser != null) { - webBrowser.dispose(); - } - - IWorkbench workbench = TasksUiPlugin.getDefault().getWorkbench(); - if (workbench != null && partListener != null) { - for (IWorkbenchWindow window : workbench.getWorkbenchWindows()) { - IWorkbenchPage activePage = window.getActivePage(); - if (activePage != null) { - activePage.removePartListener(partListener); - } - } - } - super.dispose(); - } - - public TaskEditorInput getTaskEditorInput() { - return taskEditorInput; - } - - @Override - protected void addPages() { - try { - MenuManager manager = new MenuManager(); - IMenuListener listener = new IMenuListener() { - public void menuAboutToShow(IMenuManager manager) { - contextMenuAboutToShow(manager); - } - }; - manager.setRemoveAllWhenShown(true); - manager.addMenuListener(listener); - contextMenu = manager.createContextMenu(getContainer()); - getContainer().setMenu(contextMenu); - int index = -1; - if (getEditorInput() instanceof TaskEditorInput) { - addPage(taskPlanningEditor); - index++; - taskEditorInput = (TaskEditorInput) getEditorInput(); - task = taskEditorInput.getTask(); - setPartName(taskEditorInput.getLabel()); - } - - int selectedIndex = index; - for (ITaskEditorFactory factory : TasksUiPlugin.getDefault().getTaskEditorFactories()) { - if ((task != null && factory.canCreateEditorFor(task)) || factory.canCreateEditorFor(getEditorInput())) { - try { - IEditorPart editor = factory.createEditor(this); - IEditorInput input = task != null ? factory.createEditorInput(task) : getEditorInput(); - if (editor != null && input != null) { - if (editor instanceof AbstractRepositoryTaskEditor) { - TaskFormPage repositoryTaskEditor = (TaskFormPage) editor; - // repositoryTaskEditor.setParentEditor(this); - editor.init(getEditorSite(), input); - repositoryTaskEditor.createPartControl(getContainer()); - index = addPage(repositoryTaskEditor); - if(getEditorInput() instanceof ExistingBugEditorInput) { - ExistingBugEditorInput existingInput = (ExistingBugEditorInput)getEditorInput(); - setPartName(existingInput.getId()+": "+existingInput.getName()); - } - } else { - index = addPage(editor, input); - } - selectedIndex = index; - setPageText(index++, factory.getTitle()); - } - - // HACK: overwrites if multiple present - if (factory.providesOutline()) { - contentOutlineProvider = editor; - } - } catch (Exception e) { - MylarStatusHandler.fail(e, "Could not create editor via factory: " + factory, true); - } - } - } - String urlToOpen = getUrl(); - if (urlToOpen != null && !urlToOpen.equals("")) { - browserPageIndex = createBrowserPage(urlToOpen); - if (selectedIndex == 0 && taskEditorInput != null && !taskEditorInput.isNewTask()) { - selectedIndex = browserPageIndex; - } - } - setActivePage(selectedIndex); - - if (task instanceof AbstractRepositoryTask) { - setTitleImage(TaskListImages.getImage(TaskListImages.TASK_REPOSITORY)); - } else if(getEditorInput() instanceof AbstractBugEditorInput) { - this.setTitleImage(TaskListImages.getImage(TaskListImages.TASK_REMOTE)); - } else if (getUrl() != null) { - setTitleImage(TaskListImages.getImage(TaskListImages.TASK_WEB)); - } - } catch (PartInitException e) { - MylarStatusHandler.fail(e, "failed to create task editor pages", false); - } - } - - protected FormToolkit createToolkit(Display display) { - // Create a toolkit that shares colors between editors. - return new FormToolkit(PlatformUI.getWorkbench().getDisplay()); - } - - public ISelection getSelection() { - return getSite().getSelectionProvider().getSelection(); - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryAttachmentEditorInput.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryAttachmentEditorInput.java deleted file mode 100644 index a226c6ce1..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryAttachmentEditorInput.java +++ /dev/null @@ -1,134 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.editors; - -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; - -import org.eclipse.core.resources.IStorage; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.PlatformObject; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.mylar.tasks.core.RepositoryAttachment; -import org.eclipse.ui.IPersistableElement; -import org.eclipse.ui.IStorageEditorInput; - -/** - * @author Jeff Pound - */ -public class RepositoryAttachmentEditorInput extends PlatformObject implements IStorageEditorInput { - - private RepositoryAttachment attachment; - private RepositoryAttachmentStorage storage; - - public RepositoryAttachmentEditorInput(RepositoryAttachment att) { - this.attachment = att; - this.storage = new RepositoryAttachmentStorage(); - } - - public IStorage getStorage() throws CoreException { - return storage; - } - - public boolean exists() { - return true; - } - - public ImageDescriptor getImageDescriptor() { - // ignore - return null; - } - - public String getName() { - return storage.getName(); - } - - public IPersistableElement getPersistable() { - return null; - } - - public String getToolTipText() { - return "Repository Attachment: " + attachment.getId() + " [" + attachment.getUrl() + "]"; - } - - class RepositoryAttachmentStorage extends PlatformObject implements IStorage { - - private static final String ATTR_FILENAME = "filename"; - - private static final String ATTACHMENT_DEFAULT_NAME = "attachment"; - - private static final String CTYPE_ZIP = "zip"; - - private static final String CTYPE_OCTET_STREAM = "octet-stream"; - - private static final String CTYPE_TEXT = "text"; - - private static final String CTYPE_HTML = "html"; - - - public InputStream getContents() throws CoreException { - URLConnection urlConnect; - InputStream stream = null; - try { - urlConnect = (new URL(attachment.getUrl())).openConnection(); - urlConnect.connect(); - stream = urlConnect.getInputStream(); - - } catch (MalformedURLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - return stream; - } - - public IPath getFullPath() { - // ignore - return null; - } - - public String getName() { - String name = attachment.getAttributeValue(ATTR_FILENAME); - - // if no filename is set, make one up with the proper extension so - // we can support opening in that filetype's default editor - if (name == null || "".equals(name)) { - String ctype = attachment.getContentType(); - if (ctype.endsWith(CTYPE_HTML)) { - name = ATTACHMENT_DEFAULT_NAME + ".html"; - } else if (ctype.startsWith(CTYPE_TEXT)) { - name = ATTACHMENT_DEFAULT_NAME + ".txt"; - } else if (ctype.endsWith(CTYPE_OCTET_STREAM)) { - name = ATTACHMENT_DEFAULT_NAME; - } else if (ctype.endsWith(CTYPE_ZIP)) { - name = ATTACHMENT_DEFAULT_NAME + "." + CTYPE_ZIP; - } else { - name = ATTACHMENT_DEFAULT_NAME + "." + ctype.substring(ctype.indexOf("/") + 1); - } - } - // treat .patch files as text files - if (name.endsWith(".patch")) { - name += ".txt"; - } - - return name; - } - - public boolean isReadOnly() { - return true; - } - - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryTaskOutlineNode.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryTaskOutlineNode.java deleted file mode 100644 index 7460eedd8..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryTaskOutlineNode.java +++ /dev/null @@ -1,333 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui.editors; - -import java.util.ArrayList; -import java.util.Iterator; - -import org.eclipse.mylar.tasks.core.TaskComment; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; - -/** - * A node for the tree in the <code>RepositoryTaskOutlinePage</code>. - * - * @author Mik Kersten (hardening of prototype) - */ -public class RepositoryTaskOutlineNode implements IRepositoryTaskSelection { - - static final String LABEL_DESCRIPTION = "Description"; - - static final String LABEL_COMMENTS = "Comments"; - - static final String LABEL_NEW_COMMENT = "New Comment"; - - /** The id of the Bugzilla object that the selection was on. */ - protected String id; - - /** The server of the Bugzilla object that the selection was on. */ - protected String server; - - /** The label for this piece of data. */ - private String key; - - /** The children of this node. */ - private ArrayList<RepositoryTaskOutlineNode> nodeChildren; - - /** The parent of this node or null if it is the bug report */ - private RepositoryTaskOutlineNode parent; - - private Object data = null; - - private String bugSummary; - - private boolean fromEditor = false; - - private boolean isCommentHeader = false; - - private boolean isDescription = false; - - /** - * Creates a new <code>RepositoryTaskOutlineNode</code>. - * - * @param id - * The id of the bug this outline is for. - * @param server - * The server of the bug this outline is for. - * @param key - * The label for this node. - * @param image - * The image that will be displayed by this node in the tree. - * @param data - * The data, if necessary, this node represents. - * @param parent - * The parent of this node - */ - public RepositoryTaskOutlineNode(String id, String server, String key, Object data, String summary) { - this.id = id; - this.server = server; - this.key = key; - this.nodeChildren = null; - this.data = data; - this.parent = null; - this.bugSummary = summary; - } - - public boolean isFromEditor() { - return fromEditor; - } - - /** - * @return The children of this node, represented as an <code>Object</code> - * array. - */ - public RepositoryTaskOutlineNode[] getChildren() { - return (nodeChildren == null) ? new RepositoryTaskOutlineNode[0] : nodeChildren - .toArray(new RepositoryTaskOutlineNode[nodeChildren.size()]); - } - - /** - * Adds a node to this node's list of children. - * - * @param bugNode - * The new child. - */ - public void addChild(RepositoryTaskOutlineNode bugNode) { - if (nodeChildren == null) { - nodeChildren = new ArrayList<RepositoryTaskOutlineNode>(); - } - bugNode.setParent(this); - nodeChildren.add(bugNode); - } - - /** - * @return The label of this node. - */ - public String getKey() { - return key; - } - - /** - * @return <code>true</code> if the given object is another node - * representing the same piece of data in the editor. - */ - @Override - public boolean equals(Object arg0) { - if (arg0 instanceof RepositoryTaskOutlineNode) { - RepositoryTaskOutlineNode bugNode = (RepositoryTaskOutlineNode) arg0; - return getKey().equals(bugNode.getKey()); - } - return super.equals(arg0); - } - - @Override - public int hashCode() { - return getKey().hashCode(); - } - - /** - * @return The name of this node. - */ - public String getName() { - return getKey(); - } - - /** - * @return The data (where applicable) this node represents. - */ - public Object getData() { - return data; - } - - /** - * Sets the data that this node represents. - * - * @param data - * The new piece of data. - */ - public void setData(Object data) { - this.data = data; - } - - /** - * Parses the given <code>IBugzillaBug</code> into a tree of - * <code>RepositoryTaskOutlineNode</code>'s suitable for use in the - * <code>RepositoryTaskOutlinePage</code> view. - * - * @param bug - * The bug that needs parsing. - * @return The tree of <code>RepositoryTaskOutlineNode</code>'s. - */ - public static RepositoryTaskOutlineNode parseBugReport(RepositoryTaskData bug, boolean hasNewComment) { - // Choose the appropriate parsing function based on - // the type of IBugzillaBug. - // if (bug instanceof NewBugzillaReport) { - // return parseNewBugReport((NewBugzillaReport) bug); - // } else - if (bug instanceof RepositoryTaskData) { - return parseExistingBugReport((RepositoryTaskData) bug, hasNewComment); - } else { - return null; - } - } - - public static RepositoryTaskOutlineNode parseBugReport(RepositoryTaskData bug) { - return parseBugReport(bug, true); - } - -// /** -// * Parses the given <code>NewBugModel</code> into a tree of -// * <code>RepositoryTaskOutlineNode</code>'s suitable for use in the -// * <code>RepositoryTaskOutlinePage</code> view. -// * -// * @param bug -// * The <code>NewBugModel</code> that needs parsing. -// * @return The tree of <code>RepositoryTaskOutlineNode</code>'s. -// */ -// protected static RepositoryTaskOutlineNode parseNewBugReport(NewBugzillaReport bug) { -// int bugId = bug.getId(); -// String bugServer = bug.getRepositoryUrl(); -// Image bugImage = BugzillaImages.getImage(BugzillaImages.BUG); -// Image defaultImage = BugzillaImages.getImage(BugzillaImages.BUG_COMMENT); -// RepositoryTaskOutlineNode topNode = new RepositoryTaskOutlineNode(bugId, bugServer, bug.getLabel(), bugImage, bug, bug -// .getSummary()); -// -// topNode.addChild(new RepositoryTaskOutlineNode(bugId, bugServer, "New Description", defaultImage, null, bug -// .getSummary())); -// -// RepositoryTaskOutlineNode titleNode = new RepositoryTaskOutlineNode(bugId, bugServer, "NewBugModel Object", defaultImage, -// null, bug.getSummary()); -// titleNode.addChild(topNode); -// -// return titleNode; -// } - - /** - * Parses the given <code>BugReport</code> into a tree of - * <code>RepositoryTaskOutlineNode</code>'s suitable for use in the - * <code>RepositoryTaskOutlinePage</code> view. - * - * @param bug - * The <code>BugReport</code> that needs parsing. - * @return The tree of <code>RepositoryTaskOutlineNode</code>'s. - */ - protected static RepositoryTaskOutlineNode parseExistingBugReport(RepositoryTaskData bug, boolean hasNewComment) { - - String bugId = bug.getId(); - String bugServer = bug.getRepositoryUrl(); - RepositoryTaskOutlineNode topNode = new RepositoryTaskOutlineNode(bugId, bugServer, bug.getLabel(), bug, bug - .getSummary()); - - RepositoryTaskOutlineNode desc = new RepositoryTaskOutlineNode(bugId, bugServer, LABEL_DESCRIPTION, bug - .getDescription(), bug.getSummary()); - desc.setIsDescription(true); - - topNode.addChild(desc); - - RepositoryTaskOutlineNode comments = null; - for (Iterator<TaskComment> iter = bug.getComments().iterator(); iter.hasNext();) { - TaskComment taskComment = iter.next(); - // first comment is the bug description - if(taskComment.getNumber() == 0) continue; - if (comments == null) { - comments = new RepositoryTaskOutlineNode(bugId, bugServer, LABEL_COMMENTS, taskComment, bug - .getSummary()); - comments.setIsCommentHeader(true); - } - comments.addChild(new RepositoryTaskOutlineNode(bugId, bugServer, taskComment.getCreated(), - taskComment, bug.getSummary())); - } - if (comments != null) { - topNode.addChild(comments); - } - - if (hasNewComment) { - topNode - .addChild(new RepositoryTaskOutlineNode(bugId, bugServer, LABEL_NEW_COMMENT, null, bug.getSummary())); - } - - RepositoryTaskOutlineNode titleNode = new RepositoryTaskOutlineNode(bugId, bugServer, "BugReport Object", - null, bug.getSummary()); - titleNode.addChild(topNode); - - return titleNode; - } - - public boolean hasComment() { - // If the comment category was selected, then the comment object is - // not the intended selection (it is just used to help find the correct - // location in the editor). - return (data instanceof TaskComment) && !(key.toLowerCase().equals("comments")); - } - - public TaskComment getComment() { - return (hasComment()) ? (TaskComment) data : null; - } - - public void setComment(TaskComment taskComment) { - data = taskComment; - } - - public String getContents() { - return key; - } - - public void setContents(String contents) { - key = contents; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getServer() { - return server; - } - - public void setServer(String server) { - this.server = server; - } - - public boolean isEmpty() { - return (server == null) || ((getContents() == null) && (getComment() == null)); - } - - public RepositoryTaskOutlineNode getParent() { - return parent; - } - - public void setParent(RepositoryTaskOutlineNode parent) { - this.parent = parent; - } - - public boolean isCommentHeader() { - return isCommentHeader; - } - - public boolean isDescription() { - return isDescription; - } - - public void setIsCommentHeader(boolean isCommentHeader) { - this.isCommentHeader = isCommentHeader; - } - - public void setIsDescription(boolean isDescription) { - this.isDescription = isDescription; - } - - public String getBugSummary() { - return bugSummary; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryTaskOutlinePage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryTaskOutlinePage.java deleted file mode 100644 index 177634047..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryTaskOutlinePage.java +++ /dev/null @@ -1,176 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui.editors; - -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.ITreeContentProvider; -import org.eclipse.jface.viewers.LabelProvider; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.ISelectionListener; -import org.eclipse.ui.IWorkbenchPart; -import org.eclipse.ui.views.contentoutline.ContentOutlinePage; - -/** - * An outline page for a <code>BugEditor</code>. - */ -public class RepositoryTaskOutlinePage extends ContentOutlinePage { - - private RepositoryTaskOutlineNode topTreeNode; - - protected final ISelectionListener selectionListener = new ISelectionListener() { - public void selectionChanged(IWorkbenchPart part, ISelection selection) { - if ((part instanceof AbstractRepositoryTaskEditor) && (selection instanceof IStructuredSelection)) { - if (((IStructuredSelection) selection).getFirstElement() instanceof IRepositoryTaskSelection) { - if (((IStructuredSelection) getSelection()).getFirstElement() instanceof IRepositoryTaskSelection) { - IRepositoryTaskSelection brs1 = (IRepositoryTaskSelection) ((IStructuredSelection) getSelection()) - .getFirstElement(); - IRepositoryTaskSelection brs2 = ((IRepositoryTaskSelection) ((IStructuredSelection) selection) - .getFirstElement()); - if (ContentOutlineTools.getHandle(brs1).compareTo(ContentOutlineTools.getHandle(brs2)) == 0) { - // don't need to make a selection for the same - // element - return; - } - } - getTreeViewer().setSelection(selection, true); - } - } - } - }; - - private TreeViewer viewer; - - /** - * Creates a new <code>RepositoryTaskOutlinePage</code>. - * - * @param topTreeNode - * The top data node of the tree for this view. - * @param editor - * The editor this outline page is for. - */ - public RepositoryTaskOutlinePage(RepositoryTaskOutlineNode topTreeNode) { - super(); - this.topTreeNode = topTreeNode; - } - - @Override - public void createControl(Composite parent) { - super.createControl(parent); - viewer = getTreeViewer(); - viewer.setContentProvider(new BugTaskOutlineContentProvider()); - viewer.setLabelProvider(new LabelProvider() { - @Override - public Image getImage(Object element) { - if (element instanceof RepositoryTaskOutlineNode) { - RepositoryTaskOutlineNode node = (RepositoryTaskOutlineNode) element; - - if (RepositoryTaskOutlineNode.LABEL_COMMENTS.equals(node.getContents())|| - RepositoryTaskOutlineNode.LABEL_NEW_COMMENT.equals(node.getContents())) { - return TaskListImages.getImage(TaskListImages.COMMENT); - } if (RepositoryTaskOutlineNode.LABEL_DESCRIPTION.equals(node.getContents())) { - return TaskListImages.getImage(TaskListImages.TASK_NOTES); - } else if (node.getComment() != null) { - return TaskListImages.getImage(TaskListImages.PERSON); - } else { - return TaskListImages.getImage(TaskListImages.TASK_REPOSITORY); - } - } else { - return super.getImage(element); - } - } - - @Override - public String getText(Object element) { - if (element instanceof RepositoryTaskOutlineNode) { - RepositoryTaskOutlineNode node = (RepositoryTaskOutlineNode) element; - if (node.getComment() != null) { - return node.getComment().getAuthorName() + " (" + node.getName() + ")"; - } else { - return node.getName(); - } - } - return super.getText(element); - } - }); - try { - viewer.setInput(topTreeNode); - viewer.setComparer(new RepositoryTaskOutlineComparer()); - viewer.expandAll(); - } catch (Exception e) { - MylarStatusHandler.fail(e, "could not create bugzilla outline", true); - } - getSite().getPage().addSelectionListener(selectionListener); - } - - @Override - public void dispose() { - super.dispose(); - getSite().getPage().removeSelectionListener(selectionListener); - } - - public TreeViewer getOutlineTreeViewer() { - return viewer; - } - - /** - * A content provider for the tree for this view. - * - * @see ITreeContentProvider - */ - protected static class BugTaskOutlineContentProvider implements ITreeContentProvider { - - public Object[] getChildren(Object parentElement) { - if (parentElement instanceof RepositoryTaskOutlineNode) { - Object[] children = ((RepositoryTaskOutlineNode) parentElement).getChildren(); - if (children.length > 0) { - return children; - } - } - return new Object[0]; - } - - public Object getParent(Object element) { - return null; - } - - public boolean hasChildren(Object element) { - if (element instanceof RepositoryTaskOutlineNode) { - return ((RepositoryTaskOutlineNode) element).getChildren().length > 0; - } - return false; - } - - public Object[] getElements(Object inputElement) { - if (inputElement instanceof RepositoryTaskOutlineNode) { - Object[] children = ((RepositoryTaskOutlineNode) inputElement).getChildren(); - if (children.length > 0) { - return children; - } - } - return new Object[0]; - } - - public void dispose() { - // don't care when we are disposed - } - - public void inputChanged(Viewer viewerChanged, Object oldInput, Object newInput) { - // don't care when the input changes - } - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryTaskSelection.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryTaskSelection.java deleted file mode 100644 index 266144427..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryTaskSelection.java +++ /dev/null @@ -1,171 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.editors; - -import org.eclipse.mylar.tasks.core.TaskComment; - -/** - * A selection of an element in a view. - */ -public class RepositoryTaskSelection implements IRepositoryTaskSelection { - - /** - * The id of the Bugzilla object that the selection was on. - */ - protected String id; - - /** The server of the Bugzilla object that the selection was on. */ - protected String server; - - /** The contents of the selection. */ - protected String contents; - - protected String bugSummary; - - /** - * The comment, if a comment was selected. If the selection was not a - * comment, then this is <code>null</code>. - */ - protected TaskComment taskComment; - - /** - * Creates a new <code>RepositoryTaskSelection</code> with no supplied - * contents or comment. - * - * @param id - * The id of the Bugzilla object that the selection was on. - * @param server - * The server of the Bugzilla object that the selection was on. - */ - public RepositoryTaskSelection(String id, String server, String summary) { - this(id, server, null, null, summary); - } - - /** - * Creates a new <code>RepositoryTaskSelection</code> with no supplied - * comment. - * - * @param id - * The id of the Bugzilla object that the selection was on. - * @param server - * The server of the Bugzilla object that the selection was on. - * @param contents - * The contents of the selection. - */ - public RepositoryTaskSelection(String id, String server, String contents, boolean isDescription, String summary) { - this(id, server, contents, null, summary); - this.isDescription = isDescription; - } - - /** - * Creates a new <code>RepositoryTaskSelection</code> with no supplied - * contents. - * - * @param id - * The id of the Bugzilla object that the selection was on. - * @param server - * The server of the Bugzilla object that the selection was on. - * @param taskComment - * The <code>Comment</code> object for this selection. If a - * comment was not selected, then this should be - * <code>null</code>. - */ - public RepositoryTaskSelection(String id, String server, TaskComment taskComment, String summary) { - this(id, server, null, taskComment, summary); - } - - /** - * Creates a new <code>RepositoryTaskSelection</code>. - * - * @param id - * The id of the Bugzilla object that the selection was on. - * @param server - * The server of the Bugzilla object that the selection was on. - * @param contents - * The contents of the selection. - * @param taskComment - * The <code>Comment</code> object for this selection. If a - * comment was not selected, then this should be - * <code>null</code>. - */ - public RepositoryTaskSelection(String id, String server, String contents, TaskComment taskComment, String summary) { - this.id = id; - this.server = server; - this.contents = contents; - this.taskComment = taskComment; - this.bugSummary = summary; - } - - public boolean hasComment() { - return taskComment != null; - } - - public TaskComment getComment() { - return taskComment; - } - - public void setComment(TaskComment taskComment) { - this.taskComment = taskComment; - } - - public String getContents() { - return contents; - } - - public void setContents(String contents) { - this.contents = contents; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getServer() { - return server; - } - - public void setServer(String server) { - this.server = server; - } - - public boolean isEmpty() { - return (server == null) || ((contents == null) && (taskComment == null)); - } - - private boolean isCommentHeader = false; - - private boolean isDescription = false; - - public boolean isCommentHeader() { - return isCommentHeader; - } - - public boolean isDescription() { - return isDescription; - } - - public void setIsCommentHeader(boolean isCommentHeader) { - this.isCommentHeader = isCommentHeader; - } - - public void setIsDescription(boolean isDescription) { - this.isDescription = isDescription; - } - - public String getBugSummary() { - return bugSummary; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryTextViewer.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryTextViewer.java deleted file mode 100644 index daa36a311..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryTextViewer.java +++ /dev/null @@ -1,58 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.editors; - -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.source.IOverviewRuler; -import org.eclipse.jface.text.source.IVerticalRuler; -import org.eclipse.jface.text.source.SourceViewer; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.swt.widgets.Composite; - -/** - * @author Rob Elves - */ -public class RepositoryTextViewer extends SourceViewer { - - private TaskRepository repository; - - public RepositoryTextViewer(IVerticalRuler vertRuler, IOverviewRuler overRuler, TaskRepository repository, - Composite composite, int style) { - super(composite, vertRuler, overRuler, true, style); - - this.repository = repository; - - } - - public RepositoryTextViewer(TaskRepository repository, Composite composite, int style) {// FormEditor - super(composite, null, style); - this.repository = repository; - } - - public void setDocument(IDocument doc) { - if (doc != null && this.getAnnotationModel() != null) { - this.getAnnotationModel().connect(doc); - super.setDocument(doc, this.getAnnotationModel()); - } else { - super.setDocument(doc); - } - } - - public TaskRepository getRepository() { - return repository; - } - - public void setRepository(TaskRepository repository) { - this.repository = repository; - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryViewerConfig.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryViewerConfig.java deleted file mode 100644 index b24fa688a..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RepositoryViewerConfig.java +++ /dev/null @@ -1,140 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.editors; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.TextAttribute; -import org.eclipse.jface.text.hyperlink.DefaultHyperlinkPresenter; -import org.eclipse.jface.text.hyperlink.IHyperlinkDetector; -import org.eclipse.jface.text.hyperlink.IHyperlinkPresenter; -import org.eclipse.jface.text.presentation.IPresentationReconciler; -import org.eclipse.jface.text.presentation.PresentationReconciler; -import org.eclipse.jface.text.reconciler.IReconciler; -import org.eclipse.jface.text.reconciler.MonoReconciler; -import org.eclipse.jface.text.rules.DefaultDamagerRepairer; -import org.eclipse.jface.text.rules.IRule; -import org.eclipse.jface.text.rules.IToken; -import org.eclipse.jface.text.rules.MultiLineRule; -import org.eclipse.jface.text.rules.RuleBasedScanner; -import org.eclipse.jface.text.rules.SingleLineRule; -import org.eclipse.jface.text.rules.Token; -import org.eclipse.jface.text.source.DefaultAnnotationHover; -import org.eclipse.jface.text.source.IAnnotationHover; -import org.eclipse.jface.text.source.IAnnotationModel; -import org.eclipse.jface.text.source.ISourceViewer; -import org.eclipse.jface.text.source.SourceViewerConfiguration; -import org.eclipse.mylar.internal.tasks.ui.TaskListColorsAndFonts; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.RGB; - -/** - * @author Rob Elves - */ -public class RepositoryViewerConfig extends SourceViewerConfiguration { - - private RepositoryTextScanner scanner = null; - - private TaskSpellingReconcileStrategy strategy = new TaskSpellingReconcileStrategy(); - - private boolean spellcheck = false; - - public RepositoryViewerConfig(boolean spellchecking) { - this.spellcheck = spellchecking; - } - - public void setAnnotationModel(IAnnotationModel model, IDocument doc) { - strategy.setAnnotationModel(model); - strategy.setDocument(doc); - } - - @Override - public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) { - if (spellcheck) { - return new DefaultAnnotationHover(); - } else { - return null; - } - } - - public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) { - PresentationReconciler reconciler = new PresentationReconciler(); - reconciler.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer)); - - DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getDefaultScanner()); - reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE); - reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE); - - return reconciler; - } - - private RepositoryTextScanner getDefaultScanner() { - if (scanner == null) { - scanner = new RepositoryTextScanner(); - } - return scanner; - } - - public IHyperlinkDetector[] getHyperlinkDetectors(ISourceViewer sourceViewer) { - List<IHyperlinkDetector> detectors = new ArrayList<IHyperlinkDetector>(); - detectors.addAll(Arrays.asList(TasksUiPlugin.getDefault().getTaskHyperlinkDetectors())); - return detectors.toArray(new IHyperlinkDetector[detectors.size()]); - } - - public IHyperlinkPresenter getHyperlinkPresenter(ISourceViewer sourceViewer) { - return new DefaultHyperlinkPresenter(new RGB(0, 0, 200)); - } - - public int getHyperlinkStateMask(ISourceViewer sourceViewer) { - return SWT.NONE; - } - - public IReconciler getReconciler(ISourceViewer sourceViewer) { - if (spellcheck) { - MonoReconciler reconciler = new MonoReconciler(strategy, false); - reconciler.setIsIncrementalReconciler(false); - reconciler.setProgressMonitor(new NullProgressMonitor()); - reconciler.setDelay(500); - return reconciler; - } else { - return null; - } - } - - static class RepositoryTextScanner extends RuleBasedScanner { - - public RepositoryTextScanner() { - IToken bugToken = new Token(new TextAttribute(TaskListColorsAndFonts.COLOR_HYPERLINK)); - IRule[] rules = new IRule[15]; - rules[0] = (new SingleLineRule("http://", " ", bugToken)); - rules[1] = (new SingleLineRule("https://", " ", bugToken)); - rules[2] = (new MultiLineRule("bug#", " ", bugToken)); - rules[3] = (new MultiLineRule("bug #", " ", bugToken)); - rules[4] = (new SingleLineRule("bug #", "\n", bugToken)); - rules[5] = (new SingleLineRule("http://", "\n", bugToken)); - rules[6] = (new SingleLineRule("https://", "\n", bugToken)); - rules[7] = (new MultiLineRule("task#", " ", bugToken)); - rules[8] = (new MultiLineRule("task#", "\n", bugToken)); - rules[9] = (new MultiLineRule("task# ", " ", bugToken)); - rules[10] = (new SingleLineRule("task #", "\n", bugToken)); - rules[11] = (new SingleLineRule("*** This bug has been ", "***", bugToken)); - rules[12] = (new SingleLineRule("http://", "", bugToken)); - rules[13] = (new SingleLineRule("https://", "", bugToken)); - rules[14] = (new MultiLineRule("task #", " ", bugToken)); - setRules(rules); - } - - } - -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/SpellingDialog.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/SpellingDialog.java deleted file mode 100644 index ca7ae3e83..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/SpellingDialog.java +++ /dev/null @@ -1,105 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.editors; - -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.contentassist.ICompletionProposal; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.List; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Text; - -/** - * TODO this is used only for spell checking which is not yet implemented, - * therefore this is not properly tested - * - * @author Shawn Minto - */ -public class SpellingDialog extends Dialog { - - private String title; - - private Text wordToFix; - - private List suggestions; - - private IDocument document; - - private ICompletionProposal[] proposals; - - protected SpellingDialog(Shell parentShell, String title, IDocument document) { - super(parentShell); - this.title = title; - this.document = document; - } - - @Override - protected Control createDialogArea(Composite parent) { - Control c = super.createDialogArea(parent); - - Composite spellingComposite = new Composite(parent, SWT.NONE); - - GridLayout spellingLayout = new GridLayout(); - spellingLayout.numColumns = 1; - spellingComposite.setLayout(spellingLayout); - - wordToFix = new Text(spellingComposite, SWT.BORDER | SWT.READ_ONLY); - GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); - gd.widthHint = 150; - wordToFix.setLayoutData(gd); - - suggestions = new List(spellingComposite, SWT.BORDER); - gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); - gd.widthHint = 150; - gd.heightHint = AbstractRepositoryTaskEditor.WRAP_LENGTH; - suggestions.setLayoutData(gd); - - return c; - } - - @Override - protected void configureShell(Shell newShell) { - super.configureShell(newShell); - newShell.setText(title); - } - - public void open(String word, ICompletionProposal[] proposals) { - create(); - - this.proposals = proposals; - - wordToFix.setText(word); - suggestions.removeAll(); - - for (int i = 0; i < proposals.length; i++) { - suggestions.setItem(i, proposals[i].getDisplayString()); - } - - super.open(); - } - - @Override - protected void handleShellCloseEvent() { - if (getReturnCode() == Dialog.OK) { - int i = suggestions.getSelectionIndex(); - if (i > 0 && i < proposals.length) - proposals[i].apply(document); - } - super.handleShellCloseEvent(); - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorActionContributor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorActionContributor.java deleted file mode 100644 index 1eff7fa85..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorActionContributor.java +++ /dev/null @@ -1,330 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.editors; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.GroupMarker; -import org.eclipse.jface.action.ICoolBarManager; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.IStatusLineManager; -import org.eclipse.jface.action.IToolBarManager; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.jface.action.Separator; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.ISelectionProvider; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.mylar.internal.tasks.ui.IDynamicSubMenuContributor; -import org.eclipse.mylar.internal.tasks.ui.actions.OpenWithBrowserAction; -import org.eclipse.mylar.internal.tasks.ui.actions.TaskActivateAction; -import org.eclipse.mylar.internal.tasks.ui.actions.TaskDeactivateAction; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.IActionBars; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.ISharedImages; -import org.eclipse.ui.IWorkbenchActionConstants; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.SubActionBars; -import org.eclipse.ui.actions.ActionFactory; -import org.eclipse.ui.internal.ObjectActionContributorManager; -import org.eclipse.ui.internal.WorkbenchImages; -import org.eclipse.ui.internal.WorkbenchMessages; -import org.eclipse.ui.part.MultiPageEditorActionBarContributor; -import org.eclipse.ui.texteditor.IWorkbenchActionDefinitionIds; - -/** - * @author Mik Kersten - * @author Rob Elves - */ -public class TaskEditorActionContributor extends MultiPageEditorActionBarContributor implements - ISelectionChangedListener { - - private SubActionBars sourceActionBars; - - private MylarTaskEditor editor; - - private OpenWithBrowserAction openWithBrowserAction = new OpenWithBrowserAction(); - - private GlobalAction cutAction; - - private GlobalAction undoAction; - - private GlobalAction redoAction; - - private GlobalAction copyAction; - - private GlobalAction pasteAction; - - private GlobalAction selectAllAction; - - public TaskEditorActionContributor() { - - cutAction = new GlobalAction(ActionFactory.CUT.getId()); - cutAction.setText(WorkbenchMessages.Workbench_cut); - cutAction.setToolTipText(WorkbenchMessages.Workbench_cutToolTip); - cutAction.setImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_CUT)); - cutAction.setHoverImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_CUT)); - cutAction.setDisabledImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_CUT_DISABLED)); - cutAction.setActionDefinitionId(IWorkbenchActionDefinitionIds.CUT); - - pasteAction = new GlobalAction(ActionFactory.PASTE.getId()); - pasteAction.setText(WorkbenchMessages.Workbench_paste); - pasteAction.setToolTipText(WorkbenchMessages.Workbench_pasteToolTip); - pasteAction.setImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE)); - pasteAction.setHoverImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE)); - pasteAction.setDisabledImageDescriptor(WorkbenchImages - .getImageDescriptor(ISharedImages.IMG_TOOL_PASTE_DISABLED)); - pasteAction.setActionDefinitionId(IWorkbenchActionDefinitionIds.PASTE); - - copyAction = new GlobalAction(ActionFactory.COPY.getId()); - copyAction.setText(WorkbenchMessages.Workbench_copy); - copyAction.setImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_COPY)); - copyAction.setHoverImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_COPY)); - copyAction.setDisabledImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_COPY_DISABLED)); - copyAction.setActionDefinitionId(IWorkbenchActionDefinitionIds.COPY); - - undoAction = new GlobalAction(ActionFactory.UNDO.getId()); - undoAction.setText(WorkbenchMessages.Workbench_undo); - undoAction.setImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_UNDO)); - undoAction.setHoverImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_UNDO)); - undoAction.setDisabledImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_UNDO_DISABLED)); - undoAction.setActionDefinitionId(IWorkbenchActionDefinitionIds.UNDO); - - redoAction = new GlobalAction(ActionFactory.REDO.getId()); - redoAction.setText(WorkbenchMessages.Workbench_redo); - redoAction.setImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_REDO)); - redoAction.setHoverImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_REDO)); - redoAction.setDisabledImageDescriptor(WorkbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_REDO_DISABLED)); - redoAction.setActionDefinitionId(IWorkbenchActionDefinitionIds.REDO); - - selectAllAction = new GlobalAction(ActionFactory.SELECT_ALL.getId()); - selectAllAction.setText(WorkbenchMessages.Workbench_selectAll); - selectAllAction.setActionDefinitionId(IWorkbenchActionDefinitionIds.SELECT_ALL); - selectAllAction.setEnabled(true); - - } - - public void addClipboardActions(IMenuManager manager) { - manager.add(undoAction); - manager.add(redoAction); - manager.add(new Separator()); - manager.add(cutAction); - manager.add(copyAction); - manager.add(pasteAction); - manager.add(selectAllAction); - manager.add(new Separator()); - } - - public void contextMenuAboutToShow(IMenuManager mng) { - boolean addClipboard = this.getEditor().getActivePageInstance() != null - && (this.getEditor().getActivePageInstance() instanceof TaskPlanningEditor || this.getEditor() - .getActivePageInstance() instanceof AbstractRepositoryTaskEditor); - contextMenuAboutToShow(mng, addClipboard); - } - - public void contextMenuAboutToShow(IMenuManager manager, boolean addClipboard) { - if (editor != null) - updateSelectableActions(editor.getSelection()); - if (addClipboard) { - addClipboardActions(manager); - } - - if (editor.getTaskEditorInput() == null) - return; - final ITask task = editor.getTaskEditorInput().getTask(); - - if (task == null) { - return; - } else { - openWithBrowserAction.selectionChanged(new StructuredSelection(task)); - manager.add(openWithBrowserAction); - - if (task.isActive()) { - manager.add(new TaskDeactivateAction() { - @Override - public void run() { - super.run(task); - } - }); - } else { - manager.add(new TaskActivateAction() { - @Override - public void run() { - TasksUiPlugin.getTaskListManager().getTaskActivationHistory().addTask(task); - super.run(task); - } - }); - } - - manager.add(new Separator()); - - for (IDynamicSubMenuContributor contributor : TasksUiPlugin.getDefault().getDynamicMenuContributers()) { - List<ITaskListElement> selectedElements = new ArrayList<ITaskListElement>(); - selectedElements.add(task); - MenuManager subMenuManager = contributor.getSubMenuManager(selectedElements); - if (subMenuManager != null) { - manager.add(subMenuManager); - } - } - - manager.add(new Separator()); - // HACK: there should be a saner way of doing this - ObjectActionContributorManager.getManager().contributeObjectActions(editor, manager, - new ISelectionProvider() { - - public void addSelectionChangedListener(ISelectionChangedListener listener) { - // ignore - } - - public ISelection getSelection() { - return new StructuredSelection(task); - } - - public void removeSelectionChangedListener(ISelectionChangedListener listener) { - // ignore - - } - - public void setSelection(ISelection selection) { - // ignore - - } - }); - } - manager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS)); - } - - public void updateSelectableActions(ISelection selection) { - if (editor != null) { - cutAction.selectionChanged(selection); - copyAction.selectionChanged(selection); - pasteAction.selectionChanged(selection); - undoAction.selectionChanged(selection); - redoAction.selectionChanged(selection); - selectAllAction.selectionChanged(selection); - } - } - - public void contributeToMenu(IMenuManager mm) { - } - - public void contributeToStatusLine(IStatusLineManager slm) { - } - - public void contributeToToolBar(IToolBarManager tbm) { - } - - public void contributeToCoolBar(ICoolBarManager cbm) { - } - - public void dispose() { - sourceActionBars.dispose(); - super.dispose(); - } - - public void init(IActionBars bars) { - super.init(bars); - sourceActionBars = new SubActionBars(bars); - } - - public void init(IActionBars bars, IWorkbenchPage page) { - super.init(bars, page); - registerGlobalHandlers(bars); - - } - - public MylarTaskEditor getEditor() { - return editor; - } - - public IStatusLineManager getStatusLineManager() { - return getActionBars().getStatusLineManager(); - } - - public void setActiveEditor(IEditorPart targetEditor) { - if (targetEditor instanceof MylarTaskEditor) { - editor = (MylarTaskEditor) targetEditor; - updateSelectableActions(editor.getSelection()); - } - } - - public void setActivePage(IEditorPart newEditor) { - if (getEditor() != null) { - updateSelectableActions(getEditor().getSelection()); - } - } - - public void selectionChanged(SelectionChangedEvent event) { - updateSelectableActions(event.getSelection()); - } - - private class GlobalAction extends Action { - - private String actionId; - - public GlobalAction(String actionId) { - this.actionId = actionId; - } - - @Override - public void run() { - if (getEditor().getActivePageInstance() instanceof TaskFormPage) { - TaskFormPage editor = (TaskFormPage) getEditor().getActivePageInstance(); - editor.doAction(actionId); - updateSelectableActions(getEditor().getSelection()); - } - } - - public void selectionChanged(ISelection selection) { - if (getEditor().getActivePageInstance() instanceof TaskFormPage) { - TaskFormPage editor = (TaskFormPage) getEditor().getActivePageInstance(); - setEnabled(editor.canDoAction(actionId)); - } - } - } - - public void registerGlobalHandlers(IActionBars bars) { - bars.setGlobalActionHandler(ActionFactory.CUT.getId(), cutAction); - bars.setGlobalActionHandler(ActionFactory.PASTE.getId(), pasteAction); - bars.setGlobalActionHandler(ActionFactory.COPY.getId(), copyAction); - bars.setGlobalActionHandler(ActionFactory.UNDO.getId(), undoAction); - bars.setGlobalActionHandler(ActionFactory.REDO.getId(), redoAction); - bars.setGlobalActionHandler(ActionFactory.SELECT_ALL.getId(), selectAllAction); - bars.updateActionBars(); - } - - public void unregisterGlobalHandlers(IActionBars bars) { - bars.setGlobalActionHandler(ActionFactory.CUT.getId(), null); - bars.setGlobalActionHandler(ActionFactory.PASTE.getId(), null); - bars.setGlobalActionHandler(ActionFactory.COPY.getId(), null); - bars.setGlobalActionHandler(ActionFactory.UNDO.getId(), null); - bars.setGlobalActionHandler(ActionFactory.REDO.getId(), null); - bars.setGlobalActionHandler(ActionFactory.SELECT_ALL.getId(), null); - bars.updateActionBars(); - } - - public void forceActionsEnabled() { - cutAction.setEnabled(true); - copyAction.setEnabled(true); - pasteAction.setEnabled(true); - selectAllAction.setEnabled(true); - undoAction.setEnabled(false); - redoAction.setEnabled(false); - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorInput.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorInput.java deleted file mode 100644 index fc645fddc..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorInput.java +++ /dev/null @@ -1,150 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -/* - * Created on 19-Jan-2005 - */ -package org.eclipse.mylar.internal.tasks.ui.editors; - -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IPersistableElement; - -/** - * @author Eric Booth - */ -public class TaskEditorInput implements IEditorInput { - - private static final int MAX_LABEL_LENGTH = 60; - - private ITask task; - - private String id; - - private String label; - - private boolean newTask = false; - - public TaskEditorInput(ITask task, boolean newTask) { - this.task = task; - this.newTask = newTask; - id = task.getHandleIdentifier(); - label = truncateDescription(task.getDescription()); - } - - private String truncateDescription(String description) { - if (description == null || description.length() <= MAX_LABEL_LENGTH) { - return description; - } else { - return description.substring(0, MAX_LABEL_LENGTH) + "..."; - } - } - - public boolean exists() { - return true; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.IEditorInput#getImageDescriptor() - */ - public ImageDescriptor getImageDescriptor() { - return null; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.IEditorInput#getName() - */ - public String getName() { - return "Task #" + id; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.IEditorInput#getPersistable() - */ - public IPersistableElement getPersistable() { - return null; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.IEditorInput#getToolTipText() - */ - public String getToolTipText() { - return label; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) - */ - public Object getAdapter(Class adapter) { - return null; - } - - /** - * @return Returns the task. - */ - public ITask getTask() { - return task; - } - - /** - * @return Returns the id. - */ - public String getId() { - return id; - } - - /** - * @return Returns the label. - */ - public String getLabel() { - label = truncateDescription(task.getDescription()); - return label; - } - - @Override - public int hashCode() { - final int PRIME = 31; - int result = 1; - result = PRIME * result + ((task == null) ? 0 : task.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - final TaskEditorInput other = (TaskEditorInput) obj; - if (task == null) { - if (other.task != null) - return false; - } else if (!task.equals(other.task)) - return false; - return true; - } - - public boolean isNewTask() { - return newTask; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorUrlHyperlinkDetector.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorUrlHyperlinkDetector.java deleted file mode 100644 index acd01d3c7..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorUrlHyperlinkDetector.java +++ /dev/null @@ -1,112 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.editors; - -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jface.text.Region; -import org.eclipse.jface.text.hyperlink.IHyperlink; -import org.eclipse.jface.text.hyperlink.IHyperlinkDetector; -import org.eclipse.jface.text.hyperlink.URLHyperlink; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; - -/** - * @author Rob Elves - */ -public class TaskEditorUrlHyperlinkDetector implements IHyperlinkDetector { - - // URL BNF: http://www.foad.org/~abigail/Perl/url2.html - // Source: - // http://www.truerwords.net/articles/ut/urlactivation.html#expressions - // Original pattern: (^|[ - // \\t\\r\\n])((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero|aim|webcal):(([A-Za-z0-9$_.+!*(),;/?:@&~=-])|%[A-Fa-f0-9]{2}){2,}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*(),;/?:@&~=%-]*))?([A-Za-z0-9$_+!*();/?:~-])) - private static final Pattern urlPattern = Pattern - .compile( - "((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero|aim|webcal):(([A-Za-z0-9$_.+!*,;/?:@&~=-])|%[A-Fa-f0-9]{2}){2,}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*,;/?:@&~=%-]*))?([A-Za-z0-9$_+!*;/?:~-]))", - Pattern.CASE_INSENSITIVE); - - public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boolean canShowMultipleHyperlinks) { - - if (region == null || textViewer == null) - return null; - - IDocument document = textViewer.getDocument(); - - List<IHyperlink> hyperlinksFound = new ArrayList<IHyperlink>(); - - int offset = region.getOffset(); - - if (document == null) - return null; - - IRegion lineInfo; - String line; - try { - lineInfo = document.getLineInformationOfOffset(offset); - line = document.get(lineInfo.getOffset(), lineInfo.getLength()); - } catch (BadLocationException ex) { - return null; - } - - int offsetInLine = offset - lineInfo.getOffset(); - - Matcher m = urlPattern.matcher(line); - - while (m.find()) { - if (offsetInLine >= m.start() && offsetInLine <= m.end()) { - IHyperlink link = extractHyperlink(lineInfo.getOffset(), m); - if (link != null) - hyperlinksFound.add(link); - } - } - - if (hyperlinksFound.size() > 0) { - return hyperlinksFound.toArray(new IHyperlink[hyperlinksFound.size()]); - } - - return null; - - } - - private TaskEditorUrlHyperlink extractHyperlink(int lineOffset, Matcher m) { - - int start = m.start(); - int end = m.end(); - - if (end == -1) - end = m.group().length(); - - start += lineOffset; - end += lineOffset; - - IRegion sregion = new Region(start, end - start); - return new TaskEditorUrlHyperlink(sregion, m.group()); - } - - static class TaskEditorUrlHyperlink extends URLHyperlink { - - public TaskEditorUrlHyperlink(IRegion region, String urlString) { - super(region, urlString); - } - - public void open() { - // TODO: if url is to a repository task, open task instead of url - TaskUiUtil.openUrl(getURLString()); - } - - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskFormPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskFormPage.java deleted file mode 100644 index ad06077d3..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskFormPage.java +++ /dev/null @@ -1,675 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.editors; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.eclipse.core.resources.IMarker; -import org.eclipse.jface.text.DefaultInformationControl; -import org.eclipse.jface.text.Document; -import org.eclipse.jface.text.IInformationControl; -import org.eclipse.jface.text.IInformationControlCreator; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.ITextHover; -import org.eclipse.jface.text.ITextListener; -import org.eclipse.jface.text.ITextOperationTarget; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jface.text.Position; -import org.eclipse.jface.text.TextEvent; -import org.eclipse.jface.text.TextViewer; -import org.eclipse.jface.text.source.Annotation; -import org.eclipse.jface.text.source.AnnotationModel; -import org.eclipse.jface.text.source.AnnotationPainter; -import org.eclipse.jface.text.source.AnnotationRulerColumn; -import org.eclipse.jface.text.source.CompositeRuler; -import org.eclipse.jface.text.source.IAnnotationAccess; -import org.eclipse.jface.text.source.IAnnotationAccessExtension; -import org.eclipse.jface.text.source.IAnnotationHover; -import org.eclipse.jface.text.source.ISharedTextColors; -import org.eclipse.jface.text.source.ISourceViewer; -import org.eclipse.jface.text.source.ImageUtilities; -import org.eclipse.jface.text.source.OverviewRuler; -import org.eclipse.mylar.internal.tasks.ui.TaskListColorsAndFonts; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.StyledText; -import org.eclipse.swt.events.FocusEvent; -import org.eclipse.swt.events.FocusListener; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.RGB; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.widgets.Canvas; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.actions.ActionFactory; -import org.eclipse.ui.forms.IManagedForm; -import org.eclipse.ui.forms.editor.FormEditor; -import org.eclipse.ui.forms.editor.FormPage; -import org.eclipse.ui.themes.IThemeManager; - -/** - * @author Rob Elves - * @ref: PDEFormPage.class ref: - * @ref: http://dev.eclipse.org/newslists/news.eclipse.platform.swt/msg19676.html - */ -public class TaskFormPage extends FormPage { - - // public static final Image ERROR_IMAGE = new Image(Display.getDefault(), - // "location"); - - protected boolean isDirty; - - protected TaskEditorActionContributor actionContributor; - - protected List<TextViewer> textViewers = new ArrayList<TextViewer>(); - - private void addTextViewer(TextViewer viewer) { - textViewers.add(viewer); - } - - public TaskFormPage(FormEditor editor, String id, String title) { - super(editor, id, title); - } - - /* GLOBAL ACTIONS (CUT/COPY/PASTE/ etc) */ - - public boolean canDoAction(String actionId) { - Control focusControl = getFocusControl(); - if (focusControl instanceof StyledText) { - StyledText text = (StyledText) focusControl; - for (TextViewer viewer : textViewers) { - if (viewer.getTextWidget() == text) { - return canDoGlobalAction(actionId, viewer); - } - } - } else { - if (actionId.equals(ActionFactory.UNDO.getId()) || actionId.equals(ActionFactory.REDO.getId())) { - return false; - } else { - return true; - } - } - // else if (focusControl instanceof Text) { - // - // Text textControl = (Text) focusControl; - // if (actionId.equals(ActionFactory.CUT.getId())) { - // return textControl.getSelectionText().length() > 0; - // } - // if (actionId.equals(ActionFactory.COPY.getId())) { - // return textControl.getSelectionText().length() > 0; - // } - // if (actionId.equals(ActionFactory.PASTE.getId())) { - // return true; - // } - // if (actionId.equals(ActionFactory.SELECT_ALL.getId())) { - // return textControl.getText().length() > 0; - // } - // if (actionId.equals(ActionFactory.DELETE.getId())) { - // return textControl.getSelectionText().length() > 0; - // } - // } - return false; - } - - public void doAction(String actionId) { - Control focusControl = getFocusControl(); - if (focusControl == null) - return; - if (canPerformDirectly(actionId, focusControl)) { - return; - } - if (focusControl instanceof StyledText) { - StyledText text = (StyledText) focusControl; - for (TextViewer viewer : textViewers) { - if (viewer.getTextWidget() == text) { - doGlobalAction(actionId, viewer); - return; - } - } - } - } - - protected boolean canPerformDirectly(String id, Control control) { - if (control instanceof Text) { - Text text = (Text) control; - if (id.equals(ActionFactory.CUT.getId())) { - text.cut(); - return true; - } - if (id.equals(ActionFactory.COPY.getId())) { - text.copy(); - return true; - } - if (id.equals(ActionFactory.PASTE.getId())) { - text.paste(); - return true; - } - if (id.equals(ActionFactory.SELECT_ALL.getId())) { - text.selectAll(); - return true; - } - if (id.equals(ActionFactory.DELETE.getId())) { - int count = text.getSelectionCount(); - if (count == 0) { - int caretPos = text.getCaretPosition(); - text.setSelection(caretPos, caretPos + 1); - } - text.insert(""); //$NON-NLS-1$ - return true; - } - } - return false; - } - - protected Control getFocusControl() { - IManagedForm form = getManagedForm(); - if (form == null) - return null; - Control control = form.getForm(); - if (control == null || control.isDisposed()) - return null; - Display display = control.getDisplay(); - Control focusControl = display.getFocusControl(); - if (focusControl == null || focusControl.isDisposed()) - return null; - return focusControl; - } - - private boolean doGlobalAction(String actionId, TextViewer textViewer) { - if (actionId.equals(ActionFactory.CUT.getId())) { - textViewer.doOperation(ITextOperationTarget.CUT); - return true; - } else if (actionId.equals(ActionFactory.COPY.getId())) { - textViewer.doOperation(ITextOperationTarget.COPY); - return true; - } else if (actionId.equals(ActionFactory.PASTE.getId())) { - textViewer.doOperation(ITextOperationTarget.PASTE); - return true; - } else if (actionId.equals(ActionFactory.DELETE.getId())) { - textViewer.doOperation(ITextOperationTarget.DELETE); - return true; - } else if (actionId.equals(ActionFactory.UNDO.getId())) { - textViewer.doOperation(ITextOperationTarget.UNDO); - return true; - } else if (actionId.equals(ActionFactory.REDO.getId())) { - textViewer.doOperation(ITextOperationTarget.REDO); - return true; - } else if (actionId.equals(ActionFactory.SELECT_ALL.getId())) { - textViewer.doOperation(ITextOperationTarget.SELECT_ALL); - return true; - } - return false; - } - - private boolean canDoGlobalAction(String actionId, TextViewer textViewer) { - if (actionId.equals(ActionFactory.CUT.getId())) { - return textViewer.canDoOperation(ITextOperationTarget.CUT); - } else if (actionId.equals(ActionFactory.COPY.getId())) { - return textViewer.canDoOperation(ITextOperationTarget.COPY); - } else if (actionId.equals(ActionFactory.PASTE.getId())) { - return textViewer.canDoOperation(ITextOperationTarget.PASTE); - } else if (actionId.equals(ActionFactory.DELETE.getId())) { - return textViewer.canDoOperation(ITextOperationTarget.DELETE); - } else if (actionId.equals(ActionFactory.UNDO.getId())) { - return textViewer.canDoOperation(ITextOperationTarget.UNDO); - } else if (actionId.equals(ActionFactory.REDO.getId())) { - return textViewer.canDoOperation(ITextOperationTarget.REDO); - } else if (actionId.equals(ActionFactory.SELECT_ALL.getId())) { - return textViewer.canDoOperation(ITextOperationTarget.SELECT_ALL); - } - return false; - } - - // protected Text addTextBox(Composite composite, String text, int style) { - // if (actionContributor == null) { - // actionContributor = ((MylarTaskEditor) getEditor()).getContributor(); - // } - // - // final Text textBox = - // this.getManagedForm().getToolkit().createText(composite, text); - // textBox.addFocusListener(new FocusListener() { - // - // public void focusGained(FocusEvent e) { - // - // // - // actionContributor.registerGlobalHandlers(getEditorSite().getActionBars()); - // - // actionContributor.updateSelectableActions(null); - // - // } - // - // public void focusLost(FocusEvent e) { - // textBox.setSelection(0, 0); - // // - // actionContributor.unregisterGlobalHandlers(getEditorSite().getActionBars()); - // - // } - // }); - // - // textBox.addKeyListener(new KeyListener() { - // - // public void keyPressed(KeyEvent e) { - // // ignore - // - // } - // - // public void keyReleased(KeyEvent e) { - // actionContributor.updateSelectableActions(null); - // } - // }); - // return textBox; - // } - - /** - * Text viewer gennerally used for displaying non-editable text. No - * annotation model or spell checking support. Supports cut/copy/paste/etc.. - */ - protected TextViewer addTextViewer(TaskRepository repository, Composite composite, String text, int style) { - - if (actionContributor == null) { - actionContributor = ((MylarTaskEditor) getEditor()).getContributor(); - } - - final RepositoryTextViewer commentViewer = new RepositoryTextViewer(repository, composite, style); - - // NOTE: Configuration must be applied before the document is set in - // order for - // Hyperlink colouring to work. (Presenter needs document object up - // front) - RepositoryViewerConfig repositoryViewerConfig = new RepositoryViewerConfig(false); - commentViewer.configure(repositoryViewerConfig); - - IThemeManager themeManager = getSite().getWorkbenchWindow().getWorkbench().getThemeManager(); - - commentViewer.getTextWidget().setFont( - themeManager.getCurrentTheme().getFontRegistry().get(TaskListColorsAndFonts.TASK_EDITOR_FONT)); - - commentViewer.addSelectionChangedListener(actionContributor); - - commentViewer.getTextWidget().addFocusListener(new FocusListener() { - - public void focusGained(FocusEvent e) { - - actionContributor.updateSelectableActions(commentViewer.getSelection()); - - } - - public void focusLost(FocusEvent e) { - commentViewer.setSelectedRange(0, 0); - actionContributor.forceActionsEnabled(); - } - }); - - commentViewer.addTextListener(new ITextListener() { - public void textChanged(TextEvent event) { - actionContributor.updateSelectableActions(commentViewer.getSelection()); - } - }); - - commentViewer.setEditable(false); - commentViewer.getTextWidget().setMenu(getManagedForm().getForm().getMenu()); - Document document = new Document(text); - commentViewer.setDocument(document); - - addTextViewer(commentViewer); - return commentViewer; - } - - /** - * For viewing and editing text. Spell checking w/ annotations supported One - * or two max per editor, any more and the spell checker will bring the - * editor to a grinding halt. - */ - protected TextViewer addTextEditor(TaskRepository repository, Composite composite, String text, boolean spellCheck, - int style) { - - if (actionContributor == null) { - actionContributor = ((MylarTaskEditor) getEditor()).getContributor(); - } - - CompositeRuler fCompositeRuler = null; - OverviewRuler fOverviewRuler = null; - IAnnotationAccess fAnnotationAccess = null; - AnnotationRulerColumn annotationRuler = null; - - AnnotationModel fAnnotationModel = null; - - if (true) { - fAnnotationModel = new AnnotationModel(); - fAnnotationAccess = new AnnotationMarkerAccess(); - - fCompositeRuler = new CompositeRuler(); - fOverviewRuler = new OverviewRuler(fAnnotationAccess, 12, new SharedTextColors()); - annotationRuler = new AnnotationRulerColumn(fAnnotationModel, 16, fAnnotationAccess); - fCompositeRuler.setModel(fAnnotationModel); - fOverviewRuler.setModel(fAnnotationModel); - - // annotation ruler is decorating our composite ruler - fCompositeRuler.addDecorator(0, annotationRuler); - - // what types are show on the different rulers - annotationRuler.addAnnotationType(ErrorAnnotation.ERROR_TYPE); - fOverviewRuler.addAnnotationType(ErrorAnnotation.ERROR_TYPE); - - fOverviewRuler.addHeaderAnnotationType(ErrorAnnotation.ERROR_TYPE); - fOverviewRuler.setAnnotationTypeLayer(ErrorAnnotation.ERROR_TYPE, 3); - - fOverviewRuler.setAnnotationTypeColor(ErrorAnnotation.ERROR_TYPE, - TaskListColorsAndFonts.COLOR_SPELLING_ERROR); - - } - final RepositoryTextViewer commentViewer = new RepositoryTextViewer(fCompositeRuler, fOverviewRuler, - repository, composite, style); - commentViewer.showAnnotations(false); - commentViewer.showAnnotationsOverview(false); - - // to paint the annotations - final AnnotationPainter ap = new AnnotationPainter(commentViewer, fAnnotationAccess); - ap.addAnnotationType(ErrorAnnotation.ERROR_TYPE); - ap.setAnnotationTypeColor(ErrorAnnotation.ERROR_TYPE, TaskListColorsAndFonts.COLOR_SPELLING_ERROR); - - // this will draw the squigglies under the text - commentViewer.addPainter(ap); - - IThemeManager themeManager = getSite().getWorkbenchWindow().getWorkbench().getThemeManager(); - - commentViewer.getTextWidget().setFont( - themeManager.getCurrentTheme().getFontRegistry().get(TaskListColorsAndFonts.TASK_EDITOR_FONT)); - - commentViewer.addSelectionChangedListener(actionContributor); - - commentViewer.getTextWidget().addFocusListener(new FocusListener() { - - public void focusGained(FocusEvent e) { - - actionContributor.updateSelectableActions(commentViewer.getSelection()); - - } - - public void focusLost(FocusEvent e) { - commentViewer.setSelectedRange(0, 0); - actionContributor.forceActionsEnabled(); - } - }); - - commentViewer.addTextListener(new ITextListener() { - public void textChanged(TextEvent event) { - actionContributor.updateSelectableActions(commentViewer.getSelection()); - } - }); - - commentViewer.setEditable(false); - commentViewer.getTextWidget().setMenu(getManagedForm().getForm().getMenu()); - Document document = new Document(text); - - // NOTE: Configuration must be applied before the document is set in - // order for - // Hyperlink colouring to work. (Presenter needs document object up - // front) - RepositoryViewerConfig repositoryViewerConfig = new RepositoryViewerConfig(spellCheck); - repositoryViewerConfig.setAnnotationModel(fAnnotationModel, document); - commentViewer.configure(repositoryViewerConfig); - - commentViewer.setDocument(document, fAnnotationModel); - - // !DND! hover manager that shows text when we hover - // AnnotationBarHoverManager fAnnotationHoverManager = new - // AnnotationBarHoverManager(fCompositeRuler, - // commentViewer, new AnnotationHover(fAnnotationModel), new - // AnnotationConfiguration()); - // fAnnotationHoverManager.install(annotationRuler.getControl()); - - // !DND! Sample debugging code - // document.set("Here's some texst so that we have somewhere to show an - // error"); - // - // // // add an annotation - // ErrorAnnotation errorAnnotation = new ErrorAnnotation(1, ""); - // // lets underline the word "texst" - // fAnnotationModel.addAnnotation(errorAnnotation, new Position(12, 5)); - - // CoreSpellingProblem iProblem = new CoreSpellingProblem(12, 5, 1, - // "problem message", "theword", false, false, - // document, "task editor");// editorInput.getName() - // - // fAnnotationModel.addAnnotation(new ProblemAnnotation(iProblem, null), - // new Position(12, 5)); - - addTextViewer(commentViewer); - return commentViewer; - } - - @Override - public boolean isDirty() { - return isDirty; - } - - public void markDirty(boolean dirty) { - isDirty = dirty; - getManagedForm().dirtyStateChanged(); - return; - } - - static class AnnotationMarkerAccess implements IAnnotationAccess, IAnnotationAccessExtension { - public Object getType(Annotation annotation) { - return annotation.getType(); - } - - public boolean isMultiLine(Annotation annotation) { - return true; - } - - public boolean isTemporary(Annotation annotation) { - return !annotation.isPersistent(); - } - - public String getTypeLabel(Annotation annotation) { - if (annotation instanceof ErrorAnnotation) - return "Errors"; - - return null; - } - - public int getLayer(Annotation annotation) { - if (annotation instanceof ErrorAnnotation) - return ((ErrorAnnotation) annotation).getLayer(); - - return 0; - } - - public void paint(Annotation annotation, GC gc, Canvas canvas, Rectangle bounds) { - ImageUtilities - .drawImage(((ErrorAnnotation) annotation).getImage(), gc, canvas, bounds, SWT.CENTER, SWT.TOP); - } - - public boolean isPaintable(Annotation annotation) { - if (annotation instanceof ErrorAnnotation) - return ((ErrorAnnotation) annotation).getImage() != null; - - return false; - } - - public boolean isSubtype(Object annotationType, Object potentialSupertype) { - if (annotationType.equals(potentialSupertype)) - return true; - - return false; - - } - - public Object[] getSupertypes(Object annotationType) { - return new Object[0]; - } - } - - static class AnnotationHover implements IAnnotationHover, ITextHover { - - AnnotationModel fAnnotationModel = null; - - public AnnotationHover(AnnotationModel model) { - this.fAnnotationModel = model; - } - - public String getHoverInfo(ISourceViewer sourceViewer, int lineNumber) { - Iterator ite = fAnnotationModel.getAnnotationIterator(); - - ArrayList<String> all = new ArrayList<String>(); - - while (ite.hasNext()) { - Annotation a = (Annotation) ite.next(); - if (a instanceof ErrorAnnotation) { - all.add(((ErrorAnnotation) a).getText()); - } - } - - StringBuffer total = new StringBuffer(); - for (int x = 0; x < all.size(); x++) { - String str = (String) all.get(x); - total.append(" " + str + (x == (all.size() - 1) ? "" : "\n")); - } - - return total.toString(); - } - - public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) { - return null; - } - - public IRegion getHoverRegion(ITextViewer textViewer, int offset) { - return null; - } - } - - static class ErrorAnnotation extends Annotation { - - public static String ERROR_TYPE = "spelling.error"; - - // ProblemAnnotation.SPELLING_ANNOTATION_TYPE; - - private IMarker marker; - - private String text; - - private int line; - - private Position position; - - public ErrorAnnotation(IMarker marker) { - this.marker = marker; - } - - public ErrorAnnotation(int line, String text) { - super(ERROR_TYPE, true, null); - this.marker = null; - this.line = line; - this.text = text; - } - - public IMarker getMarker() { - return marker; - } - - public int getLine() { - return line; - } - - public String getText() { - return text; - } - - public Image getImage() { - return null;// ERROR_IMAGE; - } - - public int getLayer() { - return 3; - } - - public String getType() { - return ERROR_TYPE; - } - - public Position getPosition() { - return position; - } - - public void setPosition(Position position) { - this.position = position; - } - } - - // From org.eclipse.ui.internal.editors.text.SharedTextColors - static class SharedTextColors implements ISharedTextColors { - /** The display table. */ - private Map fDisplayTable; - - /** Creates an returns a shared color manager. */ - public SharedTextColors() { - super(); - } - - /* - * @see ISharedTextColors#getColor(RGB) - */ - @SuppressWarnings("unchecked") - public Color getColor(RGB rgb) { - if (rgb == null) - return null; - - if (fDisplayTable == null) - fDisplayTable = new HashMap(2); - - Display display = Display.getCurrent(); - - Map colorTable = (Map) fDisplayTable.get(display); - if (colorTable == null) { - colorTable = new HashMap(10); - fDisplayTable.put(display, colorTable); - } - - Color color = (Color) colorTable.get(rgb); - if (color == null) { - color = new Color(display, rgb); - colorTable.put(rgb, color); - } - - return color; - } - - /* - * @see ISharedTextColors#dispose() - */ - public void dispose() { - if (fDisplayTable != null) { - Iterator j = fDisplayTable.values().iterator(); - while (j.hasNext()) { - Iterator i = ((Map) j.next()).values().iterator(); - while (i.hasNext()) - ((Color) i.next()).dispose(); - } - } - } - } - - static class AnnotationConfiguration implements IInformationControlCreator { - public IInformationControl createInformationControl(Shell shell) { - return new DefaultInformationControl(shell); - } - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskPlanningEditor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskPlanningEditor.java deleted file mode 100644 index 37c789663..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskPlanningEditor.java +++ /dev/null @@ -1,1000 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.editors; - -import java.io.File; -import java.text.DateFormat; -import java.util.Calendar; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.layout.GridDataFactory; -import org.eclipse.jface.text.TextViewer; -import org.eclipse.mylar.context.core.ContextCorePlugin; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.context.core.util.DateUtil; -import org.eclipse.mylar.internal.tasks.ui.RetrieveTitleFromUrlJob; -import org.eclipse.mylar.internal.tasks.ui.actions.NewLocalTaskAction; -import org.eclipse.mylar.internal.tasks.ui.views.DatePicker; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; -import org.eclipse.mylar.monitor.MylarMonitorPlugin; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.AbstractTaskContainer; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskListChangeListener; -import org.eclipse.mylar.tasks.core.Task; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.Task.PriorityLevel; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.KeyEvent; -import org.eclipse.swt.events.KeyListener; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Spinner; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.forms.FormColors; -import org.eclipse.ui.forms.IManagedForm; -import org.eclipse.ui.forms.editor.FormEditor; -import org.eclipse.ui.forms.events.ExpansionEvent; -import org.eclipse.ui.forms.events.IExpansionListener; -import org.eclipse.ui.forms.widgets.ExpandableComposite; -import org.eclipse.ui.forms.widgets.FormToolkit; -import org.eclipse.ui.forms.widgets.ScrolledForm; -import org.eclipse.ui.forms.widgets.Section; - -/** - * @author Mik Kersten - * @author Ken Sueda (initial prototype) - * @author Rob Elves - */ -public class TaskPlanningEditor extends TaskFormPage { - - public static final String PLANNING_EDITOR_ID = "org.eclipse.mylar.editors.planning"; - - private static final String LABEL_SCHEDULE = "Scheduled for:"; - - private static final String DESCRIPTION_ESTIMATED = "Time that the task has been actively worked on.\n Inactivity timeout is " - + MylarMonitorPlugin.getDefault().getInactivityTimeout() + " seconds."; - - private static final String LABEL_INCOMPLETE = "Incomplete"; - - private static final String LABEL_COMPLETE = "Complete"; - - private static final String LABEL_PLAN = "Personal Planning"; - - private static final String NO_TIME_ELAPSED = "0 seconds"; - - private static final String LABEL_OVERVIEW = "Task Info"; - - private static final String LABEL_NOTES = "Notes"; - - private DatePicker datePicker; - - private ITask task; - - private Composite editorComposite; - - protected static final String CONTEXT_MENU_ID = "#MylarPlanningEditor"; - - private Button removeReminder; - - private Text pathText; - - private Text endDate; - - private ScrolledForm form; - - private Text description; - - private Text issueReportURL; - - private Combo priorityCombo; - - private Combo statusCombo; - - private TextViewer noteEditor; - - private Spinner estimated; - - private Button getDescButton; - - private MylarTaskEditor parentEditor = null; - - private ITaskListChangeListener TASK_LIST_LISTENER = new ITaskListChangeListener() { - - public void localInfoChanged(final ITask updateTask) { - if (updateTask != null && task != null - && updateTask.getHandleIdentifier().equals(task.getHandleIdentifier())) { - if (PlatformUI.getWorkbench() != null && !PlatformUI.getWorkbench().isClosing()) { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - - updateTaskData(updateTask); - } - - }); - } - } - } - - public void repositoryInfoChanged(ITask task) { - localInfoChanged(task); - } - - public void taskMoved(ITask task, AbstractTaskContainer fromContainer, AbstractTaskContainer toContainer) { - // ignore - } - - public void taskDeleted(ITask task) { - // ignore - } - - public void containerAdded(AbstractTaskContainer container) { - // ignore - } - - public void containerDeleted(AbstractTaskContainer container) { - // ignore - } - - public void taskAdded(ITask task) { - // ignore - } - - public void containerInfoChanged(AbstractTaskContainer container) { - // ignore - } - - }; - - private FormToolkit toolkit; - - public TaskPlanningEditor(FormEditor editor) { - super(editor, PLANNING_EDITOR_ID, "Planning"); - TasksUiPlugin.getTaskListManager().getTaskList().addChangeListener(TASK_LIST_LISTENER); - } - - /** public for testing */ - public void updateTaskData(final ITask updateTask) { - if (datePicker != null && !datePicker.isDisposed()) { - if (updateTask.getReminderDate() != null) { - Calendar cal = Calendar.getInstance(); - cal.setTime(updateTask.getReminderDate()); - datePicker.setDate(cal); - } else { - datePicker.setDate(null); - } - } - - if (description == null) - return; - if (!description.isDisposed()) { - if (!description.getText().equals(updateTask.getDescription())) { - boolean wasDirty = TaskPlanningEditor.this.isDirty; - description.setText(updateTask.getDescription()); - TaskPlanningEditor.this.markDirty(wasDirty); - } - if (parentEditor != null) { - parentEditor.changeTitle(); - } - if (form != null && updateTask != null) { - form.setText(updateTask.getDescription()); - } - } - - if (!priorityCombo.isDisposed()) { - PriorityLevel level = PriorityLevel.fromString(updateTask.getPriority()); - if (level != null) { - int prioritySelectionIndex = priorityCombo.indexOf(level.getDescription()); - priorityCombo.select(prioritySelectionIndex); - } - } - if (!statusCombo.isDisposed()) { - if (task.isCompleted()) { - statusCombo.select(0); - } else { - statusCombo.select(1); - } - } - if (!(updateTask instanceof AbstractRepositoryTask) && !endDate.isDisposed()) { - endDate.setText(getTaskDateString(updateTask)); - } - } - - - @Override - public void doSave(IProgressMonitor monitor) { - if (!(task instanceof AbstractRepositoryTask)) { - String label = description.getText(); - // task.setDescription(label); - TasksUiPlugin.getTaskListManager().getTaskList().renameTask((Task) task, label); - - // TODO: refactor mutation into TaskList? - task.setUrl(issueReportURL.getText()); - String priorityDescription = priorityCombo.getItem(priorityCombo.getSelectionIndex()); - PriorityLevel level = PriorityLevel.fromDescription(priorityDescription); - if (level != null) { - task.setPriority(level.toString()); - } - if (statusCombo.getSelectionIndex() == 0) { - task.setCompleted(true); - } else { - task.setCompleted(false); - } - } - - String note = noteEditor.getTextWidget().getText();// notes.getText(); - task.setNotes(note); - task.setEstimatedTimeHours(estimated.getSelection()); - if (datePicker != null && datePicker.getDate() != null) { - TasksUiPlugin.getTaskListManager().setReminder(task, datePicker.getDate().getTime()); - // task.setReminderDate(datePicker.getDate().getTime()); - } else { - // task.setReminderDate(null); - TasksUiPlugin.getTaskListManager().setReminder(task, null); - } - - // MylarTaskListPlugin.getTaskListManager().getTaskList().notifyLocalInfoChanged(task); - if (parentEditor != null) { - parentEditor.notifyTaskChanged(); - } - - // Method not implemented yet - // task.setStatus(statusCombo.getItem(statusCombo.getSelectionIndex())); - - // MylarTaskListPlugin.getTaskListManager().setStatus(task, - // statusCombo.getItem(statusCombo.getSelectionIndex())); - - // refreshTaskListView(task); - - markDirty(false); - } - - @Override - public void doSaveAs() { - // don't support saving as - } - - // @SuppressWarnings("deprecation") - // @Override - // public void init(IEditorSite site, IEditorInput input) { - // // if (!(input instanceof TaskEditorInput)) { - // // throw new PartInitException("Invalid Input: Must be TaskEditorInput"); - // // } - // setSite(site); - // setInput(input); - // editorInput = (TaskEditorInput) input; - // setPartName(editorInput.getLabel()); - // } - - @Override - public boolean isDirty() { - return isDirty; - } - - @Override - public boolean isSaveAsAllowed() { - return false; - } - - protected void createFormContent(IManagedForm managedForm) { - super.createFormContent(managedForm); - TaskEditorInput taskEditorInput = (TaskEditorInput) getEditorInput(); - - task = taskEditorInput.getTask(); - - form = managedForm.getForm(); - toolkit = managedForm.getToolkit(); - form.setText(task.getDescription()); - - editorComposite = form.getBody(); - editorComposite.setLayout(new GridLayout()); - editorComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); - // try { - if (!(task instanceof AbstractRepositoryTask)) { - createSummarySection(editorComposite); - } - createPlanningSection(editorComposite); - createNotesSection(editorComposite); - createResourcesSection(editorComposite); - // } catch (SWTException e) { - // MylarStatusHandler.log(e, "content failed"); - // } - if (description != null && NewLocalTaskAction.DESCRIPTION_DEFAULT.equals(description.getText())) { - description.setSelection(0); - description.setFocus(); - } - - // createContextMenu(); - - } - - // protected void createContextMenu() { - // - // contextMenuManager = new MenuManager(CONTEXT_MENU_ID); - // contextMenuManager.setRemoveAllWhenShown(true); - // contextMenuManager.addMenuListener(new IMenuListener() { - // public void menuAboutToShow(IMenuManager manager) { - // manager.add(cutAction); - // manager.add(copyAction); - // manager.add(pasteAction); - // // Clipboard clipboard = new Clipboard(comp.getDisplay()); - // // TextTransfer textTransfer = TextTransfer.getInstance(); - // // String textData = (String) - // // clipboard.getContents(textTransfer); - // // if (textData != null) { - // // pasteAction.setEnabled(true); - // // } else { - // // pasteAction.setEnabled(false); - // // } - // - // // if (currentSelectedText == null || - // currentSelectedText.getSelectionText().length() == 0) { - // // copyAction.setEnabled(false); - // // } else { - // // copyAction.setEnabled(true); - // // } - // // manager.add(revealAllAction); - // manager.add(new Separator()); - // manager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS)); - // } - // }); - // // getSite().registerContextMenu(CONTEXT_MENU_ID, contextMenuManager, - // // getSite().getSelectionProvider()); - // } - - // @Override - // public void createPartControl(Composite parent) { - // FormToolkit toolkit = new FormToolkit(parent.getDisplay()); - // form = toolkit.createScrolledForm(parent); - // form.setText(task.getDescription()); - // - // editorComposite = form.getBody(); - // editorComposite.setLayout(new GridLayout()); - // editorComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); - // createContent(editorComposite, toolkit); - // if (description != null && - // NewLocalTaskAction.DESCRIPTION_DEFAULT.equals(description.getText())) { - // description.setSelection(0); - // description.setFocus(); - // } - // } - - @Override - public void setFocus() { - form.setFocus(); - } - - public Control getControl() { - return form; - } - - // public void setTask(ITask task) throws Exception { - // if (task == null) - // throw new Exception("ITask object is null."); - // this.task = task; - // } - - // private Composite createContent(Composite parent, FormToolkit toolkit) { - // TaskEditorInput taskEditorInput = (TaskEditorInput) getEditorInput(); - // - // task = taskEditorInput.getTask(); - // if (task == null) { - // MessageDialog.openError(parent.getShell(), "No such task", "No task - // exists with this id"); - // return null; - // } - // - // try { - // if (!(task instanceof AbstractRepositoryTask)) { - // createSummarySection(parent, toolkit); - // } - // createPlanningSection(parent, toolkit); - // createNotesSection(parent, toolkit); - // // // createRelatedLinksSection(parent, toolkit); - // createResourcesSection(parent, toolkit); - // } catch (SWTException e) { - // MylarStatusHandler.log(e, "content failed"); - // } - // return null; - // } - - private void createSummarySection(Composite parent) { - Section section = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR | Section.TWISTIE); - section.setText(LABEL_OVERVIEW); - section.setExpanded(true); - // if (task instanceof AbstractRepositoryTask) { - // section.setDescription("To modify these fields use the repository - // editor."); - // } - - section.setLayout(new GridLayout()); - section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - section.addExpansionListener(new IExpansionListener() { - public void expansionStateChanging(ExpansionEvent e) { - form.reflow(true); - } - - public void expansionStateChanged(ExpansionEvent e) { - form.reflow(true); - } - }); - - Composite container = toolkit.createComposite(section); - section.setClient(container); - GridLayout compLayout = new GridLayout(); - compLayout.numColumns = 2; - container.setLayout(compLayout); - container.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - Label l = toolkit.createLabel(container, "Description:"); - l.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - description = toolkit.createText(container, task.getDescription(), SWT.NONE); - description.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); - description.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - toolkit.paintBordersFor(container); - - if (task instanceof AbstractRepositoryTask) { - description.setEnabled(false); - } else { - description.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - markDirty(true); - } - }); - } - - Label urlLabel = toolkit.createLabel(container, "Web Link:"); - urlLabel.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - - Composite urlComposite = toolkit.createComposite(container); - GridLayout urlLayout = new GridLayout(2, false); - urlLayout.marginWidth = 1; - urlComposite.setLayout(urlLayout); - GridData urlGridData = new GridData(GridData.FILL_HORIZONTAL); - urlComposite.setLayoutData(urlGridData); - - issueReportURL = toolkit.createText(urlComposite, task.getUrl(), SWT.NONE); - GridData gridLayout = new GridData(GridData.FILL_HORIZONTAL); - issueReportURL.setLayoutData(gridLayout); - - if (task instanceof AbstractRepositoryTask) { - issueReportURL.setEditable(false); - } else { - issueReportURL.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - markDirty(true); - } - }); - } - - getDescButton = toolkit.createButton(urlComposite, "Get Description", SWT.PUSH); - getDescButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); - toolkit.paintBordersFor(urlComposite); - setButtonStatus(); - - issueReportURL.addKeyListener(new KeyListener() { - public void keyPressed(KeyEvent e) { - setButtonStatus(); - } - - public void keyReleased(KeyEvent e) { - setButtonStatus(); - } - }); - - getDescButton.addSelectionListener(new SelectionListener() { - public void widgetSelected(SelectionEvent e) { - retrieveTaskDescription(issueReportURL.getText()); - } - - public void widgetDefaultSelected(SelectionEvent e) { - } - }); - - Label label = toolkit.createLabel(container, "Status:"); - label.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - - Composite statusComposite = toolkit.createComposite(container); - statusComposite.setLayout(new GridLayout(2, false)); - - priorityCombo = new Combo(statusComposite, SWT.READ_ONLY); - - // Populate the combo box with priority levels - for (String priorityLevel : TaskListView.PRIORITY_LEVEL_DESCRIPTIONS) { - priorityCombo.add(priorityLevel); - } - - PriorityLevel level = PriorityLevel.fromString(task.getPriority()); - if (level != null) { - int prioritySelectionIndex = priorityCombo.indexOf(level.getDescription()); - priorityCombo.select(prioritySelectionIndex); - } - - if (task instanceof AbstractRepositoryTask) { - priorityCombo.setEnabled(false); - } else { - priorityCombo.addSelectionListener(new SelectionListener() { - - public void widgetSelected(SelectionEvent e) { - TaskPlanningEditor.this.markDirty(true); - - } - - public void widgetDefaultSelected(SelectionEvent e) { - // do nothing - - } - }); - } - - statusCombo = new Combo(statusComposite, SWT.READ_ONLY); - - statusCombo.add(LABEL_COMPLETE); - statusCombo.add(LABEL_INCOMPLETE); - if (task.isCompleted()) { - statusCombo.select(0); - } else { - statusCombo.select(1); - } - if (task instanceof AbstractRepositoryTask) { - statusCombo.setEnabled(false); - } else { - statusCombo.addSelectionListener(new SelectionListener() { - - public void widgetSelected(SelectionEvent e) { - if (statusCombo.getSelectionIndex() == 0) { - task.setCompleted(true); - } else { - task.setCompleted(false); - } - TaskPlanningEditor.this.markDirty(true); - } - - public void widgetDefaultSelected(SelectionEvent e) { - // do nothing - - } - }); - } - // statusCombo.setEnabled(false); - - } - - /** - * Attempts to set the task pageTitle to the title from the specified url - */ - protected void retrieveTaskDescription(final String url) { - - try { - RetrieveTitleFromUrlJob job = new RetrieveTitleFromUrlJob(issueReportURL.getText()) { - - @Override - protected void setTitle(final String pageTitle) { - description.setText(pageTitle); - TaskPlanningEditor.this.markDirty(true); - } - - }; - job.schedule(); - - } catch (RuntimeException e) { - MylarStatusHandler.fail(e, "could not open task web page", false); - } - } - - /** - * Sets the Get Description button enabled or not depending on whether there - * is a URL specified - */ - protected void setButtonStatus() { - String url = issueReportURL.getText(); - - if (url.length() > 10 && (url.startsWith("http://") || url.startsWith("https://"))) { - // String defaultPrefix = - // ContextCorePlugin.getDefault().getPreferenceStore().getString( - // TaskListPreferenceConstants.DEFAULT_URL_PREFIX); - // if (url.equals(defaultPrefix)) { - // getDescButton.setEnabled(false); - // } else { - getDescButton.setEnabled(true); - // } - } else { - getDescButton.setEnabled(false); - } - } - - private void createPlanningSection(Composite parent) { - - Section section = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR | Section.TWISTIE); - section.setText(LABEL_PLAN); - section.setLayout(new GridLayout()); - section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - section.setExpanded(true); - section.addExpansionListener(new IExpansionListener() { - public void expansionStateChanging(ExpansionEvent e) { - form.reflow(true); - } - - public void expansionStateChanged(ExpansionEvent e) { - form.reflow(true); - } - }); - - Composite sectionClient = toolkit.createComposite(section); - section.setClient(sectionClient); - GridLayout layout = new GridLayout(); - layout.numColumns = 6; - layout.makeColumnsEqualWidth = false; - sectionClient.setLayout(layout); - GridData clientDataLayout = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); - sectionClient.setLayoutData(clientDataLayout); - - // Reminder - Label label = toolkit.createLabel(sectionClient, LABEL_SCHEDULE); - label.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - - datePicker = new DatePicker(sectionClient, SWT.NONE, DatePicker.LABEL_CHOOSE); - - Calendar calendar = Calendar.getInstance(); - if (task.getReminderDate() != null) { - calendar.setTime(task.getReminderDate()); - datePicker.setDate(calendar); - } - - datePicker.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE)); - datePicker.addPickerSelectionListener(new SelectionListener() { - public void widgetSelected(SelectionEvent arg0) { - task.setReminded(false); - TaskPlanningEditor.this.markDirty(true); - } - - public void widgetDefaultSelected(SelectionEvent arg0) { - // ignore - } - }); - datePicker.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); - - removeReminder = toolkit.createButton(sectionClient, "Clear", SWT.PUSH | SWT.CENTER); - removeReminder.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - datePicker.setDate(null); - task.setReminded(false); - TaskPlanningEditor.this.markDirty(true); - } - }); - - // 1 Blank column after Reminder clear button - Label dummy = toolkit.createLabel(sectionClient, ""); - GridData dummyLabelDataLayout = new GridData(GridData.HORIZONTAL_ALIGN_CENTER); - dummyLabelDataLayout.horizontalSpan = 1; - dummyLabelDataLayout.widthHint = 30; - dummy.setLayoutData(dummyLabelDataLayout); - - // Creation date - label = toolkit.createLabel(sectionClient, "Creation date:"); - label.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - - String creationDateString = ""; - try { - creationDateString = DateFormat.getDateInstance(DateFormat.LONG).format(task.getCreationDate()); - } catch (RuntimeException e) { - MylarStatusHandler.fail(e, "Could not format creation date", true); - } - - Text creationDate = toolkit.createText(sectionClient, creationDateString, SWT.NONE); - GridData creationDateDataLayout = new GridData(); - creationDateDataLayout.widthHint = 120; - creationDate.setLayoutData(creationDateDataLayout); - creationDate.setEditable(false); - creationDate.setEnabled(true); - - // Estimated time - - label = toolkit.createLabel(sectionClient, "Estimated time:"); - label.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - - estimated = new Spinner(sectionClient, SWT.NONE); - estimated.setSelection(task.getEstimateTimeHours()); - estimated.setDigits(0); - estimated.setMaximum(100); - estimated.setMinimum(0); - estimated.setIncrement(1); - estimated.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - TaskPlanningEditor.this.markDirty(true); - } - }); - - estimated.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); - GridData estimatedDataLayout = new GridData(); - estimatedDataLayout.widthHint = 110; - estimated.setLayoutData(estimatedDataLayout); - - label = toolkit.createLabel(sectionClient, "hours "); - label.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - - // 1 Blank column - Label blankLabel2 = toolkit.createLabel(sectionClient, ""); - GridData blankLabl2Layout = new GridData(GridData.HORIZONTAL_ALIGN_CENTER); - blankLabl2Layout.horizontalSpan = 1; - blankLabl2Layout.widthHint = 25; - blankLabel2.setLayoutData(blankLabl2Layout); - - // Completion date - label = toolkit.createLabel(sectionClient, "Completion date:"); - label.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - - String completionDateString = ""; - if (task.isCompleted()) { - completionDateString = getTaskDateString(task); - } - endDate = toolkit.createText(sectionClient, completionDateString, SWT.NONE); - GridData endDateDataLayout = new GridData(); - endDateDataLayout.widthHint = 120; - endDate.setLayoutData(endDateDataLayout); - - endDate.setEditable(false); - endDate.setEnabled(true); - toolkit.paintBordersFor(sectionClient); - - // Elapsed Time - - label = toolkit.createLabel(sectionClient, "Elapsed time:"); - label.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - label.setToolTipText(DESCRIPTION_ESTIMATED); - - Composite elapsedComposite = toolkit.createComposite(sectionClient); - GridLayout elapsedLayout = new GridLayout(); - elapsedLayout.numColumns = 2; - elapsedLayout.marginWidth = 1; - elapsedLayout.makeColumnsEqualWidth = false; - elapsedComposite.setLayout(elapsedLayout); - GridData elapsedCompositeGridData = new GridData(); - elapsedCompositeGridData.horizontalSpan = 5; - elapsedComposite.setLayoutData(elapsedCompositeGridData); - - String elapsedTimeString = NO_TIME_ELAPSED; - try { - elapsedTimeString = DateUtil.getFormattedDuration(TasksUiPlugin.getTaskListManager().getElapsedTime(task), true); - if (elapsedTimeString.equals("")) - elapsedTimeString = NO_TIME_ELAPSED; - } catch (RuntimeException e) { - MylarStatusHandler.fail(e, "Could not format elapsed time", true); - } - - final Text elapsedTimeText = toolkit.createText(elapsedComposite, elapsedTimeString, SWT.NONE); - GridData td = new GridData(GridData.FILL_HORIZONTAL); - td.widthHint = 110; - elapsedTimeText.setLayoutData(td); - elapsedTimeText.setEditable(false); - - // Refresh Button - Button timeRefresh = toolkit.createButton(elapsedComposite, "Refresh", SWT.PUSH | SWT.CENTER); - - timeRefresh.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - String elapsedTimeString = NO_TIME_ELAPSED; - try { - elapsedTimeString = DateUtil.getFormattedDuration(TasksUiPlugin.getTaskListManager().getElapsedTime(task), true); - if (elapsedTimeString.equals("")) { - elapsedTimeString = NO_TIME_ELAPSED; - } - - } catch (RuntimeException e1) { - MylarStatusHandler.fail(e1, "Could not format elapsed time", true); - } - elapsedTimeText.setText(elapsedTimeString); - } - }); - - toolkit.paintBordersFor(elapsedComposite); - } - - private void createNotesSection(Composite parent) { - Section section = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR); - section.setText(LABEL_NOTES); - section.setExpanded(true); - section.setLayout(new GridLayout()); - section.setLayoutData(new GridData(GridData.FILL_BOTH)); - section.addExpansionListener(new IExpansionListener() { - public void expansionStateChanging(ExpansionEvent e) { - form.reflow(true); - } - - public void expansionStateChanged(ExpansionEvent e) { - form.reflow(true); - } - }); - Composite container = toolkit.createComposite(section); - section.setClient(container); - container.setLayout(new GridLayout()); - container.setLayoutData(new GridData(GridData.FILL_BOTH)); - - TaskRepository repository = null; - if (task instanceof AbstractRepositoryTask) { - AbstractRepositoryTask repositoryTask = (AbstractRepositoryTask) task; - repository = TasksUiPlugin.getRepositoryManager().getRepository(repositoryTask.getRepositoryKind(), - repositoryTask.getRepositoryUrl()); - } - - noteEditor = addTextEditor(repository, container, task.getNotes(), true, SWT.FLAT | SWT.MULTI | SWT.WRAP - | SWT.V_SCROLL); - - noteEditor.getControl().setLayoutData(new GridData(GridData.FILL_BOTH)); - noteEditor.getControl().setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); - noteEditor.setEditable(true); - - noteEditor.getTextWidget().addModifyListener(new ModifyListener() { - - public void modifyText(ModifyEvent e) { - markDirty(true); - } - }); - - // commentViewer.addSelectionChangedListener(new - // ISelectionChangedListener() { - // - // public void selectionChanged(SelectionChangedEvent event) { - // getSite().getSelectionProvider().setSelection(commentViewer.getSelection()); - // - // }}); - - toolkit.paintBordersFor(container); - } - - private String getTaskDateString(ITask task) { - - if (task == null) - return ""; - if (task.getCompletionDate() == null) - return ""; - - String completionDateString = ""; - try { - completionDateString = DateFormat.getDateInstance(DateFormat.LONG).format(task.getCompletionDate()); - } catch (RuntimeException e) { - MylarStatusHandler.fail(e, "Could not format date", true); - return completionDateString; - } - return completionDateString; - } - - private void createResourcesSection(Composite parent) { - Section section = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR | Section.TWISTIE); - section.setText("Resources"); - section.setLayout(new GridLayout()); - section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - section.addExpansionListener(new IExpansionListener() { - public void expansionStateChanging(ExpansionEvent e) { - form.reflow(true); - } - - public void expansionStateChanged(ExpansionEvent e) { - form.reflow(true); - } - }); - - Composite container = toolkit.createComposite(section); - section.setClient(container); - GridLayout layout = new GridLayout(); - layout.numColumns = 2; - container.setLayout(layout); - container.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - Label l2 = toolkit.createLabel(container, "Task context file:"); - l2.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - File contextFile = ContextCorePlugin.getContextManager().getFileForContext(task.getHandleIdentifier()); - // String contextPath = - // ContextCorePlugin.getDefault().getDataDirectory() - // + '/' + task.getContextPath() + - // MylarContextManager.CONTEXT_FILE_EXTENSION; - if (contextFile != null) { - pathText = toolkit.createText(container, contextFile.getAbsolutePath(), SWT.NONE); - pathText.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); - GridDataFactory.fillDefaults().hint(400, SWT.DEFAULT).applyTo(pathText); - pathText.setEditable(false); - pathText.setEnabled(true); - } - toolkit.paintBordersFor(container); - - // browse = toolkit.createButton(container, "Change", SWT.PUSH | - // SWT.CENTER); - // if (task.isActive()) { - // browse.setEnabled(false); - // } else { - // browse.setEnabled(true); - // } - // browse.addSelectionListener(new SelectionAdapter() { - // @Override - // public void widgetSelected(SelectionEvent e) { - // - // if (task.isActive()) { - // MessageDialog.openInformation(Display.getDefault().getActiveShell(), - // "Task Message", - // "Task can not be active when changing taskscape"); - // } else { - // FileDialog dialog = new - // FileDialog(Display.getDefault().getActiveShell(), SWT.OPEN); - // String[] ext = { "*.xml" }; - // dialog.setFilterExtensions(ext); - // - // String mylarDir = ContextCorePlugin.getDefault().getDataDirectory() + - // "/"; - // mylarDir = mylarDir.replaceAll("\\\\", "/"); - // dialog.setFilterPath(mylarDir); - // - // String res = dialog.open(); - // if (res != null) { - // res = res.replaceAll("\\\\", "/"); - // pathText.setText("<MylarDir>/" + res + ".xml"); - // markDirty(true); - // } - // } - // } - // }); - // toolkit.createLabel(container, ""); - // l = toolkit.createLabel(container, "Go to Task List Preferences to - // change task context directory"); - // l.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - } - - public void setParentEditor(MylarTaskEditor parentEditor) { - this.parentEditor = parentEditor; - } - - @Override - public void dispose() { - TasksUiPlugin.getTaskListManager().getTaskList().removeChangeListener(TASK_LIST_LISTENER); - } - - @Override - public String toString() { - return "(info editor for task: " + task + ")"; - } - - /** for testing - should cause dirty state */ - public void setNotes(String notes) { - this.noteEditor.getTextWidget().setText(notes); - } - - /** for testing - should cause dirty state */ - public void setDescription(String desc) { - this.description.setText(desc); - } - - /** for testing */ - public String getDescription() { - return this.description.getText(); - } - - /** for testing */ - public String getFormTitle() { - return form.getText(); - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskSpellingReconcileStrategy.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskSpellingReconcileStrategy.java deleted file mode 100644 index 72aed3785..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskSpellingReconcileStrategy.java +++ /dev/null @@ -1,185 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.editors; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.content.IContentTypeManager; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.Position; -import org.eclipse.jface.text.Region; -import org.eclipse.jface.text.reconciler.DirtyRegion; -import org.eclipse.jface.text.reconciler.IReconcilerExtension; -import org.eclipse.jface.text.reconciler.IReconcilingStrategy; -import org.eclipse.jface.text.source.Annotation; -import org.eclipse.jface.text.source.IAnnotationModel; -import org.eclipse.mylar.internal.tasks.ui.editors.TaskFormPage.ErrorAnnotation; -import org.eclipse.ui.editors.text.EditorsUI; -import org.eclipse.ui.texteditor.spelling.ISpellingProblemCollector; -import org.eclipse.ui.texteditor.spelling.SpellingContext; -import org.eclipse.ui.texteditor.spelling.SpellingProblem; - -/** - * Adapted from - * org.eclipse.jdt.internal.ui.text.spelling.PropertiesSpellingReconcileStrategy - * - * @author Jeff Pound - * @author Rob Elves - */ -public class TaskSpellingReconcileStrategy implements IReconcilerExtension, IReconcilingStrategy { - - /** - * Spelling problem collector that forwards {@link SpellingProblem}s as - * {@link IProblem}s to the {@link org.eclipse.jdt.core.IProblemRequestor}. - */ - private class SpellingProblemCollector implements ISpellingProblemCollector { - - /** Annotation model */ - private IAnnotationModel fAnnotationModel; - - /** Annotations to add */ - private Map<ErrorAnnotation, Position> fAddAnnotations; - - /** - * Initializes this collector with the given annotation model. - * - * @param annotationModel - * the annotation model - */ - public SpellingProblemCollector(IAnnotationModel annotationModel) { - fAnnotationModel = annotationModel; - } - - /* - * @see org.eclipse.ui.texteditor.spelling.ISpellingProblemCollector#accept(org.eclipse.ui.texteditor.spelling.SpellingProblem) - */ - public void accept(SpellingProblem problem) { - try { - int line = fDocument.getLineOfOffset(problem.getOffset()) + 1; - - fAddAnnotations.put(new ErrorAnnotation(line, null), new Position(problem.getOffset(), problem - .getLength())); - - } catch (BadLocationException x) { - // drop this SpellingProblem - } - } - - /* - * @see org.eclipse.ui.texteditor.spelling.ISpellingProblemCollector#beginCollecting() - */ - public void beginCollecting() { - fAddAnnotations = new HashMap<ErrorAnnotation, Position>(); - } - - /* - * @see org.eclipse.ui.texteditor.spelling.ISpellingProblemCollector#endCollecting() - */ - public void endCollecting() { - - List<Annotation> removeAnnotations = new ArrayList<Annotation>(); - for (Iterator iter = fAnnotationModel.getAnnotationIterator(); iter.hasNext();) { - Annotation annotation = (Annotation) iter.next(); - if (ErrorAnnotation.ERROR_TYPE.equals(annotation.getType())) - removeAnnotations.add(annotation); - } - - for (Iterator iter = removeAnnotations.iterator(); iter.hasNext();) - fAnnotationModel.removeAnnotation((Annotation) iter.next()); - for (Iterator iter = fAddAnnotations.keySet().iterator(); iter.hasNext();) { - Annotation annotation = (Annotation) iter.next(); - fAnnotationModel.addAnnotation(annotation, (Position) fAddAnnotations.get(annotation)); - } - - fAddAnnotations = null; - } - } - - /** The id of the problem */ - public static final int SPELLING_PROBLEM_ID = 0x80000000; - - /** The document to operate on. */ - private IDocument fDocument; - - /** The progress monitor. */ - private IProgressMonitor fProgressMonitor; - - /** - * The spelling context containing the Java properties content type. - * <p> - * Since his reconcile strategy is for the Properties File editor which - * normally edits Java properties files we always use the Java properties - * file content type for performance reasons. - * </p> - * - * @since 3.2 - */ - private SpellingContext fSpellingContext; - - private IAnnotationModel annotationModel; - - public TaskSpellingReconcileStrategy() { - this.annotationModel = null; - fSpellingContext = new SpellingContext(); - fSpellingContext.setContentType(Platform.getContentTypeManager().getContentType(IContentTypeManager.CT_TEXT)); - } - - /* - * @see org.eclipse.jface.text.reconciler.IReconcilingStrategyExtension#initialReconcile() - */ - public void initialReconcile() { - reconcile(new Region(0, fDocument.getLength())); - } - - /* - * @see org.eclipse.jface.text.reconciler.IReconcilingStrategy#reconcile(org.eclipse.jface.text.reconciler.DirtyRegion,org.eclipse.jface.text.IRegion) - */ - public void reconcile(DirtyRegion dirtyRegion, IRegion subRegion) { - reconcile(subRegion); - } - - /* - * @see org.eclipse.jface.text.reconciler.IReconcilingStrategy#reconcile(org.eclipse.jface.text.IRegion) - */ - public void reconcile(IRegion region) { - TaskSpellingReconcileStrategy.SpellingProblemCollector collector = new SpellingProblemCollector(annotationModel); - EditorsUI.getSpellingService().check(fDocument, fSpellingContext, collector, fProgressMonitor); - } - - /* - * @see org.eclipse.jface.text.reconciler.IReconcilingStrategy#setDocument(org.eclipse.jface.text.IDocument) - */ - public void setDocument(IDocument document) { - fDocument = document; - } - - /* - * @see org.eclipse.jface.text.reconciler.IReconcilingStrategyExtension#setProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) - */ - public void setProgressMonitor(IProgressMonitor monitor) { - fProgressMonitor = monitor; - } - - public String getDocumentPartitioning() { - // ignore - return null; - } - - public void setAnnotationModel(IAnnotationModel model) { - annotationModel = model; - } -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/DateSelectionDialog.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/DateSelectionDialog.java deleted file mode 100644 index af1dcf605..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/DateSelectionDialog.java +++ /dev/null @@ -1,92 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.planner; - -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; - -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.mylar.internal.tasks.ui.views.DatePickerPanel; -import org.eclipse.mylar.internal.tasks.ui.views.DatePickerPanel.DateSelection; -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Shell; - -/** - * @author Ken Sueda - * @author Mik Kersten - * @author Rob Elves - */ -public class DateSelectionDialog extends Dialog { - - private Date reminderDate = null; - - private String title = "Date Selection"; - - private Calendar initialCalendar = GregorianCalendar.getInstance(); - - public DateSelectionDialog(Shell parentShell, String title) { - this(parentShell, GregorianCalendar.getInstance(), title); - } - - public DateSelectionDialog(Shell parentShell, Calendar initialDate, String title) { - super(parentShell); - if(title != null) { - this.title = title; - } - if(initialDate != null) { - this.initialCalendar.setTime(initialDate.getTime()); - } - reminderDate = initialCalendar.getTime(); - } - - @Override - protected Control createDialogArea(Composite parent) { - getShell().setText(title); - DatePickerPanel datePanel = new DatePickerPanel(parent, SWT.NULL, initialCalendar); - - datePanel.addSelectionChangedListener(new ISelectionChangedListener() { - - public void selectionChanged(SelectionChangedEvent event) { - if (!event.getSelection().isEmpty()) { - DateSelection dateSelection = (DateSelection) event.getSelection(); - reminderDate = dateSelection.getDate().getTime(); - } - } - }); - - return datePanel; - } - - @Override - protected void createButtonsForButtonBar(Composite parent) { - createButton(parent, IDialogConstants.CLIENT_ID + 1, "Clear", false); - super.createButtonsForButtonBar(parent); - } - - protected void buttonPressed(int buttonId) { - super.buttonPressed(buttonId); - if(buttonId == IDialogConstants.CLIENT_ID + 1) { - reminderDate = null; - okPressed(); - } - } - - public Date getDate() { - return reminderDate; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/InProgressTaskCollector.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/InProgressTaskCollector.java deleted file mode 100644 index 4438fd19a..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/InProgressTaskCollector.java +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui.planner; - -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.eclipse.mylar.context.core.IMylarContext; -import org.eclipse.mylar.context.core.InteractionEvent; -import org.eclipse.mylar.context.core.ContextCorePlugin; -import org.eclipse.mylar.tasks.core.ITask; - -/** - * Collects tasks that are not complete but have been worked on during the - * specified number of previous days. - * - * @author Wesley Coelho (Adapted from CompletedTaskCollector by Key Sueda) - * @author Mik Kersten - */ -public class InProgressTaskCollector implements ITaskCollector { - - private Map<String, ITask> inProgressTasks = new HashMap<String, ITask>(); - - private Date periodStartDate; - - protected static boolean hasActivitySince(ITask task, Date startDate) { - IMylarContext mylarContext = ContextCorePlugin.getContextManager().loadContext(task.getHandleIdentifier()); - if (mylarContext != null) { - List<InteractionEvent> events = mylarContext.getInteractionHistory(); - if (events.size() > 0) { - InteractionEvent latestEvent = events.get(events.size() - 1); - if (latestEvent.getDate().compareTo(startDate) > 0) { - return true; - } - } - } - return false; - } - - public InProgressTaskCollector(Date periodStartDate) { - this.periodStartDate = periodStartDate; - } - - public String getLabel() { - return "Tasks in Progress"; - } - - public void consumeTask(ITask task) { - if (!task.isCompleted() && hasActivitySince(task, periodStartDate) - && !inProgressTasks.containsKey(task.getHandleIdentifier())) { - inProgressTasks.put(task.getHandleIdentifier(), task); - } - } - - public Set<ITask> getTasks() { - Set<ITask> tasks = new HashSet<ITask>(); - tasks.addAll(inProgressTasks.values()); - return tasks; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/OpenTaskEditorAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/OpenTaskEditorAction.java deleted file mode 100644 index c7cf1cc66..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/OpenTaskEditorAction.java +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.planner; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.tasks.core.ITask; - -/** - * @author Mik Kersten - * @author Ken Sueda - * @author Rob Elves - */ -public class OpenTaskEditorAction extends Action { - - public static final String ID = "org.eclipse.mylar.taskplannereditor.actions.open"; - - private final TableViewer viewer; - - /** - * @param view - */ - public OpenTaskEditorAction(TableViewer view) { - this.viewer = view; - setText("Open"); - setToolTipText("Open Element"); - setId(ID); - } - - @Override - public void run() { - ISelection selection = viewer.getSelection(); - Object object = ((IStructuredSelection) selection).getFirstElement(); - if (object instanceof ITask) { - TaskUiUtil.openEditor((ITask)object, false); - } -// if (obj instanceof Task) { -// ((Task) obj).openTaskInEditor(false); -// } - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/ReminderCellEditor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/ReminderCellEditor.java deleted file mode 100644 index caf4b69ea..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/ReminderCellEditor.java +++ /dev/null @@ -1,95 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui.planner; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.Locale; - -import org.eclipse.jface.viewers.DialogCellEditor; -import org.eclipse.mylar.internal.tasks.ui.views.DatePicker; -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; - -/** - * @author Ken Sueda - * @author Mik Kersten - * @author Rob Elves - */ -public class ReminderCellEditor extends DialogCellEditor { - - private Date reminderDate; - - private DateSelectionDialog dialog; - - private String formatString = "dd-MMM-yyyy"; - - private SimpleDateFormat format = new SimpleDateFormat(formatString, Locale.ENGLISH); - - public ReminderCellEditor(Composite parent) { - super(parent, SWT.NONE); - } - - @Override - protected Object openDialogBox(Control cellEditorWindow) { - Calendar initialCalendar = null; - String value = (String) super.getValue(); - - if (value != null) { - try { - Date tempDate = format.parse((String) value); - if (tempDate != null) { - initialCalendar = GregorianCalendar.getInstance(); - initialCalendar.setTime(tempDate); - } - } catch (ParseException e) { - // ignore - } - } - Calendar newCalendar = GregorianCalendar.getInstance(); - if(initialCalendar != null) { - newCalendar.setTime(initialCalendar.getTime()); - } - - dialog = new DateSelectionDialog(cellEditorWindow.getShell(), newCalendar, DatePicker.TITLE_DIALOG); - int dialogResponse = dialog.open(); - - if(dialogResponse == DateSelectionDialog.CANCEL) { - if(initialCalendar != null) { - reminderDate = initialCalendar.getTime(); - } else { - reminderDate = null; - } - } else { - reminderDate = dialog.getDate(); - } - - String result = null; - if (reminderDate != null) { - result = format.format(reminderDate); - } - return result; - } - - public Date getReminderDate() { - return reminderDate; - } - - protected void doSetFocus() { - reminderDate = null; - super.doSetFocus(); - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskActicityWizardPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskActicityWizardPage.java deleted file mode 100644 index 2a00c9367..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskActicityWizardPage.java +++ /dev/null @@ -1,323 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.planner; - -import java.util.Calendar; -import java.util.Date; -import java.util.HashSet; -import java.util.Set; - -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.mylar.internal.tasks.ui.views.DatePicker; -import org.eclipse.mylar.internal.tasks.ui.views.TaskElementLabelProvider; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractTaskContainer; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.mylar.tasks.ui.TaskListManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Group; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.swt.widgets.TableItem; -import org.eclipse.swt.widgets.Text; - -/** - * @author Mik Kersten - * @author Ken Sueda (original prototype) - * @author Rob Elves (categories) - */ -public class TaskActicityWizardPage extends WizardPage { - - private static final int DEFAULT_DAYS = 1; - - private static final String TITLE = "Mylar Task Activity Report"; - - private static final String DESCRIPTION = "Summarizes task activity and assists planning future tasks."; - - public static final String ROOT_CATEGORY_HACK = "Root Tasks"; - - private long DAY = 24 * 3600 * 1000; - - protected String[] columnNames = new String[] { "", "Description" }; - - private Date reportStartDate = null; - - private Button daysRadioButton = null; - - private Button dateRadioButton = null; - - private Text numDays; - - private int numDaysToReport = 0; - - private Table filtersTable; - - private TaskElementLabelProvider labelProvider = new TaskElementLabelProvider(); - - public TaskActicityWizardPage() { - super(TITLE); - setTitle(TITLE); - setDescription(DESCRIPTION); - } - - public void createControl(Composite parent) { - Composite container = new Composite(parent, SWT.FILL); - GridLayout layout = new GridLayout(); - container.setLayout(layout); - layout.numColumns = 1; - - createReportPeriodGroup(container); - - Label spacer = new Label(container, SWT.NONE); - spacer.setText(" "); - - createCategorySelectionGroup(container); - - setControl(container); - numDays.setFocus(); - } - - private void createReportPeriodGroup(Composite parent) { - Group reportPeriodGroup = new Group(parent, SWT.NONE); - GridLayout layout = new GridLayout(); - layout.numColumns = 2; - reportPeriodGroup.setLayout(layout); - reportPeriodGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL)); - reportPeriodGroup.setText("Report Period"); - reportPeriodGroup.setFont(parent.getFont()); - - daysRadioButton = new Button(reportPeriodGroup, SWT.RADIO | SWT.LEFT | SWT.NO_FOCUS); - daysRadioButton.setText("Number of days prior: "); - daysRadioButton.setSelection(true); - - numDays = new Text(reportPeriodGroup, SWT.BORDER); - GridData gd = new GridData(); - gd.widthHint = 50; - numDays.setLayoutData(gd); - numDays.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - try { - numDaysToReport = Integer.parseInt(numDays.getText()); - setErrorMessage(null); - } catch (Exception ex) { - setErrorMessage("Must be integer"); - numDaysToReport = 0; - } - } - }); - - numDays.setText("" + DEFAULT_DAYS); - numDaysToReport = DEFAULT_DAYS; - - dateRadioButton = new Button(reportPeriodGroup, SWT.RADIO | SWT.LEFT | SWT.NO_FOCUS); - dateRadioButton.setText("Report start date: "); - - final DatePicker datePicker = new DatePicker(reportPeriodGroup, SWT.BORDER, "<start date>"); - datePicker.setEnabled(false); - datePicker.addPickerSelectionListener(new SelectionListener() { - public void widgetSelected(SelectionEvent arg0) { - if (datePicker.getDate() != null) { - reportStartDate = datePicker.getDate().getTime(); - } - } - - public void widgetDefaultSelected(SelectionEvent arg0) { - // ignore - } - }); - - SelectionListener radioListener = new SelectionAdapter() { - - public void widgetSelected(SelectionEvent e) { - numDays.setEnabled(daysRadioButton.getSelection()); - datePicker.setEnabled(dateRadioButton.getSelection()); - if (daysRadioButton.getSelection()) - numDays.setFocus(); - if (dateRadioButton.getSelection()) - datePicker.setFocus(); - } - - }; - - daysRadioButton.addSelectionListener(radioListener); - dateRadioButton.addSelectionListener(radioListener); - - } - - /** - * Selection of specific category to report on in the Task Planner - * - * @param composite - * container to add categories combo box to - */ - private void createCategorySelectionGroup(Composite composite) { - - Group categorySelectionGroup = new Group(composite, SWT.NONE); - GridLayout layout = new GridLayout(); - layout.numColumns = 1; - categorySelectionGroup.setLayout(layout); - categorySelectionGroup.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL)); - categorySelectionGroup.setText("Catagory Selection"); - categorySelectionGroup.setFont(composite.getFont()); - - createFilterTable(categorySelectionGroup, true); - TaskListManager manager = TasksUiPlugin.getTaskListManager(); - if (manager == null) { - filtersTable.setEnabled(false); - return; - } - - // TODO: Hack to allow selection of a 'root tasks' category - TableItem rootItem = new TableItem(filtersTable, SWT.NONE); - rootItem.setText(ROOT_CATEGORY_HACK); - rootItem.setData(ROOT_CATEGORY_HACK); - - // populate categories - for (AbstractTaskContainer category : manager.getTaskList().getTaskContainers()) { - TableItem item = new TableItem(filtersTable, SWT.NONE); - item.setImage(labelProvider.getImage(category)); - item.setText(category.getDescription()); - item.setData(category); - } - - // populate qeries - for (AbstractRepositoryQuery query : manager.getTaskList().getQueries()) { - TableItem item = new TableItem(filtersTable, SWT.NONE); - item.setImage(labelProvider.getImage(query)); - item.setText(query.getDescription()); - item.setData(query); - } - for (int i = 0; i < columnNames.length; i++) { - filtersTable.getColumn(i).pack(); - } - - createButtonsGroup(categorySelectionGroup); - - // default to all categories selected - setChecked(true); - } - - /** - * - * Creates the buttons for selecting all or none of the categories. - * - * @param parent - * parent composite - */ - private final void createButtonsGroup(Composite parent) { - - Font font = parent.getFont(); - new Label(parent, SWT.NONE); // Blank cell on left - - Composite buttonComposite = new Composite(parent, SWT.NONE); - buttonComposite.setFont(parent.getFont()); - - GridLayout layout = new GridLayout(); - layout.numColumns = 3; - layout.makeColumnsEqualWidth = true; - buttonComposite.setLayout(layout); - buttonComposite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL)); - - Button selectButton = new Button(buttonComposite, SWT.NONE); - selectButton.setText("Select All"); - - selectButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - setChecked(true); - } - }); - - selectButton.setFont(font); - setButtonLayoutData(selectButton); - - Button deselectButton = new Button(buttonComposite, SWT.NONE); - deselectButton.setText("Deselect All"); - - deselectButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - setChecked(false); - } - }); - - deselectButton.setFont(font); - setButtonLayoutData(deselectButton); - - } - - private void setChecked(boolean checked) { - for (TableItem item : filtersTable.getItems()) { - item.setChecked(checked); - } - } - - private void createFilterTable(Composite composite, boolean enabled) { - - Font font = composite.getFont(); - this.filtersTable = new Table(composite, SWT.BORDER | SWT.MULTI | SWT.CHECK | SWT.H_SCROLL | SWT.V_SCROLL); - this.filtersTable.setEnabled(enabled); - GridData data = new GridData(); - // Set heightHint with a small value so the list size will be defined by - // the space available in the dialog instead of resizing the dialog to - // fit all the items in the list. - data.heightHint = filtersTable.getItemHeight(); - data.verticalAlignment = GridData.FILL; - data.horizontalAlignment = GridData.FILL; - data.grabExcessHorizontalSpace = true; - data.grabExcessVerticalSpace = true; - this.filtersTable.setLayoutData(data); - this.filtersTable.setFont(font); - - for (int i = 0; i < columnNames.length; i++) { - TableColumn column = new TableColumn(filtersTable, SWT.NONE); - column.setText(columnNames[i]); - } - - } - - public Set<ITaskListElement> getSelectedFilters() { - Set<ITaskListElement> result = new HashSet<ITaskListElement>(); - TableItem[] items = filtersTable.getItems(); - for (TableItem item : items) { - if (item.getChecked() && item.getData() instanceof ITaskListElement) { - result.add((ITaskListElement)item.getData()); - } - } - return result; - } - - public Date getReportStartDate() { - if (dateRadioButton.getSelection() && reportStartDate != null) { - return reportStartDate; - } else { - long today = new Date().getTime(); - long lastDay = numDaysToReport * DAY; - - int offsetToday = Calendar.getInstance().get(Calendar.HOUR) * 60 * 60 * 1000 - + Calendar.getInstance().get(Calendar.MINUTE) * 60 * 1000 - + Calendar.getInstance().get(Calendar.SECOND) * 1000; - return new Date(today - offsetToday - lastDay); - } - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskActivityEditorInput.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskActivityEditorInput.java deleted file mode 100644 index 7f68e94e0..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskActivityEditorInput.java +++ /dev/null @@ -1,182 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.planner; - -import java.lang.reflect.InvocationTargetException; -import java.util.Date; -import java.util.HashSet; -import java.util.Set; - -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.mylar.tasks.core.TaskList; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IPersistableElement; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.progress.IProgressService; - -/** - * @author Ken Sueda - * @author Mik Kersten - */ -public class TaskActivityEditorInput implements IEditorInput { - - private static final String TASK_ACTIVITY_REPORT = "Task Activity Report"; - - private Set<ITask> completedTasks = new HashSet<ITask>(); - - private Set<ITask> inProgressTasks = new HashSet<ITask>(); - - private Set<ITask> plannedTasks = new HashSet<ITask>(); - - private TaskReportGenerator taskReportGenerator = null; - - // private int prevDaysToReport = -1; - - private Date reportStartDate = null; - - public TaskActivityEditorInput(Date reportStartDate, Set<ITaskListElement> chosenCategories, TaskList tlist) { - this.reportStartDate = reportStartDate; - taskReportGenerator = new TaskReportGenerator(tlist, chosenCategories); - - ITaskCollector completedTaskCollector = new CompletedTaskCollector(reportStartDate); - taskReportGenerator.addCollector(completedTaskCollector); - - ITaskCollector inProgressTaskCollector = new InProgressTaskCollector(reportStartDate); - taskReportGenerator.addCollector(inProgressTaskCollector); - - try { - IProgressService service = PlatformUI.getWorkbench().getProgressService(); - service.run(false, true, taskReportGenerator); - while (!taskReportGenerator.isFinished()) - Thread.sleep(500); - } catch (InvocationTargetException e) { - // operation was canceled - } catch (InterruptedException e) { - MylarStatusHandler.log(e, "Could not generate report"); - } - - completedTasks = completedTaskCollector.getTasks(); - inProgressTasks = inProgressTaskCollector.getTasks(); - - plannedTasks.addAll(TasksUiPlugin.getTaskListManager().getActivityNextWeek().getChildren()); - - plannedTasks.addAll(TasksUiPlugin.getTaskListManager().getActivityFuture().getChildren()); - - //plannedTasks = new HashSet<ITask>(); - } - - public boolean exists() { - return true; - } - - public ImageDescriptor getImageDescriptor() { - return null; - } - - public String getName() { - return TASK_ACTIVITY_REPORT; - } - - public IPersistableElement getPersistable() { - return null; - } - - public String getToolTipText() { - return "Task Planner"; - } - - public Object getAdapter(Class adapter) { - return null; - } - - public Set<ITask> getCompletedTasks() { - return completedTasks; - } - - public Set<ITask> getInProgressTasks() { - return inProgressTasks; - } - - public Set<ITask> getPlannedTasks() { - return plannedTasks; - } - - public long getTotalTimeSpentOnCompletedTasks() { - long duration = 0; - for (ITask t : completedTasks) { - duration += TasksUiPlugin.getTaskListManager().getElapsedTime(t); - } - return duration; - } - - public long getTotalTimeSpentOnInProgressTasks() { - long duration = 0; - for (ITask t : inProgressTasks) { - duration += TasksUiPlugin.getTaskListManager().getElapsedTime(t); - } - return duration; - } - - public TaskReportGenerator getReportGenerator() { - return taskReportGenerator; - } - - public boolean createdDuringReportPeriod(ITask task) { - Date creationDate = task.getCreationDate(); - if (creationDate != null) { - return creationDate.compareTo(reportStartDate) > 0; - } else { - return false; - } - } - - public Date getReportStartDate() { - return reportStartDate; - } - - public int getTotalTimeEstimated() { - int duration = 0; - for (ITask task : inProgressTasks) { - duration += task.getEstimateTimeHours(); - } - return duration; - } - - public void removeCompletedTask( ITask task) { - completedTasks.remove(task); - } - - public void removeInProgressTask(ITask task) { - inProgressTasks.remove(task); - } - - public void addPlannedTask(ITask task) { - plannedTasks.add(task); - } - - public void removePlannedTask(ITask task) { - plannedTasks.remove(task); - } - - public int getPlannedEstimate() { - int estimated = 0; - for (ITask task : plannedTasks) { - estimated += task.getEstimateTimeHours(); - } - return estimated; - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskActivityEditorPart.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskActivityEditorPart.java deleted file mode 100644 index 6664387e3..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskActivityEditorPart.java +++ /dev/null @@ -1,855 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.planner; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileWriter; -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Locale; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.action.IMenuListener; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.jface.action.Separator; -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.context.core.util.DateUtil; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.SashForm; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.FileDialog; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Menu; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorSite; -import org.eclipse.ui.IWorkbenchActionConstants; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.forms.FormColors; -import org.eclipse.ui.forms.widgets.ExpandableComposite; -import org.eclipse.ui.forms.widgets.FormToolkit; -import org.eclipse.ui.forms.widgets.ScrolledForm; -import org.eclipse.ui.forms.widgets.Section; -import org.eclipse.ui.forms.widgets.TableWrapLayout; -import org.eclipse.ui.part.EditorPart; - -/** - * - * Note: Some methods have been generalized to remove duplicate code but the - * design still isn't right (long parameter lists, inflexible table creation). - * Needs refactoring. (Planned tasks section is currently disabled but should - * also use the new common methods) - * - * @author Mik Kersten - * @author Ken Sueda (original prototype) - * @author Wesley Coelho (added tasks in progress section, refactored-out - * similar code) - * @author Mik Kersten (rewrite) - */ -public class TaskActivityEditorPart extends EditorPart { - - private static final String LABEL_PLANNED_ACTIVITY = "Planned Activity"; - - private static final String LABEL_DIALOG = "Summary"; - - private static final String LABEL_PAST_ACTIVITY = "Past Activity"; - - private TaskActivityEditorInput editorInput = null; - - private String[] activityColumnNames = new String[] { " ", " !", "Description", "Created", "Completed", "Elapsed", - "Estimated" }; - - private int[] activityColumnWidths = new int[] { 20, 30, 300, 90, 90, 70, 70 }; - - private int[] activitySortConstants = new int[] { TaskActivitySorter.ICON, TaskActivitySorter.PRIORITY, - TaskActivitySorter.DESCRIPTION, TaskActivitySorter.CREATION_DATE, TaskActivitySorter.COMPLETED_DATE, - TaskActivitySorter.DURATION, TaskActivitySorter.ESTIMATED }; - - private String[] planColumnNames = new String[] { " ", " !", "Description", "Elapsed", "Estimated", "Reminder" }; - - private int[] planSortConstants = new int[] { TaskPlanSorter.ICON, TaskPlanSorter.PRIORITY, - TaskPlanSorter.DESCRIPTION, TaskPlanSorter.DURATION, TaskPlanSorter.ESTIMATED, TaskPlanSorter.REMINDER }; - - private int[] planColumnWidths = new int[] { 20, 30, 340, 90, 90, 100 }; - - private static final String LABEL_ESTIMATED = "Total estimated: "; - - private static final String NO_TIME_ELAPSED = " "; - - private static final String BLANK_CELL = " "; - - private Label totalEstimatedHoursLabel; - - private Label numberCompleted; - - private Label totalTimeOnCompleted; - - private Label numberInProgress; - - private Label totalTimeOnIncomplete; - - private Label totalEstimatedTime; - - private Label totalTime; - - private TaskActivityContentProvider activityContentProvider; - - private PlannedTasksContentProvider planContentProvider; - - @Override - public void doSave(IProgressMonitor monitor) { - } - - @Override - public void doSaveAs() { - } - - @SuppressWarnings("deprecation") - @Override - public void init(IEditorSite site, IEditorInput input) throws PartInitException { - setSite(site); - setInput(input); - editorInput = (TaskActivityEditorInput) input; - setPartName(editorInput.getName()); - setTitleToolTip(editorInput.getToolTipText()); - } - - @Override - public boolean isDirty() { - return false; - } - - @Override - public boolean isSaveAsAllowed() { - return false; - } - - @Override - public void createPartControl(Composite parent) { - FormToolkit toolkit = new FormToolkit(parent.getDisplay()); - ScrolledForm sform = toolkit.createScrolledForm(parent); - Composite editorComposite = sform.getBody(); - - editorComposite.setLayout(new GridLayout()); - GridData gridData = new GridData(); - gridData.horizontalAlignment = GridData.FILL_BOTH; - gridData.grabExcessHorizontalSpace = true; - gridData.grabExcessVerticalSpace = true; - editorComposite.setLayoutData(gridData); - - createSummarySection(editorComposite, toolkit, editorInput.getReportStartDate()); - String label = LABEL_PAST_ACTIVITY; - - List<ITask> allTasks = new ArrayList<ITask>(); - allTasks.addAll(editorInput.getCompletedTasks()); - allTasks.addAll(editorInput.getInProgressTasks()); - - SashForm sashForm = new SashForm(editorComposite, SWT.VERTICAL); - - sashForm.setLayout(new GridLayout()); - sashForm.setLayoutData(new GridData(GridData.FILL_BOTH)); - - activityContentProvider = new TaskActivityContentProvider(editorInput); - - final TableViewer activityViewer = createTableSection(sashForm, toolkit, label, activityColumnNames, - activityColumnWidths, activitySortConstants); - activityViewer.setContentProvider(activityContentProvider); - activityViewer.setLabelProvider(new TaskPlannerLabelProvider()); - setSorters(activityColumnNames, activitySortConstants, activityViewer.getTable(), activityViewer, false); - activityViewer.setInput(editorInput); - - activityViewer.addSelectionChangedListener(new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent event) { - updateLabels(); - } - }); - - MenuManager activityContextMenuMgr = new MenuManager("#ActivityPlannerPopupMenu"); - activityContextMenuMgr.setRemoveAllWhenShown(true); - activityContextMenuMgr.addMenuListener(new IMenuListener() { - public void menuAboutToShow(IMenuManager manager) { - TaskActivityEditorPart.this.fillContextMenu(activityViewer, manager); - - } - }); - Menu menu = activityContextMenuMgr.createContextMenu(activityViewer.getControl()); - activityViewer.getControl().setMenu(menu); - getSite().registerContextMenu(activityContextMenuMgr, activityViewer); - - planContentProvider = new PlannedTasksContentProvider(editorInput); - final TableViewer planViewer = createTableSection(sashForm, toolkit, LABEL_PLANNED_ACTIVITY, planColumnNames, - planColumnWidths, planSortConstants); - planViewer.setContentProvider(planContentProvider); - planViewer.setLabelProvider(new TaskPlanLabelProvider()); - // createPlanCellEditorListener(planViewer.getTable(), planViewer); - // planViewer.setCellModifier(new PlannedTasksCellModifier(planViewer)); - // initDrop(planViewer, planContentProvider); - setSorters(planColumnNames, planSortConstants, planViewer.getTable(), planViewer, true); - planViewer.setInput(editorInput); - - // planViewer.addSelectionChangedListener(new - // ISelectionChangedListener() { - // public void selectionChanged(SelectionChangedEvent event) { - // updateLabels(); - // } - // }); - - // MenuManager planContextMenuMgr = new - // MenuManager("#PlanPlannerPopupMenu"); - // planContextMenuMgr.setRemoveAllWhenShown(true); - // planContextMenuMgr.addMenuListener(new IMenuListener() { - // public void menuAboutToShow(IMenuManager manager) { - // TaskActivityEditorPart.this.fillContextMenu(planViewer, manager); - // } - // }); - // Menu planMenu = - // planContextMenuMgr.createContextMenu(planViewer.getControl()); - // planViewer.getControl().setMenu(planMenu); - // getSite().registerContextMenu(planContextMenuMgr, planViewer); - - totalEstimatedHoursLabel = toolkit.createLabel(editorComposite, LABEL_ESTIMATED + "0 hours ", SWT.NULL); - createButtons(editorComposite, toolkit, planViewer, planContentProvider); - updateLabels(); - } - - private void fillContextMenu(TableViewer viewer, IMenuManager manager) { - if (!viewer.getSelection().isEmpty()) { - manager.add(new OpenTaskEditorAction(viewer)); - manager.add(new RemoveTaskAction(viewer)); - manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); - } else { - manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); - } - } - - @Override - public void setFocus() { - } - - private void createSummarySection(Composite parent, FormToolkit toolkit, Date startDate) { - Section summarySection = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR); - summarySection.setText(LABEL_DIALOG); - summarySection.setLayout(new GridLayout()); - summarySection.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - Composite summaryContainer = toolkit.createComposite(summarySection); - summarySection.setClient(summaryContainer); - TableWrapLayout layout = new TableWrapLayout(); - layout.numColumns = 2; - summaryContainer.setLayout(layout); - - String formatString = "yyyy-MM-dd, h:mm a"; - SimpleDateFormat format = new SimpleDateFormat(formatString, Locale.ENGLISH); - - if (startDate != null) { - String dateLabel = "Activity since " + format.format(startDate); - // DateFormat.getDateInstance(DateFormat.MEDIUM).format(reportStartDate) - Label startLabel = toolkit.createLabel(summaryContainer, dateLabel, SWT.NULL); - startLabel.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - toolkit.createLabel(summaryContainer, "", SWT.NULL); - } - - String numComplete = "Number completed: " + editorInput.getCompletedTasks().size(); - numberCompleted = toolkit.createLabel(summaryContainer, numComplete, SWT.NULL); - numberCompleted.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - - String totalCompletedTaskTime = "Total time on completed: " - + DateUtil.getFormattedDuration(editorInput.getTotalTimeSpentOnCompletedTasks(), false); - totalTimeOnCompleted = toolkit.createLabel(summaryContainer, totalCompletedTaskTime, SWT.NULL); - totalTimeOnCompleted.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - - String numInProgress = "Number in progress: " + editorInput.getInProgressTasks().size(); - numberInProgress = toolkit.createLabel(summaryContainer, numInProgress, SWT.NULL); - numberInProgress.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - - String totalInProgressTaskTime = "Total time on incomplete: " - + DateUtil.getFormattedDuration(editorInput.getTotalTimeSpentOnInProgressTasks(), false); - totalTimeOnIncomplete = toolkit.createLabel(summaryContainer, totalInProgressTaskTime, SWT.NULL); - totalTimeOnIncomplete.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - - String spacer = " "; - String totalEstimated = "Total estimated time: " + editorInput.getTotalTimeEstimated() + " hours" + spacer; - totalEstimatedTime = toolkit.createLabel(summaryContainer, totalEstimated, SWT.NULL); - totalEstimatedTime.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - - String grandTotalTime = "Total time: " + getTotalTime(); - totalTime = toolkit.createLabel(summaryContainer, grandTotalTime, SWT.NULL); - totalTime.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); - - } - - private void updateSummarySection() { - String numComplete = "Number completed: " + editorInput.getCompletedTasks().size(); - numberCompleted.setText(numComplete); - - String totalCompletedTaskTime = "Total time on completed: " - + DateUtil.getFormattedDuration(editorInput.getTotalTimeSpentOnCompletedTasks(), false); - totalTimeOnCompleted.setText(totalCompletedTaskTime); - - String numInProgress = "Number in progress: " + editorInput.getInProgressTasks().size(); - numberInProgress.setText(numInProgress); - - String totalInProgressTaskTime = "Total time on incomplete: " - + DateUtil.getFormattedDuration(editorInput.getTotalTimeSpentOnInProgressTasks(), false); - totalTimeOnIncomplete.setText(totalInProgressTaskTime); - - String spacer = " "; - String totalEstimated = "Total estimated time: " + editorInput.getTotalTimeEstimated() + " hours" + spacer; - totalEstimatedTime.setText(totalEstimated); - - String grandTotalTime = "Total time: " + getTotalTime(); - totalTime.setText(grandTotalTime); - - } - - // private void createPlanCellEditorListener(final Table planTable, final - // TableViewer planTableViewer) { - // CellEditor[] editors = new CellEditor[planColumnNames.length + 1]; - // final ComboBoxCellEditor estimateEditor = new - // ComboBoxCellEditor(planTable, TaskListManager.ESTIMATE_TIMES, - // SWT.READ_ONLY); - // final ReminderCellEditor reminderEditor = new - // ReminderCellEditor(planTable); - // editors[0] = null; // not used - // editors[1] = null;// not used - // editors[2] = null;// not used - // editors[3] = null;// not used - // editors[4] = estimateEditor; - // editors[5] = reminderEditor; - // reminderEditor.addListener(new ICellEditorListener() { - // public void applyEditorValue() { - // Object selection = ((IStructuredSelection) - // planTableViewer.getSelection()).getFirstElement(); - // if (selection instanceof ITask) { - // ((ITask) selection).setReminderDate(reminderEditor.getReminderDate()); - // planTableViewer.refresh(); - // } - // } - // - // public void cancelEditor() { - // } - // - // public void editorValueChanged(boolean oldValidState, boolean - // newValidState) { - // } - // - // }); - // estimateEditor.addListener(new ICellEditorListener() { - // public void applyEditorValue() { - // Object selection = ((IStructuredSelection) - // planTableViewer.getSelection()).getFirstElement(); - // if (selection instanceof ITask) { - // ITask task = (ITask) selection; - // int estimate = (Integer) estimateEditor.getValue(); - // if (estimate == -1) { - // estimate = 0; - // } - // task.setEstimatedTimeHours(estimate); - // updateLabels(); - // planTableViewer.refresh(); - // } - // } - // - // public void cancelEditor() { - // } - // - // public void editorValueChanged(boolean oldValidState, boolean - // newValidState) { - // } - // - // }); - // planTableViewer.setCellEditors(editors); - // } - - private String getTotalTime() { - return DateUtil.getFormattedDuration(editorInput.getTotalTimeSpentOnCompletedTasks() - + editorInput.getTotalTimeSpentOnInProgressTasks(), false); - } - - private TableViewer createTableSection(Composite parent, FormToolkit toolkit, String title, String[] columnNames, - int[] columnWidths, int[] sortConstants) { - Section tableSection = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR); // | - // ExpandableComposite.TWISTIE - tableSection.setText(title); - // tableSection.setExpanded(true); - tableSection.marginHeight = 8; - tableSection.setLayout(new GridLayout()); - tableSection.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - Composite detailContainer = toolkit.createComposite(tableSection); - tableSection.setClient(detailContainer); - detailContainer.setLayout(new GridLayout()); - detailContainer.setLayoutData(new GridData(GridData.FILL_BOTH)); - - return createTable(detailContainer, toolkit, columnNames, columnWidths, sortConstants); - } - - private TableViewer createTable(Composite parent, FormToolkit toolkit, String[] columnNames, int[] columnWidths, - int[] sortConstants) { - int style = SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.HIDE_SELECTION; - Table table = toolkit.createTable(parent, style); - - table.setLayout(new GridLayout()); - GridData tableGridData = new GridData(GridData.FILL_BOTH); - tableGridData.heightHint = 100; - table.setLayoutData(tableGridData); - - table.setLinesVisible(true); - table.setHeaderVisible(true); - table.setEnabled(true); - - for (int i = 0; i < columnNames.length; i++) { - TableColumn column = new TableColumn(table, SWT.LEFT, i); - column.setText(columnNames[i]); - column.setWidth(columnWidths[i]); - } - - TableViewer tableViewer = new TableViewer(table); - tableViewer.setUseHashlookup(true); - tableViewer.setColumnProperties(columnNames); - - final OpenTaskEditorAction openAction = new OpenTaskEditorAction(tableViewer); - tableViewer.addDoubleClickListener(new IDoubleClickListener() { - public void doubleClick(DoubleClickEvent event) { - openAction.run(); - } - }); - - return tableViewer; - } - - private void setSorters(String[] columnNames, int[] sortConstants, Table table, TableViewer tableViewer, - boolean plan) { - for (int i = 0; i < columnNames.length; i++) { - TableColumn column = table.getColumn(i); - addColumnSelectionListener(tableViewer, column, sortConstants[i], plan); - } - } - - private void addColumnSelectionListener(final TableViewer tableViewer, TableColumn column, - final int sorterConstant, final boolean plan) { - column.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent e) { - if (plan) { // TODO: bad modularity - tableViewer.setSorter(new TaskPlanSorter(sorterConstant)); - } else { - tableViewer.setSorter(new TaskActivitySorter(sorterConstant)); - } - } - }); - } - - private void createButtons(Composite parent, FormToolkit toolkit, final TableViewer viewer, - final PlannedTasksContentProvider contentProvider) { - Composite container = new Composite(parent, SWT.NULL); - container.setBackground(parent.getBackground()); - GridLayout layout = new GridLayout(); - container.setLayout(layout); - layout.numColumns = 3; - - // Button addIncomplete = toolkit.createButton(container, "Add - // Incomplete", SWT.PUSH | SWT.CENTER); - // addIncomplete.addSelectionListener(new SelectionAdapter() { - // @Override - // public void widgetSelected(SelectionEvent e) { - // Set<ITask> incompleteTasks = editorInput.getInProgressTasks(); - // for (ITask task : incompleteTasks) { - // contentProvider.addTask(task); - // viewer.refresh(); - // updateLabels(); - // } - // } - // }); - // - // Button addToCategory = toolkit.createButton(container, "Add Planned - // to Category...", SWT.PUSH | SWT.CENTER); - // addToCategory.addSelectionListener(new SelectionAdapter() { - // @Override - // public void widgetSelected(SelectionEvent e) { - // addPlannedTasksToCategory(contentProvider); - // } - // }); - - Button exportToHTML = toolkit.createButton(container, "Export to HTML...", SWT.PUSH | SWT.CENTER); - exportToHTML.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - exportToHtml(); - } - }); - } - - // private void initDrop(final TableViewer tableViewer, final - // PlannedTasksContentProvider contentProvider) { - // Transfer[] types = new Transfer[] { TextTransfer.getInstance() }; - // - // tableViewer.addDropSupport(DND.DROP_MOVE, types, new - // ViewerDropAdapter(tableViewer) { - // { - // setFeedbackEnabled(false); - // } - // - // @Override - // public boolean performDrop(Object data) { - // - // IStructuredSelection selection = ((IStructuredSelection) - // TaskListView.getDefault().getViewer() - // .getSelection()); - // - // for (Iterator iter = selection.iterator(); iter.hasNext();) { - // Object selectedObject = iter.next(); - // if (selectedObject instanceof ITask) { - // contentProvider.addTask((ITask) selectedObject); - // updateLabels(); - // continue; - // } else if (selectedObject instanceof ITaskListElement) { - // // if - // (MylarTaskListPlugin.getDefault().getHandlerForElement((ITaskListElement) - // selectedObject) != null) { - // ITask task = null; - // if (selectedObject instanceof ITask) { - // task = (ITask) selectedObject; - // } else if (selectedObject instanceof AbstractQueryHit) { - // task = ((AbstractQueryHit) - // selectedObject).getOrCreateCorrespondingTask(); - // } - // if (task != null) { - // contentProvider.addTask(task); - // updateLabels(); - // continue; - // } - // // } - // } else { - // return false; - // } - // } - // tableViewer.refresh(); - // return true; - // } - // - // @Override - // public boolean validateDrop(Object targetObject, int operation, - // TransferData transferType) { - // Object selectedObject = ((IStructuredSelection) - // TaskListView.getDefault().getViewer().getSelection()) - // .getFirstElement(); - // if (!(selectedObject instanceof AbstractRepositoryQuery)) { - // // && ((ITaskListElement) selectedObject).isDragAndDropEnabled()) { - // return true; - // } - // return false; - // } - // }); - // } - - // private class PlannedTasksCellModifier implements ICellModifier { - // - // private TableViewer tableViewer; - // - // public PlannedTasksCellModifier(TableViewer tableViewer) { - // this.tableViewer = tableViewer; - // } - // - // public boolean canModify(Object element, String property) { - // int columnIndex = Arrays.asList(planColumnNames).indexOf(property); - // if (columnIndex == 5 || columnIndex == 4) { - // return true; - // } - // return false; - // } - // - // public Object getValue(Object element, String property) { - // if (element instanceof ITask) { - // int columnIndex = Arrays.asList(planColumnNames).indexOf(property); - // if (element instanceof ITask) { - // if (columnIndex == 5) { - // if (((ITask) element).getReminderDate() != null) { - // return DateFormat.getDateInstance(DateFormat.MEDIUM).format( - // ((ITask) element).getReminderDate()); - // } else { - // return null; - // } - // } else if (columnIndex == 4) { - // return new Integer(Arrays.asList(TaskListManager.ESTIMATE_TIMES).indexOf( - // ((ITask) element).getEstimateTimeHours())); - // } - // - // } - // } - // return null; - // } - // - // public void modify(Object element, String property, Object value) { - // int columnIndex = Arrays.asList(planColumnNames).indexOf(property); - // if (element instanceof ITask) { - // ITask task = (ITask) element; - // if (columnIndex == 4) { - // if (value instanceof Integer) { - // task.setEstimatedTimeHours(((Integer) value).intValue() * 10); - // tableViewer.refresh(); - // } - // } - // } - // } - // } - - // private void addPlannedTasksToCategory(PlannedTasksContentProvider - // contentProvider) { - // List<AbstractTaskContainer> categories = - // MylarTaskListPlugin.getTaskListManager().getTaskList().getUserCategories(); - // String[] categoryNames = new String[categories.size()]; - // int i = 0; - // for (AbstractTaskContainer category : categories) { - // categoryNames[i++] = category.getDescription(); - // } - // if (categories.size() > 0) { - // ComboSelectionDialog dialog = new - // ComboSelectionDialog(Display.getCurrent().getActiveShell(), LABEL_DIALOG, - // "Select destination category: ", categoryNames, 0); - // int confirm = dialog.open(); - // if (confirm == ComboSelectionDialog.OK) { - // String selected = dialog.getSelectedString(); - // AbstractTaskContainer destinationCategory = null; - // for (AbstractTaskContainer category : categories) { - // if (category.getDescription().equals(selected)) { - // destinationCategory = category; - // break; // will go to the first one - // } - // } - // if (destinationCategory != null && destinationCategory instanceof - // TaskCategory) { - // TaskCategory taskCategory = (TaskCategory) destinationCategory; - // for (ITask task : editorInput.getPlannedTasks()) { - // if (!taskCategory.getChildren().contains(task)) { - // MylarTaskListPlugin.getTaskListManager().getTaskList().moveToContainer(taskCategory, - // task); - // } - // } - // if (TaskListView.getDefault() != null) { - // TaskListView.getDefault().refreshAndFocus(); - // } - // } else { - // MessageDialog.openInformation(Display.getCurrent().getActiveShell(), - // LABEL_DIALOG, - // "Can not add plan tasks into a query category."); - // } - // } - // } else { - // MessageDialog.openInformation(Display.getCurrent().getActiveShell(), - // LABEL_DIALOG, - // "No categories in task list."); - // } - // } - - private void updateLabels() { - totalEstimatedHoursLabel.setText(LABEL_ESTIMATED + editorInput.getPlannedEstimate() + " hours"); - updateSummarySection(); - } - - private void exportToHtml() { - File outputFile; - try { - FileDialog dialog = new FileDialog(getSite().getWorkbenchWindow().getShell()); - dialog.setText("Specify a file name"); - dialog.setFilterExtensions(new String[] { "*.html", "*.*" }); - String filename = dialog.open(); - - if (filename == null || filename.equals("")) - return; - - if (!filename.endsWith(".html")) - filename += ".html"; - outputFile = new File(filename); - // outputStream = new FileOutputStream(outputFile, true); - BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile)); - writer.write("<html><head></head><body>" - // + "<link rel=\"stylesheet\" - // href=\"http://eclipse.org/mylar/style.css\" - // type=\"text/css\"></head><body>" - ); - - exportSummarySection(writer); - - exportActivitySection(writer); - - exportPlanSection(writer); - - writer.write("</body></html>"); - writer.close(); - } catch (FileNotFoundException e) { - MylarStatusHandler.log(e, "could not resolve file"); - } catch (IOException e) { - MylarStatusHandler.log(e, "could not write to file"); - } - } - - private void exportPlanSection(BufferedWriter writer) throws IOException { - - writer.write("<H2>" + LABEL_PLANNED_ACTIVITY + "</H2>"); - - writer.write("<table border=\"1\" width=\"100%\" id=\"plannedActivityTable\">"); - writer.write("<tr>"); - writer - .write("<td width=\"59\"><b>Type</b></td><td width=\"55\"><b>Priority</b></td><td width=\"495\"><b>Description</b></td>"); - writer.write("<td><b>Elapsed</b></td><td><b>Estimated</b></td><td><b>Reminder</b></td>"); - writer.write("</tr>"); - - for (Object element : planContentProvider.getElements(null)) { - if (element instanceof ITask) { - ITask currentTask = (ITask) element; - - String formatString = "dd-MM-yyyy"; - SimpleDateFormat format = new SimpleDateFormat(formatString, Locale.ENGLISH); - - String elapsedTimeString = DateUtil.getFormattedDuration(TasksUiPlugin.getTaskListManager().getElapsedTime(currentTask), false); - String estimatedTimeString = currentTask.getEstimateTimeHours() + " hours"; - if (elapsedTimeString.equals("")) - elapsedTimeString = BLANK_CELL; - - Date reminderDate = currentTask.getReminderDate(); - String reminderDateString = BLANK_CELL; - if (reminderDate != null) { - reminderDateString = format.format(reminderDate); - } - - writer.write("<tr>"); - writer.write("<td width=\"59\">ICON</td><td width=\"55\">" + currentTask.getPriority() - + "</td><td width=\"495\">"); - if (currentTask.hasValidUrl()) { - writer.write("<a href='" + currentTask.getUrl() + "'>" + currentTask.getDescription() + "</a>"); - } else { - writer.write(currentTask.getDescription()); - } - writer.write("</td><td>" + elapsedTimeString + "</td><td>" + estimatedTimeString + "</td><td>" - + reminderDateString + "</td>"); - writer.write("</tr>"); - - } - } - writer.write("</table>"); - writer.write("<BR></BR>"); - writer.write("<H3>" + totalEstimatedHoursLabel.getText() + "</H3>"); - - } - - private void exportActivitySection(BufferedWriter writer) throws IOException { - - writer.write("<H2>" + LABEL_PAST_ACTIVITY + "</H2>"); - - writer.write("<table border=\"1\" width=\"100%\" id=\"activityTable\">"); - writer.write("<tr>"); - writer - .write("<td width=\"59\"><b>Type</b></td><td width=\"55\"><b>Priority</b></td><td width=\"495\"><b>Description</b></td>"); - writer - .write("<td><b>Created</b></td><td><b>Completed</b></td><td><b>Elapsed</b></td><td><b>Estimated</b></td>"); - writer.write("</tr>"); - - for (Object element : activityContentProvider.getElements(null)) { - if (element instanceof ITask) { - ITask currentTask = (ITask) element; - - String formatString = "dd-MM-yyyy"; - SimpleDateFormat format = new SimpleDateFormat(formatString, Locale.ENGLISH); - - String elapsedTimeString = DateUtil.getFormattedDuration(TasksUiPlugin.getTaskListManager().getElapsedTime(currentTask), false); - String estimatedTimeString = currentTask.getEstimateTimeHours() + " hours"; - if (elapsedTimeString.equals("")) - elapsedTimeString = NO_TIME_ELAPSED; - - Date creationDate = currentTask.getCreationDate(); - String creationDateString = BLANK_CELL; - if (creationDate != null) { - creationDateString = format.format(creationDate); - } - - String completionDateString = BLANK_CELL; - Date completedDate = currentTask.getCompletionDate(); - if (completedDate != null) { - completionDateString = format.format(completedDate); - } - - writer.write("<tr>"); - writer.write("<td width=\"59\">ICON</td><td width=\"55\">" + currentTask.getPriority() - + "</td><td width=\"495\">"); - - if (currentTask.hasValidUrl()) { - writer.write("<a href='" + currentTask.getUrl() + "'>" + currentTask.getDescription() + "</a>"); - } else { - writer.write(currentTask.getDescription()); - } - - writer.write("</td><td>" + creationDateString + "</td>"); - writer.write("<td>" + completionDateString + "</td><td>" + elapsedTimeString + "</td><td>" - + estimatedTimeString + "</td>"); - writer.write("</tr>"); - } - } - writer.write("</table>"); - } - - private void exportSummarySection(BufferedWriter writer) throws IOException { - Date startDate = editorInput.getReportStartDate(); - writer.write("<H2>" + LABEL_DIALOG + "</H2>"); - - String formatString = "yyyy-MM-dd, h:mm a"; - SimpleDateFormat format = new SimpleDateFormat(formatString, Locale.ENGLISH); - - writer.write("<table border=\"0\" width=\"75%\" id=\"table1\">\n<tr>\n"); - writer.write("<td width=\"138\">Activity since:</td> "); - String dateLabel = "Not Available"; - if (startDate != null) { - dateLabel = format.format(startDate); - } - writer.write("<td>" + dateLabel + "</td>"); - writer.write("<td width=\"169\"> </td><td width=\"376\"> </td>\n</tr>"); - - writer.write("<tr><td width=\"138\">Number Completed:</td><td>" + editorInput.getCompletedTasks().size() - + "</td>"); - - writer.write("<td width=\"169\">Total time on completed:</td><td width=\"376\">" - + DateUtil.getFormattedDuration(editorInput.getTotalTimeSpentOnCompletedTasks(), false) + "</td>"); - writer.write("</tr>"); - - writer.write("<tr><td width=\"138\">Number in Progress:</td><td>" + editorInput.getInProgressTasks().size() - + "</td>"); - writer.write("<td width=\"169\">Total time on incompleted:</td><td width=\"376\">" - + DateUtil.getFormattedDuration(editorInput.getTotalTimeSpentOnInProgressTasks(), false) + "</td>"); - writer.write("</tr>"); - - writer.write("<tr><td width=\"138\">Total estimated time:</td><td>" + totalEstimatedHoursLabel.getText() - + "</td>"); - writer.write("<td width=\"169\">Total time:</td><td width=\"376\">" + getTotalTime() + "</td>"); - writer.write("</tr>"); - - writer.write("</table>"); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskActivitySorter.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskActivitySorter.java deleted file mode 100644 index 32e27af16..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskActivitySorter.java +++ /dev/null @@ -1,97 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.planner; - -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerSorter; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Ken Sueda - * @author Mik Kersten - */ -public class TaskActivitySorter extends ViewerSorter { - - public final static int DESCRIPTION = 1; - - public final static int PRIORITY = 2; - - public final static int CREATION_DATE = 3; - - public final static int COMPLETED_DATE = 4; - - public final static int DURATION = 5; - - public final static int ESTIMATED = 6; - - public static final int ICON = 0; - - private int criteria; - - public TaskActivitySorter(int criteria) { - super(); - this.criteria = criteria; - } - - @Override - public int compare(Viewer viewer, Object obj1, Object obj2) { - ITask t1 = (ITask) obj1; - ITask t2 = (ITask) obj2; - - switch (criteria) { - case DESCRIPTION: - return compareDescription(t1, t2); - case PRIORITY: - return comparePriority(t1, t2); - case CREATION_DATE: - return compareCreationDate(t1, t2); - case COMPLETED_DATE: - return compareCompletedDate(t1, t2); - case DURATION: - return compareDuration(t1, t2); - case ESTIMATED: - return compareEstimated(t1, t2); - default: - return 0; - } - } - - protected int compareDescription(ITask task1, ITask task2) { - return task1.getDescription().compareTo(task2.getDescription()); - } - - protected int comparePriority(ITask task1, ITask task2) { - return task1.getPriority().compareTo(task2.getPriority()); - } - - protected int compareCompletedDate(ITask task1, ITask task2) { - return task2.getCompletionDate().compareTo(task1.getCompletionDate()); - } - - protected int compareEstimated(ITask task1, ITask task2) { - return task2.getEstimateTimeHours() - task1.getEstimateTimeHours(); - } - - protected int compareCreationDate(ITask task1, ITask task2) { - if (task1.getCreationDate() == null) - return 1; - else if (task2.getCreationDate() == null) - return -1; - else - return task2.getCreationDate().compareTo(task1.getCreationDate()); - } - - protected int compareDuration(ITask task1, ITask task2) { - return TasksUiPlugin.getTaskListManager().getElapsedTime(task1) < TasksUiPlugin.getTaskListManager().getElapsedTime(task2) ? 1 : -1; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskActivityWizard.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskActivityWizard.java deleted file mode 100644 index cc25572a9..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskActivityWizard.java +++ /dev/null @@ -1,69 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.planner; - -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.TaskListPreferenceConstants; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.INewWizard; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.PartInitException; - -/** - * @author Ken Sueda - * @author Mik Kersten - */ -public class TaskActivityWizard extends Wizard implements INewWizard { - - private static final String TITLE = "New Task Activity Report"; - - private TaskActicityWizardPage planningGamePage; - - public TaskActivityWizard() { - super(); - init(); - setWindowTitle(TITLE); - } - - @Override - public boolean performFinish() { - try { - IWorkbenchPage page = TasksUiPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow() - .getActivePage(); - if (page == null) - return false; - IEditorInput input = new TaskActivityEditorInput(planningGamePage.getReportStartDate(), planningGamePage - .getSelectedFilters(), TasksUiPlugin.getTaskListManager().getTaskList()); - page.openEditor(input, TaskListPreferenceConstants.PLANNER_EDITOR_ID); - } catch (PartInitException ex) { - MylarStatusHandler.log(ex, "couldn't open summary editor"); - } - return true; - } - - public void init(IWorkbench workbench, IStructuredSelection selection) { - } - - private void init() { - planningGamePage = new TaskActicityWizardPage(); - super.setForcePreviousAndNextButtons(true); - } - - @Override - public void addPages() { - addPage(planningGamePage); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskPlanLabelProvider.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskPlanLabelProvider.java deleted file mode 100644 index 704cc35b7..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskPlanLabelProvider.java +++ /dev/null @@ -1,59 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.planner; - -import java.text.DateFormat; - -import org.eclipse.jface.viewers.ITableLabelProvider; -import org.eclipse.mylar.internal.context.core.util.DateUtil; -import org.eclipse.mylar.internal.tasks.ui.views.TaskElementLabelProvider; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.graphics.Image; - -/** - * @author Ken Sueda - */ -public class TaskPlanLabelProvider extends TaskElementLabelProvider implements ITableLabelProvider { - - // {".", "Description", "Priority", "Estimated Time", "Reminder Date"}; - public Image getColumnImage(Object element, int columnIndex) { - if (columnIndex == 0) { - return super.getImage(element); - } else { - return null; - } - } - - public String getColumnText(Object element, int columnIndex) { - if (element instanceof ITask) { - ITask task = (ITask) element; - switch (columnIndex) { - case 1: - return task.getPriority(); - case 2: - return task.getDescription(); - case 3: - return DateUtil.getFormattedDurationShort(TasksUiPlugin.getTaskListManager().getElapsedTime(task)); - case 4: - return task.getEstimateTimeHours() + " hours"; - case 5: - if (task.getReminderDate() != null) { - return DateFormat.getDateInstance(DateFormat.MEDIUM).format(task.getReminderDate()); - } else { - return ""; - } - } - } - return null; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskPlanSorter.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskPlanSorter.java deleted file mode 100644 index 6e7765ba4..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskPlanSorter.java +++ /dev/null @@ -1,90 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.planner; - -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.mylar.tasks.core.ITask; - -/** - * @author Mik Kersten - */ -public class TaskPlanSorter extends TaskActivitySorter { - - // {".", "Description", "Priority", "Estimated Time", "Reminder Date"}; - public final static int PRIORITY = 1; - - public final static int DESCRIPTION = 2; - - public final static int DURATION = 3; - - public final static int ESTIMATE = 4; - - public final static int REMINDER = 5; - - public static final int ICON = 0; - - private int criteria; - - public TaskPlanSorter(int criteria) { - super(criteria); - this.criteria = criteria; - } - - @Override - public int compare(Viewer viewer, Object obj1, Object obj2) { - ITask t1 = (ITask) obj1; - ITask t2 = (ITask) obj2; - - switch (criteria) { - case PRIORITY: - return comparePriority(t1, t2); - case DESCRIPTION: - return compareDescription(t1, t2); - case DURATION: - return compareDuration(t1, t2); - case ESTIMATE: - return compareEstimated(t1, t2); - case REMINDER: - return compareReminder(t1, t2); - default: - return 0; - } - } - - private int compareReminder(ITask task1, ITask task2) { - if (task2.getReminderDate() == null) - return -1; - if (task1.getReminderDate() == null) - return 1; - if (task1.getReminderDate() == null && task2.getReminderDate() == null) - return 0; - return task2.getReminderDate().compareTo(task1.getReminderDate()); - } - - // protected int compareEstimated(ITask task1, ITask task2) { - // if (task1.getEstimateTimeHours() > task2.getEstimateTimeHours()) { - // return 1; - // } else { - // return -1; - // } - - // private int compareDescription(ITask task1, ITask task2) { - // return - // task1.getDescription(false).compareTo(task2.getDescription(false)); - // } - // - // private int comparePriority(ITask task1, ITask task2) { - // return task1.getPriority().compareTo(task2.getPriority()); - // } - // - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskPlannerLabelProvider.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskPlannerLabelProvider.java deleted file mode 100644 index 5e5580dd6..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskPlannerLabelProvider.java +++ /dev/null @@ -1,84 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.planner; - -import java.text.DateFormat; - -import org.eclipse.jface.viewers.IColorProvider; -import org.eclipse.jface.viewers.ITableLabelProvider; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.context.core.util.DateUtil; -import org.eclipse.mylar.internal.tasks.ui.views.TaskElementLabelProvider; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Image; - -/** - * @author Ken Sueda - */ -public class TaskPlannerLabelProvider extends TaskElementLabelProvider implements ITableLabelProvider, IColorProvider { - - private TaskElementLabelProvider taskListLabelProvider = new TaskElementLabelProvider(); - - public Image getColumnImage(Object element, int columnIndex) { - if (columnIndex == 0) { - return super.getImage(element); - } else { - return null; - } - } - - public String getColumnText(Object element, int columnIndex) { - try { - if (element instanceof ITask) { - ITask task = (ITask) element; - switch (columnIndex) { - case 1: - return task.getPriority(); - case 2: - return task.getDescription(); - case 3: - if (task.getCreationDate() != null) { - return DateFormat.getDateInstance(DateFormat.MEDIUM).format(task.getCreationDate()); - } else { - MylarStatusHandler.log("Task has no creation date: " + task.getDescription(), this); - return "[unknown]"; - } - case 4: - if (task.getCompletionDate() != null) { - return DateFormat.getDateInstance(DateFormat.MEDIUM).format(task.getCompletionDate()); - } else { - return ""; - } - case 5: - return DateUtil.getFormattedDurationShort(TasksUiPlugin.getTaskListManager().getElapsedTime(task)); - case 6: - return task.getEstimateTimeHours() + " hours"; - } - } - } catch (RuntimeException e) { - MylarStatusHandler.fail(e, "Could not produce completed task label", false); - return ""; - } - return null; - } - - public Color getForeground(Object element) { - return taskListLabelProvider.getForeground(element); - } - - public Color getBackground(Object element) { - return taskListLabelProvider.getBackground(element); - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskReportGenerator.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskReportGenerator.java deleted file mode 100644 index e9100c1fe..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/planner/TaskReportGenerator.java +++ /dev/null @@ -1,130 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.planner; - -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractTaskContainer; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.mylar.tasks.core.Task; -import org.eclipse.mylar.tasks.core.TaskList; - -/** - * @author Ken Sueda - * @author Mik Kersten - * @author Rob Elves (scope report to specific categories and queries) - */ -public class TaskReportGenerator implements IRunnableWithProgress { - - private static final String LABEL_JOB = "Mylar Task Activity Report"; - - private boolean finished; - - private TaskList tasklist = null; - - private List<ITaskCollector> collectors = new ArrayList<ITaskCollector>(); - - private List<ITask> tasks = new ArrayList<ITask>(); - - private Set<ITaskListElement> filterCategories; - - public TaskReportGenerator(TaskList tlist) { - this(tlist, null); - } - - public TaskReportGenerator(TaskList tlist, Set<ITaskListElement> filterCategories) { - tasklist = tlist; - this.filterCategories = filterCategories != null ? filterCategories : new HashSet<ITaskListElement>(); - } - - public void addCollector(ITaskCollector collector) { - collectors.add(collector); - } - - public void collectTasks() { - try { - run(new NullProgressMonitor()); - } catch (InvocationTargetException e) { - // operation was canceled - } catch (InterruptedException e) { - MylarStatusHandler.log(e, "Could not collect tasks"); - } - } - - public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - - Set<ITaskListElement> rootElements; - if (filterCategories.size() == 0) { - rootElements = tasklist.getRootElements(); - } else if(filterCategories.contains(TaskActicityWizardPage.ROOT_CATEGORY_HACK)) { - // TODO: Remove when root category issues fixed - rootElements = new HashSet<ITaskListElement>(tasklist.getRootTasks()); - filterCategories.remove(TaskActicityWizardPage.ROOT_CATEGORY_HACK); - rootElements.addAll(filterCategories); - } else { - rootElements = filterCategories; - } - - int estimatedItemsToProcess = rootElements.size(); - monitor.beginTask(LABEL_JOB, estimatedItemsToProcess); - - for (Object element : rootElements) { - monitor.worked(1); - if (element instanceof AbstractTaskContainer) { - AbstractTaskContainer cat = (AbstractTaskContainer) element; - for (ITask task : cat.getChildren()) - for (ITaskCollector collector : collectors) { - collector.consumeTask(task); - } - - } else if (element instanceof Task) { - Task task = (Task) element; - for (ITaskCollector collector : collectors) { - collector.consumeTask(task); - } - - } else if (element instanceof AbstractRepositoryQuery) { - // process queries - AbstractRepositoryQuery repositoryQuery = (AbstractRepositoryQuery) element; - for(ITask task : repositoryQuery.getChildren()) { - for (ITaskCollector collector : collectors) { - collector.consumeTask(task); - } - } - } - } - // Put the results all into one list (tasks) - for (ITaskCollector collector : collectors) { - tasks.addAll(collector.getTasks()); - } - finished = true; - monitor.done(); - } - - public List<ITask> getAllCollectedTasks() { - return tasks; - } - - public boolean isFinished() { - return finished; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/preferences/MylarPreferencePage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/preferences/MylarPreferencePage.java deleted file mode 100644 index dfa5d64e8..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/preferences/MylarPreferencePage.java +++ /dev/null @@ -1,41 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.preferences; - -import org.eclipse.jface.preference.PreferencePage; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Label; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchPreferencePage; - -/** - * @author Mik Kersten - */ -public class MylarPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { - - @Override - protected Control createContents(Composite parent) { - Composite container = new Composite(parent, SWT.NULL); - GridLayout layout = new GridLayout(1, false); - container.setLayout(layout); - - Label label = new Label(container, SWT.NULL); - label.setText("Please select a preference page below \"Mylar\"."); - - return container; - } - - public void init(IWorkbench workbench) { - // ignore - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/preferences/TasksPreferencePage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/preferences/TasksPreferencePage.java deleted file mode 100644 index f5fc01d1e..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/preferences/TasksPreferencePage.java +++ /dev/null @@ -1,597 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui.preferences; - -import java.io.File; - -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.layout.GridDataFactory; -import org.eclipse.jface.preference.PreferencePage; -import org.eclipse.mylar.internal.tasks.ui.TaskListPreferenceConstants; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.DirectoryDialog; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Group; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Spinner; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchPreferencePage; -import org.eclipse.ui.dialogs.PreferenceLinkArea; -import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer; - -/** - * @author Mik Kersten - * @author Rob Elves - */ -public class TasksPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { - - private static final int OVERWRITE = 0; - - private static final int LOAD_EXISTING = 1; - - private static final int CANCEL = 2; - - private static final String FOLDER_SELECTION_MESSAGE = "Specify the folder for tasks"; - - private static final String TITLE_FOLDER_SELECTION = "Folder Selection"; - - private static final String END_HOUR_LABEL = "Work day end (24hr): "; - - private static final String START_HOUR_LABEL = "Work day start (24hr): "; - - private static final String GROUP_WORK_WEEK_LABEL = "Scheduling"; - - private static final String FORWARDSLASH = "/"; - - private static final String BACKSLASH_MULTI = "\\\\"; - - private Button reportEditor; - - private Button disableInternal; - - private Button activateOnOpen; - - private Button reportInternal; - - private Text synchScheduleTime = null; - - private Button enableBackgroundSynch; - - private Text taskDirectoryText = null; - - private Button browse = null; - - private Button backupNow = null; - - private Button notificationEnabledButton = null; - - private Text backupScheduleTimeText; - - private Text backupFolderText; - - private Spinner hourDayStart; - - private Spinner hourDayEnd; - - private int taskDataDirectoryAction = -1; - - public TasksPreferencePage() { - super(); - setPreferenceStore(TasksUiPlugin.getDefault().getPreferenceStore()); - } - - @Override - protected Control createContents(Composite parent) { - Composite container = new Composite(parent, SWT.NULL); - GridLayout layout = new GridLayout(1, false); - container.setLayout(layout); - - String message = "See <a>''{0}''</a> for configuring Task List colors."; - new PreferenceLinkArea(container, SWT.NONE, "org.eclipse.ui.preferencePages.ColorsAndFonts", message, - (IWorkbenchPreferenceContainer) getContainer(), null); - - createTaskRefreshScheduleGroup(container); - createNotificationsGroup(container); - createSchedulingGroup(container); - createOpenWith(container); - createTaskDataControl(container); - - updateRefreshGroupEnablements(); - return container; - } - - public void init(IWorkbench workbench) { - // TODO Auto-generated method stub - } - - @Override - public boolean performOk() { - String taskDirectory = taskDirectoryText.getText(); - taskDirectory = taskDirectory.replaceAll(BACKSLASH_MULTI, FORWARDSLASH); - - if (!taskDirectory.equals(TasksUiPlugin.getDefault().getDataDirectory())) { - if (taskDataDirectoryAction == OVERWRITE) { - TasksUiPlugin.getDefault().getTaskListSaveManager().saveTaskList(true); - TasksUiPlugin.getDefault().getTaskListSaveManager().copyDataDirContentsTo(taskDirectory); - TasksUiPlugin.getDefault().setDataDirectory(taskDirectory); - } else if (taskDataDirectoryAction == LOAD_EXISTING) { - TasksUiPlugin.getDefault().setDataDirectory(taskDirectory); - } else if (taskDataDirectoryAction == CANCEL) { - // shouldn't get here - } - } - getPreferenceStore().setValue(TaskListPreferenceConstants.NOTIFICATIONS_ENABLED, - notificationEnabledButton.getSelection()); - getPreferenceStore().setValue(TaskListPreferenceConstants.BACKUP_SCHEDULE, backupScheduleTimeText.getText()); - - getPreferenceStore().setValue(TaskListPreferenceConstants.REPORT_OPEN_EDITOR, reportEditor.getSelection()); - getPreferenceStore().setValue(TaskListPreferenceConstants.REPORT_OPEN_INTERNAL, reportInternal.getSelection()); - getPreferenceStore().setValue(TaskListPreferenceConstants.REPORT_DISABLE_INTERNAL, - disableInternal.getSelection()); - getPreferenceStore().setValue(TaskListPreferenceConstants.ACTIVATE_ON_OPEN, activateOnOpen.getSelection()); - - // getPreferenceStore().setValue(TaskListPreferenceConstants.REPOSITORY_SYNCH_ON_STARTUP, - // synchQueries.getSelection()); - getPreferenceStore().setValue(TaskListPreferenceConstants.REPOSITORY_SYNCH_SCHEDULE_ENABLED, - enableBackgroundSynch.getSelection()); - long miliseconds = 60000 * Long.parseLong(synchScheduleTime.getText()); - getPreferenceStore().setValue(TaskListPreferenceConstants.REPOSITORY_SYNCH_SCHEDULE_MILISECONDS, - "" + miliseconds); - - getPreferenceStore().setValue(TaskListPreferenceConstants.PLANNING_STARTHOUR, hourDayStart.getSelection()); - getPreferenceStore().setValue(TaskListPreferenceConstants.PLANNING_ENDHOUR, hourDayEnd.getSelection()); - backupNow.setEnabled(true); - return true; - } - - @Override - public boolean performCancel() { - taskDirectoryText.setText(TasksUiPlugin.getDefault().getDefaultDataDirectory()); - notificationEnabledButton.setSelection(getPreferenceStore().getBoolean( - TaskListPreferenceConstants.NOTIFICATIONS_ENABLED)); - backupScheduleTimeText.setText(getPreferenceStore().getString(TaskListPreferenceConstants.BACKUP_SCHEDULE)); - backupFolderText.setText(TasksUiPlugin.getDefault().getBackupFolderPath()); - - reportEditor.setSelection(getPreferenceStore().getBoolean(TaskListPreferenceConstants.REPORT_OPEN_EDITOR)); - reportInternal.setSelection(getPreferenceStore().getBoolean(TaskListPreferenceConstants.REPORT_OPEN_INTERNAL)); - disableInternal.setSelection(getPreferenceStore().getBoolean( - TaskListPreferenceConstants.REPORT_DISABLE_INTERNAL)); - activateOnOpen.setSelection(getPreferenceStore().getBoolean(TaskListPreferenceConstants.ACTIVATE_ON_OPEN)); - // synchQueries.setSelection(getPreferenceStore().getBoolean( - // TaskListPreferenceConstants.REPOSITORY_SYNCH_ON_STARTUP)); - enableBackgroundSynch.setSelection(getPreferenceStore().getBoolean( - TaskListPreferenceConstants.REPOSITORY_SYNCH_SCHEDULE_ENABLED)); - synchScheduleTime.setText(getMinutesString()); - - hourDayStart.setSelection(getPreferenceStore().getInt(TaskListPreferenceConstants.PLANNING_STARTHOUR)); - hourDayEnd.setSelection(getPreferenceStore().getInt(TaskListPreferenceConstants.PLANNING_ENDHOUR)); - backupNow.setEnabled(true); - return true; - } - - public void performDefaults() { - super.performDefaults(); - String taskDirectory = TasksUiPlugin.getDefault().getDefaultDataDirectory(); - if (!taskDirectory.equals(TasksUiPlugin.getDefault().getDataDirectory())) { - checkForExistingTasklist(taskDirectory); - if (taskDataDirectoryAction != CANCEL) { - taskDirectoryText.setText(taskDirectory); - backupFolderText.setText(taskDirectory + FORWARDSLASH - + TasksUiPlugin.DEFAULT_BACKUP_FOLDER_NAME); - backupNow.setEnabled(false); - } - } else { - taskDirectoryText.setText(taskDirectory); - backupFolderText.setText(taskDirectory + FORWARDSLASH - + TasksUiPlugin.DEFAULT_BACKUP_FOLDER_NAME); - backupNow.setEnabled(true); - } - - notificationEnabledButton.setSelection(getPreferenceStore().getDefaultBoolean( - TaskListPreferenceConstants.NOTIFICATIONS_ENABLED)); - backupScheduleTimeText.setText(getPreferenceStore().getDefaultString( - TaskListPreferenceConstants.BACKUP_SCHEDULE)); - - - reportEditor.setSelection(getPreferenceStore() - .getDefaultBoolean(TaskListPreferenceConstants.REPORT_OPEN_EDITOR)); - reportInternal.setSelection(getPreferenceStore().getDefaultBoolean( - TaskListPreferenceConstants.REPORT_OPEN_INTERNAL)); - reportInternal.setSelection(getPreferenceStore().getDefaultBoolean( - TaskListPreferenceConstants.REPORT_DISABLE_INTERNAL)); - - // synchQueries.setSelection(getPreferenceStore().getDefaultBoolean( - // TaskListPreferenceConstants.REPOSITORY_SYNCH_ON_STARTUP)); - enableBackgroundSynch.setSelection(getPreferenceStore().getDefaultBoolean( - TaskListPreferenceConstants.REPOSITORY_SYNCH_SCHEDULE_ENABLED)); - // userRefreshOnly.setSelection(!enableBackgroundSynch.getSelection()); - long miliseconds = getPreferenceStore().getDefaultLong( - TaskListPreferenceConstants.REPOSITORY_SYNCH_SCHEDULE_MILISECONDS); - long minutes = miliseconds / 60000; - synchScheduleTime.setText("" + minutes); - - hourDayStart.setSelection(getPreferenceStore().getDefaultInt(TaskListPreferenceConstants.PLANNING_STARTHOUR)); - hourDayEnd.setSelection(getPreferenceStore().getDefaultInt(TaskListPreferenceConstants.PLANNING_ENDHOUR)); - updateRefreshGroupEnablements(); - } - - private void createTaskRefreshScheduleGroup(Composite parent) { - Group group = new Group(parent, SWT.SHADOW_ETCHED_IN); - group.setText("Synchronization"); - GridLayout gridLayout = new GridLayout(1, false); - // gridLayout.marginLeft = 0; - group.setLayout(gridLayout); - group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - // userRefreshOnly = new Button(group, SWT.RADIO); - // GridData gridData = new GridData(); - // gridData.horizontalSpan = 2; - // userRefreshOnly.setLayoutData(gridData); - // userRefreshOnly.setText("Disabled"); - // userRefreshOnly.setSelection(!getPreferenceStore().getBoolean( - // TaskListPreferenceConstants.REPOSITORY_SYNCH_SCHEDULE_ENABLED)); - // userRefreshOnly.addSelectionListener(new SelectionListener() { - // public void widgetSelected(SelectionEvent e) { - // updateRefreshGroupEnablements(); - // } - // - // public void widgetDefaultSelected(SelectionEvent e) { - // } - // }); - Composite enableSynch = new Composite(group, SWT.NULL); - gridLayout = new GridLayout(4, false); - gridLayout.marginWidth = 0; - gridLayout.marginHeight = 0; - enableSynch.setLayout(gridLayout); - enableBackgroundSynch = new Button(enableSynch, SWT.CHECK); - // enableBackgroundSynch.setLayoutData(gridData); - enableBackgroundSynch.setText("Synchronize with repositories every"); - enableBackgroundSynch.setSelection(getPreferenceStore().getBoolean( - TaskListPreferenceConstants.REPOSITORY_SYNCH_SCHEDULE_ENABLED)); - enableBackgroundSynch.addSelectionListener(new SelectionListener() { - public void widgetSelected(SelectionEvent e) { - updateRefreshGroupEnablements(); - } - - public void widgetDefaultSelected(SelectionEvent e) { - } - }); - synchScheduleTime = new Text(enableSynch, SWT.BORDER | SWT.RIGHT); - GridData gridData = new GridData(); - gridData.widthHint = 25; - synchScheduleTime.setLayoutData(gridData); - synchScheduleTime.setText(getMinutesString()); - synchScheduleTime.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - updateRefreshGroupEnablements(); - } - }); - Label label = new Label(enableSynch, SWT.NONE); - label.setText("minutes"); - - // synchQueries = new Button(group, SWT.CHECK); - // synchQueries.setText("Synchronize on startup"); - // synchQueries.setSelection(getPreferenceStore().getBoolean( - // TaskListPreferenceConstants.REPOSITORY_SYNCH_ON_STARTUP)); - - } - - private void createOpenWith(Composite parent) { - Group container = new Group(parent, SWT.SHADOW_ETCHED_IN); - container.setLayout(new GridLayout(2, false)); - container.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - container.setText("Open Repository Tasks with"); - reportEditor = new Button(container, SWT.RADIO); - reportEditor.setText("Editor if available (Recommended)"); - reportEditor.setSelection(getPreferenceStore().getBoolean(TaskListPreferenceConstants.REPORT_OPEN_EDITOR)); - reportInternal = new Button(container, SWT.RADIO); - reportInternal.setText("Internal browser"); - reportInternal.setSelection(getPreferenceStore().getBoolean(TaskListPreferenceConstants.REPORT_OPEN_INTERNAL)); - - disableInternal = new Button(container, SWT.CHECK); - disableInternal.setText("Disable internal browser"); - disableInternal.setEnabled(!reportInternal.getSelection()); - disableInternal.setSelection(getPreferenceStore().getBoolean( - TaskListPreferenceConstants.REPORT_DISABLE_INTERNAL)); - - activateOnOpen = new Button(container, SWT.CHECK); - activateOnOpen.setText("Active on open (Experimental)"); - activateOnOpen.setEnabled(!reportInternal.getSelection()); - activateOnOpen.setSelection(getPreferenceStore().getBoolean(TaskListPreferenceConstants.ACTIVATE_ON_OPEN)); - - reportInternal.addListener(SWT.Selection, new Listener() { - - public void handleEvent(Event event) { - if (reportInternal.getSelection()) { - disableInternal.setSelection(false); - disableInternal.setEnabled(false); - } else { - disableInternal.setEnabled(true); - } - } - }); - } - - private void createTaskDataControl(Composite parent) { - Group taskDataGroup = new Group(parent, SWT.SHADOW_ETCHED_IN); - taskDataGroup.setText("Task Data"); - taskDataGroup.setLayout(new GridLayout(1, false)); - taskDataGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - Label label = new Label(taskDataGroup, SWT.NULL); - label.setText("Default data directory will move with workspace (Recommended)"); - - Composite dataDirComposite = new Composite(taskDataGroup, SWT.NULL); - GridLayout gridLayout = new GridLayout(3, false); - gridLayout.marginWidth = 0; - gridLayout.marginHeight = 0; - dataDirComposite.setLayout(gridLayout); - dataDirComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - label = new Label(dataDirComposite, SWT.NULL); - label.setText("Data directory: "); - - String taskDirectory = TasksUiPlugin.getDefault().getDataDirectory(); - taskDirectory = taskDirectory.replaceAll(BACKSLASH_MULTI, FORWARDSLASH); - taskDirectoryText = new Text(dataDirComposite, SWT.BORDER); - taskDirectoryText.setText(taskDirectory); - taskDirectoryText.setEditable(false); - taskDirectoryText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - browse = new Button(dataDirComposite, SWT.TRAIL); - browse.setText("Browse..."); - browse.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent e) { - DirectoryDialog dialog = new DirectoryDialog(getShell()); - dialog.setText(TITLE_FOLDER_SELECTION); - dialog.setMessage(FOLDER_SELECTION_MESSAGE); - String dir = taskDirectoryText.getText(); - dir = dir.replaceAll(BACKSLASH_MULTI, FORWARDSLASH); - dialog.setFilterPath(dir); - - dir = dialog.open(); - if (dir == null || dir.equals("")) - return; - dir = dir.replaceAll(BACKSLASH_MULTI, FORWARDSLASH); - checkForExistingTasklist(dir); - - if (taskDataDirectoryAction != CANCEL) { - taskDirectoryText.setText(dir); - backupFolderText.setText(dir + FORWARDSLASH + TasksUiPlugin.DEFAULT_BACKUP_FOLDER_NAME); - backupNow.setEnabled(false); - } - } - - }); - - Composite backupComposite = new Composite(taskDataGroup, SWT.NULL); - gridLayout = new GridLayout(5, false); - gridLayout.marginWidth = 0; - gridLayout.marginHeight = 0; - backupComposite.setLayout(gridLayout); - backupComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - label = new Label(backupComposite, SWT.NULL); - label.setText("Backup every"); - backupScheduleTimeText = new Text(backupComposite, SWT.BORDER | SWT.RIGHT); - final GridData gridData_1 = new GridData(); - gridData_1.widthHint = 13; - backupScheduleTimeText.setLayoutData(gridData_1); - - backupScheduleTimeText.setText("" + getPreferenceStore().getInt(TaskListPreferenceConstants.BACKUP_SCHEDULE)); - backupScheduleTimeText.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - updateRefreshGroupEnablements(); - } - }); - - label = new Label(backupComposite, SWT.NONE); - label.setText("days to"); - - String backupDirectory = TasksUiPlugin.getDefault().getBackupFolderPath();// getPreferenceStore().getString(TaskListPreferenceConstants.BACKUP_FOLDER); - backupDirectory = backupDirectory.replaceAll(BACKSLASH_MULTI, FORWARDSLASH); - backupFolderText = new Text(backupComposite, SWT.BORDER); - backupFolderText.setText(backupDirectory); - backupFolderText.setEditable(false); - backupFolderText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - backupNow = new Button(backupComposite, SWT.NONE); - backupNow.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); - backupNow.setText("Backup Now"); - backupNow.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent e) { - TasksUiPlugin.getDefault().getBackupManager().backupNow(true); - } - }); - } - - private void createNotificationsGroup(Composite parent) { - Group group = new Group(parent, SWT.SHADOW_ETCHED_IN); - group.setText("Notifications"); - group.setLayout(new GridLayout(1, false)); - group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - notificationEnabledButton = new Button(group, SWT.CHECK); - notificationEnabledButton.setText("Display notifications for overdue tasks and incoming changes"); - notificationEnabledButton.setSelection(getPreferenceStore().getBoolean( - TaskListPreferenceConstants.NOTIFICATIONS_ENABLED)); - } - - private void createSchedulingGroup(Composite container) { - Group group = new Group(container, SWT.SHADOW_ETCHED_IN); - group.setText(GROUP_WORK_WEEK_LABEL); - group.setLayout(new GridLayout(5, false)); - group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - // Label workWeekBeginLabel = new Label(group, SWT.NONE); - // workWeekBeginLabel.setText(START_DAY_LABEL); - // workWeekBegin = new Combo(group, SWT.READ_ONLY); - // // Calendar.SUNDAY = 1 - // workWeekBegin.add("SUNDAY"); - // workWeekBegin.add("MONDAY"); - // workWeekBegin.add("TUESDAY"); - // workWeekBegin.add("WEDNESDAY"); - // workWeekBegin.add("THURSDAY"); - // workWeekBegin.add("FRIDAY"); - // workWeekBegin.add("SATURDAY"); - // workWeekBegin.select(getPreferenceStore().getInt(TaskListPreferenceConstants.PLANNING_STARTDAY) - // - 1); - // - // Label workWeekEndLabel = new Label(group, SWT.NONE); - // workWeekEndLabel.setText(END_DAY_LABEL); - // workWeekEnd = new Combo(group, SWT.READ_ONLY); - // workWeekEnd.add("SUNDAY"); - // workWeekEnd.add("MONDAY"); - // workWeekEnd.add("TUESDAY"); - // workWeekEnd.add("WEDNESDAY"); - // workWeekEnd.add("THURSDAY"); - // workWeekEnd.add("FRIDAY"); - // workWeekEnd.add("SATURDAY"); - // workWeekEnd.select(getPreferenceStore().getInt(TaskListPreferenceConstants.PLANNING_ENDDAY) - // - 1); - - Label hourDayStartLabel = new Label(group, SWT.NONE); - hourDayStartLabel.setText(START_HOUR_LABEL); - hourDayStart = new Spinner(group, SWT.BORDER); - hourDayStart.setDigits(0); - hourDayStart.setIncrement(1); - hourDayStart.setMaximum(23); - hourDayStart.setMinimum(0); - hourDayStart.setSelection(getPreferenceStore().getInt(TaskListPreferenceConstants.PLANNING_STARTHOUR)); - hourDayStart.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent e) { - updateRefreshGroupEnablements(); - } - - }); - - Label spacer = new Label(group, SWT.NONE); - GridDataFactory.fillDefaults().hint(40, SWT.DEFAULT).applyTo(spacer); - - Label hourDayEndLabel = new Label(group, SWT.NONE); - hourDayEndLabel.setText(END_HOUR_LABEL); - - hourDayEnd = new Spinner(group, SWT.BORDER); - hourDayEnd.setDigits(0); - hourDayEnd.setIncrement(1); - hourDayEnd.setMaximum(23); - hourDayEnd.setMinimum(0); - hourDayEnd.setSelection(getPreferenceStore().getInt(TaskListPreferenceConstants.PLANNING_ENDHOUR)); - hourDayEnd.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent e) { - updateRefreshGroupEnablements(); - } - - }); - - } - - public void updateRefreshGroupEnablements() { - try { - long number = Integer.parseInt(backupScheduleTimeText.getText()); - if (number <= 0) { - this.setErrorMessage("Archive schedule time must be > 0"); - this.setValid(false); - } else if (backupFolderText.getText() == "") { - this.setErrorMessage("Archive destination folder must be specified"); - this.setValid(false); - } else { - this.setErrorMessage(null); - this.setValid(true); - } - } catch (NumberFormatException e) { - this.setErrorMessage("Archive schedule time must be valid integer"); - this.setValid(false); - } - - if (enableBackgroundSynch.getSelection()) { - try { - long number = Long.parseLong(synchScheduleTime.getText()); - if (number <= 0) { - this.setErrorMessage("Refresh schedule time must be > 0"); - this.setValid(false); - } else { - this.setErrorMessage(null); - this.setValid(true); - } - } catch (NumberFormatException e) { - this.setErrorMessage("Refresh schedule time must be valid integer"); - this.setValid(false); - } - } else { - this.setValid(true); - this.setErrorMessage(null); - } - - if (getErrorMessage() == null) { - if (hourDayEnd.getSelection() <= hourDayStart.getSelection()) { - setErrorMessage("Planning: Work day start must be before end."); - this.setValid(false); - } else { - setErrorMessage(null); - this.setValid(true); - } - } - - synchScheduleTime.setEnabled(enableBackgroundSynch.getSelection()); - } - - private String getMinutesString() { - long miliseconds = getPreferenceStore().getLong( - TaskListPreferenceConstants.REPOSITORY_SYNCH_SCHEDULE_MILISECONDS); - long minutes = miliseconds / 60000; - return "" + minutes; - } - - private void checkForExistingTasklist(String dir) { - File newDataFolder = new File(dir); - if (newDataFolder.exists()) { - for (String filename : newDataFolder.list()) { - if (filename.equals(TasksUiPlugin.DEFAULT_TASK_LIST_FILE)) { - - MessageDialog dialogConfirm = new MessageDialog( - null, - "Tasklist found at destination", - null, - "Overwrite existing tasklist with current data or load tasklist from new destination?", - MessageDialog.WARNING, new String[] { "Overwrite", "Load", - IDialogConstants.CANCEL_LABEL }, CANCEL); - taskDataDirectoryAction = dialogConfirm.open(); - break; - } - } - if(taskDataDirectoryAction == -1) { - taskDataDirectoryAction = OVERWRITE; - } - } - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/AbstractRepositoryQueryPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/AbstractRepositoryQueryPage.java deleted file mode 100644 index 3e7e9ce18..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/AbstractRepositoryQueryPage.java +++ /dev/null @@ -1,130 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.search; - -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.search.ui.ISearchPage; -import org.eclipse.search.ui.ISearchPageContainer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.KeyEvent; -import org.eclipse.swt.events.KeyListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Group; -import org.eclipse.swt.widgets.Text; - -/** - * @author Rob Elves - */ -public abstract class AbstractRepositoryQueryPage extends WizardPage implements ISearchPage { - - private static final String TITLE_QUERY_TITLE = "Query Title"; - - private static final String TITLE = "Enter query parameters"; - - private static final String DESCRIPTION = "If attributes are blank or stale press the Update button."; - - private Text title; - - private String titleString = ""; - - protected ISearchPageContainer scontainer = null; - - public AbstractRepositoryQueryPage(String wizardTitle) { - this(wizardTitle, ""); - setTitle(TITLE); - setDescription(DESCRIPTION); - setImageDescriptor(TaskListImages.BANNER_REPOSITORY); - setPageComplete(false); - } - - public AbstractRepositoryQueryPage(String wizardTitle, String queryTitle) { - super(wizardTitle); - titleString = queryTitle; - } - - public void createControl(Composite parent) { - if (scontainer == null) { - createTitleGroup(parent); - title.setFocus(); - } - } - - private void createTitleGroup(Composite composite) { - if(scontainer != null) return; - Group group = new Group(composite, SWT.NONE); - group.setText(TITLE_QUERY_TITLE); - GridLayout layout = new GridLayout(); - layout.numColumns = 1; - group.setLayout(layout); - GridData gd = new GridData(GridData.FILL_HORIZONTAL); - gd.horizontalSpan = 1; - group.setLayoutData(gd); - - title = new Text(group, SWT.BORDER); - gd = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); - title.setLayoutData(gd); - title.setText(titleString); - - title.addKeyListener(new KeyListener() { - - public void keyPressed(KeyEvent e) { - // ignore - } - - public void keyReleased(KeyEvent e) { - setPageComplete(canFlipToNextPage()); - } - }); - } - - public boolean canFlipToNextPage() { - if (getErrorMessage() != null || !isPageComplete()) - return false; - - return true; - } - - @Override - public boolean isPageComplete() { - if (title != null && !title.getText().equals("")) { - return true; - } - return false; - } - - public String getQueryTitle() { - return title != null ? title.getText() : ""; - } - - public abstract AbstractRepositoryQuery getQuery(); - - public void saveWidgetValues() { - // empty - } - - public void setContainer(ISearchPageContainer container) { - scontainer = container; - } - - public boolean inSearchContainer() { - return scontainer != null; - } - - public boolean performAction() { - return false; - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/AbstractRepositorySearchQuery.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/AbstractRepositorySearchQuery.java deleted file mode 100644 index 8fe0478ac..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/AbstractRepositorySearchQuery.java +++ /dev/null @@ -1,44 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.search; - -import org.eclipse.search.ui.ISearchQuery; -import org.eclipse.search.ui.ISearchResult; - -/** - * @author Rob Elves - */ -public abstract class AbstractRepositorySearchQuery implements ISearchQuery { - - /** The collection of all the matches. */ - private RepositorySearchResult searchResult; - - public String getLabel() { - return "Querying Repository..."; - } - - public boolean canRerun() { - return true; - } - - public boolean canRunInBackground() { - return true; - } - - public ISearchResult getSearchResult() { - if (searchResult == null) { - searchResult = new RepositorySearchResult(this); - } - return searchResult; - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/OpenSearchResultAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/OpenSearchResultAction.java deleted file mode 100644 index f3a0079fb..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/OpenSearchResultAction.java +++ /dev/null @@ -1,75 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui.search; - -import java.util.Iterator; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; - -/** - * This class is used to open a bug report in an editor. - */ -public class OpenSearchResultAction extends Action { - - /** The view this action works on */ - private RepositorySearchResultView resultView; - - /** - * Constructor - * - * @param text - * The text for this action - * @param resultView - * The <code>RepositorySearchResultView</code> this action - * works on - */ - public OpenSearchResultAction(String text, RepositorySearchResultView resultView) { - setText(text); - this.resultView = resultView; - } - - /** - * Open the selected bug reports in their own editors. - */ - @SuppressWarnings("unchecked") - @Override - public void run() { - - // Get the selected items - ISelection s = resultView.getViewer().getSelection(); - if (s instanceof IStructuredSelection) { - IStructuredSelection selection = (IStructuredSelection) s; - - // go through each of the selected items and show it in an editor - for (Iterator<AbstractQueryHit> it = selection.iterator(); it.hasNext();) { - AbstractQueryHit repositoryHit = it.next(); - TaskUiUtil.openRepositoryTask(repositoryHit.getRepositoryUrl(), repositoryHit.getId(), repositoryHit.getUrl()); - // try { - // int id = Integer.parseInt(repositoryHit.getId()); - // String bugUrl = - // BugzillaServerFacade.getBugUrlWithoutLogin(repositoryHit.getRepositoryUrl(), - // id); - // TaskUiUtil.openRepositoryTask(repositoryHit.getRepositoryUrl(), - // "" + repositoryHit.getId(), bugUrl); - // } catch (NumberFormatException e) { - // MylarStatusHandler.fail(e, "Could not open, malformed id: " + - // repositoryHit.getId(), true); - // } - } - - } - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/RepositorySearchResult.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/RepositorySearchResult.java deleted file mode 100644 index 110fdc3ad..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/RepositorySearchResult.java +++ /dev/null @@ -1,125 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.search; - -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.search.internal.ui.SearchPluginImages; -import org.eclipse.search.ui.ISearchQuery; -import org.eclipse.search.ui.text.AbstractTextSearchResult; -import org.eclipse.search.ui.text.IEditorMatchAdapter; -import org.eclipse.search.ui.text.IFileMatchAdapter; - -/** - * The collection of all the matches. - * - * @author Rob Elves (moved into task.ui) - * @see org.eclipse.search.ui.text.AbstractTextSearchResult - */ -public class RepositorySearchResult extends AbstractTextSearchResult { - - /** - * The query producing this result. - */ - private ISearchQuery repositoryQuery; - - /** - * Constructor for <code>RepositorySearchResult</code> class. - * - * @param query - * <code>AbstractRepositorySearchQuery</code> that is producing - * this result. - */ - public RepositorySearchResult(ISearchQuery query) { - super(); - repositoryQuery = query; - } - - @Override - public IEditorMatchAdapter getEditorMatchAdapter() { - // IBugzillaResultEditorMatchAdapter adapter = - // BugzillaUiPlugin.getResultEditorMatchAdapter(); - // if (adapter == null) { - // return null; - // } else { - // adapter.setResult(this); - // return adapter; - // } - return null; - } - - /** - * This function always returns <code>null</code>, as the matches for - * this implementation of <code>AbstractTextSearchResult</code> never - * contain files. - * - * @see org.eclipse.search.ui.text.AbstractTextSearchResult#getFileMatchAdapter() - */ - @Override - public IFileMatchAdapter getFileMatchAdapter() { - return null; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.search.ui.ISearchResult#getLabel() - */ - public String getLabel() { - return getMatchCount() == 1 ? getSingularLabel() : getPluralLabel(); - } - - /** - * Get the singular label for the number of results - * - * @return The singular label - */ - protected String getSingularLabel() { - return "Task search - 1 match"; - } - - /** - * Get the plural label for the number of results - * - * @return The plural label - */ - protected String getPluralLabel() { - return "Task search - " + getMatchCount() + " matches"; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.search.ui.ISearchResult#getTooltip() - */ - public String getTooltip() { - return getLabel(); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.search.ui.ISearchResult#getImageDescriptor() - */ - public ImageDescriptor getImageDescriptor() { - return SearchPluginImages.DESC_OBJ_TSEARCH_DPDN; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.search.ui.ISearchResult#getQuery() - */ - public ISearchQuery getQuery() { - return repositoryQuery; - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/RepositorySearchResultView.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/RepositorySearchResultView.java deleted file mode 100644 index 57b6901ee..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/RepositorySearchResultView.java +++ /dev/null @@ -1,347 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui.search; - -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.jface.viewers.ILabelDecorator; -import org.eclipse.jface.viewers.ILabelProvider; -import org.eclipse.jface.viewers.StructuredViewer; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.mylar.internal.tasks.ui.TaskListColorsAndFonts; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.internal.tasks.ui.views.TaskElementLabelProvider; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListTableLabelProvider; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.search.internal.ui.SearchMessages; -import org.eclipse.search.internal.ui.SearchPlugin; -import org.eclipse.search.internal.ui.SearchPreferencePage; -import org.eclipse.search.ui.IContextMenuConstants; -import org.eclipse.search.ui.text.AbstractTextSearchViewPage; -import org.eclipse.search.ui.text.Match; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.ui.IPageLayout; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.part.IShowInTargetList; -import org.eclipse.ui.themes.IThemeManager; - -/** - * Displays the results of a Repository search. - * - * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage - */ -public class RepositorySearchResultView extends AbstractTextSearchViewPage implements IAdaptable { - - // The categories to sort bug results by - - public static final int ORDER_PRIORITY = 1; - - public static final int ORDER_DESCRIPTION = 2; - - public static final int ORDER_SEVERITY = 3; - - public static final int ORDER_STATUS = 4; - - public static final int ORDER_ID = 5; - - public static final int ORDER_DEFAULT = ORDER_PRIORITY; - - private static final String KEY_SORTING = TasksUiPlugin.PLUGIN_ID + ".search.resultpage.sorting"; //$NON-NLS-1$ - - private SearchResultContentProvider bugContentProvider; - - private int bugCurrentSortOrder; - - // private SearchResultSortAction bugSortByIDAction; - - // private SearchResultSortAction bugSortBySeverityAction; - - private SearchResultSortAction bugSortByPriorityAction; - - private SearchResultSortAction bugSortByDescriptionAction; - - // private SearchResultSortAction bugSortByStatusAction; - - // private AddFavoriteAction addToFavoritesAction; - - private OpenSearchResultAction openInEditorAction; - - private static final String[] SHOW_IN_TARGETS = new String[] { IPageLayout.ID_RES_NAV }; - - private static final IShowInTargetList SHOW_IN_TARGET_LIST = new IShowInTargetList() { - public String[] getShowInTargetIds() { - return SHOW_IN_TARGETS; - } - }; - - private IPropertyChangeListener bugPropertyChangeListener; - - /** - * Constructor - */ - public RepositorySearchResultView() { - // Only use the table layout. - super(FLAG_LAYOUT_FLAT); - - bugSortByPriorityAction = new SearchResultSortAction("Bug priority", this, ORDER_PRIORITY); - bugSortByDescriptionAction = new SearchResultSortAction("Bug Description", this, ORDER_DESCRIPTION); - // bugSortByIDAction = new SearchResultSortAction("Bug ID", this, - // ORDER_ID); - // bugSortBySeverityAction = new SearchResultSortAction("Bug severity", - // this, ORDER_SEVERITY); - // bugSortByStatusAction = new SearchResultSortAction("Bug status", - // this, - // ORDER_STATUS); - bugCurrentSortOrder = ORDER_DEFAULT; - - // addToFavoritesAction = new AddFavoriteAction("Mark Result as - // Favorite", this); - openInEditorAction = new OpenSearchResultAction("Open in Editor", this); - - bugPropertyChangeListener = new IPropertyChangeListener() { - public void propertyChange(PropertyChangeEvent event) { - if (SearchPreferencePage.LIMIT_TABLE.equals(event.getProperty()) - || SearchPreferencePage.LIMIT_TABLE_TO.equals(event.getProperty())) - if (getViewer() instanceof TableViewer) { - getViewPart().updateLabel(); - getViewer().refresh(); - } - } - }; - SearchPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(bugPropertyChangeListener); - } - - @Override - protected void elementsChanged(Object[] objects) { - if (bugContentProvider != null) { - bugContentProvider.elementsChanged(objects); - } - } - - @Override - protected void clear() { - if (bugContentProvider != null) { - bugContentProvider.clear(); - } - } - - // Allows the inherited method "getViewer" to be accessed publicly. - @Override - public StructuredViewer getViewer() { - return super.getViewer(); - } - - @Override - protected void configureTreeViewer(TreeViewer viewer) { - // The tree layout is not used, so this function does not need to do - // anything. - - } - - @Override - protected void configureTableViewer(TableViewer viewer) { - viewer.setUseHashlookup(true); - String[] columnNames = new String[] { "", "!", "Description" }; - TableColumn[] columns = new TableColumn[columnNames.length]; - int[] columnWidths = new int[] { 20, 20, 500 }; - viewer.setColumnProperties(columnNames); - - viewer.getTable().setHeaderVisible(false); - for (int i = 0; i < columnNames.length; i++) { - columns[i] = new TableColumn(viewer.getTable(), 0, i); // SWT.LEFT - columns[i].setText(columnNames[i]); - columns[i].setWidth(columnWidths[i]); - columns[i].setData(new Integer(i)); - columns[i].addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent e) { - TableColumn col = (TableColumn) e.getSource(); - Integer integer = (Integer) col.getData(); - setSortOrder(integer.intValue()); - } - }); - } - - // TaskElementLabelProvider BugzillaLabelProvider - IThemeManager themeManager = getSite().getWorkbenchWindow().getWorkbench().getThemeManager(); - Color categoryBackground = themeManager.getCurrentTheme().getColorRegistry().get( - TaskListColorsAndFonts.THEME_COLOR_TASKLIST_CATEGORY); - - SearchViewTableLabelProvider taskListTableLabelProvider = new SearchViewTableLabelProvider( - new TaskElementLabelProvider(), PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator(), - categoryBackground); - - viewer.setLabelProvider(taskListTableLabelProvider); - viewer.setContentProvider(new SearchResultTableContentProvider(this)); - - // Set the order when the search view is loading so that the items are - // sorted right away - setSortOrder(bugCurrentSortOrder); - - bugContentProvider = (SearchResultContentProvider) viewer.getContentProvider(); - } - - /** - * Sets the new sorting category, and reorders all of the bug reports. - * - * @param sortOrder - * The new category to sort bug reports by - */ - public void setSortOrder(int sortOrder) { - StructuredViewer viewer = getViewer(); - - switch (sortOrder) { - case ORDER_ID: - viewer.setSorter(new SearchResultSorterId()); - break; - case ORDER_DESCRIPTION: - viewer.setSorter(new SearchResultSorterDescription()); - break; - case ORDER_PRIORITY: - viewer.setSorter(new SearchResultSorterPriority()); - break; - // case ORDER_SEVERITY: - // viewer.setSorter(new BugzillaSeveritySearchSorter()); - // break; - // case ORDER_STATUS: - // viewer.setSorter(new BugzillaStateSearchSorter()); - // break; - default: - // If the setting is not one of the four valid ones, - // use the default order setting. - sortOrder = ORDER_DEFAULT; - viewer.setSorter(new SearchResultSorterPriority()); - break; - } - bugCurrentSortOrder = sortOrder; - getSettings().put(KEY_SORTING, bugCurrentSortOrder); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) - */ - public Object getAdapter(Class adapter) { - if (IShowInTargetList.class.equals(adapter)) { - return SHOW_IN_TARGET_LIST; - } - return null; - } - - @Override - protected void showMatch(Match match, int currentOffset, int currentLength, boolean activate) - throws PartInitException { - AbstractQueryHit repositoryHit = (AbstractQueryHit) match.getElement(); - - TaskUiUtil.openRepositoryTask(repositoryHit.getRepositoryUrl(), repositoryHit.getId(), repositoryHit.getUrl()); - - // try { - // int id = Integer.parseInt(repositoryHit.getId()); - // String bugUrl = - // BugzillaServerFacade.getBugUrlWithoutLogin(repositoryHit.getRepositoryUrl(), - // id); - // TaskUiUtil.openRepositoryTask(repositoryHit.getRepositoryUrl(), - // repositoryHit.getId(), bugUrl); - // } catch (NumberFormatException e) { - // MylarStatusHandler.fail(e, "Could not open, malformed id: " + - // repositoryHit.getId(), true); - // } - } - - @Override - protected void fillContextMenu(IMenuManager mgr) { - super.fillContextMenu(mgr); - - // Create the submenu for sorting - MenuManager sortMenu = new MenuManager(SearchMessages.SortDropDownAction_label); //$NON-NLS-1$ - sortMenu.add(bugSortByPriorityAction); - sortMenu.add(bugSortByDescriptionAction); - // sortMenu.add(bugSortByIDAction); - // sortMenu.add(bugSortBySeverityAction); - // sortMenu.add(bugSortByStatusAction); - - // Check the right sort option - - bugSortByPriorityAction.setChecked(bugCurrentSortOrder == bugSortByPriorityAction.getSortOrder()); - bugSortByDescriptionAction.setChecked(bugCurrentSortOrder == bugSortByDescriptionAction.getSortOrder()); - // bugSortByIDAction.setChecked(bugCurrentSortOrder == - // bugSortByIDAction.getSortOrder()); - // bugSortBySeverityAction.setChecked(bugCurrentSortOrder == - // bugSortBySeverityAction.getSortOrder()); - // bugSortByStatusAction.setChecked(bugCurrentSortOrder == - // bugSortByStatusAction.getSortOrder()); - - // Add the new context menu items - mgr.appendToGroup(IContextMenuConstants.GROUP_VIEWER_SETUP, sortMenu); - // mgr.appendToGroup(IContextMenuConstants.GROUP_ADDITIONS, - // addToFavoritesAction); - mgr.appendToGroup(IContextMenuConstants.GROUP_OPEN, openInEditorAction); - } - - class SearchViewTableLabelProvider extends TaskListTableLabelProvider { - - public SearchViewTableLabelProvider(ILabelProvider provider, ILabelDecorator decorator, Color parentBackground) { - super(provider, decorator, parentBackground, null); - } - - @Override - public Image getColumnImage(Object element, int columnIndex) { - switch (columnIndex) { - case 0: - ++columnIndex; - break; - case 1: - ++columnIndex; - break; - case 2: - columnIndex = 2 + columnIndex; - break; - } - return super.getColumnImage(element, columnIndex); - } - - @Override - public String getColumnText(Object obj, int columnIndex) { - switch (columnIndex) { - case 0: - ++columnIndex; - break; - case 1: - ++columnIndex; - break; - case 2: - columnIndex = 2 + columnIndex; - break; - } - return super.getColumnText(obj, columnIndex); - } - - @Override - public Color getBackground(Object element, int columnIndex) { - // Note: see bug 142889 - return null; - } - - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchHitCollector.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchHitCollector.java deleted file mode 100644 index d6629c166..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchHitCollector.java +++ /dev/null @@ -1,129 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui.search; - -import java.net.Proxy; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.core.runtime.Status; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.QueryHitCollector; -import org.eclipse.mylar.tasks.core.TaskList; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.search.ui.ISearchQuery; -import org.eclipse.search.ui.ISearchResult; -import org.eclipse.search.ui.NewSearchUI; -import org.eclipse.search.ui.text.Match; - -/** - * Used for returning results from Eclipse Search view. Collects results of a - * repository search - * - * @author Rob Elves - */ -public class SearchHitCollector extends QueryHitCollector implements ISearchQuery { - - private static final String QUERYING_REPOSITORY = "Querying Repository..."; - - private Proxy proxySettings; - - private TaskRepository repository; - - private AbstractRepositoryQuery repositoryQuery; - - private RepositorySearchResult searchResult; - - public SearchHitCollector(TaskList tasklist, TaskRepository repository, AbstractRepositoryQuery repositoryQuery, - Proxy proxySettings) { - super(tasklist); - this.repository = repository; - this.repositoryQuery = repositoryQuery; - this.proxySettings = proxySettings; - this.searchResult = new RepositorySearchResult(this); - } - - public void aboutToStart(int startMatchCount) throws CoreException { - super.aboutToStart(startMatchCount); - searchResult.removeAll(); - NewSearchUI.activateSearchResultView(); - } - - public void done() { - super.done(); - } - - @Override - public void addMatch(AbstractQueryHit hit) { - super.addMatch(hit); - this.searchResult.addMatch(new Match(hit, 0, 0)); - } - - public String getLabel() { - return QUERYING_REPOSITORY; - } - - public boolean canRerun() { - return true; - } - - public boolean canRunInBackground() { - return true; - } - - public ISearchResult getSearchResult() { - return searchResult; - } - - public IStatus run(IProgressMonitor monitor) throws OperationCanceledException { - this.setProgressMonitor(monitor); - IStatus status = Status.OK_STATUS; - try { - aboutToStart(0); - monitor.beginTask(QUERYING_REPOSITORY, IProgressMonitor.UNKNOWN); - - if (monitor.isCanceled()) { - throw new OperationCanceledException("Search cancelled"); - } - AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager().getRepositoryConnector( - repositoryQuery.getRepositoryKind()); - if (connector != null) { - status = connector.performQuery(repositoryQuery, repository, proxySettings, monitor, this); - } else { - return new Status(IStatus.ERROR, TasksUiPlugin.PLUGIN_ID, IStatus.OK, - "repository connector could not be found", null); - } - - if (!status.isOK()) { - MylarStatusHandler.fail(status.getException(), "Search failed. Please see details below.", true); - status = Status.OK_STATUS; - } - - } catch (CoreException e) { - MylarStatusHandler.fail(e, "Search failed.", true); - status = new Status(IStatus.OK, TasksUiPlugin.PLUGIN_ID, IStatus.ERROR, - "Core Exception occurred while querying Bugzilla Server " + repository.getUrl() + ".\n" - + "\nClick Details for more information.", e); - - } finally { - // deals with monitor - done(); - } - return status; - } - -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultContentProvider.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultContentProvider.java deleted file mode 100644 index 84943c02e..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultContentProvider.java +++ /dev/null @@ -1,64 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.search; - -import org.eclipse.jface.viewers.IStructuredContentProvider; -import org.eclipse.jface.viewers.Viewer; - -/** - * @author Rob Elves (moved into task.ui) - * @see org.eclipse.jface.viewers.IContentProvider - */ -public abstract class SearchResultContentProvider implements IStructuredContentProvider { - - /** An empty array of objects */ - protected final Object[] EMPTY_ARR = new Object[0]; - - /** The search result for this content provider */ - protected RepositorySearchResult searchResult; - - public void dispose() { - // nothing to do - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - if (newInput instanceof RepositorySearchResult) { - initialize((RepositorySearchResult) newInput); - } - } - - /** - * Initializes the content provider with the given search result. - * - * @param result - * The search result to use with this content provider - */ - protected void initialize(RepositorySearchResult result) { - searchResult = result; - } - - /** - * This method is called whenever the set of matches for the given elements - * changes. - * - * @param updatedElements - * The array of objects that has to be refreshed - * @see - * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#elementsChanged(java.lang.Object[]) - */ - public abstract void elementsChanged(Object[] updatedElements); - - /** - * Clears the viewer. - */ - public abstract void clear(); -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultSorterDescription.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultSorterDescription.java deleted file mode 100644 index 25531edc6..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultSorterDescription.java +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.search; - -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerSorter; -import org.eclipse.mylar.internal.tasks.ui.views.TaskKeyComparator; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; - -/** - * Sorts search results by description. - * - * @author Rob Elves - */ -public class SearchResultSorterDescription extends ViewerSorter { - - private TaskKeyComparator taskKeyComparator = new TaskKeyComparator(); - - /** - * Returns a negative, zero, or positive number depending on whether the - * first bug's description goes before, is the same as, or goes after the - * second element's description. - * <p> - * - * @see org.eclipse.jface.viewers.ViewerSorter#compare(org.eclipse.jface.viewers.Viewer, - * java.lang.Object, java.lang.Object) - */ - @Override - public int compare(Viewer viewer, Object e1, Object e2) { - try { - - AbstractQueryHit entry1 = (AbstractQueryHit) e1; - AbstractQueryHit entry2 = (AbstractQueryHit) e2; - return taskKeyComparator.compare(entry1.getDescription(), entry2.getDescription()); - } catch (Exception ignored) { - // do nothing - } - - // if that didn't work, use the default compare method - return super.compare(viewer, e1, e2); - } - - /** - * Returns the category of the given element. The category is a number used - * to allocate elements to bins; the bins are arranged in ascending numeric - * order. The elements within a bin are arranged via a second level sort - * criterion. - * <p> - * - * @see org.eclipse.jface.viewers.ViewerSorter#category(Object) - */ - @Override - public int category(Object element) { - try { - AbstractQueryHit hit = (AbstractQueryHit) element; - return Integer.parseInt(hit.getId()); - } catch (Exception ignored) { - // ignore if - } - // if that didn't work, use the default category method - return super.category(element); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultSorterId.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultSorterId.java deleted file mode 100644 index bfc2e4095..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultSorterId.java +++ /dev/null @@ -1,75 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.search; - -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerSorter; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; - -/** - * Sorts search results (AbstractQueryHit) by id. - */ -public class SearchResultSorterId extends ViewerSorter { - - /** - * Returns a negative, zero, or positive number depending on whether the - * first bug's id is less than, equal to, or greater than the second bug's - * id. - * <p> - * - * @see org.eclipse.jface.viewers.ViewerSorter#compare(org.eclipse.jface.viewers.Viewer, - * java.lang.Object, java.lang.Object) - */ - @Override - public int compare(Viewer viewer, Object e1, Object e2) { - try { - // cast the object and get its bug id - AbstractQueryHit entry1 = (AbstractQueryHit) e1; - Integer id1 = Integer.parseInt(entry1.getId()); - - // cast the other object and get its bug id - AbstractQueryHit entry2 = (AbstractQueryHit) e2; - Integer id2 = Integer.parseInt(entry2.getId()); - - // if neither is null, compare the bug id's - if (id1 != null && id2 != null) { - return id1.compareTo(id2); - } - } catch (Exception ignored) { - // ignore if there is a problem - } - - // if that didn't work, use the default compare method - return super.compare(viewer, e1, e2); - } - - /** - * Returns the category of the given element. The category is a number used - * to allocate elements to bins; the bins are arranged in ascending numeric - * order. The elements within a bin are arranged via a second level sort - * criterion. - * <p> - * - * @see org.eclipse.jface.viewers.ViewerSorter#category(Object) - */ - @Override - public int category(Object element) { - try { - AbstractQueryHit hit = (AbstractQueryHit) element; - return Integer.parseInt(hit.getId()); - } catch (Exception ignored) { - // ignore - } - // if that didn't work, use the default category method - return super.category(element); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultSorterPriority.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultSorterPriority.java deleted file mode 100644 index 139a17180..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultSorterPriority.java +++ /dev/null @@ -1,86 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.search; - -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerSorter; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; - -/** - * Sorts results of Bugzilla search by bug priority. - * @author Rob Elves (modifications) - */ -public class SearchResultSorterPriority extends ViewerSorter { - - /** - * Returns a negative, zero, or positive number depending on whether the - * first bug's priority goes before, is the same as, or goes after the - * second element's priority. - * <p> - * - * @see org.eclipse.jface.viewers.ViewerSorter#compare(org.eclipse.jface.viewers.Viewer, - * java.lang.Object, java.lang.Object) - */ - @Override - public int compare(Viewer viewer, Object e1, Object e2) { - try { - - AbstractQueryHit entry1 = (AbstractQueryHit) e1; - AbstractQueryHit entry2 = (AbstractQueryHit) e2; - return entry1.getPriority().compareTo(entry2.getPriority()); - - // Code below based on relative position within list of priorities - - // BugzillaQueryHit entry1 = (BugzillaQueryHit) e1; - // String[] priorityLevels = - // BugzillaUiPlugin.getQueryOptions(IBugzillaConstants.VALUES_PRIORITY, - // null, entry1 - // .getRepositoryUrl()); - // if (priorityLevels != null && priorityLevels.length > 0) { - // List<String> levels = Arrays.asList(priorityLevels); - // Integer pr1 = new Integer(levels.indexOf(entry1.getPriority())); - // - // BugzillaQueryHit entry2 = (BugzillaQueryHit) e2; - // Integer pr2 = new Integer(levels.indexOf(entry2.getPriority())); - // if (pr1 != null && pr2 != null) { - // return pr1.compareTo(pr2); - // } - // } - } catch (Exception ignored) { - // do nothing - } - - // if that didn't work, use the default compare method - return super.compare(viewer, e1, e2); - } - - /** - * Returns the category of the given element. The category is a number used - * to allocate elements to bins; the bins are arranged in ascending numeric - * order. The elements within a bin are arranged via a second level sort - * criterion. - * <p> - * - * @see org.eclipse.jface.viewers.ViewerSorter#category(Object) - */ - @Override - public int category(Object element) { - try { - AbstractQueryHit hit = (AbstractQueryHit) element; - return Integer.parseInt(hit.getId()); - } catch (Exception ignored) { - // ignore if there is a problem - } - // if that didn't work, use the default category method - return super.category(element); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultTableContentProvider.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultTableContentProvider.java deleted file mode 100644 index 1df0d84a5..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultTableContentProvider.java +++ /dev/null @@ -1,93 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.search; - -import org.eclipse.jface.viewers.IStructuredContentProvider; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.search.internal.ui.SearchPreferencePage; - -/** - * This implementation of <code>SearchResultContentProvider</code> is used for the - * table view of a Bugzilla search result. - * - * @author Rob Elves (moved into task.ui) - */ -public class SearchResultTableContentProvider extends SearchResultContentProvider implements IStructuredContentProvider { - - /** The page the Bugzilla search results are displayed in */ - private RepositorySearchResultView bugPage; - - /** - * Constructor - * - * @param page - * The page the Bugzilla search results are displayed in - */ - public SearchResultTableContentProvider(RepositorySearchResultView page) { - bugPage = page; - } - - @Override - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - if (newInput instanceof RepositorySearchResult) { - searchResult = (RepositorySearchResult) newInput; - } - } - - @Override - public void elementsChanged(Object[] updatedElements) { - TableViewer viewer = getViewer(); - boolean tableLimited = SearchPreferencePage.isTableLimited(); - for (int i = 0; i < updatedElements.length; i++) { - if (searchResult.getMatchCount(updatedElements[i]) > 0) { - if (viewer.testFindItem(updatedElements[i]) != null) - viewer.update(updatedElements[i], null); - else { - if (!tableLimited || viewer.getTable().getItemCount() < SearchPreferencePage.getTableLimit()) - viewer.add(updatedElements[i]); - } - } else - viewer.remove(updatedElements[i]); - } - } - - /** - * Returns the viewer the bug results are displayed in. - */ - private TableViewer getViewer() { - return (TableViewer) bugPage.getViewer(); - } - - @Override - public void clear() { - getViewer().refresh(); - } - - /** - * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) - */ - public Object[] getElements(Object inputElement) { - if (inputElement instanceof RepositorySearchResult) { - Object[] elements = ((RepositorySearchResult) inputElement).getElements(); - int tableLimit = SearchPreferencePage.getTableLimit(); - if (SearchPreferencePage.isTableLimited() && elements.length > tableLimit) { - Object[] shownElements = new Object[tableLimit]; - System.arraycopy(elements, 0, shownElements, 0, tableLimit); - return shownElements; - } - return elements; - } - return EMPTY_ARR; - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/BackgroundSaveTimer.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/BackgroundSaveTimer.java deleted file mode 100644 index 925ee7988..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/BackgroundSaveTimer.java +++ /dev/null @@ -1,103 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui.util; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.context.core.util.ITimerThreadListener; -import org.eclipse.mylar.internal.context.core.util.TimerThread; - -/** - * Timer that periodically runs saveRequested() on its client as a job - * - * @author Wesley Coelho - */ -public class BackgroundSaveTimer implements ITimerThreadListener { - - private final static int DEFAULT_SAVE_INTERVAL = 60 * 1000; - - private int saveInterval = DEFAULT_SAVE_INTERVAL; - - private IBackgroundSaveListener listener = null; - - private TimerThread timer = null; - - private boolean forceSyncExec = false; - - public BackgroundSaveTimer(IBackgroundSaveListener listener) { - this.listener = listener; - timer = new TimerThread(saveInterval); - timer.addListener(this); - } - - public void start() { - timer.start(); - } - - public void stop() { - timer.kill(); - } - - public void setSaveIntervalMillis(int saveIntervalMillis) { - this.saveInterval = saveIntervalMillis; - timer.setTimeoutMillis(saveIntervalMillis); - } - - public int getSaveIntervalMillis() { - return saveInterval; - } - - /** - * For testing - */ - public void setForceSyncExec(boolean forceSyncExec) { - this.forceSyncExec = forceSyncExec; - } - - /** - * Called by the ActivityTimerThread Calls save in a new job - */ - public void fireTimedOut() { - try { - if (!forceSyncExec) { - final SaveJob job = new SaveJob("Saving Task Data", listener); - job.schedule(); - } else { - listener.saveRequested(); - } - } catch (RuntimeException e) { - MylarStatusHandler.log("Could not schedule save job", this); - } - } - - /** Job that makes the save call */ - private class SaveJob extends Job { - private IBackgroundSaveListener listener = null; - - public SaveJob(String name, IBackgroundSaveListener listener) { - super(name); - this.listener = listener; - } - - protected IStatus run(IProgressMonitor monitor) { - listener.saveRequested(); - return Status.OK_STATUS; - } - } - - public void intervalElapsed() { - // ignore - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TaskDataExportJob.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TaskDataExportJob.java deleted file mode 100644 index d5fb2e4f2..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TaskDataExportJob.java +++ /dev/null @@ -1,258 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.util; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.mylar.context.core.ContextCorePlugin; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.context.core.MylarContextManager; -import org.eclipse.mylar.internal.context.core.util.ZipFileUtil; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.TaskRepositoryManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * Job that performs exporting (copying or zipping) of Mylar Task List data - * Assumes that check with user for overwrite already done. Overwrites destination if exists! - * @author Wesley Coelho - * @author Mik Kersten - * @author Rob Elves - */ -public class TaskDataExportJob implements IRunnableWithProgress { - - private static final String JOB_LABEL = "Exporting Mylar Task Data"; - - private boolean zip; - - private boolean exportTaskList; - - private boolean exportActivationHistory; - - private boolean exportTaskContexts; - - private String destinationDirectory; - - private String zipFileName; - - private File destZipFile = null; - - private Collection<ITask> tasks; - - /** export all data */ - public TaskDataExportJob(String destinationDirectory, boolean zipIt, String zipFileName) { - this(destinationDirectory, true, true, true, zipIt, zipFileName, TasksUiPlugin.getTaskListManager().getTaskList().getAllTasks()); - } - - /** export specified data */ - public TaskDataExportJob(String destinationDirectory, boolean exportTaskList, boolean exportActivationHistory, - boolean exportTaskContexts, boolean zipIt, String zipFileName, Collection<ITask> taskContextsToExport) { - this.zipFileName = zipFileName; - this.zip = zipIt; - this.exportTaskList = exportTaskList; - this.exportActivationHistory = exportActivationHistory; - this.exportTaskContexts = exportTaskContexts; - this.destinationDirectory = destinationDirectory; - this.tasks = taskContextsToExport; - } - - public void run(final IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - //Collection<ITask> tasks = MylarTaskListPlugin.getTaskListManager().getTaskList().getAllTasks(); - int jobSize = 1; // 1 for repositories.xml - if (exportTaskList) - jobSize++; - if (exportActivationHistory) - jobSize++; - if (exportTaskContexts) - jobSize += tasks.size(); - monitor.beginTask(JOB_LABEL, jobSize); - - // List of files to add to the zip archive - List<File> filesToZip = new ArrayList<File>(); - - // Map of file paths used to avoid duplicates - Map<String, String> filesToZipMap = new HashMap<String, String>(); - - - // Create folders in zip file before contained files - String sourceContextsPath = TasksUiPlugin.getDefault().getDataDirectory() + File.separator - + MylarContextManager.CONTEXTS_DIRECTORY; - File contextsDirectory = new File(sourceContextsPath); -// if(contextsDirectory.exists()) { -// filesToZip.add(contextsDirectory); -// } - - if (true) { - // Repositories always exported - TasksUiPlugin.getRepositoryManager().saveRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - - String sourceRepositoriesPath = TasksUiPlugin.getDefault().getDataDirectory() + File.separator - + TaskRepositoryManager.DEFAULT_REPOSITORIES_FILE; - File sourceRepositoriesFile = new File(sourceRepositoriesPath); - if (sourceRepositoriesFile.exists()) { - File destRepositoriesFile = new File(destinationDirectory + File.separator - + TaskRepositoryManager.DEFAULT_REPOSITORIES_FILE); - - if (zip) { - filesToZip.add(sourceRepositoriesFile); - } else if(!destRepositoriesFile.equals(sourceRepositoriesFile)) { - if (destRepositoriesFile.exists()) { - destRepositoriesFile.delete(); - } - if (!copy(sourceRepositoriesFile, destRepositoriesFile)) { - MylarStatusHandler.fail(new Exception("Export Exception"), "Could not export repositories file.", - false); - } - monitor.worked(1); - } - } - - } - - - - if (exportTaskList) { - TasksUiPlugin.getTaskListManager().saveTaskList(); - - String sourceTaskListPath = TasksUiPlugin.getDefault().getDataDirectory() + File.separator - + TasksUiPlugin.DEFAULT_TASK_LIST_FILE; - File sourceTaskListFile = new File(sourceTaskListPath); - if (sourceTaskListFile.exists()) { - File destTaskListFile = new File(destinationDirectory + File.separator - + TasksUiPlugin.DEFAULT_TASK_LIST_FILE); - - if (zip) { - filesToZip.add(sourceTaskListFile); - } else if(!destTaskListFile.equals(sourceTaskListFile)) { - if (destTaskListFile.exists()) { - destTaskListFile.delete(); - } - if (!copy(sourceTaskListFile, destTaskListFile)) { - MylarStatusHandler.fail(new Exception("Export Exception"), "Could not export task list file.", - false); - } - monitor.worked(1); - } - } - - } - - if (exportActivationHistory) { - try { - File sourceActivationHistoryFile = new File(contextsDirectory, MylarContextManager.CONTEXT_HISTORY_FILE_NAME - + MylarContextManager.CONTEXT_FILE_EXTENSION); - - if (sourceActivationHistoryFile.exists()) { - - ContextCorePlugin.getContextManager().saveActivityHistoryContext(); - - File destActivationHistoryFile = new File(destinationDirectory + File.separator - + MylarContextManager.CONTEXT_HISTORY_FILE_NAME - + MylarContextManager.CONTEXT_FILE_EXTENSION); - - - if (zip) { - filesToZip.add(sourceActivationHistoryFile); - } else if(!destActivationHistoryFile.equals(sourceActivationHistoryFile)){ - if (destActivationHistoryFile.exists()) { - destActivationHistoryFile.delete(); - } - copy(sourceActivationHistoryFile, destActivationHistoryFile); - monitor.worked(1); - } - } - } catch (RuntimeException e) { - MylarStatusHandler.fail(e, "Could not export activity history context file", true); - } - } - - if (exportTaskContexts) { - // Prevent many repeated error messages - boolean errorDisplayed = false; - for (ITask task : tasks) { - - if (!ContextCorePlugin.getContextManager().hasContext(task.getHandleIdentifier())) { - continue; // Tasks without a context have no file to - // copy - } - - File sourceTaskFile = ContextCorePlugin.getContextManager().getFileForContext(task.getHandleIdentifier()); - - File destTaskFile = new File(destinationDirectory + File.separator + sourceTaskFile.getName()); - - if (zip) { - if (!filesToZipMap.containsKey(task.getHandleIdentifier())) { - filesToZip.add(sourceTaskFile); - filesToZipMap.put(task.getHandleIdentifier(), null); - } - } else if(!sourceTaskFile.equals(destTaskFile)) { - if (destTaskFile.exists()) { - destTaskFile.delete(); - } - if (!copy(sourceTaskFile, destTaskFile) && !errorDisplayed) { - MylarStatusHandler.fail(new Exception("Export Exception: " + sourceTaskFile.getPath() + " -> " - + destTaskFile.getPath()), "Could not export one or more task context files.", true); - errorDisplayed = true; - } - monitor.worked(1); - } - } - } - - if (zip && filesToZip.size() > 0) { - try { - destZipFile = new File(destinationDirectory + File.separator + zipFileName); - if (destZipFile.exists()) { - destZipFile.delete(); - } - ZipFileUtil.createZipFile(destZipFile, filesToZip,TasksUiPlugin.getDefault().getDataDirectory(), monitor); - } catch (Exception e) { - MylarStatusHandler.fail(e, "Could not create zip file.", true); - } - } - monitor.done(); - - } - - private boolean copy(File src, File dst) { - try { - InputStream in = new FileInputStream(src); - OutputStream out = new FileOutputStream(dst); - - // Transfer bytes from in to out - byte[] buf = new byte[1024]; - int len; - while ((len = in.read(buf)) > 0) { - out.write(buf, 0, len); - } - in.close(); - out.close(); - return true; - } catch (IOException ioe) { - return false; - } - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TaskListSaveManager.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TaskListSaveManager.java deleted file mode 100644 index a380309b8..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TaskListSaveManager.java +++ /dev/null @@ -1,215 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.util; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.mylar.context.core.ContextCorePlugin; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.tasks.core.AbstractTaskContainer; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskListChangeListener; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.PlatformUI; - -/** - * @author Mik Kersten - */ -public class TaskListSaveManager implements ITaskListChangeListener, IBackgroundSaveListener { - - private final static int DEFAULT_SAVE_INTERVAL = 5 * 60 * 1000; - - private static final String FILE_SUFFIX_BACKUP = "-backup.xml"; - - private BackgroundSaveTimer saveTimer = null; - - private boolean initializationWarningDialogShow = false; - - /** - * Fort testing. - */ - private boolean forceBackgroundSave = false; - - public TaskListSaveManager() { - saveTimer = new BackgroundSaveTimer(this); - saveTimer.setSaveIntervalMillis(DEFAULT_SAVE_INTERVAL); - saveTimer.start(); - } - - /** - * Called periodically by the save timer - */ - public void saveRequested() { - if (TasksUiPlugin.getDefault() != null && TasksUiPlugin.getDefault().isShellActive() - || forceBackgroundSave) { - try { - saveTaskList(true); - } catch (Exception e) { - MylarStatusHandler.fail(e, "Could not auto save task list", false); - } - } - } - - public void saveTaskList(boolean saveContext) { - if (TasksUiPlugin.getDefault() != null && TasksUiPlugin.getDefault().isInitialized()) { - TasksUiPlugin.getTaskListManager().saveTaskList(); - if (saveContext) { - for (ITask task : new ArrayList<ITask>(TasksUiPlugin.getTaskListManager().getTaskList() - .getActiveTasks())) { - ContextCorePlugin.getContextManager().saveContext(task.getHandleIdentifier()); - } - } - } else { - MylarStatusHandler.log("Possible task list initialization failure, not saving list.", this); - if (PlatformUI.getWorkbench() != null && !initializationWarningDialogShow) { - initializationWarningDialogShow = true; - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - if (PlatformUI.getWorkbench() != null && PlatformUI.getWorkbench().getDisplay() != null) { - MessageDialog.openInformation(PlatformUI.getWorkbench().getDisplay().getActiveShell(), - TasksUiPlugin.TITLE_DIALOG, - "If task list is blank, Mylar Task List may have failed to initialize.\n\n" - + "First, try restarting to see if that corrects the problem.\n\n" - + "Then, check the Error Log view for messages, and the FAQ for solutions.\n\n" - + TasksUiPlugin.URL_HOMEPAGE); - } - } - }); - } - } - } - - /** - * Copies all files in the current data directory to the specified folder. - * Will overwrite. - */ - public void copyDataDirContentsTo(String targetFolderPath) { - File mainDataDir = new File(TasksUiPlugin.getDefault().getDataDirectory()); - - for (File currFile : mainDataDir.listFiles()) { - if (currFile.isFile()) { - File destFile = new File(targetFolderPath + File.separator + currFile.getName()); - copy(currFile, destFile); - } - } - } - - public void createTaskListBackupFile() { - String path = TasksUiPlugin.getDefault().getDataDirectory() + File.separator - + TasksUiPlugin.DEFAULT_TASK_LIST_FILE; - File taskListFile = new File(path); - String backup = path.substring(0, path.lastIndexOf('.')) + FILE_SUFFIX_BACKUP; - copy(taskListFile, new File(backup)); - } - - public String getBackupFilePath() { - String path = TasksUiPlugin.getDefault().getDataDirectory() + File.separator - + TasksUiPlugin.DEFAULT_TASK_LIST_FILE; - return path.substring(0, path.lastIndexOf('.')) + FILE_SUFFIX_BACKUP; - } - - public void reverseBackup() { - String path = TasksUiPlugin.getDefault().getDataDirectory() + File.separator - + TasksUiPlugin.DEFAULT_TASK_LIST_FILE; - File taskListFile = new File(path); - String backup = path.substring(0, path.lastIndexOf('.')) + FILE_SUFFIX_BACKUP; - copy(new File(backup), taskListFile); - } - - private boolean copy(File src, File dst) { - try { - InputStream in = new FileInputStream(src); - OutputStream out = new FileOutputStream(dst); - - // Transfer bytes from in to out - byte[] buf = new byte[1024]; - int len; - while ((len = in.read(buf)) > 0) { - out.write(buf, 0, len); - } - in.close(); - out.close(); - return true; - } catch (IOException ioe) { - return false; - } - } - - public void taskActivated(ITask task) { - // ignore - } - - public void tasksActivated(List<ITask> tasks) { - // ignore - } - - public void taskDeactivated(ITask task) { - saveTaskList(true); - } - - public void localInfoChanged(ITask task) { - saveTaskList(false); - } - - public void repositoryInfoChanged(ITask task) { - // ignore - } - - public void tasklistRead() { - // ignore - } - - /** - * For testing. - */ - public void setForceBackgroundSave(boolean on) { - forceBackgroundSave = on; - saveTimer.setForceSyncExec(on); - } - - public void taskMoved(ITask task, AbstractTaskContainer fromContainer, AbstractTaskContainer toContainer) { - saveTaskList(false); - } - - public void taskDeleted(ITask task) { - saveTaskList(false); - } - - public void containerAdded(AbstractTaskContainer container) { - saveTaskList(false); - } - - public void containerDeleted(AbstractTaskContainer container) { - saveTaskList(false); - } - - public void taskAdded(ITask task) { - saveTaskList(false); - } - - /** For testing only * */ - public BackgroundSaveTimer getSaveTimer() { - return saveTimer; - } - - public void containerInfoChanged(AbstractTaskContainer container) { - saveTaskList(false); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TaskListWriter.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TaskListWriter.java deleted file mode 100644 index fc5944154..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TaskListWriter.java +++ /dev/null @@ -1,585 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui.util; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.List; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; -import java.util.zip.ZipOutputStream; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.Result; -import javax.xml.transform.Source; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerConfigurationException; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.TransformerFactoryConfigurationError; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractTaskContainer; -import org.eclipse.mylar.tasks.core.DelegatingTaskExternalizer; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskListExternalizer; -import org.eclipse.mylar.tasks.core.TaskExternalizationException; -import org.eclipse.mylar.tasks.core.TaskList; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -/** - * @author Mik Kersten - * @author Ken Sueda - */ -public class TaskListWriter { - - public static final String ATTRIBUTE_VERSION = "Version"; - - public static final String ELEMENT_TASK_LIST = "TaskList"; - - private static final String VALUE_VERSION = "1.0.1"; - - private static final String VALUE_VERSION_1_0_0 = "1.0.0"; - - private static final String FILE_SUFFIX_SAVE = "save.xml"; - - private List<ITaskListExternalizer> externalizers; - - private DelegatingTaskExternalizer delagatingExternalizer = new DelegatingTaskExternalizer(); - - private List<Node> orphanedTaskNodes = new ArrayList<Node>(); - - private String readVersion = ""; - - private boolean hasCaughtException = false; - - public void setDelegateExternalizers(List<ITaskListExternalizer> externalizers) { - this.externalizers = externalizers; - this.delagatingExternalizer.setDelegateExternalizers(externalizers); - } - - public void writeTaskList(TaskList taskList, File outFile) { - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - DocumentBuilder db; - Document doc = null; - - try { - db = dbf.newDocumentBuilder(); - doc = db.newDocument(); - } catch (ParserConfigurationException e) { - MylarStatusHandler.log(e, "could not create document"); - } - - Element root = doc.createElement(ELEMENT_TASK_LIST); - root.setAttribute(ATTRIBUTE_VERSION, VALUE_VERSION); - - // create the categories - for (AbstractTaskContainer category : taskList.getCategories()) { - // if (!category.getHandleIdentifier().equals(TaskArchive.HANDLE)) { - delagatingExternalizer.createCategoryElement(category, doc, root); - // } - } - - for (AbstractRepositoryQuery query : taskList.getQueries()) { - Element element = null; - try { - for (ITaskListExternalizer externalizer : externalizers) { - if (externalizer.canCreateElementFor(query)) - element = externalizer.createQueryElement(query, doc, root); - } - if (element == null && delagatingExternalizer.canCreateElementFor(query)) { - delagatingExternalizer.createQueryElement(query, doc, root); - } - } catch (Throwable t) { - MylarStatusHandler.fail(t, "Did not externalize: " + query.getDescription(), true); - } - if (element == null) { - MylarStatusHandler.log("Did not externalize: " + query, this); - } - } - // Collection<ITask> allTasks = - // Collections.synchronizedCollection(taskList.getAllTasks()); - // synchronized (allTasks) { - for (ITask task : new ArrayList<ITask>(taskList.getAllTasks())) { - createTaskElement(doc, root, task); - } - - for (Node orphanedTaskNode : orphanedTaskNodes) { - Node tempNode = doc.importNode(orphanedTaskNode, true); - if (tempNode != null) { - root.appendChild(tempNode); - } - } - - doc.appendChild(root); - writeDOMtoFile(doc, outFile); - return; - } - - private void createTaskElement(Document doc, Element root, ITask task) { - try { - Element element = null; - for (ITaskListExternalizer externalizer : externalizers) { - if (externalizer.canCreateElementFor(task)) { - element = externalizer.createTaskElement(task, doc, root); - break; - } - } - if (element == null && delagatingExternalizer.canCreateElementFor(task)) { - delagatingExternalizer.createTaskElement(task, doc, root); - } else if (element == null) { - MylarStatusHandler.log("Did not externalize: " + task, this); - } - } catch (Exception e) { - MylarStatusHandler.log(e, e.getMessage()); - } - } - - /** - * Writes an XML file from a DOM. - * - * doc - the document to write file - the file to be written to - */ - private void writeDOMtoFile(Document doc, File file) { - try { - ZipOutputStream outputStream = new ZipOutputStream(new FileOutputStream(file)); - ZipEntry zipEntry = new ZipEntry(TasksUiPlugin.OLD_TASK_LIST_FILE); - outputStream.putNextEntry(zipEntry); - outputStream.setMethod(ZipOutputStream.DEFLATED); - // OutputStream outputStream = new FileOutputStream(file); - writeDOMtoStream(doc, outputStream); - outputStream.flush(); - outputStream.closeEntry(); - outputStream.close(); - } catch (Exception fnfe) { - MylarStatusHandler.log(fnfe, "TaskList could not be found"); - } - } - - /** - * Writes the provided XML document out to the specified output stream. - * - * doc - the document to be written outputStream - the stream to which the - * document is to be written - */ - private void writeDOMtoStream(Document doc, OutputStream outputStream) { - // Prepare the DOM document for writing - // DOMSource - Acts as a holder for a transformation Source tree in the - // form of a Document Object Model (DOM) tree - Source source = new DOMSource(doc); - - // StreamResult - Acts as an holder for a XML transformation result - // Prepare the output stream - Result result = new StreamResult(outputStream); - - // An instance of this class can be obtained with the - // TransformerFactory.newTransformer method. This instance may - // then be used to process XML from a variety of sources and write - // the transformation output to a variety of sinks - - Transformer xformer = null; - try { - xformer = TransformerFactory.newInstance().newTransformer(); - // Transform the XML Source to a Result - // - xformer.transform(source, result); - } catch (TransformerConfigurationException e) { - e.printStackTrace(); - } catch (TransformerFactoryConfigurationError e) { - e.printStackTrace(); - } catch (TransformerException e1) { - e1.printStackTrace(); - } - } - - /** - * TODO: fix this old mess - */ - public void readTaskList(TaskList taskList, File inFile) { - hasCaughtException = false; - orphanedTaskNodes.clear(); - try { - if (!inFile.exists()) - return; - Document doc = openAsDOM(inFile); - if (doc == null) { - handleException(inFile, null, new TaskExternalizationException("TaskList was not well formed XML")); - return; - } - Element root = doc.getDocumentElement(); - readVersion = root.getAttribute(ATTRIBUTE_VERSION); - - if (readVersion.equals(VALUE_VERSION_1_0_0)) { - MylarStatusHandler.log("version: " + readVersion + " not supported", this); - } else { - NodeList list = root.getChildNodes(); - - // NOTE: order is important, first read the categories - for (int i = 0; i < list.getLength(); i++) { - Node child = list.item(i); - try { - if (child.getNodeName().endsWith(DelegatingTaskExternalizer.KEY_CATEGORY)) { - delagatingExternalizer.readCategory(child, taskList); - } - } catch (Exception e) { - handleException(inFile, child, e); - } - } - - // then read the tasks - for (int i = 0; i < list.getLength(); i++) { - Node child = list.item(i); - try { - boolean wasRead = false; - if (!child.getNodeName().endsWith(DelegatingTaskExternalizer.KEY_CATEGORY) - && !child.getNodeName().endsWith(DelegatingTaskExternalizer.KEY_QUERY)) { - for (ITaskListExternalizer externalizer : externalizers) { - if (!wasRead && externalizer.canReadTask(child)) { - externalizer.readTask(child, taskList, null, null); - wasRead = true; - } - } - - if (!wasRead && delagatingExternalizer.canReadTask(child)) { - delagatingExternalizer.readTask(child, taskList, null, null); - wasRead = true; - } - - if (!wasRead) { - orphanedTaskNodes.add(child); - } - } - } catch (Exception e) { - // TODO: Save orphans here too? - // If data is source of exception then error will just - // repeat - // now that orphans are re-saved upon task list save. So - // for now we - // log the error warning the user and make a copy of the - // bad tasklist. - handleException(inFile, child, e); - } - } - - // then query hits hits, which get corresponded to tasks - for (int i = 0; i < list.getLength(); i++) { - Node child = list.item(i); - try { - if (child.getNodeName().endsWith(DelegatingTaskExternalizer.KEY_QUERY)) { - for (ITaskListExternalizer externalizer : externalizers) { - if (externalizer.canReadQuery(child)) { - AbstractRepositoryQuery query = externalizer.readQuery(child, taskList); - if (query != null) { - taskList.internalAddQuery(query); - } - break; - } - } - } - } catch (Exception e) { - handleException(inFile, child, e); - } - } - } - } catch (Exception e) { - handleException(inFile, null, e); - } - if (hasCaughtException) { - // if exception was caught, write out the new task file, so that it - // doesn't happen again. - // this is OK, since the original (corrupt) tasklist is saved. - // TODO: The problem with this is that if the orignal tasklist has - // tasks and bug reports, but a - // task is corrupted, the new tasklist that is written will not - // include the bug reports (since the - // bugzilla externalizer is not loaded. So there is a potentila that - // we can lose bug reports. - writeTaskList(taskList, inFile); - } - } - - /** - * Opens the specified XML file and parses it into a DOM Document. - * - * Filename - the name of the file to open Return - the Document built from - * the XML file Throws - XMLException if the file cannot be parsed as XML - - * IOException if the file cannot be opened - */ - private Document openAsDOM(File inputFile) throws IOException { - - // A factory API that enables applications to obtain a parser - // that produces DOM object trees from XML documents - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - - // Using DocumentBuilder, obtain a Document from XML file. - DocumentBuilder builder = null; - Document document = null; - try { - // create new instance of DocumentBuilder - builder = factory.newDocumentBuilder(); - } catch (ParserConfigurationException pce) { - inputFile.renameTo(new File(inputFile.getName() + FILE_SUFFIX_SAVE)); - MylarStatusHandler.log(pce, "Failed to load XML file"); - } - try { - // Parse the content of the given file as an XML document - // and return a new DOM Document object. Also throws IOException - InputStream inputStream = null; - if (inputFile.getName().endsWith(TasksUiPlugin.DEFAULT_TASK_LIST_FILE)) { - // is zipped context - inputStream = new ZipInputStream(new FileInputStream(inputFile)); - ((ZipInputStream) inputStream).getNextEntry(); - } else { - inputStream = new FileInputStream(inputFile); - } - document = builder.parse(inputStream); - // document = builder.parse(inputFile); - } catch (SAXException se) { - File backup = new File(TasksUiPlugin.getDefault().getTaskListSaveManager().getBackupFilePath()); - String message = "Restoring the tasklist failed. Would you like to attempt to restore from the backup?\n\nTasklist XML File location: " - + inputFile.getAbsolutePath() - + "\n\nBackup tasklist XML file location: " - + backup.getAbsolutePath(); - if (backup.exists() && MessageDialog.openQuestion(null, "Restore From Backup", message)) { - try { - document = builder.parse(backup); - TasksUiPlugin.getDefault().getTaskListSaveManager().reverseBackup(); - } catch (SAXException s) { - inputFile.renameTo(new File(inputFile.getName() + FILE_SUFFIX_SAVE)); - MylarStatusHandler.log(s, "Failed to recover from backup restore"); - } - } - } - return document; - } - - private void handleException(File inFile, Node child, Exception e) { - hasCaughtException = true; - String name = inFile.getAbsolutePath(); - name = name.substring(0, name.lastIndexOf('.')) + "-save1.xml"; - File save = new File(name); - int i = 2; - while (save.exists()) { - name = name.substring(0, name.lastIndexOf('.') - 1) + i + ".xml"; - save = new File(name); - i++; - } - if (!copy(inFile, save)) { - inFile.renameTo(new File(name)); - } - if (child == null) { - MylarStatusHandler.log(e, "Could not read task list"); - } else { - MylarStatusHandler.log(e, "Tasks may have been lost from " + child.getNodeName()); - } - } - - private boolean copy(File src, File dst) { - try { - InputStream in = new FileInputStream(src); - OutputStream out = new FileOutputStream(dst); - - // Transfer bytes from in to out - byte[] buf = new byte[1024]; - int len; - while ((len = in.read(buf)) > 0) { - out.write(buf, 0, len); - } - in.close(); - out.close(); - return true; - } catch (IOException ioe) { - return false; - } - } - - // private Document openAsDOM(String input) throws IOException { - // - // // A factory API that enables applications to obtain a parser - // // that produces DOM object trees from XML documents - // // - // DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - // - // // Using DocumentBuilder, obtain a Document from XML file. - // // - // DocumentBuilder builder = null; - // Document document = null; - // try { - // // create new instance of DocumentBuilder - // // - // builder = factory.newDocumentBuilder(); - // } catch (ParserConfigurationException pce) { - // MylarStatusHandler.log(pce, "Failed to load XML file"); - // } - // try { - // // Parse the content of the given file as an XML document - // // and return a new DOM Document object. Also throws IOException - // StringReader s = new StringReader(input); - // InputSource in = new InputSource(s); - // document = builder.parse(in); - // } catch (SAXException se) { - // MylarStatusHandler.log(se, "Failed to parse XML file"); - // } - // return document; - // } - - // public void readTaskList(TaskList taskList, String input) { - // try { - // Document doc = openAsDOM(input); - // if (doc == null) { - // return; - // } - // Element root = doc.getDocumentElement(); - // readVersion = root.getAttribute(ATTRIBUTE_VERSION); - // - // if (readVersion.equals(VALUE_VERSION_1_0_0)) { - // MylarStatusHandler.log("version: " + readVersion + " not supported", - // this); - // } else { - // NodeList list = root.getChildNodes(); - // for (int i = 0; i < list.getLength(); i++) { - // Node child = list.item(i); - // boolean wasRead = false; - // try { - // if - // (child.getNodeName().endsWith(DelegatingTaskExternalizer.KEY_CATEGORY)) { - // // for (ITaskListExternalizer externalizer : externalizers) { - // // if (externalizer.canReadCategory(child)) { - // // externalizer.readCategory(child, taskList); - // // wasRead = true; - // // break; - // // } - // // } - // if (delagatingExternalizer.canReadCategory(child)) { - // delagatingExternalizer.readCategory(child, taskList); - // } - // } else { - // for (ITaskListExternalizer externalizer : externalizers) { - // if (externalizer.canReadTask(child)) { - // ITask newTask = externalizer.readTask(child, taskList, null, null); - // // externalizer.getRepositoryClient().addTaskToArchive(newTask); - // taskList.addTaskToArchive(newTask); - // - // taskList.internalAddRootTask(newTask); - // - // wasRead = true; - // break; - // } - // } - // if (!wasRead && delagatingExternalizer.canReadTask(child)) { - // taskList.internalAddRootTask(delagatingExternalizer.readTask(child, - // taskList, null, null)); - // } - // } - // } catch (Exception e) { - // MylarStatusHandler.log(e, "can't read xml string"); - // } - // } - // } - // } catch (Exception e) { - // MylarStatusHandler.log(e, "can't read xml string"); - // } - // } - - // public String getTaskListXml(TaskList tlist) { - // // TODO make this and writeTaskList use the same base code - // DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - // DocumentBuilder db; - // Document doc = null; - // - // try { - // db = dbf.newDocumentBuilder(); - // doc = db.newDocument(); - // } catch (ParserConfigurationException e) { - // MylarStatusHandler.log(e, "could not create document"); - // e.printStackTrace(); - // } - // - // Element root = doc.createElement(ELEMENT_TASK_LIST); - // root.setAttribute(ATTRIBUTE_VERSION, VALUE_VERSION); - // - // for (ITaskListExternalizer externalizer : externalizers) { - // externalizer.createRegistry(doc, root); - // } - // - // for (ITaskContainer category : tlist.getCategories()) { - // Element element = null; - // for (ITaskListExternalizer externalizer : externalizers) { - // if (externalizer.canCreateElementFor(category)) - // element = externalizer.createCategoryElement(category, doc, root); - // } - // if (element == null && - // delagatingExternalizer.canCreateElementFor(category)) { - // delagatingExternalizer.createCategoryElement(category, doc, root); - // } else if (element == null) { - // MylarStatusHandler.log("Did not externalize: " + category, this); - // } - // } - // for (ITask task : tlist.getRootTasks()) { - // try { - // Element element = null; - // for (ITaskListExternalizer externalizer : externalizers) { - // if (externalizer.canCreateElementFor(task)) - // element = externalizer.createTaskElement(task, doc, root); - // } - // if (element == null && delagatingExternalizer.canCreateElementFor(task)) - // { - // delagatingExternalizer.createTaskElement(task, doc, root); - // } else if (element == null) { - // MylarStatusHandler.log("Did not externalize: " + task, this); - // } - // } catch (Exception e) { - // MylarStatusHandler.log(e, e.getMessage()); - // } - // } - // doc.appendChild(root); - // StringWriter sw = new StringWriter(); - // - // Source source = new DOMSource(doc); - // - // Result result = new StreamResult(sw); - // - // Transformer xformer = null; - // try { - // xformer = TransformerFactory.newInstance().newTransformer(); - // // Transform the XML Source to a Result - // // - // xformer.transform(source, result); - // } catch (Exception e) { - // e.printStackTrace(); - // } - // return sw.toString(); - // } - - public void setDelegatingExternalizer(DelegatingTaskExternalizer delagatingExternalizer) { - this.delagatingExternalizer = delagatingExternalizer; - } - - public List<ITaskListExternalizer> getExternalizers() { - return externalizers; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiExtensionReader.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiExtensionReader.java deleted file mode 100644 index 8d3e20f02..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiExtensionReader.java +++ /dev/null @@ -1,320 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui.util; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IExtension; -import org.eclipse.core.runtime.IExtensionPoint; -import org.eclipse.core.runtime.IExtensionRegistry; -import org.eclipse.core.runtime.Platform; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.text.hyperlink.IHyperlinkDetector; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.IDynamicSubMenuContributor; -import org.eclipse.mylar.internal.tasks.ui.ITaskEditorFactory; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.ITaskListExternalizer; -import org.eclipse.mylar.tasks.core.RepositoryTemplate; -import org.eclipse.mylar.tasks.ui.AbstractRepositoryConnectorUi; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.plugin.AbstractUIPlugin; - -/** - * @author Mik Kersten - * @author Shawn Minto - * @author Rob Elves - */ -public class TasksUiExtensionReader { - - public static final String EXTENSION_REPOSITORIES = "org.eclipse.mylar.tasks.ui.repositories"; - - public static final String EXTENSION_TEMPLATES = "org.eclipse.mylar.tasks.ui.templates"; - - public static final String EXTENSION_TMPL_REPOSITORY = "repository"; - - public static final String ELMNT_TMPL_LABEL = "label"; - - public static final String ELMNT_TMPL_URLREPOSITORY = "urlRepository"; - - public static final String ELMNT_TMPL_REPOSITORYKIND = "repositoryKind"; - - public static final String ELMNT_TMPL_ANONYMOUS = "anonymous"; - - public static final String ELMNT_TMPL_VERSION = "version"; - - public static final String ELMNT_TMPL_URLNEWTASK = "urlNewTask"; - - public static final String ELMNT_TMPL_URLTASK = "urlTask"; - - public static final String ELMNT_TMPL_URLTASKQUERY = "urlTaskQuery"; - - public static final String ELMNT_TMPL_NEWACCOUNTURL = "urlNewAccount"; - - public static final String ELMNT_TMPL_ADDAUTO = "addAutomatically"; - - public static final String ELMNT_REPOSITORY_CONNECTOR = "connectorCore"; - - public static final String ELMNT_REPOSITORY_UI= "connectorUi"; - - public static final String ELMNT_EXTERNALIZER = "externalizer"; - - public static final String ATTR_BRANDING_ICON = "brandingIcon"; - - public static final String ATTR_OVERLAY_ICON = "overlayIcon"; - - public static final String ELMNT_TYPE = "type"; - - public static final String ELMNT_QUERY_PAGE = "queryPage"; - - public static final String ELMNT_SETTINGS_PAGE = "settingsPage"; - - public static final String EXTENSION_TASK_CONTRIBUTOR = "org.eclipse.mylar.tasks.ui.providers"; - - public static final String ATTR_ACTION_CONTRIBUTOR_CLASS = "taskHandlerClass"; - - public static final String DYNAMIC_POPUP_ELEMENT = "dynamicPopupMenu"; - - public static final String ATTR_CLASS = "class"; - - public static final String EXTENSION_EDITORS = "org.eclipse.mylar.tasks.ui.editors"; - - public static final String ELMNT_EDITOR_FACTORY = "editorFactory"; - - public static final String ELMNT_HYPERLINK_LISTENER = "hyperlinkListener"; - - public static final String ELMNT_HYPERLINK_DETECTOR = "hyperlinkDetector"; - - private static boolean extensionsRead = false; - - public static void initExtensions(TaskListWriter writer) { - List<ITaskListExternalizer> externalizers = new ArrayList<ITaskListExternalizer>(); - if (!extensionsRead) { - IExtensionRegistry registry = Platform.getExtensionRegistry(); - - // HACK: has to be read first - IExtensionPoint repositoriesExtensionPoint = registry.getExtensionPoint(EXTENSION_REPOSITORIES); - IExtension[] repositoryExtensions = repositoriesExtensionPoint.getExtensions(); - for (int i = 0; i < repositoryExtensions.length; i++) { - IConfigurationElement[] elements = repositoryExtensions[i].getConfigurationElements(); - for (int j = 0; j < elements.length; j++) { - if (elements[j].getName().equals(ELMNT_REPOSITORY_CONNECTOR)) { - readRepositoryConnectorCore(elements[j]); - } else if (elements[j].getName().equals(ELMNT_REPOSITORY_UI)) { - readRepositoryConnectorUi(elements[j]); - } else if (elements[j].getName().equals(ELMNT_EXTERNALIZER)) { - readExternalizer(elements[j], externalizers); - } - } - } - - IExtensionPoint extensionPoint = registry.getExtensionPoint(EXTENSION_TASK_CONTRIBUTOR); - IExtension[] extensions = extensionPoint.getExtensions(); - for (int i = 0; i < extensions.length; i++) { - IConfigurationElement[] elements = extensions[i].getConfigurationElements(); - for (int j = 0; j < elements.length; j++) { - if (elements[j].getName().equals(DYNAMIC_POPUP_ELEMENT)) { - readDynamicPopupContributor(elements[j]); - } - } - } - - IExtensionPoint templatesExtensionPoint = registry.getExtensionPoint(EXTENSION_TEMPLATES); - IExtension[] templateExtensions = templatesExtensionPoint.getExtensions(); - for (int i = 0; i < templateExtensions.length; i++) { - IConfigurationElement[] elements = templateExtensions[i].getConfigurationElements(); - for (int j = 0; j < elements.length; j++) { - if (elements[j].getName().equals(EXTENSION_TMPL_REPOSITORY)) { - readRepositoryTemplate(elements[j]); - } - } - } - - IExtensionPoint editorsExtensionPoint = registry.getExtensionPoint(EXTENSION_EDITORS); - IExtension[] editors = editorsExtensionPoint.getExtensions(); - for (int i = 0; i < editors.length; i++) { - IConfigurationElement[] elements = editors[i].getConfigurationElements(); - for (int j = 0; j < elements.length; j++) { - if (elements[j].getName().equals(ELMNT_EDITOR_FACTORY)) { - readEditorFactory(elements[j]); - } else if (elements[j].getName().equals(ELMNT_HYPERLINK_DETECTOR)) { - readHyperlinkDetector(elements[j]); - } - } - } - writer.setDelegateExternalizers(externalizers); - extensionsRead = true; - } - } - - private static void readHyperlinkDetector(IConfigurationElement element) { - try { - Object hyperlinkDetector = element.createExecutableExtension(ATTR_CLASS); - if (hyperlinkDetector instanceof IHyperlinkDetector) { - TasksUiPlugin.getDefault().addTaskHyperlinkDetector((IHyperlinkDetector) hyperlinkDetector); - } else { - MylarStatusHandler.log("Could not load detector: " + hyperlinkDetector.getClass().getCanonicalName(), - null); - } - } catch (CoreException e) { - MylarStatusHandler.log(e, "Could not load tasklist hyperlink detector extension"); - } - } - - private static void readEditorFactory(IConfigurationElement element) { - try { - Object editor = element.createExecutableExtension(ATTR_CLASS); - if (editor instanceof ITaskEditorFactory) { - TasksUiPlugin.getDefault().addContextEditor((ITaskEditorFactory) editor); - } else { - MylarStatusHandler.log("Could not load editor: " + editor.getClass().getCanonicalName() - + " must implement " + ITaskEditorFactory.class.getCanonicalName(), null); - } - } catch (CoreException e) { - MylarStatusHandler.log(e, "Could not load tasklist listener extension"); - } - } - - private static void readRepositoryConnectorCore(IConfigurationElement element) { - try { - Object type = element.getAttribute(ELMNT_TYPE); - Object connectorCore = element.createExecutableExtension(ATTR_CLASS); - if (connectorCore instanceof AbstractRepositoryConnector && type != null) { - TasksUiPlugin.getRepositoryManager().addRepositoryConnector((AbstractRepositoryConnector) connectorCore); - } else { - MylarStatusHandler.log("could not not load connector core: " + connectorCore, null); - } - - } catch (CoreException e) { - MylarStatusHandler.log(e, "Could not load tasklist listener extension"); - } - } - - private static void readRepositoryConnectorUi(IConfigurationElement element) { - try { -// Object type = element.getAttribute(ELMNT_TYPE); - Object connectorUi = element.createExecutableExtension(ATTR_CLASS); - if (connectorUi instanceof AbstractRepositoryConnectorUi) { - TasksUiPlugin.addRepositoryConnectorUi((AbstractRepositoryConnectorUi) connectorUi); - - String iconPath = element.getAttribute(ATTR_BRANDING_ICON); - if (iconPath != null) { - ImageDescriptor descriptor = AbstractUIPlugin.imageDescriptorFromPlugin(element.getContributor() - .getName(), iconPath); - if (descriptor != null) { - TasksUiPlugin.getDefault().addBrandingIcon(((AbstractRepositoryConnectorUi)connectorUi).getRepositoryType(), - TaskListImages.getImage(descriptor)); - } - } - String overlayIconPath = element.getAttribute(ATTR_OVERLAY_ICON); - if (overlayIconPath != null) { - ImageDescriptor descriptor = AbstractUIPlugin.imageDescriptorFromPlugin(element.getContributor() - .getName(), overlayIconPath); - if (descriptor != null) { - TasksUiPlugin.getDefault().addOverlayIcon(((AbstractRepositoryConnectorUi)connectorUi).getRepositoryType(), - descriptor); - } - } - } else { - MylarStatusHandler.log("could not not load connector ui: " + connectorUi, null); - } - - } catch (CoreException e) { - MylarStatusHandler.log(e, "Could not load tasklist listener extension"); - } - } - - private static void readRepositoryTemplate(IConfigurationElement element) { - - boolean anonymous = false; - boolean addAuto = false; - - String label = element.getAttribute(ELMNT_TMPL_LABEL); - String serverUrl = element.getAttribute(ELMNT_TMPL_URLREPOSITORY); - String repKind = element.getAttribute(ELMNT_TMPL_REPOSITORYKIND); - String version = element.getAttribute(ELMNT_TMPL_VERSION); - String newTaskUrl = element.getAttribute(ELMNT_TMPL_URLNEWTASK); - String taskPrefix = element.getAttribute(ELMNT_TMPL_URLTASK); - String taskQueryUrl = element.getAttribute(ELMNT_TMPL_URLTASKQUERY); - String newAccountUrl = element.getAttribute(ELMNT_TMPL_NEWACCOUNTURL); - addAuto = Boolean.parseBoolean(element.getAttribute(ELMNT_TMPL_ADDAUTO)); - anonymous = Boolean.parseBoolean(element.getAttribute(ELMNT_TMPL_ANONYMOUS)); - - if (serverUrl != null && label != null && repKind != null - && TasksUiPlugin.getRepositoryManager().getRepositoryConnector(repKind) != null) { - AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager() - .getRepositoryConnector(repKind); - RepositoryTemplate template = new RepositoryTemplate(label, serverUrl, version, newTaskUrl, taskPrefix, - taskQueryUrl, newAccountUrl, anonymous, addAuto); - connector.addTemplate(template); - - for (IConfigurationElement configElement : element.getChildren()) { - String name = configElement.getAttribute("name"); - String value = configElement.getAttribute("value"); - if(name != null && !name.equals("") && value != null) { - template.addAttribute(name, value); - } - } - - } else { - MylarStatusHandler.log("Could not load repository template extension " + element.getName(), - TasksUiExtensionReader.class); - } - } - - private static void readDynamicPopupContributor(IConfigurationElement element) { - try { - Object dynamicPopupContributor = element.createExecutableExtension(ATTR_CLASS); - if (dynamicPopupContributor instanceof IDynamicSubMenuContributor) { - TasksUiPlugin.getDefault().addDynamicPopupContributor( - (IDynamicSubMenuContributor) dynamicPopupContributor); - } else { - MylarStatusHandler.log("Could not load dyanmic popup menu: " - + dynamicPopupContributor.getClass().getCanonicalName() + " must implement " - + IDynamicSubMenuContributor.class.getCanonicalName(), null); - } - } catch (CoreException e) { - MylarStatusHandler.log(e, "Could not load dynamic popup extension"); - } - } - - private static void readExternalizer(IConfigurationElement element, List<ITaskListExternalizer> externalizers) { - try { - Object externalizerObject = element.createExecutableExtension(ATTR_CLASS); - if (externalizerObject instanceof ITaskListExternalizer) { - ITaskListExternalizer externalizer = (ITaskListExternalizer) externalizerObject; - externalizers.add((ITaskListExternalizer) externalizer); - } else { - MylarStatusHandler.log("Could not load externalizer: " - + externalizerObject.getClass().getCanonicalName() + " must implement " - + ITaskListExternalizer.class.getCanonicalName(), null); - } - - // Object taskHandler = - // element.createExecutableExtension(ATTR_ACTION_CONTRIBUTOR_CLASS); - // if (taskHandler instanceof ITaskHandler) { - // MylarTaskListPlugin.getDefault().addTaskHandler((ITaskHandler) - // taskHandler); - // } else { - // MylarStatusHandler.log("Could not load contributor: " + - // taskHandler.getClass().getCanonicalName() - // + " must implement " + ITaskHandler.class.getCanonicalName(), - // null); - // } - } catch (CoreException e) { - MylarStatusHandler.log(e, "Could not load task handler extension"); - } - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/AbstractMylarFilteredTree.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/AbstractMylarFilteredTree.java deleted file mode 100644 index 8a079a28f..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/AbstractMylarFilteredTree.java +++ /dev/null @@ -1,113 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.views; - -import java.lang.reflect.Field; - -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.KeyAdapter; -import org.eclipse.swt.events.KeyEvent; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.ui.dialogs.FilteredTree; -import org.eclipse.ui.dialogs.PatternFilter; - -/** - * @author Mik Kersten - */ -public abstract class AbstractMylarFilteredTree extends FilteredTree { - - private static final int filterWidth = 70; - - public static final String LABEL_FIND = "Find:"; - - private Job refreshJob; - - private AdaptiveRefreshPolicy refreshPolicy; - - /** - * HACK: using reflection to gain access - */ - public AbstractMylarFilteredTree(Composite parent, int treeStyle, PatternFilter filter) { - super(parent, treeStyle, filter); - Field refreshField; - try { - refreshField = FilteredTree.class.getDeclaredField("refreshJob"); - refreshField.setAccessible(true); - refreshJob = (Job) refreshField.get(this); - refreshPolicy = new AdaptiveRefreshPolicy(refreshJob, super.getFilterControl()); - } catch (Exception e) { - MylarStatusHandler.fail(e, "Could not get refresh job", false); - } - setInitialText(""); - } - - @Override - protected void createControl(Composite parent, int treeStyle) { - super.createControl(parent, treeStyle); - - // Override superclass layout settings... - GridLayout layout = (GridLayout) getLayout(); - layout.verticalSpacing = 0; - layout.horizontalSpacing = 0; - } - - @Override - protected Composite createFilterControls(Composite parent) { - GridLayout gridLayout = new GridLayout(4, false); - gridLayout.marginWidth = 2; - gridLayout.marginHeight = 2; - parent.setLayout(gridLayout); - - Label label = new Label(parent, SWT.NONE); - label.setText(LABEL_FIND); - - super.createFilterControls(parent); - - GridData gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false); - gd.minimumWidth = filterWidth; - filterText.setLayoutData(gd); - filterText.addKeyListener(new KeyAdapter() { - - @Override - public void keyPressed(KeyEvent e) { - if (e.character == SWT.ESC) { - setFilterText(""); - } - } - - }); - - createStatusComposite(parent); - return parent; - } - - protected abstract Composite createStatusComposite(Composite container); - - protected void textChanged() { - if (refreshPolicy != null) { - refreshPolicy.textChanged(filterText.getText()); - } - } - - protected Job getRefreshJob() { - return refreshJob; - } - - public AdaptiveRefreshPolicy getRefreshPolicy() { - return refreshPolicy; - } -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/DatePicker.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/DatePicker.java deleted file mode 100644 index 2830c2700..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/DatePicker.java +++ /dev/null @@ -1,281 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.views; - -import java.text.DateFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.LinkedList; -import java.util.List; - -import org.eclipse.jface.window.Window; -import org.eclipse.mylar.internal.tasks.ui.planner.DateSelectionDialog; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.FocusEvent; -import org.eclipse.swt.events.FocusListener; -import org.eclipse.swt.events.KeyEvent; -import org.eclipse.swt.events.KeyListener; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.PlatformUI; - -/** - * Temporary date picker from patch posted to: - * https://bugs.eclipse.org/bugs/show_bug.cgi?id=19945 - * - * see bug# 19945 - * - * TODO: remove this class when an SWT date picker is added - * - * @author Bahadir Yagan - * @author Mik Kersten - */ -public class DatePicker extends Composite { - - public final static String TITLE_DIALOG = "Choose Date"; - - public static final String LABEL_CHOOSE = "<choose date>"; - - private Text dateText = null; - - private Button pickButton = null; - - private Calendar date = null; - - private List<SelectionListener> pickerListeners = new LinkedList<SelectionListener>(); - - private SimpleDateFormat simpleDateFormat = (SimpleDateFormat) DateFormat.getDateTimeInstance(DateFormat.MEDIUM, - DateFormat.SHORT); - - private String initialText = "Select Date"; - - public DatePicker(Composite parent, int style, String initialText) { - super(parent, style); - this.initialText = initialText; - initialize(); - } - - public void setDatePattern(String pattern) { - simpleDateFormat.applyPattern(pattern); - } - - private void initialize() { - - GridLayout gridLayout = new GridLayout(); - gridLayout.numColumns = 2; - gridLayout.horizontalSpacing = 0; - gridLayout.verticalSpacing = 0; - gridLayout.marginWidth = 0; - gridLayout.marginHeight = 0; - gridLayout.makeColumnsEqualWidth = false; - this.setLayout(gridLayout); - - dateText = new Text(this, SWT.NONE); - - GridData dateTextGridData = new org.eclipse.swt.layout.GridData(); - dateTextGridData.widthHint = 110; - dateTextGridData.horizontalAlignment = GridData.FILL; - - dateText.setLayoutData(dateTextGridData); - dateText.setText(initialText); - dateText.addKeyListener(new KeyListener() { - - public void keyPressed(KeyEvent e) { - // key listener used because setting of date picker text causes - // modify litener to fire which results in perpetual dirty - // editor - notifyPickerListeners(); - } - - public void keyReleased(KeyEvent e) { - // ignore - - } - }); - - dateText.addFocusListener(new FocusListener() { - - Calendar calendar = Calendar.getInstance(); - - public void focusGained(FocusEvent e) { - } - - public void focusLost(FocusEvent e) { - Date reminderDate; - try { - reminderDate = simpleDateFormat.parse(dateText.getText()); - calendar.setTime(reminderDate); - date = calendar; - updateDateText(); - } catch (ParseException e1) { - updateDateText(); - } - - } - }); - - pickButton = new Button(this, SWT.ARROW | SWT.DOWN); - GridData pickButtonGridData = new org.eclipse.swt.layout.GridData(); - pickButtonGridData.horizontalAlignment = org.eclipse.swt.layout.GridData.END; - pickButton.setLayoutData(pickButtonGridData); - pickButton.addSelectionListener(new SelectionListener() { - - public void widgetSelected(SelectionEvent arg0) { - Calendar newCalendar = GregorianCalendar.getInstance(); - if(date != null) { - newCalendar.setTime(date.getTime()); - } - - Shell shell = null; - if (PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null) { - shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); - } else { - shell = new Shell(PlatformUI.getWorkbench().getDisplay()); - } - DateSelectionDialog dialog = new DateSelectionDialog(shell, newCalendar, DatePicker.TITLE_DIALOG); - pickButton.setEnabled(false); - dateText.setEnabled(false); - - int dialogResponse = dialog.open(); - if(dialog.getDate()!=null) { - newCalendar.setTime(dialog.getDate()); - } else { - newCalendar = null; - } - dateSelected(dialogResponse == Window.CANCEL, newCalendar); - - // Display display = Display.getCurrent(); - // showDatePicker((display.getCursorLocation().x), - // (display.getCursorLocation().y)); - } - - public void widgetDefaultSelected(SelectionEvent arg0) { - - } - }); - - pack(); - } - - public void addPickerSelectionListener(SelectionListener listener) { - pickerListeners.add(listener); - } - - /** - * must check for null return value - */ - public Calendar getDate() { - return date; - } - - public void setDate(Calendar date) { - this.date = date; - updateDateText(); - } - - // private void showDatePicker(int x, int y) { - // pickerShell = new Shell(SWT.APPLICATION_MODAL);//| SWT.ON_TOP - // pickerShell.setText("Shell"); - // pickerShell.setLayout(new FillLayout()); - // if (date == null) { - // date = new GregorianCalendar(); - // } - // // datePickerPanel.setDate(date); - // datePickerPanel = new DatePickerPanel(pickerShell, SWT.NONE, date); - // datePickerPanel.addSelectionChangedListener(new - // ISelectionChangedListener() { - // - // public void selectionChanged(SelectionChangedEvent event) { - // if(!event.getSelection().isEmpty()) { - // dateSelected(event.getSelection().isEmpty(), - // ((DateSelection)event.getSelection()).getDate()); - // } else { - // dateSelected(false, null); - // } - // }}); - // - // pickerShell.setSize(new Point(240, 180)); - // pickerShell.setLocation(new Point(x, y)); - // - // datePickerPanel.addKeyListener(new KeyListener() { - // public void keyPressed(KeyEvent e) { - // if (e.keyCode == SWT.ESC) { - // dateSelected(true, null); - // } - // } - // - // public void keyReleased(KeyEvent e) { - // } - // }); - // - // pickerShell.addFocusListener(new FocusListener() { - // - // public void focusGained(FocusEvent e) { - // System.err.println(" shell - Focus Gained!"); - // - // } - // - // public void focusLost(FocusEvent e) { - // System.err.println("shell - Focus Lost!"); - // - // }}); - // - // pickerShell.pack(); - // pickerShell.open(); - // } - - /** Called when the user has selected a date */ - protected void dateSelected(boolean canceled, Calendar selectedDate) { - - if (!canceled) { - this.date = selectedDate != null ? selectedDate : null; - updateDateText(); - } - - notifyPickerListeners(); - pickButton.setEnabled(true); - dateText.setEnabled(true); - } - - private void notifyPickerListeners() { - for (SelectionListener listener : pickerListeners) { - listener.widgetSelected(null); - } - } - - private void updateDateText() { - if (date != null) { - Date currentDate = new Date(date.getTimeInMillis()); - dateText.setText(simpleDateFormat.format(currentDate)); - } else { - dateText.setEnabled(false); - dateText.setText(initialText); - dateText.setEnabled(true); - } - } - - @Override - public void setEnabled(boolean enabled) { - dateText.setEnabled(enabled); - pickButton.setEnabled(enabled); - super.setEnabled(enabled); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/ResetRepositoryConfigurationAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/ResetRepositoryConfigurationAction.java deleted file mode 100644 index 6a72965fc..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/ResetRepositoryConfigurationAction.java +++ /dev/null @@ -1,86 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.views; - -import java.util.Iterator; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.IViewPart; - -/** - * @author Mik Kersten - */ -public class ResetRepositoryConfigurationAction extends Action { - - private static final String ID = "org.eclipse.mylar.tasklist.repositories.reset"; - - private TaskRepositoriesView repositoriesView; - - public ResetRepositoryConfigurationAction(TaskRepositoriesView repositoriesView) { - this.repositoriesView = repositoriesView; - setText("Update Attributes"); - setId(ID); - } - - public void init(IViewPart view) { - // ignore - } - - public void run() { - try { - IStructuredSelection selection = (IStructuredSelection) repositoriesView.getViewer().getSelection(); - for (Iterator iter = selection.iterator(); iter.hasNext();) { - Object selectedObject = iter.next(); - if (selectedObject instanceof TaskRepository) { - final TaskRepository repository = (TaskRepository) selectedObject; - final AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager().getRepositoryConnector(repository.getKind()); - if (connector != null) { - final String jobName = "Updating attributes for: " + repository.getUrl(); - Job updateJob = new Job(jobName) { - - @Override - protected IStatus run(IProgressMonitor monitor) { - monitor.beginTask(jobName, - IProgressMonitor.UNKNOWN); - try { - connector.updateAttributes(repository, TasksUiPlugin.getDefault().getProxySettings(), monitor); - } catch (CoreException ce) { - MylarStatusHandler.fail(ce, ce.getStatus().getMessage(), true); - } - - monitor.done(); - return Status.OK_STATUS; - } - - }; - updateJob.schedule(); - } - } - } - } catch (Exception e) { - MylarStatusHandler.fail(e, e.getMessage(), true); - } - } - - public void selectionChanged(IAction action, ISelection selection) { - // TODO Auto-generated method stub - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskActivationHistory.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskActivationHistory.java deleted file mode 100644 index a9d18407b..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskActivationHistory.java +++ /dev/null @@ -1,251 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui.views; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.mylar.context.core.InteractionEvent; -import org.eclipse.mylar.context.core.ContextCorePlugin; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Ken Sueda (original prototype) - * @author Wesley Coelho (Added persistent tasks) - * @author Mik Kersten (hardening) - * @author Rob Elves - */ -public class TaskActivationHistory { - - private List<ITask> history = new ArrayList<ITask>(); - - private int currentIndex = -1; - - /** - * The number of tasks from the previous Eclipse session to load into the - * history at startup. (This is not the maximum size of the history, which - * is currently unbounded) - */ - private static final int NUM_SAVED_HISTORY_ITEMS_TO_LOAD = 10; - - private boolean persistentHistoryLoaded = false; - - /** - * Load in a number of saved history tasks from previous session. Should be - * called from constructor but ContextManager doesn't seem to be able to - * provide activity history at that point - * - * @author Wesley Coelho - */ - public void loadPersistentHistory() { - int tasksAdded = 0; - history.clear(); - for (int i = ContextCorePlugin.getContextManager().getActivityHistoryMetaContext().getInteractionHistory() - .size() - 1; i >= 0; i--) { - ITask prevTask = getHistoryTaskAt(i); - - if (prevTask != null && !history.contains(prevTask)) { - // !isDuplicate(prevTask, i + 1)) { - history.add(0, prevTask); - currentIndex++; - tasksAdded++; - if (tasksAdded == NUM_SAVED_HISTORY_ITEMS_TO_LOAD) { - break; - } - } - } - persistentHistoryLoaded = true; - } - - /** - * Returns the task corresponding to the interaction event history item at - * the specified position - */ - protected ITask getHistoryTaskAt(int pos) { - InteractionEvent event = ContextCorePlugin.getContextManager().getActivityHistoryMetaContext() - .getInteractionHistory().get(pos); - return TasksUiPlugin.getTaskListManager().getTaskList().getTask(event.getStructureHandle()); - } - - public void addTask(ITask task) { - try { - if (!persistentHistoryLoaded) { - loadPersistentHistory(); - persistentHistoryLoaded = true; - } - - history.remove(task); - history.add(task); - currentIndex = history.size() - 1; - } catch (RuntimeException e) { - MylarStatusHandler.fail(e, "could not add task to history", false); - } - } - - public ITask getPreviousTask() { - try { - boolean active = false; - for (ITask task: history) { - if(task.isActive()) { - active = true; - break; - } - } - - if (hasPrevious()) { - if ((currentIndex == 0 && !history.get(currentIndex).isActive()) || !active) { - return history.get(currentIndex); - } else { - return history.get(--currentIndex); - } - } else { - return null; - } - } catch (RuntimeException e) { - MylarStatusHandler.fail(e, "could not get previous task from history", false); - return null; - } - } - - public List<ITask> getPreviousTasks() { - return history; - } - - public boolean hasPrevious() { - try { - if (!persistentHistoryLoaded) { - loadPersistentHistory(); - persistentHistoryLoaded = true; - } - - return (currentIndex == 0 && !history.get(currentIndex).isActive()) || currentIndex > 0; - } catch (RuntimeException e) { - MylarStatusHandler.fail(e, "could determine previous task", false); - return false; - } - } - - public void clear() { - try { - history.clear(); - currentIndex = -1; - } catch (RuntimeException e) { - MylarStatusHandler.fail(e, "could not clear history", false); - } - } - - // /** - // * Get a list of the preceding tasks in the history. navigatedToTask(Task) - // * should be called to notify the history if the user navigates to an - // * arbitrary previous task from this list - // * - // * @author Wesley Coelho - // */ - // public List<ITask> getPreviousTasks() { - // try { - // - // if (!hasPrevious()) { - // return new ArrayList<ITask>(); - // } - // - // if (history.get(currentIndex).isActive()) { - // return history.subList(0, currentIndex); - // } else { - // return history.subList(0, currentIndex + 1); - // } - // } catch (RuntimeException e) { - // MylarStatusHandler.fail(e, "could not get previous tasks from history", - // false); - // return new ArrayList<ITask>(); - // } - // } - - // /** - // * Get a list of the next tasks in the history. navigatedToTask(Task) - // should - // * be called to notify the history if the user navigates to an arbitrary - // * next task from this list - // * - // * @author Wesley Coelho - // */ - // public List<ITask> getNextTasks() { - // try { - // return history.subList(currentIndex + 1, history.size()); - // } catch (RuntimeException e) { - // MylarStatusHandler.fail(e, "could not get next tasks from history", - // false); - // return new ArrayList<ITask>(); - // } - // } - - // /** - // * Use this method to notify the task history that the user has navigated - // to - // * an arbitrary task in the history without using getNextTask() or - // * getPreviousTask() - // * - // * @author Wesley Coelho - // */ - // public void navigatedToTask(ITask task) { - // for (int i = 0; i < history.size(); i++) { - // if (history.get(i).getHandleIdentifier() != null - // && - // history.get(i).getHandleIdentifier().equals(task.getHandleIdentifier())) - // { - // currentIndex = i; - // break; - // } - // } - // } - - // public ITask getNextTask() { - // try { - // if (hasNext()) { - // return history.get(++currentIndex); - // } else { - // return null; - // } - // } catch (RuntimeException e) { - // MylarStatusHandler.fail(e, "could not get next task", false); - // return null; - // } - // } - - // public boolean hasNext() { - // try { - // return currentIndex < history.size() - 1; - // } catch (RuntimeException e) { - // MylarStatusHandler.fail(e, "could not get next task", false); - // return false; - // } - // } - - // /** - // * Returns true if the specified task appears in the activity history - // * between the starting index and the end of the history list. - // * - // * @author Wesley Coelho - // */ - // protected boolean isDuplicate(ITask task, int startingIndex) { - // for (int i = startingIndex; i < - // ContextCorePlugin.getContextManager().getActivityHistoryMetaContext().getInteractionHistory() - // .size(); i++) { - // ITask currTask = getHistoryTaskAt(i); - // if (currTask != null && - // currTask.getHandleIdentifier().equals(task.getHandleIdentifier())) { - // return true; - // } - // } - // return false; - // } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskActivityLabelProvider.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskActivityLabelProvider.java deleted file mode 100644 index 9b44574f2..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskActivityLabelProvider.java +++ /dev/null @@ -1,142 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.views; - -import java.text.DateFormat; - -import org.eclipse.jface.viewers.DecoratingLabelProvider; -import org.eclipse.jface.viewers.IColorProvider; -import org.eclipse.jface.viewers.IFontProvider; -import org.eclipse.jface.viewers.ILabelDecorator; -import org.eclipse.jface.viewers.ILabelProvider; -import org.eclipse.jface.viewers.ITableLabelProvider; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.context.core.util.DateUtil; -import org.eclipse.mylar.internal.tasks.ui.TaskListColorsAndFonts; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.tasks.core.AbstractTaskContainer; -import org.eclipse.mylar.tasks.core.DateRangeActivityDelegate; -import org.eclipse.mylar.tasks.core.DateRangeContainer; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.Task.PriorityLevel; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.Image; - -/** - * @author Rob Elves - */ -public class TaskActivityLabelProvider extends DecoratingLabelProvider implements ITableLabelProvider, IColorProvider, - IFontProvider { - - private static final String UNITS_HOURS = " hours"; - - private static final String NO_MINUTES = "0 minutes"; - - private Color categoryBackgroundColor; - - public TaskActivityLabelProvider(ILabelProvider provider, ILabelDecorator decorator, Color parentBacground) { - super(provider, decorator); - this.categoryBackgroundColor = parentBacground; - } - - public Image getColumnImage(Object element, int columnIndex) { - if (columnIndex == 0) { - if (element instanceof DateRangeContainer) { - return TaskListImages.getImage(TaskListImages.CALENDAR); - } else if (element instanceof DateRangeActivityDelegate) { - return super.getImage(((DateRangeActivityDelegate) element).getCorrespondingTask()); - } else { - return super.getImage(element); - } - } else if (columnIndex == 1) { - if (element instanceof DateRangeActivityDelegate) { - DateRangeActivityDelegate taskElement = (DateRangeActivityDelegate) element; - return TaskUiUtil.getImageForPriority(PriorityLevel.fromString(taskElement.getPriority())); - } - } - return null; - } - - public String getColumnText(Object element, int columnIndex) { - if (element instanceof DateRangeActivityDelegate) { - DateRangeActivityDelegate activityDelegate = (DateRangeActivityDelegate) element; - ITask task = activityDelegate.getCorrespondingTask(); - switch (columnIndex) { - case 2: - return task.getDescription(); - case 3: - return DateUtil.getFormattedDurationShort(activityDelegate.getDateRangeContainer().getElapsed(activityDelegate)); - case 4: - return task.getEstimateTimeHours() + UNITS_HOURS; - case 5: - if (task.getReminderDate() != null) { - return DateFormat.getDateInstance(DateFormat.MEDIUM).format(task.getReminderDate()); - } else { - return ""; - } - case 6: - if (activityDelegate.getStart() > 0 && activityDelegate.getDateRangeContainer().getElapsed(activityDelegate) > 0) { - return DateFormat.getDateInstance(DateFormat.MEDIUM).format(activityDelegate.getStart()); - } else { - return ""; - } - } - } else if (element instanceof DateRangeContainer) { - DateRangeContainer taskCategory = (DateRangeContainer) element; - switch (columnIndex) { - case 2: - return taskCategory.getDescription(); - case 3: - String elapsedTimeString = NO_MINUTES; - try { - elapsedTimeString = DateUtil.getFormattedDurationShort(taskCategory.getTotalElapsed()); - if (elapsedTimeString.equals("")) - elapsedTimeString = NO_MINUTES; - } catch (RuntimeException e) { - MylarStatusHandler.fail(e, "Could not format elapsed time", true); - } - return elapsedTimeString; - case 4: - return taskCategory.getTotalEstimated() + UNITS_HOURS; - } - } - return null; - } - - @Override - public Color getBackground(Object element) { - if (element instanceof AbstractTaskContainer) { - return categoryBackgroundColor; - } else { - return super.getBackground(element); - } - } - - public Font getFont(Object element) { - if (element instanceof DateRangeContainer) { - DateRangeContainer container = (DateRangeContainer) element; - if (container.isPresent()) { - return TaskListColorsAndFonts.BOLD; - } - } else if (element instanceof DateRangeActivityDelegate) { - DateRangeActivityDelegate durationDelegate = (DateRangeActivityDelegate) element; - return super.getFont(durationDelegate.getCorrespondingTask()); - } - return super.getFont(element); - } - - public void setCategoryBackgroundColor(Color categoryBackgroundColor) { - this.categoryBackgroundColor = categoryBackgroundColor; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskActivityView.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskActivityView.java deleted file mode 100644 index 0ba1a7371..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskActivityView.java +++ /dev/null @@ -1,636 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.views; - -import java.text.DateFormat; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.jface.action.IMenuListener; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.IToolBarManager; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.jface.action.Separator; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.jface.viewers.CellEditor; -import org.eclipse.jface.viewers.ComboBoxCellEditor; -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.ICellEditorListener; -import org.eclipse.jface.viewers.ICellModifier; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.jface.viewers.ViewerDropAdapter; -import org.eclipse.mylar.internal.tasks.ui.TaskListColorsAndFonts; -import org.eclipse.mylar.internal.tasks.ui.actions.ActivityReportAction; -import org.eclipse.mylar.internal.tasks.ui.actions.OpenTaskListElementAction; -import org.eclipse.mylar.internal.tasks.ui.planner.ReminderCellEditor; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractTaskContainer; -import org.eclipse.mylar.tasks.core.DateRangeActivityDelegate; -import org.eclipse.mylar.tasks.core.DateRangeContainer; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskActivityListener; -import org.eclipse.mylar.tasks.core.ITaskListChangeListener; -import org.eclipse.mylar.tasks.ui.TaskListManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.dnd.DND; -import org.eclipse.swt.dnd.TextTransfer; -import org.eclipse.swt.dnd.Transfer; -import org.eclipse.swt.dnd.TransferData; -import org.eclipse.swt.events.ControlEvent; -import org.eclipse.swt.events.ControlListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Menu; -import org.eclipse.swt.widgets.TreeColumn; -import org.eclipse.ui.IActionBars; -import org.eclipse.ui.IMemento; -import org.eclipse.ui.IViewSite; -import org.eclipse.ui.IWorkbenchActionConstants; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.part.ViewPart; -import org.eclipse.ui.themes.IThemeManager; - -/** - * @author Rob Elves - */ -public class TaskActivityView extends ViewPart { - - private static final String MEMENTO_KEY_WIDTH = "colwidth"; - - public static final String ID = "org.eclipse.mylar.tasklist.activity"; - - public static final String columnWidthIdentifier = "org.eclipse.mylar.tasklist.ui.views.taskactivity.columnwidth"; - - public static final String tableSortIdentifier = "org.eclipse.mylar.tasklist.ui.views.taskactivity.sortIndex"; - - private static TaskActivityView INSTANCE; - - private IMemento taskActivityMemento; - - private OpenTaskListElementAction openTaskEditor; - - private String[] columnNames = new String[] { " ", " !", "Description", "Elapsed", "Estimated", "Reminder", - "Last Active" }; - - private int[] columnWidths = new int[] { 60, 12, 160, 60, 70, 100, 100 }; - - private TreeColumn[] columns; - - private TaskActivityLabelProvider taskHistoryTreeLabelProvider; - - private TreeViewer treeViewer; - - private TaskActivityContentProvider taskActivityTableContentProvider; - - private IThemeManager themeManager; - - private final IPropertyChangeListener THEME_CHANGE_LISTENER = new IPropertyChangeListener() { - public void propertyChange(PropertyChangeEvent event) { - if (event.getProperty().equals(IThemeManager.CHANGE_CURRENT_THEME) - || event.getProperty().equals(TaskListColorsAndFonts.THEME_COLOR_TASKLIST_CATEGORY)) { - taskHistoryTreeLabelProvider.setCategoryBackgroundColor(themeManager.getCurrentTheme() - .getColorRegistry().get(TaskListColorsAndFonts.THEME_COLOR_TASKLIST_CATEGORY)); - refresh(); - } - } - }; - - /** - * TODO: need lazier refresh policy. - */ - private final ITaskActivityListener ACTIVITY_LISTENER = new ITaskActivityListener() { - - public void taskActivated(ITask task) { - refresh(); - // TaskActivityView.this.treeViewer.refresh(task); - } - - public void tasksActivated(List<ITask> tasks) { - for (ITask task : tasks) { - taskActivated(task); - } - } - - public void taskDeactivated(ITask task) { - // don't need to refresh here - // TaskActivityView.this.treeViewer.refresh(task); - } - - public void activityChanged(DateRangeContainer week) { - refresh(); - // TaskActivityView.this.treeViewer.refresh(week); - } - - public void taskListRead() { - refresh(); - } - - public void calendarChanged() { - refresh(); - } - - }; - - private ITaskListChangeListener TASK_CHANGE_LISTENER = new ITaskListChangeListener() { - - public void localInfoChanged(final ITask updateTask) { - refresh(); - } - - public void repositoryInfoChanged(ITask task) { - localInfoChanged(task); - } - - public void taskMoved(ITask task, AbstractTaskContainer fromContainer, AbstractTaskContainer toContainer) { - // ignore - } - - public void taskDeleted(ITask task) { - // ignore - } - - public void containerAdded(AbstractTaskContainer container) { - // ignore - } - - public void containerDeleted(AbstractTaskContainer container) { - // ignore - } - - public void taskAdded(ITask task) { - // ignore - } - - public void containerInfoChanged(AbstractTaskContainer container) { - // ignore - } - }; - - private TaskActivityViewSorter sorter; - - public static TaskActivityView openInActivePerspective() { - try { - return (TaskActivityView) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(ID); - } catch (Exception e) { - return null; - } - } - - public TaskActivityView() { - INSTANCE = this; - TasksUiPlugin.getTaskListManager().addActivityListener(ACTIVITY_LISTENER); - TasksUiPlugin.getTaskListManager().getTaskList().addChangeListener(TASK_CHANGE_LISTENER); - } - - @Override - public void dispose() { - super.dispose(); - TasksUiPlugin.getTaskListManager().removeActivityListener(ACTIVITY_LISTENER); - TasksUiPlugin.getTaskListManager().getTaskList().removeChangeListener(TASK_CHANGE_LISTENER); - } - - @Override - public void createPartControl(Composite parent) { - themeManager = getSite().getWorkbenchWindow().getWorkbench().getThemeManager(); - themeManager.addPropertyChangeListener(THEME_CHANGE_LISTENER); - - int treeStyle = SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION; - treeViewer = new TreeViewer(parent, treeStyle); - - getViewer().getTree().setHeaderVisible(true); - getViewer().getTree().setLinesVisible(true); - getViewer().setColumnProperties(columnNames); - getViewer().setUseHashlookup(true); - - columns = new TreeColumn[columnNames.length]; - for (int i = 0; i < columnNames.length; i++) { - columns[i] = new TreeColumn(getViewer().getTree(), SWT.LEFT); - columns[i].setText(columnNames[i]); - columns[i].setWidth(columnWidths[i]); - - final int index = i; - columns[i].addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent e) { - int column = index - 1; - if (column == sorter.getSortColumn()) { - sorter.reverseDirection(); - } else { - sorter.setSortColumn(column); - } - getViewer().refresh(); - // if(taskActivityMemento != null) { - // sorter.saveState(taskActivityMemento); - // } - } - }); - - columns[i].addControlListener(new ControlListener() { - public void controlResized(ControlEvent e) { - for (int j = 0; j < columnWidths.length; j++) { - if (columns[j].equals(e.getSource())) { - columnWidths[j] = columns[j].getWidth(); - } - } - } - - public void controlMoved(ControlEvent e) { - // don't care if the control is moved - } - }); - } - - IThemeManager themeManager = getSite().getWorkbenchWindow().getWorkbench().getThemeManager(); - Color categoryBackground = themeManager.getCurrentTheme().getColorRegistry().get( - TaskListColorsAndFonts.THEME_COLOR_TASKLIST_CATEGORY); - - taskHistoryTreeLabelProvider = new TaskActivityLabelProvider(new TaskElementLabelProvider(), PlatformUI - .getWorkbench().getDecoratorManager().getLabelDecorator(), categoryBackground); - - sorter = new TaskActivityViewSorter(); - getViewer().setSorter(sorter); - taskActivityTableContentProvider = new TaskActivityContentProvider(TasksUiPlugin.getTaskListManager()); - - getViewer().setContentProvider(taskActivityTableContentProvider); - getViewer().setLabelProvider(taskHistoryTreeLabelProvider); - getViewer().setInput(getViewSite()); - restoreState(); - createCellEditorListener(); - makeActions(); - initDrop(); - hookOpenAction(); - hookContextMenu(); - contributeToActionBars(); - getSite().setSelectionProvider(getViewer()); - } - - - private void contributeToActionBars() { - IActionBars bars = getViewSite().getActionBars(); - fillLocalPullDown(bars.getMenuManager()); - fillLocalToolBar(bars.getToolBarManager()); - } - - private void fillLocalPullDown(IMenuManager manager) { - manager.add(new ActivityReportAction()); - manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); - } - - private void fillLocalToolBar(IToolBarManager manager) { - manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); - } - - - private void initDrop() { - Transfer[] types = new Transfer[] { TextTransfer.getInstance() }; - - treeViewer.addDropSupport(DND.DROP_MOVE, types, new ViewerDropAdapter(treeViewer) { - { - setFeedbackEnabled(false); - } - - @Override - public boolean performDrop(Object data) { - - IStructuredSelection selection = ((IStructuredSelection) TaskListView.getFromActivePerspective().getViewer() - .getSelection()); - - Object target = getCurrentTarget(); - DateRangeContainer container; - Calendar reminderCalendar; - if (target instanceof DateRangeContainer) { - container = (DateRangeContainer) target; - if (container.isPresent()) { - reminderCalendar = GregorianCalendar.getInstance(); - TasksUiPlugin.getTaskListManager().setSecheduledIn(reminderCalendar, 1); - } else { - reminderCalendar = container.getStart(); - } - } else if (target instanceof DateRangeActivityDelegate) { - DateRangeActivityDelegate dateRangeActivityDelegate = (DateRangeActivityDelegate) target; - if (dateRangeActivityDelegate.getDateRangeContainer().isPresent()) { - reminderCalendar = GregorianCalendar.getInstance(); - TasksUiPlugin.getTaskListManager().setSecheduledIn(reminderCalendar, 1); - } else { - reminderCalendar = dateRangeActivityDelegate.getDateRangeContainer().getStart(); - } - } else { - return false; - } - - for (Iterator iter = selection.iterator(); iter.hasNext();) { - Object selectedObject = iter.next(); - ITask task = null; - if (selectedObject instanceof ITask) { - task = (ITask) selectedObject; - } else if (selectedObject instanceof AbstractQueryHit) { - task = ((AbstractQueryHit) selectedObject).getOrCreateCorrespondingTask(); - } - if (task != null) { - TasksUiPlugin.getTaskListManager().setReminder(task, reminderCalendar.getTime()); - } - } - return true; - } - - @Override - public boolean validateDrop(Object targetObject, int operation, TransferData transferType) { - Object selectedObject = ((IStructuredSelection) TaskListView.getFromActivePerspective().getViewer().getSelection()) - .getFirstElement(); - - if (selectedObject instanceof AbstractTaskContainer) { - return false; - } - - Object target = getCurrentTarget(); - DateRangeContainer dateRangeContainer = null; - if (target instanceof DateRangeContainer) { - dateRangeContainer = (DateRangeContainer) target; - } else if (target instanceof DateRangeActivityDelegate) { - DateRangeActivityDelegate dateRangeActivityDelegate = (DateRangeActivityDelegate) target; - dateRangeContainer = dateRangeActivityDelegate.getDateRangeContainer(); - } - - if (dateRangeContainer != null && (dateRangeContainer.isPresent() || dateRangeContainer.isFuture())) { - return true; - } - return false; - } - }); - } - - private void makeActions() { - openTaskEditor = new OpenTaskListElementAction(this.getViewer()); - // openUrlInExternal = new OpenTaskInExternalBrowserAction(); - } - - private void hookOpenAction() { - getViewer().addDoubleClickListener(new IDoubleClickListener() { - public void doubleClick(DoubleClickEvent event) { - openTaskEditor.run(); - } - }); - } - - private void hookContextMenu() { - MenuManager menuMgr = new MenuManager("#PopupMenu"); - menuMgr.setRemoveAllWhenShown(true); - menuMgr.addMenuListener(new IMenuListener() { - public void menuAboutToShow(IMenuManager manager) { - TaskActivityView.this.fillContextMenu(manager); - } - }); - Menu menu = menuMgr.createContextMenu(getViewer().getControl()); - getViewer().getControl().setMenu(menu); - getSite().registerContextMenu(menuMgr, getViewer()); - } - - private void fillContextMenu(IMenuManager manager) { - manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); - } - - public static TaskActivityView getDefault() { - return INSTANCE; - } - - private TreeViewer getViewer() { - return treeViewer; - } - - private void refresh() { - if (PlatformUI.getWorkbench() != null && !PlatformUI.getWorkbench().getDisplay().isDisposed()) { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - if (getViewer().getControl() != null && !getViewer().getControl().isDisposed()) { - TaskActivityView.this.treeViewer.refresh(); - } - } - }); - } - } - - public ITask getSelectedTask() { - ISelection selection = getViewer().getSelection(); - if (selection.isEmpty()) - return null; - if (selection instanceof StructuredSelection) { - StructuredSelection structuredSelection = (StructuredSelection) selection; - Object element = structuredSelection.getFirstElement(); - if (element instanceof ITask) { - return (ITask) structuredSelection.getFirstElement(); - } - } - return null; - } - - @Override - public void setFocus() { - // ignore - } - - private void createCellEditorListener() { - CellEditor[] editors = new CellEditor[columnNames.length]; - final ComboBoxCellEditor estimateEditor = new ComboBoxCellEditor(treeViewer.getTree(), - TaskListManager.ESTIMATE_TIMES, SWT.READ_ONLY); - final ReminderCellEditor reminderEditor = new ReminderCellEditor(treeViewer.getTree()); - editors[0] = null; // not used - editors[1] = null;// not used - editors[2] = null;// not used - editors[3] = null;// not used - editors[4] = estimateEditor; - editors[5] = reminderEditor; - reminderEditor.addListener(new ICellEditorListener() { - public void applyEditorValue() { - Object selection = ((IStructuredSelection) treeViewer.getSelection()).getFirstElement(); - if (selection instanceof DateRangeActivityDelegate) { - DateRangeActivityDelegate dateRangeActivityDelegate = (DateRangeActivityDelegate) selection; - Date newReminder = reminderEditor.getReminderDate(); - if (newReminder != null) { - TasksUiPlugin.getTaskListManager().setReminder( - dateRangeActivityDelegate.getCorrespondingTask(), newReminder); - } - } - } - - public void cancelEditor() { - } - - public void editorValueChanged(boolean oldValidState, boolean newValidState) { - } - - }); - estimateEditor.addListener(new ICellEditorListener() { - public void applyEditorValue() { - Object selection = ((IStructuredSelection) treeViewer.getSelection()).getFirstElement(); - if (selection instanceof ITask) { - ITask task = (ITask) selection; - int estimate = (Integer) estimateEditor.getValue(); - if (estimate == -1) { - estimate = 0; - } - task.setEstimatedTimeHours(estimate); - // updateLabels(); - refresh(); - // treeViewer.refresh(); - } - } - - public void cancelEditor() { - } - - public void editorValueChanged(boolean oldValidState, boolean newValidState) { - } - - }); - treeViewer.setCellEditors(editors); - getViewer().setCellModifier(new TaskActivityCellModifier(treeViewer)); - } - - private class TaskActivityCellModifier implements ICellModifier { - - private TreeViewer treeViewer; - - public TaskActivityCellModifier(TreeViewer tableViewer) { - this.treeViewer = tableViewer; - } - - public boolean canModify(Object element, String property) { - int columnIndex = Arrays.asList(columnNames).indexOf(property); - if (columnIndex == 4 || columnIndex == 5) { - return true; - } - return false; - } - - public Object getValue(Object element, String property) { - if (element instanceof ITask) { - int columnIndex = Arrays.asList(columnNames).indexOf(property); - if (element instanceof ITask) { - if (columnIndex == 5) { - if (((ITask) element).getReminderDate() != null) { - return DateFormat.getDateInstance(DateFormat.MEDIUM).format( - ((ITask) element).getReminderDate()); - } else { - return null; - } - } else if (columnIndex == 4) { - return new Integer(Arrays.asList(TaskListManager.ESTIMATE_TIMES).indexOf( - ((ITask) element).getEstimateTimeHours())); - } - } - } - return null; - } - - public void modify(Object element, String property, Object value) { - int columnIndex = Arrays.asList(columnNames).indexOf(property); - if (element instanceof ITask) { - ITask task = (ITask) element; - if (columnIndex == 4) { - if (value instanceof Integer) { - task.setEstimatedTimeHours(((Integer) value).intValue() * 10); - treeViewer.refresh(); - } - } - } - } - } - - // OLD SORTER - // private class TaskActivityTableSorter extends ViewerSorter { - // - // public TaskActivityTableSorter() { - // super(); - // } - // - // @Override - // public int compare(Viewer compareViewer, Object o1, Object o2) { - // if (o1 instanceof DateRangeContainer) { - // if (o2 instanceof DateRangeContainer) { - // DateRangeContainer dateRangeTaskContainer1 = (DateRangeContainer) o1; - // DateRangeContainer dateRangeTaskContainer2 = (DateRangeContainer) o2; - // return - // dateRangeTaskContainer2.getStart().compareTo(dateRangeTaskContainer1.getStart()); - // } else { - // return 1; - // } - // } else if (o1 instanceof ITask) { - // if (o2 instanceof AbstractTaskContainer) { - // return -1; - // } else if (o2 instanceof DateRangeActivityDelegate) { - // DateRangeActivityDelegate task1 = (DateRangeActivityDelegate) o1; - // DateRangeActivityDelegate task2 = (DateRangeActivityDelegate) o2; - // Calendar calendar1 = task1.getStart();// - // MylarTaskListPlugin.getTaskActivityManager().getLastOccurrence(task1.getHandleIdentifier()); - // Calendar calendar2 = task2.getStart();// - // MylarTaskListPlugin.getTaskActivityManager().getLastOccurrence(task2.getHandleIdentifier()); - // if (calendar1 != null && calendar2 != null) { - // return calendar2.compareTo(calendar1); - // } - // } - // } - // return 0; - // } - // } - - @Override - public void init(IViewSite site, IMemento memento) throws PartInitException { - super.init(site, memento); - this.taskActivityMemento = memento; - } - - @Override - public void saveState(IMemento memento) { - IMemento colMemento = memento.createChild(columnWidthIdentifier); - for (int i = 0; i < columnWidths.length; i++) { - IMemento m = colMemento.createChild("col" + i); - m.putInteger(MEMENTO_KEY_WIDTH, columnWidths[i]); - } - - sorter.saveState(memento); - } - - private void restoreState() { - - if (taskActivityMemento != null) { - IMemento taskActivityWidth = taskActivityMemento.getChild(columnWidthIdentifier); - if (taskActivityWidth != null) { - for (int i = 0; i < columnWidths.length; i++) { - IMemento m = taskActivityWidth.getChild("col" + i); - if (m != null) { - int width = m.getInteger(MEMENTO_KEY_WIDTH); - columnWidths[i] = width; - columns[i].setWidth(width); - } - } - } - - sorter.restoreState(taskActivityMemento); - - } - getViewer().refresh(); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskActivityViewSorter.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskActivityViewSorter.java deleted file mode 100644 index 7aa770767..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskActivityViewSorter.java +++ /dev/null @@ -1,193 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.views; - -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerSorter; -import org.eclipse.mylar.tasks.core.AbstractTaskContainer; -import org.eclipse.mylar.tasks.core.DateRangeActivityDelegate; -import org.eclipse.mylar.tasks.core.DateRangeContainer; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.Task; -import org.eclipse.mylar.tasks.core.Task.PriorityLevel; -import org.eclipse.ui.IMemento; - -/** - * @author Rob Elves - */ -public class TaskActivityViewSorter extends ViewerSorter { - - private static final String activitySortColumn = "org.eclipse.mylar.tasklist.ui.views.taskactivitysorter.sortcolumn"; - - private static final String activityViewSorterSettings = "org.eclipse.mylar.tasklist.ui.views.taskactivitysorter.sortsettings"; - - private int[] directions; - - private final static int ASCENDING = 1; - - private final static int DESCENDING = -1; - - private final static int PRIORITY = 0; - - private final static int DESCRIPTION = 1; - - private final static int ELAPSED = 2; - - private final static int ESTIMATED = 3; - - private final static int REMINDER = 4; - - private final static int LAST_ACTIVE = 5; - - private int sortColumn = LAST_ACTIVE; - - final static int[] DEFAULT_DIRECTIONS = { ASCENDING, ASCENDING, ASCENDING, DESCENDING, DESCENDING, DESCENDING, - DESCENDING }; - - public TaskActivityViewSorter() { - resetState(); - } - - public void reverseDirection() { - directions[sortColumn] *= -1; - } - - public void setSortDirection(int direction) { - if (direction == ASCENDING || direction == DESCENDING) - directions[sortColumn] = direction; - } - - public int getDirection() { - return directions[sortColumn]; - } - - public int getSortColumn() { - return sortColumn; - } - - public void setSortColumn(int col) { - if (col < 0 || col >= directions.length) { - sortColumn = LAST_ACTIVE; - } else { - sortColumn = col; - } - } - - public void resetState() { - directions = new int[DEFAULT_DIRECTIONS.length]; - System.arraycopy(DEFAULT_DIRECTIONS, 0, directions, 0, directions.length); - } - - private int compare(DateRangeActivityDelegate task1, DateRangeActivityDelegate task2) { - if (sortColumn >= directions.length) - return 0; - - switch (sortColumn) { - case PRIORITY: { - PriorityLevel a = Task.PriorityLevel.fromString(task1.getPriority()); - PriorityLevel b = Task.PriorityLevel.fromString(task2.getPriority()); - int result = a.compareTo(b); - return result * directions[sortColumn]; - } - case DESCRIPTION: { - String description1 = task1.getDescription(); - String description2 = task2.getDescription(); - int result = collator.compare(description1, description2); - return result * directions[sortColumn]; - } - case ELAPSED: { - long elapsed1 = task1.getDateRangeContainer().getElapsed(task1); - long elapsed2 = task2.getDateRangeContainer().getElapsed(task2); - int result = new Long(elapsed1).compareTo(new Long(elapsed2)); - return result * directions[sortColumn]; - } - case ESTIMATED: { - int estimate1 = task1.getEstimateTimeHours(); - int estimate2 = task2.getEstimateTimeHours(); - int result = estimate1 - estimate2; - return result * directions[sortColumn]; - } - case REMINDER: { - int result = 0; - if (task1.getReminderDate() != null && task2.getReminderDate() != null) { - long reminder1 = task1.getReminderDate().getTime(); - long reminder2 = task2.getReminderDate().getTime(); - result = new Long(reminder1).compareTo(new Long(reminder2)); - } else if (task1.getReminderDate() != null) { - result = 1; - } else if (task2.getReminderDate() != null) { - result = -1; - } - return result * directions[sortColumn]; - } - case LAST_ACTIVE: { - long active1 = task1.getStart(); - long active2 = task2.getStart(); - int result = new Long(active1).compareTo(new Long(active2)); - return result * directions[sortColumn]; - } - } - return 0; - } - - public int compare(Viewer viewer, Object o1, Object o2) { - if (o1 instanceof DateRangeContainer) { - if (o2 instanceof DateRangeContainer) { - DateRangeContainer dateRangeTaskContainer1 = (DateRangeContainer) o1; - DateRangeContainer dateRangeTaskContainer2 = (DateRangeContainer) o2; - return dateRangeTaskContainer2.getStart().compareTo(dateRangeTaskContainer1.getStart()); - } else { - return 1; - } - } else if (o1 instanceof ITask) { - if (o2 instanceof AbstractTaskContainer) { - return -1; - } else if (o2 instanceof DateRangeActivityDelegate) { - DateRangeActivityDelegate task1 = (DateRangeActivityDelegate) o1; - DateRangeActivityDelegate task2 = (DateRangeActivityDelegate) o2; - return compare(task1, task2); - } - } - return 0; - } - - public void saveState(IMemento memento) { - if (memento == null) - return; - IMemento sortingMemento = memento.createChild(activityViewSorterSettings); - if (sortingMemento != null) { - - for (int i = 0; i < directions.length; i++) { - sortingMemento.putInteger("direction" + i, directions[i]); - } - sortingMemento.putInteger(activitySortColumn, sortColumn); - } - } - - public void restoreState(IMemento memento) { - if (memento == null) - return; - - IMemento sortingMemento = memento.getChild(activityViewSorterSettings); - if (sortingMemento != null) { - try { - for (int i = 0; i < directions.length; i++) { - directions[i] = sortingMemento.getInteger("direction" + i); - } - sortColumn = sortingMemento.getInteger(activitySortColumn); - } catch (NumberFormatException e) { - resetState(); - } - } - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskElementLabelProvider.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskElementLabelProvider.java deleted file mode 100644 index e70a60b54..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskElementLabelProvider.java +++ /dev/null @@ -1,235 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.views; - -import org.eclipse.jface.viewers.IColorProvider; -import org.eclipse.jface.viewers.IFontProvider; -import org.eclipse.jface.viewers.LabelProvider; -import org.eclipse.mylar.internal.tasks.ui.ITaskHighlighter; -import org.eclipse.mylar.internal.tasks.ui.TaskListColorsAndFonts; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.AbstractTaskContainer; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.mylar.tasks.core.TaskArchive; -import org.eclipse.mylar.tasks.core.TaskCategory; -import org.eclipse.mylar.tasks.ui.AbstractRepositoryConnectorUi; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.Image; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.themes.IThemeManager; - -/** - * @author Mik Kersten - */ -public class TaskElementLabelProvider extends LabelProvider implements IColorProvider, IFontProvider { - - private IThemeManager themeManager = PlatformUI.getWorkbench().getThemeManager(); - - @Override - public Image getImage(Object element) { - if (element instanceof TaskArchive) { - return TaskListImages.getImage(TaskListImages.CATEGORY_ARCHIVE); - } else if (element instanceof TaskCategory) { - return TaskListImages.getImage(TaskListImages.CATEGORY); - } else if (element instanceof AbstractRepositoryQuery) { - return TaskListImages.getImage(TaskListImages.QUERY); - } else if (element instanceof AbstractQueryHit) { - AbstractQueryHit hit = (AbstractQueryHit)element; - if (hit.getCorrespondingTask() != null) { - return getImage(hit.getCorrespondingTask()); - } else { - return TaskListImages.getImage(TaskListImages.TASK_REMOTE); - } - } else if (element instanceof ITask) { - ITask task = (ITask)element; - // TODO: fix this mess that delaying decoration got us into - if (task.isCompleted()) { - if (task instanceof AbstractRepositoryTask) { - AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getRepositoryUi( - ((AbstractRepositoryTask)task).getRepositoryKind()); - if (connectorUi != null && !connectorUi.hasRichEditor()) { - return TaskListImages.getImage(TaskListImages.TASK_COMPLETED); - } else { - return TaskListImages.getImage(TaskListImages.TASK_REPOSITORY_COMPLETED); - } - } else { - return TaskListImages.getImage(TaskListImages.TASK_COMPLETED); - } - } else if (task.getNotes() != null && !task.getNotes().trim().equals("")) { - if (task instanceof AbstractRepositoryTask) { - AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getRepositoryUi( - ((AbstractRepositoryTask)task).getRepositoryKind()); - if (connectorUi != null && !connectorUi.hasRichEditor()) { - return TaskListImages.getImage(TaskListImages.TASK_NOTES); - } else { - return TaskListImages.getImage(TaskListImages.TASK_REPOSITORY_NOTES); - } - } else { - return TaskListImages.getImage(TaskListImages.TASK_NOTES); - } - } else { - if (task instanceof AbstractRepositoryTask) { - AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getRepositoryUi( - ((AbstractRepositoryTask)task).getRepositoryKind()); - if (connectorUi != null && !connectorUi.hasRichEditor()) { - return TaskListImages.getImage(TaskListImages.TASK); - } else { - return TaskListImages.getImage(TaskListImages.TASK_REPOSITORY); - } - } else { - return TaskListImages.getImage(TaskListImages.TASK); - } - } - } - return null; - } - - @Override - public String getText(Object object) { - - if(object instanceof AbstractQueryHit) { - AbstractQueryHit hit = (AbstractQueryHit)object; - if(!hit.getDescription().contains(": ")) { - return hit.getId() + ": " + hit.getDescription(); - } else { - return hit.getDescription(); - } - } else if( object instanceof AbstractRepositoryTask) { - AbstractRepositoryTask task = (AbstractRepositoryTask)object; - if(!task.getDescription().contains(": ")) { - return AbstractRepositoryTask.getTaskId(task.getHandleIdentifier()) + ": " + task.getDescription(); - } else { - return task.getDescription(); - } - } else if (object instanceof ITaskListElement) { - ITaskListElement element = (ITaskListElement) object; - return element.getDescription(); - } else { - return super.getText(object); - } - } - - public Color getForeground(Object object) { - if (object instanceof AbstractTaskContainer) { - for (ITask child : ((AbstractTaskContainer) object).getChildren()) { - if (child.isActive()) { - return TaskListColorsAndFonts.COLOR_TASK_ACTIVE; - } else if (child.isPastReminder() && !child.isCompleted()) { - return themeManager.getCurrentTheme().getColorRegistry().get(TaskListColorsAndFonts.THEME_COLOR_TASK_OVERDUE); - } - } - } else if (object instanceof AbstractRepositoryQuery) { - // FIXME AbstractRepositoryQuery is a subclass of AbstractTaskContainer so this is probably a dead branch! - for (AbstractQueryHit child : ((AbstractRepositoryQuery) object).getHits()) { - ITask task = ((AbstractQueryHit) child).getCorrespondingTask(); - if (task != null && task.isActive()) { - return TaskListColorsAndFonts.COLOR_TASK_ACTIVE; - } - } - } else if (object instanceof AbstractQueryHit && ((AbstractQueryHit) object).getCorrespondingTask() == null) { - AbstractQueryHit hit = (AbstractQueryHit) object; - if ((hit.getCorrespondingTask() != null && hit.getCorrespondingTask().isCompleted()) - || hit.isCompleted()) { - return TaskListColorsAndFonts.COLOR_TASK_COMPLETED; - } - } else if (object instanceof ITaskListElement) { - ITask task = getCorrespondingTask((ITaskListElement) object); - if (task != null) { - if (TasksUiPlugin.getTaskListManager().isCompletedToday(task)) { - return themeManager.getCurrentTheme().getColorRegistry().get(TaskListColorsAndFonts.THEME_COLOR_TASK_TODAY_COMPLETED); - } else if (task.isCompleted()) { - return TaskListColorsAndFonts.COLOR_TASK_COMPLETED; - } else if (task.isActive()) { - return TaskListColorsAndFonts.COLOR_TASK_ACTIVE; - } else if (task.isPastReminder()) { - return themeManager.getCurrentTheme().getColorRegistry().get(TaskListColorsAndFonts.THEME_COLOR_TASK_OVERDUE); - } else if (TasksUiPlugin.getTaskListManager().isReminderToday(task)) { - return themeManager.getCurrentTheme().getColorRegistry().get(TaskListColorsAndFonts.THEME_COLOR_TASK_TODAY_SCHEDULED); - } else if (TasksUiPlugin.getTaskListManager().isReminderThisWeek(task)) { - return themeManager.getCurrentTheme().getColorRegistry().get(TaskListColorsAndFonts.THEME_COLOR_TASK_THISWEEK_SCHEDULED); - } - } - } - return null; - } - - /** - * TODO: move - */ - public static ITask getCorrespondingTask(ITaskListElement element) { - if (element instanceof ITask) { - return (ITask) element; - } else if (element instanceof AbstractQueryHit) { - return ((AbstractQueryHit) element).getCorrespondingTask(); - } else { - return null; - } - } - - public Color getBackground(Object element) { - if (element instanceof ITask) { - ITask task = (ITask) element; - ITaskHighlighter highlighter = TasksUiPlugin.getDefault().getHighlighter(); - if (highlighter != null) { - return highlighter.getHighlightColor(task); - } - } else if (element instanceof AbstractQueryHit) { - return getBackground(((AbstractQueryHit)element).getCorrespondingTask()); - } -// return Display.getCurrent().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND); - return null; - } - - public Font getFont(Object element) { - if (!(element instanceof ITaskListElement)) { - return null; - } - ITask task = getCorrespondingTask((ITaskListElement) element); - if (task instanceof AbstractRepositoryTask) { - AbstractRepositoryTask repositoryTask = (AbstractRepositoryTask)task; - if (repositoryTask.isSynchronizing()) { - return TaskListColorsAndFonts.ITALIC; - } - } - if (element instanceof AbstractTaskContainer) { - if (element instanceof AbstractRepositoryQuery) { - if (((AbstractRepositoryQuery)element).isSynchronizing()) { - return TaskListColorsAndFonts.ITALIC; - } - } - for (ITask child : ((AbstractTaskContainer) element).getChildren()) { - if (child.isActive()) { - return TaskListColorsAndFonts.BOLD; - } - } - } - if (task != null) { - if (task.isActive()) { - return TaskListColorsAndFonts.BOLD; - } else if (task.isCompleted()) { - return TaskListColorsAndFonts.STRIKETHROUGH; - } - for (ITask child : task.getChildren()) { - if (child.isActive()) { - return TaskListColorsAndFonts.BOLD; - } - } - } - return null; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskInputDialog.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskInputDialog.java deleted file mode 100644 index 425d65c62..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskInputDialog.java +++ /dev/null @@ -1,291 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.views; - -import java.util.Date; - -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.RetrieveTitleFromUrlJob; -import org.eclipse.swt.SWT; -import org.eclipse.swt.dnd.Clipboard; -import org.eclipse.swt.dnd.TextTransfer; -import org.eclipse.swt.events.KeyEvent; -import org.eclipse.swt.events.KeyListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Text; - -/** - * @author Ken Sueda - * @author Wesley Coelho (Extended to allow URL input) - * @author Mik Kersten - */ -public class TaskInputDialog extends Dialog { - - public static final String LABEL_SHELL = "New Task"; - - private static final String LABEL_DESCRIPTION = "Description:"; - - private String taskName = ""; - - private String priority = "P3"; - - private String taskURL = "http://"; - - private Date reminderDate = null; - - Text taskNameTextWidget = null; - - private Text issueURLTextWidget = null; - - private Button getDescButton = null; - - public TaskInputDialog(Shell parentShell) { - super(parentShell); - } - - protected Control createDialogArea(Composite parent) { - Composite composite = (Composite) super.createDialogArea(parent); - GridLayout gl = new GridLayout(5, false); - composite.setLayout(gl); - GridData data = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL - | GridData.VERTICAL_ALIGN_CENTER); - data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH + 180); - composite.setLayoutData(data); - - Label taskNameLabel = new Label(composite, SWT.WRAP); - taskNameLabel.setText(LABEL_DESCRIPTION); - taskNameLabel.setFont(parent.getFont()); - - taskNameTextWidget = new Text(composite, SWT.SINGLE | SWT.BORDER); - GridData taskNameGD = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL); - taskNameGD.widthHint = 200; - taskNameGD.horizontalSpan = 1; - taskNameTextWidget.setLayoutData(taskNameGD); - - final Combo c = new Combo(composite, SWT.NO_BACKGROUND | SWT.MULTI | SWT.V_SCROLL | SWT.READ_ONLY - | SWT.DROP_DOWN); - c.setItems(TaskListView.PRIORITY_LEVELS); - c.setText(priority); - c.addSelectionListener(new SelectionListener() { - public void widgetSelected(SelectionEvent e) { - priority = c.getText(); - } - - public void widgetDefaultSelected(SelectionEvent e) { - widgetSelected(e); - } - }); - -// Label spacer = new Label(composite, SWT.NONE); -// GridData spacerGD = new GridData(); -// spacerGD.horizontalSpan = 1; -//// spacerGD.widthHint = 5; -// spacer.setLayoutData(spacerGD); -// -// Composite reminderComp = new Composite(composite, SWT.NONE); -// GridLayout reminderCompGL = new GridLayout(3, false); -// reminderCompGL.marginHeight = 0; -// reminderCompGL.marginWidth = 0; -// reminderComp.setLayout(reminderCompGL); -// GridData reminderCompGD = new GridData(); -// reminderCompGD.horizontalSpan = 1; -// reminderCompGD.horizontalAlignment = SWT.RIGHT; -// reminderComp.setLayoutData(reminderCompGD); -// Label reminderLabel = new Label(reminderComp, SWT.NONE); - final DatePicker datePicker = new DatePicker(composite, SWT.BORDER, DatePicker.LABEL_CHOOSE); - datePicker.addPickerSelectionListener(new SelectionListener() { - public void widgetSelected(SelectionEvent arg0) { - if (datePicker.getDate() != null) { - reminderDate = datePicker.getDate().getTime(); - } - } - - public void widgetDefaultSelected(SelectionEvent arg0) { - // ignore - } - }); - - Button removeReminder = new Button(composite, SWT.PUSH | SWT.CENTER); - removeReminder.setText("Clear"); - removeReminder.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - datePicker.setDate(null); - reminderDate = null; - } - }); - -// -// datePicker.setLayout(new GridLayout()); -// GridData datePickerGD = new GridData(); -// datePickerGD.widthHint = 300; -// datePicker.setLayoutData(datePickerGD); - - - Label urlLabel = new Label(composite, SWT.WRAP); - urlLabel.setText("Web Link:"); - urlLabel.setFont(parent.getFont()); - - issueURLTextWidget = new Text(composite, SWT.SINGLE | SWT.BORDER); - issueURLTextWidget.setText(getDefaultIssueUrl()); - GridData urlData = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL); - urlData.horizontalSpan = 3; - urlData.grabExcessHorizontalSpace = true; - issueURLTextWidget.setLayoutData(urlData); - - getDescButton = new Button(composite, SWT.PUSH); - getDescButton.setText("Get Description"); - getDescButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); - setButtonStatus(); - - issueURLTextWidget.addKeyListener(new KeyListener() { - public void keyPressed(KeyEvent e) { - setButtonStatus(); - } - - public void keyReleased(KeyEvent e) { - setButtonStatus(); - } - }); - - getDescButton.addSelectionListener(new SelectionListener() { - public void widgetSelected(SelectionEvent e) { - retrieveTaskDescription(issueURLTextWidget.getText()); - } - - public void widgetDefaultSelected(SelectionEvent e) { - } - }); - - return composite; - } - - /** - * Sets the Get Description button enabled or not depending on whether there - * is a URL specified - */ - protected void setButtonStatus() { - String url = issueURLTextWidget.getText(); - - if (url.length() > 10 && (url.startsWith("http://") || url.startsWith("https://"))) { -// String defaultPrefix = ContextCorePlugin.getDefault().getPreferenceStore().getString( -// TaskListPreferenceConstants.DEFAULT_URL_PREFIX); -// if (url.equals(defaultPrefix)) { -// getDescButton.setEnabled(false); -// } else { - getDescButton.setEnabled(true); -// } - } else { - getDescButton.setEnabled(false); - } - } - - /** - * Returns the default URL text for the task by first checking the contents - * of the clipboard and then using the default prefix preference if that - * fails - */ - protected String getDefaultIssueUrl() { - - String clipboardText = getClipboardText(); - if ((clipboardText.startsWith("http://") || clipboardText.startsWith("https://") && clipboardText.length() > 10)) { - return clipboardText; - } else { - return taskURL; - } -// String defaultPrefix = ContextCorePlugin.getDefault().getPreferenceStore().getString( -// TaskListPreferenceConstants.DEFAULT_URL_PREFIX); -// if (!defaultPrefix.equals("")) { -// return defaultPrefix; -// } - } - - /** - * Attempts to set the task pageTitle to the title from the specified url - */ - protected void retrieveTaskDescription(final String url) { - - try { - RetrieveTitleFromUrlJob job = new RetrieveTitleFromUrlJob(issueURLTextWidget.getText()) { - - @Override - protected void setTitle(final String pageTitle) { - taskNameTextWidget.setText(pageTitle); - } - - }; - job.schedule(); - - } catch (RuntimeException e) { - MylarStatusHandler.fail(e, "could not open task web page", false); - } - } - - /** - * Returns the contents of the clipboard or "" if no text content was - * available - */ - protected String getClipboardText() { - Clipboard clipboard = new Clipboard(Display.getDefault()); - TextTransfer transfer = TextTransfer.getInstance(); - String contents = (String) clipboard.getContents(transfer); - if (contents != null) { - return contents; - } else { - return ""; - } - } - - public String getSelectedPriority() { - return priority; - } - - public String getTaskname() { - return taskName; - } - - public Date getReminderDate() { - return reminderDate; - } - - public String getIssueURL() { - return taskURL; - } - - protected void buttonPressed(int buttonId) { - if (buttonId == IDialogConstants.OK_ID) { - taskName = taskNameTextWidget.getText(); - taskURL = issueURLTextWidget.getText(); - } else { - taskName = null; - } - super.buttonPressed(buttonId); - } - - protected void configureShell(Shell shell) { - super.configureShell(shell); - shell.setText(LABEL_SHELL); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskKeyComparator.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskKeyComparator.java deleted file mode 100644 index b77ee4c72..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskKeyComparator.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.eclipse.mylar.internal.tasks.ui.views; - -import java.util.Comparator; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * @author Eugene Kuleshov (https://bugs.eclipse.org/bugs/show_bug.cgi?id=129511) - */ -public class TaskKeyComparator implements Comparator { - - public static final Pattern PATTERN = Pattern.compile("(?:([A-Za-z]*[:_\\-]?)(\\d+))?(.*)"); - - public int compare(Object o1, Object o2) { - String[] a1 = split((String) o1); - String[] a2 = split((String) o2); - - String s1 = a1[0]; - String s2 = a2[0]; - if (s1 == null && s2 != null) - return -1; - if (s1 != null && s2 == null) - return 1; - - if (s1 != null && s2 != null) { - int n = s1.compareTo(s2); - if (n != 0) - return n; - - s1 = a1[1]; - s2 = a2[1]; - if (s1.length() == s2.length() || s1.length() == 0 || s2.length() == 0) { - n = s1.compareTo(s2); - } else { - n = Integer.valueOf(s1).compareTo(Integer.valueOf(s2)); - } - if (n != 0) - return n; - } - - return a1[2].compareTo(a2[2]); - } - - public String[] split(String s) { - Matcher matcher = PATTERN.matcher(s); - - if (!matcher.find()) { - return new String[] { null, null, s }; - } - - int n = matcher.groupCount(); - String[] res = new String[n]; - for (int i = 1; i < n + 1; i++) { - res[i - 1] = matcher.group(i); - } - return res; - } -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListContentProvider.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListContentProvider.java deleted file mode 100644 index 9655d11cf..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListContentProvider.java +++ /dev/null @@ -1,258 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.views; - -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - -import org.eclipse.jface.viewers.IStructuredContentProvider; -import org.eclipse.jface.viewers.ITreeContentProvider; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.mylar.internal.tasks.ui.AbstractTaskListFilter; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractTaskContainer; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.mylar.tasks.core.Task; -import org.eclipse.mylar.tasks.core.TaskArchive; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.widgets.Text; - -/** - * TODO: move to viewer filter architecture? - * - * @author Mik Kersten - */ -public class TaskListContentProvider implements IStructuredContentProvider, ITreeContentProvider { - - private final TaskListView view; - - public TaskListContentProvider(TaskListView view) { - this.view = view; - } - - public void inputChanged(Viewer v, Object oldInput, Object newInput) { - this.view.expandToActiveTasks(); - } - - public void dispose() { - // ignore - } - - public Object[] getElements(Object parent) { - if (parent.equals(this.view.getViewSite())) { - return applyFilter(TasksUiPlugin.getTaskListManager().getTaskList().getRootElements()).toArray(); - } - return getChildren(parent); - } - - public Object getParent(Object child) { - if (child instanceof ITask) { - if (((ITask) child).getParent() != null) { - return ((ITask) child).getParent(); - } else { - return ((ITask) child).getContainer(); - } - } - return null; - } - - public Object[] getChildren(Object parent) { - return getFilteredChildrenFor(parent).toArray(); - } - - /** - * NOTE: If parent is an ITask, this method checks if parent has unfiltered children (see bug 145194). - */ - public boolean hasChildren(Object parent) { - if (parent instanceof AbstractRepositoryQuery) { - AbstractRepositoryQuery t = (AbstractRepositoryQuery) parent; - Set<AbstractQueryHit> hits = t.getHits(); // FIXME should provide hasHits() method! - return hits != null && hits.size() > 0; - } else if (parent instanceof AbstractTaskContainer) { - AbstractTaskContainer cat = (AbstractTaskContainer) parent; - return cat.getChildren() != null && cat.getChildren().size() > 0; // FIXME should provide hasChildren method! - } else if (parent instanceof ITask) { - return taskHasUnfilteredChildren((ITask) parent); - } - return false; - } - - private boolean taskHasUnfilteredChildren(ITask parent) { - Set<ITask> children = parent.getChildren(); - if (children != null) { - for (ITask task : children) { - if (! filter(task)) { - return true; - } - } - } - return false; - } - - private List<ITaskListElement> applyFilter(Set<ITaskListElement> roots) { - String filterText = ((Text) this.view.getFilteredTree().getFilterControl()).getText(); - if (containsNoFilterText(filterText)) { - List<ITaskListElement> filteredRoots = new ArrayList<ITaskListElement>(); - for (ITaskListElement element : roots) { - if (element instanceof ITask) { - if (!filter(element)) { - filteredRoots.add(element); - } - } else if (element instanceof AbstractRepositoryQuery) { - if (selectQuery((AbstractRepositoryQuery)element)) { - filteredRoots.add(element); - } - } else if (element instanceof AbstractTaskContainer) { - if (selectContainer((AbstractTaskContainer)element)) { - filteredRoots.add(element); - } - } - } - return filteredRoots; - } else { - return new ArrayList<ITaskListElement>(roots); - } - } - - /** - * See bug 109693 - */ - private boolean containsNoFilterText(String filterText) { - return filterText == null || filterText.length() == 0; - } - - private boolean selectQuery(AbstractRepositoryQuery cat) { - Set<AbstractQueryHit> hits = cat.getHits(); - if (hits.size() == 0) { - return true; - } - for (AbstractQueryHit element : hits) { - if (!filter(element)) { - return true; - } - } - return false; - } - - private boolean selectContainer(AbstractTaskContainer container) { - if (filter(container) && !shouldAlwaysShow(container)) { - return false; - } - - Set<ITask> children = container.getChildren(); - if (children.size() == 0) { - return true; - } - for (ITaskListElement element : children) { - if (!filter(element)) { - return true; - } - } - return false; - } - - private boolean shouldAlwaysShow(AbstractTaskContainer container) { - for (ITask task : container.getChildren()) { - if (shouldAlwaysShow(task)) { - if (container instanceof TaskArchive) { - Set<AbstractQueryHit> existingHits = TasksUiPlugin.getTaskListManager().getTaskList().getQueryHitsForHandle(task.getHandleIdentifier()); - if (existingHits.isEmpty()) { - return true; - } - } else { - return true; - } - } - } - return false; - } - - private boolean shouldAlwaysShow(ITask task) { - for (AbstractTaskListFilter filter : this.view.getFilters()) { - if (filter.shouldAlwaysShow(task)) { - return true; - } - } - return false; - } - - private List<Object> getFilteredChildrenFor(Object parent) { - if (containsNoFilterText(((Text) this.view.getFilteredTree().getFilterControl()).getText()) - || ((Text) this.view.getFilteredTree().getFilterControl()).getText().startsWith(TaskListView.FILTER_LABEL)) { - List<Object> children = new ArrayList<Object>(); - if (parent instanceof AbstractTaskContainer && ((AbstractTaskContainer)parent).isLocal()) { - if (filter(parent)) { - if (((AbstractTaskContainer)parent) instanceof TaskArchive) { - for (ITask task : ((AbstractTaskContainer) parent).getChildren()) { - if (shouldAlwaysShow(task)) { - // TODO: archive logic? - Set<AbstractQueryHit> existingHits = TasksUiPlugin.getTaskListManager().getTaskList().getQueryHitsForHandle(task.getHandleIdentifier()); - if (existingHits.isEmpty()) { - children.add(task); - } - } - } - return children; - } - } - Set<? extends ITaskListElement> list = ((AbstractTaskContainer) parent).getChildren(); - for (ITaskListElement element : list) { - if (!filter(element)) { - children.add(element); - } - } - return children; - } else if (parent instanceof AbstractRepositoryQuery) { - for (ITaskListElement element : ((AbstractRepositoryQuery) parent).getHits()) { - if (!filter(element)) { - children.add(element); - } - } - return children; - } else if (parent instanceof Task) { - Set<ITask> subTasks = ((Task) parent).getChildren(); - for (ITask t : subTasks) { - if (!filter(t)) { - children.add(t); - } - } - return children; - } - } else { - List<Object> children = new ArrayList<Object>(); - if (parent instanceof AbstractRepositoryQuery) { - children.addAll(((AbstractRepositoryQuery) parent).getHits()); - return children; - } else if (parent instanceof AbstractTaskContainer) { - children.addAll(((AbstractTaskContainer) parent).getChildren()); - return children; - - } else if (parent instanceof Task) { - children.addAll(((Task) parent).getChildren()); - return children; - } - } - return new ArrayList<Object>(); - } - - private boolean filter(Object obj) { - for (AbstractTaskListFilter filter : this.view.getFilters()) { - if (!filter.select(obj)) { - return true; - } - } - return false; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDragSourceListener.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDragSourceListener.java deleted file mode 100644 index b6a7cf186..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDragSourceListener.java +++ /dev/null @@ -1,86 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.views; - -import java.io.File; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.mylar.context.core.ContextCorePlugin; -import org.eclipse.mylar.internal.tasks.ui.actions.CopyDetailsAction; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.mylar.tasks.ui.TaskTransfer; -import org.eclipse.swt.dnd.DragSourceEvent; -import org.eclipse.swt.dnd.DragSourceListener; -import org.eclipse.swt.dnd.FileTransfer; -import org.eclipse.swt.dnd.TextTransfer; - -/** - * @author Mik Kersten - */ -class TaskListDragSourceListener implements DragSourceListener { - - static final String DELIM = ", "; - - private final TaskListView view; - -// static final String ID_DATA_TASK_DRAG = "task-drag"; - - /** - * @param view - */ - public TaskListDragSourceListener(TaskListView view) { - this.view = view; - } - - public void dragStart(DragSourceEvent event) { - if (((StructuredSelection) this.view.getViewer().getSelection()).isEmpty()) { - event.doit = false; - } - } - - public void dragSetData(DragSourceEvent event) { - StructuredSelection selection = (StructuredSelection) this.view.getViewer().getSelection(); - ITaskListElement selectedElement = null; - if (((IStructuredSelection) selection).getFirstElement() instanceof ITaskListElement) { - selectedElement = (ITaskListElement)((IStructuredSelection) selection).getFirstElement(); - } - if (TaskTransfer.getInstance().isSupportedType(event.dataType)) { - List<ITask> tasks = new ArrayList<ITask>(); - for (Iterator iter = selection.iterator(); iter.hasNext();) { - ITaskListElement element = (ITaskListElement) iter.next(); - if (element instanceof ITask) { - tasks.add((ITask)element); - } - } - event.data = tasks.toArray(); - } else if (FileTransfer.getInstance().isSupportedType(event.dataType)) { - File file = ContextCorePlugin.getContextManager().getFileForContext(selectedElement.getHandleIdentifier()); - if (file != null) { - event.data = new String[] { file.getAbsolutePath() }; - } - } else if (TextTransfer.getInstance().isSupportedType(event.dataType)) { - event.data = CopyDetailsAction.getTextForTask(selectedElement); - } -// else { -// event.data = ID_DATA_TASK_DRAG; -// } - } - - public void dragFinished(DragSourceEvent event) { - // don't care if the drag is done - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDropAdapter.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDropAdapter.java deleted file mode 100644 index a88909cf6..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDropAdapter.java +++ /dev/null @@ -1,240 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.views; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerDropAdapter; -import org.eclipse.mylar.context.core.ContextCorePlugin; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.RetrieveTitleFromUrlJob; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.internal.tasks.ui.actions.NewLocalTaskAction; -import org.eclipse.mylar.internal.tasks.ui.actions.TaskActivateAction; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.mylar.tasks.core.Task; -import org.eclipse.mylar.tasks.core.TaskCategory; -import org.eclipse.mylar.tasks.ui.TaskTransfer; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.dnd.FileTransfer; -import org.eclipse.swt.dnd.TextTransfer; -import org.eclipse.swt.dnd.TransferData; - -/** - * @author Mik Kersten - * @author Rob Elves (added URL based task creation support) - */ -public class TaskListDropAdapter extends ViewerDropAdapter { - - private Task newTask = null; - - private TransferData currentTransfer; - - public TaskListDropAdapter(Viewer viewer) { - super(viewer); - setFeedbackEnabled(true); - } - - @Override - public boolean performDrop(Object data) { - Object currentTarget = getCurrentTarget(); - List<ITask> tasksToMove = new ArrayList<ITask>(); - ISelection selection = ((TreeViewer) getViewer()).getSelection(); - if (isUrl(data) && createTaskFromUrl(data)) { - tasksToMove.add(newTask); - } else if (TaskTransfer.getInstance().isSupportedType(currentTransfer)) { - for (Object selectedObject : ((IStructuredSelection) selection).toList()) { - ITask toMove = null; - if (selectedObject instanceof ITask) { - toMove = (ITask) selectedObject; - } else if (selectedObject instanceof AbstractQueryHit) { - toMove = ((AbstractQueryHit) selectedObject).getOrCreateCorrespondingTask(); - } - if (toMove != null) { - tasksToMove.add(toMove); - } - } - } else if (data instanceof String && createTaskFromString((String)data)) { - tasksToMove.add(newTask); - } else if (FileTransfer.getInstance().isSupportedType(currentTransfer)) { - ITask targetTask = null; - if (getCurrentTarget() instanceof ITask) { - targetTask = (ITask)getCurrentTarget(); - } - if (targetTask != null) { - final String[] names = (String[]) data; - boolean confirmed = MessageDialog.openConfirm(getViewer().getControl().getShell(), TasksUiPlugin.TITLE_DIALOG, - "Overwrite the context of the target task with the source's?"); - if (confirmed) { - String path = names[0]; - File file = new File(path); - if (ContextCorePlugin.getContextManager().isValidContextFile(file)) { - ContextCorePlugin.getContextManager().transferContextAndActivate(targetTask.getHandleIdentifier(), file); - new TaskActivateAction().run(targetTask); - } - } - } - } - - for (ITask task : tasksToMove) { - if (currentTarget instanceof TaskCategory) { - TasksUiPlugin.getTaskListManager().getTaskList().moveToContainer((TaskCategory) currentTarget, task); - } else if (currentTarget instanceof ITask) { - ITask targetTask = (ITask) currentTarget; - if (targetTask.getContainer() == null) { - TasksUiPlugin.getTaskListManager().getTaskList().moveToRoot(task); - } else { - TasksUiPlugin.getTaskListManager().getTaskList().moveToContainer((TaskCategory) targetTask.getContainer(), - task); - } - } else if (currentTarget == null) { - TasksUiPlugin.getTaskListManager().getTaskList().moveToRoot(newTask); - } - } - - // Make new task the current selection in the view - if (newTask != null) { - StructuredSelection ss = new StructuredSelection(newTask); - getViewer().setSelection(ss); - getViewer().refresh(); - } - - return true; - - } - - - /** - * @return true if string is a http(s) url - */ - public boolean isUrl(Object data) { - String uri = ""; - if (data instanceof String) { - uri = (String) data; - if ((uri.startsWith("http://") || uri.startsWith("https://"))) { - return true; - } - } - return false; - } - - /** - * @param data - * string containing url and title separated by <quote>\n</quote> - * @return true if task succesfully created, false otherwise - */ - public boolean createTaskFromUrl(Object data) { - if (!(data instanceof String)) - return false; - - String[] urlTransfer = ((String) data).split("\n"); - - String url = ""; - String urlTitle = "<retrieving from URL>"; - - if (urlTransfer.length > 0) { - url = urlTransfer[0]; - } else { - return false; - } - - // Removed in order to default to retrieving title from url rather than - // accepting what was sent by the brower's DnD code. (see bug 114401) - // If a Title is provided, use it. - // if (urlTransfer.length > 1) { - // urlTitle = urlTransfer[1]; - // } - // if (urlTransfer.length < 2) { // no title provided - // retrieveTaskDescription(url); - // } - retrieveTaskDescription(url); - - newTask = new Task(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), urlTitle, true); - NewLocalTaskAction.scheduleNewTask(newTask); - - if (newTask == null) { - return false; - } - - newTask.setPriority(Task.PriorityLevel.P3.toString()); - newTask.setUrl(url); - - // NOTE: setting boolean param as false so that we go directly to the - // browser tab as with a previously-created task - TaskUiUtil.openEditor(newTask, false); - return true; - } - - public boolean createTaskFromString(String title) { - newTask = new Task(TasksUiPlugin.getTaskListManager().genUniqueTaskHandle(), title, true); - NewLocalTaskAction.scheduleNewTask(newTask); - - if (newTask == null) { - return false; - } else { - newTask.setPriority(Task.PriorityLevel.P3.toString()); - TaskUiUtil.openEditor(newTask, false); - return true; - } - } - - @Override - public boolean validateDrop(Object targetObject, int operation, TransferData transferType) { - currentTransfer = transferType; - - Object selectedObject = ((IStructuredSelection) ((TreeViewer) getViewer()).getSelection()).getFirstElement(); - if (FileTransfer.getInstance().isSupportedType(currentTransfer) && getCurrentTarget() instanceof ITask) { - return true; - } else if (!(selectedObject instanceof AbstractRepositoryQuery)) { - if (getCurrentTarget() instanceof TaskCategory) { - return true; - } else if (getCurrentTarget() instanceof ITaskListElement - && (getCurrentLocation() == ViewerDropAdapter.LOCATION_AFTER || getCurrentLocation() == ViewerDropAdapter.LOCATION_BEFORE)) { - return true; - } else { - return false; - } - } - - return TextTransfer.getInstance().isSupportedType(transferType); - } - - /** - * Attempts to set the task pageTitle to the title from the specified url - */ - protected void retrieveTaskDescription(final String url) { - - try { - RetrieveTitleFromUrlJob job = new RetrieveTitleFromUrlJob(url) { - @Override - protected void setTitle(final String pageTitle) { - newTask.setDescription(pageTitle); - TasksUiPlugin.getTaskListManager().getTaskList().notifyLocalInfoChanged(newTask); - } - }; - job.schedule(); - } catch (RuntimeException e) { - MylarStatusHandler.fail(e, "could not open task web page", false); - } - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListFilteredTree.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListFilteredTree.java deleted file mode 100644 index cf6dfc15c..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListFilteredTree.java +++ /dev/null @@ -1,83 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.views; - -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.MouseAdapter; -import org.eclipse.swt.events.MouseEvent; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.dialogs.PatternFilter; -import org.eclipse.ui.forms.widgets.Hyperlink; - -/** - * @author Mik Kersten - */ -public class TaskListFilteredTree extends AbstractMylarFilteredTree { - - public TaskListFilteredTree(Composite parent, int treeStyle, PatternFilter filter) { - super(parent, treeStyle, filter); - } - - private static final String LABEL_NO_ACTIVE = "<no active task>"; - - private Hyperlink activeTaskLabel; - - protected Composite createStatusComposite(Composite container) { - activeTaskLabel = new Hyperlink(container, SWT.LEFT); - activeTaskLabel.setText(LABEL_NO_ACTIVE); - ITask activeTask = TasksUiPlugin.getTaskListManager().getTaskList().getActiveTask(); - if (activeTask != null) { - indicateActiveTask(activeTask); - } - - activeTaskLabel.addMouseListener(new MouseAdapter() { - - @Override - public void mouseDown(MouseEvent e) { - TaskListFilteredTree.super.filterText.setText(""); - if (TaskListView.getFromActivePerspective().getDrilledIntoCategory() != null) { - TaskListView.getFromActivePerspective().goUpToRoot(); - } - TaskListFilteredTree.this.textChanged(); - TaskListView.getFromActivePerspective().selectedAndFocusTask( - TasksUiPlugin.getTaskListManager().getTaskList().getActiveTask() - ); - } - - }); - return activeTaskLabel; - } - - public void indicateActiveTask(ITask task) { - String text = task.getDescription(); - activeTaskLabel.setText(text); - activeTaskLabel.setUnderlined(true); - activeTaskLabel.setToolTipText(task.getDescription()); - filterComposite.layout(); - } - - public void indicateNoActiveTask() { - activeTaskLabel.setText(LABEL_NO_ACTIVE); - activeTaskLabel.setUnderlined(false); - activeTaskLabel.setToolTipText(""); - filterComposite.layout(); - } - - public void setFilterText(String string) { - if (filterText != null){ - filterText.setText(string); - selectAll(); - } - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListTableLabelProvider.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListTableLabelProvider.java deleted file mode 100644 index 8c179807c..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListTableLabelProvider.java +++ /dev/null @@ -1,185 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -/* - * Created on Feb 18, 2005 - */ -package org.eclipse.mylar.internal.tasks.ui.views; - -import java.util.Arrays; - -import org.eclipse.jface.viewers.DecoratingLabelProvider; -import org.eclipse.jface.viewers.ILabelDecorator; -import org.eclipse.jface.viewers.ILabelProvider; -import org.eclipse.jface.viewers.ITableColorProvider; -import org.eclipse.jface.viewers.ITableFontProvider; -import org.eclipse.jface.viewers.ITableLabelProvider; -import org.eclipse.mylar.context.core.ContextCorePlugin; -import org.eclipse.mylar.internal.tasks.ui.TaskListColorsAndFonts; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.AbstractTaskContainer; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.mylar.tasks.core.TaskArchive; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask.RepositoryTaskSyncState; -import org.eclipse.mylar.tasks.core.Task.PriorityLevel; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.Image; - -/** - * @author Mik Kersten - */ -public class TaskListTableLabelProvider extends DecoratingLabelProvider implements ITableLabelProvider, - ITableColorProvider, ITableFontProvider { - - private Color categoryBackgroundColor; - - private TaskListView view; - - /** - * @param view can be null - */ - public TaskListTableLabelProvider(ILabelProvider provider, ILabelDecorator decorator, Color parentBacground, TaskListView view) { - super(provider, decorator); - this.categoryBackgroundColor = parentBacground; - this.view = view; - } - - public String getColumnText(Object obj, int columnIndex) { - if (obj instanceof ITaskListElement) { - switch (columnIndex) { - case 0: - return null; - case 1: - return null; - case 2: - return null; - case 3: - return null; - case 4: - return super.getText(obj); - } - } - return null; - } - - public Image getColumnImage(Object element, int columnIndex) { - if (!(element instanceof ITaskListElement)) { - return null; - } - if (columnIndex == 0) { - if (element instanceof AbstractTaskContainer) { - return super.getImage(element); - } else { - ITask task = TaskElementLabelProvider.getCorrespondingTask((ITaskListElement)element); - if (task != null) { - if (task.isActive()) { - return TaskListImages.getImage(TaskListImages.TASK_ACTIVE); - } else { - if (ContextCorePlugin.getContextManager().hasContext(task.getHandleIdentifier())) { - return TaskListImages.getImage(TaskListImages.TASK_INACTIVE_CONTEXT); - } else { - return TaskListImages.getImage(TaskListImages.TASK_INACTIVE); - } - } - } else { - return TaskListImages.getImage(TaskListImages.TASK_INACTIVE); - } - } - } else if (columnIndex == 1) { - if (element instanceof AbstractTaskContainer) { - return null; - } - return super.getImage(element); - } else if (columnIndex == 2) { - if (element instanceof ITaskListElement && !(element instanceof AbstractTaskContainer)) { - ITaskListElement taskElement = (ITaskListElement) element; - return TaskUiUtil.getImageForPriority(PriorityLevel.fromString(taskElement.getPriority())); - } - } else if (columnIndex == 3) { - AbstractRepositoryTask repositoryTask = null; - if (element instanceof AbstractQueryHit) { - repositoryTask = ((AbstractQueryHit)element).getCorrespondingTask(); - } else if (element instanceof AbstractRepositoryTask) { - repositoryTask = (AbstractRepositoryTask)element; - } - if (repositoryTask != null) { - if (repositoryTask.getSyncState() == RepositoryTaskSyncState.OUTGOING) { - return TaskListImages.getImage(TaskListImages.STATUS_NORMAL_OUTGOING); - } else if (repositoryTask.getSyncState() == RepositoryTaskSyncState.INCOMING) { - return TaskListImages.getImage(TaskListImages.STATUS_NORMAL_INCOMING); - } else if (repositoryTask.getSyncState() == RepositoryTaskSyncState.CONFLICT) { - return TaskListImages.getImage(TaskListImages.STATUS_NORMAL_CONFLICT); - } - } else if (element instanceof AbstractQueryHit){ - return TaskListImages.getImage(TaskListImages.STATUS_NORMAL_INCOMING); - } else if (element instanceof AbstractTaskContainer - && view != null && !Arrays.asList(view.getViewer().getExpandedElements()).contains(element)) { - AbstractTaskContainer container = (AbstractTaskContainer)element; - if (hasIncoming(container)) { - return TaskListImages.getImage(TaskListImages.STATUS_NORMAL_INCOMING); - } - } - } - return null; - } - - private boolean hasIncoming(AbstractTaskContainer container) { - for (ITask task : container.getChildren()) { - if (task instanceof AbstractRepositoryTask) { - AbstractRepositoryTask containedRepositoryTask = (AbstractRepositoryTask)task; - if (containedRepositoryTask.getSyncState() == RepositoryTaskSyncState.INCOMING) { - return true; - } - } - } - if (container instanceof AbstractRepositoryQuery) { - AbstractRepositoryQuery query = (AbstractRepositoryQuery)container; - for (AbstractQueryHit hit : query.getHits()) { // FIXME should not create new tasks! - if (hit.getCorrespondingTask() == null) { - return true; - } - } - } - return false; - } - - public Font getFont(Object element, int columnIndex) { - return super.getFont(element); - } - - public Color getForeground(Object element, int columnIndex) { - return super.getForeground(element); - } - - public Color getBackground(Object element, int columnIndex) { - if (element instanceof AbstractTaskContainer) { - AbstractTaskContainer category = (AbstractTaskContainer) element; - if (category instanceof TaskArchive) { - return TaskListColorsAndFonts.BACKGROUND_ARCHIVE; - } else { - return categoryBackgroundColor; - } - } else if (element instanceof AbstractRepositoryQuery) { - return categoryBackgroundColor; - } - - return super.getBackground(element); - } - - public void setCategoryBackgroundColor(Color parentBackgroundColor) { - this.categoryBackgroundColor = parentBackgroundColor; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListTableSorter.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListTableSorter.java deleted file mode 100644 index 7f2280126..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListTableSorter.java +++ /dev/null @@ -1,94 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.views; - - -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerSorter; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractTaskContainer; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.mylar.tasks.core.TaskArchive; - -/** - * @author Mik Kersten - */ -public class TaskListTableSorter extends ViewerSorter { - - private final TaskListView view; - - private String column; - - private TaskKeyComparator taskKeyComparator = new TaskKeyComparator(); - - public TaskListTableSorter(TaskListView view, String column) { - super(); - this.view = view; - this.column = column; - } - - public void setColumn(String column) { - this.column = column; - } - - /** - * compare - invoked when column is selected calls the actual comparison - * method for particular criteria - */ - @Override - public int compare(Viewer compareViewer, Object o1, Object o2) { - if (o1 instanceof AbstractTaskContainer && o2 instanceof TaskArchive) { - return -1; - } else if (o2 instanceof AbstractTaskContainer && o1 instanceof TaskArchive) { - return 1; - } - - if (o1 instanceof AbstractTaskContainer && o2 instanceof ITask) { - return 1; - } - if (o1 instanceof AbstractTaskContainer || o1 instanceof AbstractRepositoryQuery) { - if (o2 instanceof AbstractTaskContainer || o2 instanceof AbstractRepositoryQuery) { - return this.view.sortDirection - * ((ITaskListElement) o1).getDescription().compareTo(((ITaskListElement) o2).getDescription()); - } else { - return -1; - } - } else if (o1 instanceof ITaskListElement) { - if (o2 instanceof AbstractTaskContainer || o2 instanceof AbstractRepositoryQuery) { - return -1; - } else if (o2 instanceof ITaskListElement) { - ITaskListElement element1 = (ITaskListElement) o1; - ITaskListElement element2 = (ITaskListElement) o2; - - return compareElements(element1, element2); - } - } else { - return 0; - } - return 0; - } - - private int compareElements(ITaskListElement element1, ITaskListElement element2) { - if (column != null && column.equals(this.view.columnNames[1])) { - return 0; - } else if (column == this.view.columnNames[2]) { - return this.view.sortDirection * element1.getPriority().compareTo(element2.getPriority()); - } else if (column == this.view.columnNames[4]) { - String c1 = element1.getDescription(); - String c2 = element2.getDescription(); - return this.view.sortDirection * taskKeyComparator.compare(c1, c2); - } else { - return 0; - } - } -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListToolTipHandler.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListToolTipHandler.java deleted file mode 100644 index 91dfb8723..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListToolTipHandler.java +++ /dev/null @@ -1,404 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -/** - * Copied from newsgroup, forwarded from Make Technologies - */ - -package org.eclipse.mylar.internal.tasks.ui.views; - -import java.net.URL; -import java.util.Set; - -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.MouseAdapter; -import org.eclipse.swt.events.MouseEvent; -import org.eclipse.swt.events.MouseTrackAdapter; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.ToolBar; -import org.eclipse.swt.widgets.Tree; -import org.eclipse.swt.widgets.Widget; -import org.eclipse.ui.IWindowListener; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.PlatformUI; - -/** - * @author Mik Kersten - * @author Eric Booth - */ -public class TaskListToolTipHandler { - - private Shell tipShell; - - private Label tipLabelImage; - - private Label tipLabelText; - - private Widget tipWidget; // widget this tooltip is hovering over - - protected Point tipPosition; // the position being hovered over on the - - protected Point widgetPosition; // the position hovered over in the Widget; - - public TaskListToolTipHandler(Shell parentShell) { - if (parentShell != null) { - tipShell = createTipShell(parentShell); - } - } - - private Shell createTipShell(Shell parent) { - Shell tipShell = new Shell(parent.getDisplay(), SWT.TOOL | SWT.NO_FOCUS | SWT.MODELESS | SWT.ON_TOP); - GridLayout gridLayout = new GridLayout(); - gridLayout.numColumns = 2; - gridLayout.marginWidth = 2; - gridLayout.marginHeight = 2; - tipShell.setLayout(gridLayout); - tipShell.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND)); - - tipLabelImage = new Label(tipShell, SWT.NONE); - tipLabelImage.setForeground(parent.getDisplay().getSystemColor(SWT.COLOR_INFO_FOREGROUND)); - tipLabelImage.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND)); - - GridData imageGridData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING); - tipLabelImage.setLayoutData(imageGridData); - - tipLabelText = new Label(tipShell, SWT.NONE); - tipLabelText.setForeground(parent.getDisplay().getSystemColor(SWT.COLOR_INFO_FOREGROUND)); - tipLabelText.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND)); - - GridData textGridData = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER); - tipLabelText.setLayoutData(textGridData); - - return tipShell; - } - - private ITaskListElement getTaskListElement(Object hoverObject) { - if (hoverObject instanceof Widget) { - Object data = ((Widget) hoverObject).getData(); - if (data != null) { - if (data instanceof ITaskListElement) { - return (ITaskListElement) data; - } else if (data instanceof IAdaptable) { - return (ITaskListElement) ((IAdaptable) data).getAdapter(ITaskListElement.class); - } - } - } - return null; - } - - protected String getToolTipText(Object object) { - ITaskListElement element = getTaskListElement(object); - String tooltip = ""; - String priority = ""; - if (element instanceof AbstractRepositoryQuery) { - AbstractRepositoryQuery query = (AbstractRepositoryQuery) element; - // TaskRepository repository = - // TasksUiPlugin.getRepositoryManager().getRepository( - // query.getRepositoryKind(), query.getRepositoryUrl()); - try { - tooltip += new URL(query.getRepositoryUrl()).getHost(); - tooltip += "\n---------------\n"; - } catch (Exception e) { - // ignore - } - - String syncStamp = query.getLastRefreshTimeStamp(); - if (syncStamp == null) { - syncStamp = "<never>"; - } - tooltip += "Last Sync: " + syncStamp + "\n"; - - Set<AbstractQueryHit> hits = query.getHits(); // FIXME provide getHitsSize() method - if (hits.size() == 1) { - tooltip += "1 hit"; - } else { - tooltip += hits.size() + " hits"; - } - if (query.getMaxHits() != -1) { - tooltip += " (max set to: " + query.getMaxHits() + ")"; - } - return tooltip; - } - // if (element instanceof ITask || element instanceof AbstractQueryHit) - // { - // ITask task = null; - // if (element instanceof ITask) { - // task = (ITask) element; - // } else { - // task = ((AbstractQueryHit) element).getCorrespondingTask(); - // } - // if (task != null) { - // priority += "\nPriority: " + - // Task.PriorityLevel.fromString(task.getPriority()).getDescription(); - // } - // } - - if (element instanceof AbstractRepositoryTask || element instanceof AbstractQueryHit) { - AbstractRepositoryTask repositoryTask; - if (element instanceof AbstractQueryHit) { - repositoryTask = ((AbstractQueryHit) element).getCorrespondingTask(); - } else { - repositoryTask = (AbstractRepositoryTask) element; - } - tooltip += ((ITaskListElement) element).getDescription(); - if (repositoryTask != null) { - tooltip += "\n" + repositoryTask.getRepositoryUrl(); - } - // tooltip += priority; - // if (repositoryTask != null) { - // Date lastRefresh = repositoryTask.getLastOpened(); - // if (lastRefresh != null) { - // tooltip += "\n" + - // formatLastRefreshTime(repositoryTask.getLastOpened()); - // } - // } - return tooltip; - } else if (element != null) { - tooltip += ((ITaskListElement) element).getDescription(); - return tooltip + priority; - } else if (object instanceof Control) { - return (String) ((Control) object).getData("TIP_TEXT"); - } - return null; - } - - // private String formatLastRefreshTime(Date lastRefresh) { - // String toolTip = "Last synchronized: "; - // if (lastRefresh == null) - // return toolTip += "unknown"; - // Date timeNow = new Date(); - // long timeDifference = (timeNow.getTime() - lastRefresh.getTime()) / - // 60000; - // long minutes = timeDifference % 60; - // timeDifference /= 60; - // long hours = timeDifference % 24; - // timeDifference /= 24; - // if (timeDifference > 0) { - // toolTip += timeDifference + ((timeDifference == 1) ? " day, " : " days, - // "); - // } - // if (hours > 0 || timeDifference > 0) { - // toolTip += hours + ((hours == 1) ? " hour, " : " hours, "); - // } - // toolTip += minutes + ((minutes == 1) ? " minute " : " minutes ") + "ago"; - // return toolTip; - // } - - protected Image getToolTipImage(Object object) { - ITaskListElement element = getTaskListElement(object); - if (object instanceof Control) { - return (Image) ((Control) object).getData("TIP_IMAGE"); - } else if (element instanceof AbstractRepositoryQuery) { - AbstractRepositoryQuery query = (AbstractRepositoryQuery) element; - AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager().getRepositoryConnector( - query.getRepositoryKind()); - if (connector != null) { - return TasksUiPlugin.getDefault().getBrandingIcon(connector.getRepositoryType()); - } - } else if (element instanceof AbstractRepositoryTask || element instanceof AbstractQueryHit) { - AbstractRepositoryTask repositoryTask; - if (element instanceof AbstractQueryHit) { - repositoryTask = ((AbstractQueryHit) element).getCorrespondingTask(); - } else { - repositoryTask = (AbstractRepositoryTask) element; - } - if (repositoryTask != null) { - AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager().getRepositoryConnector( - repositoryTask.getRepositoryKind()); - if (connector != null) { - return TasksUiPlugin.getDefault().getBrandingIcon(connector.getRepositoryType()); - } - } - } - return null; - } - - protected Object getToolTipHelp(Object object) { - if (object instanceof Control) { - return (String) ((Control) object).getData("TIP_HELPTEXT"); - } - return null; - } - - /** - * Enables customized hover help for a specified control - * - * @control the control on which to enable hoverhelp - */ - public void activateHoverHelp(final Control control) { - - PlatformUI.getWorkbench().addWindowListener(new IWindowListener() { - - public void windowActivated(IWorkbenchWindow window) { - // ignore - - } - - public void windowClosed(IWorkbenchWindow window) { - // ignore - - } - - public void windowDeactivated(IWorkbenchWindow window) { - hideTooltip(); - - } - - public void windowOpened(IWorkbenchWindow window) { - // ignore - - } - }); - - /* - * Get out of the way if we attempt to activate the control underneath - * the tooltip - */ - control.addMouseListener(new MouseAdapter() { - - @Override - public void mouseDown(MouseEvent e) { - hideTooltip(); - } - }); - /* - * Trap hover events to pop-up tooltip - */ - control.addMouseTrackListener(new MouseTrackAdapter() { - - @Override - public void mouseExit(MouseEvent e) { - // TODO: can these conditions be simplified? see bug 131776 - if (tipShell != null && !tipShell.isDisposed() && tipShell.getDisplay() != null - && !tipShell.getDisplay().isDisposed() && tipShell.isVisible()) { - tipShell.setVisible(false); - } - tipWidget = null; - } - - @Override - public void mouseHover(MouseEvent event) { - widgetPosition = new Point(event.x, event.y); - Widget widget = event.widget; - if (widget instanceof ToolBar) { - ToolBar w = (ToolBar) widget; - widget = w.getItem(widgetPosition); - } - if (widget instanceof Table) { - Table w = (Table) widget; - widget = w.getItem(widgetPosition); - } - if (widget instanceof Tree) { - Tree w = (Tree) widget; - widget = w.getItem(widgetPosition); - } - if (widget == null && !tipShell.isDisposed()) { - tipShell.setVisible(false); - tipWidget = null; - return; - } - if (widget == tipWidget) - return; - tipWidget = widget; - tipPosition = control.toDisplay(widgetPosition); - String text = getToolTipText(widget); - Image image = getToolTipImage(widget); - if (text == null) { // HACK: don't check length - return; - } - - if (!tipShell.isDisposed() && tipShell.getShell() != null - && PlatformUI.getWorkbench().getDisplay().getActiveShell() != null) { - tipShell.close(); - tipShell = createTipShell(PlatformUI.getWorkbench().getDisplay().getActiveShell()); - } - - // if (!tipShell.isDisposed() && tipShell.getShell() != null && - // tipShell.getShell().getParent() != null - // && Display.getCurrent().getActiveShell() != null - // && tipShell.getShell().getParent() != - // Display.getCurrent().getActiveShell()) { - // tipShell.close(); - // tipShell = - // createTipShell(Display.getCurrent().getActiveShell()); - // } - - tipLabelText.setText(text); - tipLabelImage.setImage(image); // accepts null - tipShell.pack(); - setHoverLocation(tipShell, tipPosition); - tipShell.setVisible(true); - } - }); - } - - /** - * Sets the location for a hovering shell - * - * @param shell - * the object that is to hover - * @param position - * the position of a widget to hover over - * @return the top-left location for a hovering box - */ - private void setHoverLocation(Shell shell, Point position) { - Rectangle displayBounds = shell.getDisplay().getBounds(); - Rectangle shellBounds = shell.getBounds(); - shellBounds.x = Math.max(Math.min(position.x, displayBounds.width - shellBounds.width), 0); - shellBounds.y = Math.max(Math.min(position.y + 10, displayBounds.height - shellBounds.height), 0); - shell.setBounds(shellBounds); - } - - private void hideTooltip() { - if (tipShell != null && !tipShell.isDisposed() && tipShell.isVisible()) - tipShell.setVisible(false); - } -} - -// /* -// * Trap F1 Help to pop up a custom help box -// */ -// control.addHelpListener(new HelpListener() { -// public void helpRequested(HelpEvent event) { -// if (tipWidget == null) -// return; -// Object help = getToolTipHelp(tipWidget); -// if (help == null) -// return; -// if (help.getClass() != String.class) { -// return; -// } -// if (tipShell.isVisible()) { -// tipShell.setVisible(false); -// Shell helpShell = new Shell(parentShell, SWT.SHELL_TRIM); -// helpShell.setLayout(new FillLayout()); -// Label label = new Label(helpShell, SWT.NONE); -// label.setText((String) help); -// helpShell.pack(); -// setHoverLocation(helpShell, tipPosition); -// helpShell.open(); -// } -// } -// }); diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java deleted file mode 100644 index 9bdf36629..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java +++ /dev/null @@ -1,1599 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.views; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.ActionContributionItem; -import org.eclipse.jface.action.IMenuCreator; -import org.eclipse.jface.action.IMenuListener; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.IStatusLineManager; -import org.eclipse.jface.action.IToolBarManager; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.jface.action.Separator; -import org.eclipse.jface.dialogs.InputDialog; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.jface.viewers.CellEditor; -import org.eclipse.jface.viewers.CheckboxCellEditor; -import org.eclipse.jface.viewers.ComboBoxCellEditor; -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.ICellModifier; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.TextCellEditor; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.jface.window.Window; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.AbstractTaskListFilter; -import org.eclipse.mylar.internal.tasks.ui.IDynamicSubMenuContributor; -import org.eclipse.mylar.internal.tasks.ui.TaskArchiveFilter; -import org.eclipse.mylar.internal.tasks.ui.TaskCompletionFilter; -import org.eclipse.mylar.internal.tasks.ui.TaskListColorsAndFonts; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.internal.tasks.ui.TaskListPatternFilter; -import org.eclipse.mylar.internal.tasks.ui.TaskListPreferenceConstants; -import org.eclipse.mylar.internal.tasks.ui.TaskPriorityFilter; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.internal.tasks.ui.actions.CollapseAllAction; -import org.eclipse.mylar.internal.tasks.ui.actions.CopyDetailsAction; -import org.eclipse.mylar.internal.tasks.ui.actions.DeleteAction; -import org.eclipse.mylar.internal.tasks.ui.actions.ExpandAllAction; -import org.eclipse.mylar.internal.tasks.ui.actions.FilterArchiveContainerAction; -import org.eclipse.mylar.internal.tasks.ui.actions.FilterCompletedTasksAction; -import org.eclipse.mylar.internal.tasks.ui.actions.GoIntoAction; -import org.eclipse.mylar.internal.tasks.ui.actions.GoUpAction; -import org.eclipse.mylar.internal.tasks.ui.actions.MarkTaskCompleteAction; -import org.eclipse.mylar.internal.tasks.ui.actions.MarkTaskIncompleteAction; -import org.eclipse.mylar.internal.tasks.ui.actions.NewCategoryAction; -import org.eclipse.mylar.internal.tasks.ui.actions.NewLocalTaskAction; -import org.eclipse.mylar.internal.tasks.ui.actions.OpenTaskListElementAction; -import org.eclipse.mylar.internal.tasks.ui.actions.OpenWithBrowserAction; -import org.eclipse.mylar.internal.tasks.ui.actions.PreviousTaskDropDownAction; -import org.eclipse.mylar.internal.tasks.ui.actions.RemoveFromCategoryAction; -import org.eclipse.mylar.internal.tasks.ui.actions.RenameAction; -import org.eclipse.mylar.internal.tasks.ui.actions.TaskActivateAction; -import org.eclipse.mylar.internal.tasks.ui.actions.TaskDeactivateAction; -import org.eclipse.mylar.internal.tasks.ui.actions.TaskListElementPropertiesAction; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.AbstractTaskContainer; -import org.eclipse.mylar.tasks.core.DateRangeContainer; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskActivityListener; -import org.eclipse.mylar.tasks.core.ITaskListChangeListener; -import org.eclipse.mylar.tasks.core.ITaskListElement; -import org.eclipse.mylar.tasks.core.Task; -import org.eclipse.mylar.tasks.core.TaskArchive; -import org.eclipse.mylar.tasks.core.TaskCategory; -import org.eclipse.mylar.tasks.ui.TaskTransfer; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.dnd.DND; -import org.eclipse.swt.dnd.FileTransfer; -import org.eclipse.swt.dnd.RTFTransfer; -import org.eclipse.swt.dnd.TextTransfer; -import org.eclipse.swt.dnd.Transfer; -import org.eclipse.swt.events.ControlEvent; -import org.eclipse.swt.events.ControlListener; -import org.eclipse.swt.events.KeyEvent; -import org.eclipse.swt.events.KeyListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Menu; -import org.eclipse.swt.widgets.Text; -import org.eclipse.swt.widgets.TreeColumn; -import org.eclipse.swt.widgets.TreeItem; -import org.eclipse.ui.IActionBars; -import org.eclipse.ui.IMemento; -import org.eclipse.ui.IViewPart; -import org.eclipse.ui.IViewReference; -import org.eclipse.ui.IViewSite; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchActionConstants; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.part.DrillDownAdapter; -import org.eclipse.ui.part.ViewPart; -import org.eclipse.ui.themes.IThemeManager; - -/** - * @author Mik Kersten - * @author Ken Sueda - */ -public class TaskListView extends ViewPart { - - public static final String ID = "org.eclipse.mylar.tasks.ui.views.TaskListView"; - - public static final String LABEL_VIEW = "Task List"; - - private static final String MEMENTO_KEY_SORT_DIRECTION = "sortDirection"; - - private static final String MEMENTO_KEY_SORTER = "sorter"; - - private static final String MEMENTO_KEY_SORT_INDEX = "sortIndex"; - - private static final String MEMENTO_KEY_WIDTH = "width"; - - private static final String SEPARATOR_LOCAL = "local"; - - private static final String SEPARATOR_CONTEXT = "context"; - - private static final String SEPARATOR_FILTERS = "filters"; - - private static final String SEPARATOR_REPORTS = "reports"; - - private static final String LABEL_NO_TASKS = "no task active"; - - static final String[] PRIORITY_LEVELS = { Task.PriorityLevel.P1.toString(), Task.PriorityLevel.P2.toString(), - Task.PriorityLevel.P3.toString(), Task.PriorityLevel.P4.toString(), Task.PriorityLevel.P5.toString() }; - - public static final String[] PRIORITY_LEVEL_DESCRIPTIONS = { Task.PriorityLevel.P1.getDescription(), - Task.PriorityLevel.P2.getDescription(), Task.PriorityLevel.P3.getDescription(), - Task.PriorityLevel.P4.getDescription(), Task.PriorityLevel.P5.getDescription() }; - - private static final String SEPARATOR_ID_REPORTS = SEPARATOR_REPORTS; - - private static final String PART_NAME = "Mylar Tasks"; - - private IThemeManager themeManager; - - private TaskListFilteredTree filteredTree; - - private DrillDownAdapter drillDownAdapter; - - private AbstractTaskContainer drilledIntoCategory = null; - - private GoIntoAction goIntoAction; - - private GoUpAction goUpAction; - - private CopyDetailsAction copyDetailsAction; - - private OpenTaskListElementAction openAction; - - private TaskListElementPropertiesAction propertiesAction; - - private OpenWithBrowserAction openWithBrowser; - - private NewLocalTaskAction newLocalTaskAction; - - private NewCategoryAction newCategoryAction; - - private RenameAction renameAction; - - private CollapseAllAction collapseAll; - - private ExpandAllAction expandAll; - - private DeleteAction deleteAction; - - private RemoveFromCategoryAction removeFromCategoryAction; - - private TaskActivateAction activateAction = new TaskActivateAction(); - - private TaskDeactivateAction deactivateAction = new TaskDeactivateAction(); - - // private MarkTaskCompleteAction markIncompleteAction; - - // private MarkTaskIncompleteAction markCompleteAction; - - private FilterCompletedTasksAction filterCompleteTask; - - private FilterArchiveContainerAction filterArchiveCategory; - - private PriorityDropDownAction filterOnPriority; - - private PreviousTaskDropDownAction previousTaskAction; - - // private NextTaskDropDownAction nextTaskAction; - - private static TaskPriorityFilter FILTER_PRIORITY = new TaskPriorityFilter(); - - private static TaskCompletionFilter FILTER_COMPLETE = new TaskCompletionFilter(); - - private static TaskArchiveFilter FILTER_ARCHIVE = new TaskArchiveFilter(); - - private Set<AbstractTaskListFilter> filters = new HashSet<AbstractTaskListFilter>(); - - static final String FILTER_LABEL = "<filter>"; - - protected String[] columnNames = new String[] { "", "", " !", " ", "Description" }; - - protected int[] columnWidths = new int[] { 53, 20, 12, 12, 160 }; - - private TreeColumn[] columns; - - private IMemento taskListMemento; - - public static final String columnWidthIdentifier = "org.eclipse.mylar.tasklist.ui.views.tasklist.columnwidth"; - - public static final String tableSortIdentifier = "org.eclipse.mylar.tasklist.ui.views.tasklist.sortIndex"; - - private static final int DEFAULT_SORT_DIRECTION = -1; - - private int sortIndex = 2; - - int sortDirection = DEFAULT_SORT_DIRECTION; - - /** - * True if the view should indicate that interaction monitoring is paused - */ - protected boolean isPaused = false; - - private final ITaskActivityListener TASK_ACTIVITY_LISTENER = new ITaskActivityListener() { - public void taskActivated(final ITask task) { - if (task != null) { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - updateDescription(task); - selectedAndFocusTask(task); - filteredTree.indicateActiveTask(task); - } - }); - } - } - - public void tasksActivated(List<ITask> tasks) { - if (tasks.size() == 1) { - taskActivated(tasks.get(0)); - } - } - - public void taskDeactivated(final ITask task) { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - refreshTask(task); - updateDescription(null); - filteredTree.indicateNoActiveTask(); - } - }); - } - - public void activityChanged(DateRangeContainer week) { - // ignore - } - - public void taskListRead() { - refresh(null); - } - - public void calendarChanged() { - refresh(null); - } - }; - - private final ITaskListChangeListener TASK_REFERESH_LISTENER = new ITaskListChangeListener() { - - public void localInfoChanged(final ITask task) { - refreshTask(task); - if (task.getContainer() != null) { - refresh(task.getContainer()); - } - if (task instanceof AbstractRepositoryTask) { - Set<AbstractRepositoryQuery> queries = TasksUiPlugin.getTaskListManager().getTaskList() - .getQueriesForHandle(task.getHandleIdentifier()); - for (AbstractRepositoryQuery query : queries) { - refresh(query); - } - } - if (task.isActive()) { - // TODO: only do this if description changes - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - filteredTree.indicateActiveTask(task); - } - }); - } - } - - public void repositoryInfoChanged(ITask task) { - localInfoChanged(task); - } - - public void taskMoved(ITask task, AbstractTaskContainer fromContainer, AbstractTaskContainer toContainer) { - AbstractTaskContainer rootCategory = TasksUiPlugin.getTaskListManager().getTaskList().getRootCategory(); - if (rootCategory.equals(fromContainer) || rootCategory.equals(toContainer)) { - refresh(null); - } else { - refresh(toContainer); - refresh(task); - refresh(fromContainer); - } - } - - public void taskDeleted(ITask task) { - refresh(null); - } - - public void containerAdded(AbstractTaskContainer container) { - refresh(null); - } - - public void containerDeleted(AbstractTaskContainer container) { - refresh(null); - } - - public void taskAdded(ITask task) { - refresh(null); - } - - public void containerInfoChanged(AbstractTaskContainer container) { - if (container.equals(TasksUiPlugin.getTaskListManager().getTaskList().getRootCategory())) { - refresh(null); - } else { - refresh(container); - } - } - }; - - private final IPropertyChangeListener THEME_CHANGE_LISTENER = new IPropertyChangeListener() { - public void propertyChange(PropertyChangeEvent event) { - if (event.getProperty().equals(IThemeManager.CHANGE_CURRENT_THEME) - || TaskListColorsAndFonts.isTaskListTheme(event.getProperty())) { - taskListTableLabelProvider.setCategoryBackgroundColor(themeManager.getCurrentTheme().getColorRegistry() - .get(TaskListColorsAndFonts.THEME_COLOR_TASKLIST_CATEGORY)); - getViewer().refresh(); - } - } - }; - - private TaskListTableLabelProvider taskListTableLabelProvider; - - private TaskListTableSorter tableSorter; - - private final class PriorityDropDownAction extends Action implements IMenuCreator { - private Menu dropDownMenu = null; - - public PriorityDropDownAction() { - super(); - setText("Priority Filter"); - setToolTipText("Filter Priority Lower Than"); - setImageDescriptor(TaskListImages.FILTER_PRIORITY); - setMenuCreator(this); - } - - public void dispose() { - if (dropDownMenu != null) { - dropDownMenu.dispose(); - dropDownMenu = null; - } - } - - public Menu getMenu(Control parent) { - if (dropDownMenu != null) { - dropDownMenu.dispose(); - } - dropDownMenu = new Menu(parent); - addActionsToMenu(); - return dropDownMenu; - } - - public Menu getMenu(Menu parent) { - if (dropDownMenu != null) { - dropDownMenu.dispose(); - } - dropDownMenu = new Menu(parent); - addActionsToMenu(); - return dropDownMenu; - } - - public void addActionsToMenu() { - Action P1 = new Action("", AS_CHECK_BOX) { - @Override - public void run() { - TasksUiPlugin.getDefault().getPreferenceStore().setValue( - TaskListPreferenceConstants.SELECTED_PRIORITY, Task.PriorityLevel.P1.toString()); - // MylarTaskListPlugin.setCurrentPriorityLevel(Task.PriorityLevel.P1); - FILTER_PRIORITY.displayPrioritiesAbove(PRIORITY_LEVELS[0]); - getViewer().refresh(); - } - }; - P1.setEnabled(true); - P1.setText(Task.PriorityLevel.P1.getDescription()); - P1.setImageDescriptor(TaskListImages.PRIORITY_1); - ActionContributionItem item = new ActionContributionItem(P1); - item.fill(dropDownMenu, -1); - - Action P2 = new Action("", AS_CHECK_BOX) { - @Override - public void run() { - TasksUiPlugin.getDefault().getPreferenceStore().setValue( - TaskListPreferenceConstants.SELECTED_PRIORITY, Task.PriorityLevel.P2.toString()); - // MylarTaskListPlugin.setCurrentPriorityLevel(Task.PriorityLevel.P2); - FILTER_PRIORITY.displayPrioritiesAbove(PRIORITY_LEVELS[1]); - getViewer().refresh(); - } - }; - P2.setEnabled(true); - P2.setText(Task.PriorityLevel.P2.getDescription()); - P2.setImageDescriptor(TaskListImages.PRIORITY_2); - item = new ActionContributionItem(P2); - item.fill(dropDownMenu, -1); - - Action P3 = new Action("", AS_CHECK_BOX) { - @Override - public void run() { - TasksUiPlugin.getDefault().getPreferenceStore().setValue( - TaskListPreferenceConstants.SELECTED_PRIORITY, Task.PriorityLevel.P3.toString()); - // MylarTaskListPlugin.setCurrentPriorityLevel(Task.PriorityLevel.P3); - FILTER_PRIORITY.displayPrioritiesAbove(PRIORITY_LEVELS[2]); - getViewer().refresh(); - } - }; - P3.setEnabled(true); - P3.setText(Task.PriorityLevel.P3.getDescription()); - P3.setImageDescriptor(TaskListImages.PRIORITY_3); - item = new ActionContributionItem(P3); - item.fill(dropDownMenu, -1); - - Action P4 = new Action("", AS_CHECK_BOX) { - @Override - public void run() { - TasksUiPlugin.getDefault().getPreferenceStore().setValue( - TaskListPreferenceConstants.SELECTED_PRIORITY, Task.PriorityLevel.P4.toString()); - // MylarTaskListPlugin.setCurrentPriorityLevel(Task.PriorityLevel.P4); - FILTER_PRIORITY.displayPrioritiesAbove(PRIORITY_LEVELS[3]); - getViewer().refresh(); - } - }; - P4.setEnabled(true); - P4.setText(Task.PriorityLevel.P4.getDescription()); - P4.setImageDescriptor(TaskListImages.PRIORITY_4); - item = new ActionContributionItem(P4); - item.fill(dropDownMenu, -1); - - Action P5 = new Action("", AS_CHECK_BOX) { - @Override - public void run() { - TasksUiPlugin.getDefault().getPreferenceStore().setValue( - TaskListPreferenceConstants.SELECTED_PRIORITY, Task.PriorityLevel.P5.toString()); - // MylarTaskListPlugin.setCurrentPriorityLevel(Task.PriorityLevel.P5); - FILTER_PRIORITY.displayPrioritiesAbove(PRIORITY_LEVELS[4]); - getViewer().refresh(); - } - }; - P5.setEnabled(true); - P5.setImageDescriptor(TaskListImages.PRIORITY_5); - P5.setText(Task.PriorityLevel.P5.getDescription()); - item = new ActionContributionItem(P5); - item.fill(dropDownMenu, -1); - - String priority = getCurrentPriorityLevel(); - if (priority.equals(PRIORITY_LEVELS[0])) { - P1.setChecked(true); - } else if (priority.equals(PRIORITY_LEVELS[1])) { - P1.setChecked(true); - P2.setChecked(true); - } else if (priority.equals(PRIORITY_LEVELS[2])) { - P1.setChecked(true); - P2.setChecked(true); - P3.setChecked(true); - } else if (priority.equals(PRIORITY_LEVELS[3])) { - P1.setChecked(true); - P2.setChecked(true); - P3.setChecked(true); - P4.setChecked(true); - } else if (priority.equals(PRIORITY_LEVELS[4])) { - P1.setChecked(true); - P2.setChecked(true); - P3.setChecked(true); - P4.setChecked(true); - P5.setChecked(true); - } - } - - public void run() { - this.setChecked(isChecked()); - } - } - - public static TaskListView getFromActivePerspective() { - IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - if (activePage != null) { - IViewPart view = activePage.findView(ID); - if (view instanceof TaskListView) { - return (TaskListView) view; - } - } - return null; - } - - public static TaskListView openInActivePerspective() { - try { - return (TaskListView) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(ID); - } catch (Exception e) { - return null; - } - } - - public TaskListView() { - TasksUiPlugin.getTaskListManager().addActivityListener(TASK_ACTIVITY_LISTENER); - TasksUiPlugin.getTaskListManager().getTaskList().addChangeListener(TASK_REFERESH_LISTENER); - } - - @Override - public void dispose() { - super.dispose(); - TasksUiPlugin.getTaskListManager().getTaskList().removeChangeListener(TASK_REFERESH_LISTENER); - TasksUiPlugin.getTaskListManager().removeActivityListener(TASK_ACTIVITY_LISTENER); - - final IThemeManager themeManager = getSite().getWorkbenchWindow().getWorkbench().getThemeManager(); - if (themeManager != null) { - themeManager.removePropertyChangeListener(THEME_CHANGE_LISTENER); - } - } - - /** - * TODO: should be updated when view mode switches to fast and vice-versa - */ - private void updateDescription(ITask task) { - if (getSite() == null || getSite().getPage() == null) - return; - - IViewReference reference = getSite().getPage().findViewReference(ID); - boolean shouldSetDescription = false; - if (reference != null && reference.isFastView()) { - shouldSetDescription = true; - } - - if (task != null) { - setTitleToolTip(PART_NAME + " (" + task.getDescription() + ")"); - if (shouldSetDescription) { - setContentDescription(task.getDescription()); - } else { - setContentDescription(""); - } - } else { - setTitleToolTip(PART_NAME); - if (shouldSetDescription) { - setContentDescription(LABEL_NO_TASKS); - } else { - setContentDescription(""); - } - } - } - - class TaskListCellModifier implements ICellModifier { - - public boolean canModify(Object element, String property) { - int columnIndex = Arrays.asList(columnNames).indexOf(property); - if (columnIndex == 0 && element instanceof ITaskListElement) { - return element instanceof ITask || element instanceof AbstractQueryHit; - } else if (columnIndex == 2 && element instanceof ITask) { - return !(element instanceof AbstractRepositoryTask); - } else if (element instanceof ITaskListElement && isInRenameAction) { - switch (columnIndex) { - case 4: - // return element instanceof TaskCategory || element - // instanceof AbstractRepositoryQuery - return element instanceof AbstractTaskContainer - || (element instanceof ITask && !(element instanceof AbstractRepositoryTask)); - } - } - return false; - } - - public Object getValue(Object element, String property) { - try { - int columnIndex = Arrays.asList(columnNames).indexOf(property); - if (element instanceof ITaskListElement) { - final ITaskListElement taskListElement = (ITaskListElement) element; - ITask task = null; - if (taskListElement instanceof ITask) { - task = (ITask) taskListElement; - } else if (taskListElement instanceof AbstractQueryHit) { - if (((AbstractQueryHit) taskListElement).getCorrespondingTask() != null) { - task = ((AbstractQueryHit) taskListElement).getCorrespondingTask(); - } - } - switch (columnIndex) { - case 0: - if (task == null) { - return Boolean.TRUE; - } else { - return Boolean.valueOf(task.isCompleted()); - } - case 1: - return ""; - case 2: - String priorityString = taskListElement.getPriority().substring(1); - int priorityInt = new Integer(priorityString); - return priorityInt - 1; - case 3: - return ""; - case 4: - return taskListElement.getDescription(); - } - } else if (element instanceof AbstractTaskContainer) { - AbstractTaskContainer cat = (AbstractTaskContainer) element; - switch (columnIndex) { - case 0: - return Boolean.FALSE; - case 1: - return ""; - case 2: - return ""; - case 3: - return cat.getDescription(); - } - } else if (element instanceof AbstractRepositoryQuery) { - AbstractRepositoryQuery cat = (AbstractRepositoryQuery) element; - switch (columnIndex) { - case 0: - return Boolean.FALSE; - case 1: - return ""; - case 2: - return ""; - case 3: - return cat.getDescription(); - } - } - } catch (Exception e) { - MylarStatusHandler.log(e, e.getMessage()); - } - return ""; - } - - public void modify(Object element, String property, Object value) { - int columnIndex = -1; - try { - columnIndex = Arrays.asList(columnNames).indexOf(property); - if (((TreeItem) element).getData() instanceof AbstractTaskContainer) { - AbstractTaskContainer container = (AbstractTaskContainer) ((TreeItem) element).getData(); - switch (columnIndex) { - case 0: - break; - case 1: - break; - case 2: - break; - case 4: - TasksUiPlugin.getTaskListManager().getTaskList().renameContainer(container, - ((String) value).trim()); - // container.setDescription(((String) value).trim()); - break; - } - } else if (((TreeItem) element).getData() instanceof AbstractRepositoryQuery) { - AbstractRepositoryQuery query = (AbstractRepositoryQuery) ((TreeItem) element).getData(); - switch (columnIndex) { - case 0: - break; - case 1: - break; - case 2: - break; - case 4: - TasksUiPlugin.getTaskListManager().getTaskList() - .renameContainer(query, ((String) value).trim()); - // cat.setDescription(((String) value).trim()); - break; - } - } else if (((TreeItem) element).getData() instanceof ITaskListElement) { - - final ITaskListElement taskListElement = (ITaskListElement) ((TreeItem) element).getData(); - ITask task = null; - if (taskListElement instanceof ITask) { - task = (ITask) taskListElement; - } else if (taskListElement instanceof AbstractQueryHit) { - if (((AbstractQueryHit) taskListElement).getCorrespondingTask() != null) { - task = ((AbstractQueryHit) taskListElement).getCorrespondingTask(); - } - } - switch (columnIndex) { - case 0: - if (taskListElement instanceof AbstractQueryHit) { - task = ((AbstractQueryHit) taskListElement).getOrCreateCorrespondingTask(); - } - if (task != null) { - if (task.isActive()) { - new TaskDeactivateAction().run(task); - // nextTaskAction.setEnabled(taskHistory.hasNext()); - // previousTaskAction.setEnabled(TasksUiPlugin.getTaskListManager().getTaskActivationHistory().hasPrevious()); - previousTaskAction.setButtonStatus(); - } else { - new TaskActivateAction().run(task); - addTaskToHistory(task); - previousTaskAction.setButtonStatus(); - } - } - break; - case 1: - break; - case 2: - if (!(task instanceof AbstractRepositoryTask)) { - Integer intVal = (Integer) value; - task.setPriority("P" + (intVal + 1)); - TasksUiPlugin.getTaskListManager().getTaskList().notifyLocalInfoChanged(task); - } - break; - case 4: - if (!(task instanceof AbstractRepositoryTask)) { - TasksUiPlugin.getTaskListManager().getTaskList().renameTask((Task) task, - ((String) value).trim()); - } - break; - } - } - } catch (Exception e) { - MylarStatusHandler.fail(e, e.getMessage(), true); - } - getViewer().refresh(); - } - } - - public void addTaskToHistory(ITask task) { - if (!TasksUiPlugin.getDefault().isMultipleActiveTasksMode()) { - TasksUiPlugin.getTaskListManager().getTaskActivationHistory().addTask(task); - // nextTaskAction.setEnabled(taskHistory.hasNext()); - // previousTaskAction.setEnabled(TasksUiPlugin.getTaskListManager().getTaskActivationHistory().hasPrevious()); - } - } - - // - // public void clearTaskHistory() { - // TasksUiPlugin.getTaskListManager().getTaskActivationHistory().clear(); - // } - - @Override - public void init(IViewSite site, IMemento memento) throws PartInitException { - init(site); - this.taskListMemento = memento; - } - - @Override - public void saveState(IMemento memento) { - IMemento colMemento = memento.createChild(columnWidthIdentifier); - - for (int i = 0; i < columnWidths.length; i++) { - IMemento m = colMemento.createChild("col" + i); - m.putInteger(MEMENTO_KEY_WIDTH, columnWidths[i]); - } - - IMemento sorter = memento.createChild(tableSortIdentifier); - IMemento m = sorter.createChild(MEMENTO_KEY_SORTER); - m.putInteger(MEMENTO_KEY_SORT_INDEX, sortIndex); - m.putInteger(MEMENTO_KEY_SORT_DIRECTION, sortDirection); - - // TODO: move to task list save policy - if (TasksUiPlugin.getDefault() != null && TasksUiPlugin.getDefault().getTaskListSaveManager() != null) { - TasksUiPlugin.getDefault().getTaskListSaveManager().createTaskListBackupFile(); - TasksUiPlugin.getDefault().getTaskListSaveManager().saveTaskList(true); - } - } - - private void restoreState() { - if (taskListMemento != null) { - IMemento taskListWidth = taskListMemento.getChild(columnWidthIdentifier); - if (taskListWidth != null) { - for (int i = 0; i < columnWidths.length; i++) { - IMemento m = taskListWidth.getChild("col" + i); - if (m != null) { - int width = m.getInteger(MEMENTO_KEY_WIDTH); - columnWidths[i] = width; - columns[i].setWidth(width); - } - } - } - IMemento sorterMemento = taskListMemento.getChild(tableSortIdentifier); - if (sorterMemento != null) { - IMemento m = sorterMemento.getChild(MEMENTO_KEY_SORTER); - if (m != null) { - sortIndex = m.getInteger(MEMENTO_KEY_SORT_INDEX); - Integer sortDirInt = m.getInteger(MEMENTO_KEY_SORT_DIRECTION); - if (sortDirInt != null) { - sortDirection = sortDirInt.intValue(); - } - } else { - sortIndex = 2; - sortDirection = DEFAULT_SORT_DIRECTION; - } - - } else { - sortIndex = 2; // default priority - sortDirection = DEFAULT_SORT_DIRECTION; - } - tableSorter.setColumn(columnNames[sortIndex]); - getViewer().refresh(false); - // getViewer().setSorter(new TaskListTableSorter(this, - // columnNames[sortIndex])); - } - addFilter(FILTER_PRIORITY); - // if (MylarTaskListPlugin.getDefault().isFilterInCompleteMode()) - // MylarTaskListPlugin.getTaskListManager().getTaskList().addFilter(inCompleteFilter); - if (TasksUiPlugin.getDefault().getPreferenceStore().contains(TaskListPreferenceConstants.FILTER_COMPLETE_MODE)) - addFilter(FILTER_COMPLETE); - - if (TasksUiPlugin.getDefault().getPreferenceStore().contains(TaskListPreferenceConstants.FILTER_ARCHIVE_MODE)) - addFilter(FILTER_ARCHIVE); - - if (TasksUiPlugin.getDefault().isMultipleActiveTasksMode()) { - togglePreviousAction(false); - // toggleNextAction(false); - } - - getViewer().refresh(); - } - - @Override - public void createPartControl(Composite parent) { - themeManager = getSite().getWorkbenchWindow().getWorkbench().getThemeManager(); - themeManager.addPropertyChangeListener(THEME_CHANGE_LISTENER); - - filteredTree = new TaskListFilteredTree(parent, SWT.MULTI | SWT.VERTICAL | SWT.H_SCROLL | SWT.V_SCROLL - | SWT.FULL_SELECTION | SWT.HIDE_SELECTION, new TaskListPatternFilter()); - - getViewer().getTree().setHeaderVisible(true); - getViewer().getTree().setLinesVisible(true); - getViewer().setColumnProperties(columnNames); - getViewer().setUseHashlookup(true); - - columns = new TreeColumn[columnNames.length]; - for (int i = 0; i < columnNames.length; i++) { - columns[i] = new TreeColumn(getViewer().getTree(), 0); // SWT.LEFT - columns[i].setText(columnNames[i]); - columns[i].setWidth(columnWidths[i]); - final int index = i; - columns[i].addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent e) { - sortIndex = index; - sortDirection *= DEFAULT_SORT_DIRECTION; - tableSorter.setColumn(columnNames[sortIndex]); - getViewer().refresh(false); - // getViewer().setSorter(new - // TaskListTableSorter(TaskListView.this, - // columnNames[sortIndex])); - } - }); - columns[i].addControlListener(new ControlListener() { - public void controlResized(ControlEvent e) { - for (int j = 0; j < columnWidths.length; j++) { - if (columns[j].equals(e.getSource())) { - columnWidths[j] = columns[j].getWidth(); - } - } - } - - public void controlMoved(ControlEvent e) { - // don't care if the control is moved - } - }); - } - - IThemeManager themeManager = getSite().getWorkbenchWindow().getWorkbench().getThemeManager(); - Color categoryBackground = themeManager.getCurrentTheme().getColorRegistry().get( - TaskListColorsAndFonts.THEME_COLOR_TASKLIST_CATEGORY); - - taskListTableLabelProvider = new TaskListTableLabelProvider(new TaskElementLabelProvider(), PlatformUI - .getWorkbench().getDecoratorManager().getLabelDecorator(), categoryBackground, this); - - CellEditor[] editors = new CellEditor[columnNames.length]; - TextCellEditor textEditor = new TextCellEditor(getViewer().getTree()); - ((Text) textEditor.getControl()).setOrientation(SWT.LEFT_TO_RIGHT); - editors[0] = new CheckboxCellEditor(); - editors[1] = null; - editors[2] = new ComboBoxCellEditor(getViewer().getTree(), PRIORITY_LEVEL_DESCRIPTIONS, SWT.READ_ONLY); - editors[3] = null; - editors[4] = textEditor; - getViewer().setCellEditors(editors); - getViewer().setCellModifier(new TaskListCellModifier()); - tableSorter = new TaskListTableSorter(this, columnNames[sortIndex]); - getViewer().setSorter(tableSorter); - - drillDownAdapter = new DrillDownAdapter(getViewer()); - getViewer().setContentProvider(new TaskListContentProvider(this)); - getViewer().setLabelProvider(taskListTableLabelProvider); - getViewer().setInput(getViewSite()); - getViewer().getTree().addKeyListener(new KeyListener() { - - public void keyPressed(KeyEvent e) { - if (e.keyCode == SWT.F2 && e.stateMask == 0) { - if (renameAction.isEnabled()) { - renameAction.run(); - } - } else if (e.keyCode == 'c' && e.stateMask == SWT.MOD1) { - copyDetailsAction.run(); - } else if (e.keyCode == SWT.DEL) { - deleteAction.run(); - } else if (e.keyCode == SWT.INSERT) { - newLocalTaskAction.run(); - } else if (e.keyCode == 'f' && e.stateMask == SWT.MOD1) { - filteredTree.getFilterControl().setFocus(); - } else if (e.stateMask == 0) { - if (Character.isLetter((char) e.keyCode) || Character.isDigit((char) e.keyCode)) { - String string = new Character((char) e.keyCode).toString(); - filteredTree.getFilterControl().setText(string); - filteredTree.getFilterControl().setSelection(1, 1); - filteredTree.getFilterControl().setFocus(); - } - } - } - - public void keyReleased(KeyEvent e) { - } - - }); - - // HACK: shouldn't need to update explicitly - getViewer().addSelectionChangedListener(new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent event) { - Object selectedObject = ((IStructuredSelection) getViewer().getSelection()).getFirstElement(); - if (selectedObject instanceof ITaskListElement) { - updateActionEnablement(renameAction, (ITaskListElement) selectedObject); - } - } - }); - - makeActions(); - hookContextMenu(); - hookOpenAction(); - contributeToActionBars(); - - TaskListToolTipHandler taskListToolTipHandler = new TaskListToolTipHandler(getViewer().getControl().getShell()); - taskListToolTipHandler.activateHoverHelp(getViewer().getControl()); - - getViewer().getTree().setToolTipText(null); - - initDragAndDrop(parent); - expandToActiveTasks(); - restoreState(); - - List<ITask> activeTasks = TasksUiPlugin.getTaskListManager().getTaskList().getActiveTasks(); - if (activeTasks.size() > 0) { - updateDescription(activeTasks.get(0)); - } - getSite().setSelectionProvider(getViewer()); - } - - private void initDragAndDrop(Composite parent) { - Transfer[] dragTypes = new Transfer[] { TaskTransfer.getInstance(), TextTransfer.getInstance(), - FileTransfer.getInstance() }; - - Transfer[] dropTypes = new Transfer[] { TaskTransfer.getInstance(), TextTransfer.getInstance(), - FileTransfer.getInstance(), // PluginTransfer.getInstance(), - RTFTransfer.getInstance() }; - - getViewer().addDragSupport(DND.DROP_COPY | DND.DROP_MOVE, dragTypes, new TaskListDragSourceListener(this)); - getViewer().addDropSupport(DND.DROP_COPY | DND.DROP_MOVE, dropTypes, new TaskListDropAdapter(getViewer())); - } - - void expandToActiveTasks() { - final IWorkbench workbench = PlatformUI.getWorkbench(); - workbench.getDisplay().asyncExec(new Runnable() { - public void run() { - List<ITask> activeTasks = TasksUiPlugin.getTaskListManager().getTaskList().getActiveTasks(); - for (ITask t : activeTasks) { - getViewer().expandToLevel(t, 0); - } - } - }); - } - - private void hookContextMenu() { - MenuManager menuManager = new MenuManager("#PopupMenu"); - menuManager.setRemoveAllWhenShown(true); - menuManager.addMenuListener(new IMenuListener() { - public void menuAboutToShow(IMenuManager manager) { - TaskListView.this.fillContextMenu(manager); - } - }); - Menu menu = menuManager.createContextMenu(getViewer().getControl()); - getViewer().getControl().setMenu(menu); - getSite().registerContextMenu(menuManager, getViewer()); - } - - private void contributeToActionBars() { - IActionBars bars = getViewSite().getActionBars(); - fillLocalPullDown(bars.getMenuManager()); - fillLocalToolBar(bars.getToolBarManager()); - } - - private void fillLocalPullDown(IMenuManager manager) { - updateDrillDownActions(); - manager.add(goUpAction); - manager.add(collapseAll); - manager.add(expandAll); - manager.add(new Separator(SEPARATOR_FILTERS)); - manager.add(filterCompleteTask); - manager.add(filterArchiveCategory); - manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); - } - - private void fillLocalToolBar(IToolBarManager manager) { - manager.add(new Separator(SEPARATOR_ID_REPORTS)); - manager.add(newLocalTaskAction); - // manager.add(newCategoryAction); - // manager.add(new Separator()); - manager.add(filterOnPriority); - manager.add(new Separator("navigation")); - // manager.add(new Separator(SEPARATOR_CONTEXT)); - manager.add(previousTaskAction); - // manager.add(nextTaskAction); - manager.add(new Separator(SEPARATOR_CONTEXT)); - // manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); - } - - private void fillContextMenu(IMenuManager manager) { - updateDrillDownActions(); - - ITaskListElement element = null; - - final Object firstSelectedObject = ((IStructuredSelection) getViewer().getSelection()).getFirstElement(); - if (firstSelectedObject instanceof ITaskListElement) { - element = (ITaskListElement) firstSelectedObject; - } - List<ITaskListElement> selectedElements = new ArrayList<ITaskListElement>(); - for (Iterator i = ((IStructuredSelection) getViewer().getSelection()).iterator(); i.hasNext();) { - Object object = i.next(); - if (object instanceof ITaskListElement) { - selectedElements.add((ITaskListElement) object); - } - } - openWithBrowser.selectionChanged((StructuredSelection) getViewer().getSelection()); - -// if (!(element instanceof AbstractRepositoryQuery || element instanceof TaskCategory)) { - addAction(openAction, manager, element); -// } - ITask task = null; - if ((element instanceof ITask) || (element instanceof AbstractQueryHit)) { - if (element instanceof AbstractQueryHit) { - task = ((AbstractQueryHit) element).getCorrespondingTask(); - } else { - task = (ITask) element; - } - addAction(openWithBrowser, manager, element); - if (!(element instanceof AbstractRepositoryTask) || element instanceof AbstractTaskContainer) { - addAction(renameAction, manager, element); - } - addAction(copyDetailsAction, manager, element); - - if (task != null) { - // if (!(task instanceof AbstractRepositoryTask) || task - // instanceof WebTask) { - // if (task.isCompleted()) { - // addAction(markCompleteAction, manager, element); - // } else { - // addAction(markIncompleteAction, manager, element); - // } - // } - addAction(removeFromCategoryAction, manager, element); - addAction(deleteAction, manager, element); - if (task.isActive()) { - manager.add(deactivateAction); - } else { - manager.add(activateAction); - } - } else { - manager.add(activateAction); - } - } else if (element instanceof AbstractTaskContainer || element instanceof AbstractRepositoryQuery) { - addAction(openWithBrowser, manager, element); - addAction(copyDetailsAction, manager, element); - addAction(deleteAction, manager, element); - } - - if (element instanceof AbstractTaskContainer) { - manager.add(goIntoAction); - } - if (drilledIntoCategory != null) { - manager.add(goUpAction); - } - - manager.add(new Separator()); - for (IDynamicSubMenuContributor contributor : TasksUiPlugin.getDefault().getDynamicMenuContributers()) { - MenuManager subMenuManager = contributor.getSubMenuManager(selectedElements); - if (subMenuManager != null) { - addMenuManager(subMenuManager, manager, element); - } - } - - manager.add(new Separator(SEPARATOR_LOCAL)); - manager.add(newCategoryAction); - manager.add(newLocalTaskAction); - manager.add(new Separator(SEPARATOR_REPORTS)); - - manager.add(new Separator(SEPARATOR_CONTEXT)); - - if (element instanceof AbstractRepositoryQuery || element instanceof TaskCategory) { - manager.add(new Separator()); - addAction(propertiesAction, manager, element); - } - - manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); - } - - private void addMenuManager(IMenuManager menuToAdd, IMenuManager manager, ITaskListElement element) { - if ((element instanceof ITask || element instanceof AbstractQueryHit) || (element instanceof AbstractTaskContainer || element instanceof AbstractRepositoryQuery)) { - manager.add(menuToAdd); - } - } - - private void addAction(Action action, IMenuManager manager, ITaskListElement element) { - manager.add(action); - if (element != null) { - // ITaskHandler handler = - // MylarTaskListPlugin.getDefault().getHandlerForElement(element); - // if (handler != null) { - // action.setEnabled(handler.enableAction(action, element)); - // } else { - updateActionEnablement(action, element); - // } - } - } - - /** - * Refactor out element - */ - private void updateActionEnablement(Action action, ITaskListElement element) { - if (element instanceof ITask) { - if (action instanceof OpenWithBrowserAction) { - if (((ITask) element).hasValidUrl()) { - action.setEnabled(true); - } else { - action.setEnabled(false); - } - } else if (action instanceof DeleteAction) { - action.setEnabled(true); - } else if (action instanceof NewLocalTaskAction) { - action.setEnabled(false); - } else if (action instanceof OpenTaskListElementAction) { - action.setEnabled(true); - } else if (action instanceof CopyDetailsAction) { - action.setEnabled(true); - } else if (action instanceof RenameAction) { - action.setEnabled(true); - } - } else if (element instanceof AbstractTaskContainer) { - if (action instanceof MarkTaskCompleteAction) { - action.setEnabled(false); - } else if (action instanceof MarkTaskIncompleteAction) { - action.setEnabled(false); - } else if (action instanceof DeleteAction) { - if (element instanceof TaskArchive) - action.setEnabled(false); - else - action.setEnabled(true); - } else if (action instanceof NewLocalTaskAction) { - if (element instanceof TaskArchive) - action.setEnabled(false); - else - action.setEnabled(true); - } else if (action instanceof GoIntoAction) { - TaskCategory cat = (TaskCategory) element; - if (cat.getChildren().size() > 0) { - action.setEnabled(true); - } else { - action.setEnabled(false); - } - } else if (action instanceof OpenTaskListElementAction) { - action.setEnabled(true); - } else if (action instanceof CopyDetailsAction) { - action.setEnabled(true); - } else if (action instanceof RenameAction) { - if (element instanceof TaskArchive) - action.setEnabled(false); - else - action.setEnabled(true); - } - } else { - action.setEnabled(true); - } - // if(!canEnableGoInto){ - // goIntoAction.setEnabled(false); - // } - } - - private void makeActions() { - - copyDetailsAction = new CopyDetailsAction(this); - // workOffline = new WorkOfflineAction(); - - goIntoAction = new GoIntoAction(); - goUpAction = new GoUpAction(drillDownAdapter); - - newLocalTaskAction = new NewLocalTaskAction(this); - newCategoryAction = new NewCategoryAction(this); - removeFromCategoryAction = new RemoveFromCategoryAction(this); - renameAction = new RenameAction(this); - - deleteAction = new DeleteAction(); - collapseAll = new CollapseAllAction(this); - expandAll = new ExpandAllAction(this); - // autoClose = new ManageEditorsAction(); - // markIncompleteAction = new MarkTaskCompleteAction(this); - // markCompleteAction = new MarkTaskIncompleteAction(this); - openAction = new OpenTaskListElementAction(this.getViewer()); - propertiesAction = new TaskListElementPropertiesAction(this.getViewer()); - openWithBrowser = new OpenWithBrowserAction(); - filterCompleteTask = new FilterCompletedTasksAction(this); - filterArchiveCategory = new FilterArchiveContainerAction(this); - filterOnPriority = new PriorityDropDownAction(); - previousTaskAction = new PreviousTaskDropDownAction(this, TasksUiPlugin.getTaskListManager() - .getTaskActivationHistory()); - // nextTaskAction = new NextTaskDropDownAction(this, - // TasksUiPlugin.getTaskListManager().getTaskActivationHistory()); - } - - // public void toggleNextAction(boolean enable) { - // nextTaskAction.setEnabled(enable); - // } - // public NextTaskDropDownAction getNextTaskAction() { - // return nextTaskAction; - // } - - public void togglePreviousAction(boolean enable) { - previousTaskAction.setEnabled(enable); - } - - public PreviousTaskDropDownAction getPreviousTaskAction() { - return previousTaskAction; - } - - /** - * Recursive function that checks for the occurrence of a certain task id. - * All children of the supplied node will be checked. - * - * @param task - * The <code>ITask</code> object that is to be searched. - * @param taskId - * The id that is being searched for. - * @return <code>true</code> if the id was found in the node or any of its - * children - */ - protected boolean lookForId(String taskId) { - return (TasksUiPlugin.getTaskListManager().getTaskList().getTask(taskId) == null); - // for (ITask task : - // MylarTaskListPlugin.getTaskListManager().getTaskList().getRootTasks()) - // { - // if (task.getHandle().equals(taskId)) { - // return true; - // } - // } - // for (TaskCategory cat : - // MylarTaskListPlugin.getTaskListManager().getTaskList().getTaskCategories()) - // { - // for (ITask task : cat.getChildren()) { - // if (task.getHandle().equals(taskId)) { - // return true; - // } - // } - // } - // return false; - } - - private void hookOpenAction() { - getViewer().addDoubleClickListener(new IDoubleClickListener() { - public void doubleClick(DoubleClickEvent event) { - if (TasksUiPlugin.getDefault().getPreferenceStore().getBoolean( - TaskListPreferenceConstants.ACTIVATE_ON_OPEN)) { - ITask selectedTask = TaskListView.getFromActivePerspective().getSelectedTask(); - if (selectedTask != null) { - activateAction.run(selectedTask); - addTaskToHistory(selectedTask); - previousTaskAction.setButtonStatus(); - } - } - openAction.run(); - } - }); - } - - /** - * Passing the focus request to the viewer's control. - */ - @Override - public void setFocus() { - filteredTree.getViewer().getControl().setFocus(); - } - - public String getBugIdFromUser() { - InputDialog dialog = new InputDialog(getSite().getWorkbenchWindow().getShell(), "Enter Bugzilla ID", - "Enter the Bugzilla ID: ", "", null); - int dialogResult = dialog.open(); - if (dialogResult == Window.OK) { - return dialog.getValue(); - } else { - return null; - } - } - - public void refreshAndFocus(boolean expand) { - getViewer().getControl().setRedraw(false); - getViewer().refresh(); - if (expand) { - getViewer().expandAll(); - } - selectedAndFocusTask(TasksUiPlugin.getTaskListManager().getTaskList().getActiveTask()); - getViewer().getControl().setRedraw(true); - } - - public TreeViewer getViewer() { - return filteredTree.getViewer(); - } - - public TaskCompletionFilter getCompleteFilter() { - return FILTER_COMPLETE; - } - - public TaskPriorityFilter getPriorityFilter() { - return FILTER_PRIORITY; - } - - public void addFilter(AbstractTaskListFilter filter) { - if (!filters.contains(filter)) { - filters.add(filter); - } - } - - public void clearFilters(boolean preserveArchiveFilter) { - filters.clear(); - if (preserveArchiveFilter) { - filters.add(FILTER_ARCHIVE); - } - } - - public void removeFilter(AbstractTaskListFilter filter) { - filters.remove(filter); - } - - public void updateDrillDownActions() { - if (drillDownAdapter.canGoBack()) { - goUpAction.setEnabled(true); - } else { - goUpAction.setEnabled(false); - } - } - - /** - * HACK: This is used for the copy action - */ - public Composite getDummyComposite() { - return filteredTree; - } - - private boolean isInRenameAction = false; - - public void setInRenameAction(boolean b) { - isInRenameAction = b; - } - - // /** - // * This method is for testing only - // */ - // public TaskActivationHistory getTaskActivationHistory() { - // return TasksUiPlugin.getTaskListManager().getTaskActivationHistory(); - // } - - public void goIntoCategory() { - ISelection selection = getViewer().getSelection(); - if (selection instanceof StructuredSelection) { - StructuredSelection structuredSelection = (StructuredSelection) selection; - Object element = structuredSelection.getFirstElement(); - if (element instanceof AbstractTaskContainer) { - drilledIntoCategory = (AbstractTaskContainer) element; - drillDownAdapter.goInto(); - IActionBars bars = getViewSite().getActionBars(); - bars.getToolBarManager().add(goUpAction); - bars.updateActionBars(); - updateDrillDownActions(); - } - } - } - - public void goUpToRoot() { - drilledIntoCategory = null; - drillDownAdapter.goBack(); - IActionBars bars = getViewSite().getActionBars(); - bars.getToolBarManager().remove(GoUpAction.ID); - bars.updateActionBars(); - updateDrillDownActions(); - } - - public ITask getSelectedTask() { - ISelection selection = getViewer().getSelection(); - if (selection.isEmpty()) - return null; - if (selection instanceof StructuredSelection) { - StructuredSelection structuredSelection = (StructuredSelection) selection; - Object element = structuredSelection.getFirstElement(); - if (element instanceof ITask) { - return (ITask) structuredSelection.getFirstElement(); - } else if (element instanceof AbstractQueryHit) { - return ((AbstractQueryHit) element).getOrCreateCorrespondingTask(); - } - } - return null; - } - - public static ITask getSelectedTask(ISelection selection) { - if (selection instanceof StructuredSelection) { - StructuredSelection structuredSelection = (StructuredSelection) selection; - if (structuredSelection.size() != 1) { - return null; - } - Object element = structuredSelection.getFirstElement(); - if (element instanceof ITask) { - return (ITask) structuredSelection.getFirstElement(); - } else if (element instanceof AbstractQueryHit) { - return ((AbstractQueryHit) element).getCorrespondingTask(); - } - } - return null; - } - - public void indicatePaused(boolean paused) { - isPaused = paused; - IStatusLineManager statusLineManager = getViewSite().getActionBars().getStatusLineManager(); - if (isPaused) { - statusLineManager.setMessage(TaskListImages.getImage(TaskListImages.TASKLIST), - "Mylar context capture paused"); - } else { - statusLineManager.setMessage(""); - } - } - - /** - * Show the shared data folder currently in use. Call with "" to turn off - * the indication. TODO: Need a better way to indicate paused and/or the - * shared folder - */ - public void indicateSharedFolder(String folderName) { - if (folderName.equals("")) { - if (isPaused) { - setPartName("(paused) " + PART_NAME); - } else { - setPartName(PART_NAME); - } - } else { - if (isPaused) { - setPartName("(paused) " + folderName + " " + PART_NAME); - } else { - setPartName(folderName + " " + PART_NAME); - } - } - - } - - public AbstractTaskContainer getDrilledIntoCategory() { - return drilledIntoCategory; - } - - public TaskListFilteredTree getFilteredTree() { - return filteredTree; - } - - public void selectedAndFocusTask(ITask task) { - if (task == null || getViewer().getControl().isDisposed()) { - return; - } - // StructuredSelection currentSelection = (StructuredSelection) - // getViewer().getSelection(); - // ITask selectedTask = null; - // if (currentSelection.getFirstElement() instanceof ITask) { - // selectedTask = (ITask) currentSelection.getFirstElement(); - // } else if (currentSelection.getFirstElement() instanceof - // AbstractQueryHit) { - // selectedTask = ((AbstractQueryHit) - // currentSelection.getFirstElement()).getCorrespondingTask(); - // } - // if (!task.equals(selectedTask)) { - getViewer().setSelection(new StructuredSelection(task), true); - // if no task exists, select the query hit if exists - AbstractQueryHit hit = null; - if (getViewer().getSelection().isEmpty() - && (hit = TasksUiPlugin.getTaskListManager().getTaskList().getQueryHitForHandle( - task.getHandleIdentifier())) != null) { - AbstractRepositoryQuery query = TasksUiPlugin.getTaskListManager().getTaskList().getQueryForHandle( - task.getHandleIdentifier()); - getViewer().expandToLevel(query, 1); - getViewer().setSelection(new StructuredSelection(hit), true); - } else { - // if (task.getc() != null) { - // getViewer().expandToLevel(task.getContainer(), 1); - // } - // getViewer().setSelection(new StructuredSelection(hit), true); - } - // } - } - - protected void refreshTask(ITask task) { - refresh(task); - AbstractTaskContainer rootCategory = TasksUiPlugin.getTaskListManager().getTaskList().getRootCategory(); - if (task.getContainer() == null // || task.getContainer() instanceof - // TaskArchive - || task.getContainer().equals(rootCategory)) { - refresh(null); - } else { - refresh(task.getContainer()); - } - - Set<AbstractQueryHit> hits = TasksUiPlugin.getTaskListManager().getTaskList().getQueryHitsForHandle( - task.getHandleIdentifier()); - for (AbstractQueryHit hit : hits) { - refresh(hit); - } - } - - private void refresh(final ITaskListElement element) { - if (PlatformUI.getWorkbench() != null && !PlatformUI.getWorkbench().getDisplay().isDisposed()) { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - if (getViewer().getControl() != null && !getViewer().getControl().isDisposed()) { - if (element == null) { - // getViewer().refresh(); - filteredTree.textChanged(); - } else { - getViewer().refresh(element, true); - if (element instanceof AbstractTaskContainer - && !((AbstractTaskContainer) element).equals(TasksUiPlugin.getTaskListManager() - .getTaskList().getArchiveContainer())) { - List visibleElements = Arrays.asList(getViewer().getVisibleExpandedElements()); - if (!visibleElements.contains(element)) { - getViewer().refresh(); - } - } - } - } - } - }); - } - } - - public Image[] getPirorityImages() { - Image[] images = new Image[Task.PriorityLevel.values().length]; - for (int i = 0; i < Task.PriorityLevel.values().length; i++) { - images[i] = TaskUiUtil.getImageForPriority(Task.PriorityLevel.values()[i]); - } - return images; - } - - public Set<AbstractTaskListFilter> getFilters() { - return filters; - } - - public static String getCurrentPriorityLevel() { - if (TasksUiPlugin.getDefault().getPreferenceStore().contains(TaskListPreferenceConstants.SELECTED_PRIORITY)) { - return TasksUiPlugin.getDefault().getPreferenceStore().getString( - TaskListPreferenceConstants.SELECTED_PRIORITY); - } else { - return Task.PriorityLevel.P5.toString(); - } - } - - public TaskArchiveFilter getArchiveFilter() { - return FILTER_ARCHIVE; - } - - public void setPriorityButtonEnabled(boolean enabled) { - filterOnPriority.setEnabled(enabled); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskRepositoriesView.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskRepositoriesView.java deleted file mode 100644 index 1197c3807..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskRepositoriesView.java +++ /dev/null @@ -1,192 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui.views; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.IMenuListener; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.IToolBarManager; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.jface.action.Separator; -import org.eclipse.jface.viewers.DecoratingLabelProvider; -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.IStructuredContentProvider; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.mylar.internal.tasks.ui.actions.AddRepositoryAction; -import org.eclipse.mylar.internal.tasks.ui.actions.DeleteTaskRepositoryAction; -import org.eclipse.mylar.internal.tasks.ui.actions.EditRepositoryPropertiesAction; -import org.eclipse.mylar.tasks.core.ITaskRepositoryListener; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Menu; -import org.eclipse.ui.IActionBars; -import org.eclipse.ui.IViewPart; -import org.eclipse.ui.IWorkbenchActionConstants; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.part.ViewPart; - -/** - * @author Mik Kersten - */ -public class TaskRepositoriesView extends ViewPart { - - public static final String ID = "org.eclipse.mylar.tasklist.repositories"; - - public static final String NAME = "Task Repositories View"; - - private TableViewer viewer; - - private Action addRepositoryAction = new AddRepositoryAction(); - - private Action deleteRepositoryAction = new DeleteTaskRepositoryAction(this); - - private Action repositoryPropertiesAction = new EditRepositoryPropertiesAction(this); - - private Action resetConrigurationAction = new ResetRepositoryConfigurationAction(this); - - private final ITaskRepositoryListener REPOSITORY_LISTENER = new ITaskRepositoryListener() { - - public void repositoriesRead() { - refresh(); - } - - public void repositoryAdded(TaskRepository repository) { - refresh(); - } - - public void repositoryRemoved(TaskRepository repository) { - refresh(); - } - - public void repositorySettingsChanged(TaskRepository repository) { - refresh(); - } - }; - - static class ViewContentProvider implements IStructuredContentProvider { - public void inputChanged(Viewer v, Object oldInput, Object newInput) { - } - - public void dispose() { - } - - public Object[] getElements(Object parent) { - return TasksUiPlugin.getRepositoryManager().getAllRepositories().toArray(); - } - } - - public TaskRepositoriesView() { - TasksUiPlugin.getRepositoryManager().addListener(REPOSITORY_LISTENER); - } - - public static TaskRepositoriesView getFromActivePerspective() { - IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - if (activePage == null) - return null; - IViewPart view = activePage.findView(ID); - if (view instanceof TaskRepositoriesView) - return (TaskRepositoriesView) view; - return null; - } - - public void createPartControl(Composite parent) { - viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION); - viewer.setContentProvider(new ViewContentProvider()); - - viewer.setLabelProvider(new DecoratingLabelProvider(new TaskRepositoryLabelProvider(), PlatformUI - .getWorkbench().getDecoratorManager().getLabelDecorator())); - - viewer.setSorter(new TaskRepositoriesViewSorter()); - -// new ViewerSorter() { -// -// @Override -// public int compare(Viewer viewer, Object e1, Object e2) { -// if (e1 instanceof TaskRepository && e2 instanceof TaskRepository) { -// TaskRepository t1 = (TaskRepository) e1; -// TaskRepository t2 = (TaskRepository) e2; -// return (t1.getKind() + t1.getUrl()).compareTo(t2.getKind() + t2.getUrl()); -// } else { -// return super.compare(viewer, e1, e2); -// } -// } -// }); - viewer.setInput(getViewSite()); - viewer.addDoubleClickListener(new IDoubleClickListener() { - - public void doubleClick(DoubleClickEvent event) { - repositoryPropertiesAction.run(); - } - }); - - hookContextMenu(); - contributeToActionBars(); - getSite().setSelectionProvider(getViewer()); - } - - private void hookContextMenu() { - MenuManager menuMgr = new MenuManager("#PopupMenu"); - menuMgr.setRemoveAllWhenShown(true); - menuMgr.addMenuListener(new IMenuListener() { - public void menuAboutToShow(IMenuManager manager) { - TaskRepositoriesView.this.fillContextMenu(manager); - } - }); - Menu menu = menuMgr.createContextMenu(viewer.getControl()); - viewer.getControl().setMenu(menu); - getSite().registerContextMenu(menuMgr, viewer); - } - - private void contributeToActionBars() { - IActionBars bars = getViewSite().getActionBars(); - fillLocalPullDown(bars.getMenuManager()); - fillLocalToolBar(bars.getToolBarManager()); - } - - private void fillLocalPullDown(IMenuManager manager) { - manager.add(addRepositoryAction); - } - - private void fillContextMenu(IMenuManager manager) { - manager.add(addRepositoryAction); - manager.add(deleteRepositoryAction); - manager.add(new Separator()); - manager.add(repositoryPropertiesAction); - manager.add(resetConrigurationAction); - manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); - } - - private void fillLocalToolBar(IToolBarManager manager) { - manager.add(addRepositoryAction); - } - - /** - * Passing the focus request to the viewer's control. - */ - public void setFocus() { - viewer.getControl().setFocus(); - } - - public void refresh() { - if (viewer != null && !viewer.getControl().isDisposed()) { - viewer.refresh(); - } - } - - public TableViewer getViewer() { - return viewer; - } -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskRepositoriesViewSorter.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskRepositoriesViewSorter.java deleted file mode 100644 index 21134aa4d..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskRepositoriesViewSorter.java +++ /dev/null @@ -1,29 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.views; - -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerSorter; -import org.eclipse.mylar.tasks.core.TaskRepository; - -/** - * @author Mik Kersten - */ -public class TaskRepositoriesViewSorter extends ViewerSorter { - @Override - public int compare(Viewer viewer, Object e1, Object e2) { - if (e1 instanceof TaskRepository && e2 instanceof TaskRepository) { - TaskRepository t1 = (TaskRepository) e1; - TaskRepository t2 = (TaskRepository) e2; - return (t1.getKind() + t1.getUrl()).compareTo(t2.getKind() + t2.getUrl()); - } else { - return super.compare(viewer, e1, e2); - } - } -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/AbstractEditQueryWizard.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/AbstractEditQueryWizard.java deleted file mode 100644 index d05e5d246..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/AbstractEditQueryWizard.java +++ /dev/null @@ -1,59 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.internal.tasks.ui.search.AbstractRepositoryQueryPage; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Mik Kersten - */ -public abstract class AbstractEditQueryWizard extends Wizard { - - private static final String TITLE = "Edit Repository Query"; - - protected final TaskRepository repository; - - protected AbstractRepositoryQuery query; - - protected AbstractRepositoryQueryPage page; - - public AbstractEditQueryWizard(TaskRepository repository, AbstractRepositoryQuery query) { - this.repository = repository; - this.query = query; - setNeedsProgressMonitor(true); - setWindowTitle(TITLE); - setDefaultPageImageDescriptor(TaskListImages.BANNER_REPOSITORY); - } - - @Override - public boolean performFinish() { - AbstractRepositoryQuery query = page.getQuery(); - if (query != null) { - - TasksUiPlugin.getTaskListManager().getTaskList().deleteQuery(query); - TasksUiPlugin.getTaskListManager().getTaskList().addQuery(query); - - AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager().getRepositoryConnector(repository.getKind()); - if (connector != null) { - TasksUiPlugin.getSynchronizationManager().synchronize(connector, query, null); - } - } - - return true; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/AbstractRepositoryClientWizard.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/AbstractRepositoryClientWizard.java deleted file mode 100644 index e2fb6540c..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/AbstractRepositoryClientWizard.java +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import java.util.Collection; - -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.ui.AbstractRepositoryConnectorUi; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.INewWizard; - -/** - * @author Mik Kersten - */ -public abstract class AbstractRepositoryClientWizard extends Wizard implements INewWizard { - - private SelectRepositoryClientPage selectRepositoryClientPage = new SelectRepositoryClientPage(this); - - protected AbstractRepositorySettingsPage abstractRepositorySettingsPage; - - protected AbstractRepositoryConnector repositoryConnector; - - public AbstractRepositoryClientWizard() { - super(); - setDefaultPageImageDescriptor(TaskListImages.BANNER_REPOSITORY); - } - - public void setRepositoryConnector(AbstractRepositoryConnector repositoryConnector) { - this.repositoryConnector = repositoryConnector; - } - - public AbstractRepositoryConnector getRepositoryConnector() { - return repositoryConnector; - } - - @Override - public void addPages() { - Collection<AbstractRepositoryConnector> connectors = TasksUiPlugin.getRepositoryManager().getRepositoryConnectors(); - if (connectors.size() == 1) { - AbstractRepositoryConnector connector = connectors.toArray(new AbstractRepositoryConnector[1])[0]; - setRepositoryConnector(connector); - AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getRepositoryUi( - connector.getRepositoryType()); - AbstractRepositorySettingsPage nextPage = connectorUi.getSettingsPage(); - setRepositorySettingsPage(nextPage); - nextPage.setWizard(this); - addPage(nextPage); - } else { - addPage(selectRepositoryClientPage); - } - } - - @Override - public boolean canFinish() { - return selectRepositoryClientPage.isPageComplete(); - } - - public void setRepositorySettingsPage(AbstractRepositorySettingsPage abstractRepositorySettingsPage) { - this.abstractRepositorySettingsPage = abstractRepositorySettingsPage; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/AbstractRepositorySettingsPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/AbstractRepositorySettingsPage.java deleted file mode 100644 index d11e09d13..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/AbstractRepositorySettingsPage.java +++ /dev/null @@ -1,542 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import java.nio.charset.Charset; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.eclipse.jface.layout.GridDataFactory; -import org.eclipse.jface.preference.StringFieldEditor; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.AbstractRepositoryConnectorUi; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.IWorkbench; - -/** - * @author Mik Kersten - */ -public abstract class AbstractRepositorySettingsPage extends WizardPage { - - protected static final String LABEL_REPOSITORY_LABEL = "Label: "; - - protected static final String LABEL_SERVER = "Server: "; - - protected static final String LABEL_USER = "User Name: "; - - protected static final String LABEL_PASSWORD = "Password: "; - - protected static final String URL_PREFIX_HTTPS = "https://"; - - protected static final String URL_PREFIX_HTTP = "http://"; - - protected AbstractRepositoryConnector connector; - - protected StringFieldEditor repositoryLabelEditor; - - protected Combo serverUrlCombo; - - // protected StringFieldEditor serverUrlEditor; - - protected StringFieldEditor userNameEditor; - - protected StringFieldEditor characterEncodingEditor; - - private String serverVersion = TaskRepository.NO_VERSION_SPECIFIED; - - protected StringFieldEditor passwordEditor; - - protected TaskRepository repository; - - private Button validateServerButton; - - private Combo otherEncodingCombo; - - private Button defaultEncoding; - - // private Combo timeZonesCombo; - - protected Button anonymousButton; - - private String oldUsername; - - private String oldPassword; - - private boolean needsAnonymousLogin; - - private boolean needsTimeZone; - - private boolean needsEncoding; - - private Composite container; - - private Set<String> repositoryUrls; - - private String originalUrl; - - public AbstractRepositorySettingsPage(String title, String description, AbstractRepositoryConnectorUi repositoryUi) { - super(title); - super.setTitle(title); - super.setDescription(description); - AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager().getRepositoryConnector( - repositoryUi.getRepositoryType()); - this.connector = connector; - - setNeedsAnonymousLogin(false); - setNeedsEncoding(true); - setNeedsTimeZone(true); - } - - public void createControl(Composite parent) { - container = new Composite(parent, SWT.NULL); - FillLayout layout = new FillLayout(); - container.setLayout(layout); - - new Label(container, SWT.NONE).setText(LABEL_SERVER); - serverUrlCombo = new Combo(container, SWT.DROP_DOWN); - serverUrlCombo.addModifyListener(new ModifyListener() { - - public void modifyText(ModifyEvent e) { - isValidUrl(serverUrlCombo.getText()); - if (getWizard() != null) { - getWizard().getContainer().updateButtons(); - } - } - }); - serverUrlCombo.addSelectionListener(new SelectionListener() { - - public void widgetDefaultSelected(SelectionEvent e) { - // ignore - - } - - public void widgetSelected(SelectionEvent e) { - isValidUrl(serverUrlCombo.getText()); - if (getWizard() != null) { - getWizard().getContainer().updateButtons(); - } - } - }); - - GridDataFactory.swtDefaults().hint(200, SWT.DEFAULT).grab(true, false).applyTo(serverUrlCombo); - - repositoryLabelEditor = new StringFieldEditor("", LABEL_REPOSITORY_LABEL, StringFieldEditor.UNLIMITED, - container) { - - @Override - protected boolean doCheckState() { - return true; - // return isValidUrl(getStringValue()); - } - - @Override - protected void valueChanged() { - super.valueChanged(); - if (getWizard() != null) { - getWizard().getContainer().updateButtons(); - } - } - }; - // repositoryLabelEditor.setErrorMessage("error"); - - if (needsAnonymousLogin()) { - anonymousButton = new Button(container, SWT.CHECK); - GridDataFactory.fillDefaults().span(2, SWT.DEFAULT).applyTo(anonymousButton); - - anonymousButton.setText("Anonymous Access"); - anonymousButton.addSelectionListener(new SelectionListener() { - public void widgetSelected(SelectionEvent e) { - setAnonymous(anonymousButton.getSelection()); - } - - public void widgetDefaultSelected(SelectionEvent e) { - // ignore - } - }); - - // Label anonymousLabel = new Label(container, SWT.NONE); - // anonymousLabel.setText(""); - } - - userNameEditor = new StringFieldEditor("", LABEL_USER, StringFieldEditor.UNLIMITED, container); - passwordEditor = new RepositoryStringFieldEditor("", LABEL_PASSWORD, StringFieldEditor.UNLIMITED, container); - if (repository != null) { - originalUrl = repository.getUrl(); - oldUsername = repository.getUserName(); - oldPassword = repository.getPassword(); - try { - String repositoryLabel = repository.getRepositoryLabel(); - if (repositoryLabel != null && repositoryLabel.length() > 0) { - // repositoryLabelCombo.add(repositoryLabel); - // repositoryLabelCombo.select(0); - repositoryLabelEditor.setStringValue(repositoryLabel); - } - serverUrlCombo.setText(repository.getUrl()); - userNameEditor.setStringValue(repository.getUserName()); - passwordEditor.setStringValue(repository.getPassword()); - } catch (Throwable t) { - MylarStatusHandler.fail(t, "could not set field value for: " + repository, false); - } - } else { - oldUsername = ""; - oldPassword = ""; - } - // bug 131656: must set echo char after setting value on Mac - ((RepositoryStringFieldEditor) passwordEditor).getTextControl().setEchoChar('*'); - - if (needsAnonymousLogin()) { - // do this after username and password widgets have been intialized - if (repository != null) { - setAnonymous(isAnonymousAccess()); - } - } - - // TODO: put this back if we can't get the info from all connectors - // if (needsTimeZone()) { - // Label timeZoneLabel = new Label(container, SWT.NONE); - // timeZoneLabel.setText("Repository time zone: "); - // timeZonesCombo = new Combo(container, SWT.READ_ONLY); - // String[] timeZoneIds = TimeZone.getAvailableIDs(); - // Arrays.sort(timeZoneIds); - // for (String zone : timeZoneIds) { - // timeZonesCombo.add(zone); - // } - // boolean setZone = false; - // if (repository != null) { - // if (timeZonesCombo.indexOf(repository.getTimeZoneId()) > -1) { - // timeZonesCombo.select(timeZonesCombo.indexOf(repository.getTimeZoneId())); - // setZone = true; - // } - // } - // if (!setZone) { - // timeZonesCombo.select(timeZonesCombo.indexOf(TimeZone.getDefault().getID())); - // } - // } - - createAdditionalControls(container); - - if (needsEncoding()) { - Label encodingLabel = new Label(container, SWT.HORIZONTAL); - encodingLabel.setText("Character Encoding:"); - GridDataFactory.fillDefaults().align(SWT.TOP, SWT.DEFAULT).applyTo(encodingLabel); - - Composite encodingContainer = new Composite(container, SWT.NONE); - GridLayout gridLayout = new GridLayout(2, false); - gridLayout.marginWidth = 0; - gridLayout.marginHeight = 0; - encodingContainer.setLayout(gridLayout); - - defaultEncoding = new Button(encodingContainer, SWT.RADIO); - defaultEncoding.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1)); - defaultEncoding.setText("Default (" + TaskRepository.DEFAULT_CHARACTER_ENCODING + ")"); - defaultEncoding.setSelection(true); - - final Button otherEncoding = new Button(encodingContainer, SWT.RADIO); - otherEncoding.setText("Other:"); - otherEncodingCombo = new Combo(encodingContainer, SWT.READ_ONLY); - for (String encoding : Charset.availableCharsets().keySet()) { - if (!encoding.equals(TaskRepository.DEFAULT_CHARACTER_ENCODING)) { - otherEncodingCombo.add(encoding); - } - } - - setDefaultEncoding(); - - otherEncoding.addSelectionListener(new SelectionAdapter() { - - public void widgetSelected(SelectionEvent e) { - if (otherEncoding.getSelection()) { - defaultEncoding.setSelection(false); - otherEncodingCombo.setEnabled(true); - } else { - defaultEncoding.setSelection(true); - otherEncodingCombo.setEnabled(false); - } - } - }); - - if (repository != null) { - try { - String repositoryEncoding = repository.getCharacterEncoding(); - if (repositoryEncoding != null) {// && - // !repositoryEncoding.equals(defaultEncoding)) - // { - if (otherEncodingCombo.getItemCount() > 0 - && otherEncodingCombo.indexOf(repositoryEncoding) > -1) { - otherEncodingCombo.setEnabled(true); - otherEncoding.setSelection(true); - defaultEncoding.setSelection(false); - otherEncodingCombo.select(otherEncodingCombo.indexOf(repositoryEncoding)); - } else { - setDefaultEncoding(); - } - } - } catch (Throwable t) { - MylarStatusHandler.fail(t, "could not set field value for: " + repository, false); - } - } - } - - validateServerButton = new Button(container, SWT.PUSH); - GridDataFactory.swtDefaults().span(2, SWT.DEFAULT).grab(false, false).applyTo(validateServerButton); - validateServerButton.setText("Validate Settings"); - validateServerButton.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent e) { - validateSettings(); - } - }); - - setControl(container); - } - - private void setDefaultEncoding() { - defaultEncoding.setSelection(true); - otherEncodingCombo.setEnabled(false); - if (otherEncodingCombo.getItemCount() > 0) { - otherEncodingCombo.select(0); - } - } - - public void setAnonymous(boolean selected) { - if (!needsAnonymousLogin) { - return; - } - - anonymousButton.setSelection(selected); - - if (selected) { - oldUsername = userNameEditor.getStringValue(); - oldPassword = ((StringFieldEditor) passwordEditor).getStringValue(); - userNameEditor.setStringValue(null); - ((StringFieldEditor) passwordEditor).setStringValue(null); - } else { - userNameEditor.setStringValue(oldUsername); - ((StringFieldEditor) passwordEditor).setStringValue(oldPassword); - } - - userNameEditor.setEnabled(!selected, container); - ((StringFieldEditor) passwordEditor).setEnabled(!selected, container); - } - - protected abstract void createAdditionalControls(Composite parent); - - protected abstract void validateSettings(); - - protected abstract boolean isValidUrl(String name); - - /* Public for testing. */ - public static String stripSlashes(String url) { - StringBuilder sb = new StringBuilder(url.trim()); - while (sb.length() > 0 && sb.charAt(sb.length() - 1) == '/') { - sb.deleteCharAt(sb.length() - 1); - } - return sb.toString(); - } - - public String getRepositoryLabel() { - return repositoryLabelEditor.getStringValue(); - } - - public String getServerUrl() { - return stripSlashes(serverUrlCombo.getText()); - } - - public String getUserName() { - return userNameEditor.getStringValue(); - } - - public String getPassword() { - return passwordEditor.getStringValue(); - } - - public void init(IWorkbench workbench) { - // ignore - } - - public boolean isAnonymousAccess() { - return "".equals(getUserName()) && "".equals(getPassword()); - } - - /** - * Exposes StringFieldEditor.refreshValidState() - * - * TODO: is there a better way? - */ - private static class RepositoryStringFieldEditor extends StringFieldEditor { - public RepositoryStringFieldEditor(String name, String labelText, int style, Composite parent) { - super(name, labelText, style, parent); - } - - @Override - public void refreshValidState() { - try { - super.refreshValidState(); - } catch (Exception e) { - MylarStatusHandler.log(e, "problem refreshing password field"); - } - } - - @Override - public Text getTextControl() { - return super.getTextControl(); - } - - } - - @Override - public boolean isPageComplete() { - String url = getServerUrl(); - return isUniqueUrl(url) && isValidUrl(url); - } - - protected boolean isUniqueUrl(String urlString) { - if (!urlString.equals(originalUrl)) { - if (repositoryUrls == null) { - List<TaskRepository> repositories = TasksUiPlugin.getRepositoryManager().getAllRepositories(); - repositoryUrls = new HashSet<String>(repositories.size()); - for (TaskRepository repository : repositories) { - repositoryUrls.add(repository.getUrl()); - } - } - - if (repositoryUrls.contains(urlString)) { - setErrorMessage("Repository already exists."); - return false; - } - } - setErrorMessage(null); - return true; - } - - public void setRepository(TaskRepository repository) { - this.repository = repository; - } - - public void setVersion(String previousVersion) { - if (previousVersion == null) { - serverVersion = TaskRepository.NO_VERSION_SPECIFIED; - } else { - serverVersion = previousVersion; - } - } - - public String getVersion() { - return serverVersion; - } - - public TaskRepository getRepository() { - return repository; - } - - public String getCharacterEncoding() { - if (defaultEncoding == null) { - return null; - } - - if (defaultEncoding.getSelection()) { - return TaskRepository.DEFAULT_CHARACTER_ENCODING; - } else { - if (otherEncodingCombo.getSelectionIndex() > -1) { - return otherEncodingCombo.getItem(otherEncodingCombo.getSelectionIndex()); - } else { - return TaskRepository.DEFAULT_CHARACTER_ENCODING; - } - } - } - - // public String getTimeZoneId() { - // return (timeZonesCombo != null) ? - // timeZonesCombo.getItem(timeZonesCombo.getSelectionIndex()) : null; - // } - - public TaskRepository createTaskRepository() { - // TaskRepository repository = new - // TaskRepository(connector.getRepositoryType(), getServerUrl(), - // getVersion(), - // getCharacterEncoding(), getTimeZoneId()); - - TaskRepository repository = new TaskRepository(connector.getRepositoryType(), getServerUrl(), getVersion(), - getCharacterEncoding(), ""); - repository.setRepositoryLabel(getRepositoryLabel()); - repository.setAuthenticationCredentials(getUserName(), getPassword()); - updateProperties(repository); - return repository; - } - - public AbstractRepositoryConnector getConnector() { - return connector; - } - - public boolean needsEncoding() { - return needsEncoding; - } - - public boolean needsTimeZone() { - return needsTimeZone; - } - - public boolean needsAnonymousLogin() { - return needsAnonymousLogin; - } - - public void setNeedsEncoding(boolean needsEncoding) { - this.needsEncoding = needsEncoding; - } - - public void setNeedsTimeZone(boolean needsTimeZone) { - this.needsTimeZone = needsTimeZone; - } - - public void setNeedsAnonymousLogin(boolean needsAnonymousLogin) { - this.needsAnonymousLogin = needsAnonymousLogin; - } - - public void updateProperties(TaskRepository repository) { - // none - } - - /** for testing */ - public void setUrl(String url) { - serverUrlCombo.setText(url); - } - - /** for testing */ - public void setUserId(String id) { - userNameEditor.setStringValue(id); - } - - /** for testing */ - public void setPassword(String pass) { - passwordEditor.setStringValue(pass); - } - -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/AddExistingTaskWizard.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/AddExistingTaskWizard.java deleted file mode 100644 index 294f005a7..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/AddExistingTaskWizard.java +++ /dev/null @@ -1,49 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.IWizard; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.TaskRepositoryFilter; -import org.eclipse.mylar.tasks.ui.AbstractRepositoryConnectorUi; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Mik Kersten - * @author Brock Janiczak - * @author Eugene Kuleshov - * @author Steffen Pingel - */ -public class AddExistingTaskWizard extends MultiRepositoryAwareWizard { - - public static final String TITLE = "Add Existing Repository Task"; - - public AddExistingTaskWizard(IStructuredSelection selection) { - super(new SelectRepositoryPageForAddExistingTask(TaskRepositoryFilter.CAN_CREATE_TASK_FROM_KEY).setSelection(selection), TITLE); - } - - private static final class SelectRepositoryPageForAddExistingTask extends SelectRepositoryPage { - - public SelectRepositoryPageForAddExistingTask(TaskRepositoryFilter filter) { - super(filter); - } - - @Override - protected IWizard createWizard(TaskRepository taskRepository) { - AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getRepositoryUi( - taskRepository.getKind()); - return connectorUi.getAddExistingTaskWizard(taskRepository); - } - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/CommonAddExistingTaskWizard.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/CommonAddExistingTaskWizard.java deleted file mode 100644 index 6fc772583..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/CommonAddExistingTaskWizard.java +++ /dev/null @@ -1,125 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.TaskCategory; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.IWorkbench; - -/** - * @author Brock Janiczak - * @author Mik Kersten - */ -public class CommonAddExistingTaskWizard extends Wizard { - - private final TaskRepository repository; - - private ExistingTaskWizardPage page; - - private ITask newTask = null; - - public CommonAddExistingTaskWizard(TaskRepository repository) { - this.repository = repository; - setNeedsProgressMonitor(true); - setWindowTitle(AddExistingTaskWizard.TITLE); - init(); - } - - @Override - public final boolean performFinish() { - final AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager().getRepositoryConnector( - this.repository.getKind()); - - final String taskId = getTaskId(); - - try { - getContainer().run(true, false, new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - monitor.beginTask("Retrieving task...", IProgressMonitor.UNKNOWN); - try { - newTask = connector.createTaskFromExistingKey(repository, taskId, null); - if (newTask instanceof AbstractRepositoryTask) { - TasksUiPlugin.getSynchronizationManager().synchronize(connector, (AbstractRepositoryTask)newTask, true, null); - } - } catch (Exception e) { - throw new InvocationTargetException(e); - } finally { - monitor.done(); - } - } - }); - } catch (InvocationTargetException e) { - String message = e.getCause() != null ? e.getCause().getMessage() : "None provided"; - MessageDialog.openWarning(this.getShell(), "Add Existing Task Failed", - "Unable to retrieve existing task from repository, error was: \n\n" + message); - return false; - } catch (InterruptedException e) { - // cancelled - return true; - } - - if (newTask != null && TaskListView.getFromActivePerspective() != null) { - Object selectedObject = ((IStructuredSelection) TaskListView.getFromActivePerspective().getViewer() - .getSelection()).getFirstElement(); - - if (selectedObject instanceof TaskCategory) { - TasksUiPlugin.getTaskListManager().getTaskList().moveToContainer(((TaskCategory) selectedObject), - newTask); - } else { - TasksUiPlugin.getTaskListManager().getTaskList().moveToRoot(newTask); - } - if (TaskListView.getFromActivePerspective() != null) { - TaskListView.getFromActivePerspective().getViewer().setSelection(new StructuredSelection(newTask)); - } - TaskUiUtil.openEditor(newTask, false); - } else { - // TODO: createTaskFromExistingKey needs to throw exceptions so that - // we can provide the correct error handling in - // the try catch above. - MessageDialog.openWarning(this.getShell(), "Add Existing Task Failed", - "Unable to retrieve task from repository."); - } - - return true; - } - - public void init(IWorkbench workbench, IStructuredSelection selection) { - } - - private void init() { - super.setForcePreviousAndNextButtons(true); - } - - public void addPages() { - super.addPages(); - this.page = new ExistingTaskWizardPage(); - addPage(page); - } - - protected String getTaskId() { - return page.getTaskId(); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/ContextAttachWizard.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/ContextAttachWizard.java deleted file mode 100644 index b7338f125..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/ContextAttachWizard.java +++ /dev/null @@ -1,87 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jface.action.IStatusLineManager; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.IViewSite; -import org.eclipse.ui.IWorkbenchSite; -import org.eclipse.ui.PlatformUI; - -/** - * @author Rob Elves - * @author Steffen Pingel - */ -public class ContextAttachWizard extends Wizard { - - public static final String WIZARD_TITLE = "Attach context"; - - private final TaskRepository repository; - - private final AbstractRepositoryTask task; - - private ContextAttachWizardPage wizardPage; - - public ContextAttachWizard(AbstractRepositoryTask task) { - repository = TasksUiPlugin.getRepositoryManager().getRepository(task.getRepositoryKind(), - task.getRepositoryUrl()); - this.task = task; - setWindowTitle(ContextRetrieveWizard.TITLE); - setDefaultPageImageDescriptor(TaskListImages.BANNER_REPOSITORY_CONTEXT); - } - - @Override - public void addPages() { - wizardPage = new ContextAttachWizardPage(repository, task); - addPage(wizardPage); - super.addPages(); - } - - @Override - public final boolean performFinish() { - - AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager().getRepositoryConnector( - this.repository.getKind()); - - try { - if (!connector.attachContext(repository, task, wizardPage.getComment(), TasksUiPlugin.getDefault().getProxySettings())) { - MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), - TasksUiPlugin.TITLE_DIALOG, AbstractRepositoryConnector.MESSAGE_ATTACHMENTS_NOT_SUPPORTED + connector.getLabel()); - } else { - IWorkbenchSite site = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart().getSite(); - if (site instanceof IViewSite) { - IStatusLineManager statusLineManager = ((IViewSite)site).getActionBars().getStatusLineManager(); - statusLineManager.setMessage(TaskListImages.getImage(TaskListImages.TASKLIST), - "Context attached to task: " + task.getDescription()); - TasksUiPlugin.getSynchronizationManager().synchronize(connector, task, true, null); - } - } - } catch (final CoreException e) { - String message = e.getStatus().getMessage() != null ? e.getStatus().getMessage() : ""; - MessageDialog.openError(null, TasksUiPlugin.TITLE_DIALOG, "Attachment of task context FAILED. \n\n"+message); - MylarStatusHandler.log(e.getStatus()); - //ErrorDialog.openError(null, TasksUiPlugin.TITLE_DIALOG, "Attachment of task context FAILED.", e.getStatus()); - return false; - } - - return true; - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/ContextAttachWizardPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/ContextAttachWizardPage.java deleted file mode 100644 index 6b765dab7..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/ContextAttachWizardPage.java +++ /dev/null @@ -1,90 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask.RepositoryTaskSyncState; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.KeyEvent; -import org.eclipse.swt.events.KeyListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Text; - -/** - * @author Rob Elves - */ -public class ContextAttachWizardPage extends WizardPage { - - private static final String DESCRIPTION = "Attaches local context to repository task"; - - private TaskRepository repository; - - private AbstractRepositoryTask task; - - private Text commentText; - - private boolean complete = true; - - protected ContextAttachWizardPage(TaskRepository repository, AbstractRepositoryTask task) { - super(ContextAttachWizard.WIZARD_TITLE); - this.repository = repository; - this.task = task; - setDescription(DESCRIPTION); - } - - public void createControl(Composite parent) { - Composite composite = new Composite(parent, SWT.NONE); - composite.setLayout(new GridLayout()); - - new Label(composite, SWT.NONE).setText("Task: " + task.getDescription()); - new Label(composite, SWT.NONE).setText("Repository: " + repository.getUrl()); - new Label(composite, SWT.NONE).setText("Comment: "); - commentText = new Text(composite, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.WRAP); - commentText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - - commentText.addKeyListener(new KeyListener() { - public void keyPressed(KeyEvent e) { - getWizard().getContainer().updateButtons(); - } - - public void keyReleased(KeyEvent e) { - getWizard().getContainer().updateButtons(); - } - }); - - setControl(composite); - - if(task.getSyncState() != RepositoryTaskSyncState.SYNCHRONIZED) { - setErrorMessage("Task must be synchronized before attaching context"); - complete = false; - getWizard().getContainer().updateButtons(); - } - } - - public String getComment() { - return commentText.getText(); - } - - @Override - public boolean isPageComplete() { - return complete; -// if (commentText.getText().equals("")) -// return false; -// return super.isPageComplete(); - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/ContextRetrieveWizard.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/ContextRetrieveWizard.java deleted file mode 100644 index 6c3323e85..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/ContextRetrieveWizard.java +++ /dev/null @@ -1,92 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.RepositoryAttachment; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.PlatformUI; - -/** - * @author Rob Elves - * @author Mik Kersten - * @author Steffen Pingel - */ -public class ContextRetrieveWizard extends Wizard { - - public static final String TITLE = "Task Repository"; - - public static final String WIZARD_TITLE = "Retrieve context"; - - private final TaskRepository repository; - - private final AbstractRepositoryTask task; - - private ContextRetrieveWizardPage wizardPage; - - public ContextRetrieveWizard(AbstractRepositoryTask task) { - repository = TasksUiPlugin.getRepositoryManager().getRepository(task.getRepositoryKind(), - task.getRepositoryUrl()); - this.task = task; - setWindowTitle(TITLE); - setDefaultPageImageDescriptor(TaskListImages.BANNER_REPOSITORY_CONTEXT); - } - - @Override - public void addPages() { - wizardPage = new ContextRetrieveWizardPage(repository, task); - addPage(wizardPage); - super.addPages(); - } - - @Override - public final boolean performFinish() { - - RepositoryAttachment delegate = wizardPage.getSelectedContext(); - AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager().getRepositoryConnector( - this.repository.getKind()); - try { - boolean wasActive = false; - if (task.isActive()) { - wasActive = true; - TasksUiPlugin.getTaskListManager().deactivateTask(task); - } - try { - if (!connector.retrieveContext(repository, task, delegate, TasksUiPlugin.getDefault().getProxySettings(), TasksUiPlugin.getDefault().getDataDirectory())) { - MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), - TasksUiPlugin.TITLE_DIALOG, AbstractRepositoryConnector.MESSAGE_ATTACHMENTS_NOT_SUPPORTED - + connector.getLabel()); - } else { - TasksUiPlugin.getTaskListManager().getTaskList().notifyLocalInfoChanged(task); - } - } finally { - if (wasActive) { - TasksUiPlugin.getTaskListManager().activateTask(task); - } - } - } catch (CoreException e) { - ErrorDialog.openError(null, TasksUiPlugin.TITLE_DIALOG, "Retrieval of task context FAILED.", e.getStatus()); - MylarStatusHandler.log(e.getStatus()); - return false; - } - return true; - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/ContextRetrieveWizardPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/ContextRetrieveWizardPage.java deleted file mode 100644 index aa161f9ad..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/ContextRetrieveWizardPage.java +++ /dev/null @@ -1,154 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.Date; -import java.util.List; - -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.IOfflineTaskHandler; -import org.eclipse.mylar.tasks.core.RepositoryAttachment; -import org.eclipse.mylar.tasks.core.RepositoryTaskAttribute; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.swt.widgets.TableItem; - -/** - * @author Rob Elves - * @author Mik Kersten - */ -public class ContextRetrieveWizardPage extends WizardPage { - - private static final String DESCRIPTION = "Loads context from repository task into the workspace"; - - private static final String COLUMN_COMMENT = "Comment"; - - private static final String COLUMN_AUTHOR = "Author"; - - private static final String COLUMN_DATE = "Date"; - - private TaskRepository repository; - - private AbstractRepositoryTask task; - - private RepositoryAttachment selectedContextAttachment = null; - - protected ContextRetrieveWizardPage(TaskRepository repository, AbstractRepositoryTask task) { - super(ContextAttachWizard.WIZARD_TITLE); - this.repository = repository; - this.task = task; - setDescription(DESCRIPTION); - } - - public void createControl(Composite parent) { - Composite composite = new Composite(parent, SWT.NONE); - composite.setLayout(new GridLayout(1, false)); - - new Label(composite, SWT.NONE).setText("Task: " + task.getDescription()); - new Label(composite, SWT.NONE).setText("Repository: " + repository.getUrl()); - new Label(composite, SWT.NONE).setText("Select context below:"); - - final Table contextTable = new Table(composite, SWT.FULL_SELECTION | SWT.BORDER); - contextTable.setHeaderVisible(true); - contextTable.setLinesVisible(true); - contextTable.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent event) { - if (contextTable.getSelectionIndex() > -1) { - selectedContextAttachment = (RepositoryAttachment) contextTable.getItem( - contextTable.getSelectionIndex()).getData(); - getWizard().getContainer().updateButtons(); - } - } - }); - - AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager().getRepositoryConnector( - repository.getKind()); - - List<RepositoryAttachment> contextAttachments = new ArrayList<RepositoryAttachment>(connector - .getContextAttachments(repository, task)); - - final IOfflineTaskHandler offlineHandler = connector.getOfflineTaskHandler(); - if (offlineHandler != null) { - Collections.sort(contextAttachments, new Comparator<RepositoryAttachment>() { - - public int compare(RepositoryAttachment attachment1, RepositoryAttachment attachment2) { - Date created1 = offlineHandler.getDateForAttributeType(RepositoryTaskAttribute.ATTACHMENT_DATE, - attachment1.getDateCreated()); - Date created2 = offlineHandler.getDateForAttributeType(RepositoryTaskAttribute.ATTACHMENT_DATE, - attachment2.getDateCreated()); - if (created1 != null && created2 != null) { - return created1.compareTo(created2); - } else if (created1 == null && created2 != null) { - return -1; - } else if (created1 != null && created2 == null) { - return 1; - } else { - return 0; - } - } - - }); - } - TableColumn[] columns = new TableColumn[3]; - - columns[0] = new TableColumn(contextTable, SWT.LEFT); - columns[0].setText(COLUMN_DATE); - - columns[1] = new TableColumn(contextTable, SWT.LEFT); - columns[1].setText(COLUMN_AUTHOR); - - columns[2] = new TableColumn(contextTable, SWT.CENTER); - columns[2].setText(COLUMN_COMMENT); - - for (RepositoryAttachment attachment : contextAttachments) { - TableItem item = new TableItem(contextTable, SWT.NONE); - item.setText(0, attachment.getDateCreated()); - item.setText(1, attachment.getCreator()); - item.setText(2, attachment.getDescription()); - item.setData(attachment); - } - - for (int i = 0, n = columns.length; i < n; i++) { - columns[i].pack(); - } - - contextTable.setLayoutData(new GridData(GridData.FILL_BOTH)); - - setControl(composite); - } - - public RepositoryAttachment getSelectedContext() { - return selectedContextAttachment; - } - - @Override - public boolean isPageComplete() { - if (selectedContextAttachment == null) - return false; - return super.isPageComplete(); - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/EditRepositoryWizard.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/EditRepositoryWizard.java deleted file mode 100644 index 174ee642f..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/EditRepositoryWizard.java +++ /dev/null @@ -1,93 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.AbstractRepositoryConnectorUi; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.INewWizard; -import org.eclipse.ui.IWorkbench; - -/** - * @author Mik Kersten - */ -public class EditRepositoryWizard extends Wizard implements INewWizard { - - private static final String TITLE = "Task Repository Settings"; - - private AbstractRepositorySettingsPage abstractRepositorySettingsPage; - - private TaskRepository repository; - - public EditRepositoryWizard(TaskRepository repository) { - super(); - this.repository = repository; - AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getRepositoryUi( - repository.getKind()); - abstractRepositorySettingsPage = connectorUi.getSettingsPage(); - abstractRepositorySettingsPage.setRepository(repository); - abstractRepositorySettingsPage.setVersion(repository.getVersion()); - abstractRepositorySettingsPage.setWizard(this); - setNeedsProgressMonitor(true); - setDefaultPageImageDescriptor(TaskListImages.BANNER_REPOSITORY); - setWindowTitle(TITLE); - } - - /** - * Custom properties should be set on the repository object to ensure they are saved. - */ - @Override - public boolean performFinish() { - if (canFinish()) { - String oldUrl = repository.getUrl(); - String newUrl = abstractRepositorySettingsPage.getServerUrl(); - TasksUiPlugin.getTaskListManager().refactorRepositoryUrl(oldUrl, newUrl); - - repository.flushAuthenticationCredentials(); - repository.setUrl(newUrl); - repository.setVersion(abstractRepositorySettingsPage.getVersion()); - repository.setCharacterEncoding(abstractRepositorySettingsPage.getCharacterEncoding()); - repository.setAuthenticationCredentials(abstractRepositorySettingsPage.getUserName(), abstractRepositorySettingsPage.getPassword()); - repository.setRepositoryLabel(abstractRepositorySettingsPage.getRepositoryLabel()); - abstractRepositorySettingsPage.updateProperties(repository); - TasksUiPlugin.getRepositoryManager().notifyRepositorySettingsChagned(repository); - TasksUiPlugin.getRepositoryManager().saveRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - return true; - } - return false; - } - - public void init(IWorkbench workbench, IStructuredSelection selection) { - } - - @Override - public void addPages() { - addPage(abstractRepositorySettingsPage); - } - - @Override - public boolean canFinish() { - return abstractRepositorySettingsPage.isPageComplete(); - } - - /** public for testing */ - public AbstractRepositorySettingsPage getSettingsPage() { - return abstractRepositorySettingsPage; - } - - public TaskRepository getRepository() { - return repository; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/ExistingTaskWizardPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/ExistingTaskWizardPage.java deleted file mode 100644 index 33f2d2520..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/ExistingTaskWizardPage.java +++ /dev/null @@ -1,81 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Text; - -/** - * @author Mik Kersten - */ -public class ExistingTaskWizardPage extends WizardPage { - - private static final String TITLE = "Enter Task ID"; - - private static final String DESCRIPTION = "Provide the identifier for the task, issue, or bug report.\n" - + "The format is specific to the repository."; - - private Text taskIdText; - - public ExistingTaskWizardPage() { - super(TITLE); - setTitle(TITLE); - setDescription(DESCRIPTION); - setImageDescriptor(TaskListImages.BANNER_REPOSITORY); - } - - public void createControl(Composite parent) { - Composite container = new Composite(parent, SWT.NULL); - GridLayout layout = new GridLayout(); - container.setLayout(layout); - layout.numColumns = 2; - - GridData gd = new GridData(); - gd.widthHint = 200; - - Label label = new Label(container, SWT.NULL); - label.setText("Enter Key/ID: "); - taskIdText = new Text(container, SWT.BORDER); - taskIdText.setLayoutData(gd); - taskIdText.setFocus(); - taskIdText.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - getWizard().getContainer().updateButtons(); - // try { - // numDaysToReport = Integer.parseInt(taskId.getText()); - // setErrorMessage(null); - // } catch (Exception ex) { - // setErrorMessage("Must be integer"); - // numDaysToReport = 0; - // } - } - }); - - setControl(container); - } - - public boolean isPageComplete() { - return getTaskId() != null && !getTaskId().trim().equals(""); - } - - public String getTaskId() { - return taskIdText.getText(); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/InputAttachmentSourcePage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/InputAttachmentSourcePage.java deleted file mode 100644 index ef606b344..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/InputAttachmentSourcePage.java +++ /dev/null @@ -1,600 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * Sebastian Davids <sdavids@gmx.de> - layout tweaks - * Jeff Pound <jeff.bagu@gmail.com> - modified for attachment input - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import java.io.File; -import java.util.ArrayList; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IFolder; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.resources.mapping.ResourceMapping; -import org.eclipse.core.resources.mapping.ResourceMappingContext; -import org.eclipse.core.resources.mapping.ResourceTraversal; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.jface.viewers.TreeSelection; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.jface.wizard.IWizardPage; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.swt.SWT; -import org.eclipse.swt.dnd.Clipboard; -import org.eclipse.swt.dnd.TextTransfer; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.ShellAdapter; -import org.eclipse.swt.events.ShellEvent; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.FileDialog; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.model.WorkbenchContentProvider; -import org.eclipse.ui.model.WorkbenchLabelProvider; -import org.eclipse.ui.views.navigator.ResourceSorter; - -/** - * A wizard to input the source of the attachment. This is a modified version of - * org.eclipse.compare.internal.InputPatchPage. - * - * @author Jeff Pound - */ -public class InputAttachmentSourcePage extends WizardPage { - - // constants - protected static final int SIZING_TEXT_FIELD_WIDTH = 250; - - protected static final int COMBO_HISTORY_LENGTH = 5; - - public static final String CLIPBOARD_LABEL = "<Clipboard>"; - - // input constants - protected final static int CLIPBOARD = 1; - - protected final static int FILE = 2; - - protected final static int WORKSPACE = 3; - - static final char SEPARATOR = System.getProperty("file.separator").charAt(0); //$NON-NLS-1$ - - private boolean showError = false; - - private ActivationListener activationListener = new ActivationListener(); - - // SWT widgets - private Button useClipboardButton; - - private Combo fileNameField; - - private Button fileBrowseButton; - - private Button useFileButton; - - private Button useWorkspaceButton; - - private Label workspaceSelectLabel; - - private TreeViewer treeViewer; - - private NewAttachmentWizard wizard; - - private String clipboardContents; - - private boolean initUseClipboard = false; - - class ActivationListener extends ShellAdapter { - public void shellActivated(ShellEvent e) { - // allow error messages if the selected input actually has something - // selected in it - showError = true; - switch (getInputMethod()) { - case FILE: - showError = (fileNameField.getText() != ""); //$NON-NLS-1$ - break; - - case WORKSPACE: - showError = (!treeViewer.getSelection().isEmpty()); - break; - } - updateWidgetEnablements(); - } - } - - public InputAttachmentSourcePage(NewAttachmentWizard wizard) { - super("InputAttachmentPage"); - this.wizard = wizard; - setTitle("Select source"); - setDescription("Clipboard contents are for text attachments only."); - // setMessage("Please select the source for the attachment"); - } - - /* - * Get a path from the supplied text widget. @return - * org.eclipse.core.runtime.IPath - */ - protected IPath getPathFromText(Text textField) { - return (new Path(textField.getText())).makeAbsolute(); - } - - public String getAttachmentName() { - if (getInputMethod() == CLIPBOARD) { - return CLIPBOARD_LABEL; - } else if (getInputMethod() == WORKSPACE) { - return getResources(treeViewer.getSelection())[0].getFullPath().toOSString(); - } - return getAttachmentFilePath(); - } - - public void createControl(Composite parent) { - - Composite composite = new Composite(parent, SWT.NULL); - composite.setLayout(new GridLayout()); - GridData gd = new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL); - gd.heightHint = 800; - composite.setLayoutData(gd); - setControl(composite); - - initializeDialogUnits(parent); - - buildAttachmentFileGroup(composite); - - // No error for dialog opening - showError = false; - clearErrorMessage(); - updateWidgetEnablements(); - - Shell shell = getShell(); - shell.addShellListener(activationListener); - - Dialog.applyDialogFont(composite); - - } - - public IWizardPage getNextPage() { - return wizard.getNextPage(this); - } - - /* - * (non-JavaDoc) Method declared in IWizardPage. - */ - public boolean canFlipToNextPage() { - return isPageComplete(); - } - - private void setEnableAttachmentFile(boolean enable) { - fileNameField.setEnabled(enable); - fileBrowseButton.setEnabled(enable); - } - - private void setEnableWorkspaceAttachment(boolean enable) { - workspaceSelectLabel.setEnabled(enable); - treeViewer.getTree().setEnabled(enable); - } - - /* - * Create the group for selecting the attachment file - */ - private void buildAttachmentFileGroup(Composite parent) { - - final Composite composite = new Composite(parent, SWT.NULL); - GridLayout gridLayout = new GridLayout(); - gridLayout.numColumns = 3; - composite.setLayout(gridLayout); - composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - // 1st row - GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); - gd.horizontalSpan = 3; - useClipboardButton = new Button(composite, SWT.RADIO); - useClipboardButton.setText("Clipboard"); - useClipboardButton.setLayoutData(gd); - useClipboardButton.setSelection(initUseClipboard); - - // 2nd row - useFileButton = new Button(composite, SWT.RADIO); - useFileButton.setText("File"); - - fileNameField = new Combo(composite, SWT.BORDER); - gd = new GridData(GridData.FILL_HORIZONTAL); - gd.widthHint = SIZING_TEXT_FIELD_WIDTH; - fileNameField.setLayoutData(gd); - fileNameField.setText(wizard.getAttachment().getFilePath()); - - fileBrowseButton = new Button(composite, SWT.PUSH); - fileBrowseButton.setText("Browse..."); - GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); - int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); - Point minSize = fileBrowseButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true); - data.widthHint = Math.max(widthHint, minSize.x); - fileBrowseButton.setLayoutData(data); - - // 3rd row - useWorkspaceButton = new Button(composite, SWT.RADIO); - useWorkspaceButton.setText("Workspace"); - gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); - useWorkspaceButton.setLayoutData(gd); - - addWorkspaceControls(parent); - - // Add listeners - useClipboardButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - if (!useClipboardButton.getSelection()) - return; - - clearErrorMessage(); - showError = true; - int state = getInputMethod(); - setEnableAttachmentFile(state == FILE); - setEnableWorkspaceAttachment(state == WORKSPACE); - storeClipboardContents(); - updateWidgetEnablements(); - } - }); - - useFileButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - if (!useFileButton.getSelection()) - return; - // If there is anything typed in at all - clearErrorMessage(); - showError = (fileNameField.getText() != ""); //$NON-NLS-1$ - int state = getInputMethod(); - setEnableAttachmentFile(state == FILE); - setEnableWorkspaceAttachment(state == WORKSPACE); - updateWidgetEnablements(); - } - }); - fileNameField.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - setSourceName(fileNameField.getText()); - updateWidgetEnablements(); - } - }); - fileNameField.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - clearErrorMessage(); - showError = true; - updateWidgetEnablements(); - } - }); - fileBrowseButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - clearErrorMessage(); - showError = true; - /* Launch Browser */ - FileDialog fileChooser = new FileDialog(composite.getShell(), SWT.OPEN); - String file = fileChooser.open(); - - // Check if the dialog was canceled or an error occured - if (file == null) { - return; - } - // update UI - fileNameField.setText(file); - updateWidgetEnablements(); - } - }); - useWorkspaceButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - if (!useWorkspaceButton.getSelection()) - return; - clearErrorMessage(); - // If there is anything typed in at all - showError = (!treeViewer.getSelection().isEmpty()); - int state = getInputMethod(); - setEnableAttachmentFile(state == FILE); - setEnableWorkspaceAttachment(state == WORKSPACE); - updateWidgetEnablements(); - } - }); - - treeViewer.addSelectionChangedListener(new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent event) { - clearErrorMessage(); - updateWidgetEnablements(); - } - }); - - treeViewer.addDoubleClickListener(new IDoubleClickListener() { - public void doubleClick(DoubleClickEvent event) { - ISelection selection = event.getSelection(); - if (selection instanceof TreeSelection) { - TreeSelection treeSel = (TreeSelection) selection; - Object res = treeSel.getFirstElement(); - if (res != null) { - if (res instanceof IProject || res instanceof IFolder) { - if (treeViewer.getExpandedState(res)) { - treeViewer.collapseToLevel(res, 1); - } else { - treeViewer.expandToLevel(res, 1); - } - } else if (res instanceof IFile) { - wizard.showPage(getNextPage()); - } - } - } - } - }); - - useFileButton.setSelection(!initUseClipboard); - setEnableWorkspaceAttachment(false); - } - - private void addWorkspaceControls(Composite composite) { - - Composite newComp = new Composite(composite, SWT.NONE); - GridLayout layout = new GridLayout(1, false); - layout.marginLeft = 16; // align w/ lable of check button - newComp.setLayout(layout); - newComp.setLayoutData(new GridData(GridData.FILL_BOTH)); - - workspaceSelectLabel = new Label(newComp, SWT.LEFT); - workspaceSelectLabel.setText("Select the location of the attachment"); - - treeViewer = new TreeViewer(newComp, SWT.BORDER); - treeViewer.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - - treeViewer.setLabelProvider(new WorkbenchLabelProvider()); - treeViewer.setContentProvider(new WorkbenchContentProvider()); - treeViewer.setSorter(new ResourceSorter(ResourceSorter.NAME)); - treeViewer.setInput(ResourcesPlugin.getWorkspace().getRoot()); - } - - /** - * Updates the enable state of this page's controls. - */ - private void updateWidgetEnablements() { - - String error = null; - - boolean attachmentFound = false; - int inputMethod = getInputMethod(); - if (inputMethod == CLIPBOARD) { - Control c = getControl(); - if (c != null) { - Clipboard clipboard = new Clipboard(c.getDisplay()); - Object o = clipboard.getContents(TextTransfer.getInstance()); - clipboard.dispose(); - if (o instanceof String) { - String s = ((String) o).trim(); - if (s.length() > 0) - attachmentFound = true; - else - error = "Clipboard is empty"; - } else - error = "Clipboard does not contain text"; - } else - error = "Cannot retrieve clipboard contents"; - } else if (inputMethod == FILE) { - String path = fileNameField.getText(); - if (path != null && path.length() > 0) { - File file = new File(path); - attachmentFound = file.exists() && file.isFile() && file.length() > 0; - if (!attachmentFound) - error = "Cannot locate attachment file"; - } else { - error = "No file name"; - } - } else if (inputMethod == WORKSPACE) { - // Get the selected attachment file (tree will only allow for one - // selection) - IResource[] resources = getResources(treeViewer.getSelection()); - if (resources == null || resources.length <= 0) { - error = "No file name"; - } else { - IResource attachmentFile = resources[0]; - if (attachmentFile != null && attachmentFile.getType() == IResource.FILE) { - File actualFile = attachmentFile.getRawLocation().toFile(); - attachmentFound = actualFile.exists() && actualFile.isFile() && actualFile.length() > 0; - if (!attachmentFound) { - error = "Cannot locate attachment file"; - } - } - } - } - - setPageComplete(attachmentFound); - wizard.getAttachment().setFilePath(getAbsoluteAttachmentPath()); - - if (showError) { - setErrorMessage(error); - } - } - - /** - * Sets the source name of the import to be the supplied path. Adds the name - * of the path to the list of items in the source combo and selects it. - * - * @param path - * the path to be added - */ - protected void setSourceName(String path) { - - if (path.length() > 0) { - - String[] currentItems = fileNameField.getItems(); - int selectionIndex = -1; - for (int i = 0; i < currentItems.length; i++) - if (currentItems[i].equals(path)) - selectionIndex = i; - - if (selectionIndex < 0) { // not found in history - int oldLength = currentItems.length; - String[] newItems = new String[oldLength + 1]; - System.arraycopy(currentItems, 0, newItems, 0, oldLength); - newItems[oldLength] = path; - fileNameField.setItems(newItems); - selectionIndex = oldLength; - } - fileNameField.select(selectionIndex); - - // resetSelection(); - } - } - - // private String getWorkspacePath() { - // if (fTreeViewer ! = null){ - // IResource[] resources = getResources(fTreeViewer.getSelection()); - // if (resources.length > 0) { - // IResource patchFile = resources[0]; - // return patchFile.getFullPath().toString(); - // } - // - // } - // return ""; //$NON-NLS-1$ - // } - - /* - * Clears the dialog message box - */ - private void clearErrorMessage() { - setErrorMessage(null); - } - - protected int getInputMethod() { - if (useClipboardButton == null) { - if (initUseClipboard) { - return CLIPBOARD; - } - return FILE; - } - if (useClipboardButton.getSelection()) { - return CLIPBOARD; - } - if (useFileButton.getSelection()) { - return FILE; - } - return WORKSPACE; - } - - private String getAttachmentFilePath() { - if (fileNameField != null) { - return fileNameField.getText(); - } - return wizard.getAttachment().getFilePath(); - } - - public String getAbsoluteAttachmentPath() { - switch (getInputMethod()) { - case CLIPBOARD: - return CLIPBOARD_LABEL; - case WORKSPACE: - IResource[] resources = getResources(treeViewer.getSelection()); - if (resources.length > 0 && resources[0].getRawLocation() != null) { - return resources[0].getRawLocation().toOSString(); - } else { - return null; - } - case FILE: - default: - return getAttachmentFilePath(); - } - } - - /* - * Based on .eclipse.compare.internal.Utilities - * - * Convenience method: extract all accessible <code>IResources</code> from - * given selection. Never returns null. - */ - public static IResource[] getResources(ISelection selection) { - ArrayList<IResource> tmp = new ArrayList<IResource>(); - Class type = IResource.class; - if (selection instanceof IStructuredSelection) { - Object[] s = ((IStructuredSelection) selection).toArray(); - - for (int i = 0; i < s.length; i++) { - IResource resource = null; - Object o = s[i]; - if (type.isInstance(o)) { - resource = (IResource) o; - - } else if (o instanceof ResourceMapping) { - try { - ResourceTraversal[] travs = ((ResourceMapping) o).getTraversals( - ResourceMappingContext.LOCAL_CONTEXT, null); - if (travs != null) { - for (int k = 0; k < travs.length; k++) { - IResource[] resources = travs[k].getResources(); - for (int j = 0; j < resources.length; j++) { - if (type.isInstance(resources[j]) && resources[j].isAccessible()) - tmp.add(resources[j]); - } - } - } - } catch (CoreException ex) { - // TODO handle error - } - } else if (o instanceof IAdaptable) { - IAdaptable a = (IAdaptable) o; - Object adapter = a.getAdapter(IResource.class); - if (type.isInstance(adapter)) - resource = (IResource) adapter; - } - - if (resource != null && resource.isAccessible()) - tmp.add(resource); - } - } - - return (IResource[]) tmp.toArray(new IResource[tmp.size()]); - } - - private void storeClipboardContents() { - Control c = getControl(); - if (c != null) { - Clipboard clipboard = new Clipboard(c.getDisplay()); - Object o = clipboard.getContents(TextTransfer.getInstance()); - clipboard.dispose(); - if (o instanceof String) { - clipboardContents = ((String) o).trim(); - } - } - } - - public String getClipboardContents() { - return clipboardContents; - } - - public void setClipboardContents(String attachContents) { - clipboardContents = attachContents; - } - - public void setUseClipboard(boolean b) { - if (useClipboardButton != null) { - useClipboardButton.setSelection(b); - } - initUseClipboard = b; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewAttachmentPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewAttachmentPage.java deleted file mode 100644 index 4c37fa031..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewAttachmentPage.java +++ /dev/null @@ -1,270 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - -import org.eclipse.jface.wizard.IWizardPage; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.tasks.core.LocalAttachment; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Text; - -/** - * A wizard page to enter details of a new attachment. - * - * @author Jeff Pound - */ -public class NewAttachmentPage extends WizardPage { - - private LocalAttachment attachment; - - private Text filePath; - - private Text attachmentDesc; - - private Text attachmentComment; - - private Button isPatchButton; - - private Button attachContextButton; - - private static List<String> contentTypes; - - private static Map<String, String> extensions2Types; - - static { - /* For UI */ - contentTypes = new LinkedList<String>(); - contentTypes.add("text/plain"); - contentTypes.add("text/html"); - contentTypes.add("application/xml"); - contentTypes.add("image/gif"); - contentTypes.add("image/jpeg"); - contentTypes.add("image/png"); - contentTypes.add("application/octet-stream"); - - /* For auto-detect */ - extensions2Types = new HashMap<String, String>(); - extensions2Types.put("txt", "text/plain"); - extensions2Types.put("html", "text/html"); - extensions2Types.put("htm", "text/html"); - extensions2Types.put("jpg", "image/jpeg"); - extensions2Types.put("jpeg", "image/jpeg"); - extensions2Types.put("gif", "image/gif"); - extensions2Types.put("png", "image/png"); - extensions2Types.put("xml", "application/xml"); - extensions2Types.put("zip", "application/octet-stream"); - extensions2Types.put("tar", "application/octet-stream"); - extensions2Types.put("gz", "application/octet-stream"); - } - - protected NewAttachmentPage(LocalAttachment att) { - super("AttachmentDetails"); - setTitle("Attachment Details"); - setMessage("Provide a description and verify the content type of the attachment."); - attachment = att; - } - - public void createControl(Composite parent) { - Composite composite = new Composite(parent, SWT.NONE); - GridLayout gridLayout = new GridLayout(); - gridLayout.numColumns = 3; - composite.setLayout(gridLayout); - setControl(composite); - - composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - composite.setLayout(new GridLayout(3, false)); - - final NewAttachmentPage thisPage = this; - - new Label(composite, SWT.NONE).setText("File"); - filePath = new Text(composite, SWT.BORDER); - filePath.setEditable(false); - filePath.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 2, 1)); - - new Label(composite, SWT.NONE).setText("Description"); - attachmentDesc = new Text(composite, SWT.BORDER); - attachmentDesc.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 2, 1)); - - attachmentDesc.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - if ("".equals(attachmentDesc.getText().trim())) { - thisPage.setErrorMessage("Description required"); - } else { - if (!"".equals(filePath.getText())) { - thisPage.setPageComplete(true); - thisPage.setErrorMessage(null); - } - } - } - - }); - - Label label = new Label(composite, SWT.NONE); - label.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, false)); - label.setText("Comment"); - attachmentComment = new Text(composite, SWT.V_SCROLL | SWT.BORDER | SWT.WRAP); - attachmentComment.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1)); - - new Label(composite, SWT.NONE).setText("Content Type");// .setBackground(parent.getBackground()); - - final Combo contentTypeList = new Combo(composite, SWT.BORDER | SWT.DROP_DOWN | SWT.READ_ONLY); - contentTypeList.setLayoutData(new GridData(SWT.DEFAULT, SWT.DEFAULT, false, false, 2, 1)); - final HashMap<String, Integer> contentTypeIndices = new HashMap<String, Integer>(); - Iterator<String> iter = contentTypes.iterator(); - int i = 0; - while (iter.hasNext()) { - String next = iter.next(); - contentTypeList.add(next); - contentTypeIndices.put(next, new Integer(i)); - i++; - } - - /* Update attachment on select content type */ - contentTypeList.addSelectionListener(new SelectionListener() { - public void widgetDefaultSelected(SelectionEvent e) { - // ignore - } - - public void widgetSelected(SelectionEvent e) { - attachment.setContentType(contentTypeList.getItem(contentTypeList.getSelectionIndex())); - } - }); - contentTypeList.select(0); - attachment.setContentType(contentTypeList.getItem(0)); - - // TODO: is there a better way to pad? - new Label(composite, SWT.NONE); - - isPatchButton = new Button(composite, SWT.CHECK); - isPatchButton.setLayoutData(new GridData(SWT.DEFAULT, SWT.DEFAULT, false, false, 2, 1)); - isPatchButton.setText("Patch"); - - // TODO: is there a better way to pad? - new Label(composite, SWT.NONE); - - attachContextButton = new Button(composite, SWT.CHECK); - attachContextButton.setLayoutData(new GridData(SWT.DEFAULT, SWT.DEFAULT, false, false, 2, 1)); - attachContextButton.setText("Attach Context"); - attachContextButton.setImage(TaskListImages.getImage(TaskListImages.CONTEXT_ATTACH)); - attachContextButton.setEnabled((((NewAttachmentWizard) getWizard()).hasContext())); - - /* - * Attachment file name listener, update the local attachment - * accordingly - */ - filePath.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - // Determine type by extension - int index = filePath.getText().lastIndexOf("."); - if (index > 0 && index < filePath.getText().length()) { - String ext = filePath.getText().substring(index + 1); - String type = extensions2Types.get(ext.toLowerCase()); - if (type != null) { - contentTypeList.select(contentTypeIndices.get(type)); - attachment.setContentType(type); - } - } - - // check page completenes - if ("".equals(attachmentDesc.getText())) { - thisPage.setErrorMessage("Description required"); - } else { - if (!"".equals(filePath.getText())) { - thisPage.setPageComplete(true); - thisPage.setErrorMessage(null); - } - } - } - }); - - filePath.setText(attachment.getFilePath()); - - /* Listener for isPatch */ - isPatchButton.addSelectionListener(new SelectionListener() { - private int lastSelected; - - public void widgetDefaultSelected(SelectionEvent e) { - // ignore - } - - public void widgetSelected(SelectionEvent e) { - attachment.setPatch(isPatchButton.getSelection()); - if (isPatchButton.getSelection()) { - lastSelected = contentTypeList.getSelectionIndex(); - contentTypeList.select(0); - contentTypeList.setEnabled(false); - if (attachContextButton.isEnabled()) { - attachContextButton.setSelection(true); - } - } else { - contentTypeList.setEnabled(true); - contentTypeList.select(lastSelected); - } - } - }); - } - - public boolean isPageComplete() { - return !"".equals(filePath.getText().trim()) && !"".equals(attachmentDesc.getText().trim()); - } - - public void populateAttachment() { - attachment.setDescription(attachmentDesc.getText()); - attachment.setComment(attachmentComment.getText()); - } - - public LocalAttachment getAttachment() { - return attachment; - } - - public boolean canFlipToNextPage() { - return isPageComplete(); - } - - public void setFilePath(String path) { - filePath.setText(path); - if (path.endsWith(".patch")) { - isPatchButton.setSelection(true); - if (attachContextButton.isEnabled()) { - attachContextButton.setSelection(true); - } - } - } - - public IWizardPage getNextPage() { - populateAttachment(); - PreviewAttachmentPage page = new PreviewAttachmentPage(getAttachment()); - page.setWizard(getWizard()); - return page; - } - - public boolean getAttachContext() { - return attachContextButton.getSelection(); - } -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewAttachmentWizard.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewAttachmentWizard.java deleted file mode 100644 index d5fef0e7f..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewAttachmentWizard.java +++ /dev/null @@ -1,250 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.IJobChangeEvent; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.core.runtime.jobs.JobChangeAdapter; -import org.eclipse.jface.dialogs.IDialogSettings; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.wizard.IWizardPage; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.mylar.context.core.ContextCorePlugin; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.internal.tasks.ui.util.WebBrowserDialog; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.IAttachmentHandler; -import org.eclipse.mylar.tasks.core.LocalAttachment; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask.RepositoryTaskSyncState; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.PlatformUI; - -/** - * A wizard to add a new attachment to a task report. - * - * @author Jeff Pound - */ -public class NewAttachmentWizard extends Wizard { - - private static final String DIALOG_SETTINGS_KEY = "AttachmentWizard"; - - private LocalAttachment attachment; - - private InputAttachmentSourcePage inputPage; - - private NewAttachmentPage attachPage; - - private NewAttachmentWizardDialog dialog; - - private boolean hasNewDialogSettings; - - private TaskRepository repository; - - private AbstractRepositoryTask task; - - public NewAttachmentWizard(TaskRepository repository, AbstractRepositoryTask task) { - super(); - this.task = task; - this.repository = repository; - setNeedsProgressMonitor(true); - setWindowTitle("Add Attachment"); - setDefaultPageImageDescriptor(TaskListImages.BANNER_REPOSITORY); - attachment = new LocalAttachment(); - attachment.setFilePath(""); - inputPage = new InputAttachmentSourcePage(this); - - IDialogSettings workbenchSettings = TasksUiPlugin.getDefault().getDialogSettings(); - IDialogSettings section = workbenchSettings.getSection(DIALOG_SETTINGS_KEY); - if (section == null) { - hasNewDialogSettings = true; - } else { - hasNewDialogSettings = false; - setDialogSettings(section); - } - } - - public NewAttachmentWizard(TaskRepository repository, AbstractRepositoryTask task, File attachFile) { - this(repository, task); - attachment.setFilePath(attachFile.getAbsolutePath()); - } - - public NewAttachmentWizard(TaskRepository repository, AbstractRepositoryTask task, String attachContents) { - this(repository, task); - inputPage.setUseClipboard(true); - inputPage.setClipboardContents(attachContents); - attachment.setFilePath(InputAttachmentSourcePage.CLIPBOARD_LABEL); - } - - @Override - public boolean performFinish() { - /* TODO jpound - support non-text in clipboard */ - attachPage.populateAttachment(); - String path = inputPage.getAbsoluteAttachmentPath(); - if (InputAttachmentSourcePage.CLIPBOARD_LABEL.equals(path)) { - // write temporary file - String contents = inputPage.getClipboardContents(); - if (contents == null) { - // TODO Handle error - } - - File file = new File(TasksUiPlugin.getDefault().getDefaultDataDirectory() - + System.getProperty("file.separator").charAt(0) + "Clipboard-attachment"); - try { - FileWriter writer = new FileWriter(file); - writer.write(contents); - writer.flush(); - writer.close(); - } catch (IOException e) { - // TODO Handle error - } - path = file.getAbsolutePath(); - attachment.setDeleteAfterUpload(true); - } - attachment.setFilePath(path); - - // Save the dialog settings - if (hasNewDialogSettings) { - IDialogSettings workbenchSettings = TasksUiPlugin.getDefault().getDialogSettings(); - IDialogSettings section = workbenchSettings.getSection(DIALOG_SETTINGS_KEY); - section = workbenchSettings.addNewSection(DIALOG_SETTINGS_KEY); - setDialogSettings(section); - } - - // upload the attachment - AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager().getRepositoryConnector( - repository.getKind()); - final IAttachmentHandler attachmentHandler = connector.getAttachmentHandler(); - if (attachmentHandler == null) { - return false; - } - final boolean attachContext = attachPage.getAttachContext(); - - Job submitJob = new Job("Submitting attachment") { - @Override - protected IStatus run(IProgressMonitor monitor) { - AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager() - .getRepositoryConnector(repository.getKind()); - try { - attachmentHandler.uploadAttachment(repository, task, attachment.getComment(), attachment - .getDescription(), new File(attachment.getFilePath()), attachment.getContentType(), - attachment.isPatch(), TasksUiPlugin.getDefault().getProxySettings()); - - if (attachment.getDeleteAfterUpload()) { - File file = new File(attachment.getFilePath()); - if (!file.delete()) { - // TODO: Handle bad clean up - } - } - - if (attachContext) { - connector.attachContext(repository, (AbstractRepositoryTask) task, "", TasksUiPlugin.getDefault().getProxySettings()); - // attachContext sets outgoing state but we want to recieve incoming - // on synchronization. This could result in lost edits so need to - // review the whole attachment interaction. - task.setSyncState(RepositoryTaskSyncState.SYNCHRONIZED); - } - - } catch (final CoreException e) { - if (e.getStatus().getCode() == Status.INFO) { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - WebBrowserDialog.openAcceptAgreement(null, "Upload Error", e.getStatus().getMessage(), - e.getStatus().getException().getMessage()); - } - }); - } else if (e.getStatus().getCode() == Status.ERROR) { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - MessageDialog.openError(null, "Upload Error", e.getStatus().getMessage()); - } - }); - } - } - - TasksUiPlugin.getSynchronizationManager().synchronize(connector, task, false, new JobChangeAdapter() { - public void done(final IJobChangeEvent event) { - if (event.getResult().getException() != null) { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - MessageDialog.openError(Display.getDefault().getActiveShell(), - TasksUiPlugin.TITLE_DIALOG, event.getResult().getMessage()); - } - }); - } - } - }); - return Status.OK_STATUS; - } - }; - - submitJob.schedule(); - return true; - } - - protected boolean hasContext() { - return ContextCorePlugin.getContextManager().hasContext(task.getHandleIdentifier()); - } - - @Override - public boolean canFinish() { - return attachPage.isPageComplete(); - } - - @Override - public void addPages() { - super.addPages(); - if ("".equals(attachment.getFilePath())) { - addPage(inputPage); - } - addPage((attachPage = new NewAttachmentPage(attachment))); - } - - public LocalAttachment getAttachment() { - return attachment; - } - - protected String getFilePath() { - return inputPage.getAttachmentName(); - } - - public IWizardPage getNextPage(IWizardPage page) { - attachPage.setFilePath(inputPage.getAttachmentName()); - return super.getNextPage(page); - } - - public void showPage(IWizardPage page) { - dialog.showPage(page); - } - - public void setDialog(NewAttachmentWizardDialog dialog) { - this.dialog = dialog; - } - - public String getClipboardContents() { - return inputPage.getClipboardContents(); - } - - public boolean needsPreviousAndNextButtons() { - return true; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewAttachmentWizardDialog.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewAttachmentWizardDialog.java deleted file mode 100644 index 9d0db8d40..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewAttachmentWizardDialog.java +++ /dev/null @@ -1,41 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import org.eclipse.jface.dialogs.IDialogSettings; -import org.eclipse.jface.wizard.IWizard; -import org.eclipse.jface.wizard.WizardDialog; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Shell; - -/** - * @author Jeff Pound - */ -public class NewAttachmentWizardDialog extends WizardDialog { - - private static final String ATTACHMENT_WIZARD_SETTINGS_SECTION = "PatchWizard"; //$NON-NLS-1$ - - public NewAttachmentWizardDialog(Shell parent, IWizard wizard) { - super(parent, wizard); - - setShellStyle(getShellStyle() | SWT.RESIZE); - setMinimumPageSize(600, 300); - setPageSize(600, 300); - } - - protected IDialogSettings getDialogBoundsSettings() { - IDialogSettings settings = TasksUiPlugin.getDefault().getDialogSettings(); - IDialogSettings section = settings.getSection(ATTACHMENT_WIZARD_SETTINGS_SECTION); - if (section == null) { - section = settings.addNewSection(ATTACHMENT_WIZARD_SETTINGS_SECTION); - } - return section; - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewLocalCategoryWizard.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewLocalCategoryWizard.java deleted file mode 100644 index 02d357479..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewLocalCategoryWizard.java +++ /dev/null @@ -1,38 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.mylar.internal.tasks.ui.actions.NewCategoryAction; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; -import org.eclipse.ui.INewWizard; -import org.eclipse.ui.IWorkbench; - -/** - * @author Mik Kersten - */ -public class NewLocalCategoryWizard extends Wizard implements INewWizard { - - public void init(IWorkbench workbench, IStructuredSelection selection) { - setForcePreviousAndNextButtons(false); - } - - @Override - public boolean canFinish() { - return true; - } - - @Override - public boolean performFinish() { - new NewCategoryAction(TaskListView.openInActivePerspective()).run(); - return true; - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewQueryWizard.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewQueryWizard.java deleted file mode 100644 index 282a845b0..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewQueryWizard.java +++ /dev/null @@ -1,49 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.IWizard; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.TaskRepositoryFilter; -import org.eclipse.mylar.tasks.ui.AbstractRepositoryConnectorUi; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Mik Kersten - * @author Eugene Kuleshov - */ -public class NewQueryWizard extends MultiRepositoryAwareWizard { - - private static final String TITLE = "New Repository Query"; - - public NewQueryWizard() { - super(new SelectRepositoryPageForNewQuery(), TITLE); - } - - public NewQueryWizard(IStructuredSelection selection) { - super(new SelectRepositoryPageForNewQuery().setSelection(selection), TITLE); - } - - private static final class SelectRepositoryPageForNewQuery extends SelectRepositoryPage { - public SelectRepositoryPageForNewQuery() { - super(TaskRepositoryFilter.ALL); - } - - @Override - protected IWizard createWizard(TaskRepository taskRepository) { - AbstractRepositoryConnectorUi repositoryUi = TasksUiPlugin.getRepositoryUi(taskRepository.getKind()); - return repositoryUi.getQueryWizard(taskRepository, null); - } - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewRepositoryTaskPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewRepositoryTaskPage.java deleted file mode 100644 index be88ea084..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewRepositoryTaskPage.java +++ /dev/null @@ -1,37 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import org.eclipse.jface.wizard.IWizard; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.TaskRepositoryFilter; -import org.eclipse.mylar.tasks.ui.AbstractRepositoryConnectorUi; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Mik Kersten - * @author Euegene Kuleshov - */ -public class NewRepositoryTaskPage extends SelectRepositoryPage { - - public NewRepositoryTaskPage(TaskRepositoryFilter taskRepositoryFilter) { - super(taskRepositoryFilter); - } - - @Override - protected IWizard createWizard(TaskRepository taskRepository) { - AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getRepositoryUi( - taskRepository.getKind()); - return connectorUi.getNewTaskWizard(taskRepository, getSelection()); - } - -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewRepositoryTaskWizard.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewRepositoryTaskWizard.java deleted file mode 100644 index 1a3ac7934..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewRepositoryTaskWizard.java +++ /dev/null @@ -1,36 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.mylar.tasks.core.TaskRepositoryFilter; - -/** - * @author Mik Kersten - * @author Eugene Kuleshov - * @author Steffen Pingel - */ -public class NewRepositoryTaskWizard extends MultiRepositoryAwareWizard { - - private static final String TITLE = "New Repository Task"; - - public NewRepositoryTaskWizard() { - super(new NewRepositoryTaskPage(TaskRepositoryFilter.CAN_CREATE_NEW_TASK), TITLE); - setNeedsProgressMonitor(true); - } - - public NewRepositoryTaskWizard(IStructuredSelection selection) { - super(new NewRepositoryTaskPage(TaskRepositoryFilter.CAN_CREATE_NEW_TASK).setSelection(selection), TITLE); - setNeedsProgressMonitor(true); - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewRepositoryWizard.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewRepositoryWizard.java deleted file mode 100644 index d8f0d1368..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewRepositoryWizard.java +++ /dev/null @@ -1,58 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.mylar.internal.tasks.ui.actions.AddRepositoryAction; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.IWorkbench; - -/** - * @author Mik Kersten - */ -public class NewRepositoryWizard extends AbstractRepositoryClientWizard { - - public NewRepositoryWizard() { - super(); - super.setForcePreviousAndNextButtons(true); - setWindowTitle(AddRepositoryAction.TITLE); - } - - @Override - public boolean performFinish() { - if (canFinish()) { - TaskRepository repository = abstractRepositorySettingsPage.createTaskRepository(); - TasksUiPlugin.getRepositoryManager().addRepository(repository, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - return true; - } - return false; - } - - public void init(IWorkbench workbench, IStructuredSelection selection) { - } - - @Override - public void addPages() { - super.addPages(); - } - - public void setRepositorySettingsPage(AbstractRepositorySettingsPage abstractRepositorySettingsPage) { - this.abstractRepositorySettingsPage = abstractRepositorySettingsPage; - } - - @Override - public boolean canFinish() { - return super.canFinish() && abstractRepositorySettingsPage != null - && abstractRepositorySettingsPage.isPageComplete(); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewWebTaskPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewWebTaskPage.java deleted file mode 100644 index 211ed2c90..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewWebTaskPage.java +++ /dev/null @@ -1,43 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Text; - -/** - * Wizard page for creating new tickets through a web browser. - * - * @author Eugene Kuleshov - * @author Mik Kersten - * @author Steffen Pingel - */ -public class NewWebTaskPage extends WizardPage { - - public NewWebTaskPage() { - super("New Task"); - - setTitle("Create via Web Browser"); - setDescription("This will open a web browser that can be used to create a new task.\n" - + "Note: you may need to log in via the web UI."); - } - - public void createControl(Composite parent) { - Text text = new Text(parent, SWT.WRAP); - text.setEditable(false); - text.setText("Once submitted synchronize queries or add the task to a category.\n"); - setControl(text); - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewWebTaskWizard.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewWebTaskWizard.java deleted file mode 100644 index 0097613fe..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/NewWebTaskWizard.java +++ /dev/null @@ -1,61 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.ui.INewWizard; -import org.eclipse.ui.IWorkbench; - -/** - * Wizard for creating new tickets through a web browser. - * - * @author Eugene Kuleshov - * @author Mik Kersten - * @author Steffen Pingel - */ -public class NewWebTaskWizard extends Wizard implements INewWizard { - - protected TaskRepository taskRepository; - protected String newTaskUrl; - - public NewWebTaskWizard(TaskRepository taskRepository, String newTaskUrl) { - this.taskRepository = taskRepository; - this.newTaskUrl = newTaskUrl; - - setWindowTitle("New Repository Task"); - setDefaultPageImageDescriptor(TaskListImages.BANNER_REPOSITORY); - } - - public void init(IWorkbench workbench, IStructuredSelection selection) { - } - - @Override - public void addPages() { - addPage(new NewWebTaskPage()); - } - - @Override - public boolean canFinish() { - return true; - } - - @Override - public boolean performFinish() { - TaskUiUtil.openUrl(newTaskUrl); - return true; - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/PreviewAttachmentPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/PreviewAttachmentPage.java deleted file mode 100644 index 6a71a49e6..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/PreviewAttachmentPage.java +++ /dev/null @@ -1,210 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.util.HashMap; - -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.mylar.tasks.core.LocalAttachment; -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Canvas; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.ScrollBar; -import org.eclipse.swt.widgets.Text; - -/** - * Shows a preview of a LocalAttachment. - * - * @author Jeff Pound - */ -public class PreviewAttachmentPage extends WizardPage { - - private static final String PAGE_NAME = "PreviewAttachmentPage"; - - private static final String PAGE_DESCRIPTION = "Attachment preview"; - - private LocalAttachment attachment; - - private static HashMap<String, String> textTypes; - - private static HashMap<String, String> imageTypes; - - static { - textTypes = new HashMap<String, String>(); - imageTypes = new HashMap<String, String>(); - - textTypes.put("text/plain", ""); - textTypes.put("text/html", ""); - textTypes.put("text/html", ""); - textTypes.put("application/xml", ""); - - imageTypes.put("image/jpeg", ""); - imageTypes.put("image/gif", ""); - imageTypes.put("image/png", ""); - - // ("application/octet-stream", ); - } - - private static boolean isTextAttachment(String contentType) { - return textTypes.get(contentType) != null; - } - - private static boolean isImageAttachment(String contentType) { - return imageTypes.get(contentType) != null; - } - - protected PreviewAttachmentPage(LocalAttachment attachment) { - super(PAGE_NAME); - setDescription(PAGE_DESCRIPTION); - this.attachment = attachment; - } - - public void createControl(Composite parent) { - Composite composite = new Composite(parent, SWT.NONE); - composite.setLayout(new GridLayout()); - setControl(composite); - - if (InputAttachmentSourcePage.CLIPBOARD_LABEL.equals(attachment.getFilePath())) { - createTextPreview(composite, ((NewAttachmentWizard) getWizard()).getClipboardContents()); - } else if (PreviewAttachmentPage.isTextAttachment(attachment.getContentType())) { - createTextPreview(composite, attachment); - } else if (PreviewAttachmentPage.isImageAttachment(attachment.getContentType())) { - createImagePreview(composite, attachment); - } else { - createGenericPreview(composite, attachment); - } - } - - private void createTextPreview(Composite composite, String contents) { - Text text = new Text(composite, SWT.MULTI | SWT.READ_ONLY | SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER); - GridData gd = new GridData(GridData.FILL_BOTH); - gd.heightHint = composite.getBounds().y; - gd.widthHint = composite.getBounds().x; - text.setLayoutData(gd); - text.setText(contents); - } - - private void createTextPreview(Composite composite, LocalAttachment attachment) { - try { - StringBuffer content = new StringBuffer(); - BufferedReader in = new BufferedReader(new FileReader(new File(attachment.getFilePath()))); - String line; - while ((line = in.readLine()) != null) { - content.append(line); - content.append("\n"); - } - in.close(); - createTextPreview(composite, content.toString()); - - } catch (FileNotFoundException e) { - createErrorPreview(composite, "Could not locate file '" + attachment.getFilePath() + "'"); - } catch (IOException e) { - createErrorPreview(composite, "Error reading file '" + attachment.getFilePath() + "'"); - } - } - - private void createImagePreview(Composite composite, LocalAttachment attachment) { - final Image image = new Image(composite.getDisplay(), attachment.getFilePath()); - final Canvas canvas = new Canvas(composite, SWT.NO_BACKGROUND | SWT.NO_REDRAW_RESIZE | SWT.V_SCROLL - | SWT.H_SCROLL | SWT.BORDER); - canvas.setLayoutData(new GridData(GridData.FILL_BOTH)); - - // Adapted from snippit 48 - // http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet48.java?rev=HEAD - final Point origin = new Point(0, 0); - final ScrollBar hBar = canvas.getHorizontalBar(); - hBar.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event e) { - int hSelection = hBar.getSelection(); - int destX = -hSelection - origin.x; - Rectangle rect = image.getBounds(); - canvas.scroll(destX, 0, 0, 0, rect.width, rect.height, false); - origin.x = -hSelection; - } - }); - final ScrollBar vBar = canvas.getVerticalBar(); - vBar.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event e) { - int vSelection = vBar.getSelection(); - int destY = -vSelection - origin.y; - Rectangle rect = image.getBounds(); - canvas.scroll(0, destY, 0, 0, rect.width, rect.height, false); - origin.y = -vSelection; - } - }); - canvas.addListener(SWT.Resize, new Listener() { - public void handleEvent(Event e) { - Rectangle rect = image.getBounds(); - Rectangle client = canvas.getClientArea(); - hBar.setMaximum(rect.width); - vBar.setMaximum(rect.height); - hBar.setThumb(Math.min(rect.width, client.width)); - vBar.setThumb(Math.min(rect.height, client.height)); - int hPage = rect.width - client.width; - int vPage = rect.height - client.height; - int hSelection = hBar.getSelection(); - int vSelection = vBar.getSelection(); - if (hSelection >= hPage) { - if (hPage <= 0) - hSelection = 0; - origin.x = -hSelection; - } - if (vSelection >= vPage) { - if (vPage <= 0) - vSelection = 0; - origin.y = -vSelection; - } - canvas.redraw(); - } - }); - canvas.addListener(SWT.Paint, new Listener() { - public void handleEvent(Event e) { - GC gc = e.gc; - gc.drawImage(image, origin.x, origin.y); - Rectangle rect = image.getBounds(); - Rectangle client = canvas.getClientArea(); - int marginWidth = client.width - rect.width; - if (marginWidth > 0) { - gc.fillRectangle(rect.width, 0, marginWidth, client.height); - } - int marginHeight = client.height - rect.height; - if (marginHeight > 0) { - gc.fillRectangle(0, rect.height, client.width, marginHeight); - } - } - }); - } - - private void createGenericPreview(Composite composite, LocalAttachment attachment) { - Label label = new Label(composite, SWT.NONE); - label.setLayoutData(new GridData(GridData.FILL_BOTH)); - label.setText("Attaching File '" + attachment.getFilePath() + "'\nA preview the type '" - + attachment.getContentType() + "' is currently not available"); - } - - private void createErrorPreview(Composite composite, String message) { - Label label = new Label(composite, SWT.NONE); - label.setLayoutData(new GridData(GridData.FILL_BOTH)); - label.setText(message); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/SelectRepositoryClientPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/SelectRepositoryClientPage.java deleted file mode 100644 index de7c4e59b..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/SelectRepositoryClientPage.java +++ /dev/null @@ -1,107 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.IStructuredContentProvider; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.wizard.IWizardPage; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.mylar.internal.tasks.ui.views.TaskRepositoryLabelProvider; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.ui.AbstractRepositoryConnectorUi; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.widgets.Composite; - -/** - * @author Mik Kersten - */ -public class SelectRepositoryClientPage extends WizardPage { - - private static final String DESCRIPTION = "You can connect to an existing account using one of the installed connectors."; - - private static final String TITLE = "Select a task repository type"; - - private TableViewer viewer; - - private AbstractRepositoryClientWizard wizard; - - static class RepositoryContentProvider implements IStructuredContentProvider { - - public void inputChanged(Viewer v, Object oldInput, Object newInput) { - } - - public void dispose() { - } - - public Object[] getElements(Object parent) { - return TasksUiPlugin.getRepositoryManager().getRepositoryConnectors().toArray(); - } - } - - public SelectRepositoryClientPage(AbstractRepositoryClientWizard wizard) { - super(TITLE); - setTitle(TITLE); - setDescription(DESCRIPTION); - this.wizard = wizard; - super.setWizard(wizard); - } - - @Override - public boolean canFlipToNextPage() { - return wizard.getRepositoryConnector() != null; - } - - public void createControl(Composite parent) { - Composite container = new Composite(parent, SWT.NULL); - FillLayout layout = new FillLayout(); - container.setLayout(layout); - - viewer = new TableViewer(container, SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); - viewer.setContentProvider(new RepositoryContentProvider()); - viewer.setLabelProvider(new TaskRepositoryLabelProvider()); - viewer.setInput(TasksUiPlugin.getRepositoryManager().getRepositoryConnectors()); - viewer.addSelectionChangedListener(new ISelectionChangedListener() { - - public void selectionChanged(SelectionChangedEvent event) { - IStructuredSelection selection = (IStructuredSelection) event.getSelection(); - if (selection.getFirstElement() instanceof AbstractRepositoryConnector) { - wizard.setRepositoryConnector((AbstractRepositoryConnector) selection.getFirstElement()); - SelectRepositoryClientPage.this.setPageComplete(true); - wizard.getContainer().updateButtons(); - } - } - - }); - setControl(container); - } - - @Override - public IWizardPage getNextPage() { - if (isPageComplete()) { - AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getRepositoryUi( - wizard.getRepositoryConnector().getRepositoryType()); - - AbstractRepositorySettingsPage nextPage = connectorUi.getSettingsPage(); - wizard.setRepositorySettingsPage(nextPage); - nextPage.setWizard(wizard); - return nextPage; - } else { - return super.getNextPage(); - } - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/SelectRepositoryPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/SelectRepositoryPage.java deleted file mode 100644 index 28e7d0b74..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/SelectRepositoryPage.java +++ /dev/null @@ -1,267 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - -import org.eclipse.jface.viewers.DecoratingLabelProvider; -import org.eclipse.jface.viewers.IOpenListener; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.IStructuredContentProvider; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.OpenEvent; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.wizard.IWizard; -import org.eclipse.jface.wizard.IWizardNode; -import org.eclipse.jface.wizard.WizardSelectionPage; -import org.eclipse.mylar.internal.tasks.ui.actions.AddRepositoryAction; -import org.eclipse.mylar.internal.tasks.ui.views.TaskRepositoriesView; -import org.eclipse.mylar.internal.tasks.ui.views.TaskRepositoryLabelProvider; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.TaskRepositoryFilter; -import org.eclipse.mylar.tasks.core.TaskRepositoryManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Table; -import org.eclipse.ui.PlatformUI; - -/** - * @author Mik Kersten - * @author Brock Janiczak - * @author Steffen Pingel - * @author Eugene Kuleshov - */ -public abstract class SelectRepositoryPage extends WizardSelectionPage { - - private static final String DESCRIPTION = "Add new repositories using the " + TaskRepositoriesView.NAME - + " view.\n" + "If a repository is missing it does not support the requested operation."; - - private static final String TITLE = "Select a repository"; - - private TableViewer viewer; - - protected MultiRepositoryAwareWizard wizard; - - private List<TaskRepository> repositories = new ArrayList<TaskRepository>(); - - private IStructuredSelection selection; - - private final TaskRepositoryFilter taskRepositoryFilter; - - class RepositoryContentProvider implements IStructuredContentProvider { - - public void inputChanged(Viewer v, Object oldInput, Object newInput) { - } - - public void dispose() { - } - - public Object[] getElements(Object parent) { - return repositories.toArray(); - } - } - - public SelectRepositoryPage(TaskRepositoryFilter taskRepositoryFilter) { - super(TITLE); - - setTitle(TITLE); - setDescription(DESCRIPTION); - - this.taskRepositoryFilter = taskRepositoryFilter; - this.repositories = getTaskRepositories(); - } - - public List<TaskRepository> getTaskRepositories() { - List<TaskRepository> repositories = new ArrayList<TaskRepository>(); - TaskRepositoryManager repositoryManager = TasksUiPlugin.getRepositoryManager(); - for (AbstractRepositoryConnector connector : repositoryManager.getRepositoryConnectors()) { - Set<TaskRepository> connectorRepositories = repositoryManager - .getRepositories(connector.getRepositoryType()); - for (TaskRepository repository : connectorRepositories) { - if (taskRepositoryFilter.accept(repository, connector)) { - repositories.add(repository); - } - } - } - return repositories; - } - - public SelectRepositoryPage setSelection(IStructuredSelection selection) { - this.selection = selection; - return this; - } - - public IStructuredSelection getSelection() { - return this.selection; - } - - public void createControl(Composite parent) { - Composite container = new Composite(parent, SWT.NULL); - GridLayout layout = new GridLayout(1, true); - container.setLayout(layout); - - Table table = createTableViewer(container); - GridData gridData = new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL); - table.setLayoutData(gridData); - - final AddRepositoryAction action = new AddRepositoryAction(); - - Button button = new Button(container, SWT.NONE); - button.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING)); - button.setText(AddRepositoryAction.TITLE); - button.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - action.run(); - SelectRepositoryPage.this.repositories = getTaskRepositories(); - viewer.setInput(TasksUiPlugin.getRepositoryManager().getRepositoryConnectors()); - } - }); - - setControl(container); - } - - protected Table createTableViewer(Composite container) { - viewer = new TableViewer(container, SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); - viewer.setContentProvider(new RepositoryContentProvider()); - // viewer.setLabelProvider(new TaskRepositoryLabelProvider()); - viewer.setLabelProvider(new DecoratingLabelProvider(new TaskRepositoryLabelProvider(), PlatformUI - .getWorkbench().getDecoratorManager().getLabelDecorator())); - viewer.setInput(TasksUiPlugin.getRepositoryManager().getRepositoryConnectors()); - - viewer.addSelectionChangedListener(new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent event) { - IStructuredSelection selection = (IStructuredSelection) event.getSelection(); - if (selection.getFirstElement() instanceof TaskRepository) { - setSelectedNode(new CustomWizardNode((TaskRepository) selection.getFirstElement())); - setPageComplete(true); - } - setPageComplete(false); - } - }); - - viewer.setSelection(new StructuredSelection(new Object[] { getSelectedRepository() })); - - viewer.addOpenListener(new IOpenListener() { - - public void open(OpenEvent event) { - getContainer().showPage(getNextPage()); - } - - }); - viewer.getTable().showSelection(); - viewer.getTable().setFocus(); - return viewer.getTable(); - } - - protected TaskRepository getSelectedRepository() { - if (selection == null) { - return (TaskRepository) viewer.getElementAt(0); - } - - Object element = selection.getFirstElement(); - if (element instanceof AbstractRepositoryQuery) { - AbstractRepositoryQuery query = (AbstractRepositoryQuery) element; - return getRepository(query.getRepositoryUrl(), query.getRepositoryKind()); - - } else if (element instanceof AbstractQueryHit) { - AbstractQueryHit queryHit = (AbstractQueryHit) element; - if (queryHit.getParent() != null) { - return getRepository(queryHit.getRepositoryUrl(), queryHit.getParent().getRepositoryKind()); - } else { - return TasksUiPlugin.getRepositoryManager().getRepository(queryHit.getRepositoryUrl()); - } - } else if (element instanceof AbstractRepositoryTask) { - AbstractRepositoryTask task = (AbstractRepositoryTask) element; - return getRepository(task.getRepositoryUrl(), task.getRepositoryKind()); - } - - // TODO handle project (when link from projects to repositories is - // implemented) - - return null; - } - - private TaskRepository getRepository(String repositoryUrl, String repositoryKind) { - return TasksUiPlugin.getRepositoryManager().getRepository(repositoryKind, repositoryUrl); - } - - protected abstract IWizard createWizard(TaskRepository taskRepository); - - private class CustomWizardNode implements IWizardNode { - - private final TaskRepository repository; - - private IWizard wizard; - - public CustomWizardNode(TaskRepository repository) { - this.repository = repository; - } - - public void dispose() { - if (wizard != null) { - wizard.dispose(); - } - } - - public Point getExtent() { - return new Point(-1, -1); - } - - public IWizard getWizard() { - if (wizard == null) { - wizard = SelectRepositoryPage.this.createWizard(repository); - } - - return wizard; - } - - public boolean isContentCreated() { - return wizard != null; - } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof CustomWizardNode)) { - return false; - } - CustomWizardNode that = (CustomWizardNode) obj; - if (this == that) { - return true; - } - - return this.repository.getKind().equals(that.repository.getKind()) - && this.repository.getUrl().equals(that.repository.getUrl()); - } - - @Override - public int hashCode() { - return 31 * this.repository.getUrl().hashCode() + this.repository.getKind().hashCode(); - } - - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataExportWizard.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataExportWizard.java deleted file mode 100644 index 759ee9174..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataExportWizard.java +++ /dev/null @@ -1,368 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import java.io.File; -import java.lang.reflect.InvocationTargetException; -import java.text.SimpleDateFormat; -import java.util.Collection; -import java.util.Date; -import java.util.Locale; - -import org.eclipse.jface.dialogs.IDialogSettings; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.mylar.context.core.ContextCorePlugin; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.context.core.MylarContextManager; -import org.eclipse.mylar.internal.tasks.ui.util.TaskDataExportJob; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.IExportWizard; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.progress.IProgressService; - -/** - * Wizard for exporting tasklist data files to the file system. This wizard uses - * a single page: TaskDataExportWizardPage - * - * @author Wesley Coelho - * @author Mik Kersten - */ -public class TaskDataExportWizard extends Wizard implements IExportWizard { - - /** - * The name of the dialog store's section associated with the task data - * export wizard - */ - private final static String SETTINGS_SECTION = "org.eclipse.mylar.tasklist.ui.exportWizard"; - - public final static String ZIP_FILE_PREFIX = "mylardata"; - - private final static String ZIP_FILE_EXTENSION = ".zip"; - - private final static String WINDOW_TITLE = "Export"; - - private TaskDataExportWizardPage exportPage = null; - - public static String getZipFileName() { - String fomratString = "yyyy-MM-dd"; - SimpleDateFormat format = new SimpleDateFormat(fomratString, Locale.ENGLISH); - String date = format.format(new Date()); - return ZIP_FILE_PREFIX + "-" + date + ZIP_FILE_EXTENSION; - } - - public TaskDataExportWizard() { - IDialogSettings masterSettings = TasksUiPlugin.getDefault().getDialogSettings(); - setDialogSettings(getSettingsSection(masterSettings)); - setNeedsProgressMonitor(true); - setWindowTitle(WINDOW_TITLE); - } - - /** - * Finds or creates a dialog settings section that is used to make the - * dialog control settings persistent - */ - public IDialogSettings getSettingsSection(IDialogSettings master) { - IDialogSettings settings = master.getSection(SETTINGS_SECTION); - if (settings == null) { - settings = master.addNewSection(SETTINGS_SECTION); - } - return settings; - } - - public void addPages() { - exportPage = new TaskDataExportWizardPage(); - exportPage.setWizard(this); - addPage(exportPage); - } - - public void init(IWorkbench workbench, IStructuredSelection selection) { - // no initialization needed - } - - public boolean canFinish() { - return exportPage.isPageComplete(); - } - - /** - * Called when the user clicks finish. Saves the task data. Waits until all - * overwrite decisions have been made before starting to save files. If any - * overwrite is canceled, no files are saved and the user must adjust the - * dialog. - */ - public boolean performFinish() { - boolean overwrite = exportPage.overwrite(); - boolean zip = exportPage.zip(); - - Collection<ITask> taskContextsToExport = TasksUiPlugin.getTaskListManager().getTaskList().getAllTasks(); - - // Get file paths to check for existence - String destDir = exportPage.getDestinationDirectory(); - final File destDirFile = new File(destDir); - if (!destDirFile.exists() || !destDirFile.isDirectory()) { - // This should never happen - MylarStatusHandler.fail(new Exception("File Export Exception"), - "Could not export data because specified location does not exist or is not a folder", true); - return false; - } - - final File destTaskListFile = new File(destDir + File.separator + TasksUiPlugin.DEFAULT_TASK_LIST_FILE); - final File destActivationHistoryFile = new File(destDir + File.separator - + MylarContextManager.CONTEXT_HISTORY_FILE_NAME + MylarContextManager.CONTEXT_FILE_EXTENSION); - final File destZipFile = new File(destDir + File.separator + getZipFileName()); - - // Prompt the user to confirm if ANY of the save repositoryOperations will cause - // an overwrite - if (!overwrite) { - - if (zip) { - if (destZipFile.exists()) { - if (!MessageDialog.openConfirm(getShell(), "Confirm File Replace", "The zip file " - + destZipFile.getPath() + " already exists. Do you want to overwrite it?")) { - return false; - } - } - } else { - if (exportPage.exportTaskList() && destTaskListFile.exists()) { - if (!MessageDialog.openConfirm(getShell(), "Confirm File Replace", "The task list file " - + destTaskListFile.getPath() + " already exists. Do you want to overwrite it?")) { - return false; - } - } - - if (exportPage.exportActivationHistory() && destActivationHistoryFile.exists()) { - if (!MessageDialog.openConfirm(getShell(), "Confirm File Replace", - "The task activation history file " + destActivationHistoryFile.getPath() - + " already exists. Do you want to overwrite it?")) { - return false; - } - } - - if (exportPage.exportTaskContexts()) { - for (ITask task : taskContextsToExport) { - File contextFile = ContextCorePlugin.getContextManager() - .getFileForContext(task.getHandleIdentifier()); - File destTaskFile = new File(destDir + File.separator + contextFile.getName()); - if (destTaskFile.exists()) { - if (!MessageDialog.openConfirm(getShell(), "Confirm File Replace", - "Task context files already exist in " + destDir - + ". Do you want to overwrite them?")) { - return false; - } else { - break; - } - } - } - } - } - } - - // FileCopyJob job = new FileCopyJob(destZipFile, destTaskListFile, - // destActivationHistoryFile); - TaskDataExportJob job = new TaskDataExportJob(exportPage.getDestinationDirectory(), exportPage.exportTaskList(), exportPage - .exportActivationHistory(), exportPage.exportTaskContexts(), exportPage.zip(), destZipFile.getName(), taskContextsToExport); - IProgressService service = PlatformUI.getWorkbench().getProgressService(); - - try { - service.run(true, false, job); - } catch (InvocationTargetException e) { - MylarStatusHandler.fail(e, "Could not export files", true); - } catch (InterruptedException e) { - MylarStatusHandler.fail(e, "Could not export files", true); - } - - exportPage.saveSettings(); - return true; - } - - // /** Job that performs the file copying and zipping */ - // class FileCopyJob implements IRunnableWithProgress { - // - // private static final String JOB_LABEL = "Exporting Data"; - // - // private File destZipFile = null; - // - // private File destTaskListFile = null; - // - // private File destActivationHistoryFile = null; - // - // private boolean zip; - // - // private boolean exportTaskList; - // - // private boolean exportActivationHistory; - // - // private boolean exportTaskContexts; - // - // private String destinationDirectory; - // - // public FileCopyJob(File destZipFile, File destTaskListFile, File - // destActivationHistoryFile) { - // this.destZipFile = destZipFile; - // this.destTaskListFile = destTaskListFile; - // this.destActivationHistoryFile = destActivationHistoryFile; - // - // // Get parameters here to avoid accessing the UI thread - // this.zip = exportPage.zip(); - // this.exportTaskList = exportPage.exportTaskList(); - // this.exportActivationHistory = exportPage.exportActivationHistory(); - // this.exportTaskContexts = exportPage.exportTaskContexts(); - // this.destinationDirectory = exportPage.getDestinationDirectory(); - // } - // - // public void run(final IProgressMonitor monitor) throws - // InvocationTargetException, InterruptedException { - // List<ITask> tasks = getAllTasks(); - // monitor.beginTask(JOB_LABEL, tasks.size() + 2); - // - // // List of files to add to the zip archive - // List<File> filesToZip = new ArrayList<File>(); - // - // // Map of file paths used to avoid duplicates - // Map<String, String> filesToZipMap = new HashMap<String, String>(); - // - // if (exportTaskList) { - // MylarTaskListPlugin.getTaskListManager().saveTaskList(); - // - // String sourceTaskListPath = ContextCorePlugin.getDefault().getDataDirectory() + - // File.separator - // + MylarTaskListPlugin.DEFAULT_TASK_LIST_FILE; - // File sourceTaskListFile = new File(sourceTaskListPath); - // - // if (zip) { - // filesToZip.add(sourceTaskListFile); - // } else { - // if (!copy(sourceTaskListFile, destTaskListFile)) { - // MylarStatusHandler.fail(new Exception("Export Exception"), "Could not - // export task list file.", - // false); - // } - // monitor.worked(1); - // } - // - // } - // - // if (exportActivationHistory) { - // try { - // File sourceActivationHistoryFile = new - // File(ContextCorePlugin.getDefault().getDataDirectory() - // + File.separator + MylarContextManager.CONTEXT_HISTORY_FILE_NAME - // + MylarContextManager.CONTEXT_FILE_EXTENSION); - // - // ContextCorePlugin.getContextManager().saveActivityHistoryContext(); - // - // if (zip) { - // filesToZip.add(sourceActivationHistoryFile); - // } else { - // copy(sourceActivationHistoryFile, destActivationHistoryFile); - // monitor.worked(1); - // } - // } catch (RuntimeException e) { - // MylarStatusHandler.fail(e, "Could not export activity history context - // file", true); - // } - // } - // - // if (exportTaskContexts) { - // boolean errorDisplayed = false; // Prevent many repeated error - // // messages - // for (ITask task : tasks) { - // - // if - // (!ContextCorePlugin.getContextManager().hasContext(task.getHandleIdentifier())) - // { - // continue; // Tasks without a context have no file to - // // copy - // } - // - // File contextFile = - // ContextCorePlugin.getContextManager().getFileForContext(task.getHandleIdentifier()); - // - // File destTaskFile = new File(destinationDirectory + File.separator + - // contextFile.getName()); - // File sourceTaskFile = contextFile; - // // new File(ContextCorePlugin.getDefault().getDataDirectory() + - // // File.separator + task.getContextPath() - // // + MylarContextManager.CONTEXT_FILE_EXTENSION); - // - // if (zip) { - // if (!filesToZipMap.containsKey(task.getHandleIdentifier())) { - // filesToZip.add(sourceTaskFile); - // filesToZipMap.put(task.getHandleIdentifier(), null); - // } - // } else { - // if (!copy(sourceTaskFile, destTaskFile) && !errorDisplayed) { - // MylarStatusHandler.fail(new Exception("Export Exception: " + - // sourceTaskFile.getPath() - // + " -> " + destTaskFile.getPath()), - // "Could not export one or more task context files.", true); - // errorDisplayed = true; - // } - // monitor.worked(1); - // } - // } - // } - // - // if (zip) { - // try { - // if (destZipFile.exists()) { - // destZipFile.delete(); - // } - // ZipFileUtil.createZipFile(destZipFile, filesToZip, monitor); - // } catch (Exception e) { - // MylarStatusHandler.fail(e, "Could not create zip file.", true); - // } - // } - // monitor.done(); - // - // } - // } - - // /** Returns all tasks in the task list root or a category in the task - // list */ - // protected List<ITask> getAllTasks() { - // List<ITask> allTasks = new ArrayList<ITask>(); - // TaskList taskList = - // MylarTaskListPlugin.getTaskListManager().getTaskList(); - // - // allTasks.addAll(taskList.getRootTasks()); - // - // for (AbstractTaskContainer category : taskList.getCategories()) { - // allTasks.addAll(category.getChildren()); - // } - // - // return allTasks; - // } - - // // Note: Copied from MylarTaskListPlugin - // private boolean copy(File src, File dst) { - // try { - // InputStream in = new FileInputStream(src); - // OutputStream out = new FileOutputStream(dst); - // - // // Transfer bytes from in to out - // byte[] buf = new byte[1024]; - // int len; - // while ((len = in.read(buf)) > 0) { - // out.write(buf, 0, len); - // } - // in.close(); - // out.close(); - // return true; - // } catch (IOException ioe) { - // return false; - // } - // } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataExportWizardPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataExportWizardPage.java deleted file mode 100644 index e8911113c..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataExportWizardPage.java +++ /dev/null @@ -1,296 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import org.eclipse.jface.dialogs.IDialogSettings; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.DirectoryDialog; -import org.eclipse.swt.widgets.Group; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Text; - -/** - * Wizard Page for the Task Data Export Wizard - * - * @author Wesley Coelho - * @author Mik Kersten - */ -public class TaskDataExportWizardPage extends WizardPage { - - private static final String LABEL_TASK_LIST = "Task List"; - - private static final String LABEL_TASK_CONTEXTS = "Task Contexts"; - - private static final String LABEL_ACTIVITY_HISTORY = "Task Activity History"; - - protected final static String PAGE_TITLE = "Export Mylar Task Data"; - - public final static String PAGE_NAME = PAGE_TITLE; - - private Button taskListCheckBox = null; - - private Button taskActivationHistoryCheckBox = null; - - private Button taskContextsCheckBox = null; - - // private Button zipCheckBox = null; - - private Button browseButton = null; - - private Text destDirText = null; - - private Button overwriteCheckBox = null; - - // Key values for the dialog settings object - private final static String SETTINGS_SAVED = "Settings saved"; - - private final static String TASKLIST_SETTING = "TaskList setting"; - - private final static String ACTIVATION_HISTORY_SETTING = "Activation history setting"; - - private final static String CONTEXTS_SETTING = "Contexts setting"; - - private final static String DEST_DIR_SETTING = "Destination directory setting"; - - private final static String OVERWRITE_SETTING = "Overwrite setting"; - - // private final static String ZIP_SETTING = "Zip Setting"; - - public TaskDataExportWizardPage() { - super("org.eclipse.mylar.tasklist.exportPage", PAGE_TITLE, TasksUiPlugin.imageDescriptorFromPlugin( - TasksUiPlugin.PLUGIN_ID, "icons/wizban/banner-export.gif")); - setPageComplete(false); - } - - public String getName() { - return PAGE_NAME; - } - - /** - * Create the widgets on the page - */ - public void createControl(Composite parent) { - try { - Composite container = new Composite(parent, SWT.NONE); - GridLayout layout = new GridLayout(1, false); - container.setLayout(layout); - createFileSelectionControl(container); - createExportDirectoryControl(container); - - // zipCheckBox = createCheckBox(container, "Export to zip file: " + - // TaskDataExportWizard.getZipFileName()); - overwriteCheckBox = createCheckBox(container, "Overwrite existing files without warning"); - - initSettings(); - - setControl(container); - - setPageComplete(validate()); - } catch (RuntimeException e) { - MylarStatusHandler.fail(e, "Could not create export wizard page", true); - } - } - - /** - * Create widgets for selecting the data files to export - */ - private void createFileSelectionControl(Composite parent) { - Group group = new Group(parent, SWT.SHADOW_ETCHED_IN); - GridLayout gl = new GridLayout(1, false); - group.setLayout(gl); - GridData gridData = new GridData(GridData.FILL_HORIZONTAL); - group.setLayoutData(gridData); - group.setText("Select data to export:"); - - taskListCheckBox = createCheckBox(group, LABEL_TASK_LIST); - taskActivationHistoryCheckBox = createCheckBox(group, LABEL_ACTIVITY_HISTORY); - taskContextsCheckBox = createCheckBox(group, LABEL_TASK_CONTEXTS); - } - - /** - * Create widgets for specifying the destination directory - */ - private void createExportDirectoryControl(Composite parent) { - Group destDirGroup = new Group(parent, SWT.SHADOW_ETCHED_IN); - destDirGroup.setText("Export destination folder"); - destDirGroup.setLayout(new GridLayout(2, false)); - destDirGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - new Label(destDirGroup, SWT.NONE).setText("Export file: "+TaskDataExportWizard.getZipFileName()); - new Label(destDirGroup, SWT.NONE); - - - destDirText = new Text(destDirGroup, SWT.BORDER); - destDirText.setEditable(false); - destDirText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - destDirText.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - controlChanged(); - } - }); - - browseButton = new Button(destDirGroup, SWT.PUSH); - browseButton.setText("Browse..."); - browseButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - DirectoryDialog dialog = new DirectoryDialog(getShell()); - dialog.setText("Folder Selection"); - dialog.setMessage("Specify the destination folder for task data"); - String dir = destDirText.getText(); - dialog.setFilterPath(dir); - dir = dialog.open(); - if (dir == null || dir.equals("")) - return; - destDirText.setText(dir); - } - }); - } - - /** - * Initializes controls with values from the Dialog Settings object - */ - protected void initSettings() { - IDialogSettings settings = getDialogSettings(); - - if (settings.get(SETTINGS_SAVED) == null) { - // Set default values - taskListCheckBox.setSelection(true); - taskActivationHistoryCheckBox.setSelection(true); - taskContextsCheckBox.setSelection(true); - destDirText.setText(""); - overwriteCheckBox.setSelection(true); - // zipCheckBox.setSelection(false); - } else { - // Retrieve previous values from the dialog settings - taskListCheckBox.setSelection(true); // force it - // taskListCheckBox.setSelection(settings.getBoolean(TASKLIST_SETTING)); - taskActivationHistoryCheckBox.setSelection(settings.getBoolean(ACTIVATION_HISTORY_SETTING)); - taskContextsCheckBox.setSelection(settings.getBoolean(CONTEXTS_SETTING)); - String directory = settings.get(DEST_DIR_SETTING); - if (directory != null) { - destDirText.setText(settings.get(DEST_DIR_SETTING)); - } - overwriteCheckBox.setSelection(settings.getBoolean(OVERWRITE_SETTING)); - // zipCheckBox.setSelection(settings.getBoolean(ZIP_SETTING)); - } - } - - /** - * Saves the control values in the dialog settings to be used as defaults - * the next time the page is opened - */ - public void saveSettings() { - IDialogSettings settings = getDialogSettings(); - - settings.put(TASKLIST_SETTING, taskListCheckBox.getSelection()); - settings.put(ACTIVATION_HISTORY_SETTING, taskActivationHistoryCheckBox.getSelection()); - settings.put(CONTEXTS_SETTING, taskContextsCheckBox.getSelection()); - settings.put(DEST_DIR_SETTING, destDirText.getText()); - settings.put(OVERWRITE_SETTING, overwriteCheckBox.getSelection()); - // settings.put(ZIP_SETTING, zipCheckBox.getSelection()); - - settings.put(SETTINGS_SAVED, SETTINGS_SAVED); - } - - /** Convenience method for creating a new checkbox */ - protected Button createCheckBox(Composite parent, String text) { - Button newButton = new Button(parent, SWT.CHECK); - newButton.setText(text); - - newButton.addSelectionListener(new SelectionListener() { - - public void widgetSelected(SelectionEvent e) { - controlChanged(); - } - - public void widgetDefaultSelected(SelectionEvent e) { - // No action required - } - }); - - return newButton; - } - - /** Called to indicate that a control's value has changed */ - public void controlChanged() { - setPageComplete(validate()); - } - - /** Returns true if the information entered by the user is valid */ - protected boolean validate() { - - // Check that at least one type of data has been selected - if (!taskListCheckBox.getSelection() && !taskActivationHistoryCheckBox.getSelection() - && !taskContextsCheckBox.getSelection()) { - return false; - } - - // Check that a destination dir has been specified - if (destDirText.getText().equals("")) { - return false; - } - - return true; - } - - /** Returns the directory where data files are to be saved */ - public String getDestinationDirectory() { - return destDirText.getText(); - } - - /** True if the user wants to export the task list */ - public boolean exportTaskList() { - return taskListCheckBox.getSelection(); - } - - /** True if the user wants to export task activation history */ - public boolean exportActivationHistory() { - return taskActivationHistoryCheckBox.getSelection(); - } - - /** True if the user wants to export task context files */ - public boolean exportTaskContexts() { - return taskContextsCheckBox.getSelection(); - } - - /** True if the user wants to overwrite files by default */ - public boolean overwrite() { - return overwriteCheckBox.getSelection(); - } - - /** True if the user wants to write to a zip file */ - public boolean zip() { - // return zipCheckBox.getSelection(); - return true; - } - - /** For testing only. Sets controls to the specified values */ - public void setParameters(boolean overwrite, boolean exportTaskList, boolean exportActivationHistory, - boolean exportTaskContexts, boolean zip, String destinationDir) { - overwriteCheckBox.setSelection(overwrite); - taskListCheckBox.setSelection(exportTaskList); - taskActivationHistoryCheckBox.setSelection(exportActivationHistory); - taskContextsCheckBox.setSelection(exportTaskContexts); - destDirText.setText(destinationDir); - // zipCheckBox.setSelection(zip); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataImportWizard.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataImportWizard.java deleted file mode 100644 index fd8a531e2..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataImportWizard.java +++ /dev/null @@ -1,490 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import java.io.BufferedOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.List; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.dialogs.IDialogSettings; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.mylar.context.core.ContextCorePlugin; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.context.core.MylarContextManager; -import org.eclipse.mylar.internal.context.core.util.ZipFileUtil; -import org.eclipse.mylar.tasks.core.AbstractTaskContainer; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.TaskList; -import org.eclipse.mylar.tasks.core.TaskRepositoryManager; -import org.eclipse.mylar.tasks.ui.TaskListDataMigration; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.IImportWizard; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.progress.IProgressService; - -/** - * @author Rob Elves Some code leveraged from TaskDataExportWizard - */ -public class TaskDataImportWizard extends Wizard implements IImportWizard { - - private final static String SETTINGS_SECTION = "org.eclipse.mylar.tasklist.ui.importWizard"; - - private final static String WINDOW_TITLE = "Import"; - - private TaskDataImportWizardPage importPage = null; - - public TaskDataImportWizard() { - super(); - IDialogSettings masterSettings = TasksUiPlugin.getDefault().getDialogSettings(); - setDialogSettings(getSettingsSection(masterSettings)); - setNeedsProgressMonitor(true); - setWindowTitle(WINDOW_TITLE); - } - - /** - * Finds or creates a dialog settings section that is used to make the - * dialog control settings persistent - */ - public IDialogSettings getSettingsSection(IDialogSettings master) { - IDialogSettings settings = master.getSection(SETTINGS_SECTION); - if (settings == null) { - settings = master.addNewSection(SETTINGS_SECTION); - } - return settings; - } - - public void addPages() { - importPage = new TaskDataImportWizardPage(); - importPage.setWizard(this); - addPage(importPage); - } - - public void init(IWorkbench workbench, IStructuredSelection selection) { - // no initialization needed - } - - public boolean canFinish() { - return importPage.isPageComplete(); - } - - /** - * Called when the user clicks finish. Saves the task data. Waits until all - * overwrite decisions have been made before starting to save files. If any - * overwrite is canceled, no files are saved and the user must adjust the - * dialog. - */ - public boolean performFinish() { - - TasksUiPlugin.getTaskListManager().deactivateTask( - TasksUiPlugin.getTaskListManager().getTaskList().getActiveTask()); - - File sourceDirFile = null; - File sourceZipFile = null; - File sourceTaskListFile = null; - File sourceRepositoriesFile = null; - File sourceActivationHistoryFile = null; - List<File> contextFiles = new ArrayList<File>(); - List<String> zipFilesToExtract = new ArrayList<String>(); - boolean overwrite = importPage.overwrite(); - boolean zip = importPage.zip(); - - if (zip) { - - String sourceZip = importPage.getSourceZipFile(); - sourceZipFile = new File(sourceZip); - - if (!sourceZipFile.exists()) { - MessageDialog - .openError(getShell(), "File not found", sourceZipFile.toString() + " could not be found."); - return false; - } - - Enumeration entries; - ZipFile zipFile; - - try { - zipFile = new ZipFile(sourceZipFile, ZipFile.OPEN_READ); - entries = zipFile.entries(); - while (entries.hasMoreElements()) { - ZipEntry entry = (ZipEntry) entries.nextElement(); - - if (entry.isDirectory()) { - // ignore directories (shouldn't be any) - continue; - } - if (!importPage.importTaskList() && entry.getName().endsWith(TasksUiPlugin.OLD_TASK_LIST_FILE)) { - continue; - } - - if (!importPage.importActivationHistory() - && entry.getName().endsWith( - MylarContextManager.CONTEXT_HISTORY_FILE_NAME - + MylarContextManager.OLD_CONTEXT_FILE_EXTENSION)) { - continue; - } - if (!importPage.importTaskContexts() - && entry.getName() - .matches(".*-\\d*" + MylarContextManager.OLD_CONTEXT_FILE_EXTENSION + "$")) { - continue; - } - - File destContextFile = new File(TasksUiPlugin.getDefault().getDataDirectory() + File.separator - + entry.getName()); - - if (!overwrite && destContextFile.exists()) { - if (MessageDialog.openConfirm(getShell(), "File exists!", "Overwrite existing file?\n" - + destContextFile.getName())) { - zipFilesToExtract.add(entry.toString()); - } else { - // no overwrite - } - } else { - zipFilesToExtract.add(entry.toString()); - } - - } - - } catch (IOException e) { - MylarStatusHandler.fail(e, "Could not import files", true); - } - - } else { - // Get file paths to check for existence - String sourceDir = importPage.getSourceDirectory(); - sourceDirFile = new File(sourceDir); - if (!sourceDirFile.exists() || !sourceDirFile.isDirectory()) { - MessageDialog.openError(getShell(), "Source location not found", - "Resource could not be found or is not a folder."); - return false; - } - - // make sure selected files for import are there - sourceTaskListFile = new File(sourceDir + File.separator + TasksUiPlugin.OLD_TASK_LIST_FILE); - sourceRepositoriesFile = new File(sourceDir + File.separator + TaskRepositoryManager.OLD_REPOSITORIES_FILE); - sourceActivationHistoryFile = new File(sourceDir + File.separator - + MylarContextManager.OLD_CONTEXT_HISTORY_FILE_NAME + MylarContextManager.OLD_CONTEXT_FILE_EXTENSION); - - File[] children = sourceDirFile.listFiles(); - for (int i = 0; i < children.length; i++) { - if (children[i].getAbsolutePath().matches( - ".*-\\d*" + MylarContextManager.OLD_CONTEXT_FILE_EXTENSION + "$")) { - - File destContextFile = new File(TasksUiPlugin.getDefault().getDataDirectory() + File.separator - + children[i].getName()); - - if (!overwrite && destContextFile.exists()) { - if (MessageDialog.openConfirm(getShell(), "Context exists!", - "Overwrite existing task context?\n" + destContextFile.getName())) { - contextFiles.add(children[i]); - } else { - // no overwrite - } - } else { - contextFiles.add(children[i]); - } - } - - } - - if (importPage.importTaskList() && !sourceTaskListFile.exists()) { - MessageDialog.openError(getShell(), "File not found", sourceTaskListFile.toString() + " not found."); - return false; - } else if (importPage.importActivationHistory() && !sourceActivationHistoryFile.exists()) { - MessageDialog.openError(getShell(), "File not found", sourceActivationHistoryFile.toString() - + " not found."); - return false; - } - - } - - FileCopyJob job = new FileCopyJob(sourceDirFile, sourceZipFile, sourceTaskListFile, sourceRepositoriesFile, - sourceActivationHistoryFile, contextFiles, zipFilesToExtract); - - IProgressService service = PlatformUI.getWorkbench().getProgressService(); - - try { - service.run(true, false, job); - } catch (InvocationTargetException e) { - MylarStatusHandler.fail(e, "Could not import files", true); - } catch (InterruptedException e) { - MylarStatusHandler.fail(e, "Could not import files", true); - } - - importPage.saveSettings(); - return true; - } - - /** Job that performs the file copying and zipping */ - class FileCopyJob implements IRunnableWithProgress { - - private static final String JOB_LABEL = "Importing Data"; - - private File sourceZipFile = null; - - private File sourceTaskListFile = null; - - private File sourceActivationHistoryFile = null; - - private File sourceRepositoriesFile = null; - - private boolean zip; - - private boolean importTaskList; - - private boolean importActivationHistory; - - private boolean importTaskContexts; - - private List<File> sourceContextFiles; - - private List<String> zipFilesToExtract; - - public FileCopyJob(File sourceFolder, File sourceZipFile, File sourceTaskListFile, File sourceRepositoriesFile, - File sourceActivationHistoryFile, List<File> contextFiles, List<String> zipFiles) { - - this.sourceZipFile = sourceZipFile; - this.sourceTaskListFile = sourceTaskListFile; - this.sourceRepositoriesFile = sourceRepositoriesFile; - this.sourceActivationHistoryFile = sourceActivationHistoryFile; - this.sourceContextFiles = contextFiles; - this.zipFilesToExtract = zipFiles; - - // Get parameters here to avoid accessing the UI thread - this.zip = importPage.zip(); - this.importTaskList = importPage.importTaskList(); - this.importActivationHistory = importPage.importActivationHistory(); - this.importTaskContexts = importPage.importTaskContexts(); - - } - - public void run(final IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - - if (zip) { - monitor.beginTask(JOB_LABEL, zipFilesToExtract.size() + 2); - //ZipFile zipFile; - - try { - //zipFile = new ZipFile(sourceZipFile, ZipFile.OPEN_READ); - ZipFileUtil.unzipFiles(sourceZipFile, TasksUiPlugin.getDefault().getDataDirectory()); -// for (String zipFileStr : zipFilesToExtract) { -// ZipEntry entry = zipFile.getEntry(zipFileStr); -// if (entry == null) { -// MylarStatusHandler.fail(new Exception("Import Exception"), -// "Problem occured extracting from zip file.", true); -// return; -// } -// -// File destinationFile = new File(TasksUiPlugin.getDefault().getDataDirectory() + File.separator -// + entry.getName()); -// if (destinationFile.exists()) { -// destinationFile.delete(); -// } -// -// copyInputStream(zipFile.getInputStream(entry), new BufferedOutputStream(new FileOutputStream( -// destinationFile))); -// monitor.worked(1); -// -// } - //zipFile.close(); - } catch (IOException ioe) { - MylarStatusHandler.fail(new Exception("Import Exception"), - "Problem occured extracting from zip file.", true); - return; - } - readTaskListData(); - monitor.done(); - return; - } - - int jobSize = 1; - if (importTaskList) - jobSize++; - if (importActivationHistory) - jobSize++; - if (importTaskContexts) - jobSize += sourceContextFiles.size(); - monitor.beginTask(JOB_LABEL, jobSize); - - if (true) { - String destRepositoriesPath = TasksUiPlugin.getDefault().getDataDirectory() + File.separator - + TaskRepositoryManager.OLD_REPOSITORIES_FILE; - File destRepositoriesFile = new File(destRepositoriesPath); - - if (destRepositoriesFile.exists()) { - destRepositoriesFile.delete(); - } - - if (!copy(sourceRepositoriesFile, destRepositoriesFile)) { - MylarStatusHandler.fail(new Exception("Import Exception"), "Could not import repositories file.", - true); - } - monitor.worked(1); - } - - if (importTaskList) { - String destTaskListPath = TasksUiPlugin.getDefault().getDataDirectory() + File.separator - + TasksUiPlugin.OLD_TASK_LIST_FILE; - File destTaskListFile = new File(destTaskListPath); - - if (destTaskListFile.exists()) { - destTaskListFile.delete(); - } - - if (!copy(sourceTaskListFile, destTaskListFile)) { - MylarStatusHandler - .fail(new Exception("Import Exception"), "Could not import task list file.", true); - } - monitor.worked(1); - - } - - if (importActivationHistory) { - try { - File destActivationHistoryFile = new File(TasksUiPlugin.getDefault().getDataDirectory() - + File.separator + MylarContextManager.OLD_CONTEXT_HISTORY_FILE_NAME - + MylarContextManager.OLD_CONTEXT_FILE_EXTENSION); - - if (destActivationHistoryFile.exists()) { - destActivationHistoryFile.delete(); - } - - copy(sourceActivationHistoryFile, destActivationHistoryFile); - monitor.worked(1); - - } catch (RuntimeException e) { - MylarStatusHandler.fail(e, "Could not import activity history context file", true); - } - } - - if (importTaskContexts) { - boolean errorDisplayed = false; - for (File sourceContextFile : sourceContextFiles) { - - File destContextFile = new File(TasksUiPlugin.getDefault().getDataDirectory() + File.separator - + sourceContextFile.getName()); - - if (destContextFile.exists()) { - destContextFile.delete(); - } - - if (!copy(sourceContextFile, destContextFile) && !errorDisplayed) { - MylarStatusHandler.fail(new Exception("Import Exception: " + sourceContextFile.getPath() - + " -> " + destContextFile.getPath()), - "Could not import one or more task context files.", true); - errorDisplayed = true; - } - monitor.worked(1); - } - } - readTaskListData(); - monitor.done(); - } - } - - /** Returns all tasks in the task list root or a category in the task list */ - protected List<ITask> getAllTasks() { - List<ITask> allTasks = new ArrayList<ITask>(); - TaskList taskList = TasksUiPlugin.getTaskListManager().getTaskList(); - - allTasks.addAll(taskList.getRootTasks()); - - for (AbstractTaskContainer category : taskList.getCategories()) { - allTasks.addAll(category.getChildren()); - } - - return allTasks; - } - - private boolean copy(File src, File dst) { - - try { - InputStream in = new FileInputStream(src); - OutputStream out = new FileOutputStream(dst); - return copyInputStream(in, new BufferedOutputStream(out)); - } catch (FileNotFoundException e) { - return false; - } - - } - - private boolean copyInputStream(InputStream inputStream, BufferedOutputStream stream) { - try { - InputStream in = inputStream; - OutputStream out = stream; - - // Transfer bytes from in to out - byte[] buf = new byte[1024]; - int len; - while ((len = in.read(buf)) > 0) { - out.write(buf, 0, len); - } - in.close(); - out.close(); - return true; - } catch (IOException ioe) { - return false; - } - } - - private void readTaskListData() { - PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { - public void run() { - - TaskListDataMigration migrationOperation = new TaskListDataMigration(new File(TasksUiPlugin.getDefault().getDataDirectory())); - IWorkbench wb = PlatformUI.getWorkbench(); - IWorkbenchWindow win = wb.getActiveWorkbenchWindow(); - Shell shell = win != null ? win.getShell() : null; - try { - new ProgressMonitorDialog(shell).run(true, false, migrationOperation); - } catch (Exception e) { - // ignore - } - - TasksUiPlugin.getRepositoryManager().readRepositories( - TasksUiPlugin.getDefault().getRepositoriesFilePath()); - ContextCorePlugin.getContextManager().loadActivityMetaContext(); - TasksUiPlugin.getTaskListManager().resetTaskList(); - - String path = TasksUiPlugin.getDefault().getDataDirectory() + File.separator - + TasksUiPlugin.OLD_TASK_LIST_FILE; - File taskListFile = new File(path); - if (!taskListFile.exists()) { - path = TasksUiPlugin.getDefault().getDataDirectory() + File.separator - + TasksUiPlugin.DEFAULT_TASK_LIST_FILE; - taskListFile = new File(path); - } - TasksUiPlugin.getTaskListManager().setTaskListFile(taskListFile); - TasksUiPlugin.getTaskListManager().readExistingOrCreateNewList(); - } - }); - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataImportWizardPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataImportWizardPage.java deleted file mode 100644 index c7cb2c9d8..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataImportWizardPage.java +++ /dev/null @@ -1,469 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.tasks.ui.wizards; - -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Comparator; -import java.util.Date; - -import org.apache.commons.httpclient.util.DateUtil; -import org.eclipse.jface.dialogs.IDialogSettings; -import org.eclipse.jface.layout.GridDataFactory; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.DirectoryDialog; -import org.eclipse.swt.widgets.FileDialog; -import org.eclipse.swt.widgets.Group; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.swt.widgets.TableItem; -import org.eclipse.swt.widgets.Text; - -/** - * Wizard Page for the Task Data Import Wizard - * - * @author Wesley Coelho - * @author Mik Kersten - * @author Rob Elves (Adaption to Import wizard) - */ -public class TaskDataImportWizardPage extends WizardPage { - - private static final String LABEL_IMPORT_FOLDER = "From 0.6.2 and older task data folder"; - - private static final String LABEL_IMPORT_ZIP = "From zip file"; - - private static final String LABEL_IMPORT_BACKUP = "From auto backup"; - - private final static String PAGE_TITLE = "Import Mylar Task Data"; - - private static final String DESCRIPTION = "WARNING: importing overwrites current task list and repositories, use with caution."; - - public final static String PAGE_NAME = PAGE_TITLE; - - private Button taskListCheckBox = null; - - private Button taskActivationHistoryCheckBox = null; - - private Button taskContextsCheckBox = null; - - private Button browseButtonFolder = null; - - private Button browseButtonZip = null; - - private Text sourceFolderText = null; - - private Text sourceZipText = null; - - private Button overwriteCheckBox = null; - - private Button importViaFolderButton; - - private Button importViaBackupButton; - - private Button importViaZipButton; - - private Table backupFilesTable; - - // Key values for the dialog settings object - private final static String SETTINGS_SAVED = "Import Settings saved"; - - private final static String TASKLIST_SETTING = "Import TaskList setting"; - - private final static String ACTIVATION_HISTORY_SETTING = "Import Activation history setting"; - - private final static String CONTEXTS_SETTING = "Import Contexts setting"; - - private final static String SOURCE_DIR_SETTING = "Import Source directory setting"; - - private final static String SOURCE_ZIP_SETTING = "Import Source zip file setting"; - - private final static String OVERWRITE_SETTING = "Import Overwrite setting"; - - private final static String IMPORT_FOLDERMETHOD_SETTING = "Import method folder"; - - private final static String IMPORT_ZIPMETHOD_SETTING = "Import method zip"; - - private final static String IMPORT_BACKUPMETHOD_SETTING = "Import method backup"; - - public TaskDataImportWizardPage() { - super("org.eclipse.mylar.tasklist.importPage", PAGE_TITLE, TasksUiPlugin.imageDescriptorFromPlugin( - TasksUiPlugin.PLUGIN_ID, "icons/wizban/banner-import.gif")); - setPageComplete(false); - setDescription(DESCRIPTION); - } - - public String getName() { - return PAGE_NAME; - } - - public void createControl(Composite parent) { - try { - Composite container = new Composite(parent, SWT.NONE); - GridLayout layout = new GridLayout(3, false); - layout.verticalSpacing = 15; - container.setLayout(layout); - - createContentSelectionControl(container); - createImportDirectoryControl(container); - createImportFromZipControl(container); - createImportBackupControl(container); - - addRadioListeners(); - - initSettings(); - - setControl(container); - setPageComplete(validate()); - } catch (RuntimeException e) { - MylarStatusHandler.fail(e, "Could not create import wizard page", true); - } - } - - private void addRadioListeners() { - SelectionListener radioListener = new SelectionListener() { - - public void widgetSelected(SelectionEvent e) { - browseButtonFolder.setEnabled(importViaFolderButton.getSelection()); - browseButtonZip.setEnabled(importViaZipButton.getSelection()); - backupFilesTable.setEnabled(importViaBackupButton.getSelection()); - sourceFolderText.setEnabled(importViaFolderButton.getSelection()); - sourceZipText.setEnabled(importViaZipButton.getSelection()); - controlChanged(); - } - - public void widgetDefaultSelected(SelectionEvent e) { - // ignore - - } - }; - - importViaFolderButton.addSelectionListener(radioListener); - importViaZipButton.addSelectionListener(radioListener); - importViaBackupButton.addSelectionListener(radioListener); - } - - /** - * Create widgets for selecting the content to import - */ - private void createContentSelectionControl(Composite parent) { - Group group = new Group(parent, SWT.SHADOW_ETCHED_IN); - GridLayout gl = new GridLayout(2, true); - group.setLayout(gl); - GridDataFactory.fillDefaults().grab(true, false).span(3, SWT.DEFAULT).applyTo(group); - group.setText("Select data to import:"); - - taskListCheckBox = createCheckBox(group, "Task List"); - taskActivationHistoryCheckBox = createCheckBox(group, "Task Activation History"); - taskContextsCheckBox = createCheckBox(group, "Task Contexts"); - overwriteCheckBox = createCheckBox(group, "OVERWRITE existing files without warning"); - } - - /** - * Create widgets for specifying the source directory - */ - private void createImportDirectoryControl(Composite parent) { - - importViaFolderButton = new Button(parent, SWT.RADIO); - importViaFolderButton.setText(LABEL_IMPORT_FOLDER); - - sourceFolderText = new Text(parent, SWT.BORDER); - sourceFolderText.setEditable(true); - GridDataFactory.fillDefaults().grab(true, false).hint(250, SWT.DEFAULT).applyTo(sourceFolderText); - sourceFolderText.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - controlChanged(); - } - }); - - browseButtonFolder = new Button(parent, SWT.PUSH); - browseButtonFolder.setText("Browse..."); - browseButtonFolder.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - DirectoryDialog dialog = new DirectoryDialog(getShell()); - dialog.setText("Folder Selection"); - dialog.setMessage("Specify the source folder for task data"); - String dir = sourceFolderText.getText(); - dialog.setFilterPath(dir); - dir = dialog.open(); - if (dir == null || dir.equals("")) - return; - sourceFolderText.setText(dir); - } - }); - } - - /** - * Create widgets for specifying the source zip - */ - private void createImportFromZipControl(Composite parent) { - - importViaZipButton = new Button(parent, SWT.RADIO); - importViaZipButton.setText(LABEL_IMPORT_ZIP); - - sourceZipText = new Text(parent, SWT.BORDER); - sourceZipText.setEditable(true); - GridDataFactory.fillDefaults().grab(true, false).hint(250, SWT.DEFAULT).applyTo(sourceZipText); - sourceZipText.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - controlChanged(); - } - }); - - browseButtonZip = new Button(parent, SWT.PUSH); - browseButtonZip.setText("Browse..."); - browseButtonZip.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - FileDialog dialog = new FileDialog(getShell()); - dialog.setText("Zip File Selection"); - // dialog.setText("Specify the source zip file for task data"); - String dir = sourceZipText.getText(); - dialog.setFilterPath(dir); - dir = dialog.open(); - if (dir == null || dir.equals("")) - return; - sourceZipText.setText(dir); - } - }); - - } - - private void createImportBackupControl(Composite container) { - - importViaBackupButton = new Button(container, SWT.RADIO); - importViaBackupButton.setText(LABEL_IMPORT_BACKUP); - GridDataFactory.fillDefaults().span(3, SWT.DEFAULT).applyTo(importViaBackupButton); - - addBackupFileView(container); - } - - private void addBackupFileView(Composite composite) { - new Label(composite, SWT.NONE); - backupFilesTable = new Table(composite, SWT.BORDER); - GridDataFactory.fillDefaults().span(2, SWT.DEFAULT).grab(true, false).applyTo(backupFilesTable); - TableColumn filenameColumn = new TableColumn(backupFilesTable, SWT.LEFT); - filenameColumn.setWidth(200); - - String destination = TasksUiPlugin.getDefault().getBackupFolderPath(); - - File backupFolder = new File(destination); - ArrayList<File> backupFiles = new ArrayList<File>(); - if (backupFolder.exists()) { - File[] files = backupFolder.listFiles(); - for (File file : files) { - if (file.getName().startsWith(TaskDataExportWizard.ZIP_FILE_PREFIX)) { - backupFiles.add(file); - } - } - } - - File[] backupFileArray = backupFiles.toArray(new File[backupFiles.size()]); - - if (backupFileArray != null && backupFileArray.length > 0) { - Arrays.sort(backupFileArray, new Comparator<File>() { - public int compare(File file1, File file2) { - return (new Long((file1).lastModified()).compareTo(new Long((file2).lastModified()))) * -1; - } - - }); - for (File file : backupFileArray) { - TableItem item = new TableItem(backupFilesTable, SWT.NONE); - item.setData(file.getAbsolutePath()); - Date fileModified = new Date(file.lastModified()); - item.setText(new String[] { DateUtil.formatDate(fileModified, DateUtil.PATTERN_RFC1123) }); - } - } - - backupFilesTable.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent e) { - controlChanged(); - } - }); - } - - /** - * Initializes controls with values from the Dialog Settings object - */ - protected void initSettings() { - IDialogSettings settings = getDialogSettings(); - - if (settings.get(SETTINGS_SAVED) == null) { - // Set default values - taskListCheckBox.setSelection(true); - taskActivationHistoryCheckBox.setSelection(true); - taskContextsCheckBox.setSelection(true); - sourceFolderText.setText(""); - overwriteCheckBox.setSelection(true); - // importFromFolderGroup.setEnabled(true); - importViaFolderButton.setSelection(true); - sourceFolderText.setEnabled(true); - sourceZipText.setEnabled(false); - backupFilesTable.setEnabled(false); - - } else { - // Retrieve previous values from the dialog settings - taskListCheckBox.setSelection(settings.getBoolean(TASKLIST_SETTING)); - taskActivationHistoryCheckBox.setSelection(settings.getBoolean(ACTIVATION_HISTORY_SETTING)); - taskContextsCheckBox.setSelection(settings.getBoolean(CONTEXTS_SETTING)); - importViaFolderButton.setSelection(settings.getBoolean(IMPORT_FOLDERMETHOD_SETTING)); - importViaZipButton.setSelection(settings.getBoolean(IMPORT_ZIPMETHOD_SETTING)); - importViaBackupButton.setSelection(settings.getBoolean(IMPORT_BACKUPMETHOD_SETTING)); - - browseButtonFolder.setEnabled(importViaFolderButton.getSelection()); - sourceFolderText.setEnabled(importViaFolderButton.getSelection()); - browseButtonZip.setEnabled(importViaZipButton.getSelection()); - sourceZipText.setEnabled(importViaZipButton.getSelection()); - - backupFilesTable.setEnabled(importViaBackupButton.getSelection()); - - String directory = settings.get(SOURCE_DIR_SETTING); - if (directory != null) { - sourceFolderText.setText(settings.get(SOURCE_DIR_SETTING)); - } - String zipFile = settings.get(SOURCE_ZIP_SETTING); - if (zipFile != null) { - sourceZipText.setText(settings.get(SOURCE_ZIP_SETTING)); - } - overwriteCheckBox.setSelection(settings.getBoolean(OVERWRITE_SETTING)); - } - } - - /** - * Saves the control values in the dialog settings to be used as defaults - * the next time the page is opened - */ - public void saveSettings() { - IDialogSettings settings = getDialogSettings(); - - settings.put(TASKLIST_SETTING, taskListCheckBox.getSelection()); - settings.put(ACTIVATION_HISTORY_SETTING, taskActivationHistoryCheckBox.getSelection()); - settings.put(CONTEXTS_SETTING, taskContextsCheckBox.getSelection()); - settings.put(SOURCE_DIR_SETTING, sourceFolderText.getText()); - settings.put(SOURCE_ZIP_SETTING, sourceZipText.getText()); - settings.put(OVERWRITE_SETTING, overwriteCheckBox.getSelection()); - settings.put(IMPORT_FOLDERMETHOD_SETTING, importViaFolderButton.getSelection()); - settings.put(IMPORT_ZIPMETHOD_SETTING, importViaZipButton.getSelection()); - settings.put(IMPORT_BACKUPMETHOD_SETTING, importViaBackupButton.getSelection()); - - settings.put(SETTINGS_SAVED, SETTINGS_SAVED); - } - - /** Convenience method for creating a new checkbox */ - protected Button createCheckBox(Composite parent, String text) { - Button newButton = new Button(parent, SWT.CHECK); - newButton.setText(text); - - newButton.addSelectionListener(new SelectionListener() { - - public void widgetSelected(SelectionEvent e) { - controlChanged(); - } - - public void widgetDefaultSelected(SelectionEvent e) { - // No action required - } - }); - - return newButton; - } - - /** Called to indicate that a control's value has changed */ - public void controlChanged() { - setPageComplete(validate()); - } - - /** Returns true if the information entered by the user is valid */ - protected boolean validate() { - - // Check that at least one type of data has been selected - if (!taskListCheckBox.getSelection() && !taskActivationHistoryCheckBox.getSelection() - && !taskContextsCheckBox.getSelection()) { - return false; - } - if (importViaFolderButton.getSelection() && sourceFolderText.getText().equals("")) { - return false; - } - if (importViaZipButton.getSelection() && sourceZipText.getText().equals("")) { - return false; - } - if (importViaBackupButton.getSelection() && backupFilesTable.getSelection().length == 0) { - return false; - } - return true; - } - - /** Returns the directory where data files are to be restored from */ - public String getSourceDirectory() { - return sourceFolderText.getText(); - } - - public String getSourceZipFile() { - if (importViaZipButton.getSelection()) { - return sourceZipText.getText(); - } else { - if (backupFilesTable.getSelectionIndex() != -1) { - return (String) (backupFilesTable.getSelection()[0].getData()); - } - } - return "<unspecified>"; - } - - /** True if the user wants to import the task list */ - public boolean importTaskList() { - return taskListCheckBox.getSelection(); - } - - /** True if the user wants to import task activation history */ - public boolean importActivationHistory() { - return taskActivationHistoryCheckBox.getSelection(); - } - - /** True if the user wants to import task context files */ - public boolean importTaskContexts() { - return taskContextsCheckBox.getSelection(); - } - - /** True if the user wants to overwrite files by default */ - public boolean overwrite() { - return overwriteCheckBox.getSelection(); - } - - /** True if the user wants to import from a zip file */ - public boolean zip() { - return importViaZipButton.getSelection() || importViaBackupButton.getSelection(); - } - - /** For testing only. Sets controls to the specified values */ - public void setParameters(boolean overwrite, boolean importTaskList, boolean importActivationHistory, - boolean importTaskContexts, boolean zip, String sourceDir, String sourceZip) { - overwriteCheckBox.setSelection(overwrite); - taskListCheckBox.setSelection(importTaskList); - taskActivationHistoryCheckBox.setSelection(importActivationHistory); - taskContextsCheckBox.setSelection(importTaskContexts); - sourceFolderText.setText(sourceDir); - sourceZipText.setText(sourceZip); - importViaZipButton.setSelection(zip); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/AbstractRepositoryConnectorUi.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/AbstractRepositoryConnectorUi.java deleted file mode 100644 index ad7aeb5b3..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/AbstractRepositoryConnectorUi.java +++ /dev/null @@ -1,90 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.tasks.ui; - -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.IWizard; -import org.eclipse.jface.wizard.WizardDialog; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.wizards.AbstractRepositorySettingsPage; -import org.eclipse.mylar.internal.tasks.ui.wizards.CommonAddExistingTaskWizard; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.PlatformUI; - -/** - * TODO: refactor wizards into extension points - * - * @author Mik Kersten - */ -public abstract class AbstractRepositoryConnectorUi { - - /** - * @return the unique type of the repository, e.g. "bugzilla" - */ - public abstract String getRepositoryType(); - - public abstract AbstractRepositorySettingsPage getSettingsPage(); - -// public abstract IWizard getNewQueryWizard(TaskRepository repository); - - /** - * @param repository - * @param queryToEdit can be null - */ - public abstract IWizard getQueryWizard(TaskRepository repository, AbstractRepositoryQuery queryToEdit); - - public abstract IWizard getNewTaskWizard(TaskRepository taskRepository, IStructuredSelection selection); - - public abstract boolean hasRichEditor(); - - public abstract boolean hasSearchPage(); - - public void openEditQueryDialog(AbstractRepositoryQuery query) { - try { - TaskRepository repository = TasksUiPlugin.getRepositoryManager().getRepository(query.getRepositoryKind(), - query.getRepositoryUrl()); - if (repository == null) - return; - - IWizard wizard = this.getQueryWizard(repository, query); - - Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); - if (wizard != null && shell != null && !shell.isDisposed()) { - WizardDialog dialog = new WizardDialog(shell, wizard); - dialog.create(); - dialog.setTitle("Edit Repository Query"); - dialog.setBlockOnOpen(true); - if (dialog.open() == Dialog.CANCEL) { - dialog.close(); - return; - } - } - } catch (Exception e) { - MylarStatusHandler.fail(e, e.getMessage(), true); - } - } - - public IWizard getAddExistingTaskWizard(TaskRepository repository) { - return new CommonAddExistingTaskWizard(repository); - } - - public WizardPage getSearchPage(TaskRepository repository, IStructuredSelection selection) { - return null; - } - - public void openRemoteTask(String repositoryUrl, String idString) { - MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), - TasksUiPlugin.TITLE_DIALOG, "Not supported by connector: " + this.getClass().getSimpleName()); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/RepositorySynchronizationManager.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/RepositorySynchronizationManager.java deleted file mode 100644 index 4ca73db63..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/RepositorySynchronizationManager.java +++ /dev/null @@ -1,482 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.tasks.ui; - -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.HashSet; -import java.util.Set; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.IJobChangeEvent; -import org.eclipse.core.runtime.jobs.IJobChangeListener; -import org.eclipse.core.runtime.jobs.ISchedulingRule; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.core.runtime.jobs.JobChangeAdapter; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.RepositoryTaskAttribute; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.mylar.tasks.core.TaskList; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask.RepositoryTaskSyncState; -import org.eclipse.ui.PlatformUI; - -/** - * TODO: move into core? - * - * @author Mik Kersten - * @author Rob Elves - */ -public class RepositorySynchronizationManager { - - private static final int RETRY_DELAY = 3000; - - private boolean updateLocalCopy = false; - - private final MutexRule rule = new MutexRule(); - - protected boolean forceSyncExecForTesting = false; - - /** - * non-final for testing purposes - */ - public void saveOffline(RepositoryTaskData taskData) { - try { - TasksUiPlugin.getDefault().getOfflineReportsFile().add(taskData); - } catch (CoreException e) { - MylarStatusHandler.fail(e, e.getMessage(), false); - } - } - - /** - * Synchronize a single task. Note that if you have a collection of tasks to - * synchronize with this connector then you should call synchronize(Set<Set<AbstractRepositoryTask> - * repositoryTasks, ...) - * - * @param listener - * can be null - */ - public final Job synchronize(AbstractRepositoryConnector connector, AbstractRepositoryTask repositoryTask, - boolean forceSynch, IJobChangeListener listener) { - Set<AbstractRepositoryTask> toSync = new HashSet<AbstractRepositoryTask>(); - toSync.add(repositoryTask); - return synchronize(connector, toSync, forceSynch, listener); - } - - /** - * @param listener - * can be null - */ - public final Job synchronize(AbstractRepositoryConnector connector, Set<AbstractRepositoryTask> repositoryTasks, - boolean forceSynch, final IJobChangeListener listener) { - - final SynchronizeTaskJob synchronizeJob = new SynchronizeTaskJob(connector, repositoryTasks); - synchronizeJob.setForceSynch(forceSynch); - synchronizeJob.setPriority(Job.DECORATE); - synchronizeJob.setRule(rule); - if (listener != null) { - synchronizeJob.addJobChangeListener(listener); - } - for (AbstractRepositoryTask repositoryTask : repositoryTasks) { - repositoryTask.setCurrentlySynchronizing(true); - } - if (!forceSyncExecForTesting) { - synchronizeJob.schedule(); - } else { - PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { - public void run() { - synchronizeJob.run(new NullProgressMonitor()); - if (listener != null) { - listener.done(null); - } - } - }); - } - return synchronizeJob; - - } - - /** - * For synchronizing a single query. Use synchronize(Set, - * IJobChangeListener) if synchronizing multiple queries at a time. - */ - public final Job synchronize(AbstractRepositoryConnector connector, final AbstractRepositoryQuery repositoryQuery, - IJobChangeListener listener) { - HashSet<AbstractRepositoryQuery> items = new HashSet<AbstractRepositoryQuery>(); - items.add(repositoryQuery); - return synchronize(connector, items, listener, Job.LONG, 0, true); - } - - public final Job synchronize(AbstractRepositoryConnector connector, - final Set<AbstractRepositoryQuery> repositoryQueries, IJobChangeListener listener, int priority, - long delay, boolean syncTasks) { - TaskList taskList = TasksUiPlugin.getTaskListManager().getTaskList(); - SynchronizeQueryJob job = new SynchronizeQueryJob(this, connector, repositoryQueries, taskList); - job.setSynchTasks(syncTasks); - for (AbstractRepositoryQuery repositoryQuery : repositoryQueries) { - repositoryQuery.setCurrentlySynchronizing(true); - } - if (listener != null) { - job.addJobChangeListener(listener); - } - job.setRule(rule); - job.setPriority(priority); - job.schedule(delay); - return job; - } - - /** - * Synchronizes only those tasks that have changed since the last time the - * given repository was synchronized. Calls to this method update - * TaskRepository.syncTime. - */ - public final void synchronizeChanged(final AbstractRepositoryConnector connector, final TaskRepository repository) { - if (connector.getOfflineTaskHandler() != null) { - final GetChangedTasksJob getChangedTasksJob = new GetChangedTasksJob(connector, repository); - getChangedTasksJob.setSystem(true); - getChangedTasksJob.setRule(new RepositoryMutexRule(repository)); - if (!forceSyncExecForTesting) { - getChangedTasksJob.schedule(); - } else { - PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { - public void run() { - getChangedTasksJob.run(new NullProgressMonitor()); - } - }); - } - } - } - - private class GetChangedTasksJob extends Job { - - private AbstractRepositoryConnector connector; - - private TaskRepository repository; - - public GetChangedTasksJob(AbstractRepositoryConnector connector, TaskRepository repository) { - super("Get Changed Tasks"); - this.connector = connector; - this.repository = repository; - } - - @Override - public IStatus run(IProgressMonitor monitor) { - TaskList taskList = TasksUiPlugin.getTaskListManager().getTaskList(); - Set<AbstractRepositoryTask> repositoryTasks = Collections.unmodifiableSet(taskList - .getRepositoryTasks(repository.getUrl())); - final Set<AbstractRepositoryTask> tasksToSync = new HashSet<AbstractRepositoryTask>(); - - Set<AbstractRepositoryTask> changedTasks = null; - try { - changedTasks = connector.getOfflineTaskHandler().getChangedSinceLastSync(repository, repositoryTasks, - TasksUiPlugin.getDefault().getProxySettings()); - - if (changedTasks != null) { - for (AbstractRepositoryTask task : changedTasks) { - if (task.getSyncState() == RepositoryTaskSyncState.SYNCHRONIZED - || task.getSyncState() == RepositoryTaskSyncState.INCOMING) { - tasksToSync.add(task); - } - } - } - - if (tasksToSync.size() == 0) { - return Status.OK_STATUS; - } - - synchronize(connector, tasksToSync, false, new JobChangeAdapter() { - - @Override - public void done(IJobChangeEvent event) { - if (!Platform.isRunning() || TasksUiPlugin.getRepositoryManager() == null) { - return; - } - Date mostRecent = new Date(0); - String mostRecentTimeStamp = repository.getSyncTimeStamp(); - for (AbstractRepositoryTask task : tasksToSync) { - Date taskModifiedDate; - - if (connector.getOfflineTaskHandler() != null && task.getTaskData() != null - && task.getTaskData().getLastModified() != null) { - taskModifiedDate = connector.getOfflineTaskHandler().getDateForAttributeType( - RepositoryTaskAttribute.DATE_MODIFIED, task.getTaskData().getLastModified()); - } else { - continue; - } - - if (taskModifiedDate != null && taskModifiedDate.after(mostRecent)) { - mostRecent = taskModifiedDate; - mostRecentTimeStamp = task.getTaskData().getLastModified(); - } - } - // TODO: Get actual time stamp of query from - // repository rather - // than above hack - TasksUiPlugin.getRepositoryManager().setSyncTime(repository, mostRecentTimeStamp, - TasksUiPlugin.getDefault().getRepositoriesFilePath()); - } - }); - - } catch (Exception e) { - if ((e instanceof CoreException && !(((CoreException) e).getStatus().getException() instanceof IOException))) { - MylarStatusHandler.log(e, "Could not determine modified tasks for " + repository.getUrl() + "."); - } else if (e instanceof UnsupportedEncodingException) { - MylarStatusHandler.log(e, "Could not determine modified tasks for " + repository.getUrl() + "."); - } else { - // ignore, indicates working offline - } - return Status.OK_STATUS; - } - try { - Thread.sleep(RETRY_DELAY); - } catch (InterruptedException e1) { - return Status.OK_STATUS; - } - - return Status.OK_STATUS; - }; - }; - - /** - * Precondition: offline file is removed upon submit to repository resulting - * in a synchronized state - * - * @return true if call results in change of syc state - */ - public synchronized boolean updateOfflineState(final AbstractRepositoryTask repositoryTask, - final RepositoryTaskData newTaskData, boolean forceSync) { - RepositoryTaskSyncState startState = repositoryTask.getSyncState(); - RepositoryTaskSyncState status = repositoryTask.getSyncState(); - - if (newTaskData == null) { - MylarStatusHandler.log("Download of " + repositoryTask.getDescription() + " from " - + repositoryTask.getRepositoryUrl() + " failed.", this); - return false; - } - - RepositoryTaskData offlineTaskData = repositoryTask.getTaskData(); - - if (newTaskData.hasLocalChanges()) { - // Special case for saving changes to local task data - status = RepositoryTaskSyncState.OUTGOING; - } else { - - switch (status) { - case OUTGOING: - if (!forceSync) { - // Never overwrite local task data unless forced - return false; - } - case CONFLICT: - // use a parameter rather than this null check - if (offlineTaskData != null) { - // TODO: pull this ui out of here - if (!forceSyncExecForTesting) { - PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { - public void run() { - updateLocalCopy = MessageDialog - .openQuestion( - null, - "Local Task Conflicts with Repository", - "Local copy of: " - + repositoryTask.getDescription() - + "\n\n on: " - + repositoryTask.getRepositoryUrl() - + "\n\n has changes, override local? \n\nNOTE: if you select No, only the new comment will be saved with the updated bug, all other changes will be lost."); - } - }); - } else { - updateLocalCopy = true; - } - if (!updateLocalCopy) { - newTaskData.setNewComment(offlineTaskData.getNewComment()); - newTaskData.setHasLocalChanges(true); - status = RepositoryTaskSyncState.CONFLICT; - } else { - newTaskData.setHasLocalChanges(false); - if (checkHasIncoming(repositoryTask, newTaskData)) { - status = RepositoryTaskSyncState.INCOMING; - } else { - status = RepositoryTaskSyncState.SYNCHRONIZED; - } - } - } else { - newTaskData.setHasLocalChanges(false); - status = RepositoryTaskSyncState.SYNCHRONIZED; - } - break; - case INCOMING: - if (!forceSync && checkHasIncoming(repositoryTask, newTaskData)) { - status = RepositoryTaskSyncState.INCOMING; - } else { - status = RepositoryTaskSyncState.SYNCHRONIZED; - } - break; - case SYNCHRONIZED: - if (checkHasIncoming(repositoryTask, newTaskData)) { - status = RepositoryTaskSyncState.INCOMING; - } else { - status = RepositoryTaskSyncState.SYNCHRONIZED; - } - break; - } - - if (status == RepositoryTaskSyncState.SYNCHRONIZED || repositoryTask.getLastSyncDateStamp() == null) { - repositoryTask.setLastSyncDateStamp(newTaskData.getLastModified()); - } - } - - repositoryTask.setTaskData(newTaskData); - repositoryTask.setSyncState(status); - saveOffline(newTaskData); - if (status == RepositoryTaskSyncState.INCOMING) { - repositoryTask.setNotified(false); - } - return startState != repositoryTask.getSyncState(); - - } - - /** public for testing purposes */ - public boolean checkHasIncoming(AbstractRepositoryTask repositoryTask, RepositoryTaskData newData) { - String lastModified = repositoryTask.getLastSyncDateStamp(); - if (newData != null) { - RepositoryTaskData oldTaskData = repositoryTask.getTaskData(); - if (oldTaskData != null) { - lastModified = oldTaskData.getLastModified(); - } else if (lastModified == null && repositoryTask.getSyncState() != RepositoryTaskSyncState.INCOMING) { - // both lastModified and oldTaskData is null! - // (don't have a sync time or any offline data) - // HACK: Assume this is a query hit. - // We can't get proper date stamp from query hits - // so mark read doesn't set proper date stamp. - // Once we have this data this should be fixed. - return false; - } - } - - RepositoryTaskAttribute modifiedDateAttribute = newData.getAttribute(RepositoryTaskAttribute.DATE_MODIFIED); - if (lastModified != null && modifiedDateAttribute != null && modifiedDateAttribute.getValue() != null) { - if (lastModified.trim().compareTo(modifiedDateAttribute.getValue().trim()) == 0 - && repositoryTask.getSyncState() != RepositoryTaskSyncState.INCOMING) { - // Only set to synchronized state if not in incoming state. - // Case of incoming->sync handled by markRead upon opening - // or a forced synchronization on the task only. - return false; - } - } - - return true; - - // DND - relves - // RepositoryTaskAttribute modifiedDateAttribute = - // newData.getAttribute(RepositoryTaskAttribute.DATE_MODIFIED); - // if (repositoryTask.getLastSyncDateStamp() != null && - // modifiedDateAttribute != null - // && modifiedDateAttribute.getValue() != null) { - // Date newModifiedDate = - // connector.getOfflineTaskHandler().getDateForAttributeType( - // RepositoryTaskAttribute.DATE_MODIFIED, - // modifiedDateAttribute.getValue()); - // Date oldModifiedDate = - // connector.getOfflineTaskHandler().getDateForAttributeType( - // RepositoryTaskAttribute.DATE_MODIFIED, lastModified); - // if (oldModifiedDate != null && newModifiedDate != null) { - // if (newModifiedDate.compareTo(oldModifiedDate) <= 0 && - // repositoryTask.getSyncState() != RepositoryTaskSyncState.INCOMING) { - // // Only move to synchronized state if not in incoming state. - // // Case of incoming->sync handled by markRead upon opening - // // or a forced synchronization on the task. - // return false; - // } - // } - // } - // return true; - } - - /** non-final for testing purposes */ - protected void removeOfflineTaskData(RepositoryTaskData bug) { - if (bug == null) - return; - - ArrayList<RepositoryTaskData> bugList = new ArrayList<RepositoryTaskData>(); - bugList.add(bug); - TasksUiPlugin.getDefault().getOfflineReportsFile().remove(bugList); - } - - /** - * @param repositoryTask - repository task to mark as read or unread - * @param read - true to mark as read, false to mark as unread - */ - public void setTaskRead(AbstractRepositoryTask repositoryTask, boolean read) { - if (read && repositoryTask.getSyncState().equals(RepositoryTaskSyncState.INCOMING)) { - if (repositoryTask.getTaskData() != null && repositoryTask.getTaskData().getLastModified() != null) { - repositoryTask.setLastSyncDateStamp(repositoryTask.getTaskData().getLastModified()); - } - repositoryTask.setSyncState(RepositoryTaskSyncState.SYNCHRONIZED); - TasksUiPlugin.getTaskListManager().getTaskList().notifyRepositoryInfoChanged(repositoryTask); - } else if (!read && repositoryTask.getSyncState().equals(RepositoryTaskSyncState.SYNCHRONIZED)) { - repositoryTask.setSyncState(RepositoryTaskSyncState.INCOMING); - TasksUiPlugin.getTaskListManager().getTaskList().notifyRepositoryInfoChanged(repositoryTask); - } - } - - /** - * For testing - */ - public final void setForceSyncExec(boolean forceSyncExec) { - this.forceSyncExecForTesting = forceSyncExec; - } - - private static class MutexRule implements ISchedulingRule { - public boolean isConflicting(ISchedulingRule rule) { - return rule == this; - } - - public boolean contains(ISchedulingRule rule) { - return rule == this; - } - } - - private static class RepositoryMutexRule implements ISchedulingRule { - - private TaskRepository repository = null; - - public RepositoryMutexRule(TaskRepository repository) { - this.repository = repository; - } - - public boolean isConflicting(ISchedulingRule rule) { - if (rule instanceof RepositoryMutexRule) { - return repository.equals(((RepositoryMutexRule) rule).getRepository()); - } else { - return false; - } - } - - public boolean contains(ISchedulingRule rule) { - return rule == this; - } - - public TaskRepository getRepository() { - return repository; - } - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/SynchronizeQueryJob.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/SynchronizeQueryJob.java deleted file mode 100644 index 1fc3724a0..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/SynchronizeQueryJob.java +++ /dev/null @@ -1,118 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.ui; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.Date; -import java.util.Set; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.context.core.util.DateUtil; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.QueryHitCollector; -import org.eclipse.mylar.tasks.core.TaskList; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.progress.IProgressConstants; - -/** - * @author Mik Kersten - */ -class SynchronizeQueryJob extends Job { - - private final AbstractRepositoryConnector connector; - - private static final String JOB_LABEL = "Synchronizing queries"; - - private Set<AbstractRepositoryQuery> queries; - - private boolean synchTasks; - - private TaskList taskList; - - public SynchronizeQueryJob(RepositorySynchronizationManager synchronizationManager, - AbstractRepositoryConnector connector, Set<AbstractRepositoryQuery> queries, TaskList taskList) { - super(JOB_LABEL + ": " + connector.getRepositoryType()); - this.connector = connector; - this.queries = queries; - this.taskList = taskList; - } - - @Override - protected IStatus run(IProgressMonitor monitor) { - monitor.beginTask(JOB_LABEL, queries.size()); - - for (AbstractRepositoryQuery repositoryQuery : queries) { - // if (repositoryQuery.isSynchronizing()) - // continue; - monitor.setTaskName("Synchronizing: " + repositoryQuery.getDescription()); - setProperty(IProgressConstants.ICON_PROPERTY, TaskListImages.REPOSITORY_SYNCHRONIZE); - // repositoryQuery.setCurrentlySynchronizing(true); - TaskRepository repository = TasksUiPlugin.getRepositoryManager().getRepository( - repositoryQuery.getRepositoryKind(), repositoryQuery.getRepositoryUrl()); - if (repository == null) { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - MessageDialog - .openInformation(Display.getDefault().getActiveShell(), TasksUiPlugin.TITLE_DIALOG, - "No task repository associated with this query. Open the query to associate it with a repository."); - } - }); - } - - QueryHitCollector collector = new QueryHitCollector(TasksUiPlugin.getTaskListManager().getTaskList()); - IStatus resultingStatus = connector.performQuery(repositoryQuery, repository, TasksUiPlugin.getDefault() - .getProxySettings(), monitor, collector); - - if (resultingStatus.getException() == null) { - repositoryQuery.updateHits(collector.getHits(), taskList); - if (synchTasks) { - // TODO: Should sync changed per repository not per - // query - TasksUiPlugin.getSynchronizationManager().synchronizeChanged(connector, repository); - } - } else if (!(resultingStatus.getException() instanceof IOException)) { - MylarStatusHandler.log(resultingStatus); - repositoryQuery.setCurrentlySynchronizing(false); - return Status.OK_STATUS; - } else if (resultingStatus.getException() instanceof FileNotFoundException) { - // can be caused by empty urlbase parameter on bugzilla - // server - MylarStatusHandler.log(resultingStatus); - repositoryQuery.setCurrentlySynchronizing(false); - return Status.OK_STATUS; - } else { - // assume working offline - return Status.OK_STATUS; - } - - repositoryQuery.setCurrentlySynchronizing(false); - repositoryQuery.setLastRefreshTimeStamp(DateUtil.getFormattedDate(new Date(), "MMM d, H:mm:ss")); - TasksUiPlugin.getTaskListManager().getTaskList().notifyContainerUpdated(repositoryQuery); - monitor.worked(1); - } - return Status.OK_STATUS; - } - - public void setSynchTasks(boolean syncTasks) { - this.synchTasks = syncTasks; - } -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/SynchronizeTaskJob.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/SynchronizeTaskJob.java deleted file mode 100644 index 7b48e6889..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/SynchronizeTaskJob.java +++ /dev/null @@ -1,183 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.tasks.ui; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.List; -import java.util.Set; - -import javax.security.auth.login.LoginException; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.TaskListImages; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.internal.tasks.ui.editors.MylarTaskEditor; -import org.eclipse.mylar.internal.tasks.ui.editors.TaskEditorInput; -import org.eclipse.mylar.internal.tasks.ui.views.TaskRepositoriesView; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.IOfflineTaskHandler; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask.RepositoryTaskSyncState; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.progress.IProgressConstants; - -/** - * @author Mik Kersten - * @author Rob Elves - */ -class SynchronizeTaskJob extends Job { - - private static final String LABEL_SYNCHRONIZING = "Synchronizing "; - - private static final String LABEL_SYNCHRONIZE_TASK = "Task Synchronization"; - - private final AbstractRepositoryConnector connector; - - // private final RepositorySynchronizationManager synchronizationManager; - - private Set<AbstractRepositoryTask> repositoryTasks; - - private boolean forceSync = false; - - public SynchronizeTaskJob(AbstractRepositoryConnector connector, Set<AbstractRepositoryTask> repositoryTasks) { - super(LABEL_SYNCHRONIZE_TASK + " (" + repositoryTasks.size() + " tasks)"); - this.connector = connector; - this.repositoryTasks = repositoryTasks; - // this.synchronizationManager = synchronizationManager; - } - - public void setForceSynch(boolean forceUpdate) { - this.forceSync = forceUpdate; - } - - @Override - public IStatus run(IProgressMonitor monitor) { - try { - monitor.beginTask(LABEL_SYNCHRONIZE_TASK, repositoryTasks.size()); - setProperty(IProgressConstants.ICON_PROPERTY, TaskListImages.REPOSITORY_SYNCHRONIZE); - - for (final AbstractRepositoryTask repositoryTask : repositoryTasks) { - if (monitor.isCanceled()) - throw new OperationCanceledException(); - - boolean canNotSynch = repositoryTask.isDirty(); - boolean hasLocalChanges = repositoryTask.getSyncState() == RepositoryTaskSyncState.OUTGOING - || repositoryTask.getSyncState() == RepositoryTaskSyncState.CONFLICT; - if (forceSync || (!canNotSynch && !hasLocalChanges) || !repositoryTask.isDownloaded()) { - monitor.setTaskName(LABEL_SYNCHRONIZING + repositoryTask.getDescription()); - // repositoryTask.setCurrentlySynchronizing(true); - TasksUiPlugin.getTaskListManager().getTaskList().notifyRepositoryInfoChanged(repositoryTask); - IOfflineTaskHandler offlineHandler = connector.getOfflineTaskHandler(); - if (offlineHandler != null) { - RepositoryTaskData downloadedTaskData = null; - try { - final TaskRepository repository = TasksUiPlugin.getRepositoryManager().getRepository( - repositoryTask.getRepositoryKind(), repositoryTask.getRepositoryUrl()); - if (repository == null) { - throw new CoreException(new Status(IStatus.ERROR, TasksUiPlugin.PLUGIN_ID, 0, - "Associated repository could not be found. Ensure proper repository configuration of " - + repositoryTask.getRepositoryUrl() + " in " - + TaskRepositoriesView.NAME + ".", null)); - } else { - downloadedTaskData = offlineHandler.downloadTaskData(repositoryTask, repository, - TasksUiPlugin.getDefault().getProxySettings()); - } - } catch (final LoginException e) { - MylarStatusHandler.fail(e, - "Report download failed. Ensure proper repository configuration of " - + repositoryTask.getRepositoryUrl() + " in " + TaskRepositoriesView.NAME - + ".", true); - // throw new CoreException(new Status(IStatus.ERROR, - // TasksUiPlugin.PLUGIN_ID, 0, "Report download - // failed. Ensure proper repository configuration of - // " + repositoryTask.getRepositoryUrl() + " in " - // + TaskRepositoriesView.NAME + ".", e )); - } catch (final CoreException e) { - if (e.getStatus().getException() instanceof LoginException) { - MylarStatusHandler.log(e.getStatus().getException(), "Login credentials are invalid for "+repositoryTask.getRepositoryUrl()); - } else if (!(e.getStatus().getException() instanceof IOException)) { - MylarStatusHandler.log(e.getStatus()); - } else if (e.getStatus().getException() instanceof FileNotFoundException) { - // can be caused by empty urlbase parameter on - // bugzilla server - MylarStatusHandler.log(e.getStatus()); - } else { - // >>> bug 154729 - // MylarStatusHandler.log(e.getStatus()); - } - continue; - } - - if (downloadedTaskData != null) { - TasksUiPlugin.getSynchronizationManager().updateOfflineState(repositoryTask, - downloadedTaskData, forceSync); - connector.updateTaskState(repositoryTask); - refreshEditors(repositoryTask); - } - } - repositoryTask.setCurrentlySynchronizing(false); - TasksUiPlugin.getTaskListManager().getTaskList().notifyRepositoryInfoChanged(repositoryTask); - - } else { - repositoryTask.setCurrentlySynchronizing(false); - } - - monitor.worked(1); - } - - // TasksUiPlugin.getDefault().getTaskListNotificationManager().startNotification(1); - - } catch (Exception e) { - MylarStatusHandler.fail(e, "Could not download report", false); - } finally { - monitor.done(); - } - - return Status.OK_STATUS; - } - - private void refreshEditors(final AbstractRepositoryTask repositoryTask) { - // TODO: move out of SynchronizeTaskJob (but beware of race conditions) - if (repositoryTask.getSyncState() == RepositoryTaskSyncState.INCOMING - || repositoryTask.getSyncState() == RepositoryTaskSyncState.CONFLICT) { - List<MylarTaskEditor> editors = TaskUiUtil.getActiveRepositoryTaskEditors(); - for (final MylarTaskEditor editor : editors) { - final TaskEditorInput input = (TaskEditorInput) editor.getEditorInput(); - if (input.getTask().getHandleIdentifier().equals(repositoryTask.getHandleIdentifier())) { - - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - if ((repositoryTask.getSyncState() == RepositoryTaskSyncState.INCOMING && MessageDialog - .openConfirm(null, "Stale Editor", - "Remote copy of report has changes. Refresh and open report?")) - || repositoryTask.getSyncState() == RepositoryTaskSyncState.CONFLICT) { - TaskUiUtil.closeEditorInActivePage(input.getTask()); - TaskUiUtil.refreshAndOpenTaskListElement(input.getTask()); - } - } - }); - } - } - } - } - -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/TaskListDataMigration.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/TaskListDataMigration.java deleted file mode 100644 index 3a7b604c1..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/TaskListDataMigration.java +++ /dev/null @@ -1,260 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.tasks.ui; - -import java.io.File; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.SubProgressMonitor; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.context.core.MylarContextManager; -import org.eclipse.mylar.internal.context.core.util.ZipFileUtil; -import org.eclipse.mylar.tasks.core.TaskRepositoryManager; - -/** - * Migrate 0.6 -> 0.7 mylar data format - * - * @author Rob Elves - */ -public class TaskListDataMigration implements IRunnableWithProgress { - - private File dataDirectory = null; - - public TaskListDataMigration(File sourceFolder) { - this.dataDirectory = sourceFolder; - } - - public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - try { - monitor.beginTask("Task Data Migration", IProgressMonitor.UNKNOWN); - doMigration(monitor); - } finally { - - } - } - - public void doMigration(IProgressMonitor monitor) { - try { - if(dataDirectory == null || !dataDirectory.exists()) return; - monitor.beginTask("Mylar Data Migration", 4); - migrateTaskList(new SubProgressMonitor(monitor, IProgressMonitor.UNKNOWN)); - monitor.worked(1); - migrateRepositoriesData(new SubProgressMonitor(monitor, IProgressMonitor.UNKNOWN)); - monitor.worked(1); - migrateTaskContextData(new SubProgressMonitor(monitor, IProgressMonitor.UNKNOWN)); - monitor.worked(1); - migrateActivityData(new SubProgressMonitor(monitor, IProgressMonitor.UNKNOWN)); - monitor.worked(1); - } finally { - monitor.done(); - } - } - - public boolean migrateTaskList(IProgressMonitor monitor) { - File oldTasklistFile = new File(dataDirectory, TasksUiPlugin.OLD_TASK_LIST_FILE); - File newTasklistFile = new File(dataDirectory, TasksUiPlugin.DEFAULT_TASK_LIST_FILE); - if (!oldTasklistFile.exists()) - return false; - if (newTasklistFile.exists()) { - if (!newTasklistFile.delete()) { - MylarStatusHandler.fail(null, "Could not overwrite tasklist", false); - return false; - } - } - ArrayList<File> filesToZip = new ArrayList<File>(); - filesToZip.add(oldTasklistFile); - try { - monitor.beginTask("Migrate Tasklist Data", 1); - ZipFileUtil.createZipFile(newTasklistFile, filesToZip, new SubProgressMonitor(monitor, 1)); - if (!oldTasklistFile.delete()) { - MylarStatusHandler.fail(null, "Could not remove old tasklist.", false); - return false; - } - monitor.worked(1); - } catch (Exception e) { - MylarStatusHandler.fail(e, "Error occurred while migrating old tasklist: " + e.getMessage(), true); - return false; - } finally { - monitor.done(); - } - return true; - } - - public boolean migrateRepositoriesData(IProgressMonitor monitor) { - File oldRepositoriesFile = new File(dataDirectory, TaskRepositoryManager.OLD_REPOSITORIES_FILE); - File newRepositoriesFile = new File(dataDirectory, TaskRepositoryManager.DEFAULT_REPOSITORIES_FILE); - if (!oldRepositoriesFile.exists()) - return false; - if (newRepositoriesFile.exists()) { - if (!newRepositoriesFile.delete()) { - MylarStatusHandler.fail(null, - "Could not overwrite repositories file. Check read/write permission on data directory.", false); - return false; - } - } - ArrayList<File> filesToZip = new ArrayList<File>(); - filesToZip.add(oldRepositoriesFile); - try { - monitor.beginTask("Migrate Repository Data", 1); - ZipFileUtil.createZipFile(newRepositoriesFile, filesToZip, new SubProgressMonitor(monitor, 1)); - if (!oldRepositoriesFile.delete()) { - MylarStatusHandler - .fail( - null, - "Could not remove old repositories file. Check read/write permission on data directory.", - false); - return false; - } - monitor.worked(1); - } catch (Exception e) { - MylarStatusHandler.fail(e, "Error occurred while migrating old repositories data: " + e.getMessage(), true); - return false; - } finally { - monitor.done(); - } - return true; - } - - public boolean migrateTaskContextData(IProgressMonitor monitor) { - ArrayList<File> contextFiles = new ArrayList<File>(); - for (File file : dataDirectory.listFiles()) { - if (file.getName().startsWith("http") || file.getName().startsWith("local") || file.getName().startsWith("task")) { - if (!file.getName().endsWith(".zip")) { - contextFiles.add(file); - } - } - } - - try { - monitor.beginTask("Task Context Migration", contextFiles.size()); - - File contextsFolder = new File(dataDirectory, MylarContextManager.CONTEXTS_DIRECTORY); - if (!contextsFolder.exists()) { - if (!contextsFolder.mkdir()) { - MylarStatusHandler.fail(null, - "Could not create contexts folder. Check read/write permission on data directory.", false); - return false; - } - } - for (File file : contextFiles) { - ArrayList<File> filesToZip = new ArrayList<File>(); - filesToZip.add(file); - File newContextFile = new File(contextsFolder, file.getName()+".zip"); - if (newContextFile.exists()) { - if (!newContextFile.delete()) { - MylarStatusHandler.fail(null, - "Could not overwrite context file. Check read/write permission on data directory.", - false); - return false; - } - } - ZipFileUtil.createZipFile(newContextFile, filesToZip, new SubProgressMonitor(monitor, 1)); - if (!file.delete()) { - MylarStatusHandler.fail(null, - "Could not remove old context file. Check read/write permission on data directory.", false); - return false; - } - monitor.worked(1); - } - } catch (Exception e) { - MylarStatusHandler.fail(e, "Error occurred while migrating old repositories data: " + e.getMessage(), true); - return false; - } finally { - monitor.done(); - } - return true; - } - - public boolean migrateActivityData(IProgressMonitor monitor) { - File oldActivityFile = new File(dataDirectory, MylarContextManager.OLD_CONTEXT_HISTORY_FILE_NAME+MylarContextManager.OLD_CONTEXT_FILE_EXTENSION); - if (!oldActivityFile.exists()) - return false; - - File contextsFolder = new File(dataDirectory, MylarContextManager.CONTEXTS_DIRECTORY); - if (!contextsFolder.exists()) { - if (!contextsFolder.mkdir()) { - MylarStatusHandler.fail(null, - "Could not create contexts folder. Check read/write permission on data directory.", false); - return false; - } - } - - File newActivityFile = new File(contextsFolder, MylarContextManager.CONTEXT_HISTORY_FILE_NAME+MylarContextManager.CONTEXT_FILE_EXTENSION); - - if (newActivityFile.exists()) { - if (!newActivityFile.delete()) { - MylarStatusHandler.fail(null, - "Could not overwrite activity file. Check read/write permission on data directory.", false); - return false; - } - } - ArrayList<File> filesToZip = new ArrayList<File>(); - filesToZip.add(oldActivityFile); - try { - monitor.beginTask("Migrate Activity Data", 1); - ZipFileUtil.createZipFile(newActivityFile, filesToZip, new SubProgressMonitor(monitor, 1)); - if (!oldActivityFile.delete()) { - MylarStatusHandler - .fail( - null, - "Could not remove old activity file. Check read/write permission on data directory.", - false); - return false; - } - monitor.worked(1); - } catch (Exception e) { - MylarStatusHandler.fail(e, "Error occurred while migrating old activity data: " + e.getMessage(), true); - return false; - } finally { - monitor.done(); - } - return true; - } - -} - -//public boolean migrateActivityData(IProgressMonitor monitor) { -//File oldActivityFile = new File(dataDirectory, MylarContextManager.OLD_CONTEXT_HISTORY_FILE_NAME+MylarContextManager.OLD_CONTEXT_FILE_EXTENSION); -//if (!oldActivityFile.exists()) -// return false; -// -//File newActivityFile = new File(dataDirectory, MylarContextManager.CONTEXT_HISTORY_FILE_NAME+MylarContextManager.CONTEXT_FILE_EXTENSION); -// -//if (newActivityFile.exists()) { -// if (!newActivityFile.delete()) { -// MylarStatusHandler.fail(null, -// "Could not overwrite activity file. Check read/write permission on data directory.", false); -// return false; -// } -//} -//ArrayList<File> filesToZip = new ArrayList<File>(); -//filesToZip.add(oldActivityFile); -//try { -// monitor.beginTask("Migrate Activity Data", 1); -// ZipFileUtil.createZipFile(newActivityFile, filesToZip, new SubProgressMonitor(monitor, 1)); -// if (!oldActivityFile.delete()) { -// MylarStatusHandler -// .fail( -// null, -// "Could not remove old activity file. Check read/write permission on data directory.", -// false); -// return false; -// } -// monitor.worked(1); -//} catch (Exception e) { -// MylarStatusHandler.fail(e, "Error occurred while migrating old activity data: " + e.getMessage(), true); -// return false; -//} finally { -// monitor.done(); -//} -//return true; -//}
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/TaskListManager.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/TaskListManager.java deleted file mode 100644 index 955dd19eb..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/TaskListManager.java +++ /dev/null @@ -1,816 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -/* - * Created on Dec 26, 2004 - */ -package org.eclipse.mylar.tasks.ui; - -import java.io.File; -import java.net.URLDecoder; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.Timer; -import java.util.TimerTask; - -import org.eclipse.core.runtime.Platform; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.mylar.context.core.ContextCorePlugin; -import org.eclipse.mylar.context.core.IMylarContext; -import org.eclipse.mylar.context.core.IMylarContextListener; -import org.eclipse.mylar.context.core.IMylarElement; -import org.eclipse.mylar.context.core.InteractionEvent; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.context.core.MylarContextManager; -import org.eclipse.mylar.internal.tasks.core.WebTask; -import org.eclipse.mylar.internal.tasks.ui.TaskListPreferenceConstants; -import org.eclipse.mylar.internal.tasks.ui.util.TaskListWriter; -import org.eclipse.mylar.internal.tasks.ui.views.TaskActivationHistory; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.DateRangeActivityDelegate; -import org.eclipse.mylar.tasks.core.DateRangeContainer; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskActivityListener; -import org.eclipse.mylar.tasks.core.TaskList; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.TaskRepositoryManager; - -/** - * TODO: clean-up - * - * @author Mik Kersten - * @author Rob Elves (task activity) - */ -public class TaskListManager implements IPropertyChangeListener { - - private static final long SECOND = 1000; - - private static final long MINUTE = 60 * SECOND; - - private static final long ROLLOVER_DELAY = 30 * MINUTE; - - private static final int NUM_WEEKS_PREVIOUS = -1; - - private static final int NUM_WEEKS_NEXT = 1; - - private static final int NUM_WEEKS_FUTURE_START = 2; - - private static final int NUM_WEEKS_FUTURE_END = 8; - - private static final int NUM_WEEKS_PAST_START = -8; - - private static final int NUM_WEEKS_PAST_END = -2; - - public static final String ARCHIVE_CATEGORY_DESCRIPTION = "Archive"; - - private static final String DESCRIPTION_THIS_WEEK = "This Week"; - - private static final String DESCRIPTION_PREVIOUS_WEEK = "Previous Week"; - - private static final String DESCRIPTION_NEXT_WEEK = "Next Week"; - - private static final String DESCRIPTION_FUTURE = "Future"; - - private static final String DESCRIPTION_PAST = "Past"; - - public static final String[] ESTIMATE_TIMES = new String[] { "0 Hours", "1 Hours", "2 Hours", "3 Hours", "4 Hours", - "5 Hours", "6 Hours", "7 Hours", "8 Hours", "9 Hours", "10 Hours" }; - - private DateRangeContainer activityThisWeek; - - private DateRangeContainer activityNextWeek; - - private DateRangeContainer activityPreviousWeek; - - private DateRangeContainer activityFuture; - - private DateRangeContainer activityPast; - - private boolean isInactive; - - private long startInactive; - - private long totalInactive; - - private ArrayList<DateRangeContainer> dateRangeContainers = new ArrayList<DateRangeContainer>(); - - private Set<ITask> tasksWithReminders = new HashSet<ITask>(); - - private ITask currentTask = null; - - private String currentHandle = ""; - - private Calendar currentTaskStart = null; - - private Calendar currentTaskEnd = null; - - private Map<ITask, Long> taskElapsedTimeMap = new HashMap<ITask, Long>(); - - private List<ITaskActivityListener> activityListeners = new ArrayList<ITaskActivityListener>(); - - private TaskListWriter taskListWriter; - - private File taskListFile; - - // TODO: guard against overwriting the single instance? - private TaskList taskList = new TaskList(); - - private TaskActivationHistory taskActivationHistory = new TaskActivationHistory(); - - private boolean taskListInitialized = false; - - private boolean taskActivityHistoryInitialized = false; - - private int startDay; - - private int endDay; - - private int scheduledEndHour; - - private Timer timer; - - /** public for testing */ - public Date startTime = new Date(); - - private final IMylarContextListener CONTEXT_LISTENER = new IMylarContextListener() { - - public void contextActivated(IMylarContext context) { - parseTaskActivityInteractionHistory(); - } - - public void contextDeactivated(IMylarContext context) { - // ignore - } - - public void presentationSettingsChanging(UpdateKind kind) { - // ignore - } - - public void presentationSettingsChanged(UpdateKind kind) { - // ignore - } - - public void interestChanged(List<IMylarElement> elements) { - List<InteractionEvent> events = ContextCorePlugin.getContextManager().getActivityHistoryMetaContext() - .getInteractionHistory(); - InteractionEvent event = events.get(events.size() - 1); - parseInteractionEvent(event); - } - - public void nodeDeleted(IMylarElement element) { - // ignore - } - - public void landmarkAdded(IMylarElement element) { - // ignore - } - - public void landmarkRemoved(IMylarElement element) { - // ignore - } - - public void edgesChanged(IMylarElement element) { - // ignore - } - }; - - public TaskListManager(TaskListWriter taskListWriter, File file) { - this.taskListFile = file; - this.taskListWriter = taskListWriter; - - timer = new Timer(); - timer.schedule(new RolloverCheck(), ROLLOVER_DELAY, ROLLOVER_DELAY); - } - - public void init() { - ContextCorePlugin.getContextManager().addActivityMetaContextListener(CONTEXT_LISTENER); - } - - public void dispose() { - ContextCorePlugin.getContextManager().removeActivityMetaContextListener(CONTEXT_LISTENER); - } - - public TaskList resetTaskList() { - resetActivity(); - taskList.reset(); - taskListInitialized = true; - return taskList; - } - - private void resetActivity() { - taskElapsedTimeMap.clear(); - dateRangeContainers.clear(); - setupCalendarRanges(); - } - - private void parseTaskActivityInteractionHistory() { - if (!TasksUiPlugin.getTaskListManager().isTaskListInitialized()) { - return; - } - List<InteractionEvent> events = ContextCorePlugin.getContextManager().getActivityHistoryMetaContext() - .getInteractionHistory(); - for (InteractionEvent event : events) { - parseInteractionEvent(event); - } - taskActivityHistoryInitialized = true; - } - - private void parseFutureReminders() { - activityFuture.clear(); - activityNextWeek.clear(); - HashSet<ITask> toRemove = new HashSet<ITask>(); - toRemove.addAll(activityThisWeek.getChildren()); - for (ITask activity : toRemove) { - DateRangeActivityDelegate delegate = (DateRangeActivityDelegate) activity; - Calendar calendar = GregorianCalendar.getInstance(); - if (delegate.getReminderDate() != null) { - calendar.setTime(delegate.getReminderDate()); - if (!activityThisWeek.includes(calendar) && activityThisWeek.getElapsed(delegate) == 0) { - activityThisWeek.remove(delegate); - } - } else { - if (activityThisWeek.getElapsed(delegate) == 0) { - activityThisWeek.remove(delegate); - } - } - } - GregorianCalendar tempCalendar = new GregorianCalendar(); - tempCalendar.setFirstDayOfWeek(startDay); - for (ITask task : tasksWithReminders) { - if (task.getReminderDate() != null) { - tempCalendar.setTime(task.getReminderDate()); - if (activityNextWeek.includes(tempCalendar)) { - activityNextWeek.addTask(new DateRangeActivityDelegate(activityNextWeek, task, tempCalendar, - tempCalendar)); - } else if (activityFuture.includes(tempCalendar)) { - activityFuture.addTask(new DateRangeActivityDelegate(activityFuture, task, tempCalendar, - tempCalendar)); - } else if (activityThisWeek.includes(tempCalendar) && !activityThisWeek.getChildren().contains(task)) { - activityThisWeek.addTask(new DateRangeActivityDelegate(activityThisWeek, task, tempCalendar, - tempCalendar)); - } - } - } - } - - /** public for testing * */ - public void parseInteractionEvent(InteractionEvent event) { - if (event.getDelta().equals(MylarContextManager.ACTIVITY_DELTA_ACTIVATED)) { - if (!event.getStructureHandle().equals(MylarContextManager.ACTIVITY_HANDLE_ATTENTION)) { - if (isInactive) { - isInactive = false; - totalInactive = 0; - startInactive = 0; - } - currentTask = TasksUiPlugin.getTaskListManager().getTaskList().getTask(event.getStructureHandle()); - if (currentTask != null) { - GregorianCalendar calendar = new GregorianCalendar(); - calendar.setFirstDayOfWeek(startDay); - calendar.setTime(event.getDate()); - currentTaskStart = calendar; - currentHandle = event.getStructureHandle(); - } - } else if (event.getStructureHandle().equals(MylarContextManager.ACTIVITY_HANDLE_ATTENTION) && isInactive) { - isInactive = false; - totalInactive += event.getDate().getTime() - startInactive; - } - } else if (event.getDelta().equals(MylarContextManager.ACTIVITY_DELTA_DEACTIVATED)) { - if (!event.getStructureHandle().equals(MylarContextManager.ACTIVITY_HANDLE_ATTENTION) - && currentHandle.equals(event.getStructureHandle())) { - GregorianCalendar calendarEnd = new GregorianCalendar(); - calendarEnd.setFirstDayOfWeek(startDay); - calendarEnd.setTime(event.getDate()); - calendarEnd.getTime(); - currentTaskEnd = calendarEnd; - if (isInactive) { - isInactive = false; - totalInactive += event.getDate().getTime() - startInactive; - } - for (DateRangeContainer week : dateRangeContainers) { - if (week.includes(currentTaskStart)) { - if (currentTask != null) { - // add to date range 'bin' - DateRangeActivityDelegate delegate = new DateRangeActivityDelegate(week, currentTask, - currentTaskStart, currentTaskEnd, totalInactive); - week.addTask(delegate); - // add to running total - if (taskElapsedTimeMap.containsKey(currentTask)) { - taskElapsedTimeMap.put(currentTask, taskElapsedTimeMap.get(currentTask) - + delegate.getActivity()); - } else { - taskElapsedTimeMap.put(currentTask, delegate.getActivity()); - } - if (taskActivityHistoryInitialized) { - for (ITaskActivityListener listener : activityListeners) { - listener.activityChanged(week); - } - } - } - } - } - currentTask = null; - currentHandle = ""; - totalInactive = 0; - startInactive = 0; - } else if (event.getStructureHandle().equals(MylarContextManager.ACTIVITY_HANDLE_ATTENTION) && !isInactive) { - if (!currentHandle.equals("")) { - isInactive = true; - startInactive = event.getDate().getTime(); - } - } - } - } - - /** public for testing * */ - public DateRangeContainer getActivityThisWeek() { - return activityThisWeek; - } - - /** public for testing * */ - public DateRangeContainer getActivityPast() { - return activityPast; - } - - /** public for testing * */ - public DateRangeContainer getActivityFuture() { - return activityFuture; - } - - /** public for testing * */ - public DateRangeContainer getActivityNextWeek() { - return activityNextWeek; - } - - /** public for testing * */ - public DateRangeContainer getActivityPrevious() { - return activityPreviousWeek; - } - - /** total elapsed time based on activation history */ - public long getElapsedTime(ITask task) { - long unaccounted = 0; - if (task.equals(currentTask)) { - unaccounted = Calendar.getInstance().getTimeInMillis() - currentTaskStart.getTimeInMillis() - totalInactive; - unaccounted = unaccounted < 0 ? 0 : unaccounted; - } - if (taskElapsedTimeMap.containsKey(task)) { - return unaccounted + taskElapsedTimeMap.get(task); - } else { - return 0; - } - } - - private void setupCalendarRanges() { - // MylarTaskListPlugin.getMylarCorePrefs().getInt(TaskListPreferenceConstants.PLANNING_STARTDAY); - startDay = Calendar.MONDAY; - // MylarTaskListPlugin.getMylarCorePrefs().getInt(TaskListPreferenceConstants.PLANNING_ENDDAY); - endDay = Calendar.SUNDAY; - // scheduledStartHour = - // TasksUiPlugin.getDefault().getPreferenceStore().getInt( - // TaskListPreferenceConstants.PLANNING_STARTHOUR); - scheduledEndHour = TasksUiPlugin.getDefault().getPreferenceStore().getInt( - TaskListPreferenceConstants.PLANNING_ENDHOUR); - - GregorianCalendar currentBegin = new GregorianCalendar(); - currentBegin.setFirstDayOfWeek(startDay); - currentBegin.setTime(startTime); - snapToStartOfWeek(currentBegin); - GregorianCalendar currentEnd = new GregorianCalendar(); - currentEnd.setFirstDayOfWeek(startDay); - currentEnd.setTime(startTime); - snapToEndOfWeek(currentEnd); - activityThisWeek = new DateRangeContainer(currentBegin, currentEnd, DESCRIPTION_THIS_WEEK, taskList); - dateRangeContainers.add(activityThisWeek); - - GregorianCalendar previousStart = new GregorianCalendar(); - previousStart.setFirstDayOfWeek(startDay); - previousStart.setTime(startTime); - previousStart.add(Calendar.WEEK_OF_YEAR, NUM_WEEKS_PREVIOUS); - snapToStartOfWeek(previousStart); - GregorianCalendar previousEnd = new GregorianCalendar(); - previousEnd.setFirstDayOfWeek(startDay); - previousEnd.setTime(startTime); - previousEnd.add(Calendar.WEEK_OF_YEAR, NUM_WEEKS_PREVIOUS); - snapToEndOfWeek(previousEnd); - activityPreviousWeek = new DateRangeContainer(previousStart.getTime(), previousEnd.getTime(), - DESCRIPTION_PREVIOUS_WEEK, taskList); - dateRangeContainers.add(activityPreviousWeek); - - GregorianCalendar nextStart = new GregorianCalendar(); - nextStart.setFirstDayOfWeek(startDay); - nextStart.setTime(startTime); - nextStart.add(Calendar.WEEK_OF_YEAR, NUM_WEEKS_NEXT); - snapToStartOfWeek(nextStart); - GregorianCalendar nextEnd = new GregorianCalendar(); - nextEnd.setFirstDayOfWeek(startDay); - nextEnd.setTime(startTime); - nextEnd.add(Calendar.WEEK_OF_YEAR, NUM_WEEKS_NEXT); - snapToEndOfWeek(nextEnd); - activityNextWeek = new DateRangeContainer(nextStart.getTime(), nextEnd.getTime(), DESCRIPTION_NEXT_WEEK, - taskList); - dateRangeContainers.add(activityNextWeek); - - GregorianCalendar futureStart = new GregorianCalendar(); - futureStart.setFirstDayOfWeek(startDay); - futureStart.setTime(startTime); - futureStart.add(Calendar.WEEK_OF_YEAR, NUM_WEEKS_FUTURE_START); - snapToStartOfWeek(futureStart); - GregorianCalendar futureEnd = new GregorianCalendar(); - futureEnd.setFirstDayOfWeek(startDay); - futureEnd.setTime(startTime); - futureEnd.add(Calendar.WEEK_OF_YEAR, NUM_WEEKS_FUTURE_END); - snapToEndOfWeek(futureEnd); - activityFuture = new DateRangeContainer(futureStart.getTime(), futureEnd.getTime(), DESCRIPTION_FUTURE, - taskList); - dateRangeContainers.add(activityFuture); - - GregorianCalendar pastStart = new GregorianCalendar(); - pastStart.setFirstDayOfWeek(startDay); - pastStart.setTime(startTime); - pastStart.add(Calendar.WEEK_OF_YEAR, NUM_WEEKS_PAST_START); - snapToStartOfWeek(pastStart); - GregorianCalendar pastEnd = new GregorianCalendar(); - pastEnd.setFirstDayOfWeek(startDay); - pastEnd.setTime(startTime); - pastEnd.add(Calendar.WEEK_OF_YEAR, NUM_WEEKS_PAST_END); - snapToEndOfWeek(pastEnd); - activityPast = new DateRangeContainer(pastStart.getTime(), pastEnd.getTime(), DESCRIPTION_PAST, taskList); - dateRangeContainers.add(activityPast); - } - - private void snapToStartOfWeek(GregorianCalendar cal) { - cal.getTime(); - cal.set(Calendar.DAY_OF_WEEK, startDay); - cal.set(Calendar.HOUR_OF_DAY, 0); - cal.set(Calendar.MINUTE, 0); - cal.set(Calendar.SECOND, 0); - cal.set(Calendar.MILLISECOND, 0); - cal.getTime(); - } - - private void snapToEndOfWeek(GregorianCalendar cal) { - cal.getTime(); - cal.set(Calendar.DAY_OF_WEEK, endDay); - cal.set(Calendar.HOUR_OF_DAY, cal.getMaximum(Calendar.HOUR_OF_DAY)); - cal.set(Calendar.MINUTE, cal.getMaximum(Calendar.MINUTE)); - cal.set(Calendar.SECOND, cal.getMaximum(Calendar.SECOND)); - cal.set(Calendar.MILLISECOND, cal.getMaximum(Calendar.MILLISECOND)); - cal.getTime(); - } - - public Calendar setSecheduledIn(Calendar calendar, int days) { - calendar.add(Calendar.DAY_OF_MONTH, days); - calendar.set(Calendar.HOUR_OF_DAY, scheduledEndHour); - calendar.set(Calendar.MINUTE, 0); - calendar.set(Calendar.SECOND, 0); - calendar.set(Calendar.MILLISECOND, 0); - return calendar; - } - - /** - * Will schedule for today if past work-day's end. - */ - public Calendar setScheduledToday(Calendar calendar) { - Calendar now = Calendar.getInstance(); - if (now.get(Calendar.HOUR_OF_DAY) >= scheduledEndHour) { - setSecheduledIn(calendar, 1); - } - calendar.set(Calendar.HOUR_OF_DAY, scheduledEndHour); - calendar.set(Calendar.MINUTE, 0); - calendar.set(Calendar.SECOND, 0); - calendar.set(Calendar.MILLISECOND, 0); - return calendar; - } - - public Object[] getDateRanges() { - // parseFutureReminders(); - return dateRangeContainers.toArray(); - } - - public String genUniqueTaskHandle() { - int nextId = taskList.findLargestTaskHandle() + 1; - return TaskRepositoryManager.PREFIX_LOCAL + nextId;// nextLocalTaskId++; - } - - public void refactorRepositoryUrl(String oldUrl, String newUrl) { - if (oldUrl == null || newUrl == null || oldUrl.equals(newUrl)) { - return; - } - List<ITask> activeTasks = taskList.getActiveTasks(); - for (ITask task : new ArrayList<ITask>(activeTasks)) { - deactivateTask(task); - } - taskList.refactorRepositoryUrl(oldUrl, newUrl); - - File dataDir = new File(TasksUiPlugin.getDefault().getDataDirectory(), MylarContextManager.CONTEXTS_DIRECTORY); - if (dataDir.exists() && dataDir.isDirectory()) { - for (File file : dataDir.listFiles()) { - int dotIndex = file.getName().lastIndexOf(".xml"); - if (dotIndex != -1) { - String storedHandle; - try { - storedHandle = URLDecoder.decode(file.getName().substring(0, dotIndex), - MylarContextManager.CONTEXT_FILENAME_ENCODING); - int delimIndex = storedHandle.lastIndexOf(AbstractRepositoryTask.HANDLE_DELIM); - if (delimIndex != -1) { - String storedUrl = storedHandle.substring(0, delimIndex); - if (oldUrl.equals(storedUrl)) { - String id = AbstractRepositoryTask.getTaskId(storedHandle); - String newHandle = AbstractRepositoryTask.getHandle(newUrl, id); - File newFile = ContextCorePlugin.getContextManager().getFileForContext(newHandle); - file.renameTo(newFile); - } - } - } catch (Exception e) { - MylarStatusHandler.fail(e, "Could not move context file: " + file.getName(), false); - } - } - } - } - saveTaskList(); - } - - public boolean readExistingOrCreateNewList() { - try { - if (taskListFile.exists()) { - taskListWriter.readTaskList(taskList, taskListFile); - } else { - resetTaskList(); - } - - for (ITask task : taskList.getAllTasks()) { - if (task.getReminderDate() != null)// && task.hasBeenReminded() - // != true - tasksWithReminders.add(task); - } - resetActivity(); - parseFutureReminders(); - taskListInitialized = true; - for (ITaskActivityListener listener : new ArrayList<ITaskActivityListener>(activityListeners)) { - listener.taskListRead(); - } - - // only activate the first task to avoid confusion of mutliple - // active tasks on startup - if (taskList.getActiveTask() != null) { - activateTask(taskList.getActiveTask()); - } - parseTaskActivityInteractionHistory(); - taskActivationHistory.loadPersistentHistory(); - } catch (Exception e) { - MylarStatusHandler.log(e, "Could not read task list"); - return false; - } - return true; - } - - /** - * Will not save an empty task list to avoid losing data on bad startup. - */ - public void saveTaskList() { - try { - if (taskListInitialized) { - taskListWriter.writeTaskList(taskList, taskListFile); - // TasksUiPlugin.getDefault().getPreferenceStore().setValue(TaskListPreferenceConstants.TASK_ID, - // nextLocalTaskId); - } else { - MylarStatusHandler.log("task list save attempted before initialization", this); - } - } catch (Exception e) { - MylarStatusHandler.fail(e, "Could not save task list", true); - } - } - - public TaskList getTaskList() { - return taskList; - } - - public void addActivityListener(ITaskActivityListener listener) { - activityListeners.add(listener); - } - - public void removeActivityListener(ITaskActivityListener listener) { - activityListeners.remove(listener); - } - - public void activateTask(ITask task) { - if (!TasksUiPlugin.getDefault().isMultipleActiveTasksMode()) { - deactivateAllTasks(); - } - - try { - taskList.setActive(task, true); - for (ITaskActivityListener listener : new ArrayList<ITaskActivityListener>(activityListeners)) { - listener.taskActivated(task); - } - } catch (Throwable t) { - MylarStatusHandler.fail(t, "could not activate task", false); - } - } - - public void deactivateAllTasks() { - // Make a copy to avoid modification on list being traversed; can result - // in a ConcurrentModificationException - List<ITask> activeTasks = new ArrayList<ITask>(taskList.getActiveTasks()); - for (ITask task : activeTasks) { - deactivateTask(task); - } - } - - public void deactivateTask(ITask task) { - if (task == null) { - return; - } - - if (task.isActive()) { - taskList.setActive(task, false); - for (ITaskActivityListener listener : new ArrayList<ITaskActivityListener>(activityListeners)) { - try { - listener.taskDeactivated(task); - } catch (Throwable t) { - MylarStatusHandler.fail(t, "notification failed for: " + listener, false); - } - } - } - } - - public void setTaskListFile(File file) { - this.taskListFile = file; - } - - public boolean isTaskListInitialized() { - return taskListInitialized; - } - - public TaskListWriter getTaskListWriter() { - return taskListWriter; - } - - public File getTaskListFile() { - return taskListFile; - } - - public boolean isActiveThisWeek(ITask task) { - for (ITask activityDelegateTask : activityThisWeek.getChildren()) { - if (activityDelegateTask.getHandleIdentifier().equals(task.getHandleIdentifier())) { - return true; - } - } - return false; - } - - public boolean isCompletedToday(ITask task) { - if (task != null) { - - if (task instanceof AbstractRepositoryTask && !(task instanceof WebTask)) { - AbstractRepositoryTask repositoryTask = (AbstractRepositoryTask) task; - TaskRepository repository = TasksUiPlugin.getRepositoryManager().getRepository( - repositoryTask.getRepositoryKind(), repositoryTask.getRepositoryUrl()); - if (repository != null && repositoryTask.getOwner() != null - && !repositoryTask.getOwner().equals(repository.getUserName())) - return false; - } - - Date completionDate = task.getCompletionDate(); - if (completionDate != null) { - Calendar tomorrow = Calendar.getInstance(); - TasksUiPlugin.getTaskListManager().setSecheduledIn(tomorrow, 1); - - Calendar yesterday = Calendar.getInstance(); - yesterday.set(Calendar.HOUR_OF_DAY, 0); - yesterday.set(Calendar.MINUTE, 0); - yesterday.set(Calendar.SECOND, 0); - yesterday.set(Calendar.MILLISECOND, 0); - - return completionDate.compareTo(yesterday.getTime()) == 1 - && completionDate.compareTo(tomorrow.getTime()) == -1; - } - } - return false; - } - - public boolean isReminderAfterThisWeek(ITask task) { - if (task != null) { - Date reminder = task.getReminderDate(); - if (reminder != null) { - return reminder.compareTo(activityNextWeek.getStart().getTime()) > -1; - } - } - return false; - } - - public boolean isReminderLater(ITask task) { - if (task != null) { - Date reminder = task.getReminderDate(); - if (reminder != null) { - return reminder.compareTo(activityFuture.getStart().getTime()) > -1; - } - } - return false; - } - - public boolean isReminderThisWeek(ITask task) { - if (task != null) { - Date reminder = task.getReminderDate(); - if (reminder != null) { - Date now = new Date(); - return (reminder.compareTo(now) == 1 && reminder.compareTo(activityThisWeek.getEnd().getTime()) == -1); - } - } - return false; - } - - public boolean isReminderToday(ITask task) { - if (task != null) { - Date reminder = task.getReminderDate(); - if (reminder != null) { - Date now = new Date(); - Calendar tomorrow = GregorianCalendar.getInstance(); - TasksUiPlugin.getTaskListManager().setSecheduledIn(tomorrow, 1); - return (reminder.compareTo(now) == 1 && reminder.compareTo(tomorrow.getTime()) == -1); - } - } - return false; - } - - /** - * TODO: Need to migrate to use of this method for setting of reminders - */ - public void setReminder(ITask task, Date reminderDate) { - task.setReminderDate(reminderDate); - task.setReminded(false); - if (reminderDate == null) { - tasksWithReminders.remove(task); - } else { - tasksWithReminders.add(task); - } - parseFutureReminders(); - taskList.notifyLocalInfoChanged(task); - } - - public void propertyChange(PropertyChangeEvent event) { - if (event.getProperty().equals(TaskListPreferenceConstants.PLANNING_STARTHOUR) - || event.getProperty().equals(TaskListPreferenceConstants.PLANNING_ENDHOUR)) { - // event.getProperty().equals(TaskListPreferenceConstants.PLANNING_STARTDAY) - // scheduledStartHour = - // TasksUiPlugin.getDefault().getPreferenceStore().getInt( - // TaskListPreferenceConstants.PLANNING_STARTHOUR); - scheduledEndHour = TasksUiPlugin.getDefault().getPreferenceStore().getInt( - TaskListPreferenceConstants.PLANNING_ENDHOUR); - } - } - - /** public for testing */ - public void resetAndRollOver() { - taskActivityHistoryInitialized = false; - tasksWithReminders.clear(); - for (ITask task : taskList.getAllTasks()) { - if (task.getReminderDate() != null) { - tasksWithReminders.add(task); - } - } - resetActivity(); - parseFutureReminders(); - parseTaskActivityInteractionHistory(); - for (ITaskActivityListener listener : activityListeners) { - listener.calendarChanged(); - } - } - - private class RolloverCheck extends TimerTask { - - @Override - public void run() { - if (!Platform.isRunning() || ContextCorePlugin.getDefault() == null) { - return; - } else { - Calendar now = GregorianCalendar.getInstance(); - DateRangeContainer thisWeek = getActivityThisWeek(); - if (!thisWeek.includes(now)) { - startTime = new Date(); - resetAndRollOver(); - } - } - } - } - - public TaskActivationHistory getTaskActivationHistory() { - return taskActivationHistory; - } - -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/TaskTransfer.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/TaskTransfer.java deleted file mode 100644 index 9e257dc6e..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/TaskTransfer.java +++ /dev/null @@ -1,105 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.tasks.ui; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.swt.dnd.ByteArrayTransfer; -import org.eclipse.swt.dnd.TransferData; - -/** - * @author Mik Kersten - */ -public class TaskTransfer extends ByteArrayTransfer { - - private static final TaskTransfer INSTANCE = new TaskTransfer(); - - private static final String TYPE_NAME = "task-transfer-format:" + System.currentTimeMillis() + ":" + INSTANCE.hashCode(); - - private static final int TYPEID = registerType(TYPE_NAME); - - private TaskTransfer() { - } - - public static TaskTransfer getInstance() { - return INSTANCE; - } - - protected int[] getTypeIds() { - return new int[] { TYPEID }; - } - - protected String[] getTypeNames() { - return new String[] { TYPE_NAME }; - } - - protected void javaToNative(Object data, TransferData transferData) { - if (!(data instanceof ITask[])) { - return; - } - - ITask[] tasks = (ITask[]) data; - int resourceCount = tasks.length; - - try { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - DataOutputStream dataOut = new DataOutputStream(out); - - //write the number of resources - dataOut.writeInt(resourceCount); - - //write each resource - for (int i = 0; i < tasks.length; i++) { - writeResource(dataOut, tasks[i]); - } - - //cleanup - dataOut.close(); - out.close(); - byte[] bytes = out.toByteArray(); - super.javaToNative(bytes, transferData); - } catch (IOException e) { - //it's best to send nothing if there were problems - } - } - - protected Object nativeToJava(TransferData transferData) { - byte[] bytes = (byte[]) super.nativeToJava(transferData); - if (bytes == null) { - return null; - } - DataInputStream in = new DataInputStream( - new ByteArrayInputStream(bytes)); - try { - int count = in.readInt(); - ITask[] results = new ITask[count]; - for (int i = 0; i < count; i++) { - results[i] = readTask(in); - } - return results; - } catch (IOException e) { - return null; - } - } - - private ITask readTask(DataInputStream dataIn) throws IOException { - String handle = dataIn.readUTF(); - return TasksUiPlugin.getTaskListManager().getTaskList().getTask(handle); - } - - private void writeResource(DataOutputStream dataOut, ITask task) - throws IOException { - dataOut.writeUTF(task.getHandleIdentifier()); - } -} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/TasksUiPlugin.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/TasksUiPlugin.java deleted file mode 100644 index 5ec0e55e8..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/TasksUiPlugin.java +++ /dev/null @@ -1,962 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.tasks.ui; - -import java.io.File; -import java.net.InetSocketAddress; -import java.net.Proxy; -import java.net.Proxy.Type; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.ProjectScope; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Preferences.IPropertyChangeListener; -import org.eclipse.core.runtime.Preferences.PropertyChangeEvent; -import org.eclipse.core.runtime.preferences.IEclipsePreferences; -import org.eclipse.core.runtime.preferences.IScopeContext; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.text.hyperlink.IHyperlinkDetector; -import org.eclipse.mylar.context.core.ContextCorePlugin; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.context.core.MylarPreferenceContstants; -import org.eclipse.mylar.internal.tasks.core.WebClientUtil; -import org.eclipse.mylar.internal.tasks.ui.IDynamicSubMenuContributor; -import org.eclipse.mylar.internal.tasks.ui.ITaskEditorFactory; -import org.eclipse.mylar.internal.tasks.ui.ITaskHighlighter; -import org.eclipse.mylar.internal.tasks.ui.ITaskListNotification; -import org.eclipse.mylar.internal.tasks.ui.ITaskListNotificationProvider; -import org.eclipse.mylar.internal.tasks.ui.OfflineTaskManager; -import org.eclipse.mylar.internal.tasks.ui.TaskListBackupManager; -import org.eclipse.mylar.internal.tasks.ui.TaskListColorsAndFonts; -import org.eclipse.mylar.internal.tasks.ui.TaskListNotificationIncoming; -import org.eclipse.mylar.internal.tasks.ui.TaskListNotificationManager; -import org.eclipse.mylar.internal.tasks.ui.TaskListNotificationQueryIncoming; -import org.eclipse.mylar.internal.tasks.ui.TaskListNotificationReminder; -import org.eclipse.mylar.internal.tasks.ui.TaskListPreferenceConstants; -import org.eclipse.mylar.internal.tasks.ui.TaskListSynchronizationScheduler; -import org.eclipse.mylar.internal.tasks.ui.util.TaskListSaveManager; -import org.eclipse.mylar.internal.tasks.ui.util.TaskListWriter; -import org.eclipse.mylar.internal.tasks.ui.util.TasksUiExtensionReader; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.DateRangeContainer; -import org.eclipse.mylar.tasks.core.IOfflineTaskHandler; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskActivityListener; -import org.eclipse.mylar.tasks.core.RepositoryTaskAttribute; -import org.eclipse.mylar.tasks.core.Task; -import org.eclipse.mylar.tasks.core.TaskComment; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.TaskRepositoryManager; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask.RepositoryTaskSyncState; -import org.eclipse.swt.graphics.Image; -import org.eclipse.ui.IStartup; -import org.eclipse.ui.IWindowListener; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.plugin.AbstractUIPlugin; -import org.eclipse.update.internal.core.UpdateCore; -import org.osgi.framework.BundleContext; -import org.osgi.service.prefs.BackingStoreException; - -/** - * @author Mik Kersten - * - * TODO: this class is in serious need of refactoring - */ -public class TasksUiPlugin extends AbstractUIPlugin implements IStartup { - - // TODO: move constants - - public static final String DEFAULT_BACKUP_FOLDER_NAME = "backup"; - - public static final String FILE_EXTENSION = ".xml.zip"; - - public static final String OLD_TASK_LIST_FILE = "tasklist.xml"; - - public static final String DEFAULT_TASK_LIST_FILE = "tasklist" + FILE_EXTENSION; - - public static final String TITLE_DIALOG = "Mylar Information"; - - public static final String PLUGIN_ID = "org.eclipse.mylar.tasklist"; - - public static final String URL_HOMEPAGE = "http://eclipse.org/mylar"; - - private static final String PROPERTY_PREFIX = "project.repository"; - - private static final String PROJECT_REPOSITORY_KIND = PROPERTY_PREFIX + ".kind"; - - private static final String PROJECT_REPOSITORY_URL = PROPERTY_PREFIX +".url"; - - private static final String NAME_DATA_DIR = ".mylar"; - - private static final char DEFAULT_PATH_SEPARATOR = '/'; - - private static final int NOTIFICATION_DELAY = 5000; - - private static TasksUiPlugin INSTANCE; - - private static TaskListManager taskListManager; - - private static TaskRepositoryManager taskRepositoryManager; - - private static TaskListSynchronizationScheduler synchronizationScheduler; - - private static RepositorySynchronizationManager synchronizationManager; - - private static Map<String, AbstractRepositoryConnectorUi> repositoryConnectorUis = new HashMap<String, AbstractRepositoryConnectorUi>(); - - private TaskListSaveManager taskListSaveManager; - - private TaskListNotificationManager taskListNotificationManager; - - private TaskListBackupManager taskListBackupManager; - - private OfflineTaskManager offlineTaskManager; - - private List<ITaskEditorFactory> taskEditors = new ArrayList<ITaskEditorFactory>(); - - private ArrayList<IHyperlinkDetector> hyperlinkDetectors = new ArrayList<IHyperlinkDetector>(); - - private TaskListWriter taskListWriter; - - // private ResourceBundle resourceBundle; - - private long AUTOMATIC_BACKUP_SAVE_INTERVAL = 1 * 3600 * 1000; // every - - private static Date lastBackup = new Date(); - - private ITaskHighlighter highlighter; - - private static boolean shellActive = true; - - private boolean initialized = false; - - private Map<String, Image> brandingIcons = new HashMap<String, Image>(); - - private Map<String, ImageDescriptor> overlayIcons = new HashMap<String, ImageDescriptor>(); - - public enum TaskListSaveMode { - ONE_HOUR, THREE_HOURS, DAY; - @Override - public String toString() { - switch (this) { - case ONE_HOUR: - return "1 hour"; - case THREE_HOURS: - return "3 hours"; - case DAY: - return "1 day"; - default: - return "3 hours"; - } - } - - public static TaskListSaveMode fromString(String string) { - if (string == null) - return null; - if (string.equals("1 hour")) - return ONE_HOUR; - if (string.equals("3 hours")) - return THREE_HOURS; - if (string.equals("1 day")) - return DAY; - return null; - } - - public static long fromStringToLong(String string) { - long hour = 3600 * 1000; - switch (fromString(string)) { - case ONE_HOUR: - return hour; - case THREE_HOURS: - return hour * 3; - case DAY: - return hour * 24; - default: - return hour * 3; - } - } - } - - public enum ReportOpenMode { - EDITOR, INTERNAL_BROWSER, EXTERNAL_BROWSER; - } - - private static ITaskActivityListener CONTEXT_TASK_ACTIVITY_LISTENER = new ITaskActivityListener() { - - public void taskActivated(ITask task) { - ContextCorePlugin.getContextManager().activateContext(task.getHandleIdentifier()); - } - - public void tasksActivated(List<ITask> tasks) { - for (ITask task : tasks) { - taskActivated(task); - } - } - - public void taskDeactivated(ITask task) { - ContextCorePlugin.getContextManager().deactivateContext(task.getHandleIdentifier()); - } - - public void activityChanged(DateRangeContainer week) { - // ignore - } - - public void taskListRead() { - // ignore - } - - public void calendarChanged() { - // ignore - } - }; - - /** - * TODO: move into reminder mechanims - */ - private IWindowListener WINDOW_LISTENER = new IWindowListener() { - /** - * bug 1002249: too slow to save state here - */ - public void windowDeactivated(IWorkbenchWindow window) { - shellActive = false; - } - - public void windowActivated(IWorkbenchWindow window) { - getDefault().checkTaskListBackup(); - shellActive = true; - } - - public void windowOpened(IWorkbenchWindow window) { - // ignore - } - - public void windowClosed(IWorkbenchWindow window) { - taskListSaveManager.saveTaskList(true); - } - }; - - private static ITaskListNotificationProvider REMINDER_NOTIFICATION_PROVIDER = new ITaskListNotificationProvider() { - - public Set<ITaskListNotification> getNotifications() { - Date currentDate = new Date(); - Collection<ITask> allTasks = TasksUiPlugin.getTaskListManager().getTaskList().getAllTasks(); - Set<ITaskListNotification> reminders = new HashSet<ITaskListNotification>(); - for (ITask task : allTasks) { - if (!task.isCompleted() && task.getReminderDate() != null && !task.hasBeenReminded() - && task.getReminderDate().compareTo(currentDate) < 0) { - reminders.add(new TaskListNotificationReminder(task)); - task.setReminded(true); - } - } - return reminders; - } - }; - - private static ITaskListNotificationProvider INCOMING_NOTIFICATION_PROVIDER = new ITaskListNotificationProvider() { - - public Set<ITaskListNotification> getNotifications() { - Set<ITaskListNotification> notifications = new HashSet<ITaskListNotification>(); - // Incoming Changes - for (TaskRepository repository : getRepositoryManager().getAllRepositories()) { - for (AbstractRepositoryTask repositoryTask : TasksUiPlugin.getTaskListManager().getTaskList() - .getRepositoryTasks(repository.getUrl())) { - if (repositoryTask.getSyncState() == RepositoryTaskSyncState.INCOMING - && repositoryTask.isNotified() == false) { - TaskListNotificationIncoming notification = new TaskListNotificationIncoming(repositoryTask); - - if (repositoryTask.getTaskData() != null) { - List<TaskComment> taskComments = repositoryTask.getTaskData().getComments(); - if (taskComments != null && taskComments.size() > 0) { - TaskComment lastComment = taskComments.get(taskComments.size() - 1); - if (lastComment != null) { - notification.setDescription(lastComment.getText()); - } - } else { - String description = repositoryTask.getTaskData().getDescription(); - if (description != null) { - notification.setDescription(description); - } - } - - AbstractRepositoryConnector connector = getRepositoryManager().getRepositoryConnector( - repositoryTask.getRepositoryKind()); - if (connector != null) { - IOfflineTaskHandler offlineHandler = connector.getOfflineTaskHandler(); - if (offlineHandler != null && repositoryTask.getTaskData().getLastModified() != null) { - Date modified = offlineHandler.getDateForAttributeType( - RepositoryTaskAttribute.DATE_MODIFIED, repositoryTask.getTaskData() - .getLastModified()); - notification.setDate(modified); - } - } - - } - - notifications.add(notification); - repositoryTask.setNotified(true); - } - } - } - // New query hits - for (AbstractRepositoryQuery query : TasksUiPlugin.getTaskListManager().getTaskList().getQueries()) { - for (AbstractQueryHit hit : query.getHits()) { - if (hit.getCorrespondingTask() == null && hit.isNotified() == false) { - notifications.add(new TaskListNotificationQueryIncoming(hit)); - hit.setNotified(true); - } - } - } - return notifications; - } - }; - - private final IPropertyChangeListener PREFERENCE_LISTENER = new IPropertyChangeListener() { - - public void propertyChange(PropertyChangeEvent event) { - if (event.getProperty().equals(TaskListPreferenceConstants.MULTIPLE_ACTIVE_TASKS)) { - TaskListView.getFromActivePerspective().togglePreviousAction( - !getPreferenceStore().getBoolean(TaskListPreferenceConstants.MULTIPLE_ACTIVE_TASKS)); - // TaskListView.getFromActivePerspective().toggleNextAction( - // !getPreferenceStore().getBoolean(TaskListPreferenceConstants.MULTIPLE_ACTIVE_TASKS)); - // TaskListView.getFromActivePerspective().clearTaskHistory(); - getTaskListManager().getTaskActivationHistory().clear(); - - } - // TODO: do we ever get here? - if (event.getProperty().equals(MylarPreferenceContstants.PREF_DATA_DIR)) { - if (event.getOldValue() instanceof String) { - String newDirPath = getDefault().getDataDirectory(); - String taskListFilePath = newDirPath + File.separator + DEFAULT_TASK_LIST_FILE; - reloadFromNewFolder(taskListFilePath); - // if (TaskListView.getFromActivePerspective() != null) { - // TaskListView.getFromActivePerspective().clearTaskHistory(); - // } - } - } - } - - }; - - private final org.eclipse.jface.util.IPropertyChangeListener PROPERTY_LISTENER = new org.eclipse.jface.util.IPropertyChangeListener() { - - public void propertyChange(org.eclipse.jface.util.PropertyChangeEvent event) { - if (event.getProperty().equals(MylarPreferenceContstants.PREF_DATA_DIR)) { - if (event.getOldValue() instanceof String) { - String newDirPath = getDefault().getDataDirectory(); - String taskListFilePath = newDirPath + File.separator + DEFAULT_TASK_LIST_FILE; - reloadFromNewFolder(taskListFilePath); - } - } - } - - }; - - public TasksUiPlugin() { - super(); - INSTANCE = this; - } - - @Override - public void start(BundleContext context) throws Exception { - super.start(context); - // NOTE: Startup order is very sensitive - try { - WebClientUtil.initCommonsLoggingSettings(); - initializeDefaultPreferences(getPreferenceStore()); - taskListWriter = new TaskListWriter(); - - File dataDir = new File(getDataDirectory()); - dataDir.mkdirs(); - String path = getDataDirectory() + File.separator + DEFAULT_TASK_LIST_FILE; - File taskListFile = new File(path); - - taskListManager = new TaskListManager(taskListWriter, taskListFile); - taskRepositoryManager = new TaskRepositoryManager(taskListManager.getTaskList()); - synchronizationManager = new RepositorySynchronizationManager(); - - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - try { - TasksUiExtensionReader.initExtensions(taskListWriter); - taskRepositoryManager.readRepositories(getRepositoriesFilePath()); - // Must be called after repositories read - readOfflineReportsFile(); - - taskListManager.init(); - taskListManager.addActivityListener(CONTEXT_TASK_ACTIVITY_LISTENER); - taskListManager.readExistingOrCreateNewList(); - initialized = true; - - PlatformUI.getWorkbench().addWindowListener(WINDOW_LISTENER); - - taskListNotificationManager = new TaskListNotificationManager(); - taskListNotificationManager.addNotificationProvider(REMINDER_NOTIFICATION_PROVIDER); - taskListNotificationManager.addNotificationProvider(INCOMING_NOTIFICATION_PROVIDER); - taskListNotificationManager.startNotification(NOTIFICATION_DELAY); - getPreferenceStore().addPropertyChangeListener(taskListNotificationManager); - - taskListBackupManager = new TaskListBackupManager(); - getPreferenceStore().addPropertyChangeListener(taskListBackupManager); - - synchronizationScheduler = new TaskListSynchronizationScheduler(true); - synchronizationScheduler.startSynchJob(); - - taskListSaveManager = new TaskListSaveManager(); - taskListManager.getTaskList().addChangeListener(taskListSaveManager); - - ContextCorePlugin.getDefault().getPluginPreferences().addPropertyChangeListener( - PREFERENCE_LISTENER); - - getPreferenceStore().addPropertyChangeListener(PROPERTY_LISTENER); - getPreferenceStore().addPropertyChangeListener(synchronizationScheduler); - getPreferenceStore().addPropertyChangeListener(taskListManager); - } catch (Exception e) { - MylarStatusHandler.fail(e, "Mylar Tasks UI start failed", false); - } - } - }); - - } catch (Exception e) { - e.printStackTrace(); - MylarStatusHandler.fail(e, "Mylar Task List initialization failed", false); - } - } - - public void earlyStartup() { - // ignore - } - - @Override - public void stop(BundleContext context) throws Exception { - super.stop(context); - INSTANCE = null; - try { - if (PlatformUI.isWorkbenchRunning()) { - getPreferenceStore().removePropertyChangeListener(taskListNotificationManager); - getPreferenceStore().removePropertyChangeListener(taskListBackupManager); - getPreferenceStore().removePropertyChangeListener(taskListManager); - getPreferenceStore().removePropertyChangeListener(synchronizationScheduler); - getPreferenceStore().removePropertyChangeListener(PROPERTY_LISTENER); - taskListManager.getTaskList().removeChangeListener(taskListSaveManager); - taskListManager.dispose(); - TaskListColorsAndFonts.dispose(); - if (ContextCorePlugin.getDefault() != null) { - ContextCorePlugin.getDefault().getPluginPreferences().removePropertyChangeListener( - PREFERENCE_LISTENER); - } - PlatformUI.getWorkbench().removeWindowListener(WINDOW_LISTENER); - } - } catch (Exception e) { - MylarStatusHandler.log(e, "Mylar Task List stop terminated abnormally"); - } - } - - public String getDefaultDataDirectory() { - return ResourcesPlugin.getWorkspace().getRoot().getLocation().toString() + '/' + NAME_DATA_DIR; - } - - public String getDataDirectory() { - return getPreferenceStore().getString(MylarPreferenceContstants.PREF_DATA_DIR); - } - - public void setDataDirectory(String newPath) { - getPreferenceStore().setValue(MylarPreferenceContstants.PREF_DATA_DIR, newPath); - ContextCorePlugin.getDefault().getContextStore().notifyContextStoreMoved(); - } - - private void reloadFromNewFolder(String taskListFilePath) { - getTaskListSaveManager().saveTaskList(true); - getTaskListManager().resetTaskList(); - getTaskListManager().setTaskListFile(new File(taskListFilePath)); - getTaskListManager().readExistingOrCreateNewList(); - getTaskListManager().getTaskActivationHistory().clear(); - } - - // // TODO: delete post 0.6? - // private void migrateHandlesToRepositorySupport() { - // boolean migrated = false; - // getMylarCorePrefs().setDefault(TaskListPreferenceConstants.CONTEXTS_MIGRATED, - // false); - // // NOTE: gets/checks preference in both stores to accidental migration - // if - // (!(getMylarCorePrefs().getBoolean(TaskListPreferenceConstants.CONTEXTS_MIGRATED) - // || getPreferenceStore() - // .getBoolean(TaskListPreferenceConstants.CONTEXTS_MIGRATED))) { - // try { - // File dataDir = new - // File(ContextCorePlugin.getDefault().getDataDirectory()); - // TaskRepository defaultRepository = - // MylarTaskListPlugin.getRepositoryManager().getDefaultRepository( - // TaskRepositoryManager.PREFIX_REPOSITORY_OLD.toLowerCase()); - // if (defaultRepository != null) { - // String repositoryUrl = defaultRepository.getUrl(); - // migrated = true; - // if (dataDir.exists() && dataDir.isDirectory()) { - // for (File file : dataDir.listFiles()) { - // int dotIndex = file.getName().lastIndexOf('.'); - // if (dotIndex != -1) { - // String oldHandle = file.getName().substring(0, dotIndex); - // if (oldHandle.startsWith(TaskRepositoryManager.PREFIX_REPOSITORY_OLD)) { - // String id = AbstractRepositoryTask.getTaskId(oldHandle); - // String newHandle = AbstractRepositoryTask.getHandle(repositoryUrl, id); - // File newFile = - // ContextCorePlugin.getContextManager().getFileForContext(newHandle); - // file.renameTo(newFile); - // } - // } - // } - // } - // for (ITask task : taskListManager.getTaskList().getAllTasks()) { - // if (task instanceof AbstractRepositoryTask) { - // String id = AbstractRepositoryTask.getTaskId(task.getHandleIdentifier()); - // String newHandle = AbstractRepositoryTask.getHandle(repositoryUrl, id); - // task.setHandleIdentifier(newHandle); - // } - // } - // - // for (AbstractRepositoryQuery query : - // taskListManager.getTaskList().getQueries()) { - // query.setRepositoryUrl(repositoryUrl); - // for (AbstractQueryHit hit : query.getHits()) { - // hit.setRepositoryUrl(repositoryUrl); - // } - // } - // taskListManager.saveTaskList(); - // taskListManager.readExistingOrCreateNewList(); - // } - // } catch (Throwable t) { - // MylarStatusHandler.fail(t, "task list migration failed", true); - // } - // } - // if (migrated) { - // MylarStatusHandler.log("Migrated context files to repository-aware - // paths", this); - // getMylarCorePrefs().setValue(TaskListPreferenceConstants.CONTEXTS_MIGRATED, - // true); - // getPreferenceStore().setValue(TaskListPreferenceConstants.CONTEXTS_MIGRATED, - // true); - // } - // } - - @Override - protected void initializeDefaultPreferences(IPreferenceStore store) { - store.setDefault(MylarPreferenceContstants.PREF_DATA_DIR, getDefaultDataDirectory()); - - store.setDefault(TaskListPreferenceConstants.NOTIFICATIONS_ENABLED, true); - store.setDefault(TaskListPreferenceConstants.SELECTED_PRIORITY, Task.PriorityLevel.P5.toString()); - store.setDefault(TaskListPreferenceConstants.REPORT_OPEN_EDITOR, true); - store.setDefault(TaskListPreferenceConstants.REPORT_OPEN_INTERNAL, false); - store.setDefault(TaskListPreferenceConstants.REPORT_DISABLE_INTERNAL, false); - store.setDefault(TaskListPreferenceConstants.ACTIVATE_ON_OPEN, false); - store.setDefault(TaskListPreferenceConstants.REPORT_OPEN_EXTERNAL, false); - // store.setDefault(TaskListPreferenceConstants.REPOSITORY_SYNCH_ON_STARTUP, - // false); - - store.setDefault(TaskListPreferenceConstants.REPOSITORY_SYNCH_SCHEDULE_ENABLED, true); - store.setDefault(TaskListPreferenceConstants.REPOSITORY_SYNCH_SCHEDULE_MILISECONDS, "" + (20 * 60 * 1000)); - - // store.setDefault(TaskListPreferenceConstants.BACKUP_AUTOMATICALLY, - // true); - // store.setDefault(TaskListPreferenceConstants.BACKUP_FOLDER, - // ContextCorePlugin.getDefault().getDataDirectory() - // + DEFAULT_PATH_SEPARATOR + DEFAULT_BACKUP_FOLDER_NAME); - store.setDefault(TaskListPreferenceConstants.BACKUP_SCHEDULE, 1); - store.setDefault(TaskListPreferenceConstants.BACKUP_MAXFILES, 20); - store.setDefault(TaskListPreferenceConstants.BACKUP_LAST, 0f); - - store.setDefault(TaskListPreferenceConstants.FILTER_ARCHIVE_MODE, true); - store.setDefault(TaskListPreferenceConstants.MULTIPLE_ACTIVE_TASKS, false); - store.setValue(TaskListPreferenceConstants.MULTIPLE_ACTIVE_TASKS, false); - - // store.setDefault(TaskListPreferenceConstants.PLANNING_STARTDAY, 2); - // store.setDefault(TaskListPreferenceConstants.PLANNING_ENDDAY, 6); - store.setDefault(TaskListPreferenceConstants.PLANNING_STARTHOUR, 9); - store.setDefault(TaskListPreferenceConstants.PLANNING_ENDHOUR, 17); - - store.setDefault(TaskListPreferenceConstants.SAVE_TASKLIST_MODE, TaskListSaveMode.THREE_HOURS.toString()); - } - - public Proxy getProxySettings() { - Proxy proxy = Proxy.NO_PROXY; - if (UpdateCore.getPlugin().getPluginPreferences().getBoolean(UpdateCore.HTTP_PROXY_ENABLE)) { - String proxyHost = UpdateCore.getPlugin().getPluginPreferences().getString(UpdateCore.HTTP_PROXY_HOST); - int proxyPort = UpdateCore.getPlugin().getPluginPreferences().getInt(UpdateCore.HTTP_PROXY_PORT); - - InetSocketAddress sockAddr = new InetSocketAddress(proxyHost, proxyPort); - proxy = new Proxy(Type.HTTP, sockAddr); - } - return proxy; - } - - public static TaskListManager getTaskListManager() { - return taskListManager; - } - - public TaskListNotificationManager getTaskListNotificationManager() { - return taskListNotificationManager; - } - - /** - * Returns the shared instance. - */ - public static TasksUiPlugin getDefault() { - return INSTANCE; - } - - // public static IPreferenceStore getMylarCorePrefs() { - // // TODO: should be using the task list's prefernece store, but can't - // // change without migrating because this will cause people to lose - // // repositories - // return ContextCorePlugin.getDefault().getPreferenceStore(); - // } - - private void checkTaskListBackup() { - Date currentTime = new Date(); - if (currentTime.getTime() > lastBackup.getTime() + AUTOMATIC_BACKUP_SAVE_INTERVAL) {// TaskListSaveMode.fromStringToLong(getPrefs().getString(SAVE_TASKLIST_MODE))) - // { - TasksUiPlugin.getDefault().getTaskListSaveManager().createTaskListBackupFile(); - lastBackup = new Date(); - } - } - - private List<IDynamicSubMenuContributor> menuContributors = new ArrayList<IDynamicSubMenuContributor>(); - - public List<IDynamicSubMenuContributor> getDynamicMenuContributers() { - return menuContributors; - } - - public void addDynamicPopupContributor(IDynamicSubMenuContributor contributor) { - menuContributors.add(contributor); - } - - public boolean isMultipleActiveTasksMode() { - return getPreferenceStore().getBoolean(TaskListPreferenceConstants.MULTIPLE_ACTIVE_TASKS); - } - - public String[] getSaveOptions() { - String[] options = { TaskListSaveMode.ONE_HOUR.toString(), TaskListSaveMode.THREE_HOURS.toString(), - TaskListSaveMode.DAY.toString() }; - return options; - } - - public String getBackupFolderPath() { - return getDataDirectory() + DEFAULT_PATH_SEPARATOR + DEFAULT_BACKUP_FOLDER_NAME; - } - - public ITaskHighlighter getHighlighter() { - return highlighter; - } - - public void setHighlighter(ITaskHighlighter highlighter) { - this.highlighter = highlighter; - } - - public List<ITaskEditorFactory> getTaskEditorFactories() { - return taskEditors; - } - - public void addContextEditor(ITaskEditorFactory contextEditor) { - if (contextEditor != null) - this.taskEditors.add(contextEditor); - } - - public TaskListSaveManager getTaskListSaveManager() { - return taskListSaveManager; - } - - public boolean isShellActive() { - return TasksUiPlugin.shellActive; - } - - public static TaskRepositoryManager getRepositoryManager() { - return taskRepositoryManager; - } - - public void addBrandingIcon(String repositoryType, Image icon) { - brandingIcons.put(repositoryType, icon); - } - - public Image getBrandingIcon(String repositoryType) { - return brandingIcons.get(repositoryType); - } - - public void addOverlayIcon(String repositoryType, ImageDescriptor icon) { - overlayIcons.put(repositoryType, icon); - } - - public ImageDescriptor getOverlayIcon(String repositoryType) { - return overlayIcons.get(repositoryType); - } - - public boolean isInitialized() { - return initialized; - } - - public IHyperlinkDetector[] getTaskHyperlinkDetectors() { - return hyperlinkDetectors.toArray(new IHyperlinkDetector[1]); - } - - public void addTaskHyperlinkDetector(IHyperlinkDetector listener) { - if (listener != null) - this.hyperlinkDetectors.add(listener); - } - - public TaskListBackupManager getBackupManager() { - return taskListBackupManager; - } - - // TODO: clean-up - private void readOfflineReportsFile() { - IPath offlineReportsPath = getOfflineReportsFilePath(); - - try { - offlineTaskManager = new OfflineTaskManager(offlineReportsPath.toFile(), true); - } catch (Exception e) { - MylarStatusHandler - .log(e, - "Could not restore offline repository tasks file, creating new one (possible version incompatibility)"); - boolean deleted = offlineReportsPath.toFile().delete(); - if (!deleted) { - MylarStatusHandler.log(e, "could not delete offline repository tasks file"); - } - try { - offlineTaskManager = new OfflineTaskManager(offlineReportsPath.toFile(), false); - } catch (Exception e1) { - MylarStatusHandler.log(e, "could not reset offline repository tasks file"); - } - } - } - - /** - * Returns the path to the file cacheing the offline bug reports. - */ - private IPath getOfflineReportsFilePath() { - IPath stateLocation = Platform.getStateLocation(TasksUiPlugin.getDefault().getBundle()); - IPath configFile = stateLocation.append("offlineReports"); - return configFile; - } - - public OfflineTaskManager getOfflineReportsFile() { - if (offlineTaskManager == null) { - MylarStatusHandler.fail(null, "Offline reports file not created, try restarting.", true); - } - return offlineTaskManager; - } - - public static void addRepositoryConnectorUi(AbstractRepositoryConnectorUi repositoryConnectorUi) { - if (!repositoryConnectorUis.values().contains(repositoryConnectorUi)) { - repositoryConnectorUis.put(repositoryConnectorUi.getRepositoryType(), repositoryConnectorUi); - } - } - - public static AbstractRepositoryConnectorUi getRepositoryUi(String kind) { - return repositoryConnectorUis.get(kind); - } - - public static TaskListSynchronizationScheduler getSynchronizationScheduler() { - return synchronizationScheduler; - } - - public static RepositorySynchronizationManager getSynchronizationManager() { - return synchronizationManager; - } - - public String getRepositoriesFilePath() { - return getDataDirectory() + File.separator + TaskRepositoryManager.DEFAULT_REPOSITORIES_FILE; - } - - /** - * Associate a Task Repository with a workbench project - * @param resource project or resource belonging to a project - * @param repository task repository to associate with given project - * @throws CoreException - */ - public void setRepositoryForResource(IResource resource, TaskRepository repository) throws CoreException { - if(resource == null || repository == null) return; - IProject project = resource.getProject(); - if(project == null) return; - IScopeContext projectScope = new ProjectScope(project); - IEclipsePreferences projectNode = projectScope.getNode(PLUGIN_ID); - if (projectNode != null) { - projectNode.put(PROJECT_REPOSITORY_KIND, repository.getKind()); - projectNode.put(PROJECT_REPOSITORY_URL, repository.getUrl()); - try { - projectNode.flush(); - } catch (BackingStoreException e) { - MylarStatusHandler.fail(e, "Failed to save task repository to project association preference", false); - } - } - } - - /** - * Retrieve the task repository that has been associated with the given - * project (or resource belonging to a project) - */ - public TaskRepository getRepositoryForResource(IResource resource, boolean silent) { - if(resource == null) return null; - IProject project = resource.getProject(); - if(project == null) return null; - TaskRepository taskRepository = null; - IScopeContext projectScope = new ProjectScope(project); - IEclipsePreferences projectNode = projectScope.getNode(PLUGIN_ID); - if (projectNode != null) { - String kind = projectNode.get(PROJECT_REPOSITORY_KIND, ""); - String urlString = projectNode.get(PROJECT_REPOSITORY_URL, ""); - taskRepository = getRepositoryManager().getRepository(kind, urlString); - if (taskRepository == null && !silent) { - MessageDialog.openInformation(null, "No Repository Found", - "No repository was found. Associate a Task Repository with this project via the project's property page."); - } - } - return taskRepository; - } - -} - -// public Map<String, IHyperlinkListener> getTaskHyperlinkListeners() { -// return taskHyperlinkListeners; -// } - -// public void addTaskHyperlinkListener(String type, IHyperlinkListener -// listener) { -// if (listener != null) -// this.taskHyperlinkListeners.put(type, listener); -// } - -// /** -// * Returns the string from the INSTANCE's resource bundle, or 'key' if not -// * found. -// */ -// public static String getResourceString(String key) { -// ResourceBundle bundle = MylarTaskListPlugin.getDefault().getResourceBundle(); -// try { -// return (bundle != null) ? bundle.getString(key) : key; -// } catch (MissingResourceException e) { -// return key; -// } -// } -// -// /** -// * Returns the INSTANCE's resource bundle, -// */ -// public ResourceBundle getResourceBundle() { -// try { -// if (resourceBundle == null) -// resourceBundle = -// ResourceBundle.getBundle("taskListPlugin.TaskListPluginPluginResources"); -// } catch (MissingResourceException x) { -// resourceBundle = null; -// } -// return resourceBundle; -// } - -// public static void setCurrentPriorityLevel(Task.PriorityLevel pl) { -// getPrefs().setValue(TaskListPreferenceConstants.SELECTED_PRIORITY, -// pl.toString()); -// } - -// public void setFilterCompleteMode(boolean isFilterOn) { -// getPrefs().setValue(TaskListPreferenceConstants.FILTER_COMPLETE_MODE, -// isFilterOn); -// } - -// public boolean isFilterCompleteMode() { -// if -// (getPrefs().contains(TaskListPreferenceConstants.FILTER_COMPLETE_MODE)) { -// return -// getPrefs().getBoolean(TaskListPreferenceConstants.FILTER_COMPLETE_MODE); -// } else { -// return false; -// } -// } - -// public void setFilterInCompleteMode(boolean isFilterOn) { -// getPrefs().setValue(TaskListPreferenceConstants.FILTER_INCOMPLETE_MODE, -// isFilterOn); -// } - -// public boolean isFilterInCompleteMode() { -// if -// (getPrefs().contains(TaskListPreferenceConstants.FILTER_INCOMPLETE_MODE)) -// { -// return -// getPrefs().getBoolean(TaskListPreferenceConstants.FILTER_INCOMPLETE_MODE); -// } else { -// return false; -// } -// } - -// public List<ITaskHandler> getTaskHandlers() { -// return taskHandlers; -// } - -// public ITaskHandler getHandlerForElement(ITaskListElement element) { -// for (ITaskHandler taskHandler : taskHandlers) { -// if (taskHandler.acceptsItem(element)) -// return taskHandler; -// } -// return null; -// } - -// public void addTaskHandler(ITaskHandler taskHandler) { -// taskHandlers.add(taskHandler); -// } - -// private void restoreTaskHandlerState() { -// for (ITaskHandler handler : taskHandlers) { -// handler.restoreState(TaskListView.getDefault()); -// } -// } - -// /** -// * Sets the directory containing the task list file to use. -// * Switches immediately to use the data at that location. -// */ -// public void setDataDirectory(String newDirPath) { -// String taskListFilePath = newDirPath + File.separator + -// DEFAULT_TASK_LIST_FILE; -// getTaskListManager().setTaskListFile(new File(taskListFilePath)); -// getTaskListManager().createNewTaskList(); -// getTaskListManager().readTaskList(); -// -// if (TaskListView.getDefault() != null) -// TaskListView.getDefault().clearTaskHistory(); -// } - -// private List<ITaskActivationListener> taskListListeners = new -// ArrayList<ITaskActivationListener>(); -// -// public List<ITaskActivationListener> getTaskListListeners() { -// return taskListListeners; -// } -// -// public void addTaskListListener(ITaskActivationListener taskListListner) { -// taskListListeners.add(taskListListner); -// } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/properties/ProjectTaskRepositoryPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/properties/ProjectTaskRepositoryPage.java deleted file mode 100644 index afd19773c..000000000 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/properties/ProjectTaskRepositoryPage.java +++ /dev/null @@ -1,174 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.tasks.ui.properties; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jface.preference.PreferencePage; -import org.eclipse.jface.viewers.CheckStateChangedEvent; -import org.eclipse.jface.viewers.CheckboxTableViewer; -import org.eclipse.jface.viewers.DecoratingLabelProvider; -import org.eclipse.jface.viewers.ICheckStateListener; -import org.eclipse.jface.viewers.IStructuredContentProvider; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.actions.AddRepositoryAction; -import org.eclipse.mylar.internal.tasks.ui.views.TaskRepositoriesViewSorter; -import org.eclipse.mylar.internal.tasks.ui.views.TaskRepositoryLabelProvider; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.FontData; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Label; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.dialogs.PropertyPage; -import org.eclipse.ui.internal.dialogs.DialogUtil; - -/** - * @author Rob Elves - * @see Adapted from org.eclipse.ui.internal.ide.dialogs.ProjectReferencePage - */ -public class ProjectTaskRepositoryPage extends PropertyPage { - - private static final int REPOSITORY_LIST_MULTIPLIER = 30; - - private IProject project; - - private boolean modified = false; - - private CheckboxTableViewer listViewer; - - public ProjectTaskRepositoryPage() { - // Do nothing on creation - } - - protected Control createContents(Composite parent) { - - Font font = parent.getFont(); - - Composite composite = new Composite(parent, SWT.NONE); - GridLayout layout = new GridLayout(); - composite.setLayout(layout); - composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - composite.setFont(font); - - initialize(); - - Label description = createDescriptionLabel(composite); - description.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - - listViewer = CheckboxTableViewer.newCheckList(composite, SWT.TOP | SWT.BORDER); - listViewer.getTable().setFont(font); - GridData data = new GridData(GridData.FILL_BOTH); - data.grabExcessHorizontalSpace = true; - - // Only set a height hint if it will not result in a cut off dialog - if (DialogUtil.inRegularFontMode(parent)) { - data.heightHint = getDefaultFontHeight(listViewer.getTable(), REPOSITORY_LIST_MULTIPLIER); - } - listViewer.getTable().setLayoutData(data); - listViewer.getTable().setFont(font); - - listViewer.setLabelProvider(new DecoratingLabelProvider(new TaskRepositoryLabelProvider(), PlatformUI - .getWorkbench().getDecoratorManager().getLabelDecorator())); - listViewer.setContentProvider(new IStructuredContentProvider() { - public void inputChanged(Viewer v, Object oldInput, Object newInput) { - } - - public void dispose() { - } - - public Object[] getElements(Object parent) { - return TasksUiPlugin.getRepositoryManager().getAllRepositories().toArray(); - } - - }); - - listViewer.setSorter(new TaskRepositoriesViewSorter()); - listViewer.setInput(project.getWorkspace()); - - TaskRepository repository = TasksUiPlugin.getDefault().getRepositoryForResource(project, true); - - if (repository != null) { - listViewer.setCheckedElements(new Object[] { repository }); - } - listViewer.addCheckStateListener(new ICheckStateListener() { - public void checkStateChanged(CheckStateChangedEvent event) { - if (event.getChecked()) { - // only allow single selection - listViewer.setAllChecked(false); - listViewer.setChecked(event.getElement(), event.getChecked()); - } - modified = true; - } - }); - - final AddRepositoryAction action = new AddRepositoryAction(); - - Button button = new Button(composite, SWT.NONE); - button.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING)); - button.setText(AddRepositoryAction.TITLE); - button.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - action.run(); - listViewer.setInput(project.getWorkspace()); - } - }); - - return composite; - } - - private static int getDefaultFontHeight(Control control, int lines) { - FontData[] viewerFontData = control.getFont().getFontData(); - int fontHeight = 10; - - // If we have no font data use our guess - if (viewerFontData.length > 0) { - fontHeight = viewerFontData[0].getHeight(); - } - return lines * fontHeight; - - } - - /** - * Initializes a ProjectReferencePage. - */ - private void initialize() { - project = (IProject) getElement().getAdapter(IResource.class); - noDefaultAndApplyButton(); - setDescription("Select a task repository to associate with this project below:"); - } - - /** - * @see PreferencePage#performOk - */ - public boolean performOk() { - if (!modified) { - return true; - } - if (listViewer.getCheckedElements().length > 0) { - TaskRepository selectedRepository = (TaskRepository) listViewer.getCheckedElements()[0]; - try { - TasksUiPlugin.getDefault().setRepositoryForResource(project, selectedRepository); - } catch (CoreException e) { - MylarStatusHandler.fail(e, "Unable to associate project with task repository", true); - } - } - return true; - } -} diff --git a/org.eclipse.mylyn.trac.core/.classpath b/org.eclipse.mylyn.trac.core/.classpath deleted file mode 100644 index 751c8f2e5..000000000 --- a/org.eclipse.mylyn.trac.core/.classpath +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="src" path="src"/> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> - <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="output" path="bin"/> -</classpath> diff --git a/org.eclipse.mylyn.trac.core/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.mylyn.trac.core/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 8cf54a7c4..000000000 --- a/org.eclipse.mylyn.trac.core/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,256 +0,0 @@ -#Thu Feb 09 16:45:35 PST 2006 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.5 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.5 -org.eclipse.jdt.core.formatter.align_type_members_on_columns=false -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_assignment=0 -org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 -org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 -org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 -org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 -org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_after_package=1 -org.eclipse.jdt.core.formatter.blank_lines_before_field=1 -org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 -org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 -org.eclipse.jdt.core.formatter.blank_lines_before_method=1 -org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 -org.eclipse.jdt.core.formatter.blank_lines_before_package=0 -org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 -org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.comment.clear_blank_lines=false -org.eclipse.jdt.core.formatter.comment.format_comments=true -org.eclipse.jdt.core.formatter.comment.format_header=false -org.eclipse.jdt.core.formatter.comment.format_html=true -org.eclipse.jdt.core.formatter.comment.format_source_code=true -org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true -org.eclipse.jdt.core.formatter.comment.indent_root_tags=true -org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert -org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert -org.eclipse.jdt.core.formatter.comment.line_length=80 -org.eclipse.jdt.core.formatter.compact_else_if=true -org.eclipse.jdt.core.formatter.continuation_indentation=2 -org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 -org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true -org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_empty_lines=false -org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true -org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false -org.eclipse.jdt.core.formatter.indentation.size=4 -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert -org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false -org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false -org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false -org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false -org.eclipse.jdt.core.formatter.lineSplit=120 -org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 -org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 -org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true -org.eclipse.jdt.core.formatter.tabulation.char=tab -org.eclipse.jdt.core.formatter.tabulation.size=4 -org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false diff --git a/org.eclipse.mylyn.trac.core/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.mylyn.trac.core/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index 0dcf62d0c..000000000 --- a/org.eclipse.mylyn.trac.core/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,6 +0,0 @@ -#Fri Jun 16 16:18:53 PDT 2006 -eclipse.preferences.version=1 -formatter_profile=_Mylar based on Eclipse [built-in] -formatter_settings_version=9 -internal.default.compliance=default -org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\r\n * @return the ${bare_field_name}\r\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\r\n * @param ${param} the ${bare_field_name} to set\r\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/**\r\n * \r\n */</template><template autoinsert\="true" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author ${user}\r\n *\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\r\n * \r\n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/* (non-Javadoc)\r\n * ${see_to_overridden}\r\n */</template><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\r\n * ${tags}\r\n * ${see_to_target}\r\n */</template><template autoinsert\="false" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">/*******************************************************************************\r\n * Copyright (c) 2004 - 2006 Mylar committers and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n *******************************************************************************/\r\n\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\r\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\r\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\r\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates> diff --git a/org.eclipse.mylyn.trac.core/META-INF/MANIFEST.MF b/org.eclipse.mylyn.trac.core/META-INF/MANIFEST.MF deleted file mode 100644 index f8db4d886..000000000 --- a/org.eclipse.mylyn.trac.core/META-INF/MANIFEST.MF +++ /dev/null @@ -1,16 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Mylar Trac Core Plug-in -Bundle-SymbolicName: org.eclipse.mylar.trac.core;singleton:=true -Bundle-Version: 0.7.0 -Bundle-Vendor: Eclipse.org -Bundle-Localization: plugin -Require-Bundle: org.eclipse.core.runtime, - org.eclipse.mylar.context.core, - org.eclipse.mylar.tasks.core, - org.eclipse.search -Eclipse-LazyStart: true -Export-Package: org.eclipse.mylar.internal.trac.core, - org.eclipse.mylar.internal.trac.core.model, - org.eclipse.mylar.internal.trac.core.util -Bundle-Activator: org.eclipse.mylar.internal.trac.core.TracCorePlugin diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/AbstractTracClient.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/AbstractTracClient.java deleted file mode 100644 index 345be816a..000000000 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/AbstractTracClient.java +++ /dev/null @@ -1,132 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.core; - -import java.net.Proxy; -import java.net.URL; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.mylar.internal.trac.core.model.TracComponent; -import org.eclipse.mylar.internal.trac.core.model.TracMilestone; -import org.eclipse.mylar.internal.trac.core.model.TracPriority; -import org.eclipse.mylar.internal.trac.core.model.TracSeverity; -import org.eclipse.mylar.internal.trac.core.model.TracTicketResolution; -import org.eclipse.mylar.internal.trac.core.model.TracTicketStatus; -import org.eclipse.mylar.internal.trac.core.model.TracTicketType; -import org.eclipse.mylar.internal.trac.core.model.TracVersion; - -/** - * @author Steffen Pingel - */ -public abstract class AbstractTracClient implements ITracClient { - - protected String username; - - protected String password; - - protected URL repositoryUrl; - - protected Version version; - - protected TracClientData data; - - protected Proxy proxy; - - public AbstractTracClient(URL repositoryUrl, Version version, String username, String password) { - this.repositoryUrl = repositoryUrl; - this.version = version; - this.username = username; - this.password = password; - - this.data = new TracClientData(); - } - - public Version getVersion() { - return version; - } - - protected boolean hasAuthenticationCredentials() { - return username != null && username.length() > 0; - } - - - public TracComponent[] getComponents() { - return (data.components != null) ? data.components.toArray(new TracComponent[0]) : null; - } - - public TracMilestone[] getMilestones() { - return (data.milestones != null) ? data.milestones.toArray(new TracMilestone[0]) : null; - } - - public TracPriority[] getPriorities() { - return (data.priorities != null) ? data.priorities.toArray(new TracPriority[0]) : null; - } - - public TracSeverity[] getSeverities() { - return (data.severities != null) ? data.severities.toArray(new TracSeverity[0]) : null; - } - - public TracTicketResolution[] getTicketResolutions() { - return (data.ticketResolutions != null) ? data.ticketResolutions.toArray(new TracTicketResolution[0]) : null; - } - - public TracTicketStatus[] getTicketStatus() { - return (data.ticketStatus != null) ? data.ticketStatus.toArray(new TracTicketStatus[0]) : null; - } - - public TracTicketType[] getTicketTypes() { - return (data.ticketTypes != null) ? data.ticketTypes.toArray(new TracTicketType[0]) : null; - } - - public TracVersion[] getVersions() { - return (data.versions != null) ? data.versions.toArray(new TracVersion[0]) : null; - } - - public void updateAttributes(IProgressMonitor monitor, boolean force) throws TracException { - if (data.lastUpdate == 0 || force) { - updateAttributes(monitor); - data.lastUpdate = System.currentTimeMillis(); - } - } - - public abstract void updateAttributes(IProgressMonitor monitor) throws TracException; - - public void setData(TracClientData data) { - this.data = data; - } - - public String[] getDefaultTicketResolutions() { - return new String[] { "fixed", "invalid", "wontfix", "duplicate", "worksforme" }; - } - - public String[] getDefaultTicketActions(String status) { - if ("new".equals(status)) { - return new String[] { "leave", "resolve", "reassign", "accept" }; - } else if ("assigned".equals(status)) { - return new String[] { "leave", "resolve", "reassign" }; - } else if ("reopened".equals(status)) { - return new String[] { "leave", "resolve", "reassign" }; - } else if ("closed".equals(status)) { - return new String[] { "leave", "reopen" }; - } - return null; - } - - public void setProxy(Proxy proxy) { - this.proxy = proxy; - } - - public Proxy getProxy() { - return proxy; - } - -} diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/ITracClient.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/ITracClient.java deleted file mode 100644 index 90c1430d8..000000000 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/ITracClient.java +++ /dev/null @@ -1,161 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.core; - -import java.net.Proxy; -import java.util.Date; -import java.util.List; -import java.util.Set; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.mylar.internal.trac.core.model.TracComponent; -import org.eclipse.mylar.internal.trac.core.model.TracMilestone; -import org.eclipse.mylar.internal.trac.core.model.TracPriority; -import org.eclipse.mylar.internal.trac.core.model.TracSearch; -import org.eclipse.mylar.internal.trac.core.model.TracSeverity; -import org.eclipse.mylar.internal.trac.core.model.TracTicket; -import org.eclipse.mylar.internal.trac.core.model.TracTicketResolution; -import org.eclipse.mylar.internal.trac.core.model.TracTicketStatus; -import org.eclipse.mylar.internal.trac.core.model.TracTicketType; -import org.eclipse.mylar.internal.trac.core.model.TracVersion; - -/** - * Defines the requirements for classes that provide remote access to Trac - * repositories. - * - * @author Steffen Pingel - */ -public interface ITracClient { - - public enum Version { - TRAC_0_9, XML_RPC; - - public static Version fromVersion(String version) { - try { - return Version.valueOf(version); - } catch (IllegalArgumentException e) { - return null; - } - } - - @Override - public String toString() { - switch (this) { - case TRAC_0_9: - return "Trac 0.9 and later"; - case XML_RPC: - return "XML-RPC Plugin (Rev. " + TracXmlRpcClient.REQUIRED_REVISION + ")"; - default: - return null; - } - } - - } - - public static final String CHARSET = "UTF-8"; - - public static final String TIME_ZONE = "UTC"; - - public static final String LOGIN_URL = "/login"; - - public static final String QUERY_URL = "/query?format=tab"; - - public static final String TICKET_URL = "/ticket/"; - - public static final String NEW_TICKET_URL = "/newticket"; - - public static final String TICKET_ATTACHMENT_URL = "/attachment/ticket/"; - - public static final String DEFAULT_USERNAME = "anonymous"; - - /** - * Gets ticket with <code>id</code> from repository. - * - * @param id - * the id of the ticket to get - * @return the ticket - * @throws TracException - * thrown in case of a connection error - */ - TracTicket getTicket(int id) throws TracException; - - /** - * Returns the access type. - */ - Version getVersion(); - - /** - * Queries tickets from repository. All found tickets are added to - * <code>result</code>. - * - * @param query - * the search criteria - * @param result - * the list of found tickets - * @throws TracException - * thrown in case of a connection error - */ - void search(TracSearch query, List<TracTicket> result) throws TracException; - - /** - * Validates the repository connection. - * - * @throws TracException - * thrown in case of a connection error - */ - void validate() throws TracException; - - /** - * Updates cached repository details: milestones, versions etc. - * - * @throws TracException - * thrown in case of a connection error - */ - void updateAttributes(IProgressMonitor monitor, boolean force) throws TracException; - - TracComponent[] getComponents(); - - TracMilestone[] getMilestones(); - - TracPriority[] getPriorities(); - - TracSeverity[] getSeverities(); - - TracTicketResolution[] getTicketResolutions(); - - TracTicketStatus[] getTicketStatus(); - - TracTicketType[] getTicketTypes(); - - TracVersion[] getVersions(); - - byte[] getAttachmentData(int id, String filename) throws TracException; - - void putAttachmentData(int id, String name, String description, byte[] data) throws TracException; - - void createTicket(TracTicket ticket) throws TracException; - - void updateTicket(TracTicket ticket, String comment) throws TracException; - - /** - * Sets a reference to the cached repository attributes. - * - * @param data - * cached repository attributes - */ - void setData(TracClientData data); - - Set<Integer> getChangedTickets(Date since) throws TracException; - - void setProxy(Proxy proxy); - -} diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/Trac09Client.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/Trac09Client.java deleted file mode 100644 index 9e114f26a..000000000 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/Trac09Client.java +++ /dev/null @@ -1,478 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.core; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.HttpURLConnection; -import java.net.URL; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.StringTokenizer; - -import javax.security.auth.login.LoginException; - -import org.apache.commons.httpclient.Credentials; -import org.apache.commons.httpclient.HttpClient; -import org.apache.commons.httpclient.UsernamePasswordCredentials; -import org.apache.commons.httpclient.auth.AuthScope; -import org.apache.commons.httpclient.cookie.CookiePolicy; -import org.apache.commons.httpclient.methods.GetMethod; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.core.HtmlStreamTokenizer; -import org.eclipse.mylar.internal.tasks.core.HtmlTag; -import org.eclipse.mylar.internal.tasks.core.WebClientUtil; -import org.eclipse.mylar.internal.tasks.core.HtmlStreamTokenizer.Token; -import org.eclipse.mylar.internal.trac.core.model.TracComponent; -import org.eclipse.mylar.internal.trac.core.model.TracMilestone; -import org.eclipse.mylar.internal.trac.core.model.TracPriority; -import org.eclipse.mylar.internal.trac.core.model.TracSearch; -import org.eclipse.mylar.internal.trac.core.model.TracSearchFilter; -import org.eclipse.mylar.internal.trac.core.model.TracSeverity; -import org.eclipse.mylar.internal.trac.core.model.TracTicket; -import org.eclipse.mylar.internal.trac.core.model.TracTicketResolution; -import org.eclipse.mylar.internal.trac.core.model.TracTicketStatus; -import org.eclipse.mylar.internal.trac.core.model.TracTicketType; -import org.eclipse.mylar.internal.trac.core.model.TracVersion; -import org.eclipse.mylar.internal.trac.core.model.TracSearchFilter.CompareOperator; -import org.eclipse.mylar.internal.trac.core.model.TracTicket.Key; -import org.eclipse.mylar.internal.trac.core.util.TracHttpClientTransportFactory.TracHttpException; - -/** - * Represents a Trac repository that is accessed through the Trac's query script - * and web interface. - * - * @author Steffen Pingel - */ -public class Trac09Client extends AbstractTracClient { - - private HttpClient httpClient = new HttpClient(); - - private boolean authenticated; - - public Trac09Client(URL url, Version version, String username, String password) { - super(url, version, username, password); - } - - private GetMethod connect(String serverURL) throws TracException { - try { - return connectInternal(serverURL); - } catch (TracException e) { - throw e; - } catch (Exception e) { - throw new TracException(e); - } - } - - private GetMethod connectInternal(String serverURL) throws TracLoginException, IOException, TracHttpException { - WebClientUtil.setupHttpClient(httpClient, proxy, serverURL); - - for (int attempt = 0; attempt < 2; attempt++) { - // force authentication - if (!authenticated && hasAuthenticationCredentials()) { - authenticate(); - } - - GetMethod method = new GetMethod(WebClientUtil.getRequestPath(serverURL)); - method.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY); - int code; - try { - code = httpClient.executeMethod(method); - } catch (IOException e) { - method.releaseConnection(); - throw e; - } - - if (code == HttpURLConnection.HTTP_OK) { - return method; - } else if (code == HttpURLConnection.HTTP_UNAUTHORIZED || code == HttpURLConnection.HTTP_FORBIDDEN) { - // login or reauthenticate due to an expired session - method.releaseConnection(); - authenticated = false; - authenticate(); - } else { - throw new TracHttpException(code); - } - } - - throw new TracLoginException(); - } - - private void authenticate() throws TracLoginException, IOException { - if (!hasAuthenticationCredentials()) { - throw new TracLoginException(); - } - - Credentials credentials = new UsernamePasswordCredentials(username, password); - httpClient.getState().setCredentials( - new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM), credentials); - - GetMethod method = new GetMethod(WebClientUtil.getRequestPath(repositoryUrl + LOGIN_URL)); - method.setFollowRedirects(false); - - try { - httpClient.getParams().setAuthenticationPreemptive(true); - int code = httpClient.executeMethod(method); - if (code == HttpURLConnection.HTTP_UNAUTHORIZED || code == HttpURLConnection.HTTP_FORBIDDEN) { - throw new TracLoginException(); - } - } finally { - method.releaseConnection(); - httpClient.getParams().setAuthenticationPreemptive(false); - } - - authenticated = true; - } - - /** - * Fetches the web site of a single ticket and returns the Trac ticket. - * - * @param id - * Trac id of ticket - * @throws LoginException - */ - public TracTicket getTicket(int id) throws TracException { - GetMethod method = connect(repositoryUrl + ITracClient.TICKET_URL + id); - try { - TracTicket ticket = new TracTicket(id); - - BufferedReader reader = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream(), - ITracClient.CHARSET)); - HtmlStreamTokenizer tokenizer = new HtmlStreamTokenizer(reader, null); - for (Token token = tokenizer.nextToken(); token.getType() != Token.EOF; token = tokenizer.nextToken()) { - if (token.getType() == Token.TAG) { - HtmlTag tag = (HtmlTag) token.getValue(); - if (tag.getTagType() == HtmlTag.Type.TD) { - String headers = tag.getAttribute("headers"); - if ("h_component".equals(headers)) { - ticket.putBuiltinValue(Key.COMPONENT, getText(tokenizer)); - } else if ("h_milestone".equals(headers)) { - ticket.putBuiltinValue(Key.MILESTONE, getText(tokenizer)); - } else if ("h_priority".equals(headers)) { - ticket.putBuiltinValue(Key.PRIORITY, getText(tokenizer)); - } else if ("h_severity".equals(headers)) { - ticket.putBuiltinValue(Key.SEVERITY, getText(tokenizer)); - } else if ("h_version".equals(headers)) { - ticket.putBuiltinValue(Key.VERSION, getText(tokenizer)); - } else if ("h_keywords".equals(headers)) { - ticket.putBuiltinValue(Key.KEYWORDS, getText(tokenizer)); - } else if ("h_cc".equals(headers)) { - ticket.putBuiltinValue(Key.CC, getText(tokenizer)); - } else if ("h_owner".equals(headers)) { - ticket.putBuiltinValue(Key.OWNER, getText(tokenizer)); - } else if ("h_reporter".equals(headers)) { - ticket.putBuiltinValue(Key.REPORTER, getText(tokenizer)); - } - // TODO handle custom fields - } else if (tag.getTagType() == HtmlTag.Type.H2 && "summary".equals(tag.getAttribute("class"))) { - ticket.putBuiltinValue(Key.SUMMARY, getText(tokenizer)); - } else if (tag.getTagType() == HtmlTag.Type.H3 && "status".equals(tag.getAttribute("class"))) { - String text = getStrongText(tokenizer); - if (text.length() > 0) { - int i = text.indexOf(" ("); - if (i != -1) { - // status contains resolution as well - ticket.putBuiltinValue(Key.STATUS, text.substring(0, i)); - ticket.putBuiltinValue(Key.RESOLUTION, text.substring(i, text.length() - 1)); - } else { - ticket.putBuiltinValue(Key.STATUS, text); - } - } - } - // TODO parse description - } - } - - if (ticket.isValid() && ticket.getValue(Key.SUMMARY) != null) { - return ticket; - } - - throw new InvalidTicketException(); - } catch (IOException e) { - throw new TracException(e); - } catch (ParseException e) { - throw new TracException(e); - } finally { - method.releaseConnection(); - } - } - - public void search(TracSearch query, List<TracTicket> tickets) throws TracException { - GetMethod method = connect(repositoryUrl + ITracClient.QUERY_URL + query.toUrl()); - try { - BufferedReader reader = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream(), - ITracClient.CHARSET)); - String line; - - Map<String, String> constantValues = getExactMatchValues(query); - - // first line contains names of returned ticket fields - line = reader.readLine(); - if (line == null) { - throw new InvalidTicketException(); - } - StringTokenizer t = new StringTokenizer(line, "\t"); - Key[] fields = new Key[t.countTokens()]; - for (int i = 0; i < fields.length; i++) { - fields[i] = Key.fromKey(t.nextToken()); - } - - // create a ticket for each following line of output - while ((line = reader.readLine()) != null) { - t = new StringTokenizer(line, "\t"); - TracTicket ticket = new TracTicket(); - for (int i = 0; i < fields.length && t.hasMoreTokens(); i++) { - if (fields[i] != null) { - try { - if (fields[i] == Key.ID) { - ticket.setId(Integer.parseInt(t.nextToken())); - } else if (fields[i] == Key.TIME) { - ticket.setCreated(Integer.parseInt(t.nextToken())); - } else if (fields[i] == Key.CHANGE_TIME) { - ticket.setLastChanged(Integer.parseInt(t.nextToken())); - } else { - ticket.putBuiltinValue(fields[i], parseTicketValue(t.nextToken())); - } - } catch (NumberFormatException e) { - MylarStatusHandler.log(e, "Error parsing repsonse: " + line); - } - } - } - - if (ticket.isValid()) { - for (String key : constantValues.keySet()) { - ticket.putValue(key, parseTicketValue(constantValues.get(key))); - } - - tickets.add(ticket); - } - } - } catch (IOException e) { - throw new TracException(e); - } finally { - method.releaseConnection(); - } - } - - /** - * Trac has sepcial encoding rules for the returned output: None is - * represented by "--". - */ - private String parseTicketValue(String value) { - if ("--".equals(value)) { - return ""; - } - return value; - } - - /** - * Extracts constant values from <code>query</code>. The Trac query - * script does not return fields that matched exactly againt a single value. - */ - private Map<String, String> getExactMatchValues(TracSearch query) { - Map<String, String> values = new HashMap<String, String>(); - List<TracSearchFilter> filters = query.getFilters(); - for (TracSearchFilter filter : filters) { - if (filter.getOperator() == CompareOperator.IS && filter.getValues().size() == 1) { - values.put(filter.getFieldName(), filter.getValues().get(0)); - } - } - return values; - } - - public void validate() throws TracException { - GetMethod method = connect(repositoryUrl + "/"); - try { - BufferedReader reader = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream(), - ITracClient.CHARSET)); - HtmlStreamTokenizer tokenizer = new HtmlStreamTokenizer(reader, null); - for (Token token = tokenizer.nextToken(); token.getType() != Token.EOF; token = tokenizer.nextToken()) { - if (token.getType() == Token.TAG) { - HtmlTag tag = (HtmlTag) token.getValue(); - if (tag.getTagType() == HtmlTag.Type.A) { - String id = tag.getAttribute("id"); - if ("tracpowered".equals(id)) { - return; - } - } - } - } - - throw new TracException("Not a valid Trac repository"); - } catch (IOException e) { - throw new TracException(e); - } catch (ParseException e) { - throw new TracException(e); - } finally { - method.releaseConnection(); - } - } - - public void updateAttributes(IProgressMonitor monitor) throws TracException { - monitor.beginTask("Updating attributes", IProgressMonitor.UNKNOWN); - - GetMethod method = connect(repositoryUrl + ITracClient.NEW_TICKET_URL); - try { - BufferedReader reader = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream(), - ITracClient.CHARSET)); - HtmlStreamTokenizer tokenizer = new HtmlStreamTokenizer(reader, null); - for (Token token = tokenizer.nextToken(); token.getType() != Token.EOF; token = tokenizer.nextToken()) { - if (monitor.isCanceled()) { - throw new OperationCanceledException(); - } - - if (token.getType() == Token.TAG) { - HtmlTag tag = (HtmlTag) token.getValue(); - if (tag.getTagType() == HtmlTag.Type.SELECT) { - String name = tag.getAttribute("id"); - if ("component".equals(name)) { - List<String> values = getOptionValues(tokenizer); - data.components = new ArrayList<TracComponent>(values.size()); - for (String value : values) { - data.components.add(new TracComponent(value)); - } - } else if ("milestone".equals(name)) { - List<String> values = getOptionValues(tokenizer); - data.milestones = new ArrayList<TracMilestone>(values.size()); - for (String value : values) { - data.milestones.add(new TracMilestone(value)); - } - } else if ("priority".equals(name)) { - List<String> values = getOptionValues(tokenizer); - data.priorities = new ArrayList<TracPriority>(values.size()); - for (int i = 0; i < values.size(); i++) { - data.priorities.add(new TracPriority(values.get(i), i + 1)); - } - } else if ("severity".equals(name)) { - List<String> values = getOptionValues(tokenizer); - data.severities = new ArrayList<TracSeverity>(values.size()); - for (int i = 0; i < values.size(); i++) { - data.severities.add(new TracSeverity(values.get(i), i + 1)); - } - } else if ("type".equals(name)) { - List<String> values = getOptionValues(tokenizer); - data.ticketTypes = new ArrayList<TracTicketType>(values.size()); - for (int i = 0; i < values.size(); i++) { - data.ticketTypes.add(new TracTicketType(values.get(i), i + 1)); - } - } else if ("version".equals(name)) { - List<String> values = getOptionValues(tokenizer); - data.versions = new ArrayList<TracVersion>(values.size()); - for (String value : values) { - data.versions.add(new TracVersion(value)); - } - } - } - } - } - - data.ticketResolutions = new ArrayList<TracTicketResolution>(5); - data.ticketResolutions.add(new TracTicketResolution("fixed", 1)); - data.ticketResolutions.add(new TracTicketResolution("invalid", 2)); - data.ticketResolutions.add(new TracTicketResolution("wontfix", 3)); - data.ticketResolutions.add(new TracTicketResolution("duplicate", 4)); - data.ticketResolutions.add(new TracTicketResolution("worksforme", 5)); - - data.ticketStatus = new ArrayList<TracTicketStatus>(4); - data.ticketStatus.add(new TracTicketStatus("new", 1)); - data.ticketStatus.add(new TracTicketStatus("assigned", 2)); - data.ticketStatus.add(new TracTicketStatus("reopened", 3)); - data.ticketStatus.add(new TracTicketStatus("closed", 4)); - } catch (IOException e) { - throw new TracException(e); - } catch (ParseException e) { - throw new TracException(e); - } finally { - method.releaseConnection(); - } - } - - private List<String> getOptionValues(HtmlStreamTokenizer tokenizer) throws IOException, ParseException { - List<String> values = new ArrayList<String>(); - for (Token token = tokenizer.nextToken(); token.getType() != Token.EOF; token = tokenizer.nextToken()) { - if (token.getType() == Token.TAG) { - HtmlTag tag = (HtmlTag) token.getValue(); - if (tag.getTagType() == HtmlTag.Type.OPTION && !tag.isEndTag()) { - String value = getText(tokenizer).trim(); - if (value.length() > 0) { - values.add(value); - } - } else { - return values; - } - } - } - return values; - } - - private String getText(HtmlStreamTokenizer tokenizer) throws IOException, ParseException { - StringBuffer sb = new StringBuffer(); - for (Token token = tokenizer.nextToken(); token.getType() != Token.EOF; token = tokenizer.nextToken()) { - if (token.getType() == Token.TEXT) { - sb.append(token.toString()); - } else if (token.getType() == Token.COMMENT) { - // ignore - } else { - break; - } - } - return HtmlStreamTokenizer.unescape(sb).toString(); - } - - /** - * Looks for a <code>strong</code> tag and returns the text enclosed by - * the tag. - */ - private String getStrongText(HtmlStreamTokenizer tokenizer) throws IOException, ParseException { - for (Token token = tokenizer.nextToken(); token.getType() != Token.EOF; token = tokenizer.nextToken()) { - if (token.getType() == Token.TAG && ((HtmlTag) token.getValue()).getTagType() == HtmlTag.Type.STRONG) { - return getText(tokenizer); - } else if (token.getType() == Token.COMMENT) { - // ignore - } else if (token.getType() == Token.TEXT) { - // ignore - } else { - break; - } - } - return ""; - } - - public byte[] getAttachmentData(int id, String filename) throws TracException { - throw new TracException("Unsupported operation"); - } - - public void putAttachmentData(int id, String name, String description, byte[] data) throws TracException { - throw new TracException("Unsupported operation"); - } - - public void createTicket(TracTicket ticket) throws TracException { - throw new TracException("Unsupported operation"); - } - - public void updateTicket(TracTicket ticket, String comment) throws TracException { - throw new TracException("Unsupported operation"); - } - - public Set<Integer> getChangedTickets(Date since) throws TracException { - return null; - } - -} diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttachmentHandler.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttachmentHandler.java deleted file mode 100644 index 3584a92ac..000000000 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttachmentHandler.java +++ /dev/null @@ -1,118 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.core; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.Proxy; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.mylar.internal.trac.core.model.TracTicket; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.IAttachmentHandler; -import org.eclipse.mylar.tasks.core.RepositoryAttachment; -import org.eclipse.mylar.tasks.core.RepositoryTaskAttribute; -import org.eclipse.mylar.tasks.core.TaskRepository; - -/** - * @author Steffen Pingel - */ -public class TracAttachmentHandler implements IAttachmentHandler { - - private TracRepositoryConnector connector; - - public TracAttachmentHandler(TracRepositoryConnector connector) { - this.connector = connector; - } - - public void downloadAttachment(TaskRepository repository, AbstractRepositoryTask task, RepositoryAttachment attachment, File file, Proxy proxySettings) throws CoreException { - String filename = attachment.getAttributeValue(RepositoryTaskAttribute.ATTACHMENT_FILENAME); - if (filename == null) { - throw new CoreException(new Status(IStatus.ERROR, TracCorePlugin.PLUGIN_ID, IStatus.OK, "Attachment download from " + task.getRepositoryUrl() + " failed, missing attachment filename.", null)); - } - - try { - ITracClient client = connector.getClientManager().getRepository(repository); - int id = Integer.parseInt(AbstractRepositoryTask.getTaskId(task.getHandleIdentifier())); - byte[] data = client.getAttachmentData(id, filename); - writeData(file, data); - } catch (Exception e) { - throw new CoreException(new Status(IStatus.ERROR, TracCorePlugin.PLUGIN_ID, 0, "Attachment download from " + task.getRepositoryUrl() + " failed, please see details.", e )); - } - } - - private void writeData(File file, byte[] data) throws IOException { - OutputStream out = new FileOutputStream(file); - try { - out.write(data); - } finally { - out.close(); - } - } - - public void uploadAttachment(TaskRepository repository, AbstractRepositoryTask task, String comment, String description, File file, String contentType, boolean isPatch, Proxy proxySettings) throws CoreException { - if (!connector.hasAttachmentSupport(repository, task)) { - throw new CoreException(new Status(IStatus.INFO, TracCorePlugin.PLUGIN_ID, IStatus.OK, "Attachments are not supported by this repository access type.", null)); - } - - try { - ITracClient client = connector.getClientManager().getRepository(repository); - int id = Integer.parseInt(AbstractRepositoryTask.getTaskId(task.getHandleIdentifier())); - byte[] data = readData(file); - client.putAttachmentData(id, file.getName(), description, data); - if (comment != null && comment.length() > 0) { - TracTicket ticket = new TracTicket(id); - client.updateTicket(ticket, comment); - } - } catch (Exception e) { - throw new CoreException(new Status(IStatus.ERROR, TracCorePlugin.PLUGIN_ID, 0, "Attachment upload to " + task.getRepositoryUrl() + " failed, please see details.", e )); - } - } - - private byte[] readData(File file) throws IOException { - if (file.length() > Integer.MAX_VALUE) { - throw new IOException("Can not upload files larger than " + Integer.MAX_VALUE + " bytes"); - } - - InputStream in = new FileInputStream(file); - try { - byte[] data = new byte[(int) file.length()]; - in.read(data, 0, (int) file.length()); - return data; - } finally { - in.close(); - } - } - - public boolean canDownloadAttachment(TaskRepository repository, AbstractRepositoryTask task) { - return connector.hasAttachmentSupport(repository, task); - } - - public boolean canUploadAttachment(TaskRepository repository, AbstractRepositoryTask task) { - return connector.hasAttachmentSupport(repository, task); - } - - public boolean canDeprecate(TaskRepository repository, RepositoryAttachment attachment) { - return false; - } - - public void updateAttachment(TaskRepository repository, RepositoryAttachment attachment) throws CoreException { - // ignore - } - -} diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttributeFactory.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttributeFactory.java deleted file mode 100644 index 386e6febd..000000000 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttributeFactory.java +++ /dev/null @@ -1,136 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.core; - -import java.util.HashMap; -import java.util.Map; - -import org.eclipse.mylar.internal.trac.core.model.TracTicket.Key; -import org.eclipse.mylar.tasks.core.AbstractAttributeFactory; -import org.eclipse.mylar.tasks.core.RepositoryTaskAttribute; - -/** - * Provides a mapping from Mylar task keys to Trac ticket keys. - * - * @author Steffen Pingel - */ -public class TracAttributeFactory extends AbstractAttributeFactory { - - private static final long serialVersionUID = 5333211422546115138L; - - private static Map<String, Attribute> attributeByTracKey = new HashMap<String, Attribute>(); - - private static Map<String, String> tracKeyByTaskKey = new HashMap<String, String>(); - - public enum Attribute { - CC(Key.CC, "CC:", RepositoryTaskAttribute.USER_CC), - CHANGE_TIME(Key.CHANGE_TIME, "Last Modification:", RepositoryTaskAttribute.DATE_MODIFIED, true, true), - COMPONENT(Key.COMPONENT, "Component:", null), - DESCRIPTION(Key.DESCRIPTION, "Description:", RepositoryTaskAttribute.DESCRIPTION, true, false), - ID(Key.ID, "<used by search engine>", null, true), - KEYWORDS(Key.KEYWORDS, "Keywords:", RepositoryTaskAttribute.KEYWORDS), - MILESTONE(Key.MILESTONE, "Milestone:", null), - OWNER(Key.OWNER, "Owner:", RepositoryTaskAttribute.USER_OWNER, false, true), - PRIORITY(Key.PRIORITY, "Priority:", null), - REPORTER(Key.REPORTER, "Reporter:", RepositoryTaskAttribute.USER_REPORTER, false, true), - RESOLUTION(Key.RESOLUTION, "Resolution:", RepositoryTaskAttribute.RESOLUTION, false, true), - SEVERITY(Key.SEVERITY, "Severity:", null), - STATUS(Key.STATUS, "Status:", RepositoryTaskAttribute.STATUS, false, true), - SUMMARY(Key.SUMMARY, "Summary:", RepositoryTaskAttribute.SUMMARY, true), - TIME(Key.TIME, "Created:", RepositoryTaskAttribute.DATE_CREATION, true, true), - TYPE(Key.TYPE, "Type:", null), - VERSION(Key.VERSION, "Version:", null); - - private final boolean isHidden; - - private final boolean isReadOnly; - - private final String tracKey; - - private final String prettyName; - - private final String taskKey; - - Attribute(Key key, String prettyName, String taskKey, boolean hidden, boolean readonly) { - this.tracKey = key.getKey(); - this.taskKey = taskKey; - this.prettyName = prettyName; - this.isHidden = hidden; - this.isReadOnly = readonly; - - attributeByTracKey.put(tracKey, this); - if (taskKey != null) { - tracKeyByTaskKey.put(taskKey, tracKey); - } - } - - Attribute(Key key, String prettyName, String taskKey, boolean hidden) { - this(key, prettyName, taskKey, hidden, false); - } - - Attribute(Key key, String prettyName, String taskKey) { - this(key, prettyName, taskKey, false, false); - } - - public String getTaskKey() { - return taskKey; - } - - public String getTracKey() { - return tracKey; - } - - public boolean isHidden() { - return isHidden; - } - - public boolean isReadOnly() { - return isReadOnly; - } - - public String toString() { - return prettyName; - } - } - - static { - // make sure hash maps get initialized when class is loaded - Attribute.values(); - } - - @Override - public boolean getIsHidden(String key) { - Attribute attribute = attributeByTracKey.get(key); - return (attribute != null) ? attribute.isHidden() : false; - } - - @Override - public String getName(String key) { - Attribute attribute = attributeByTracKey.get(key); - // TODO if attribute == null it is probably a custom field: need - // to query custom field information from repoository - return (attribute != null) ? attribute.toString() : key; - } - - @Override - public boolean isReadOnly(String key) { - Attribute attribute = attributeByTracKey.get(key); - return (attribute != null) ? attribute.isReadOnly() : false; - } - - @Override - public String mapCommonAttributeKey(String key) { - String tracKey = tracKeyByTaskKey.get(key); - return (tracKey != null) ? tracKey : key; - } - -} diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracClientFactory.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracClientFactory.java deleted file mode 100644 index 50b7ea6e3..000000000 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracClientFactory.java +++ /dev/null @@ -1,65 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.core; - -import java.net.MalformedURLException; -import java.net.URL; - -import org.eclipse.mylar.internal.trac.core.ITracClient.Version; - -/** - * @author Steffen Pingel - */ -public class TracClientFactory { - - public static ITracClient createClient(String location, Version version, String username, String password) - throws MalformedURLException { - URL url = new URL(location); - - if (version == Version.TRAC_0_9) { - return new Trac09Client(url, version, username, password); - } else if (version == Version.XML_RPC) { - return new TracXmlRpcClient(url, version, username, password); - } - - throw new RuntimeException("Invalid repository version: " + version); - } - - /** - * Tries all supported access types for <code>location</code> and returns - * the corresponding version if successful; throws an exception otherwise. - * - * <p> - * Order of the tried access types: XML-RPC, Trac 0.9 - */ - public static Version probeClient(String location, String username, String password) throws MalformedURLException, - TracException { - URL url = new URL(location); - try { - ITracClient repository = new TracXmlRpcClient(url, Version.XML_RPC, username, password); - repository.validate(); - return Version.XML_RPC; - } catch (TracException e) { - try { - ITracClient repository = new Trac09Client(url, Version.TRAC_0_9, username, password); - repository.validate(); - return Version.TRAC_0_9; - } catch (TracLoginException e2) { - throw e; - } catch (TracException e2) { - } - } - - throw new TracException(); - } - -} diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracClientManager.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracClientManager.java deleted file mode 100644 index 329b7104f..000000000 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracClientManager.java +++ /dev/null @@ -1,141 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.core; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.net.MalformedURLException; -import java.util.HashMap; -import java.util.Map; - -import org.eclipse.mylar.internal.trac.core.ITracClient.Version; -import org.eclipse.mylar.tasks.core.ITaskRepositoryListener; -import org.eclipse.mylar.tasks.core.TaskRepository; - -/** - * Caches {@link ITracClient} objects. - * - * @author Steffen Pingel - */ -public class TracClientManager implements ITaskRepositoryListener { - - private Map<String, ITracClient> clientByUrl = new HashMap<String, ITracClient>(); - - private Map<String, TracClientData> clientDataByUrl = new HashMap<String, TracClientData>(); - - private File cacheFile; - - public TracClientManager(File cacheFile) { - this.cacheFile = cacheFile; - - readCache(); - } - - public synchronized ITracClient getRepository(TaskRepository taskRepository) throws MalformedURLException { - ITracClient repository = clientByUrl.get(taskRepository.getUrl()); - if (repository == null) { - repository = TracClientFactory.createClient(taskRepository.getUrl(), Version.fromVersion(taskRepository - .getVersion()), taskRepository.getUserName(), taskRepository.getPassword()); - clientByUrl.put(taskRepository.getUrl(), repository); - - TracClientData data = clientDataByUrl.get(taskRepository.getUrl()); - if (data == null) { - data = new TracClientData(); - clientDataByUrl.put(taskRepository.getUrl(), data); - } - repository.setData(data); - } - return repository; - } - - public void repositoriesRead() { - // ignore - } - - public synchronized void repositoryAdded(TaskRepository repository) { - // make sure there is no stale client still in the cache, bug #149939 - clientByUrl.remove(repository.getUrl()); - clientDataByUrl.remove(repository.getUrl()); - } - - public synchronized void repositoryRemoved(TaskRepository repository) { - clientByUrl.remove(repository.getUrl()); - clientDataByUrl.remove(repository.getUrl()); - } - - public synchronized void repositorySettingsChanged(TaskRepository repository) { - clientByUrl.remove(repository.getUrl()); - // if url is changed a stale data object will be left in clientDataByUrl, bug #149939 - } - - @SuppressWarnings("unchecked") - public void readCache() { - if (cacheFile == null || !cacheFile.exists()) { - return; - } - - ObjectInputStream in = null; - try { - in = new ObjectInputStream(new FileInputStream(cacheFile)); - int size = in.readInt(); - for (int i = 0; i < size; i++) { - String url = (String) in.readObject(); - TracClientData data = (TracClientData) in.readObject(); - if (url != null && data != null) { - clientDataByUrl.put(url, data); - } - } - } catch (Throwable e) { - TracCorePlugin.log(e); - } finally { - if (in != null) { - try { - in.close(); - } catch (IOException e) { - // ignore - } - } - } - - } - - public void writeCache() { - if (cacheFile == null) { - return; - } - - ObjectOutputStream out = null; - try { - out = new ObjectOutputStream(new FileOutputStream(cacheFile)); - out.writeInt(clientDataByUrl.size()); - for (String url : clientDataByUrl.keySet()) { - out.writeObject(url); - out.writeObject(clientDataByUrl.get(url)); - } - } catch (IOException e) { - TracCorePlugin.log(e); - } finally { - if (out != null) { - try { - out.close(); - } catch (IOException e) { - // ignore - } - } - } - } - -} diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracCorePlugin.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracCorePlugin.java deleted file mode 100644 index 20f14607b..000000000 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracCorePlugin.java +++ /dev/null @@ -1,117 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.trac.core; - -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Plugin; -import org.eclipse.core.runtime.Status; -import org.osgi.framework.BundleContext; - -/** - * The headless Trac plug-in class. - * - * @author Steffen Pingel - */ -public class TracCorePlugin extends Plugin { - - public static final String PLUGIN_ID = "org.eclipse.mylar.trac.core"; - - public static final String ENCODING_UTF_8 = "UTF-8"; - - private static TracCorePlugin plugin; - - public final static String REPOSITORY_KIND = "trac"; - - private TracRepositoryConnector connector; - - public TracCorePlugin() { - } - - public static TracCorePlugin getDefault() { - return plugin; - } - - @Override - public void start(BundleContext context) throws Exception { - super.start(context); - plugin = this; - } - - @Override - public void stop(BundleContext context) throws Exception { - if (connector != null) { - connector.stop(); - connector = null; - } - - plugin = null; - super.stop(context); - } - - public TracRepositoryConnector getConnector() { - return connector; - } - - void setConnector(TracRepositoryConnector connector) { - this.connector = connector; - } - - /** - * Returns the path to the file caching repository attributes. - */ - protected IPath getRepostioryAttributeCachePath() { - IPath stateLocation = Platform.getStateLocation(TracCorePlugin.getDefault().getBundle()); - IPath cacheFile = stateLocation.append("repositoryConfigurations"); - return cacheFile; - } - - public static IStatus toStatus(Throwable e) { - if (e instanceof TracLoginException) { - return new Status(Status.ERROR, PLUGIN_ID, IStatus.INFO, - "Your login name or password is incorrect. Ensure proper repository configuration in Task Repositories View.", null); - } else if (e instanceof TracException) { - return new Status(Status.ERROR, PLUGIN_ID, IStatus.INFO, "Connection Error: " + e.getMessage(), e); - } else if (e instanceof ClassCastException) { - return new Status(Status.ERROR, PLUGIN_ID, IStatus.INFO, "Error parsing server response", e); - } else { - return new Status(Status.ERROR, PLUGIN_ID, IStatus.ERROR, "Unexpected error", e); - } - } - - /** - * Convenience method for logging statuses to the plug-in log - * - * @param status - * the status to log - */ - public static void log(IStatus status) { - getDefault().getLog().log(status); - } - - /** - * Convenience method for logging exceptions to the plug-in log - * - * @param e - * the exception to log - */ - public static void log(Throwable e) { - String message = e.getMessage(); - if (e.getMessage() == null) { - message = e.getClass().toString(); - } - log(new Status(Status.ERROR, TracCorePlugin.PLUGIN_ID, 0, message, e)); - } - -} - - diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracException.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracException.java deleted file mode 100644 index f38b02a4a..000000000 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracException.java +++ /dev/null @@ -1,38 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.core; - -/** - * Indicates an error during repository access. - * - * @author Steffen Pingel - */ -public class TracException extends Exception { - - private static final long serialVersionUID = 1929614326467463462L; - - public TracException() { - } - - public TracException(String message) { - super(message); - } - - public TracException(Throwable cause) { - super(cause); - } - - public TracException(String message, Throwable cause) { - super(message, cause); - } - -} diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracOfflineTaskHandler.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracOfflineTaskHandler.java deleted file mode 100644 index 9c18d60e3..000000000 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracOfflineTaskHandler.java +++ /dev/null @@ -1,275 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.core; - -import java.io.UnsupportedEncodingException; -import java.net.Proxy; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.Status; -import org.eclipse.mylar.internal.trac.core.TracAttributeFactory.Attribute; -import org.eclipse.mylar.internal.trac.core.model.TracAttachment; -import org.eclipse.mylar.internal.trac.core.model.TracComment; -import org.eclipse.mylar.internal.trac.core.model.TracTicket; -import org.eclipse.mylar.internal.trac.core.util.TracUtils; -import org.eclipse.mylar.tasks.core.AbstractAttributeFactory; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.IOfflineTaskHandler; -import org.eclipse.mylar.tasks.core.RepositoryAttachment; -import org.eclipse.mylar.tasks.core.RepositoryOperation; -import org.eclipse.mylar.tasks.core.RepositoryTaskAttribute; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.mylar.tasks.core.TaskComment; -import org.eclipse.mylar.tasks.core.TaskRepository; - -/** - * @author Steffen Pingel - */ -public class TracOfflineTaskHandler implements IOfflineTaskHandler { - - private AbstractAttributeFactory attributeFactory = new TracAttributeFactory(); - - private TracRepositoryConnector connector; - - public TracOfflineTaskHandler(TracRepositoryConnector connector) { - this.connector = connector; - } - - public RepositoryTaskData downloadTaskData(final AbstractRepositoryTask task, TaskRepository repository, Proxy proxySettings) throws CoreException { - if (!connector.hasRichEditor(repository, task)) { - // offline mode is only supported for XML-RPC - return null; - } - - try { - int id = Integer.parseInt(AbstractRepositoryTask.getTaskId(task.getHandleIdentifier())); - RepositoryTaskData data = new RepositoryTaskData(attributeFactory, TracCorePlugin.REPOSITORY_KIND, - repository.getUrl(), id + ""); - ITracClient client = connector.getClientManager().getRepository(repository); - client.updateAttributes(new NullProgressMonitor(), false); - TracTicket ticket = client.getTicket(id); - createDefaultAttributes(attributeFactory, data, client); - updateTaskData(repository, attributeFactory, data, ticket); - return data; - } catch (Exception e) { - throw new CoreException(new Status(IStatus.ERROR, TracCorePlugin.PLUGIN_ID, 0, "Ticket download from " - + task.getRepositoryUrl() + " failed, please see details.", e)); - } - } - - public AbstractAttributeFactory getAttributeFactory() { - return attributeFactory; - } - - public Date getDateForAttributeType(String attributeKey, String dateString) { - if (dateString == null || dateString.length() == 0) { - return null; - } - - try { - String mappedKey = attributeFactory.mapCommonAttributeKey(attributeKey); - if (mappedKey.equals(Attribute.TIME.getTracKey()) || mappedKey.equals(Attribute.CHANGE_TIME.getTracKey())) { - return TracUtils.parseDate(Integer.valueOf(dateString)); - } - } catch (Exception e) { - } - return null; - } - - public static void updateTaskData(TaskRepository repository, AbstractAttributeFactory factory, - RepositoryTaskData data, TracTicket ticket) { - if (ticket.getCreated() != null) { - data.setAttributeValue(Attribute.TIME.getTracKey(), TracUtils.toTracTime(ticket.getCreated()) + ""); - } - if (ticket.getLastChanged() != null) { - data.setAttributeValue(Attribute.CHANGE_TIME.getTracKey(), TracUtils.toTracTime(ticket.getLastChanged()) - + ""); - } - Map<String, String> valueByKey = ticket.getValues(); - for (String key : valueByKey.keySet()) { - data.setAttributeValue(key, valueByKey.get(key)); - } - - TracComment[] comments = ticket.getComments(); - if (comments != null) { - for (int i = 0; i < comments.length; i++) { - if (!"comment".equals(comments[i].getField()) || "".equals(comments[i].getNewValue())) { - continue; - } - - TaskComment taskComment = new TaskComment(factory, data, data.getComments().size() + 1); - taskComment.setAttributeValue(RepositoryTaskAttribute.USER_OWNER, comments[i].getAuthor()); - taskComment - .setAttributeValue(RepositoryTaskAttribute.COMMENT_DATE, comments[i].getCreated().toString()); - taskComment.setAttributeValue(RepositoryTaskAttribute.COMMENT_TEXT, comments[i].getNewValue()); - data.addComment(taskComment); - } - } - - TracAttachment[] attachments = ticket.getAttachments(); - if (attachments != null) { - for (int i = 0; i < attachments.length; i++) { - RepositoryAttachment taskAttachment = new RepositoryAttachment(factory); - taskAttachment.setCreator(attachments[i].getAuthor()); - taskAttachment.setAttributeValue(Attribute.DESCRIPTION.getTracKey(), attachments[i].getDescription()); - taskAttachment.setAttributeValue(RepositoryTaskAttribute.ATTACHMENT_FILENAME, attachments[i] - .getFilename()); - taskAttachment.setAttributeValue(RepositoryTaskAttribute.USER_OWNER, attachments[i].getAuthor()); - taskAttachment.setAttributeValue(RepositoryTaskAttribute.ATTACHMENT_DATE, attachments[i].getCreated() - .toString()); - taskAttachment.setAttributeValue(RepositoryTaskAttribute.ATTACHMENT_URL, repository.getUrl() - + ITracClient.TICKET_ATTACHMENT_URL + ticket.getId() + "/" + attachments[i].getFilename()); - taskAttachment.setAttributeValue(RepositoryTaskAttribute.ATTACHMENT_ID, i + ""); - data.addAttachment(taskAttachment); - } - } - - String[] actions = ticket.getActions(); - if (actions != null) { - // add operations in a defined order - List<String> actionList = new ArrayList<String>(Arrays.asList(actions)); - addOperation(repository, data, ticket, actionList, "leave"); - addOperation(repository, data, ticket, actionList, "accept"); - addOperation(repository, data, ticket, actionList, "resolve"); - addOperation(repository, data, ticket, actionList, "reassign"); - addOperation(repository, data, ticket, actionList, "reopen"); - } - } - - // TODO Reuse Labels from BugzillaServerFacade - private static void addOperation(TaskRepository repository, RepositoryTaskData data, TracTicket ticket, - List<String> actions, String action) { - if (!actions.remove(action)) { - return; - } - - RepositoryOperation operation = null; - if ("leave".equals(action)) { - operation = new RepositoryOperation(action, "Leave as " + data.getStatus() + " " + data.getResolution()); - operation.setChecked(true); - } else if ("accept".equals(action)) { - operation = new RepositoryOperation(action, "Accept"); - } else if ("resolve".equals(action)) { - operation = new RepositoryOperation(action, "Resolve bug, changing resolution to"); - operation.setUpOptions("resolution"); - for (String resolution : ticket.getResolutions()) { - operation.addOption(resolution, resolution); - } - } else if ("reassign".equals(action)) { - operation = new RepositoryOperation(action, "Reassing bug to"); - operation.setInputName("owner"); - operation.setInputValue(TracRepositoryConnector.getDisplayUsername(repository)); - } else if ("reopen".equals(action)) { - operation = new RepositoryOperation(action, "Reopen"); - } - - if (operation != null) { - data.addOperation(operation); - } - } - - public static void createDefaultAttributes(AbstractAttributeFactory factory, RepositoryTaskData data, - ITracClient client) { - createAttribute(factory, data, Attribute.STATUS, client.getTicketStatus()); - createAttribute(factory, data, Attribute.RESOLUTION, client.getTicketResolutions()); - - createAttribute(factory, data, Attribute.COMPONENT, client.getComponents()); - createAttribute(factory, data, Attribute.VERSION, client.getVersions(), true); - createAttribute(factory, data, Attribute.PRIORITY, client.getPriorities()); - createAttribute(factory, data, Attribute.SEVERITY, client.getSeverities()); - - createAttribute(factory, data, Attribute.TYPE, client.getTicketTypes()); - createAttribute(factory, data, Attribute.OWNER); - createAttribute(factory, data, Attribute.MILESTONE, client.getMilestones(), true); - createAttribute(factory, data, Attribute.REPORTER); - - createAttribute(factory, data, Attribute.CC); - createAttribute(factory, data, Attribute.KEYWORDS); - } - - private static RepositoryTaskAttribute createAttribute(AbstractAttributeFactory factory, RepositoryTaskData data, - Attribute attribute, Object[] values, boolean allowEmtpy) { - RepositoryTaskAttribute attr = factory.createAttribute(attribute.getTracKey()); - if (values != null && values.length > 0) { - if (allowEmtpy) { - attr.addOptionValue("", ""); - } - for (int i = 0; i < values.length; i++) { - attr.addOptionValue(values[i].toString(), values[i].toString()); - } - } else { - // attr.setHidden(true); - attr.setReadOnly(true); - } - data.addAttribute(attribute.getTracKey(), attr); - return attr; - } - - private static RepositoryTaskAttribute createAttribute(AbstractAttributeFactory factory, RepositoryTaskData data, - Attribute attribute) { - RepositoryTaskAttribute attr = factory.createAttribute(attribute.getTracKey()); - data.addAttribute(attribute.getTracKey(), attr); - return attr; - } - - private static RepositoryTaskAttribute createAttribute(AbstractAttributeFactory factory, RepositoryTaskData data, - Attribute attribute, Object[] values) { - return createAttribute(factory, data, attribute, values, false); - } - - public Set<AbstractRepositoryTask> getChangedSinceLastSync(TaskRepository repository, - Set<AbstractRepositoryTask> tasks, Proxy proxySettings) throws CoreException, UnsupportedEncodingException { - if (repository.getSyncTimeStamp() == null) { - return tasks; - } - - if (!connector.hasChangedSince(repository)) { - // return an empty list to avoid causing all tasks to synchronized - return Collections.emptySet(); - } - - Date since = new Date(0); - try { - since = TracUtils.parseDate(Integer.parseInt(repository.getSyncTimeStamp())); - } catch (NumberFormatException e) { - } - - ITracClient client; - try { - client = connector.getClientManager().getRepository(repository); - Set<Integer> ids = client.getChangedTickets(since); - - Set<AbstractRepositoryTask> result = new HashSet<AbstractRepositoryTask>(); - if (!ids.isEmpty()) { - for (AbstractRepositoryTask task : tasks) { - Integer id = Integer.parseInt(AbstractRepositoryTask.getTaskId(task.getHandleIdentifier())); - if (ids.contains(id)) { - result.add(task); - } - } - } - return result; - } catch (Exception e) { - throw new CoreException(new Status(IStatus.ERROR, TracCorePlugin.PLUGIN_ID, IStatus.OK, "could not determine changed tasks", e)); - } - } -} diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracQueryHit.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracQueryHit.java deleted file mode 100644 index 261312ed8..000000000 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracQueryHit.java +++ /dev/null @@ -1,81 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.core; - -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.TaskList; - -/** - * @author Steffen Pingel - */ -public class TracQueryHit extends AbstractQueryHit { - - private TracTask task; - - private boolean completed; - - private TaskList taskList; - - public TracQueryHit(TaskList taskList, String repositoryUrl, String description, String id) { - super(repositoryUrl, description, id); - - this.taskList = taskList; - } - - public TracQueryHit(TaskList taskList, String handle) { - super(AbstractRepositoryTask.getRepositoryUrl(handle), "", AbstractRepositoryTask.getTaskId(handle)); - - this.taskList = taskList; - } - - @Override - public AbstractRepositoryTask getCorrespondingTask() { - return task; - } - - @Override - public AbstractRepositoryTask getOrCreateCorrespondingTask() { - ITask existingTask = taskList.getTask(getHandleIdentifier()); - if (existingTask instanceof TracTask) { - this.task = (TracTask) existingTask; - } else { - this.task = new TracTask(getHandleIdentifier(), getDescription(), true); - task.setCompleted(completed); - task.setPriority(priority); - taskList.addTask(task); - } - return task; - } - - @Override - public boolean isCompleted() { - return (task != null) ? task.isCompleted() : completed; - } - - @Override - public void setCorrespondingTask(AbstractRepositoryTask task) { - if (task instanceof TracTask) { - this.task = (TracTask) task; - } - } - - public String getUrl() { - return getRepositoryUrl() + ITracClient.TICKET_URL + getId(); - } - - public void setCompleted(boolean completed) { - this.completed = completed; - } - -} diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryConnector.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryConnector.java deleted file mode 100644 index c6ade79f6..000000000 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryConnector.java +++ /dev/null @@ -1,239 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.core; - -import java.io.File; -import java.net.Proxy; -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.trac.core.ITracClient.Version; -import org.eclipse.mylar.internal.trac.core.TracTask.Kind; -import org.eclipse.mylar.internal.trac.core.model.TracTicket; -import org.eclipse.mylar.internal.trac.core.model.TracTicket.Key; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.IAttachmentHandler; -import org.eclipse.mylar.tasks.core.IOfflineTaskHandler; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.QueryHitCollector; -import org.eclipse.mylar.tasks.core.TaskRepository; - -/** - * @author Steffen Pingel - */ -public class TracRepositoryConnector extends AbstractRepositoryConnector { - - private final static String CLIENT_LABEL = "Trac (supports 0.9 and later or XML-RPC)"; - - private List<String> supportedVersions; - - private TracClientManager clientManager; - - private TracOfflineTaskHandler offlineTaskHandler = new TracOfflineTaskHandler(this); - - private TracAttachmentHandler attachmentHandler = new TracAttachmentHandler(this); - - public TracRepositoryConnector() { - TracCorePlugin.getDefault().setConnector(this); - } - - @Override - public boolean canCreateNewTask(TaskRepository repository) { - return true; - } - - @Override - public boolean canCreateTaskFromKey(TaskRepository repository) { - return true; - } - - @Override - public String getLabel() { - return CLIENT_LABEL; - } - - @Override - public String getRepositoryType() { - return TracCorePlugin.REPOSITORY_KIND; - } - - @Override - public String getRepositoryUrlFromTaskUrl(String url) { - if (url == null) { - return null; - } - int i = url.lastIndexOf(ITracClient.TICKET_URL); - return (i != -1) ? url.substring(0, i) : null; - } - - @Override - public List<String> getSupportedVersions() { - if (supportedVersions == null) { - supportedVersions = new ArrayList<String>(); - for (Version version : Version.values()) { - supportedVersions.add(version.toString()); - } - } - return supportedVersions; - } - - @Override - public IAttachmentHandler getAttachmentHandler() { - return attachmentHandler; - } - - @Override - public IOfflineTaskHandler getOfflineTaskHandler() { - return offlineTaskHandler; - } - - @Override - public void updateTaskState(AbstractRepositoryTask repositoryTask) { - // TODO Auto-generated method stub - } - - @Override - public IStatus performQuery(AbstractRepositoryQuery query, TaskRepository repository, - Proxy proxySettings, IProgressMonitor monitor, QueryHitCollector resultCollector) { - - final List<TracTicket> tickets = new ArrayList<TracTicket>(); - - ITracClient tracClient; - try { - tracClient = getClientManager().getRepository(repository); - if (query instanceof TracRepositoryQuery) { - tracClient.search(((TracRepositoryQuery) query).getTracSearch(), tickets); - } - - for (TracTicket ticket : tickets) { - TracQueryHit hit = new TracQueryHit(taskList, query.getRepositoryUrl(), getTicketDescription(ticket), ticket - .getId() - + ""); - hit.setCompleted(TracTask.isCompleted(ticket.getValue(Key.STATUS))); - hit.setPriority(TracTask.getMylarPriority(ticket.getValue(Key.PRIORITY))); - resultCollector.accept(hit); - } - } catch (Throwable e) { - return TracCorePlugin.toStatus(e); - } - - return Status.OK_STATUS; - } - - @Override - public ITask createTaskFromExistingKey(TaskRepository repository, String id, Proxy proxySettings) throws CoreException { - try { - ITracClient connection = getClientManager().getRepository(repository); - TracTicket ticket = connection.getTicket(Integer.parseInt(id)); - - String handleIdentifier = AbstractRepositoryTask.getHandle(repository.getUrl(), ticket.getId()); - TracTask task = createTask(ticket, handleIdentifier); - updateTaskDetails(task, ticket, true); - - return task; - } catch (Exception e) { - throw new CoreException(TracCorePlugin.toStatus(e)); - } - } - - public synchronized TracClientManager getClientManager() { - if (clientManager == null) { - File cacheFile = null; - if (TracCorePlugin.getDefault().getRepostioryAttributeCachePath() != null) { - cacheFile = TracCorePlugin.getDefault().getRepostioryAttributeCachePath().toFile(); - } - clientManager = new TracClientManager(cacheFile); - } - return clientManager; - } - - public TracTask createTask(TracTicket ticket, String handleIdentifier) { - TracTask task; - ITask existingTask = taskList.getTask(handleIdentifier); - if (existingTask instanceof TracTask) { - task = (TracTask) existingTask; - } else { - task = new TracTask(handleIdentifier, getTicketDescription(ticket), true); - taskList.addTask(task); - } - return task; - } - - /** - * Updates fields of <code>task</code> from <code>ticket</code>. - */ - public void updateTaskDetails(TracTask task, TracTicket ticket, boolean notify) { - if (ticket.getValue(Key.SUMMARY) != null) { - task.setDescription(getTicketDescription(ticket)); - } - task.setCompleted(TracTask.isCompleted(ticket.getValue(Key.STATUS))); - task.setPriority(TracTask.getMylarPriority(ticket.getValue(Key.PRIORITY))); - if (ticket.getValue(Key.TYPE) != null) { - Kind kind = TracTask.Kind.fromType(ticket.getValue(Key.TYPE)); - task.setKind((kind != null) ? kind.toString() : ticket.getValue(Key.TYPE)); - } - if (ticket.getCreated() != null) { - task.setCreationDate(ticket.getCreated()); - } - - if (notify) { - taskList.notifyLocalInfoChanged(task); - } - } - - private static String getTicketDescription(TracTicket ticket) { - return ticket.getId() + ": " + ticket.getValue(Key.SUMMARY); - } - - public boolean hasChangedSince(TaskRepository repository) { - return Version.XML_RPC.name().equals(repository.getVersion()); - } - - public boolean hasRichEditor(TaskRepository repository, AbstractRepositoryTask task) { - return Version.XML_RPC.name().equals(repository.getVersion()); - } - - public boolean hasAttachmentSupport(TaskRepository repository, AbstractRepositoryTask task) { - return Version.XML_RPC.name().equals(repository.getVersion()); - } - - public void stop() { - if (clientManager != null) { - clientManager.writeCache(); - } - } - - @Override - public void updateAttributes(TaskRepository repository, Proxy proxySettings, IProgressMonitor monitor) throws CoreException { - try { - ITracClient client = getClientManager().getRepository(repository); - client.updateAttributes(monitor, true); - } catch (Exception e) { - MylarStatusHandler.fail(e, "Could not update attributes", false); - } - } - - public static String getDisplayUsername(TaskRepository repository) { - if (!repository.hasCredentials()) { - return ITracClient.DEFAULT_USERNAME; - } - return repository.getUserName(); - } - -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryQuery.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryQuery.java deleted file mode 100644 index 03daac842..000000000 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryQuery.java +++ /dev/null @@ -1,88 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.core; - -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.util.StringTokenizer; - -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.trac.core.model.TracSearch; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.TaskList; - -/** - * @author Steffen Pingel - */ -public class TracRepositoryQuery extends AbstractRepositoryQuery { - - public TracRepositoryQuery(String repositoryUrl, String queryUrl, String description, TaskList taskList) { - super(description, taskList); - - assert queryUrl.startsWith(repositoryUrl + ITracClient.QUERY_URL); - - setRepositoryUrl(repositoryUrl); - setUrl(queryUrl); - } - - @Override - public String getRepositoryKind() { - return TracCorePlugin.REPOSITORY_KIND; - } - - public String getQueryParameter() { - String url = getUrl(); - int i = url.indexOf(ITracClient.QUERY_URL); - if (i == -1) { - return null; - } - return url.substring(i + ITracClient.QUERY_URL.length()); - } - - /** - * Creates a <code>TracSearch</code> object from this query. - */ - public TracSearch getTracSearch() { - TracSearch list = new TracSearch(); - String url = getQueryParameter(); - if (url == null) { - return list; - } - - StringTokenizer t = new StringTokenizer(url, "&"); - while (t.hasMoreTokens()) { - String token = t.nextToken(); - int i = token.indexOf("="); - if (i != -1) { - try { - String key = URLDecoder.decode(token.substring(0, i), ITracClient.CHARSET); - String value = URLDecoder.decode(token.substring(i + 1), ITracClient.CHARSET); - - if ("order".equals(key)) { - list.setOrderBy(value); - } else if ("desc".equals(key)) { - list.setAscending(!"1".equals(value)); - } else if ("group".equals(key) || "groupdesc".equals(key) || "verbose".equals(key)) { - // ignore these parameters - } else { - list.addFilter(key, value); - } - } catch (UnsupportedEncodingException e) { - MylarStatusHandler.log(e, "Unexpected exception while decoding URL"); - } - } - } - - return list; - } - -} diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracTask.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracTask.java deleted file mode 100644 index fabd76cd2..000000000 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracTask.java +++ /dev/null @@ -1,183 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.core; - -import org.eclipse.mylar.internal.trac.core.TracAttributeFactory.Attribute; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.RepositoryTaskAttribute; -import org.eclipse.mylar.tasks.core.Task; - -/** - * @author Steffen Pingel - */ -public class TracTask extends AbstractRepositoryTask { - - public enum PriorityLevel { - BLOCKER, CRITICAL, MAJOR, MINOR, TRIVIAL; - - @Override - public String toString() { - switch (this) { - case BLOCKER: - return "P1"; - case CRITICAL: - return "P2"; - case MAJOR: - return "P3"; - case MINOR: - return "P4"; - case TRIVIAL: - return "P5"; - default: - return "P5"; - } - } - - public static PriorityLevel fromPriority(String priority) { - if (priority == null) - return null; - if (priority.equals("blocker")) - return BLOCKER; - if (priority.equals("critical")) - return CRITICAL; - if (priority.equals("major")) - return MAJOR; - if (priority.equals("minor")) - return MINOR; - if (priority.equals("trivial")) - return TRIVIAL; - return null; - } - } - - public enum Kind { - DEFECT, ENHANCEMENT, TASK; - - @Override - public String toString() { - switch (this) { - case DEFECT: - return "Defect"; - case ENHANCEMENT: - return "Enhancement"; - case TASK: - return "Task"; - default: - return ""; - } - } - - public static Kind fromType(String type) { - if (type == null) - return null; - if (type.equals("defect")) - return DEFECT; - if (type.equals("enhancement")) - return ENHANCEMENT; - if (type.equals("task")) - return TASK; - return null; - } - - } - - public enum Status { - NEW, ASSIGNED, REOPENED, CLOSED; - - @Override - public String toString() { - switch (this) { - case NEW: - return "New"; - case ASSIGNED: - return "Assigned"; - case REOPENED: - return "Reopened"; - case CLOSED: - return "Closed"; - default: - return ""; - } - } - - public static Status fromStatus(String status) { - if (status == null) - return null; - if (status.equals("new")) - return NEW; - if (status.equals("assigned")) - return ASSIGNED; - if (status.equals("reopened")) - return REOPENED; - if (status.equals("closed")) - return CLOSED; - return null; - } - - } - - public TracTask(String handle, String label, boolean newTask) { - super(handle, label, newTask); - - setUrl(AbstractRepositoryTask.getRepositoryUrl(handle) + ITracClient.TICKET_URL - + AbstractRepositoryTask.getTaskId(handle)); - } - - @Override - public boolean isCompleted() { - if (taskData != null) { - return isCompleted(taskData.getStatus()); - } else { - return super.isCompleted(); - } - } - - @Override - public String getRepositoryKind() { - return TracCorePlugin.REPOSITORY_KIND; - } - - @Override - public String getPriority() { - if (taskData != null && taskData.getAttribute(Attribute.PRIORITY.getTracKey()) != null) { - return getMylarPriority(taskData.getAttributeValue(Attribute.PRIORITY.getTracKey())); - } else { - return super.getPriority(); - } - } - - @Override - public String getOwner() { - if (taskData != null && taskData.getAttribute(RepositoryTaskAttribute.USER_OWNER) != null) { - return taskData.getAttributeValue(RepositoryTaskAttribute.USER_OWNER); - } else { - return super.getOwner(); - } - } - - // TODO use priority attributes from repository instead of hard coded enum - public static String getMylarPriority(String tracPriority) { - if (tracPriority != null) { - PriorityLevel priority = PriorityLevel.fromPriority(tracPriority); - if (priority != null) { - return priority.toString(); - } - } - return Task.PriorityLevel.P3.toString(); - } - - public static boolean isCompleted(String tracStatus) { - TracTask.Status status = TracTask.Status.fromStatus(tracStatus); - return status == TracTask.Status.CLOSED; - } - -} diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracXmlRpcClient.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracXmlRpcClient.java deleted file mode 100644 index 8e7a694fa..000000000 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracXmlRpcClient.java +++ /dev/null @@ -1,449 +0,0 @@ -package org.eclipse.mylar.internal.trac.core; - -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TimeZone; - -import org.apache.xmlrpc.XmlRpcException; -import org.apache.xmlrpc.client.XmlRpcClient; -import org.apache.xmlrpc.client.XmlRpcClientConfigImpl; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.trac.core.model.TracAttachment; -import org.eclipse.mylar.internal.trac.core.model.TracComment; -import org.eclipse.mylar.internal.trac.core.model.TracComponent; -import org.eclipse.mylar.internal.trac.core.model.TracMilestone; -import org.eclipse.mylar.internal.trac.core.model.TracPriority; -import org.eclipse.mylar.internal.trac.core.model.TracSearch; -import org.eclipse.mylar.internal.trac.core.model.TracSeverity; -import org.eclipse.mylar.internal.trac.core.model.TracTicket; -import org.eclipse.mylar.internal.trac.core.model.TracTicketResolution; -import org.eclipse.mylar.internal.trac.core.model.TracTicketStatus; -import org.eclipse.mylar.internal.trac.core.model.TracTicketType; -import org.eclipse.mylar.internal.trac.core.model.TracVersion; -import org.eclipse.mylar.internal.trac.core.model.TracTicket.Key; -import org.eclipse.mylar.internal.trac.core.util.TracHttpClientTransportFactory; -import org.eclipse.mylar.internal.trac.core.util.TracUtils; -import org.eclipse.mylar.internal.trac.core.util.TracHttpClientTransportFactory.TracHttpException; - -/** - * Represents a Trac repository that is accessed through the Trac XmlRpcPlugin. - * - * @author Steffen Pingel - */ -public class TracXmlRpcClient extends AbstractTracClient { - - public static final String XMLRPC_URL = "/xmlrpc"; - - public static final String REQUIRED_REVISION = "1188"; - - private XmlRpcClient xmlrpc; - - public TracXmlRpcClient(URL url, Version version, String username, String password) { - super(url, version, username, password); - } - - public synchronized XmlRpcClient getClient() throws TracException { - if (xmlrpc != null) { - return xmlrpc; - } - - XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl(); - config.setEncoding(ITracClient.CHARSET); - config.setBasicUserName(username); - config.setBasicPassword(password); - config.setServerURL(getXmlRpcUrl()); - config.setTimeZone(TimeZone.getTimeZone(ITracClient.TIME_ZONE)); - - xmlrpc = new XmlRpcClient(); - xmlrpc.setConfig(config); - - TracHttpClientTransportFactory factory = new TracHttpClientTransportFactory(xmlrpc); - xmlrpc.setTransportFactory(factory); - - return xmlrpc; - } - - private URL getXmlRpcUrl() throws TracException { - try { - String location = repositoryUrl.toString(); - if (hasAuthenticationCredentials()) { - location += LOGIN_URL; - } - location += XMLRPC_URL; - - return new URL(location); - } catch (Exception e) { - throw new TracException(e); - } - } - - private Object call(String method, Object... parameters) throws TracException { - getClient(); - - try { - return xmlrpc.execute(method, parameters); - } catch (TracHttpException e) { - if (e.code == HttpURLConnection.HTTP_FORBIDDEN || e.code == HttpURLConnection.HTTP_UNAUTHORIZED) { - throw new TracLoginException(); - } else { - throw new TracException(e); - } - } catch (XmlRpcException e) { - throw new TracRemoteException(e); - } catch (Exception e) { - throw new TracException(e); - } - } - - private Object[] multicall(Map<String, Object>... calls) throws TracException { - Object[] result = (Object[]) call("system.multicall", new Object[] { calls }); - for (Object item : result) { - try { - checkForException(item); - } catch (XmlRpcException e) { - throw new TracRemoteException(e); - } catch (Exception e) { - throw new TracException(e); - } - } - return result; - } - - private void checkForException(Object result) throws NumberFormatException, XmlRpcException { - if (result instanceof Map) { - Map exceptionData = (Map) result; - if (exceptionData.containsKey("faultCode") && exceptionData.containsKey("faultString")) { - throw new XmlRpcException(Integer.parseInt(exceptionData.get("faultCode").toString()), - (String) exceptionData.get("faultString")); - } - } - } - - private Map<String, Object> createMultiCall(String methodName, Object... parameters) throws TracException { - Map<String, Object> table = new HashMap<String, Object>(); - table.put("methodName", methodName); - table.put("params", parameters); - return table; - } - - private Object getMultiCallResult(Object item) { - return ((Object[]) item)[0]; - } - - public void validate() throws TracException { - Object[] result = (Object[]) call("system.listMethods"); - boolean hasGetTicket = false, hasQuery = false, isRecentRevision = false; - for (Object methodName : result) { - if ("ticket.get".equals(methodName)) { - hasGetTicket = true; - } - if ("ticket.query".equals(methodName)) { - hasQuery = true; - } - if ("ticket.getRecentChanges".equals(methodName)) { - // this call was added in rev. 1188 - isRecentRevision = true; - } - - if (hasGetTicket && hasQuery && isRecentRevision) { - return; - } - } - - throw new TracException("Required API calls are missing, please update your Trac XML-RPC Plugin to revision " + REQUIRED_REVISION + " or later"); - } - - public TracTicket getTicket(int id) throws TracException { - Object[] result = (Object[]) call("ticket.get", id); - TracTicket ticket = parseTicket(result); - - result = (Object[]) call("ticket.changeLog", id, 0); - for (Object item : result) { - ticket.addComment(parseChangeLogEntry((Object[]) item)); - } - - result = (Object[]) call("ticket.listAttachments", id); - for (Object item : result) { - ticket.addAttachment(parseAttachment((Object[]) item)); - } - - String[] actions = getActions(id); - ticket.setActions(actions); - - ticket.setResolutions(getDefaultTicketResolutions()); - - return ticket; - } - - private TracAttachment parseAttachment(Object[] entry) { - TracAttachment attachment = new TracAttachment((String) entry[0]); - attachment.setDescription((String) entry[1]); - attachment.setSize((Integer) entry[2]); - attachment.setCreated(TracUtils.parseDate((Integer) entry[3])); - attachment.setAuthor((String) entry[4]); - return attachment; - } - - private TracComment parseChangeLogEntry(Object[] entry) { - TracComment comment = new TracComment(); - comment.setCreated(TracUtils.parseDate((Integer) entry[0])); - comment.setAuthor((String) entry[1]); - comment.setField((String) entry[2]); - comment.setOldValue((String) entry[3]); - comment.setNewValue((String) entry[4]); - return comment; - } - - /* public for testing */ - @SuppressWarnings("unchecked") - public List<TracTicket> getTickets(int[] ids) throws TracException { - Map<String, Object>[] calls = new Map[ids.length]; - for (int i = 0; i < calls.length; i++) { - calls[i] = createMultiCall("ticket.get", ids[i]); - } - - Object[] result = multicall(calls); - assert result.length == ids.length; - - List<TracTicket> tickets = new ArrayList<TracTicket>(result.length); - for (Object item : result) { - Object[] ticketResult = (Object[]) getMultiCallResult(item); - tickets.add(parseTicket(ticketResult)); - } - - return tickets; - } - - @SuppressWarnings("unchecked") - public void search(TracSearch query, List<TracTicket> tickets) throws TracException { - // an empty query string is not valid, therefore prepend order - Object[] result = (Object[]) call("ticket.query", "order=id" + query.toQuery()); - - Map<String, Object>[] calls = new Map[result.length]; - for (int i = 0; i < calls.length; i++) { - calls[i] = createMultiCall("ticket.get", result[i]); - } - result = multicall(calls); - - for (Object item : result) { - Object[] ticketResult = (Object[]) getMultiCallResult(item); - tickets.add(parseTicket(ticketResult)); - } - } - - private TracTicket parseTicket(Object[] ticketResult) throws InvalidTicketException { - TracTicket ticket = new TracTicket((Integer) ticketResult[0]); - ticket.setCreated((Integer) ticketResult[1]); - ticket.setLastChanged((Integer) ticketResult[2]); - Map attributes = (Map) ticketResult[3]; - for (Object key : attributes.keySet()) { - ticket.putValue(key.toString(), attributes.get(key).toString()); - } - return ticket; - } - - public synchronized void updateAttributes(IProgressMonitor monitor) throws TracException { - monitor.beginTask("Updating attributes", 8); - - Object[] result = getAttributes("ticket.component"); - data.components = new ArrayList<TracComponent>(result.length); - for (Object item : result) { - data.components.add(parseComponent((Map) getMultiCallResult(item))); - } - monitor.worked(1); - if (monitor.isCanceled()) - throw new OperationCanceledException(); - - result = getAttributes("ticket.milestone"); - data.milestones = new ArrayList<TracMilestone>(result.length); - for (Object item : result) { - data.milestones.add(parseMilestone((Map) getMultiCallResult(item))); - } - monitor.worked(1); - if (monitor.isCanceled()) - throw new OperationCanceledException(); - - List<TicketAttributeResult> attributes = getTicketAttributes("ticket.priority"); - data.priorities = new ArrayList<TracPriority>(result.length); - for (TicketAttributeResult attribute : attributes) { - data.priorities.add(new TracPriority(attribute.name, attribute.value)); - } - Collections.sort(data.priorities); - monitor.worked(1); - if (monitor.isCanceled()) - throw new OperationCanceledException(); - - attributes = getTicketAttributes("ticket.resolution"); - data.ticketResolutions = new ArrayList<TracTicketResolution>(result.length); - for (TicketAttributeResult attribute : attributes) { - data.ticketResolutions.add(new TracTicketResolution(attribute.name, attribute.value)); - } - Collections.sort(data.ticketResolutions); - monitor.worked(1); - if (monitor.isCanceled()) - throw new OperationCanceledException(); - - attributes = getTicketAttributes("ticket.severity"); - data.severities = new ArrayList<TracSeverity>(result.length); - for (TicketAttributeResult attribute : attributes) { - data.severities.add(new TracSeverity(attribute.name, attribute.value)); - } - Collections.sort(data.severities); - monitor.worked(1); - if (monitor.isCanceled()) - throw new OperationCanceledException(); - - attributes = getTicketAttributes("ticket.status"); - data.ticketStatus = new ArrayList<TracTicketStatus>(result.length); - for (TicketAttributeResult attribute : attributes) { - data.ticketStatus.add(new TracTicketStatus(attribute.name, attribute.value)); - } - Collections.sort(data.ticketStatus); - monitor.worked(1); - if (monitor.isCanceled()) - throw new OperationCanceledException(); - - attributes = getTicketAttributes("ticket.type"); - data.ticketTypes = new ArrayList<TracTicketType>(result.length); - for (TicketAttributeResult attribute : attributes) { - data.ticketTypes.add(new TracTicketType(attribute.name, attribute.value)); - } - Collections.sort(data.ticketTypes); - monitor.worked(1); - if (monitor.isCanceled()) - throw new OperationCanceledException(); - - result = getAttributes("ticket.version"); - data.versions = new ArrayList<TracVersion>(result.length); - for (Object item : result) { - data.versions.add(parseVersion((Map) getMultiCallResult(item))); - } - monitor.worked(1); - if (monitor.isCanceled()) - throw new OperationCanceledException(); - } - - private TracComponent parseComponent(Map result) { - TracComponent component = new TracComponent((String) result.get("name")); - component.setOwner((String) result.get("owner")); - component.setDescription((String) result.get("description")); - return component; - } - - private TracMilestone parseMilestone(Map result) { - TracMilestone milestone = new TracMilestone((String) result.get("name")); - milestone.setCompleted(TracUtils.parseDate((Integer) result.get("completed"))); - milestone.setDue(TracUtils.parseDate((Integer) result.get("due"))); - milestone.setDescription((String) result.get("description")); - return milestone; - } - - private TracVersion parseVersion(Map result) { - TracVersion version = new TracVersion((String) result.get("name")); - version.setTime(TracUtils.parseDate((Integer) result.get("time"))); - version.setDescription((String) result.get("description")); - return version; - } - - @SuppressWarnings("unchecked") - private Object[] getAttributes(String attributeType) throws TracException { - Object[] ids = (Object[]) call(attributeType + ".getAll"); - Map<String, Object>[] calls = new Map[ids.length]; - for (int i = 0; i < calls.length; i++) { - calls[i] = createMultiCall(attributeType + ".get", ids[i]); - } - - Object[] result = multicall(calls); - assert result.length == ids.length; - - return result; - } - - @SuppressWarnings("unchecked") - private List<TicketAttributeResult> getTicketAttributes(String attributeType) throws TracException { - Object[] ids = (Object[]) call(attributeType + ".getAll"); - Map<String, Object>[] calls = new Map[ids.length]; - for (int i = 0; i < calls.length; i++) { - calls[i] = createMultiCall(attributeType + ".get", ids[i]); - } - - Object[] result = multicall(calls); - assert result.length == ids.length; - - List<TicketAttributeResult> attributes = new ArrayList<TicketAttributeResult>(result.length); - for (int i = 0; i < calls.length; i++) { - try { - TicketAttributeResult attribute = new TicketAttributeResult(); - attribute.name = (String) ids[i]; - attribute.value = Integer.parseInt((String) getMultiCallResult(result[i])); - attributes.add(attribute); - } catch (NumberFormatException e) { - MylarStatusHandler.log(e, "Invalid response from Trac repository for attribute type: '" + attributeType - + "'"); - } - } - - return attributes; - } - - public byte[] getAttachmentData(int ticketId, String filename) throws TracException { - return (byte[]) call("ticket.getAttachment", ticketId, filename); - } - - public void putAttachmentData(int ticketId, String filename, String description, byte[] data) throws TracException { - call("ticket.putAttachment", ticketId, filename, description, data, true); - } - - private class TicketAttributeResult { - - String name; - - int value; - - } - - public void createTicket(TracTicket ticket) throws TracException { - Map<String, String> attributes = ticket.getValues(); - String summary = attributes.remove(Key.SUMMARY.getKey()); - String description = attributes.remove(Key.DESCRIPTION.getKey()); - if (summary == null || description == null) { - throw new InvalidTicketException(); - } - call("ticket.create", summary, description, attributes); - } - - public void updateTicket(TracTicket ticket, String comment) throws TracException { - Map<String, String> attributes = ticket.getValues(); - call("ticket.update", ticket.getId(), comment, attributes); - } - - public Set<Integer> getChangedTickets(Date since) throws TracException { - Object[] ids; - ids = (Object[]) call("ticket.getRecentChanges", since); - Set<Integer> result = new HashSet<Integer>(); - for (Object id : ids) { - result.add((Integer) id); - } - return result; - } - - public String[] getActions(int id) throws TracException { - Object[] actions = (Object[]) call("ticket.getAvailableActions", id); - String[] result = new String[actions.length]; - for (int i = 0; i < result.length; i++) { - result[i] = (String) actions[i]; - } - return result; - } - -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracSearch.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracSearch.java deleted file mode 100644 index bcc8784c8..000000000 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracSearch.java +++ /dev/null @@ -1,150 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.core.model; - -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.trac.core.ITracClient; -import org.eclipse.mylar.internal.trac.core.model.TracSearchFilter.CompareOperator; - -/** - * Represents a Trac search. A search can have multiple {@link TracSearchFilter}s - * that all need to match. - * - * @author Steffen Pingel - */ -public class TracSearch { - - /** Stores search criteria in the order entered by the user. */ - private Map<String, TracSearchFilter> filterByFieldName = new LinkedHashMap<String, TracSearchFilter>(); - - /** The field the result is ordered by. */ - private String orderBy; - - private boolean ascending = true; - - public TracSearch() { - } - - public void addFilter(String key, String value) { - TracSearchFilter filter = filterByFieldName.get(key); - if (filter == null) { - filter = new TracSearchFilter(key); - CompareOperator operator = CompareOperator.fromUrl(value); - filter.setOperator(operator); - filterByFieldName.put(key, filter); - } - - filter.addValue(value.substring(filter.getOperator().getQueryValue().length())); - } - - public void addFilter(TracSearchFilter filter) { - filterByFieldName.put(filter.getFieldName(), filter); - } - - public List<TracSearchFilter> getFilters() { - return new ArrayList<TracSearchFilter>(filterByFieldName.values()); - } - - public void setAscending(boolean ascending) { - this.ascending = ascending; - } - - public boolean isAscending() { - return ascending; - } - - public void setOrderBy(String orderBy) { - this.orderBy = orderBy; - } - - public String getOrderBy() { - return orderBy; - } - - /** - * Returns a Trac query string that conforms to the format defined at - * {@link http://projects.edgewall.com/trac/wiki/TracQuery#QueryLanguage}. - * - * @return the empty string, if no search order and criteria are defined; a - * string that starts with &, otherwise - */ - public String toQuery() { - StringBuilder sb = new StringBuilder(); - if (orderBy != null) { - sb.append("&order="); - sb.append(orderBy); - if (!ascending) { - sb.append("&desc=1"); - } - } - for (TracSearchFilter filter : filterByFieldName.values()) { - sb.append("&"); - sb.append(filter.getFieldName()); - sb.append(filter.getOperator().getQueryValue()); - sb.append("="); - List<String> values = filter.getValues(); - for (Iterator<String> it = values.iterator(); it.hasNext();) { - sb.append(it.next()); - if (it.hasNext()) { - sb.append("|"); - } - } - } - return sb.toString(); - } - - /** - * Returns a URL encoded string that can be passed as an argument to the - * Trac query script. - * - * @return the empty string, if no search order and criteria are defined; a - * string that starts with &, otherwise - */ - public String toUrl() { - StringBuilder sb = new StringBuilder(); - if (orderBy != null) { - sb.append("&order="); - sb.append(orderBy); - if (!ascending) { - sb.append("&desc=1"); - } - } else if (filterByFieldName.isEmpty()) { - // TODO figure out why search must be ordered when logged in (otherwise - // no results will be returned) - sb.append("&order=id"); - } - - for (TracSearchFilter filter : filterByFieldName.values()) { - for (String value : filter.getValues()) { - sb.append("&"); - sb.append(filter.getFieldName()); - sb.append("="); - try { - sb.append(URLEncoder.encode(filter.getOperator().getQueryValue(), ITracClient.CHARSET)); - sb.append(URLEncoder.encode(value, ITracClient.CHARSET)); - } catch (UnsupportedEncodingException e) { - MylarStatusHandler.log(e, "Unexpected exception while decoding URL"); - } - } - } - return sb.toString(); - } - -} diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracSearchFilter.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracSearchFilter.java deleted file mode 100644 index 42f5c2942..000000000 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracSearchFilter.java +++ /dev/null @@ -1,108 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.core.model; - -import java.util.ArrayList; -import java.util.List; - -/** - * Represents a search criterion. Each criterion is applied to a field such as - * milestone or priority. It has a compare operator and a list of values. The - * compare mode is <code>OR</code> for the operators <code>contains</code>, - * <code>starts with</code>, <code>ends with</code> and <code>is</code>. - * The compare mode is <code>AND</code> for all other (negated) operators. - * - * @author Steffen Pingel - */ -public class TracSearchFilter { - - public enum CompareOperator { - CONTAINS("~"), CONTAINS_NOT("!~"), BEGINS_WITH("^"), NOT_BEGINS_WITH("!^"), ENDS_WITH("$"), NOT_ENDS_WITH("!$"), IS( - ""), IS_NOT("!"); - - public static CompareOperator fromUrl(String value) { - for (CompareOperator operator : values()) { - if (operator != IS && operator != IS_NOT && value.startsWith(operator.queryValue)) { - return operator; - } - } - if (value.startsWith(IS_NOT.queryValue)) { - return IS_NOT; - } - return IS; - } - - /** The string that represent the operator in a Trac query. */ - private String queryValue; - - CompareOperator(String queryValue) { - this.queryValue = queryValue; - } - - public String getQueryValue() { - return queryValue; - } - - public String toString() { - switch (this) { - case CONTAINS: - return "contains"; - case CONTAINS_NOT: - return "does not contain"; - case BEGINS_WITH: - return "begins with"; - case NOT_BEGINS_WITH: - return "does not begin with"; - case ENDS_WITH: - return "ends with"; - case NOT_ENDS_WITH: - return "does not end with"; - case IS_NOT: - return "is not"; - default: - return "is"; - } - } - - } - - private String fieldName; - - private CompareOperator operator; - - private List<String> values = new ArrayList<String>(); - - public TracSearchFilter(String fieldName) { - this.fieldName = fieldName; - } - - public void addValue(String value) { - values.add(value); - } - - public String getFieldName() { - return fieldName; - } - - public CompareOperator getOperator() { - return operator; - } - - public List<String> getValues() { - return values; - } - - public void setOperator(CompareOperator operator) { - this.operator = operator; - } - -} diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracTicket.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracTicket.java deleted file mode 100644 index 9c91acd5b..000000000 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracTicket.java +++ /dev/null @@ -1,225 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.core.model; - -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.eclipse.mylar.internal.trac.core.InvalidTicketException; -import org.eclipse.mylar.internal.trac.core.util.TracUtils; - -/** - * Represents a Trac ticket as it is retrieved from a Trac repository. - * - * @author Steffen Pingel - */ -public class TracTicket { - - /** - * Represents the key of a string propertiy of a ticket. - * - * @author Steffen Pingel - */ - public enum Key { - CC("cc"), CHANGE_TIME("changetime"), COMPONENT("component"), DESCRIPTION("description"), ID("id"), KEYWORDS( - "keywords"), MILESTONE("milestone"), OWNER("owner"), PRIORITY("priority"), REPORTER("reporter"), RESOLUTION( - "resolution"), STATUS("status"), SEVERITY("severity"), SUMMARY("summary"), TIME("time"), TYPE("type"), VERSION( - "version"); - - public static Key fromKey(String name) { - for (Key key : Key.values()) { - if (key.getKey().equals(name)) { - return key; - } - } - return null; - } - - private String key; - - Key(String key) { - this.key = key; - } - - public String toString() { - return key; - } - - public String getKey() { - return key; - } - } - - public static final int INVALID_ID = -1; - - private Date created; - - /** - * User defined custom ticket fields. - * - * @see http://projects.edgewall.com/trac/wiki/TracTicketsCustomFields - */ - private Map<String, String> customValueByKey; - - private int id = INVALID_ID; - - private Date lastChanged; - - /** Trac's built-in ticket properties. */ - private Map<Key, String> valueByKey = new HashMap<Key, String>(); - - private List<TracComment> comments; - - private List<TracAttachment> attachments; - - private String[] actions; - - private String[] resolutions; - - public TracTicket() { - } - - /** - * Constructs a Trac ticket. - * - * @param id - * the nummeric Trac ticket id - */ - public TracTicket(int id) { - this.id = id; - } - - public Date getCreated() { - return created; - } - - public int getId() { - return id; - } - - public Date getLastChanged() { - return lastChanged; - } - - public String getCustomValue(String key) { - if (customValueByKey == null) { - return null; - } - return customValueByKey.get(key); - } - - public String getValue(Key key) { - return valueByKey.get(key); - } - - public Map<String, String> getValues() { - Map<String, String> result = new HashMap<String, String>(); - for (Key key : valueByKey.keySet()) { - result.put(key.getKey(), valueByKey.get(key)); - } - if (customValueByKey != null) { - result.putAll(customValueByKey); - } - return result; - } - - public boolean isValid() { - return getId() != TracTicket.INVALID_ID; - } - - public void putBuiltinValue(Key key, String value) throws InvalidTicketException { - valueByKey.put(key, value); - } - - public void putCustomValue(String key, String value) { - if (customValueByKey == null) { - customValueByKey = new HashMap<String, String>(); - } - customValueByKey.put(key, value); - } - - /** - * Stores a value as it is retrieved from the repository. - * - * @throws InvalidTicketException - * thrown if the type of <code>value</code> is not valid - */ - public boolean putValue(String keyName, String value) throws InvalidTicketException { - Key key = Key.fromKey(keyName); - if (key != null) { - if (key == Key.ID || key == Key.TIME || key == Key.CHANGE_TIME) { - return false; - } - putBuiltinValue(key, value); - } else if (value instanceof String) { - putCustomValue(keyName, (String) value); - } else { - throw new InvalidTicketException("Expected string value for custom key '" + keyName + "', got '" + value - + "'"); - } - return true; - } - - public void setCreated(int created) { - this.created = TracUtils.parseDate(created); - } - - public void setId(int id) { - this.id = id; - } - - public void setLastChanged(int lastChanged) { - this.lastChanged = TracUtils.parseDate(lastChanged); - } - - public void addComment(TracComment comment) { - if (comments == null) { - comments = new ArrayList<TracComment>(); - } - comments.add(comment); - } - - public void addAttachment(TracAttachment attachment) { - if (attachments == null) { - attachments = new ArrayList<TracAttachment>(); - } - attachments.add(attachment); - } - - public TracComment[] getComments() { - return (comments != null) ? comments.toArray(new TracComment[0]) : null; - } - - public TracAttachment[] getAttachments() { - return (attachments != null) ? attachments.toArray(new TracAttachment[0]) : null; - } - - public void setActions(String[] actions) { - this.actions = actions; - } - - public String[] getActions() { - return actions; - } - - public void setResolutions(String[] resolutions) { - this.resolutions = resolutions; - } - - public String[] getResolutions() { - return resolutions; - } - -} diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/util/TracHttpClientTransportFactory.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/util/TracHttpClientTransportFactory.java deleted file mode 100644 index bc94ce5d8..000000000 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/util/TracHttpClientTransportFactory.java +++ /dev/null @@ -1,234 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.core.util; - -import java.io.BufferedOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.net.HttpURLConnection; -import java.net.Proxy; -import java.util.zip.GZIPInputStream; - -import org.apache.commons.httpclient.HttpClient; -import org.apache.commons.httpclient.HttpVersion; -import org.apache.commons.httpclient.methods.PostMethod; -import org.apache.commons.httpclient.methods.RequestEntity; -import org.apache.xmlrpc.XmlRpcException; -import org.apache.xmlrpc.XmlRpcRequest; -import org.apache.xmlrpc.client.XmlRpcClient; -import org.apache.xmlrpc.client.XmlRpcCommonsTransport; -import org.apache.xmlrpc.client.XmlRpcHttpClientConfig; -import org.apache.xmlrpc.client.XmlRpcTransport; -import org.apache.xmlrpc.client.XmlRpcTransportFactoryImpl; -import org.apache.xmlrpc.util.XmlRpcIOException; -import org.eclipse.mylar.internal.tasks.core.WebClientUtil; - -/** - * A custom transport factory used to establish XML-RPC connections. Uses the - * Mylar proxy settings. - * - * @author Steffen Pingel - */ -public class TracHttpClientTransportFactory extends XmlRpcTransportFactoryImpl { - - public static class TracHttpException extends XmlRpcException { - - private static final long serialVersionUID = 9032521978140685830L; - - public TracHttpException(int responseCode) { - super(responseCode, "HTTP Error " + responseCode); - } - - } - - /** - * A transport that uses the Apache HttpClient library. - */ - public static class TracHttpClientTransport extends XmlRpcCommonsTransport { - - private int contentLength; - private Proxy proxy; - - public TracHttpClientTransport(XmlRpcClient client) { - super(client); - - XmlRpcHttpClientConfig config = (XmlRpcHttpClientConfig) client.getConfig(); - // this needs to be set to avoid exceptions - getHttpClient().getParams().setAuthenticationPreemptive(config.getBasicUserName() != null); - } - - public HttpClient getHttpClient() { - return (HttpClient) getValue("client"); - } - - @Override - protected InputStream getInputStream() throws XmlRpcException { - int responseCode = getMethod().getStatusCode(); - if (responseCode != HttpURLConnection.HTTP_OK) { - throw new TracHttpException(responseCode); - } - - return super.getInputStream(); - } - - public PostMethod getMethod() { - return (PostMethod) getValue("method"); - } - - public void setMethod(PostMethod method) { - setValue("method", method); - } - - private Object getValue(String name) { - try { - Field field = XmlRpcCommonsTransport.class.getDeclaredField(name); - field.setAccessible(true); - return field.get(this); - } catch (Throwable t) { - throw new RuntimeException("Internal error accessing HttpClient", t); - } - } - - private void setValue(String name, Object value) { - try { - Field field = XmlRpcCommonsTransport.class.getDeclaredField(name); - field.setAccessible(true); - field.set(this, value); - } catch (Throwable t) { - throw new RuntimeException("Internal error accessing HttpClient", t); - } - } - - /** - * Based on the implementation of XmlRpcCommonsTransport and its super classes. - */ - @Override - public Object sendRequest(XmlRpcRequest pRequest) throws XmlRpcException { - XmlRpcHttpClientConfig config = (XmlRpcHttpClientConfig) pRequest.getConfig(); - - String url = config.getServerURL().toString(); - WebClientUtil.setupHttpClient(getHttpClient(), proxy, url); - - PostMethod method = new PostMethod(WebClientUtil.getRequestPath(url)); - - if (config.getConnectionTimeout() != 0) - getHttpClient().getHttpConnectionManager().getParams().setConnectionTimeout(config.getConnectionTimeout()); - - if (config.getReplyTimeout() != 0) - getHttpClient().getHttpConnectionManager().getParams().setSoTimeout(config.getConnectionTimeout()); - - method.getParams().setVersion(HttpVersion.HTTP_1_1); - - setMethod(method); - - initHttpHeaders(pRequest); - - boolean closed = false; - try { - RequestWriter writer = newRequestWriter(pRequest); - writeRequest(writer); - InputStream istream = getInputStream(); - if (isResponseGzipCompressed(config)) { - istream = new GZIPInputStream(istream); - } - Object result = readResponse(config, istream); - closed = true; - close(); - return result; - } catch (IOException e) { - throw new XmlRpcException("Failed to read servers response: " - + e.getMessage(), e); - } finally { - if (!closed) { try { close(); } catch (Throwable ignore) {} } - } - } - - @Override - protected void writeRequest(final RequestWriter pWriter) throws XmlRpcException { - getMethod().setRequestEntity(new RequestEntity(){ - public boolean isRepeatable() { return true; } - public void writeRequest(OutputStream pOut) throws IOException { - /* Make sure, that the socket is not closed by replacing it with our - * own BufferedOutputStream. - */ - BufferedOutputStream bos = new BufferedOutputStream(pOut){ - public void close() throws IOException { - flush(); - } - }; - try { - Method m = RequestWriter.class.getDeclaredMethod("write", new Class[] { OutputStream.class }); - m.setAccessible(true); - m.invoke(pWriter, bos); - } catch (Exception e) { - throw new XmlRpcIOException(e); - } - } - public long getContentLength() { return contentLength; } - public String getContentType() { return "text/xml"; } - }); - - try { - getHttpClient().executeMethod(getMethod()); - } catch (XmlRpcIOException e) { - Throwable t = e.getLinkedException(); - if (t instanceof XmlRpcException) { - throw (XmlRpcException) t; - } else { - throw new XmlRpcException("Unexpected exception: " + t.getMessage(), t); - } - } catch (IOException e) { - throw new XmlRpcException("I/O error while communicating with HTTP server: " + e.getMessage(), e); - } - } - - @Override - protected void setContentLength(int pLength) { - super.setContentLength(pLength); - - this.contentLength = pLength; - } - - public void setProxy(Proxy proxy) { - this.proxy = proxy; - } - - public Proxy getProxy() { - return this.proxy; - } - - } - - private final TracHttpClientTransport transport; - - public TracHttpClientTransportFactory(XmlRpcClient client) { - super(client); - - transport = new TracHttpClientTransport(client); - } - - public XmlRpcTransport getTransport() { - return transport; - } - - public void setProxy(Proxy proxy) { - transport.setProxy(proxy); - } - - public Proxy getProxy() { - return transport.getProxy(); - } - -} diff --git a/org.eclipse.mylyn.trac.tests/.classpath b/org.eclipse.mylyn.trac.tests/.classpath deleted file mode 100644 index 751c8f2e5..000000000 --- a/org.eclipse.mylyn.trac.tests/.classpath +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="src" path="src"/> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> - <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="output" path="bin"/> -</classpath> diff --git a/org.eclipse.mylyn.trac.tests/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.mylyn.trac.tests/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index a5c3d9bab..000000000 --- a/org.eclipse.mylyn.trac.tests/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,256 +0,0 @@ -#Fri Feb 10 11:16:20 PST 2006 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.5 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.5 -org.eclipse.jdt.core.formatter.align_type_members_on_columns=false -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_assignment=0 -org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 -org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 -org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 -org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 -org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_after_package=1 -org.eclipse.jdt.core.formatter.blank_lines_before_field=1 -org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 -org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 -org.eclipse.jdt.core.formatter.blank_lines_before_method=1 -org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 -org.eclipse.jdt.core.formatter.blank_lines_before_package=0 -org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 -org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.comment.clear_blank_lines=false -org.eclipse.jdt.core.formatter.comment.format_comments=true -org.eclipse.jdt.core.formatter.comment.format_header=false -org.eclipse.jdt.core.formatter.comment.format_html=true -org.eclipse.jdt.core.formatter.comment.format_source_code=true -org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true -org.eclipse.jdt.core.formatter.comment.indent_root_tags=true -org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert -org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert -org.eclipse.jdt.core.formatter.comment.line_length=80 -org.eclipse.jdt.core.formatter.compact_else_if=true -org.eclipse.jdt.core.formatter.continuation_indentation=2 -org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 -org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true -org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_empty_lines=false -org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true -org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false -org.eclipse.jdt.core.formatter.indentation.size=4 -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert -org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false -org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false -org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false -org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false -org.eclipse.jdt.core.formatter.lineSplit=120 -org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 -org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 -org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true -org.eclipse.jdt.core.formatter.tabulation.char=tab -org.eclipse.jdt.core.formatter.tabulation.size=4 -org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false diff --git a/org.eclipse.mylyn.trac.tests/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.mylyn.trac.tests/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index 86dbfc675..000000000 --- a/org.eclipse.mylyn.trac.tests/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,5 +0,0 @@ -#Fri Jun 16 09:36:17 PDT 2006 -eclipse.preferences.version=1 -formatter_profile=_Mylar based on Eclipse [built-in] -formatter_settings_version=9 -org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\r\n * @return the ${bare_field_name}\r\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\r\n * @param ${param} the ${bare_field_name} to set\r\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/**\r\n * \r\n */</template><template autoinsert\="true" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author ${user}\r\n *\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\r\n * \r\n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/* (non-Javadoc)\r\n * ${see_to_overridden}\r\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\r\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\r\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\r\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\r\n * ${tags}\r\n * ${see_to_target}\r\n */</template></templates> diff --git a/org.eclipse.mylyn.trac.tests/META-INF/MANIFEST.MF b/org.eclipse.mylyn.trac.tests/META-INF/MANIFEST.MF deleted file mode 100644 index 9d869a7d4..000000000 --- a/org.eclipse.mylyn.trac.tests/META-INF/MANIFEST.MF +++ /dev/null @@ -1,19 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Mylar Trac Tests Plug-in -Bundle-SymbolicName: org.eclipse.mylar.trac.tests -Bundle-Version: 0.0.0 -Bundle-Localization: plugin -Require-Bundle: org.junit, - org.eclipse.ui, - org.eclipse.core.runtime, - org.eclipse.mylar.context.core, - org.eclipse.mylar.tasks.ui, - org.eclipse.mylar.tasks.core, - org.eclipse.mylar.core.tests, - org.eclipse.mylar.trac.ui, - org.eclipse.mylar.trac.core, - org.eclipse.search -Export-Package: org.eclipse.mylar.trac.tests -Bundle-Activator: org.eclipse.mylar.trac.tests.TracTestPlugin -Eclipse-LazyStart: true diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/AbstractTracClientRepositoryTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/AbstractTracClientRepositoryTest.java deleted file mode 100644 index 017f036bd..000000000 --- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/AbstractTracClientRepositoryTest.java +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.trac.tests; - -import org.eclipse.mylar.context.tests.support.MylarTestUtils; -import org.eclipse.mylar.context.tests.support.MylarTestUtils.Credentials; -import org.eclipse.mylar.context.tests.support.MylarTestUtils.PrivilegeLevel; -import org.eclipse.mylar.internal.trac.core.TracException; -import org.eclipse.mylar.internal.trac.core.TracLoginException; -import org.eclipse.mylar.internal.trac.core.ITracClient.Version; - -/** - * Test cases for classes that implement {@link ITracClient}. - * - * @author Steffen Pingel - */ -public class AbstractTracClientRepositoryTest extends AbstractTracClientTest { - - public AbstractTracClientRepositoryTest(Version version) { - super(version); - } - - public void testValidate010() throws Exception { - validate(Constants.TEST_TRAC_010_URL); - } - - public void testValidate010DigestAuth() throws Exception { - validate(Constants.TEST_TRAC_010_DIGEST_AUTH_URL); - } - - protected void validate(String url) throws Exception { - Credentials credentials = MylarTestUtils.readCredentials(PrivilegeLevel.USER); - - // standard connect - connect(url); - repository.validate(); - - // invalid url - connect("http://non.existant/repository"); - try { - repository.validate(); - fail("Expected TracException"); - } catch (TracException e) { - } - - // invalid password - connect(url, credentials.username, "wrongpassword"); - try { - repository.validate(); - fail("Expected TracLoginException"); - } catch (TracLoginException e) { - } - - // invalid username - connect(url, "wrongusername", credentials.password); - try { - repository.validate(); - fail("Expected TracLoginException"); - } catch (TracLoginException e) { - } - } - -} diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/AbstractTracClientSearchTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/AbstractTracClientSearchTest.java deleted file mode 100644 index 7c90e140d..000000000 --- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/AbstractTracClientSearchTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.trac.tests; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import org.eclipse.mylar.internal.trac.core.ITracClient; -import org.eclipse.mylar.internal.trac.core.TracException; -import org.eclipse.mylar.internal.trac.core.ITracClient.Version; -import org.eclipse.mylar.internal.trac.core.model.TracSearch; -import org.eclipse.mylar.internal.trac.core.model.TracTicket; -import org.eclipse.mylar.internal.trac.core.model.TracTicket.Key; -import org.eclipse.mylar.trac.tests.support.TestFixture; -import org.eclipse.mylar.trac.tests.support.XmlRpcServer.TestData; -import org.eclipse.mylar.trac.tests.support.XmlRpcServer.Ticket; - -/** - * Test cases that validate search results for classes that implement - * {@link ITracClient}. - * - * @author Steffen Pingel - */ -public abstract class AbstractTracClientSearchTest extends AbstractTracClientTest { - - protected List<Ticket> tickets; - - private TestData data; - - public AbstractTracClientSearchTest(Version version) { - super(version); - } - - protected void setUp() throws Exception { - super.setUp(); - - data = TestFixture.init010(); - tickets = data.tickets; - - connect010(); - } - - protected void tearDown() throws Exception { - super.tearDown(); - - // TestFixture.cleanupRepository1(); - } - - protected void assertTicketEquals(Ticket ticket, TracTicket tracTicket) throws Exception { - assertTrue(tracTicket.isValid()); - - Map expectedValues = ticket.getValues(); - Map<String, String> values = tracTicket.getValues(); - for (String key : values.keySet()) { - assertEquals("Values for key '" + key + "' did not match", expectedValues.get(key), values.get(key)); - } - } - - public void testGetTicket() throws Exception { - TracTicket ticket = repository.getTicket(tickets.get(0).getId()); - assertTicketEquals(tickets.get(0), ticket); - - ticket = repository.getTicket(tickets.get(1).getId()); - assertTicketEquals(tickets.get(1), ticket); - } - - public void testGetTicketInvalidId() throws Exception { - try { - repository.getTicket(Integer.MAX_VALUE); - fail("Expected TracException"); - } catch (TracException e) { - } - } - - public void testGetTicketUmlaute() throws Exception { - TracTicket ticket = repository.getTicket(data.htmlEntitiesTicketId); - assertEquals("test html entities: äöü", ticket.getValue(Key.SUMMARY)); - if (version == Version.XML_RPC) { - assertEquals("ÄÖÜ\n\nmulti\nline\n\n'''bold'''\n", ticket.getValue(Key.DESCRIPTION)); - } else { - assertEquals(null, ticket.getValue(Key.DESCRIPTION)); - } - } - - public void testSearchAll() throws Exception { - TracSearch search = new TracSearch(); - List<TracTicket> result = new ArrayList<TracTicket>(); - repository.search(search, result); - assertEquals(tickets.size(), result.size()); - } - - public void testSearchEmpty() throws Exception { - TracSearch search = new TracSearch(); - search.addFilter("milestone", "does not exist"); - List<TracTicket> result = new ArrayList<TracTicket>(); - repository.search(search, result); - assertEquals(0, result.size()); - } - - public void testSearchMilestone1() throws Exception { - TracSearch search = new TracSearch(); - search.addFilter("milestone", "milestone1"); - List<TracTicket> result = new ArrayList<TracTicket>(); - repository.search(search, result); - assertEquals(1, result.size()); - assertTicketEquals(tickets.get(0), result.get(0)); - } - - public void testSearchMilestone2() throws Exception { - TracSearch search = new TracSearch(); - search.addFilter("milestone", "milestone1"); - search.addFilter("milestone", "milestone2"); - search.setOrderBy("id"); - List<TracTicket> result = new ArrayList<TracTicket>(); - repository.search(search, result); - assertEquals(3, result.size()); - assertTicketEquals(tickets.get(0), result.get(0)); - assertTicketEquals(tickets.get(1), result.get(1)); - assertTicketEquals(tickets.get(2), result.get(2)); - } - - public void testSearchExactMatch() throws Exception { - TracSearch search = new TracSearch(); - search.addFilter("milestone", "milestone1"); - search.addFilter("summary", "summary1"); - List<TracTicket> result = new ArrayList<TracTicket>(); - repository.search(search, result); - assertEquals(1, result.size()); - assertTicketEquals(tickets.get(0), result.get(0)); - assertEquals("milestone1", result.get(0).getValue(Key.MILESTONE)); - assertEquals("summary1", result.get(0).getValue(Key.SUMMARY)); - } - -} diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/AbstractTracClientTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/AbstractTracClientTest.java deleted file mode 100644 index 9c3e50a2a..000000000 --- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/AbstractTracClientTest.java +++ /dev/null @@ -1,70 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.trac.tests; - -import junit.framework.TestCase; - -import org.eclipse.mylar.context.tests.support.MylarTestUtils; -import org.eclipse.mylar.context.tests.support.MylarTestUtils.Credentials; -import org.eclipse.mylar.context.tests.support.MylarTestUtils.PrivilegeLevel; -import org.eclipse.mylar.internal.trac.core.ITracClient; -import org.eclipse.mylar.internal.trac.core.TracClientFactory; -import org.eclipse.mylar.internal.trac.core.ITracClient.Version; - -/** - * Provides a base implementation for test cases that access trac repositories. - * - * @author Steffen Pingel - */ -public abstract class AbstractTracClientTest extends TestCase { - - public String repositoryUrl; - - public ITracClient repository; - - public String username; - - public String password; - - public Version version; - - public AbstractTracClientTest(Version version) { - this.version = version; - } - - public ITracClient connect096() throws Exception { - return connect(Constants.TEST_TRAC_096_URL); - } - - public ITracClient connect010() throws Exception { - return connect(Constants.TEST_TRAC_010_URL); - } - - public ITracClient connect010DigestAuth() throws Exception { - return connect(Constants.TEST_TRAC_010_DIGEST_AUTH_URL); - } - - public ITracClient connect(String url) throws Exception { - Credentials credentials = MylarTestUtils.readCredentials(PrivilegeLevel.USER); - return connect(url, credentials.username, credentials.password); - } - - public ITracClient connect(String url, String username, String password) throws Exception { - this.repositoryUrl = url; - this.username = username; - this.password = password; - this.repository = TracClientFactory.createClient(url, version, username, password); - - return this.repository; - } - -} diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/AllTracTests.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/AllTracTests.java deleted file mode 100644 index d01300bcb..000000000 --- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/AllTracTests.java +++ /dev/null @@ -1,49 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.trac.tests; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author Mik Kersten - * @author Steffen Pingel - */ -public class AllTracTests { - - public static Test suite() { -// UrlConnectionUtil.initCommonsLoggingSettings(); - - TestSuite suite = new TestSuite("Test for org.eclipse.mylar.trac.tests"); - // $JUnit-BEGIN$ - // suite.addTestSuite(TracXmlRpcTest.class); - suite.addTestSuite(TracSearchTest.class); - suite.addTestSuite(TracTicketTest.class); - suite.addTestSuite(TracXmlRpcClientTest.class); - suite.addTestSuite(TracXmlRpcClientSearchTest.class); - suite.addTestSuite(Trac09ClientTest.class); - suite.addTestSuite(Trac09ClientSearchTest.class); - suite.addTestSuite(TracClientFactoryTest.class); - suite.addTestSuite(TracRepositoryConnectorTest.class); - suite.addTestSuite(TracQueryTest.class); - suite.addTestSuite(TracRepositoryQueryTest.class); - suite.addTestSuite(TracClientManagerTest.class); - suite.addTestSuite(TracAttachmentHandlerTest.class); - suite.addTestSuite(RepositorySearchQueryTest.class); - suite.addTestSuite(TracOfflineTaskHandlerTest.class); - suite.addTestSuite(TracTaskTest.class); - suite.addTestSuite(TracQueryHitTest.class); - // $JUnit-END$ - return suite; - } - -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/Constants.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/Constants.java deleted file mode 100644 index 9b3d23f02..000000000 --- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/Constants.java +++ /dev/null @@ -1,29 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.trac.tests; - -/** - * @author Steffen Pingel - */ -public class Constants { - - public static final String TEST_TRAC_096_URL = "http://mylar.eclipse.org/trac096"; - - public static final String TEST_TRAC_010_URL = "http://mylar.eclipse.org/trac010"; - - public static final String TEST_TRAC_010_SSL_URL = "https://mylar.eclipse.org/trac010"; - - public static final String TEST_TRAC_010_DIGEST_AUTH_URL = "http://mylar.eclipse.org/trac010digest"; - - public static final String TEST_TRAC_INVALID_URL = "http://mylar.eclipse.org/doesnotexist"; - -} diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/RepositorySearchQueryTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/RepositorySearchQueryTest.java deleted file mode 100644 index 7feac3b10..000000000 --- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/RepositorySearchQueryTest.java +++ /dev/null @@ -1,91 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.trac.tests; - -import junit.framework.TestCase; - -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.mylar.context.tests.support.MylarTestUtils; -import org.eclipse.mylar.context.tests.support.MylarTestUtils.Credentials; -import org.eclipse.mylar.context.tests.support.MylarTestUtils.PrivilegeLevel; -import org.eclipse.mylar.internal.tasks.ui.search.SearchHitCollector; -import org.eclipse.mylar.internal.trac.core.ITracClient; -import org.eclipse.mylar.internal.trac.core.TracCorePlugin; -import org.eclipse.mylar.internal.trac.core.TracRepositoryQuery; -import org.eclipse.mylar.internal.trac.core.ITracClient.Version; -import org.eclipse.mylar.internal.trac.core.model.TracSearch; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.TaskRepositoryManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.mylar.trac.tests.support.TestFixture; -import org.eclipse.mylar.trac.tests.support.XmlRpcServer.TestData; - -/** - * @author Steffen Pingel - */ -public class RepositorySearchQueryTest extends TestCase { - - private TestData data; - - private TaskRepositoryManager manager; - -// private TracRepositoryConnector connector; - - private TaskRepository repository; - - public RepositorySearchQueryTest() { - } - - protected void setUp() throws Exception { - super.setUp(); - - data = TestFixture.init010(); - manager = TasksUiPlugin.getRepositoryManager(); - manager.clearRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - -// connector = (TracRepositoryConnector) manager.getRepositoryConnector(TracUiPlugin.REPOSITORY_KIND); - TasksUiPlugin.getSynchronizationManager().setForceSyncExec(true); - } - - protected void init(String url, Version version) { - Credentials credentials = MylarTestUtils.readCredentials(PrivilegeLevel.USER); - - repository = new TaskRepository(TracCorePlugin.REPOSITORY_KIND, url); - repository.setAuthenticationCredentials(credentials.username, credentials.password); - repository.setTimeZoneId(ITracClient.TIME_ZONE); - repository.setCharacterEncoding(ITracClient.CHARSET); - repository.setVersion(version.name()); - - manager.addRepository(repository, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - } - - public void testSearch() { - init(Constants.TEST_TRAC_096_URL, Version.TRAC_0_9); - - TracSearch search = new TracSearch(); - String queryUrl = repository.getUrl() + ITracClient.QUERY_URL + search.toUrl(); - TracRepositoryQuery query = new TracRepositoryQuery(repository.getUrl(), queryUrl, "description", null); - - SearchHitCollector collector = new SearchHitCollector(TasksUiPlugin.getTaskListManager() - .getTaskList(), repository, query, null) { - @Override - public void addMatch(AbstractQueryHit hit) { - super.addMatch(hit); - assertEquals(Constants.TEST_TRAC_096_URL, hit.getRepositoryUrl()); - } - }; - collector.run(new NullProgressMonitor()); - assertEquals(data.tickets.size(), collector.getHits().size()); - } - -} diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/Trac09ClientSearchTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/Trac09ClientSearchTest.java deleted file mode 100644 index 27c6b809f..000000000 --- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/Trac09ClientSearchTest.java +++ /dev/null @@ -1,25 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.trac.tests; - -import org.eclipse.mylar.internal.trac.core.ITracClient.Version; - -/** - * @author Steffen Pingel - */ -public class Trac09ClientSearchTest extends AbstractTracClientSearchTest { - - public Trac09ClientSearchTest() { - super(Version.TRAC_0_9); - } - -} diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/Trac09ClientTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/Trac09ClientTest.java deleted file mode 100644 index 13e13ac29..000000000 --- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/Trac09ClientTest.java +++ /dev/null @@ -1,67 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.trac.tests; - -import java.util.Arrays; -import java.util.Comparator; - -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.mylar.internal.trac.core.TracException; -import org.eclipse.mylar.internal.trac.core.ITracClient.Version; -import org.eclipse.mylar.internal.trac.core.model.TracVersion; - -/** - * @author Steffen Pingel - */ -public class Trac09ClientTest extends AbstractTracClientRepositoryTest { - - public Trac09ClientTest() { - super(Version.TRAC_0_9); - } - - public void testValidate096() throws Exception { - validate(Constants.TEST_TRAC_096_URL); - } - - public void testValidateAnyPage() throws Exception { - connect("http://mylar.eclipse.org/"); - try { - repository.validate(); - fail("Expected TracException"); - } catch (TracException e) { - } - } - - public void testValidateAnonymousLogin() throws Exception { - connect(Constants.TEST_TRAC_010_URL, "", ""); - repository.validate(); - - connect(Constants.TEST_TRAC_096_URL, "", ""); - repository.validate(); - } - - public void testUpdateAttributes() throws Exception { - connect010(); - assertNull(repository.getMilestones()); - repository.updateAttributes(new NullProgressMonitor(), true); - TracVersion[] versions = repository.getVersions(); - assertEquals(2, versions.length); - Arrays.sort(versions, new Comparator<TracVersion>() { - public int compare(TracVersion o1, TracVersion o2) { - return o1.getName().compareTo(o2.getName()); - } - }); - assertEquals("1.0", versions[0].getName()); - assertEquals("2.0", versions[1].getName()); - } - -} diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracAttachmentHandlerTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracAttachmentHandlerTest.java deleted file mode 100644 index c2a32a74e..000000000 --- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracAttachmentHandlerTest.java +++ /dev/null @@ -1,153 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.trac.tests; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.Proxy; - -import junit.framework.TestCase; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.mylar.context.tests.support.MylarTestUtils; -import org.eclipse.mylar.context.tests.support.MylarTestUtils.Credentials; -import org.eclipse.mylar.context.tests.support.MylarTestUtils.PrivilegeLevel; -import org.eclipse.mylar.internal.trac.core.ITracClient; -import org.eclipse.mylar.internal.trac.core.TracCorePlugin; -import org.eclipse.mylar.internal.trac.core.TracRepositoryConnector; -import org.eclipse.mylar.internal.trac.core.TracTask; -import org.eclipse.mylar.internal.trac.core.ITracClient.Version; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.IAttachmentHandler; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.TaskRepositoryManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.mylar.trac.tests.support.TestFixture; -import org.eclipse.mylar.trac.tests.support.XmlRpcServer.TestData; - -/** - * @author Steffen Pingel - */ -public class TracAttachmentHandlerTest extends TestCase { - - private TaskRepository repository; - - private TaskRepositoryManager manager; - - private TracRepositoryConnector connector; - - private IAttachmentHandler attachmentHandler; - - private Proxy proxySettings; - - private TestData data; - - protected void setUp() throws Exception { - super.setUp(); - - manager = TasksUiPlugin.getRepositoryManager(); - manager.clearRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - - proxySettings = TasksUiPlugin.getDefault().getProxySettings(); - - data = TestFixture.init010(); - } - - protected void tearDown() throws Exception { - super.tearDown(); - } - - protected void init(String url, Version version) { - String kind = TracCorePlugin.REPOSITORY_KIND; - Credentials credentials = MylarTestUtils.readCredentials(PrivilegeLevel.USER); - - repository = new TaskRepository(kind, url); - repository.setAuthenticationCredentials(credentials.username, credentials.password); - repository.setTimeZoneId(ITracClient.TIME_ZONE); - repository.setCharacterEncoding(ITracClient.CHARSET); - repository.setVersion(version.name()); - - manager.addRepository(repository, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - - AbstractRepositoryConnector abstractConnector = manager.getRepositoryConnector(kind); - connector = (TracRepositoryConnector) abstractConnector; - TasksUiPlugin.getSynchronizationManager().setForceSyncExec(true); - - attachmentHandler = connector.getAttachmentHandler(); - } - - public void testDownloadAttachmentXmlRpc() throws Exception { - init(Constants.TEST_TRAC_010_URL, Version.XML_RPC); - TracTask task = (TracTask) connector.createTaskFromExistingKey(repository, data.attachmentTicketId + "", null); - TasksUiPlugin.getSynchronizationManager().synchronize(connector, task, true, null); - assertTrue(task.getTaskData().getAttachments().size() > 0); - File file = File.createTempFile("attachment", null); - file.deleteOnExit(); - attachmentHandler.downloadAttachment(repository, task, task.getTaskData().getAttachments().get(0), file, proxySettings); - - byte[] result = new byte[6]; - InputStream in = new FileInputStream(file); - try { - in.read(result); - assertEquals("Mylar\n", new String(result)); - assertEquals(-1, in.read()); - } finally { - in.close(); - } - } - - public void testUploadAttachmentXmlRpc() throws Exception { - init(Constants.TEST_TRAC_010_URL, Version.XML_RPC); - TracTask task = (TracTask) connector.createTaskFromExistingKey(repository, data.attachmentTicketId + "", null); - File file = File.createTempFile("attachment", null); - file.deleteOnExit(); - OutputStream out = new FileOutputStream(file); - try { - out.write("Mylar".getBytes()); - } finally { - out.close(); - } - attachmentHandler.uploadAttachment(repository, task, "comment", "description", file, "", false, proxySettings); - - ITracClient client = connector.getClientManager().getRepository(repository); - byte[] result = client.getAttachmentData(data.attachmentTicketId, file.getName()); - assertEquals("Mylar", new String(result)); - } - - public void testCanUploadAttachmentXmlRpc() throws CoreException { - init(Constants.TEST_TRAC_010_URL, Version.XML_RPC); - TracTask task = (TracTask) connector.createTaskFromExistingKey(repository, data.attachmentTicketId + "", null); - assertTrue(attachmentHandler.canUploadAttachment(repository, task)); - } - - public void testCanUploadAttachmentWeb() throws CoreException { - init(Constants.TEST_TRAC_010_URL, Version.TRAC_0_9); - TracTask task = (TracTask) connector.createTaskFromExistingKey(repository, data.attachmentTicketId + "", null); - assertFalse(attachmentHandler.canUploadAttachment(repository, task)); - } - - public void testCanDownloadAttachmentXmlRpc() throws Exception { - init(Constants.TEST_TRAC_010_URL, Version.XML_RPC); - TracTask task = (TracTask) connector.createTaskFromExistingKey(repository, data.attachmentTicketId + "", null); - assertTrue(attachmentHandler.canDownloadAttachment(repository, task)); - } - - public void testCanDownloadAttachmentWeb() throws Exception { - init(Constants.TEST_TRAC_010_URL, Version.TRAC_0_9); - TracTask task = (TracTask) connector.createTaskFromExistingKey(repository, data.attachmentTicketId + "", null); - assertFalse(attachmentHandler.canDownloadAttachment(repository, task)); - } - -} diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracClientFactoryTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracClientFactoryTest.java deleted file mode 100644 index 91dc9105f..000000000 --- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracClientFactoryTest.java +++ /dev/null @@ -1,90 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.trac.tests; - -import junit.framework.TestCase; - -import org.eclipse.mylar.context.tests.support.MylarTestUtils; -import org.eclipse.mylar.context.tests.support.MylarTestUtils.Credentials; -import org.eclipse.mylar.context.tests.support.MylarTestUtils.PrivilegeLevel; -import org.eclipse.mylar.internal.trac.core.ITracClient; -import org.eclipse.mylar.internal.trac.core.Trac09Client; -import org.eclipse.mylar.internal.trac.core.TracClientFactory; -import org.eclipse.mylar.internal.trac.core.TracException; -import org.eclipse.mylar.internal.trac.core.TracLoginException; -import org.eclipse.mylar.internal.trac.core.TracXmlRpcClient; -import org.eclipse.mylar.internal.trac.core.ITracClient.Version; - -/** - * @author Steffen Pingel - */ -public class TracClientFactoryTest extends TestCase { - - public void testCreateClient() throws Exception { - ITracClient client = TracClientFactory.createClient(Constants.TEST_TRAC_010_URL, Version.TRAC_0_9, "user", - "password"); - assertTrue(client instanceof Trac09Client); - client = TracClientFactory.createClient(Constants.TEST_TRAC_010_SSL_URL, Version.TRAC_0_9, "user", "password"); - assertTrue(client instanceof Trac09Client); - - client = TracClientFactory.createClient(Constants.TEST_TRAC_010_URL, Version.XML_RPC, "user", "password"); - assertTrue(client instanceof TracXmlRpcClient); - client = TracClientFactory.createClient(Constants.TEST_TRAC_010_SSL_URL, Version.XML_RPC, "user", "password"); - assertTrue(client instanceof TracXmlRpcClient); - } - - public void testCreateClientNull() throws Exception { - try { - TracClientFactory.createClient(Constants.TEST_TRAC_010_URL, null, "user", "password"); - fail("Expected Exception"); - } catch (Exception e) { - } - } - - public void testProbeClient096() throws Exception { - probeClient(Constants.TEST_TRAC_096_URL, false); - } - - public void testProbeClient010() throws Exception { - probeClient(Constants.TEST_TRAC_010_URL, true); - } - - public void testProbeClient010DigestAuth() throws Exception { - probeClient(Constants.TEST_TRAC_010_DIGEST_AUTH_URL, true); - } - - protected void probeClient(String url, boolean xmlrpcInstalled) throws Exception { - Credentials credentials = MylarTestUtils.readCredentials(PrivilegeLevel.USER); - Version version = TracClientFactory.probeClient(url, credentials.username, credentials.password); - if (xmlrpcInstalled) { - assertEquals(Version.XML_RPC, version); - } else { - assertEquals(Version.TRAC_0_9, version); - } - - version = TracClientFactory.probeClient(url, "", ""); - assertEquals(Version.TRAC_0_9, version); - - try { - version = TracClientFactory.probeClient(url, "invaliduser", "password"); - fail("Expected TracLoginException, got " + version); - } catch (TracLoginException e) { - } - - try { - version = TracClientFactory.probeClient(url + "/nonexistant", "", ""); - fail("Expected TracException, got " + version); - } catch (TracException e) { - } - } - -} diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracOfflineTaskHandlerTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracOfflineTaskHandlerTest.java deleted file mode 100644 index 4fc0d5372..000000000 --- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracOfflineTaskHandlerTest.java +++ /dev/null @@ -1,136 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.trac.tests; - -import java.util.HashSet; -import java.util.Set; - -import junit.framework.TestCase; - -import org.eclipse.mylar.context.tests.support.MylarTestUtils; -import org.eclipse.mylar.context.tests.support.MylarTestUtils.Credentials; -import org.eclipse.mylar.context.tests.support.MylarTestUtils.PrivilegeLevel; -import org.eclipse.mylar.internal.trac.core.ITracClient; -import org.eclipse.mylar.internal.trac.core.TracCorePlugin; -import org.eclipse.mylar.internal.trac.core.TracRepositoryConnector; -import org.eclipse.mylar.internal.trac.core.TracTask; -import org.eclipse.mylar.internal.trac.core.ITracClient.Version; -import org.eclipse.mylar.internal.trac.core.model.TracTicket; -import org.eclipse.mylar.internal.trac.core.model.TracTicket.Key; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.IOfflineTaskHandler; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.TaskRepositoryManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.mylar.trac.tests.support.TestFixture; -import org.eclipse.mylar.trac.tests.support.XmlRpcServer.TestData; - -/** - * @author Steffen Pingel - */ -public class TracOfflineTaskHandlerTest extends TestCase { - - private TracRepositoryConnector connector; - - private IOfflineTaskHandler offlineHandler; - - private TaskRepository repository; - - private TaskRepositoryManager manager; - - private TestData data; - - public TracOfflineTaskHandlerTest() { - } - - protected void setUp() throws Exception { - super.setUp(); - - data = TestFixture.init010(); - - manager = TasksUiPlugin.getRepositoryManager(); - manager.clearRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - - connector = (TracRepositoryConnector) manager.getRepositoryConnector(TracCorePlugin.REPOSITORY_KIND); - TasksUiPlugin.getSynchronizationManager().setForceSyncExec(true); - - offlineHandler = connector.getOfflineTaskHandler(); - } - - protected void init(String url, Version version) { - Credentials credentials = MylarTestUtils.readCredentials(PrivilegeLevel.USER); - - repository = new TaskRepository(TracCorePlugin.REPOSITORY_KIND, url); - repository.setAuthenticationCredentials(credentials.username, credentials.password); - repository.setTimeZoneId(ITracClient.TIME_ZONE); - repository.setCharacterEncoding(ITracClient.CHARSET); - repository.setVersion(version.name()); - - manager.addRepository(repository, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - } - - public void testGetChangedSinceLastSyncWeb096() throws Exception { - init(Constants.TEST_TRAC_096_URL, Version.TRAC_0_9); - TracTask task = (TracTask) connector.createTaskFromExistingKey(repository, data.offlineHandlerTicketId + "", null); - - Set<AbstractRepositoryTask> tasks = new HashSet<AbstractRepositoryTask>(); - tasks.add(task); - - assertEquals(null, repository.getSyncTimeStamp()); - Set<AbstractRepositoryTask> result = offlineHandler.getChangedSinceLastSync(repository, tasks, null); - assertEquals(tasks, result); - assertEquals(null, repository.getSyncTimeStamp()); - - int time = (int)(System.currentTimeMillis() / 1000) + 1; - repository.setSyncTimeStamp(time + ""); - assertEquals(tasks, result); - } - - public void testGetChangedSinceLastSyncXmlRpc010() throws Exception { - init(Constants.TEST_TRAC_010_URL, Version.XML_RPC); - TracTask task = (TracTask) connector.createTaskFromExistingKey(repository, data.offlineHandlerTicketId + "", null); - TasksUiPlugin.getSynchronizationManager().synchronize(connector, task, true, null); - int lastModified = Integer.parseInt(task.getTaskData().getLastModified()); - - Set<AbstractRepositoryTask> tasks = new HashSet<AbstractRepositoryTask>(); - tasks.add(task); - - assertEquals(null, repository.getSyncTimeStamp()); - Set<AbstractRepositoryTask> result = offlineHandler.getChangedSinceLastSync(repository, tasks, null); - assertEquals(tasks, result); - - // always returns the ticket because time comparison mode is >= - repository.setSyncTimeStamp(lastModified + ""); - result = offlineHandler.getChangedSinceLastSync(repository, tasks, null); - assertEquals(tasks, result); - - repository.setSyncTimeStamp((lastModified + 1) + ""); - result = offlineHandler.getChangedSinceLastSync(repository, tasks, null); - assertTrue(result.isEmpty()); - - // change ticket making sure it gets a new change time - Thread.sleep(1000); - ITracClient client = connector.getClientManager().getRepository(repository); - TracTicket ticket = client.getTicket(data.offlineHandlerTicketId); - if (ticket.getValue(Key.DESCRIPTION).equals(lastModified + "")) { - ticket.putBuiltinValue(Key.DESCRIPTION, lastModified + "x"); - } else { - ticket.putBuiltinValue(Key.DESCRIPTION, lastModified + ""); - } - client.updateTicket(ticket, "comment"); - - repository.setSyncTimeStamp((lastModified + 1) + ""); - result = offlineHandler.getChangedSinceLastSync(repository, tasks, null); - assertEquals(tasks, result); - } - -} diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracQueryHitTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracQueryHitTest.java deleted file mode 100644 index 2ee96735d..000000000 --- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracQueryHitTest.java +++ /dev/null @@ -1,38 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.trac.tests; - -import junit.framework.TestCase; - -import org.eclipse.mylar.internal.trac.core.TracQueryHit; -import org.eclipse.mylar.internal.trac.core.TracTask; -import org.eclipse.mylar.tasks.core.TaskList; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Steffen Pingel - */ -public class TracQueryHitTest extends TestCase { - - public void testAttributes() { - TaskList taskList = TasksUiPlugin.getTaskListManager().getTaskList(); - TracQueryHit hit = new TracQueryHit(taskList, "url", "description", "123"); - hit.setPriority("P1"); - hit.setCompleted(true); - - TracTask task = (TracTask) hit.getOrCreateCorrespondingTask(); - assertEquals("url-123", task.getHandleIdentifier()); - assertEquals("P1", task.getPriority()); - assertEquals(true, task.isCompleted()); - } - -} diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracQueryTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracQueryTest.java deleted file mode 100644 index a17f63605..000000000 --- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracQueryTest.java +++ /dev/null @@ -1,37 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.trac.tests; - -import junit.framework.TestCase; - -import org.eclipse.mylar.internal.trac.core.ITracClient; -import org.eclipse.mylar.internal.trac.core.TracRepositoryQuery; -import org.eclipse.mylar.internal.trac.core.model.TracSearch; - -/** - * @author Steffen Pingel - */ -public class TracQueryTest extends TestCase { - - private TracRepositoryQuery createQuery(String parameter) { - String url = "http://oss.steffenpingel.de/mylar-trac-connector"; - return new TracRepositoryQuery(url, url + ITracClient.QUERY_URL + parameter, "description", null); - } - - public void testGetTracSearch() { - String queryParameter = "&order=priority&status=new&status=assigned&status=reopened&milestone=M1&owner=%7E%C3%A4%C3%B6%C3%BC"; - TracRepositoryQuery query = createQuery(queryParameter); - TracSearch search = query.getTracSearch(); - assertEquals(queryParameter, search.toUrl()); - } - -} diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositoryConnectorTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositoryConnectorTest.java deleted file mode 100644 index 78b830d04..000000000 --- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositoryConnectorTest.java +++ /dev/null @@ -1,311 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.trac.tests; - -import java.io.File; -import java.net.MalformedURLException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Comparator; -import java.util.List; - -import junit.framework.TestCase; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.jface.wizard.WizardDialog; -import org.eclipse.mylar.context.core.ContextCorePlugin; -import org.eclipse.mylar.context.tests.support.MylarTestUtils; -import org.eclipse.mylar.context.tests.support.MylarTestUtils.Credentials; -import org.eclipse.mylar.context.tests.support.MylarTestUtils.PrivilegeLevel; -import org.eclipse.mylar.internal.tasks.ui.wizards.EditRepositoryWizard; -import org.eclipse.mylar.internal.trac.core.ITracClient; -import org.eclipse.mylar.internal.trac.core.InvalidTicketException; -import org.eclipse.mylar.internal.trac.core.TracCorePlugin; -import org.eclipse.mylar.internal.trac.core.TracRepositoryConnector; -import org.eclipse.mylar.internal.trac.core.TracRepositoryQuery; -import org.eclipse.mylar.internal.trac.core.TracTask; -import org.eclipse.mylar.internal.trac.core.ITracClient.Version; -import org.eclipse.mylar.internal.trac.core.model.TracSearch; -import org.eclipse.mylar.internal.trac.core.model.TracTicket; -import org.eclipse.mylar.internal.trac.core.model.TracVersion; -import org.eclipse.mylar.internal.trac.core.model.TracTicket.Key; -import org.eclipse.mylar.internal.trac.ui.wizard.TracRepositorySettingsPage; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.QueryHitCollector; -import org.eclipse.mylar.tasks.core.TaskList; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.TaskRepositoryManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.mylar.trac.tests.support.TestFixture; -import org.eclipse.mylar.trac.tests.support.XmlRpcServer.TestData; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.PlatformUI; - -/** - * @author Steffen Pingel - */ -public class TracRepositoryConnectorTest extends TestCase { - - private TestData data; - - private TaskRepository repository; - - private TaskRepositoryManager manager; - - private TracRepositoryConnector connector; - - private TaskList tasklist; - - protected void setUp() throws Exception { - super.setUp(); - - manager = TasksUiPlugin.getRepositoryManager(); - manager.clearRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - - tasklist = TasksUiPlugin.getTaskListManager().getTaskList(); - - data = TestFixture.init010(); - } - - protected void tearDown() throws Exception { - super.tearDown(); - - // TestFixture.cleanupRepository1(); - } - - protected void init(String url, Version version) { - String kind = TracCorePlugin.REPOSITORY_KIND; - Credentials credentials = MylarTestUtils.readCredentials(PrivilegeLevel.USER); - - repository = new TaskRepository(kind, url); - repository.setAuthenticationCredentials(credentials.username, credentials.password); - repository.setTimeZoneId(ITracClient.TIME_ZONE); - repository.setCharacterEncoding(ITracClient.CHARSET); - repository.setVersion(version.name()); - - manager.addRepository(repository, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - - AbstractRepositoryConnector abstractConnector = manager.getRepositoryConnector(kind); - assertEquals(abstractConnector.getRepositoryType(), kind); - - connector = (TracRepositoryConnector) abstractConnector; - TasksUiPlugin.getSynchronizationManager().setForceSyncExec(true); - } - - public void testGetRepositoryUrlFromTaskUrl() { - TracRepositoryConnector connector = new TracRepositoryConnector(); - assertEquals("http://host/repo", connector.getRepositoryUrlFromTaskUrl("http://host/repo/ticket/1")); - assertEquals("http://host", connector.getRepositoryUrlFromTaskUrl("http://host/ticket/2342")); - assertEquals(null, connector.getRepositoryUrlFromTaskUrl("http://host/repo/2342")); - assertEquals(null, connector.getRepositoryUrlFromTaskUrl("http://host/repo/ticket-2342")); - } - - public void testCreateTaskFromExistingKeyXmlRpc010() throws CoreException { - init(Constants.TEST_TRAC_010_URL, Version.XML_RPC); - createTaskFromExistingKey(); - } - - public void testCreateTaskFromExistingKeyTracWeb010() throws CoreException { - init(Constants.TEST_TRAC_010_URL, Version.TRAC_0_9); - createTaskFromExistingKey(); - } - - public void testCreateTaskFromExistingKeyTracWeb096() throws CoreException { - init(Constants.TEST_TRAC_096_URL, Version.TRAC_0_9); - createTaskFromExistingKey(); - } - - protected void createTaskFromExistingKey() throws CoreException { - String id = data.tickets.get(0).getId() + ""; - ITask task = connector.createTaskFromExistingKey(repository, id, null); - assertNotNull(task); - assertEquals(TracTask.class, task.getClass()); - assertTrue(task.getDescription().contains("summary1")); - assertEquals(repository.getUrl() + ITracClient.TICKET_URL + id, task.getUrl()); - - try { - task = connector.createTaskFromExistingKey(repository, "does not exist", null); - fail("Expected CoreException"); - } catch (CoreException e) { - } - - try { - task = connector.createTaskFromExistingKey(repository, Integer.MAX_VALUE + "", null); - fail("Expected CoreException"); - } catch (CoreException e) { - } - } - - public void testClientManagerChangeTaskRepositorySettings() throws MalformedURLException { - init(Constants.TEST_TRAC_010_URL, Version.TRAC_0_9); - ITracClient client = connector.getClientManager().getRepository(repository); - assertEquals(Version.TRAC_0_9, client.getVersion()); - - EditRepositoryWizard wizard = new EditRepositoryWizard(repository); - Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); - WizardDialog dialog = new WizardDialog(shell, wizard); - dialog.create(); - - ((TracRepositorySettingsPage) wizard.getSettingsPage()).setTracVersion(Version.XML_RPC); - assertTrue(wizard.performFinish()); - - client = connector.getClientManager().getRepository(repository); - assertEquals(Version.XML_RPC, client.getVersion()); - } - - public void testPerformQueryXmlRpc010() { - performQuery(Constants.TEST_TRAC_010_URL, Version.XML_RPC); - } - - public void testPerformQueryWeb010() { - performQuery(Constants.TEST_TRAC_010_URL, Version.TRAC_0_9); - } - - public void testPerformQueryWeb096() { - performQuery(Constants.TEST_TRAC_096_URL, Version.TRAC_0_9); - } - - protected void performQuery(String url, Version version) { - init(url, version); - - TracSearch search = new TracSearch(); - search.addFilter("milestone", "milestone1"); - search.addFilter("milestone", "milestone2"); - search.setOrderBy("id"); - - String queryUrl = url + ITracClient.QUERY_URL + search.toUrl(); - TracRepositoryQuery query = new TracRepositoryQuery(url, queryUrl, "description", tasklist); - - //MultiStatus queryStatus = new MultiStatus(TracUiPlugin.PLUGIN_ID, IStatus.OK, "Query result", null); - final List<AbstractQueryHit> result = new ArrayList<AbstractQueryHit>(); - QueryHitCollector hitCollector = new QueryHitCollector(TasksUiPlugin.getTaskListManager().getTaskList()) { - - @Override - public void addMatch(AbstractQueryHit hit) { - result.add(hit); - }}; - IStatus queryStatus = connector.performQuery(query, repository, TasksUiPlugin.getDefault().getProxySettings(), new NullProgressMonitor(), hitCollector); - - assertTrue(queryStatus.isOK()); - assertEquals(3, result.size()); - assertEquals(data.tickets.get(0).getId() + "", result.get(0).getId()); - assertEquals(data.tickets.get(1).getId() + "", result.get(1).getId()); - assertEquals(data.tickets.get(2).getId() + "", result.get(2).getId()); - } - - public void testUpdateTaskDetails() throws InvalidTicketException { - init(Constants.TEST_TRAC_010_URL, Version.TRAC_0_9); - - TracTicket ticket = new TracTicket(123); - ticket.putBuiltinValue(Key.DESCRIPTION, "mydescription"); - ticket.putBuiltinValue(Key.PRIORITY, "mypriority"); - ticket.putBuiltinValue(Key.SUMMARY, "mysummary"); - ticket.putBuiltinValue(Key.TYPE, "mytype"); - - TracTask task = new TracTask(AbstractRepositoryTask.getHandle(Constants.TEST_TRAC_010_URL, 123), "desc", true); - assertEquals(Constants.TEST_TRAC_010_URL + ITracClient.TICKET_URL + "123", task.getUrl()); - assertEquals("desc", task.getDescription()); - - connector.updateTaskDetails(task, ticket, false); - assertEquals(Constants.TEST_TRAC_010_URL + ITracClient.TICKET_URL + "123", task.getUrl()); - assertEquals("123: mysummary", task.getDescription()); - assertEquals("P3", task.getPriority()); - assertEquals("mytype", task.getTaskType()); - } - - public void testUpdateTaskDetailsSummaryOnly() throws InvalidTicketException { - init(Constants.TEST_TRAC_010_URL, Version.TRAC_0_9); - - TracTicket ticket = new TracTicket(456); - ticket.putBuiltinValue(Key.SUMMARY, "mysummary"); - - TracTask task = new TracTask(AbstractRepositoryTask.getHandle(Constants.TEST_TRAC_010_URL, 456), "desc", true); - - connector.updateTaskDetails(task, ticket, false); - assertEquals(Constants.TEST_TRAC_010_URL + ITracClient.TICKET_URL + "456", task.getUrl()); - assertEquals("456: mysummary", task.getDescription()); - assertEquals("P3", task.getPriority()); - assertEquals(null, task.getTaskType()); - } - - public void testUpdateAttributesWeb096() throws Exception { - init(Constants.TEST_TRAC_096_URL, Version.TRAC_0_9); - updateAttributes(); - } - - public void testUpdateAttributesWeb010() throws Exception { - init(Constants.TEST_TRAC_010_URL, Version.TRAC_0_9); - updateAttributes(); - } - - public void testUpdateAttributesXmlRpc010() throws Exception { - init(Constants.TEST_TRAC_010_URL, Version.XML_RPC); - updateAttributes(); - } - - protected void updateAttributes() throws Exception { - connector.updateAttributes(repository, null, new NullProgressMonitor()); - - ITracClient server = connector.getClientManager().getRepository(repository); - TracVersion[] versions = server.getVersions(); - assertEquals(2, versions.length); - Arrays.sort(versions, new Comparator<TracVersion>() { - public int compare(TracVersion o1, TracVersion o2) { - return o1.getName().compareTo(o2.getName()); - } - }); - assertEquals("1.0", versions[0].getName()); - assertEquals("2.0", versions[1].getName()); - } - - public void testContext010() throws Exception { - init(Constants.TEST_TRAC_010_URL, Version.XML_RPC); - TracTask task = (TracTask) connector.createTaskFromExistingKey(repository, data.attachmentTicketId + "", null); - TasksUiPlugin.getSynchronizationManager().synchronize(connector, task, true, null); - - //int size = task.getTaskData().getAttachments().size(); - - File sourceContextFile = ContextCorePlugin.getContextManager().getFileForContext(task.getHandleIdentifier()); - sourceContextFile.createNewFile(); - sourceContextFile.deleteOnExit(); - - assertTrue(connector.attachContext(repository, task, "", TasksUiPlugin.getDefault().getProxySettings())); - - TasksUiPlugin.getSynchronizationManager().synchronize(connector, task, true, null); - // TODO attachment may have been overridden therefore size may not have changed - //assertEquals(size + 1, task.getTaskData().getAttachments().size()); - - //RepositoryAttachment attachment = task.getTaskData().getAttachments().get(size); - //assertTrue(connector.retrieveContext(repository, task, attachment, TasksUiPlugin.getDefault().getProxySettings(), TasksUiPlugin.getDefault().getDataDirectory())); - } - - public void testContext096() throws Exception { - init(Constants.TEST_TRAC_096_URL, Version.TRAC_0_9); - TracTask task = (TracTask) connector.createTaskFromExistingKey(repository, data.attachmentTicketId + "", null); - - File sourceContextFile = ContextCorePlugin.getContextManager().getFileForContext(task.getHandleIdentifier()); - sourceContextFile.createNewFile(); - sourceContextFile.deleteOnExit(); - - try { - connector.attachContext(repository, task, "", TasksUiPlugin.getDefault().getProxySettings()); - fail("expected CoreException"); // operation should not be supported - } catch (CoreException e) { - } - } - -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositoryQueryTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositoryQueryTest.java deleted file mode 100644 index c4619561f..000000000 --- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositoryQueryTest.java +++ /dev/null @@ -1,74 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.trac.tests; - -import java.util.Arrays; -import java.util.List; - -import junit.framework.TestCase; - -import org.eclipse.mylar.internal.trac.core.ITracClient; -import org.eclipse.mylar.internal.trac.core.TracCorePlugin; -import org.eclipse.mylar.internal.trac.core.TracRepositoryQuery; -import org.eclipse.mylar.internal.trac.core.model.TracSearch; -import org.eclipse.mylar.internal.trac.core.model.TracSearchFilter; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.TaskRepositoryManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; - -/** - * @author Steffen Pingel - */ -public class TracRepositoryQueryTest extends TestCase { - - public void testChangeRepositoryUrl() { - TaskRepositoryManager manager = TasksUiPlugin.getRepositoryManager(); - manager.clearRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath()); - - TaskRepository repository = new TaskRepository(TracCorePlugin.REPOSITORY_KIND, Constants.TEST_TRAC_096_URL); - manager.addRepository(repository, TasksUiPlugin.getDefault().getRepositoriesFilePath()); - - TracSearch search = new TracSearch(); - String queryUrl = repository.getUrl() + ITracClient.QUERY_URL + search.toUrl(); - TracRepositoryQuery query = new TracRepositoryQuery(repository.getUrl(), queryUrl, "description", null); - TasksUiPlugin.getTaskListManager().getTaskList().addQuery(query); - - String oldUrl = repository.getUrl(); - String newUrl = Constants.TEST_TRAC_010_URL; - TasksUiPlugin.getTaskListManager().refactorRepositoryUrl(oldUrl, newUrl); - repository.setUrl(newUrl); - - assertEquals(newUrl, query.getRepositoryUrl()); - assertEquals(newUrl + ITracClient.QUERY_URL + search.toUrl(), query.getUrl()); - } - - public void testGetFilterList() { - String repositoryUrl = "https://foo.bar/repo"; - String parameterUrl = "&status=new&status=assigned&status=reopened&milestone=0.1"; - String queryUrl = repositoryUrl + ITracClient.QUERY_URL + parameterUrl; - TracRepositoryQuery query = new TracRepositoryQuery(repositoryUrl, queryUrl, "description", null); - - TracSearch filterList = query.getTracSearch(); - - assertEquals(parameterUrl, filterList.toUrl()); - assertEquals("&status=new|assigned|reopened&milestone=0.1", filterList.toQuery()); - - List<TracSearchFilter> list = filterList.getFilters(); - TracSearchFilter filter = list.get(0); - assertEquals("status", filter.getFieldName()); - assertEquals(Arrays.asList("new", "assigned", "reopened"), filter.getValues()); - filter = list.get(1); - assertEquals("milestone", filter.getFieldName()); - assertEquals(Arrays.asList("0.1"), filter.getValues()); - } - -} diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTestPlugin.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTestPlugin.java deleted file mode 100644 index 35aa3f5f7..000000000 --- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTestPlugin.java +++ /dev/null @@ -1,52 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.trac.tests; - -import org.eclipse.ui.plugin.AbstractUIPlugin; -import org.osgi.framework.BundleContext; - -/** - * The activator class controls the plug-in life cycle - * - * @author Steffen Pingel - */ -public class TracTestPlugin extends AbstractUIPlugin { - - // The plug-in ID - public static final String PLUGIN_ID = "org.eclipse.mylar.trac.tests"; - - // The shared instance - private static TracTestPlugin plugin; - - public TracTestPlugin() { - plugin = this; - } - - public void start(BundleContext context) throws Exception { - super.start(context); - } - - public void stop(BundleContext context) throws Exception { - plugin = null; - super.stop(context); - } - - /** - * Returns the shared instance - * - * @return the shared instance - */ - public static TracTestPlugin getDefault() { - return plugin; - } - -} diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTicketTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTicketTest.java deleted file mode 100644 index a4be81343..000000000 --- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTicketTest.java +++ /dev/null @@ -1,69 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.trac.tests; - -import java.util.Calendar; -import java.util.Date; -import java.util.TimeZone; - -import junit.framework.TestCase; - -import org.eclipse.mylar.internal.trac.core.InvalidTicketException; -import org.eclipse.mylar.internal.trac.core.model.TracTicket; -import org.eclipse.mylar.internal.trac.core.model.TracTicket.Key; - -/** - * @author Steffen Pingel - */ -public class TracTicketTest extends TestCase { - - public void testValid() { - TracTicket ticket = new TracTicket(); - assertFalse(ticket.isValid()); - - ticket.setId(1); - assertTrue(ticket.isValid()); - } - - public void testPutTracValue() throws InvalidTicketException { - TracTicket ticket = new TracTicket(1); - ticket.putValue("summary", "a"); - assertEquals("a", ticket.getValue(Key.SUMMARY)); - assertEquals(null, ticket.getCustomValue("summary")); - assertEquals(null, ticket.getCustomValue("a")); - - ticket.putValue("summary", "b"); - ticket.putValue("custom", "c"); - assertEquals("b", ticket.getValue(Key.SUMMARY)); - assertEquals(null, ticket.getCustomValue("summary")); - assertEquals("c", ticket.getCustomValue("custom")); - } - - public void testPutTracValueId() throws InvalidTicketException { - TracTicket ticket = new TracTicket(); - assertFalse(ticket.putValue("id", "1")); - } - - public void testSetCreated() throws InvalidTicketException { - TracTicket ticket = new TracTicket(1); - ticket.setCreated(0); - assertEquals(TimeZone.getTimeZone("GMT").getOffset(0) * 1000, ticket.getCreated().getTime()); - - Date date = new Date(); - Calendar utc = Calendar.getInstance(TimeZone.getTimeZone("UTC")); - utc.setTime(date); - ticket.setCreated((int) (utc.getTimeInMillis() / 1000)); - - assertEquals(date.getTime() / 1000, ticket.getCreated().getTime() / 1000); - } - -} diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracXmlRpcClientSearchTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracXmlRpcClientSearchTest.java deleted file mode 100644 index a7d1ac9c7..000000000 --- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracXmlRpcClientSearchTest.java +++ /dev/null @@ -1,46 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.trac.tests; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.mylar.internal.trac.core.ITracClient.Version; -import org.eclipse.mylar.internal.trac.core.model.TracSearch; -import org.eclipse.mylar.internal.trac.core.model.TracTicket; -import org.eclipse.mylar.internal.trac.core.model.TracTicket.Key; - -/** - * @author Steffen Pingel - */ -public class TracXmlRpcClientSearchTest extends AbstractTracClientSearchTest { - - public TracXmlRpcClientSearchTest() { - super(Version.XML_RPC); - } - - public void testSearchValidateTicket() throws Exception { - TracSearch search = new TracSearch(); - search.addFilter("summary", "summary1"); - List<TracTicket> result = new ArrayList<TracTicket>(); - repository.search(search, result); - assertEquals(1, result.size()); - assertTicketEquals(tickets.get(0), result.get(0)); - assertEquals("component1", result.get(0).getValue(Key.COMPONENT)); - assertEquals("description1", result.get(0).getValue(Key.DESCRIPTION)); - assertEquals("milestone1", result.get(0).getValue(Key.MILESTONE)); - assertEquals("anonymous", result.get(0).getValue(Key.REPORTER)); - assertEquals("summary1", result.get(0).getValue(Key.SUMMARY)); - // assertEquals("", result.get(0).getValue(Key.VERSION)); - } - -} diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracXmlRpcClientTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracXmlRpcClientTest.java deleted file mode 100644 index 475863559..000000000 --- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracXmlRpcClientTest.java +++ /dev/null @@ -1,71 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.trac.tests; - -import java.util.Arrays; -import java.util.Comparator; -import java.util.Date; - -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.mylar.internal.trac.core.TracLoginException; -import org.eclipse.mylar.internal.trac.core.TracRemoteException; -import org.eclipse.mylar.internal.trac.core.TracXmlRpcClient; -import org.eclipse.mylar.internal.trac.core.ITracClient.Version; -import org.eclipse.mylar.internal.trac.core.model.TracVersion; - -/** - * @author Steffen Pingel - */ -public class TracXmlRpcClientTest extends AbstractTracClientRepositoryTest { - - public TracXmlRpcClientTest() { - super(Version.XML_RPC); - } - - public void testValidateFailNoAuth() throws Exception { - connect(Constants.TEST_TRAC_010_URL, "", ""); - try { - repository.validate(); - fail("Expected TracLoginException"); - } catch (TracLoginException e) { - } - } - - public void testMulticallExceptions() throws Exception { - connect010(); - try { - ((TracXmlRpcClient) repository).getTickets(new int[] { 1, Integer.MAX_VALUE }); - fail("Expected TracRemoteException"); - } catch (TracRemoteException e) { - } - } - - public void testUpdateAttributes() throws Exception { - connect010(); - assertNull(repository.getMilestones()); - repository.updateAttributes(new NullProgressMonitor(), true); - TracVersion[] versions = repository.getVersions(); - assertEquals(2, versions.length); - Arrays.sort(versions, new Comparator<TracVersion>() { - public int compare(TracVersion o1, TracVersion o2) { - return o1.getName().compareTo(o2.getName()); - } - }); - assertEquals("1.0", versions[0].getName()); - assertEquals("", versions[0].getDescription()); - assertEquals(new Date(0), versions[0].getTime()); - assertEquals("2.0", versions[1].getName()); - assertEquals("", versions[1].getDescription()); - assertEquals(new Date(0), versions[1].getTime()); - } - -} diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracXmlRpcTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracXmlRpcTest.java deleted file mode 100644 index 1b4001a83..000000000 --- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracXmlRpcTest.java +++ /dev/null @@ -1,501 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.trac.tests; - -import java.io.IOException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Date; -import java.util.Hashtable; -import java.util.List; -import java.util.Map; -import java.util.Random; - -import junit.framework.TestCase; - -import org.apache.xmlrpc.XmlRpcException; -import org.apache.xmlrpc.client.XmlRpcClient; -import org.apache.xmlrpc.client.XmlRpcClientConfigImpl; -import org.eclipse.mylar.context.tests.support.MylarTestUtils; -import org.eclipse.mylar.context.tests.support.MylarTestUtils.Credentials; -import org.eclipse.mylar.context.tests.support.MylarTestUtils.PrivilegeLevel; -import org.eclipse.mylar.internal.trac.core.util.TracHttpClientTransportFactory; - -/** - * Test cases for <a href="http://trac-hacks.org/wiki/XmlRpcPlugin">Trac XML-RPC - * Plugin</a> API. Revision 1188 or higher is required. - * - * <p> - * This class does not depend on any Mylar (connector) classes except for - * TracHttpClientTransportFactory which is needed for initialization of - * HttpClient. - * - * @author Steffen Pingel - */ -public class TracXmlRpcTest extends TestCase { - - public static final String XMLRPC_URL = "/login/xmlrpc"; - - private XmlRpcClient xmlrpc; - - private String username; - - // private String password; - - private Random random; - - private ArrayList<Integer> tickets; - - @Override - protected void setUp() throws Exception { - super.setUp(); - - random = new Random(); - - Credentials credentials = MylarTestUtils.readCredentials(PrivilegeLevel.ADMIN); - createConnection(new URL(Constants.TEST_TRAC_010_URL + XMLRPC_URL), credentials.username, credentials.password); - - tickets = new ArrayList<Integer>(); - } - - @Override - protected void tearDown() throws Exception { - super.tearDown(); - - for (int id : tickets) { - call("ticket.delete", id); - } - } - - private void createConnection(URL url, String username, String password) throws Exception { - XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl(); - config.setEncoding("UTF-8"); - config.setBasicUserName(username); - config.setBasicPassword(password); - config.setServerURL(url); - - xmlrpc = new XmlRpcClient(); - xmlrpc.setConfig(config); - - TracHttpClientTransportFactory factory = new TracHttpClientTransportFactory(xmlrpc); - xmlrpc.setTransportFactory(factory); - - this.username = username; - // this.password = password; - } - - private int createTicket(String summary, String description, Map attributes) throws XmlRpcException, IOException { - int id = (Integer) call("ticket.create", summary, description, attributes); - tickets.add(id); - return id; - } - - private Object call(String method, Object... parameters) throws XmlRpcException, IOException { - Object result = xmlrpc.execute(method, parameters); - if (result instanceof XmlRpcException) { - throw (XmlRpcException) result; - } - return result; - } - - public Map<String, Object> createMultiCall(String methodName, Object... parameters) throws XmlRpcException, - IOException { - Map<String, Object> table = new Hashtable<String, Object>(); - table.put("methodName", methodName); - table.put("params", parameters); - return table; - } - - private void internalTestCrud(String module) throws XmlRpcException, IOException { - try { - call(module + ".delete", "foo"); - } catch (XmlRpcException e) { - } - - call(module + ".create", "foo", "bar"); - try { - assertHasValue((Object[]) call(module + ".getAll"), "foo"); - assertEquals("bar", (String) (call(module + ".get", "foo"))); - - call(module + ".update", "foo", "baz"); - assertEquals("baz", (String) (call(module + ".get", "foo"))); - } finally { - call(module + ".delete", "foo"); - } - } - - private Object createValue(Object fieldName, Object clazz) { - if (clazz == String.class) { - return fieldName.toString() + random.nextInt(); - } else if (clazz == Date.class) { - return new Date(); - } else if (clazz == Boolean.class) { - return random.nextBoolean(); - } else if (clazz == Double.class) { - return random.nextDouble(); - } else if (clazz == Integer.class) { - return random.nextInt(); - } - - throw new RuntimeException("Invalid test data: " + fieldName + ", " + clazz); - } - - private void internalTestComponent(String module, Object... fields) throws XmlRpcException, IOException { - try { - call(module + ".delete", "foo"); - } catch (XmlRpcException e) { - } - - Map<String, Object> attributes = new Hashtable<String, Object>(); - for (int i = 0; i < fields.length; i += 2) { - attributes.put((String) fields[i], createValue(fields[i], fields[i + 1])); - } - - call(module + ".create", "foo", attributes); - - try { - assertHasValue((Object[]) call(module + ".getAll"), "foo"); - Map values = (Map) call(module + ".get", "foo"); - for (String attribute : attributes.keySet()) { - assertEquals(attributes.get(attribute), values.get(attribute)); - } - - for (int i = 0; i < fields.length; i += 2) { - attributes.put((String) fields[i], createValue(fields[i], fields[i + 1])); - } - - call(module + ".update", "foo", attributes); - values = (Map) call(module + ".get", "foo"); - for (String attribute : attributes.keySet()) { - assertEquals(attributes.get(attribute), values.get(attribute)); - } - } finally { - call(module + ".delete", "foo"); - } - } - - public void testMilestoneDate() throws XmlRpcException, IOException { - try { - call("ticket.milestone.delete", "foo"); - } catch (XmlRpcException e) { - } - - int due = (int) (System.currentTimeMillis() / 1000) + 1000; - int completed = (int) (System.currentTimeMillis() / 1000); - - Map<String, Object> attributes = new Hashtable<String, Object>(); - attributes.put("description", "description"); - attributes.put("due", due); - attributes.put("completed", completed); - - call("ticket.milestone.create", "foo", attributes); - - Map values = (Map) call("ticket.milestone.get", "foo"); - assertEquals(new Integer(due), (Integer) values.get("due")); - assertEquals(new Integer(completed), (Integer) values.get("completed")); - - call("ticket.milestone.delete", "foo"); - } - - private void assertHasValue(Object[] items, Object value) { - for (Object item : items) { - if (item.equals(value)) { - return; - } - } - fail("Could not find expected value: " + value); - } - - private void assertTicketHasAttributes(Map<String, Object> attributes, int id, Object[] ticket) { - assertTicketHasAttributes(attributes, id, ticket, true); - } - - private void assertTicketHasAttributes(Map<String, Object> attributes, int id, Object[] ticket, boolean newTicket) { - assertEquals(id, ticket[0]); - assertTrue(ticket[1] instanceof Integer); // time created - // time changed - if (newTicket) { - assertEquals(ticket[1], ticket[2]); - } else { - assertTrue((Integer) ticket[2] >= (Integer) ticket[1]); - } - Map values = (Map) ticket[3]; - for (String attribute : attributes.keySet()) { - assertEquals(attributes.get(attribute), values.get(attribute)); - } - } - - public void testGetTicket() throws XmlRpcException, IOException { - Map<String, Object> attributes = new Hashtable<String, Object>(); - attributes.put("type", "task"); - attributes.put("status", "closed"); - int id = createTicket("summary", "description", attributes); - - attributes.put("summary", "summary"); - attributes.put("description", "description"); - - Object[] ticket = (Object[]) call("ticket.get", id); - assertTicketHasAttributes(attributes, id, ticket); - } - - public void testGetTicketNonExistant() throws XmlRpcException, IOException { - try { - call("ticket.delete", Integer.MAX_VALUE); - } catch (Exception e) { - // ignore - } - - try { - List ticket = (List) call("ticket.get", Integer.MAX_VALUE); - fail("Expected XmlRpcException, got ticket instead: " + ticket); - } catch (XmlRpcException e) { - // ignore - } - } - - public void testGetTicketUmlaute() throws XmlRpcException, IOException { - Map<String, Object> attributes = new Hashtable<String, Object>(); - int id = createTicket("summaryäÖÜ", "ßßß", attributes); - - attributes.put("summary", "summaryäÖÜ"); - attributes.put("description", "ßßß"); - - Object[] ticket = (Object[]) call("ticket.get", id); - assertTicketHasAttributes(attributes, id, ticket); - } - - public void testUpdateTicket() throws XmlRpcException, IOException { - int id = createTicket("summary", "description", new Hashtable()); - - Map<String, Object> attributes = new Hashtable<String, Object>(); - attributes.put("summary", "changed"); - call("ticket.update", id, "my comment", attributes); - - attributes.put("description", "description"); - - Object[] ticket = (Object[]) call("ticket.get", id); - Map values = (Map) ticket[3]; - for (String attribute : attributes.keySet()) { - assertEquals(attributes.get(attribute), values.get(attribute)); - } - } - - public void testTicketCustomFields() throws XmlRpcException, IOException { - Map<String, Object> attributes = new Hashtable<String, Object>(); - attributes.put("custom_text_field", "myvalue"); - int id = createTicket("summary", "description", attributes); - - // check for default values - attributes.put("custom_checkbox_field", "1"); - attributes.put("custom_select_field", "two"); - attributes.put("custom_radio_field", "baz"); - attributes.put("custom_textarea_field", "default text"); - - Object[] ticket = (Object[]) call("ticket.get", id); - assertTicketHasAttributes(attributes, id, ticket); - - attributes.put("custom_text_field", "myvalue2"); - attributes.put("custom_checkbox_field", "0"); - attributes.put("custom_select_field", "one"); - attributes.put("custom_radio_field", "foo"); - attributes.put("custom_textarea_field", "mytext"); - - call("ticket.update", id, "my comment", attributes); - - ticket = (Object[]) call("ticket.get", id); - assertTicketHasAttributes(attributes, id, ticket, false); - } - - public void testGetChangeLog() throws XmlRpcException, IOException { - int id = createTicket("summary", "description", new Hashtable()); - - Map<String, Object> attributes = new Hashtable<String, Object>(); - attributes.put("summary", "changed"); - call("ticket.update", id, "my comment", attributes); - - Object[] log = (Object[]) call("ticket.changeLog", id, 0); - Object[] entry = (Object[]) log[0]; - assertTrue(entry[0] instanceof Integer); // time - assertEquals(username, entry[1]); // author - assertEquals("summary", entry[2]); // field - assertEquals("summary", entry[3]); // old value - assertEquals("changed", entry[4]); // new value - } - - public void testMultiGetTicket() throws XmlRpcException, IOException { - int id1 = createTicket("summary1", "description1", new Hashtable()); - int id2 = createTicket("summary2", "description2", new Hashtable()); - - List<Map> calls = new ArrayList<Map>(); - calls.add(createMultiCall("ticket.get", id1)); - calls.add(createMultiCall("ticket.get", id2)); - Object[] ret = (Object[]) call("system.multicall", calls); - - Object[] ticket = (Object[]) ((Object[]) ret[0])[0]; - Map<String, Object> attributes = new Hashtable<String, Object>(); - attributes.put("summary", "summary1"); - attributes.put("description", "description1"); - assertTicketHasAttributes(attributes, id1, ticket); - - ticket = (Object[]) ((Object[]) ret[1])[0]; - attributes.clear(); - attributes.put("summary", "summary2"); - attributes.put("description", "description2"); - assertTicketHasAttributes(attributes, id2, ticket); - } - - public void testAttachment() throws XmlRpcException, IOException { - int id = createTicket("summary", "description", new Hashtable()); - - String filename = (String) call("ticket.putAttachment", id, "attach.txt", "description", "data".getBytes(), true); - // the returned filename may differ, since another ticket may have an - // attachment named "attach.txt" - // assertEquals("attach.txt", filename); - - Object[] ret = (Object[]) call("ticket.listAttachments", id); - assertEquals(1, ret.length); - Object[] attachment = (Object[]) ret[0]; - assertEquals("attach.txt", attachment[0]); - assertEquals("description", attachment[1]); - assertEquals(4, attachment[2]); - // date - assertEquals(username, attachment[4]); - - byte[] bytes = (byte[]) call("ticket.getAttachment", id, filename); - String data = new String(bytes); - assertEquals("data", data); - - // test override - - String filename2 = (String) call("ticket.putAttachment", id, filename, "newdescription", "newdata".getBytes(), true); - assertEquals(filename, filename2); - ret = (Object[]) call("ticket.listAttachments", id); - assertEquals(1, ret.length); - attachment = (Object[]) ret[0]; - assertEquals("attach.txt", attachment[0]); - assertEquals("newdescription", attachment[1]); - assertEquals(7, attachment[2]); - // date - assertEquals(username, attachment[4]); - bytes = (byte[]) call("ticket.getAttachment", id, filename); - data = new String(bytes); - assertEquals("newdata", data); - - - String filename3 = (String) call("ticket.putAttachment", id, "attach.txt", "description", "data".getBytes(), false); - assertFalse("attach.txt".equals(filename3)); - ret = (Object[]) call("ticket.listAttachments", id); - assertEquals(2, ret.length); - } - - public void testDeleteAttachment() throws XmlRpcException, IOException { - int id = createTicket("summary", "description", new Hashtable()); - - String filename = (String) call("ticket.putAttachment", id, "attach.txt", "description", "data".getBytes(), true); - - Object[] ret = (Object[]) call("ticket.listAttachments", id); - assertEquals(1, ret.length); - - call("ticket.deleteAttachment", id, filename); - - ret = (Object[]) call("ticket.listAttachments", id); - assertEquals(0, ret.length); - } - - public void testDuplicateAttachment() throws XmlRpcException, IOException { - int id1 = createTicket("summary", "description", new Hashtable()); - int id2 = createTicket("summary", "description", new Hashtable()); - - String filename1 = (String) call("ticket.putAttachment", id1, "attach.txt", "description", "data".getBytes(), true); - String filename2 = (String) call("ticket.putAttachment", id2, "attach.txt", "description", "data2".getBytes(), true); - assertEquals("attach.txt", filename1); - assertEquals(filename1, filename2); - - byte[] bytes = (byte[]) call("ticket.getAttachment", id1, "attach.txt"); - String data = new String(bytes); - assertEquals("data", data); - - bytes = (byte[]) call("ticket.getAttachment", id2, "attach.txt"); - data = new String(bytes); - assertEquals("data2", data); - } - - public void testQuery() throws XmlRpcException, IOException { - Object[] ret = (Object[]) call("ticket.query", "summary~=foo|bar|baz"); - for (Object id : ret) { - call("ticket.delete", (Integer) id); - } - - int id1 = createTicket("foobarsum1", "description", new Hashtable()); - int id2 = createTicket("foobaz sum2", "description", new Hashtable()); - int id3 = createTicket("foobarbaz3", "foobarbaz description3", new Hashtable()); - - ret = (Object[]) call("ticket.query", "summary=foobarsum1|foobaz sum2"); - assertEquals(2, ret.length); - assertEquals(id1, ret[0]); - assertEquals(id2, ret[1]); - - // the first criterium is ignored - ret = (Object[]) call("ticket.query", "summary~=foobarsum1&summary~=foobaz sum2"); - assertEquals(1, ret.length); - assertEquals(id2, ret[0]); - - ret = (Object[]) call("ticket.query", "summary~=bar|baz"); - assertEquals(3, ret.length); - - ret = (Object[]) call("ticket.query", "description~=foobarbaz description3"); - assertEquals(1, ret.length); - assertEquals(id3, ret[0]); - } - - public void testQueryAll() throws XmlRpcException, IOException { - int id = createTicket("foo", "description", new Hashtable()); - - Object[] ret = (Object[]) call("ticket.query", "order=id"); - assertTrue(ret.length > 0); - assertHasValue(ret, id); - } - - public void testPriorities() throws XmlRpcException, IOException { - internalTestCrud("ticket.priority"); - } - - public void testSeverities() throws XmlRpcException, IOException { - internalTestCrud("ticket.severity"); - } - - public void testType() throws XmlRpcException, IOException { - internalTestCrud("ticket.type"); - } - - public void testStatus() throws XmlRpcException, IOException { - internalTestCrud("ticket.status"); - } - - public void testResolutions() throws XmlRpcException, IOException { - internalTestCrud("ticket.resolution"); - } - - public void testVersions() throws XmlRpcException, IOException { - internalTestComponent("ticket.version", "time", Integer.class, "description", String.class); - } - - public void testComponents() throws XmlRpcException, IOException { - internalTestComponent("ticket.component", "owner", String.class, "description", String.class); - } - - public void testMilestones() throws XmlRpcException, IOException { - internalTestComponent("ticket.milestone", "due", Integer.class, "completed", Integer.class, "description", - String.class); - } - -} diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/support/TestFixture.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/support/TestFixture.java deleted file mode 100644 index 1b6872b35..000000000 --- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/support/TestFixture.java +++ /dev/null @@ -1,97 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.trac.tests.support; - -import org.eclipse.mylar.context.tests.support.MylarTestUtils; -import org.eclipse.mylar.context.tests.support.MylarTestUtils.Credentials; -import org.eclipse.mylar.context.tests.support.MylarTestUtils.PrivilegeLevel; -import org.eclipse.mylar.trac.tests.Constants; - -/** - * Initializes Trac repositories to a defined state. This is done once per test - * run, since cleaning and initializing the repository for each test method - * would take too long. - * - * @author Steffen Pingel - */ -public class TestFixture { - - public static XmlRpcServer.TestData data010; - - /** - * Adds the existing repository content to the test data of - * <code>server</code>. - */ - private static void initializeTestData(XmlRpcServer server) throws Exception { - server.ticketMilestone("milestone1").itemCreated(); - server.ticketMilestone("milestone2").itemCreated(); - server.ticketMilestone("milestone3").itemCreated(); - server.ticketMilestone("milestone4").itemCreated(); - - server.ticketVersion("1.0").itemCreated(); - server.ticketVersion("2.0").itemCreated(); - - server.ticket(1).itemCreated(); - server.ticket(2).itemCreated(); - server.ticket(3).itemCreated(); - server.ticket(4).itemCreated(); - server.ticket(5).itemCreated(); - server.ticket(6).itemCreated(); - server.ticket(7).itemCreated(); - } - -// private static void initializeRepository(XmlRpcServer server) throws Exception { -// server.ticketVersion(null).deleteAll(); -// server.ticketVersion("1.0").create(0, ""); -// server.ticketVersion("2.0").create(0, ""); -// -// server.ticketMilestone(null).deleteAll(); -// server.ticketMilestone("milestone1").create(); -// server.ticketMilestone("milestone2").create(); -// server.ticketMilestone("milestone3").create(); -// server.ticketMilestone("milestone4").create(); -// -// server.ticket().deleteAll(); -// Ticket ticket = server.ticket().create("summary1", "description1"); -// ticket.update("comment", "milestone", "milestone1"); -// ticket = server.ticket().create("summary2", "description2"); -// ticket.update("comment", "milestone", "milestone2"); -// ticket = server.ticket().create("summary3", "description3"); -// ticket.update("comment", "milestone", "milestone2"); -// ticket = server.ticket().create("summary4", "description4"); -// -// ticket = server.ticket().create("attachment test", ""); -// // create attachment named attachment.txt that contains the text "Mylar" -// ticket = server.ticket().create("test html entities: äöü", "ÄÖÜ\n\nmulti\nline\n\n'''bold'''\n"); -// ticket = server.ticket().create("offline handler test", ""); -// } - - public static XmlRpcServer.TestData init010() throws Exception { - if (data010 == null) { - Credentials credentials = MylarTestUtils.readCredentials(PrivilegeLevel.USER); - XmlRpcServer server = new XmlRpcServer(Constants.TEST_TRAC_010_URL, credentials.username, - credentials.password); - - initializeTestData(server); - data010 = server.getData(); - } - return data010; - } - - public static void cleanup010() throws Exception { - if (data010 != null) { - // data010.cleanup(); - data010 = null; - } - } - -} diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/support/XmlRpcServer.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/support/XmlRpcServer.java deleted file mode 100644 index 4e8a4f6cc..000000000 --- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/support/XmlRpcServer.java +++ /dev/null @@ -1,366 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.trac.tests.support; - -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Hashtable; -import java.util.List; -import java.util.Map; -import java.util.Vector; - -import org.apache.xmlrpc.XmlRpcException; -import org.apache.xmlrpc.client.XmlRpcClient; -import org.eclipse.mylar.internal.trac.core.TracXmlRpcClient; -import org.eclipse.mylar.internal.trac.core.ITracClient.Version; - -/** - * @author Steffen Pingel - */ -public class XmlRpcServer { - - public abstract class AbstractTracItem { - - public abstract void delete() throws Exception; - - void itemCreated() { - data.items.add(this); - } - - void itemDeleted() { - data.items.remove(this); - } - - } - - /** - * Represents a Trac type with multiple attributes such as a milestone. - */ - public class ModelEnum extends AbstractTracItem { - - private String[] attributes; - - private String id; - - private String module; - - public ModelEnum(String module, String id, String... attributes) { - this.module = module; - this.id = id; - this.attributes = attributes; - } - - public ModelEnum create(Object... params) throws Exception { - call(module + ".create", id, toMap(params)); - itemCreated(); - return this; - } - - public void delete() throws Exception { - call(module + ".delete", id); - itemDeleted(); - } - - public void deleteAll() throws Exception { - String[] ids = getAll(); - for (String id : ids) { - call(module + ".delete", id); - } - } - - public ModelEnum deleteAndCreate(Object... params) throws Exception { - if (Arrays.asList(getAll()).contains(id)) { - delete(); - } - - return create(params); - } - - public Object[] get() throws Exception { - Hashtable values = (Hashtable) call(module + ".get", id); - Object[] result = new Object[values.size()]; - for (int i = 0; i < result.length && i < attributes.length; i++) { - result[i] = values.get(attributes[i]); - } - return result; - } - - @SuppressWarnings("unchecked") - public String[] getAll() throws Exception { - return Arrays.asList((Object[]) call(module + ".getAll")).toArray(new String[0]); - } - - private Hashtable<String, Object> toMap(Object... params) { - Hashtable<String, Object> attrs = new Hashtable<String, Object>(); - for (int i = 0; i < attributes.length && i < params.length; i++) { - attrs.put((String) attributes[i], params[i]); - } - return attrs; - } - - public ModelEnum update(Object... params) throws Exception { - call(module + ".update", id, toMap(params)); - return this; - } - - } - - /** - * Records changes to the repository. - */ - public class TestData { - - // all created items - List<AbstractTracItem> items = new ArrayList<AbstractTracItem>(); - - // all created tickets - public List<Ticket> tickets = new ArrayList<Ticket>(); - - public int attachmentTicketId = 5; - - public int htmlEntitiesTicketId = 6; - - public int offlineHandlerTicketId = 7; - - /** - * Undo all changes. - */ - public void cleanup() throws Exception { - while (!items.isEmpty()) { - items.get(0).delete(); - } - } - - } - - /** - * Represents a Trac ticket. - */ - public class Ticket extends AbstractTracItem { - - private Integer id; - - public Ticket(Integer id) { - this.id = id; - } - - public Ticket create(String summary, String description) throws Exception { - this.id = (Integer) call("ticket.create", summary, description, new Hashtable()); - if (id == null) { - throw new RuntimeException("Could not create ticket: " + summary); - } - itemCreated(); - return this; - } - - public void delete() throws Exception { - call("ticket.delete", id); - itemDeleted(); - } - - public void deleteAll() throws Exception { - Integer[] ids = getAll(); - for (Integer id : ids) { - call("ticket.delete", id); - } - } - - public Object getValue(String key) throws Exception { - return getValues().get(key); - } - - public Map getValues() throws Exception { - return (Map) ((Object[]) call("ticket.get", id))[3]; - } - - @SuppressWarnings("unchecked") - public Integer[] getAll() throws Exception { - return Arrays.asList((Object[]) call("ticket.query", "order=id")).toArray(new Integer[0]); - } - - public int getId() { - return id; - } - - @Override - protected void itemCreated() { - super.itemCreated(); - data.tickets.add(this); - } - - @Override - protected void itemDeleted() { - super.itemDeleted(); - data.tickets.remove(this); - } - - public Ticket update(String comment, String key, String value) throws Exception { - Hashtable<String, Object> attrs = new Hashtable<String, Object>(); - attrs.put(key, value); - call("ticket.update", id, comment, attrs); - return this; - } - - } - - /** - * Represents a Trac type that has a single attribute such as a priority. - */ - public class TicketEnum extends AbstractTracItem { - - private String id; - - private String module; - - public TicketEnum(String module, String id) { - this.module = module; - this.id = id; - } - - public TicketEnum create(String param) throws Exception { - call(module + ".create", id, param); - itemCreated(); - return this; - } - - public void delete() throws Exception { - call(module + ".delete", id); - itemDeleted(); - } - - public void deleteAll() throws Exception { - String[] ids = getAll(); - for (String id : ids) { - call(module + ".delete", id); - } - } - - public TicketEnum deleteAndCreate(String param) throws Exception { - if (Arrays.asList(getAll()).contains(id)) { - delete(); - } - - return create(param); - } - - public String get() throws Exception { - return (String) call(module + ".get", id); - } - - @SuppressWarnings("unchecked") - public String[] getAll() throws Exception { - return Arrays.asList((Object[]) call(module + ".getAll")).toArray(new String[0]); - } - - public TicketEnum update(String param) throws Exception { - call(module + ".update", id, param); - return this; - } - - } - - private XmlRpcClient client; - - private TestData data; - - private String password; - - private TracXmlRpcClient repository; - - private String url; - - private String username; - - public XmlRpcServer(String url, String username, String password) throws Exception { - this.url = url; - this.username = username; - this.password = password; - - this.data = new TestData(); - - this.repository = new TracXmlRpcClient(new URL(url), Version.XML_RPC, username, password); - this.client = repository.getClient(); - } - - private Object call(String method, Object... parameters) throws XmlRpcException, IOException { - Vector<Object> params = new Vector<Object>(parameters.length); - for (Object parameter : parameters) { - params.add(parameter); - } - - Object result = client.execute(method, params); - if (result instanceof XmlRpcException) { - throw (XmlRpcException) result; - } - return result; - } - - public TestData getData() { - return data; - } - - public String getPassword() { - return password; - } - - public TracXmlRpcClient getRepository() throws MalformedURLException { - return repository; - } - - public String getUrl() { - return url; - } - - public String getUsername() { - return username; - } - - public Ticket ticket() throws Exception { - return new Ticket(null); - } - - public Ticket ticket(int id) throws Exception { - return new Ticket(id); - } - - public ModelEnum ticketComponent(String id) throws Exception { - return new ModelEnum("ticket.component", id, "owner", "description"); - } - - public ModelEnum ticketMilestone(String id) throws Exception { - return new ModelEnum("ticket.milestone", id, "due", "completed", "description"); - } - - public TicketEnum ticketPriority(String id) throws Exception { - return new TicketEnum("ticket.priority", id); - } - - public TicketEnum ticketSeverity(String id) throws Exception { - return new TicketEnum("ticket.severity", id); - } - - public TicketEnum ticketStatus(String id) throws Exception { - return new TicketEnum("ticket.status", id); - } - - public TicketEnum ticketType(String id) throws Exception { - return new TicketEnum("ticket.type", id); - } - - public ModelEnum ticketVersion(String id) throws Exception { - return new ModelEnum("ticket.version", id, "time", "description"); - } - -} diff --git a/org.eclipse.mylyn.trac.ui/.classpath b/org.eclipse.mylyn.trac.ui/.classpath deleted file mode 100644 index 751c8f2e5..000000000 --- a/org.eclipse.mylyn.trac.ui/.classpath +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="src" path="src"/> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> - <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="output" path="bin"/> -</classpath> diff --git a/org.eclipse.mylyn.trac.ui/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.mylyn.trac.ui/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 8cf54a7c4..000000000 --- a/org.eclipse.mylyn.trac.ui/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,256 +0,0 @@ -#Thu Feb 09 16:45:35 PST 2006 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.5 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.5 -org.eclipse.jdt.core.formatter.align_type_members_on_columns=false -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_assignment=0 -org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 -org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 -org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 -org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 -org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_after_package=1 -org.eclipse.jdt.core.formatter.blank_lines_before_field=1 -org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 -org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 -org.eclipse.jdt.core.formatter.blank_lines_before_method=1 -org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 -org.eclipse.jdt.core.formatter.blank_lines_before_package=0 -org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 -org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.comment.clear_blank_lines=false -org.eclipse.jdt.core.formatter.comment.format_comments=true -org.eclipse.jdt.core.formatter.comment.format_header=false -org.eclipse.jdt.core.formatter.comment.format_html=true -org.eclipse.jdt.core.formatter.comment.format_source_code=true -org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true -org.eclipse.jdt.core.formatter.comment.indent_root_tags=true -org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert -org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert -org.eclipse.jdt.core.formatter.comment.line_length=80 -org.eclipse.jdt.core.formatter.compact_else_if=true -org.eclipse.jdt.core.formatter.continuation_indentation=2 -org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 -org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true -org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_empty_lines=false -org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true -org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false -org.eclipse.jdt.core.formatter.indentation.size=4 -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert -org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false -org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false -org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false -org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false -org.eclipse.jdt.core.formatter.lineSplit=120 -org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 -org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 -org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true -org.eclipse.jdt.core.formatter.tabulation.char=tab -org.eclipse.jdt.core.formatter.tabulation.size=4 -org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false diff --git a/org.eclipse.mylyn.trac.ui/META-INF/MANIFEST.MF b/org.eclipse.mylyn.trac.ui/META-INF/MANIFEST.MF deleted file mode 100644 index 736f3f35f..000000000 --- a/org.eclipse.mylyn.trac.ui/META-INF/MANIFEST.MF +++ /dev/null @@ -1,20 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Mylar Trac UI Plug-in -Bundle-SymbolicName: org.eclipse.mylar.trac.ui;singleton:=true -Bundle-Version: 0.7.0 -Bundle-Activator: org.eclipse.mylar.internal.trac.ui.TracUiPlugin -Bundle-Vendor: Eclipse.org -Bundle-Localization: plugin -Require-Bundle: org.eclipse.ui, - org.eclipse.ui.forms, - org.eclipse.core.runtime, - org.eclipse.mylar.context.core, - org.eclipse.mylar.tasks.ui, - org.eclipse.mylar.tasks.core, - org.eclipse.search, - org.eclipse.mylar.trac.core -Eclipse-LazyStart: true -Export-Package: org.eclipse.mylar.internal.trac.ui, - org.eclipse.mylar.internal.trac.ui.editor, - org.eclipse.mylar.internal.trac.ui.wizard diff --git a/org.eclipse.mylyn.trac.ui/plugin.xml b/org.eclipse.mylyn.trac.ui/plugin.xml deleted file mode 100644 index fbbda527a..000000000 --- a/org.eclipse.mylyn.trac.ui/plugin.xml +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<?eclipse version="3.2"?> -<plugin> - <extension - id="org.eclipse.mylar.trac.repository" - name="Trac Repository" - point="org.eclipse.mylar.tasks.ui.repositories"> - <connectorCore - class="org.eclipse.mylar.internal.trac.core.TracRepositoryConnector" - id="org.eclipse.mylar.trac.tasklist.repositories" - name="Trac Repository Connector" - type="trac"/> - <connectorUi - brandingIcon="icons/eview16/trac-icon.gif" - class="org.eclipse.mylar.internal.trac.ui.TracRepositoryUi" - id="Trac Repository UI" - overlayIcon="icons/eview16/overlay-trac.gif"/> - <externalizer - class="org.eclipse.mylar.internal.trac.ui.TracTaskExternalizer" - id="org.eclipse.mylar.trac.tasklist.externalizer" - name="Trac Externalizer"/> - </extension> - <extension - point="org.eclipse.mylar.tasks.ui.templates"> - <repository - addAutomatically="false" - anonymous="true" - label="Edgewall" - repositoryKind="trac" - urlRepository="http://trac.edgewall.org" - version="TRAC_0_9"/> - </extension> - <extension - point="org.eclipse.mylar.tasks.ui.editors"> - <editorFactory class="org.eclipse.mylar.internal.trac.ui.editor.TracTaskEditorFactory"/> - </extension> - -</plugin> diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracRepositoryUi.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracRepositoryUi.java deleted file mode 100644 index b484613b1..000000000 --- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracRepositoryUi.java +++ /dev/null @@ -1,70 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.ui; - -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.IWizard; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.mylar.internal.tasks.ui.wizards.AbstractRepositorySettingsPage; -import org.eclipse.mylar.internal.tasks.ui.wizards.NewWebTaskWizard; -import org.eclipse.mylar.internal.trac.core.ITracClient; -import org.eclipse.mylar.internal.trac.core.TracCorePlugin; -import org.eclipse.mylar.internal.trac.core.TracRepositoryQuery; -import org.eclipse.mylar.internal.trac.ui.wizard.EditTracQueryWizard; -import org.eclipse.mylar.internal.trac.ui.wizard.NewTracQueryWizard; -import org.eclipse.mylar.internal.trac.ui.wizard.TracCustomQueryPage; -import org.eclipse.mylar.internal.trac.ui.wizard.TracRepositorySettingsPage; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.AbstractRepositoryConnectorUi; - -/** - * @author Mik Kersten - * @author Steffen Pingel - */ -public class TracRepositoryUi extends AbstractRepositoryConnectorUi { - - @Override - public AbstractRepositorySettingsPage getSettingsPage() { - return new TracRepositorySettingsPage(this); - } - - @Override - public boolean hasRichEditor() { - return true; - } - - @Override - public WizardPage getSearchPage(TaskRepository repository, IStructuredSelection selection) { - return new TracCustomQueryPage(repository); - } - - @Override - public boolean hasSearchPage() { - return true; - } - - @Override - public IWizard getNewTaskWizard(TaskRepository taskRepository, IStructuredSelection selection) { - return new NewWebTaskWizard(taskRepository, taskRepository.getUrl() + ITracClient.NEW_TICKET_URL); - } - - public IWizard getQueryWizard(TaskRepository repository, AbstractRepositoryQuery query) { - if (query instanceof TracRepositoryQuery) { - return new EditTracQueryWizard(repository, query); - } else { - return new NewTracQueryWizard(repository); - } - } - - @Override - public String getRepositoryType() { - return TracCorePlugin.REPOSITORY_KIND; - } -} diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracTaskExternalizer.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracTaskExternalizer.java deleted file mode 100644 index b0bf54765..000000000 --- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracTaskExternalizer.java +++ /dev/null @@ -1,229 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.ui; - -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.OfflineTaskManager; -import org.eclipse.mylar.internal.trac.core.TracQueryHit; -import org.eclipse.mylar.internal.trac.core.TracRepositoryQuery; -import org.eclipse.mylar.internal.trac.core.TracTask; -import org.eclipse.mylar.tasks.core.AbstractQueryHit; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.AbstractTaskContainer; -import org.eclipse.mylar.tasks.core.DelegatingTaskExternalizer; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.ITaskListExternalizer; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.mylar.tasks.core.TaskExternalizationException; -import org.eclipse.mylar.tasks.core.TaskList; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask.RepositoryTaskSyncState; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -/** - * @author Steffen Pingel - */ -public class TracTaskExternalizer extends DelegatingTaskExternalizer { - - private static final String KEY_TRAC = "Trac"; - - private static final String KEY_TRAC_CATEGORY = KEY_TRAC + KEY_CATEGORY; - - private static final String KEY_TRAC_TASK = KEY_TRAC + KEY_TASK; - - private static final String KEY_TRAC_QUERY_HIT = KEY_TRAC + KEY_QUERY_HIT; - - private static final String KEY_TRAC_QUERY = KEY_TRAC + KEY_QUERY; - - // category related methods - - @Override - public boolean canReadCategory(Node node) { - return node.getNodeName().equals(KEY_TRAC_CATEGORY); - } - - @Override - public String getCategoryTagName() { - return KEY_TRAC_CATEGORY; - } - - // task related methods - - @Override - public boolean canCreateElementFor(ITask task) { - return task instanceof TracTask; - } - - @Override - public String getTaskTagName() { - return KEY_TRAC_TASK; - } - - @Override - public ITask readTask(Node node, TaskList taskList, AbstractTaskContainer category, ITask parent) - throws TaskExternalizationException { - - Element element = (Element) node; - String handle; - String label; - if (element.hasAttribute(KEY_HANDLE)) { - handle = element.getAttribute(KEY_HANDLE); - } else { - throw new TaskExternalizationException("Handle not stored for task"); - } - if (element.hasAttribute(KEY_LABEL)) { - label = element.getAttribute(KEY_LABEL); - } else { - throw new TaskExternalizationException("Description not stored for task"); - } - - TracTask task = new TracTask(handle, label, false); - readTaskInfo(task, taskList, element, parent, category); - return task; - } - - // TODO move to DelegatingTaskExternalizer - @Override - public void readTaskData(AbstractRepositoryTask task) { - RepositoryTaskData data = OfflineTaskManager.findBug(task.getRepositoryUrl(), AbstractRepositoryTask - .getTaskId(task.getHandleIdentifier())); - task.setTaskData((RepositoryTaskData) data); - - if (data != null && data.hasLocalChanges()) { - task.setSyncState(RepositoryTaskSyncState.OUTGOING); - } - } - - // query related methods - - @Override - public boolean canCreateElementFor(AbstractQueryHit queryHit) { - return queryHit instanceof TracQueryHit; - } - - @Override - public boolean canCreateElementFor(AbstractRepositoryQuery category) { - return category instanceof TracRepositoryQuery; - } - - @Override - public boolean canReadQuery(Node node) { - return node.getNodeName().equals(KEY_TRAC_QUERY); - } - - @Override - public boolean canReadQueryHit(Node node) { - return node.getNodeName().equals(KEY_TRAC_QUERY_HIT); - } - - @Override - public Element createQueryElement(AbstractRepositoryQuery query, Document doc, Element parent) { - String queryTagName = getQueryTagNameForElement(query); - Element node = doc.createElement(queryTagName); - - node.setAttribute(KEY_LABEL, query.getDescription()); - node.setAttribute(KEY_REPOSITORY_URL, query.getRepositoryUrl()); - node.setAttribute(KEY_QUERY, query.getUrl()); - - for (AbstractQueryHit hit : query.getHits()) { - try { - Element element = null; - for (ITaskListExternalizer externalizer : super.getDelegateExternalizers()) { - if (externalizer.canCreateElementFor(hit)) - element = externalizer.createQueryHitElement(hit, doc, node); - } - if (element == null) - createQueryHitElement(hit, doc, node); - } catch (Exception e) { - MylarStatusHandler.log(e, e.getMessage()); - } - } - parent.appendChild(node); - return node; - } - - @Override - public String getQueryHitTagName() { - return KEY_TRAC_QUERY_HIT; - } - - @Override - public String getQueryTagNameForElement(AbstractRepositoryQuery query) { - if (query instanceof TracRepositoryQuery) { - return KEY_TRAC_QUERY; - } - return ""; - } - - @Override - public AbstractRepositoryQuery readQuery(Node node, TaskList taskList) throws TaskExternalizationException { - Element element = (Element) node; - String repositoryUrl; - String queryUrl; - String label; - if (element.hasAttribute(KEY_REPOSITORY_URL)) { - repositoryUrl = element.getAttribute(KEY_REPOSITORY_URL); - } else { - throw new TaskExternalizationException("Repository URL not stored for task"); - } - if (element.hasAttribute(KEY_QUERY)) { - queryUrl = element.getAttribute(KEY_QUERY); - } else { - throw new TaskExternalizationException("Query URL not stored for task"); - } - if (element.hasAttribute(KEY_LABEL)) { - label = element.getAttribute(KEY_LABEL); - } else { - throw new TaskExternalizationException("Description not stored for task"); - } - - TracRepositoryQuery query = new TracRepositoryQuery(repositoryUrl, queryUrl, label, taskList); - - NodeList list = node.getChildNodes(); - for (int i = 0; i < list.getLength(); i++) { - Node child = list.item(i); - try { - readQueryHit(child, taskList, query); - } catch (TaskExternalizationException e) { - MylarStatusHandler.log(e, e.getMessage()); - } - } - return query; - } - - @Override - public void readQueryHit(Node node, TaskList taskList, AbstractRepositoryQuery query) - throws TaskExternalizationException { - Element element = (Element) node; - - String handle; - if (element.hasAttribute(KEY_HANDLE)) { - handle = element.getAttribute(KEY_HANDLE); - } else { - throw new TaskExternalizationException("Handle not stored for bug report"); - } - - TracQueryHit hit = new TracQueryHit(taskList, handle); - // TODO move to DelegationTaskExternalizer - if (element.hasAttribute(KEY_COMPLETE) - && element.getAttribute(KEY_COMPLETE).compareTo(VAL_TRUE) == 0) { - hit.setCompleted(true); - } else { - hit.setCompleted(false); - } - readQueryHitInfo(hit, taskList, query, element); - } - -} diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracUiPlugin.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracUiPlugin.java deleted file mode 100644 index 6dae3bf05..000000000 --- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracUiPlugin.java +++ /dev/null @@ -1,68 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.ui; - -import org.eclipse.core.runtime.IStatus; -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.trac.core.TracCorePlugin; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.plugin.AbstractUIPlugin; -import org.osgi.framework.BundleContext; - -/** - * @author Mik Kersten - * @author Steffen Pingel - */ -public class TracUiPlugin extends AbstractUIPlugin { - - public static final String PLUGIN_ID = "org.eclipse.mylar.trac.ui"; - - public final static String TITLE_MESSAGE_DIALOG = "Mylar Trac Client"; - - private static TracUiPlugin plugin; - - public TracUiPlugin() { - plugin = this; - } - - public void start(BundleContext context) throws Exception { - super.start(context); - - TasksUiPlugin.getRepositoryManager().addListener(TracCorePlugin.getDefault().getConnector().getClientManager()); - } - - public void stop(BundleContext context) throws Exception { - TasksUiPlugin.getRepositoryManager().removeListener(TracCorePlugin.getDefault().getConnector().getClientManager()); - - plugin = null; - super.stop(context); - } - - public static TracUiPlugin getDefault() { - return plugin; - } - - public static void handleTracException(Throwable e) { - handleTracException(TracCorePlugin.toStatus(e)); - } - - public static void handleTracException(IStatus status) { - if (status.getCode() == IStatus.ERROR) { - MylarStatusHandler.log(status); - ErrorDialog.openError(null, TITLE_MESSAGE_DIALOG, null, status); - } else if (status.getCode() == IStatus.INFO) { - ErrorDialog.openError(null, TITLE_MESSAGE_DIALOG, null, status); - } - } - -} diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditor.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditor.java deleted file mode 100644 index 99a5ed90a..000000000 --- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditor.java +++ /dev/null @@ -1,219 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.ui.editor; - -import java.util.List; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.IJobChangeEvent; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.core.runtime.jobs.JobChangeAdapter; -import org.eclipse.mylar.internal.tasks.ui.editors.AbstractBugEditorInput; -import org.eclipse.mylar.internal.tasks.ui.editors.AbstractRepositoryTaskEditor; -import org.eclipse.mylar.internal.tasks.ui.editors.ExistingBugEditorInput; -import org.eclipse.mylar.internal.tasks.ui.editors.RepositoryTaskOutlineNode; -import org.eclipse.mylar.internal.trac.core.ITracClient; -import org.eclipse.mylar.internal.trac.core.InvalidTicketException; -import org.eclipse.mylar.internal.trac.core.TracCorePlugin; -import org.eclipse.mylar.internal.trac.core.TracRepositoryConnector; -import org.eclipse.mylar.internal.trac.core.model.TracTicket; -import org.eclipse.mylar.internal.trac.core.model.TracTicket.Key; -import org.eclipse.mylar.internal.trac.ui.TracUiPlugin; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.RepositoryOperation; -import org.eclipse.mylar.tasks.core.RepositoryTaskAttribute; -import org.eclipse.mylar.tasks.core.RepositoryTaskData; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorSite; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.forms.editor.FormEditor; - -/** - * @author Steffen Pingel - */ -public class TracTaskEditor extends AbstractRepositoryTaskEditor { - - private static final String SUBMIT_JOB_LABEL = "Submitting to Trac repository"; - - private TracRepositoryConnector connector; - - public TracTaskEditor(FormEditor editor) { - super(editor); - } - - @Override - protected void addAttachContextButton(Composite buttonComposite, ITask task) { - // disabled, see bug 155151 - } - - @Override - protected void addSelfToCC(Composite composite) { - // disabled, see bug 155151 - } - - @Override - protected void createCustomAttributeLayout(Composite composite) { - } - - @Override - public RepositoryTaskData getRepositoryTaskData() { - return editorInput.getRepositoryTaskData(); - } - - @Override - protected String getTitleString() { - // TODO Auto-generated method stub - return null; - } - - public void init(IEditorSite site, IEditorInput input) { - if (!(input instanceof ExistingBugEditorInput)) - return; - - editorInput = (AbstractBugEditorInput) input; - repository = editorInput.getRepository(); - connector = (TracRepositoryConnector) TasksUiPlugin.getRepositoryManager().getRepositoryConnector( - repository.getKind()); - - setSite(site); - setInput(input); - - taskOutlineModel = RepositoryTaskOutlineNode.parseBugReport(editorInput.getRepositoryTaskData()); - - isDirty = false; - updateEditorTitle(); - } - - @Override - protected void submitBug() { - if (isDirty()) { - this.doSave(new NullProgressMonitor()); - } - updateBug(); - submitButton.setEnabled(false); - showBusy(true); - - final TracTicket ticket; - try { - ticket = getTracTicket(); - } catch (InvalidTicketException e) { - TracUiPlugin.handleTracException(e); - return; - } - final String comment = getNewCommentText(); - final AbstractRepositoryTask task = (AbstractRepositoryTask) TasksUiPlugin.getTaskListManager().getTaskList() - .getTask(AbstractRepositoryTask.getHandle(repository.getUrl(), getRepositoryTaskData().getId())); - final boolean attachContext = false; // getAttachContext(); - - JobChangeAdapter listener = new JobChangeAdapter() { - public void done(final IJobChangeEvent event) { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - if (event.getJob().getResult().isOK()) { - if (attachContext) { - // TODO should be done as part of job - try { - connector.attachContext(repository, (AbstractRepositoryTask) task, "", - TasksUiPlugin.getDefault().getProxySettings()); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - close(); - } else { - // TracUiPlugin.handleTracException(event.getResult()); - submitButton.setEnabled(true); - TracTaskEditor.this.showBusy(false); - } - } - }); - } - }; - - Job submitJob = new Job(SUBMIT_JOB_LABEL) { - - @Override - protected IStatus run(IProgressMonitor monitor) { - try { - ITracClient server = connector.getClientManager().getRepository(repository); - server.updateTicket(ticket, comment); - // XXX hack to avoid message about lost changes to local - // task - task.setTaskData(null); - TasksUiPlugin.getSynchronizationManager().synchronize(connector, task, true, null); - return Status.OK_STATUS; - } catch (Exception e) { - return TracCorePlugin.toStatus(e); - } - } - - }; - - submitJob.addJobChangeListener(listener); - submitJob.schedule(); - - } - - @Override - protected void updateBug() { - getRepositoryTaskData().setHasLocalChanges(true); - } - - @Override - protected void validateInput() { - } - - TracTicket getTracTicket() throws InvalidTicketException { - RepositoryTaskData data = getRepositoryTaskData(); - - TracTicket ticket = new TracTicket(Integer.parseInt(data.getId())); - - List<RepositoryTaskAttribute> attributes = data.getAttributes(); - for (RepositoryTaskAttribute attribute : attributes) { - if (!attribute.isReadOnly()) { - ticket.putValue(attribute.getID(), attribute.getValue()); - } - } - // TODO "1" should not be hard coded here - if ("1".equals(data.getAttributeValue(RepositoryTaskAttribute.ADD_SELF_CC))) { - String cc = data.getAttributeValue(RepositoryTaskAttribute.USER_CC); - ticket.putBuiltinValue(Key.CC, cc + "," + repository.getUserName()); - } - - RepositoryOperation operation = data.getSelectedOperation(); - if (operation != null) { - String action = operation.getKnobName(); - if (!"leave".equals(action)) { - if ("accept".equals(action)) { - ticket.putValue("status", "assigned"); - ticket.putValue("owner", TracRepositoryConnector.getDisplayUsername(repository)); - } else if ("resolve".equals(action)) { - ticket.putValue("status", "closed"); - ticket.putValue("resolution", operation.getOptionSelection()); - } else if ("reopen".equals(action)) { - ticket.putValue("status", "reopened"); - ticket.putValue("resolution", ""); - } else if ("reassign".equals(operation.getKnobName())) { - ticket.putValue("status", "new"); - ticket.putValue("owner", operation.getInputValue()); - } - } - } - - return ticket; - } - -} diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorFactory.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorFactory.java deleted file mode 100644 index 19b71e386..000000000 --- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorFactory.java +++ /dev/null @@ -1,74 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ -package org.eclipse.mylar.internal.trac.ui.editor; - -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.ITaskEditorFactory; -import org.eclipse.mylar.internal.tasks.ui.editors.MylarTaskEditor; -import org.eclipse.mylar.internal.trac.core.TracCorePlugin; -import org.eclipse.mylar.internal.trac.core.TracRepositoryConnector; -import org.eclipse.mylar.internal.trac.core.TracTask; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorPart; - -/** - * @author Steffen Pingel - */ -public class TracTaskEditorFactory implements ITaskEditorFactory { - - public boolean canCreateEditorFor(ITask task) { - if (task instanceof TracTask) { - TracRepositoryConnector connector = (TracRepositoryConnector) TasksUiPlugin.getRepositoryManager().getRepositoryConnector( - TracCorePlugin.REPOSITORY_KIND); - TaskRepository repository = TasksUiPlugin.getRepositoryManager().getRepository(TracCorePlugin.REPOSITORY_KIND, - ((TracTask)task).getRepositoryUrl()); - return connector.hasRichEditor(repository, (TracTask) task); - } - return task instanceof TracTask; - } - - public boolean canCreateEditorFor(IEditorInput input) { - if (input instanceof TracTaskEditorInput) { - return ((TracTaskEditorInput) input).getRepositoryTaskData() != null; - } - return false; - } - - public IEditorPart createEditor(MylarTaskEditor parentEditor) { - return new TracTaskEditor(parentEditor); - } - - public IEditorInput createEditorInput(ITask task) { - TracTask tracTask = (TracTask) task; - TaskRepository repository = TasksUiPlugin.getRepositoryManager().getRepository( - TracCorePlugin.REPOSITORY_KIND, tracTask.getRepositoryUrl()); - try { - return new TracTaskEditorInput(repository, tracTask); - } catch (Exception e) { - MylarStatusHandler.fail(e, "Could not create Trac editor input", true); - } - return null; - } - - public String getTitle() { - return "Trac"; - } - - public void notifyEditorActivationChange(IEditorPart editor) { - // TODO Auto-generated method stub - - } - - public boolean providesOutline() { - return true; - } - -} diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorInput.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorInput.java deleted file mode 100644 index 518301998..000000000 --- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorInput.java +++ /dev/null @@ -1,34 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.ui.editor; - -import java.io.IOException; -import java.security.GeneralSecurityException; - -import org.eclipse.mylar.internal.tasks.ui.editors.ExistingBugEditorInput; -import org.eclipse.mylar.internal.trac.core.TracTask; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.TaskRepository; - -/** - * @author Steffen Pingel - */ -public class TracTaskEditorInput extends ExistingBugEditorInput { - - public TracTaskEditorInput(TaskRepository repository, TracTask task) throws IOException, GeneralSecurityException { - super(repository, task.getTaskData(), AbstractRepositoryTask.getTaskId(task.getHandleIdentifier())); - // TODO Auto-generated constructor stub - } - - public String getName() { - // TODO fix super implementation - return repositoryTask.getDescription(); - } - -} diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/EditTracQueryWizard.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/EditTracQueryWizard.java deleted file mode 100644 index 8e2ec65e9..000000000 --- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/EditTracQueryWizard.java +++ /dev/null @@ -1,61 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.ui.wizard; - -import org.eclipse.mylar.internal.tasks.ui.wizards.AbstractEditQueryWizard; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.TaskRepository; - -/** - * @author Steffen Pingel - */ -public class EditTracQueryWizard extends AbstractEditQueryWizard { - -// private TracCustomQueryPage queryPage; - - public EditTracQueryWizard(TaskRepository repository, AbstractRepositoryQuery query) { - super(repository, query); - } - - @Override - public void addPages() { - page = new TracCustomQueryPage(repository, query); - page.setWizard(this); - addPage(page); - } - - @Override - public boolean canFinish() { - if (page.getNextPage() == null) { - return page.isPageComplete(); - } - return page.getNextPage().isPageComplete(); - } - -// @Override -// public boolean performFinish() { -// AbstractRepositoryQuery q = queryPage.getQuery(); -// if (q != null) { -// TasksUiPlugin.getTaskListManager().getTaskList().deleteQuery(query); -// TasksUiPlugin.getTaskListManager().getTaskList().addQuery(q); -// -// AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager().getRepositoryConnector( -// repository.getKind()); -// if (connector != null) { -// TasksUiPlugin.getSynchronizationManager().synchronize(connector, q, null); -// } -// } -// -// return true; -// } - -}
\ No newline at end of file diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracCustomQueryPage.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracCustomQueryPage.java deleted file mode 100644 index 2298bc19c..000000000 --- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracCustomQueryPage.java +++ /dev/null @@ -1,599 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003 - 2006 University Of British Columbia and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * University Of British Columbia - initial API and implementation - *******************************************************************************/ -package org.eclipse.mylar.internal.trac.ui.wizard; - -import java.lang.reflect.InvocationTargetException; -import java.net.MalformedURLException; -import java.net.Proxy; -import java.util.HashMap; -import java.util.Map; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.search.AbstractRepositoryQueryPage; -import org.eclipse.mylar.internal.tasks.ui.search.SearchHitCollector; -import org.eclipse.mylar.internal.trac.core.ITracClient; -import org.eclipse.mylar.internal.trac.core.TracCorePlugin; -import org.eclipse.mylar.internal.trac.core.TracException; -import org.eclipse.mylar.internal.trac.core.TracRepositoryConnector; -import org.eclipse.mylar.internal.trac.core.TracRepositoryQuery; -import org.eclipse.mylar.internal.trac.core.model.TracSearch; -import org.eclipse.mylar.internal.trac.core.model.TracSearchFilter; -import org.eclipse.mylar.internal.trac.core.model.TracSearchFilter.CompareOperator; -import org.eclipse.mylar.internal.trac.ui.TracUiPlugin; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.core.TaskRepositoryManager; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.search.ui.NewSearchUI; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.KeyEvent; -import org.eclipse.swt.events.KeyListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Group; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.List; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.progress.IProgressService; - -/** - * Trac search page. Provides a form similar to the one the Bugzilla connector - * uses. - * - * @author Steffen Pingel - */ -public class TracCustomQueryPage extends AbstractRepositoryQueryPage { - - private static final String TITLE = "New Trac Query"; - - private static final String DESCRIPTION = "Add search filters to define query."; - - private static final String TITLE_QUERY_TITLE = "Query Title:"; - - private TaskRepository repository; - - private TracRepositoryQuery query; - - private Text titleText; - - private static final int PRODUCT_HEIGHT = 60; - - private static final int STATUS_HEIGHT = 40; - - protected Combo summaryText = null; - - protected Combo repositoryCombo = null; - - private TextSearchField summaryField; - - private TextSearchField descriptionField; - - private ListSearchField componentField; - - private ListSearchField versionField; - - private ListSearchField milestoneField; - - private ListSearchField priorityField; - - private ListSearchField typeField; - - private ListSearchField resolutionField; - - private ListSearchField statusField; - - private Button updateButton; - - private TextSearchField keywordsField; - - private TextSearchField ownerField; - - private Map<String, SearchField> searchFieldByName = new HashMap<String, SearchField>(); - - private boolean firstTime = true; - - public TracCustomQueryPage(TaskRepository repository, AbstractRepositoryQuery query) { - super(TITLE); - - this.repository = repository; - this.query = (TracRepositoryQuery) query; - - setTitle(TITLE); - setDescription(DESCRIPTION); - } - - public TracCustomQueryPage(TaskRepository repository) { - this(repository, null); - } - - public void createControl(Composite parent) { - - Composite control = new Composite(parent, SWT.NONE); - GridData gd = new GridData(GridData.FILL_BOTH); - control.setLayoutData(gd); - GridLayout layout = new GridLayout(3, false); - control.setLayout(layout); - - createTitleGroup(control); - - summaryField = new TextSearchField("summary"); - summaryField.createControls(control, "Summary"); - - descriptionField = new TextSearchField("description"); - descriptionField.createControls(control, "Description"); - - ownerField = new TextSearchField("owner"); - ownerField.createControls(control, "Owner"); - - keywordsField = new TextSearchField("keywords"); - keywordsField.createControls(control, "Keywords"); - - createOptionsGroup(control); - - if (query != null) { - titleText.setText(query.getDescription()); - restoreSearchFilterFromQuery(query); - } - - setControl(control); - } - - public boolean canFlipToNextPage() { - return false; - } - - private void restoreSearchFilterFromQuery(TracRepositoryQuery query) { - TracSearch search = query.getTracSearch(); - java.util.List<TracSearchFilter> filters = search.getFilters(); - for (TracSearchFilter filter : filters) { - SearchField field = searchFieldByName.get(filter.getFieldName()); - if (field != null) { - field.setFilter(filter); - } else { - MylarStatusHandler.log("Ignoring invalid search filter: " + filter, this); - } - } - } - - private void createTitleGroup(Composite control) { - if (inSearchContainer()) { - return; - } - - Label titleLabel = new Label(control, SWT.NONE); - titleLabel.setText(TITLE_QUERY_TITLE); - - titleText = new Text(control, SWT.BORDER); - GridData gd = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); - gd.horizontalSpan = 2; - titleText.setLayoutData(gd); - titleText.addKeyListener(new KeyListener() { - public void keyPressed(KeyEvent e) { - // ignore - } - - public void keyReleased(KeyEvent e) { - getContainer().updateButtons(); - } - }); - } - - protected Control createOptionsGroup(Composite control) { - Group group = new Group(control, SWT.NONE); - // group.setText("Ticket Attributes"); - GridLayout layout = new GridLayout(); - layout.numColumns = 1; - group.setLayout(layout); - GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); - gd.horizontalSpan = 3; - group.setLayoutData(gd); - - createProductAttributes(group); - createTicketAttributes(group); - createUpdateButton(group); - - return group; - } - - /** - * Creates the area for selection on product attributes - * component/version/milestone. - */ - protected Control createProductAttributes(Composite control) { - Composite group = new Composite(control, SWT.NONE); - GridLayout layout = new GridLayout(); - layout.numColumns = 3; - group.setLayout(layout); - GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); - gd.horizontalSpan = 1; - group.setLayoutData(gd); - - Label label = new Label(group, SWT.LEFT); - label.setText("Component"); - - label = new Label(group, SWT.LEFT); - label.setText("Version"); - - label = new Label(group, SWT.LEFT); - label.setText("Milestone"); - - componentField = new ListSearchField("component"); - componentField.createControls(group, PRODUCT_HEIGHT); - - versionField = new ListSearchField("version"); - versionField.createControls(group, PRODUCT_HEIGHT); - - milestoneField = new ListSearchField("milestone"); - milestoneField.createControls(group, PRODUCT_HEIGHT); - - return group; - } - - /** - * Creates the area for selection of ticket attributes - * status/resolution/priority. - */ - protected Control createTicketAttributes(Composite control) { - Composite group = new Composite(control, SWT.NONE); - GridLayout layout = new GridLayout(); - layout.numColumns = 4; - group.setLayout(layout); - GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); - gd.horizontalSpan = 1; - group.setLayoutData(gd); - - Label label = new Label(group, SWT.LEFT); - label.setText("Status"); - - label = new Label(group, SWT.LEFT); - label.setText("Resolution"); - - label = new Label(group, SWT.LEFT); - label.setText("Type"); - - label = new Label(group, SWT.LEFT); - label.setText("Priority"); - - statusField = new ListSearchField("status"); - statusField.createControls(group, STATUS_HEIGHT); - - resolutionField = new ListSearchField("resolution"); - resolutionField.createControls(group, STATUS_HEIGHT); - - typeField = new ListSearchField("type"); - typeField.createControls(group, STATUS_HEIGHT); - - priorityField = new ListSearchField("priority"); - priorityField.createControls(group, STATUS_HEIGHT); - - return group; - } - - protected Control createUpdateButton(final Composite control) { - Composite group = new Composite(control, SWT.NONE); - GridLayout layout = new GridLayout(2, false); - group.setLayout(layout); - group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - updateButton = new Button(group, SWT.PUSH); - updateButton.setText("Update Attributes from Repository"); - updateButton.setLayoutData(new GridData()); - updateButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - if (repository != null) { - updateAttributesFromRepository(true); - } else { - MessageDialog.openInformation(Display.getCurrent().getActiveShell(), - TracUiPlugin.TITLE_MESSAGE_DIALOG, TaskRepositoryManager.MESSAGE_NO_REPOSITORY); - } - } - }); - - return group; - } - - @Override - public void setVisible(boolean visible) { - super.setVisible(visible); - - if (scontainer != null) { - scontainer.setPerformActionEnabled(true); - } - - if (visible && firstTime) { - firstTime = false; - // delay the execution so the dialog's progress bar is visible when - // the attributes are updated - Display.getDefault().asyncExec(new Runnable() { - public void run() { - if (getControl() != null && !getControl().isDisposed()) { - updateAttributesFromRepository(false); - } - } - }); - } - } - - private void updateAttributesFromRepository(final boolean force) { - TracRepositoryConnector connector = (TracRepositoryConnector) TasksUiPlugin.getRepositoryManager() - .getRepositoryConnector(TracCorePlugin.REPOSITORY_KIND); - final ITracClient client; - try { - client = connector.getClientManager().getRepository(repository); - } catch (MalformedURLException e) { - TracUiPlugin.handleTracException(e); - return; - } - - try { - IRunnableWithProgress runnable = new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - try { - client.updateAttributes(monitor, force); - } catch (TracException e) { - throw new InvocationTargetException(e); - } - } - }; - - if (getContainer() != null) { - getContainer().run(true, true, runnable); - } else { - IProgressService service = PlatformUI.getWorkbench().getProgressService(); - service.run(true, true, runnable); - } - } catch (InvocationTargetException e) { - TracUiPlugin.handleTracException(e.getCause()); - } catch (InterruptedException e) { - return; - } - - statusField.setValues(client.getTicketStatus()); - resolutionField.setValues(client.getTicketResolutions()); - typeField.setValues(client.getTicketTypes()); - priorityField.setValues(client.getPriorities()); - - componentField.setValues(client.getComponents()); - versionField.setValues(client.getVersions()); - milestoneField.setValues(client.getMilestones()); - } - - public TaskRepository getRepository() { - return repository; - } - - public void setRepository(TaskRepository repository) { - this.repository = repository; - } - - @Override - public boolean isPageComplete() { - if (titleText != null && titleText.getText().length() > 0) { - return true; - } - return false; - } - - public String getQueryUrl(String repsitoryUrl) { - TracSearch search = new TracSearch(); - for (SearchField field : searchFieldByName.values()) { - TracSearchFilter filter = field.getFilter(); - if (filter != null) { - search.addFilter(filter); - } - } - - StringBuilder sb = new StringBuilder(); - sb.append(repsitoryUrl); - sb.append(ITracClient.QUERY_URL); - sb.append(search.toUrl()); - return sb.toString(); - } - - public TracRepositoryQuery getQuery() { - return new TracRepositoryQuery(repository.getUrl(), getQueryUrl(repository.getUrl()), getTitleText(), - TasksUiPlugin.getTaskListManager().getTaskList()); - } - - private String getTitleText() { - return (titleText != null) ? titleText.getText() : "<search>"; - } - - public boolean performAction() { - if (repository == null) { - MessageDialog.openInformation(Display.getCurrent().getActiveShell(), TracUiPlugin.TITLE_MESSAGE_DIALOG, - TaskRepositoryManager.MESSAGE_NO_REPOSITORY); - return false; - } - - Proxy proxySettings = TasksUiPlugin.getDefault().getProxySettings(); - SearchHitCollector collector = new SearchHitCollector(TasksUiPlugin.getTaskListManager() - .getTaskList(), repository, getQuery(), proxySettings); - NewSearchUI.runQueryInBackground(collector); - - return true; - } - - private abstract class SearchField { - - protected String fieldName; - - public SearchField(String fieldName) { - this.fieldName = fieldName; - - assert !searchFieldByName.containsKey(fieldName); - searchFieldByName.put(fieldName, this); - } - - public String getFieldName() { - return fieldName; - } - - public abstract TracSearchFilter getFilter(); - - public abstract void setFilter(TracSearchFilter filter); - - } - - private class TextSearchField extends SearchField { - - private Combo conditionCombo; - - private Text searchText; - - private Label label; - - private CompareOperator[] compareOperators = { CompareOperator.CONTAINS, CompareOperator.CONTAINS_NOT, - CompareOperator.BEGINS_WITH, CompareOperator.ENDS_WITH, CompareOperator.IS, CompareOperator.IS_NOT, }; - - public TextSearchField(String fieldName) { - super(fieldName); - } - - public void createControls(Composite parent, String labelText) { - label = new Label(parent, SWT.LEFT); - label.setText(labelText); - - conditionCombo = new Combo(parent, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY); - for (CompareOperator op : compareOperators) { - conditionCombo.add(op.toString()); - } - conditionCombo.setText(compareOperators[0].toString()); - - searchText = new Text(parent, SWT.BORDER); - GridData gd = new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL); - searchText.setLayoutData(gd); - } - - public CompareOperator getCondition() { - return compareOperators[conditionCombo.getSelectionIndex()]; - } - - public String getSearchText() { - return searchText.getText(); - } - - public boolean setCondition(CompareOperator operator) { - if (conditionCombo != null) { - int i = conditionCombo.indexOf(operator.toString()); - if (i != -1) { - conditionCombo.select(i); - return true; - } - } - return false; - } - - public void setSearchText(String text) { - searchText.setText(text); - } - - @Override - public TracSearchFilter getFilter() { - String text = getSearchText(); - if (text.length() == 0) { - return null; - } - - TracSearchFilter newFilter = new TracSearchFilter(getFieldName()); - newFilter.setOperator(getCondition()); - newFilter.addValue(getSearchText()); - return newFilter; - } - - @Override - public void setFilter(TracSearchFilter filter) { - setCondition(filter.getOperator()); - java.util.List<String> values = filter.getValues(); - setSearchText(values.get(0)); - } - - } - - private class ListSearchField extends SearchField { - - private List list; - - public ListSearchField(String fieldName) { - super(fieldName); - } - - public void setValues(Object[] items) { - // preserve selected values - TracSearchFilter filter = getFilter(); - - list.removeAll(); - if (items != null) { - list.setEnabled(true); - for (Object item : items) { - list.add(item.toString()); - } - - // restore selected values - if (filter != null) { - setFilter(filter); - } - } else { - list.setEnabled(false); - } - } - - public void createControls(Composite parent, int height) { - list = new List(parent, SWT.MULTI | SWT.V_SCROLL | SWT.BORDER); - GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); - gd.heightHint = height; - list.setLayoutData(gd); - } - - @Override - public TracSearchFilter getFilter() { - int[] indicies = list.getSelectionIndices(); - if (indicies.length == 0) { - return null; - } - - TracSearchFilter newFilter = new TracSearchFilter(getFieldName()); - newFilter.setOperator(CompareOperator.IS); - for (int i : indicies) { - newFilter.addValue(list.getItem(i)); - } - return newFilter; - } - - @Override - public void setFilter(TracSearchFilter filter) { - list.deselectAll(); - java.util.List<String> values = filter.getValues(); - for (String item : values) { - int i = list.indexOf(item); - if (i != -1) { - list.select(i); - } else { - list.add(item, 0); - list.select(0); - } - } - } - - } - -} diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracQueryWizardPage.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracQueryWizardPage.java deleted file mode 100644 index 0d8925598..000000000 --- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracQueryWizardPage.java +++ /dev/null @@ -1,445 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.ui.wizard; - -import java.util.ArrayList; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; - -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.trac.core.ITracClient; -import org.eclipse.mylar.internal.trac.core.TracRepositoryQuery; -import org.eclipse.mylar.internal.trac.core.model.TracSearch; -import org.eclipse.mylar.internal.trac.core.model.TracSearchFilter; -import org.eclipse.mylar.internal.trac.core.model.TracSearchFilter.CompareOperator; -import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.ScrolledComposite; -import org.eclipse.swt.events.KeyEvent; -import org.eclipse.swt.events.KeyListener; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Group; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Text; - -/** - * @author Steffen Pingel - */ -public class TracQueryWizardPage extends WizardPage { - - private static final String TITLE = "New Trac Query"; - - private static final String DESCRIPTION = "Add search filters to define query."; - - private static final String TITLE_QUERY_TITLE = "Query Title"; - - private TaskRepository repository; - - private TracRepositoryQuery query; - - private Text titleText; - - private Composite scrollComposite; - - /* Maintain order of criterions in order to be able to restore this later. */ - private Set<SearchField> visibleSearchFields = new LinkedHashSet<SearchField>(); - - private List<SearchField> searchFields; - - public TracQueryWizardPage(TaskRepository repository, AbstractRepositoryQuery query) { - super(TITLE); - - this.repository = repository; - this.query = (TracRepositoryQuery) query; - - setTitle(TITLE); - setDescription(DESCRIPTION); - } - - public TracQueryWizardPage(TaskRepository repository) { - this(repository, null); - } - - public void createControl(Composite parent) { - Composite composite = new Composite(parent, SWT.NONE); - composite.setLayoutData(new GridData()); - composite.setLayout(new GridLayout(1, false)); - - createTitleGroup(composite); - - ScrolledComposite scrolledComposite = new ScrolledComposite(composite, SWT.V_SCROLL | SWT.BORDER); - GridData gd = new GridData(GridData.FILL, GridData.FILL, true, true); - scrolledComposite.setExpandHorizontal(true); - scrolledComposite.setLayoutData(gd); - - scrollComposite = new Composite(scrolledComposite, SWT.None); - scrolledComposite.setContent(scrollComposite); - scrollComposite.setLayout(new GridLayout(4, false)); - - createAddFilterGroup(composite); - - if (query != null) { - titleText.setText(query.getDescription()); - restoreSearchFilterFromQuery(query); - } - - setControl(composite); - } - - private void restoreSearchFilterFromQuery(TracRepositoryQuery query) { - TracSearch search = query.getTracSearch(); - List<TracSearchFilter> filters = search.getFilters(); - for (TracSearchFilter filter : filters) { - SearchField field = getSearchField(filter.getFieldName()); - if (field != null) { - showSearchField(field, filter); - } else { - MylarStatusHandler.log("Ignoring invalid search filter: " + filter, this); - } - } - } - - private SearchField getSearchField(String fieldName) { - for (SearchField searchField : searchFields) { - if (searchField.getFieldName().equals(fieldName)) { - return searchField; - } - } - return null; - } - - private void createAddFilterGroup(Composite parent) { - GridLayout layout; - GridData gd; - - Composite composite = new Composite(parent, SWT.NONE); - layout = new GridLayout(2, false); - composite.setLayout(layout); - composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - gd = new GridData(GridData.BEGINNING | GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); - composite.setLayoutData(gd); - - Label label = new Label(composite, SWT.LEFT); - label.setText("Select to add filter: "); - - // condition - final Combo filterCombo = new Combo(composite, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY); - - searchFields = new ArrayList<SearchField>(); - searchFields.add(new TextSearchField("summary", "Summary")); - searchFields.add(new TextSearchField("reporter", "Reporter")); - searchFields.add(new TextSearchField("owner", "Owner")); - searchFields.add(new TextSearchField("type", "Type")); - searchFields.add(new TextSearchField("status", "Status")); - searchFields.add(new TextSearchField("priority", "Priority")); - searchFields.add(new TextSearchField("milestone", "Milestone")); - searchFields.add(new TextSearchField("component", "Component")); - searchFields.add(new TextSearchField("version", "Version")); - searchFields.add(new TextSearchField("resoution", "Resolution")); - searchFields.add(new TextSearchField("keywords", "Keywords")); - searchFields.add(new TextSearchField("cc", "CC")); - - filterCombo.add(""); - for (SearchField field : searchFields) { - filterCombo.add(field.getDisplayName()); - } - - filterCombo.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - if (filterCombo.getText().length() > 0) { - SearchField field = searchFields.get(filterCombo.getSelectionIndex() - 1); - showSearchField(field, null); - filterCombo.setText(""); - } - } - }); - } - - private void createTitleGroup(Composite composite) { - Group group = new Group(composite, SWT.NONE); - group.setText(TITLE_QUERY_TITLE); - group.setLayout(new GridLayout(1, false)); - GridData gd = new GridData(GridData.FILL_HORIZONTAL); - group.setLayoutData(gd); - - titleText = new Text(group, SWT.BORDER); - gd = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); - titleText.setLayoutData(gd); - - titleText.addKeyListener(new KeyListener() { - public void keyPressed(KeyEvent e) { - // ignore - } - - public void keyReleased(KeyEvent e) { - getContainer().updateButtons(); - } - }); - } - - @Override - public boolean isPageComplete() { - if (titleText != null && titleText.getText().length() > 0) { - return true; - } - return false; - } - - private void showSearchField(SearchField field, TracSearchFilter filter) { - assert filter == null || !visibleSearchFields.contains(field); - - if (!visibleSearchFields.contains(field)) { - field.createControls(scrollComposite, filter); - visibleSearchFields.add(field); - } else { - field.addControl(scrollComposite); - } - updateScrollPane(); - } - - public String getQueryUrl(String repsitoryUrl) { - TracSearch search = new TracSearch(); - for (SearchField field : visibleSearchFields) { - search.addFilter(field.getFilter()); - } - - StringBuilder sb = new StringBuilder(); - sb.append(repsitoryUrl); - sb.append(ITracClient.QUERY_URL); - sb.append(search.toUrl()); - return sb.toString(); - } - - public TracRepositoryQuery getQuery() { - return new TracRepositoryQuery(repository.getUrl(), getQueryUrl(repository.getUrl()), titleText.getText(), - TasksUiPlugin.getTaskListManager().getTaskList()); - } - - private void hideSearchField(SearchField field) { - visibleSearchFields.remove(field); - } - - private void updateScrollPane() { - scrollComposite.setSize(scrollComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); - scrollComposite.layout(); - } - - private abstract class SearchField { - - protected String fieldName; - - private String displayName; - - public SearchField(String fieldName, String displayName) { - this.fieldName = fieldName; - this.displayName = displayName; - } - - public abstract void createControls(Composite parent, TracSearchFilter filter); - - public abstract void addControl(Composite parent); - - public String getFieldName() { - return fieldName; - } - - public String getDisplayName() { - return displayName; - } - - public abstract TracSearchFilter getFilter(); - - } - - private class TextSearchField extends SearchField { - - private CompareOperator[] compareOperators = { CompareOperator.CONTAINS, CompareOperator.CONTAINS_NOT, - CompareOperator.BEGINS_WITH, CompareOperator.ENDS_WITH, CompareOperator.IS, CompareOperator.IS_NOT, }; - - private List<TextCriterion> criterions; - - public TextSearchField(String fieldName, String displayName) { - super(fieldName, displayName); - } - - public void createControls(Composite parent, TracSearchFilter filter) { - if (filter != null) { - TextCriterion first = addCriterion(parent); - first.setCondition(filter.getOperator()); - List<String> values = filter.getValues(); - if (!values.isEmpty()) { - first.setSearchText(values.get(0)); - for (int i = 1; i < values.size(); i++) { - TextCriterion criterion = addCriterion(parent); - criterion.setSearchText(values.get(1)); - } - } - } else { - addCriterion(parent); - } - - } - - public void addControl(Composite parent) { - addCriterion(parent); - } - - public TextCriterion addCriterion(Composite parent) { - TextCriterion criterion = new TextCriterion(); - if (criterions == null) { - criterions = new ArrayList<TextCriterion>(); - criterion.createControl(parent); - } else { - criterion.createControl(parent, criterions.get(criterions.size() - 1)); - } - criterions.add(criterion); - return criterion; - } - - @Override - public TracSearchFilter getFilter() { - TracSearchFilter newFilter = new TracSearchFilter(getFieldName()); - newFilter.setOperator(criterions.get(0).getCondition()); - for (TextCriterion criterion : criterions) { - newFilter.addValue(criterion.getSearchText()); - } - return newFilter; - } - - public void removeCriterion(TextCriterion criterion) { - int i = criterions.indexOf(criterion); - if (i == -1) { - throw new RuntimeException(); - } - if (i == 0) { - // the first criterion is special since it contains the compare - // operator combo - if (criterions.size() > 1) { - // copy the value from the second criterion to the first - TextCriterion sourceCriterion = criterions.get(1); - criterion.searchText.setText(sourceCriterion.searchText.getText()); - removeCriterionByIndex(1); - } else { - // no more criterions, remove all controls - removeCriterionByIndex(0); - hideSearchField(this); - } - } else { - removeCriterionByIndex(i); - } - } - - private void removeCriterionByIndex(int i) { - criterions.get(i).remove(); - criterions.remove(i); - updateScrollPane(); - } - - private class TextCriterion { - - private Combo conditionCombo; - - private Text searchText; - - private Label label; - - private Button removeButton; - - public void createControl(Composite parent) { - label = new Label(parent, SWT.LEFT); - label.setText(getDisplayName() + ": "); - - conditionCombo = new Combo(parent, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY); - for (CompareOperator op : compareOperators) { - conditionCombo.add(op.toString()); - } - conditionCombo.setText(compareOperators[0].toString()); - - createSearchTextAndRemoveButton(parent); - } - - public void createControl(Composite parent, TextCriterion top) { - label = new Label(parent, SWT.RIGHT); - GridData gd = new GridData(); - gd.horizontalAlignment = SWT.END; - gd.horizontalSpan = 2; - label.setLayoutData(gd); - label.setText("or"); - - createSearchTextAndRemoveButton(parent); - - label.moveBelow(top.removeButton); - searchText.moveBelow(label); - removeButton.moveBelow(searchText); - } - - private void createSearchTextAndRemoveButton(Composite parent) { - searchText = new Text(parent, SWT.BORDER); - GridData gd = new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL); - searchText.setLayoutData(gd); - - removeButton = new Button(parent, SWT.PUSH); - removeButton.setText("-"); - removeButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) { - TextSearchField.this.removeCriterion(TextCriterion.this); - } - }); - } - - public void remove() { - label.dispose(); - if (conditionCombo != null) { - conditionCombo.dispose(); - } - searchText.dispose(); - removeButton.dispose(); - } - - public CompareOperator getCondition() { - return (conditionCombo != null) ? compareOperators[conditionCombo.getSelectionIndex()] : null; - } - - public String getSearchText() { - return searchText.getText(); - } - - public boolean setCondition(CompareOperator operator) { - if (conditionCombo != null) { - int i = conditionCombo.indexOf(operator.toString()); - if (i != -1) { - conditionCombo.select(i); - return true; - } - } - return false; - } - - public void setSearchText(String text) { - searchText.setText(text); - } - - } - } - -} diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracRepositorySettingsPage.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracRepositorySettingsPage.java deleted file mode 100644 index 0a8021415..000000000 --- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracRepositorySettingsPage.java +++ /dev/null @@ -1,225 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 - 2006 Mylar eclipse.org project and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Mylar project committers - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.ui.wizard; - -import java.lang.reflect.InvocationTargetException; -import java.net.MalformedURLException; -import java.net.URL; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.mylar.internal.tasks.ui.wizards.AbstractRepositorySettingsPage; -import org.eclipse.mylar.internal.trac.core.ITracClient; -import org.eclipse.mylar.internal.trac.core.TracClientFactory; -import org.eclipse.mylar.internal.trac.core.TracException; -import org.eclipse.mylar.internal.trac.core.TracLoginException; -import org.eclipse.mylar.internal.trac.core.ITracClient.Version; -import org.eclipse.mylar.internal.trac.ui.TracUiPlugin; -import org.eclipse.mylar.tasks.core.RepositoryTemplate; -import org.eclipse.mylar.tasks.ui.AbstractRepositoryConnectorUi; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; - -/** - * @author Steffen Pingel - */ -public class TracRepositorySettingsPage extends AbstractRepositorySettingsPage { - - private static final String MESSAGE_FAILURE_UNKNOWN = "Unknown error occured. Check that server url and credentials are valid."; - - private static final String TITLE = "Trac Repository Settings"; - - private static final String DESCRIPTION = "Example: http://trac.edgewall.org"; - - private Combo accessTypeCombo; - - // private static RepositoryTemplate[] REPOSITORY_TEMPLATES = { new - // RepositoryTemplate("Edgewall", - // "http://trac.edgewall.org", Version.TRAC_0_9.toString(), null, null, - // true), - // // new TracRepositoryInfo("Mylar Trac Client", - // // "http://mylar.eclipse.org/mylar-trac-client", true, Version.XML_RPC), - // }; - - /** Supported access types. */ - private Version[] versions; - - public TracRepositorySettingsPage(AbstractRepositoryConnectorUi repositoryUi) { - super(TITLE, DESCRIPTION, repositoryUi); - - setNeedsAnonymousLogin(true); - setNeedsEncoding(false); - setNeedsTimeZone(false); - } - - protected void createAdditionalControls(final Composite parent) { - - for (RepositoryTemplate template : connector.getTemplates()) { - serverUrlCombo.add(template.label); - } - serverUrlCombo.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - String text = serverUrlCombo.getText(); - RepositoryTemplate template = connector.getTemplate(text); - if (template != null) { - repositoryLabelEditor.setStringValue(template.label); - setUrl(template.repositoryUrl); - setAnonymous(template.anonymous); - - try { - Version version = Version.valueOf(template.version); - setTracVersion(version); - } catch (RuntimeException ex) { - setTracVersion(Version.TRAC_0_9); - } - - getContainer().updateButtons(); - return; - } - } - }); - - Label accessTypeLabel = new Label(parent, SWT.NONE); - accessTypeLabel.setText("Access Type: "); - accessTypeCombo = new Combo(parent, SWT.READ_ONLY); - - accessTypeCombo.add("Automatic (Use Validate Settings)"); - versions = Version.values(); - for (Version version : versions) { - accessTypeCombo.add(version.toString()); - } - if (repository != null) { - setTracVersion(Version.fromVersion(repository.getVersion())); - } else { - setTracVersion(null); - } - accessTypeCombo.addSelectionListener(new SelectionListener() { - public void widgetSelected(SelectionEvent e) { - if (accessTypeCombo.getSelectionIndex() > 0) { - setVersion(versions[accessTypeCombo.getSelectionIndex() - 1].name()); - } - getWizard().getContainer().updateButtons(); - } - - public void widgetDefaultSelected(SelectionEvent e) { - // ignore - } - }); - } - - @Override - public boolean isPageComplete() { - // make sure "Automatic" is not selected as a version - return super.isPageComplete() && accessTypeCombo != null && accessTypeCombo.getSelectionIndex() != 0; - } - - @Override - protected boolean isValidUrl(String name) { - if ((name.startsWith(URL_PREFIX_HTTPS) || name.startsWith(URL_PREFIX_HTTP)) && !name.endsWith("/")) { - try { - new URL(name); - return true; - } catch (MalformedURLException e) { - } - } - return false; - } - - public Version getTracVersion() { - if (accessTypeCombo.getSelectionIndex() == 0) { - return null; - } else { - return versions[accessTypeCombo.getSelectionIndex() - 1]; - } - } - - public void setTracVersion(Version version) { - if (version == null) { - // select "Automatic" - accessTypeCombo.select(0); - } else { - int i = accessTypeCombo.indexOf(version.toString()); - if (i != -1) { - accessTypeCombo.select(i); - } - setVersion(version.name()); - } - } - - protected void validateSettings() { - - try { - final String serverUrl = getServerUrl(); - final Version version = getTracVersion(); - final String username = getUserName(); - final String password = getPassword(); - - final Version[] result = new Version[1]; - getWizard().getContainer().run(true, false, new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - monitor.beginTask("Validating server settings", IProgressMonitor.UNKNOWN); - try { - if (version != null) { - ITracClient client = TracClientFactory.createClient(serverUrl, version, username, password); - client.validate(); - } else { - result[0] = TracClientFactory.probeClient(serverUrl, username, password); - } - - } catch (Exception e) { - throw new InvocationTargetException(e); - } finally { - monitor.done(); - } - } - }); - - if (username.length() > 0) { - MessageDialog.openInformation(null, TracUiPlugin.TITLE_MESSAGE_DIALOG, - "Authentication credentials are valid."); - } else { - MessageDialog.openInformation(null, TracUiPlugin.TITLE_MESSAGE_DIALOG, "Repository is valid."); - } - - if (result[0] != null) { - setTracVersion(result[0]); - } - } catch (InvocationTargetException e) { - if (e.getCause() instanceof MalformedURLException) { - MessageDialog.openWarning(null, TracUiPlugin.TITLE_MESSAGE_DIALOG, "Repository url is invalid."); - } else if (e.getCause() instanceof TracLoginException) { - MessageDialog.openWarning(null, TracUiPlugin.TITLE_MESSAGE_DIALOG, - "Unable to authenticate with repository. Login credentials invalid."); - } else if (e.getCause() instanceof TracException) { - String message = "No Trac repository found at url"; - if (e.getCause().getMessage() != null) { - message += ": " + e.getCause().getMessage(); - } - MessageDialog - .openWarning(null, TracUiPlugin.TITLE_MESSAGE_DIALOG, message); - } else { - MessageDialog.openWarning(null, TracUiPlugin.TITLE_MESSAGE_DIALOG, MESSAGE_FAILURE_UNKNOWN); - } - } catch (InterruptedException e) { - MessageDialog.openWarning(null, TracUiPlugin.TITLE_MESSAGE_DIALOG, MESSAGE_FAILURE_UNKNOWN); - } - - super.getWizard().getContainer().updateButtons(); - } -}
\ No newline at end of file |