Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorspingel2010-04-03 01:33:20 +0000
committerspingel2010-04-03 01:33:20 +0000
commitac04a12c6f57645283593918e5f0f47dad4ea44e (patch)
tree1f42c4b4f3073e8ee63d83bd9dc3ebe3c8f5bd06 /org.eclipse.mylyn.tasks.ui/src
parent3a236a4458dd45d54e3243943c67f286a74da59b (diff)
downloadorg.eclipse.mylyn.tasks-ac04a12c6f57645283593918e5f0f47dad4ea44e.tar.gz
org.eclipse.mylyn.tasks-ac04a12c6f57645283593918e5f0f47dad4ea44e.tar.xz
org.eclipse.mylyn.tasks-ac04a12c6f57645283593918e5f0f47dad4ea44e.zip
NEW - bug 305075: [patch] consume search extension point
https://bugs.eclipse.org/bugs/show_bug.cgi?id=305075
Diffstat (limited to 'org.eclipse.mylyn.tasks.ui/src')
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskSearchPage.java643
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/OpenTaskSearchAction.java5
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/SearchForRepositoryTask.java46
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ShowInSearchViewAction.java10
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskSelectionDialog.java30
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorDescriptionPart.java12
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/CreateQueryFromSearchAction.java91
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/Messages.java71
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/OpenSearchResultAction.java64
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/RepositorySearchResult.java97
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/RepositorySearchResultView.java431
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchHitCollector.java138
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultContentProvider.java63
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultSortAction.java38
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultSorter.java50
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultTreeContentProvider.java144
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultsLabelProvider.java67
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchScoreComputerAdapterFactory.java55
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchUtil.java113
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/StackTraceDuplicateDetector.java111
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/messages.properties36
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListSearchHistoryPopupDialog.java9
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java9
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/AbstractRepositoryQueryPage.java12
24 files changed, 155 insertions, 2190 deletions
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 06050c204..000000000
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskSearchPage.java
+++ /dev/null
@@ -1,643 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2009 Tasktop Technologies and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Tasktop Technologies - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.tasks.ui;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.core.runtime.ISafeRunnable;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.SafeRunner;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.DialogPage;
-import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.layout.GridDataFactory;
-import org.eclipse.jface.operation.IRunnableContext;
-import org.eclipse.mylyn.commons.core.StatusHandler;
-import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages;
-import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryManager;
-import org.eclipse.mylyn.internal.tasks.ui.search.SearchHitCollector;
-import org.eclipse.mylyn.internal.tasks.ui.views.TaskListView;
-import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector;
-import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
-import org.eclipse.mylyn.tasks.core.TaskRepository;
-import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi;
-import org.eclipse.mylyn.tasks.ui.TasksUi;
-import org.eclipse.mylyn.tasks.ui.TasksUiUtil;
-import org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositoryQueryPage;
-import org.eclipse.mylyn.tasks.ui.wizards.ITaskSearchPage;
-import org.eclipse.mylyn.tasks.ui.wizards.ITaskSearchPageContainer;
-import org.eclipse.search.internal.ui.SearchPlugin;
-import org.eclipse.search.ui.ISearchPage;
-import org.eclipse.search.ui.ISearchPageContainer;
-import org.eclipse.search.ui.ISearchQuery;
-import org.eclipse.search.ui.ISearchResultViewPart;
-import org.eclipse.search.ui.NewSearchUI;
-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.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.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-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.Hyperlink;
-import org.eclipse.ui.forms.widgets.ImageHyperlink;
-
-/**
- * @author Rob Elves
- * @author Mik Kersten
- * @author Steffen Pingel
- */
-public class TaskSearchPage extends DialogPage implements ISearchPage {
-
- public static final String ID = "org.eclipse.mylyn.tasks.ui.search.page"; //$NON-NLS-1$
-
- private static final String PAGE_KEY = "page"; //$NON-NLS-1$
-
- private static final String PAGE_NAME = "TaskSearchPage"; //$NON-NLS-1$
-
- private static final String STORE_REPO_ID = PAGE_NAME + ".REPO"; //$NON-NLS-1$
-
- private Combo repositoryCombo;
-
- private Text keyText;
-
- private TaskRepository repository;
-
- private Composite fParentComposite;
-
- private IDialogSettings fDialogSettings;
-
- private int currentPageIndex = -1;
-
- private boolean firstView = true;
-
- private Control[] queryPages;
-
- private ISearchPageContainer pageContainer;
-
- private ITaskSearchPageContainer taskSearchPageContainer;
-
- public boolean performAction() {
- saveDialogSettings();
- String key = keyText.getText();
- if (key != null && key.trim().length() > 0) {
- key = key.trim();
- boolean openSuccessful = TasksUiUtil.openTask(repository, key);
- if (!openSuccessful) {
- MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
- Messages.TaskSearchPage_Task_Search, Messages.TaskSearchPage_No_task_found_matching_key_ + key);
- }
- return openSuccessful;
- } else {
- ITaskSearchPage page = (ITaskSearchPage) queryPages[currentPageIndex].getData(PAGE_KEY);
- return page.performSearch();
- }
- }
-
- public void setContainer(ISearchPageContainer container) {
- this.pageContainer = container;
- this.taskSearchPageContainer = new ITaskSearchPageContainer() {
- public IRunnableContext getRunnableContext() {
- return pageContainer.getRunnableContext();
- }
-
- public void setPerformActionEnabled(boolean enabled) {
- pageContainer.setPerformActionEnabled(enabled);
- }
- };
- }
-
- 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);
- createSeparator(fParentComposite);
- this.setControl(fParentComposite);
-
- Dialog.applyDialogFont(fParentComposite);
- }
-
- private void createSeparator(Composite parent) {
- Label separator = new Label(parent, SWT.NONE);
- separator.setVisible(false);
- GridData data = new GridData(GridData.FILL, GridData.FILL, false, false, 2, 1);
- data.heightHint = convertHeightInCharsToPixels(1) / 3;
- separator.setLayoutData(data);
- }
-
- private void createRepositoryGroup(Composite control) {
- Composite group = new Composite(control, SWT.NONE);
- GridLayout layout = new GridLayout(6, false);
- group.setLayout(layout);
- GridData gd = new GridData(GridData.FILL_HORIZONTAL);
- group.setLayoutData(gd);
-
- Label label = new Label(group, SWT.NONE);
- label.setText(Messages.TaskSearchPage_Select_Repository_);
-
- repositoryCombo = new Combo(group, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY);
- repositoryCombo.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- displayQueryPage(repositoryCombo.getSelectionIndex());
- }
- });
- label = new Label(group, SWT.NONE);
- label.setText(" "); //$NON-NLS-1$
-
- Label labelKey = new Label(group, SWT.NONE);
- labelKey.setText(Messages.TaskSearchPage_Task_Key_ID);
- keyText = new Text(group, SWT.BORDER);
- keyText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL));
-
- String findText = null;
- TaskListView taskListView = TaskListView.getFromActivePerspective();
- if (taskListView != null) {
- findText = taskListView.getFilteredTree().getFilterControl().getText();
- if (findText != null && findText.trim().length() > 0 && isTaskKeyCandidate(findText.trim())) {
- pageContainer.setPerformActionEnabled(true);
- keyText.setText(findText.trim());
- keyText.setFocus();
- }
- }
-
- keyText.addKeyListener(new KeyListener() {
-
- public void keyPressed(KeyEvent e) {
- // ignore
- }
-
- public void keyReleased(KeyEvent e) {
- updatePageEnablement();
- }
- });
-
- ImageHyperlink clearKey = new ImageHyperlink(group, SWT.NONE);
- clearKey.setImage(CommonImages.getImage(CommonImages.REMOVE));
- clearKey.addHyperlinkListener(new HyperlinkAdapter() {
-
- @Override
- public void linkActivated(HyperlinkEvent e) {
- keyText.setText(""); //$NON-NLS-1$
- updatePageEnablement();
- }
- });
- }
-
- private void updatePageEnablement() {
- if (keyText.getText() != null && keyText.getText().trim().length() > 0) {
- //setControlsEnabled(queryPages[currentPageIndex], false);
- if (queryPages != null && queryPages[currentPageIndex] != null
- && queryPages[currentPageIndex].getData(PAGE_KEY) instanceof AbstractRepositoryQueryPage) {
- ((AbstractRepositoryQueryPage) queryPages[currentPageIndex].getData(PAGE_KEY)).setControlsEnabled(false);
- }
- if (repositoryCombo.getSelectionIndex() > -1) {
- pageContainer.setPerformActionEnabled(true);
- }
- } else {
- //setControlsEnabled(queryPages[currentPageIndex], true);
- if (queryPages != null && queryPages[currentPageIndex] != null
- && queryPages[currentPageIndex].getData(PAGE_KEY) instanceof AbstractRepositoryQueryPage) {
- ((AbstractRepositoryQueryPage) queryPages[currentPageIndex].getData(PAGE_KEY)).setControlsEnabled(true);
- }
- //setControlsEnabled(queryPages[currentPageIndex], true);
- //pageContainer.setPerformActionEnabled(false);
- }
- }
-
- private Control createPage(TaskRepository repository, ITaskSearchPage searchPage) {
- // Page wrapper
- final Composite pageWrapper = new Composite(fParentComposite, SWT.NONE);
- pageWrapper.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
- GridLayout layout = new GridLayout();
- layout.marginWidth = 0;
- layout.marginHeight = 0;
- pageWrapper.setLayout(layout);
-
- try {
- searchPage.setContainer(taskSearchPageContainer);
- searchPage.createControl(pageWrapper);
- } catch (Exception e) {
- pageWrapper.dispose();
- searchPage.dispose();
-
- searchPage = createErrorPage(repository, e);
- return searchPage.getControl();
- }
-
- // XXX: work around for initial search page size issue bug#198493
- IDialogSettings searchDialogSettings = SearchPlugin.getDefault().getDialogSettingsSection(
- "DialogBounds_SearchDialog"); //$NON-NLS-1$
- if (searchDialogSettings.get("DIALOG_WIDTH") == null) { //$NON-NLS-1$
- fParentComposite.getParent().getShell().pack();
- }
- pageWrapper.setData(PAGE_KEY, searchPage);
- return pageWrapper;
- }
-
- private ITaskSearchPage createErrorPage(TaskRepository repository, Throwable e) {
- ITaskSearchPage searchPage;
- Status status = new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN,
- "Error occurred while constructing search page for " + repository.getRepositoryUrl() + " [" //$NON-NLS-1$ //$NON-NLS-2$
- + repository.getConnectorKind() + "]", e);//$NON-NLS-1$
- StatusHandler.log(status);
-
- searchPage = new DeadSearchPage(repository, status);
- searchPage.setContainer(taskSearchPageContainer);
- searchPage.createControl(fParentComposite);
- searchPage.getControl().setData(PAGE_KEY, searchPage);
- return searchPage;
- }
-
- private void displayQueryPage(final 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);
- ITaskSearchPage page = (ITaskSearchPage) queryPages[currentPageIndex].getData(PAGE_KEY);
- page.setVisible(false);
- GridData data = (GridData) queryPages[currentPageIndex].getLayoutData();
- data.exclude = true;
- queryPages[currentPageIndex].setLayoutData(data);
- }
-
- String repositoryLabel = repositoryCombo.getItem(pageIndex);
- repository = (TaskRepository) repositoryCombo.getData(repositoryLabel);
-
- if (queryPages[pageIndex] == null) {
- if (repository != null) {
- final AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getConnectorUi(repository.getConnectorKind());
- if (connectorUi != null) {
- SafeRunner.run(new ISafeRunnable() {
- public void run() throws Exception {
- ITaskSearchPage searchPage = getSearchPage(connectorUi);
- if (searchPage != null) {
- queryPages[pageIndex] = createPage(repository, searchPage);
- } else {
- AbstractRepositoryConnector connector = TasksUi.getRepositoryManager()
- .getRepositoryConnector(repository.getConnectorKind());
- if (connector.canCreateTaskFromKey(repository)) {
- queryPages[pageIndex] = createPage(repository, new NoSearchPage(repository));
- }
- }
- }
-
- public void handleException(Throwable e) {
- ITaskSearchPage page = createErrorPage(repository, e);
- queryPages[pageIndex] = page.getControl();
- }
- });
- }
-
- }
- }
-
- // update enablement of the task id field
- if (repository != null) {
- AbstractRepositoryConnector connector = TasksUi.getRepositoryManager().getRepositoryConnector(
- repository.getConnectorKind());
- if (connector.canCreateTaskFromKey(repository)) {
- keyText.setEnabled(true);
- } else {
- keyText.setEnabled(false);
- }
- }
-
- if (queryPages[pageIndex] != null) {
- GridData data = (GridData) queryPages[pageIndex].getLayoutData();
- if (data == null) {
- data = new GridData();
- }
- data.exclude = false;
- queryPages[pageIndex].setLayoutData(data);
- queryPages[pageIndex].setVisible(true);
- ITaskSearchPage page = (ITaskSearchPage) queryPages[pageIndex].getData(PAGE_KEY);
- page.setVisible(true);
- }
-
- currentPageIndex = pageIndex;
- fParentComposite.getParent().layout(true, true);
- updatePageEnablement();
-
- }
-
- private ITaskSearchPage getSearchPage(AbstractRepositoryConnectorUi connectorUi) {
- if (connectorUi.hasSearchPage()) {
- return connectorUi.getSearchPage(repository, null);
- }
- return null;
- }
-
- @Override
- public void setVisible(boolean visible) {
- if (firstView) {
- firstView = false;
- getControl().setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true));
-
- List<TaskRepository> repositories = TasksUi.getRepositoryManager().getAllRepositories();
- List<TaskRepository> searchableRepositories = new ArrayList<TaskRepository>();
- for (TaskRepository repository : repositories) {
- AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getConnectorUi(repository.getConnectorKind());
- AbstractRepositoryConnector connector = TasksUi.getRepositoryManager().getRepositoryConnector(
- repository.getConnectorKind());
- if ((connectorUi != null && connectorUi.hasSearchPage() && !repository.isOffline())
- || connector.canCreateTaskFromKey(repository)) {
- searchableRepositories.add(repository);
- }
- }
-
- Collections.sort(searchableRepositories, new TaskRepositoryComparator());
-
- String[] repositoryUrls = new String[searchableRepositories.size()];
- int i = 0;
- int indexToSelect = 0;
- for (TaskRepository currRepsitory : searchableRepositories) {
- if (repository != null && repository.equals(currRepsitory)) {
- indexToSelect = i;
- }
- repositoryUrls[i] = currRepsitory.getRepositoryUrl();
- i++;
- }
-
- IDialogSettings settings = getDialogSettings();
- if (repositoryCombo != null) {
- for (int x = 0; x < searchableRepositories.size(); x++) {
- repositoryCombo.add(searchableRepositories.get(x).getRepositoryLabel());
- repositoryCombo.setData(searchableRepositories.get(x).getRepositoryLabel(),
- searchableRepositories.get(x));
- }
- if (repositoryUrls.length == 0) {
- MessageDialog.openInformation(Display.getCurrent().getActiveShell(),
- Messages.TaskSearchPage_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 = (TaskRepository) repositoryCombo.getData(selectRepo);
- if (repository == null) {
- // TODO: Display no repository error
- }
- } else {
- repositoryCombo.select(indexToSelect);
- }
-
- // TODO: Create one page per connector and repopulate based on repository
- queryPages = new Control[repositoryUrls.length];
- displayQueryPage(repositoryCombo.getSelectionIndex());
- // updateAttributesFromRepository(repositoryCombo.getText(),
- // null, false);
- }
- }
- }
-
- if (queryPages == null) {
- pageContainer.setPerformActionEnabled(false);
- }
-
- super.setVisible(visible);
-
- setDefaultValuesAndFocus();
- }
-
- private void setDefaultValuesAndFocus() {
- IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
- if (window != null) {
- IWorkbenchPage page = window.getActivePage();
- if (page != null) {
- String repositoryUrl = null;
- IWorkbenchPart part = page.getActivePart();
- if (part instanceof ISearchResultViewPart) {
- ISearchQuery[] queries = NewSearchUI.getQueries();
- if (queries.length > 0) {
- if (queries[0] instanceof SearchHitCollector) {
- repositoryUrl = ((SearchHitCollector) queries[0]).getRepositoryQuery().getRepositoryUrl();
- }
- }
- }
-// if (repositoryUrl == null) {
-// IEditorPart editor = page.getActiveEditor();
-// if (editor instanceof TaskEditor) {
-// repositoryUrl = ((TaskEditor) editor).getTaskEditorInput().getTask().getRepositoryUrl();
-// }
-// }
-// if (repositoryUrl == null) {
-// TaskListView taskListView = TaskListView.getFromActivePerspective();
-// if (taskListView != null) {
-// AbstractTask selectedTask = taskListView.getSelectedTask();
-// if (selectedTask != null) {
-// repositoryUrl = selectedTask.getRepositoryUrl();
-// }
-// }
-// }
- if (repositoryUrl != null) {
- TaskRepository repository = TasksUiPlugin.getRepositoryManager().getRepository(repositoryUrl);
- if (repository != null) {
- int index = 0;
- for (String repositoryLabel : repositoryCombo.getItems()) {
- if (repositoryLabel.equals(repository.getRepositoryLabel())) {
- repositoryCombo.select(index);
- }
- index++;
- }
- displayQueryPage(repositoryCombo.getSelectionIndex());
- }
- }
- }
- }
-
- if (keyText.getText() != null && keyText.getText().trim().length() > 0) {
- keyText.setFocus();
- keyText.setSelection(0, keyText.getText().length());
- } else {
- Clipboard clipboard = new Clipboard(Display.getDefault());
- TextTransfer transfer = TextTransfer.getInstance();
- String contents = (String) clipboard.getContents(transfer);
- if (contents != null) {
- if (isTaskKeyCandidate(contents.trim())) {
- keyText.setText(contents.trim());
- keyText.setFocus();
- keyText.setSelection(0, keyText.getText().length());
- }
- }
- }
- updatePageEnablement();
- }
-
- private boolean isTaskKeyCandidate(String contents) {
- boolean looksLikeKey = false;
- try {
- Integer.parseInt(contents);
- looksLikeKey = true;
- } catch (NumberFormatException nfe) {
- }
- if (!looksLikeKey) {
- try {
- Integer.parseInt(contents.substring(contents.lastIndexOf('-')));
- looksLikeKey = true;
- } catch (Exception e) {
- }
- }
- return looksLikeKey;
- }
-
- 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 (Control control : queryPages) {
- if (control != null) {
- ITaskSearchPage page = (ITaskSearchPage) control.getData(PAGE_KEY);
- page.dispose();
- }
- }
- }
- super.dispose();
- }
-
- private class DeadSearchPage extends AbstractRepositoryQueryPage {
-
- public DeadSearchPage(TaskRepository rep, Status status) {
- super("Search page error", rep); //$NON-NLS-1$
- }
-
- public void createControl(Composite parent) {
- Hyperlink hyperlink = new Hyperlink(parent, SWT.NONE);
- hyperlink.setText(Messages.TaskSearchPage_ERROR_Unable_to_present_query_page);
- hyperlink.setUnderlined(true);
- hyperlink.addHyperlinkListener(new HyperlinkAdapter() {
- @Override
- public void linkActivated(HyperlinkEvent e) {
- TaskSearchPage.this.getControl().getShell().close();
- TasksUiUtil.openEditRepositoryWizard(getTaskRepository());
- // TODO: Re-construct this page with new
- // repository data
- }
-
- });
-
- GridDataFactory.fillDefaults().grab(true, true).applyTo(hyperlink);
- setControl(hyperlink);
- }
-
- @Override
- public IRepositoryQuery getQuery() {
- return null;
- }
-
- @Override
- public boolean isPageComplete() {
- return false;
- }
-
- @Override
- public void setVisible(boolean visible) {
- super.setVisible(visible);
- if (visible) {
- getSearchContainer().setPerformActionEnabled(false);
- }
- }
-
- @Override
- public String getQueryTitle() {
- return null;
- }
-
- @Override
- public void applyTo(IRepositoryQuery query) {
- // ignore
- }
-
- }
-
- private class NoSearchPage extends AbstractRepositoryQueryPage {
-
- public NoSearchPage(TaskRepository rep) {
- super("No search page", rep); //$NON-NLS-1$
- }
-
- public void createControl(Composite parent) {
- Composite composite = new Composite(parent, SWT.NONE);
- composite.setLayout(new GridLayout());
- Dialog.applyDialogFont(composite);
- setControl(composite);
- }
-
- @Override
- public IRepositoryQuery getQuery() {
- return null;
- }
-
- @Override
- public boolean isPageComplete() {
- return false;
- }
-
- @Override
- public void setVisible(boolean visible) {
- super.setVisible(visible);
- if (visible) {
- getSearchContainer().setPerformActionEnabled(false);
- }
- }
-
- @Override
- public String getQueryTitle() {
- return null;
- }
-
- @Override
- public void applyTo(IRepositoryQuery query) {
- // ignore
- }
-
- }
-}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/OpenTaskSearchAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/OpenTaskSearchAction.java
index 0c6f858b6..ebaa820b2 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/OpenTaskSearchAction.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/OpenTaskSearchAction.java
@@ -14,8 +14,7 @@ package org.eclipse.mylyn.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.mylyn.internal.tasks.ui.TaskSearchPage;
-import org.eclipse.search.ui.NewSearchUI;
+import org.eclipse.mylyn.internal.tasks.ui.search.SearchUtil;
import org.eclipse.ui.IViewActionDelegate;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchWindow;
@@ -38,7 +37,7 @@ public class OpenTaskSearchAction extends Action implements IViewActionDelegate
public void run() {
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
if (window != null) {
- NewSearchUI.openSearchDialog(window, TaskSearchPage.ID);
+ SearchUtil.openSearchDialog(window);
}
}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/SearchForRepositoryTask.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/SearchForRepositoryTask.java
deleted file mode 100644
index 24fbc9c63..000000000
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/SearchForRepositoryTask.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2008 Tasktop Technologies and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Tasktop Technologies - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.mylyn.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.mylyn.internal.tasks.ui.TaskSearchPage;
-import org.eclipse.search.internal.ui.SearchDialog;
-import org.eclipse.ui.IViewActionDelegate;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.IWorkbenchWindowActionDelegate;
-import org.eclipse.ui.PlatformUI;
-
-/**
- * @author Mik Kersten
- */
-public class SearchForRepositoryTask extends Action implements IWorkbenchWindowActionDelegate, IViewActionDelegate {
-
- public void run(IAction action) {
- new SearchDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow(), TaskSearchPage.ID).open();
- }
-
- public void dispose() {
- }
-
- public void init(IWorkbenchWindow window) {
- }
-
- public void selectionChanged(IAction action, ISelection selection) {
- }
-
- public void init(IViewPart view) {
- }
-
-}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ShowInSearchViewAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ShowInSearchViewAction.java
index b2ccb4ae0..0f8621670 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ShowInSearchViewAction.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ShowInSearchViewAction.java
@@ -14,13 +14,12 @@ package org.eclipse.mylyn.internal.tasks.ui.actions;
import java.util.Iterator;
import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.mylyn.internal.tasks.ui.search.SearchHitCollector;
+import org.eclipse.mylyn.internal.tasks.ui.search.SearchUtil;
import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector;
import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.ui.TasksUi;
-import org.eclipse.search.ui.NewSearchUI;
import org.eclipse.ui.actions.BaseSelectionListenerAction;
/**
@@ -52,16 +51,15 @@ public class ShowInSearchViewAction extends BaseSelectionListenerAction {
TaskRepository taskRepository = TasksUi.getRepositoryManager().getRepository(query.getConnectorKind(),
query.getRepositoryUrl());
if (connector != null) {
- SearchHitCollector collector = new SearchHitCollector(TasksUiInternal.getTaskList(), taskRepository,
- query);
- NewSearchUI.runQueryInBackground(collector);
+ SearchUtil.runSearchQuery(TasksUiInternal.getTaskList(), taskRepository, query);
}
}
}
@Override
protected boolean updateSelection(IStructuredSelection selection) {
- return selection.size() == 1 && selection.getFirstElement() instanceof IRepositoryQuery;
+ return SearchUtil.supportsTaskSearch() && selection.size() == 1
+ && selection.getFirstElement() instanceof IRepositoryQuery;
}
} \ No newline at end of file
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
index 541e2a827..7f1d82163 100644
--- 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
@@ -51,8 +51,8 @@ import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
import org.eclipse.mylyn.internal.tasks.core.AbstractTaskContainer;
import org.eclipse.mylyn.internal.tasks.core.TaskActivationHistory;
import org.eclipse.mylyn.internal.tasks.core.TaskList;
-import org.eclipse.mylyn.internal.tasks.ui.TaskSearchPage;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
+import org.eclipse.mylyn.internal.tasks.ui.search.SearchUtil;
import org.eclipse.mylyn.internal.tasks.ui.views.TaskDetailLabelProvider;
import org.eclipse.mylyn.internal.tasks.ui.views.TaskListFilteredTree;
import org.eclipse.mylyn.internal.tasks.ui.views.TaskListView;
@@ -61,7 +61,6 @@ import org.eclipse.mylyn.internal.tasks.ui.workingsets.WorkingSetLabelComparator
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.core.ITaskContainer;
import org.eclipse.mylyn.tasks.ui.TaskElementLabelProvider;
-import org.eclipse.search.internal.ui.SearchDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
@@ -540,20 +539,21 @@ public class TaskSelectionDialog extends FilteredItemsSelectionDialog {
openInBrowserCheck.setText(Messages.TaskSelectionDialog_Open_with_Browser);
openInBrowserCheck.setSelection(openInBrowser);
- ImageHyperlink openHyperlink = new ImageHyperlink(composite, SWT.NONE);
- openHyperlink.setText(TaskListFilteredTree.LABEL_SEARCH);
- openHyperlink.setForeground(CommonColors.HYPERLINK_WIDGET);
- openHyperlink.setUnderlined(true);
- openHyperlink.addHyperlinkListener(new HyperlinkAdapter() {
-
- @Override
- public void linkActivated(HyperlinkEvent e) {
- getShell().close();
- new SearchDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow(), TaskSearchPage.ID).open();
- }
-
- });
+ if (SearchUtil.supportsTaskSearch()) {
+ ImageHyperlink openHyperlink = new ImageHyperlink(composite, SWT.NONE);
+ openHyperlink.setText(TaskListFilteredTree.LABEL_SEARCH);
+ openHyperlink.setForeground(CommonColors.HYPERLINK_WIDGET);
+ openHyperlink.setUnderlined(true);
+ openHyperlink.addHyperlinkListener(new HyperlinkAdapter() {
+
+ @Override
+ public void linkActivated(HyperlinkEvent e) {
+ getShell().close();
+ SearchUtil.openSearchDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow());
+ }
+ });
+ }
return composite;
}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorDescriptionPart.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorDescriptionPart.java
index 34bbf6b35..53550a885 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorDescriptionPart.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorDescriptionPart.java
@@ -24,14 +24,13 @@ import org.eclipse.core.runtime.Status;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
-import org.eclipse.mylyn.internal.tasks.ui.search.SearchHitCollector;
+import org.eclipse.mylyn.internal.tasks.ui.search.SearchUtil;
import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
import org.eclipse.mylyn.tasks.core.AbstractDuplicateDetector;
import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
import org.eclipse.mylyn.tasks.ui.TasksUiImages;
import org.eclipse.mylyn.tasks.ui.editors.AbstractTaskEditorPage;
-import org.eclipse.search.ui.NewSearchUI;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.layout.GridData;
@@ -121,7 +120,9 @@ public class TaskEditorDescriptionPart extends TaskEditorRichTextPart {
}
super.createControl(parent, toolkit);
- addDuplicateDetection(getComposite(), toolkit);
+ if (SearchUtil.supportsTaskSearch()) {
+ addDuplicateDetection(getComposite(), toolkit);
+ }
getEditor().enableAutoTogglePreview();
if (!getTaskData().isNew()) {
getEditor().showPreview();
@@ -179,9 +180,8 @@ public class TaskEditorDescriptionPart extends TaskEditorRichTextPart {
try {
IRepositoryQuery duplicatesQuery = getDuplicateQuery(duplicateDetectorName);
if (duplicatesQuery != null) {
- SearchHitCollector collector = new SearchHitCollector(TasksUiInternal.getTaskList(),
- getTaskEditorPage().getTaskRepository(), duplicatesQuery);
- NewSearchUI.runQueryInBackground(collector);
+ SearchUtil.runSearchQuery(TasksUiInternal.getTaskList(), getTaskEditorPage().getTaskRepository(),
+ duplicatesQuery);
} else {
TasksUiInternal.displayStatus(Messages.TaskEditorDescriptionPart_Duplicate_Detection_Failed,
new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN,
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/CreateQueryFromSearchAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/CreateQueryFromSearchAction.java
deleted file mode 100644
index cd9dcbb1c..000000000
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/CreateQueryFromSearchAction.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2008 Tasktop Technologies and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Balazs Brinkus - initial API and implementation
- * Tasktop Technologies - improvements
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.tasks.ui.search;
-
-import java.text.MessageFormat;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.dialogs.InputDialog;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.window.Window;
-import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery;
-import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
-import org.eclipse.mylyn.internal.tasks.ui.views.TaskListView;
-import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector;
-import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
-import org.eclipse.mylyn.tasks.core.ITask;
-import org.eclipse.mylyn.tasks.ui.TasksUi;
-import org.eclipse.mylyn.tasks.ui.TasksUiImages;
-import org.eclipse.search.ui.ISearchQuery;
-import org.eclipse.search.ui.NewSearchUI;
-import org.eclipse.ui.PlatformUI;
-
-/**
- * Used for add the last search result to the Task List.
- *
- * @author Balazs Brinkus (bug 172699)
- * @author Mik Kersten
- */
-public class CreateQueryFromSearchAction extends Action {
-
- /** The view this action works on */
- private final RepositorySearchResultView resultView;
-
- /**
- * Constructor
- *
- * @param text
- * The text for this action
- * @param resultView
- * The <code>RepositorySearchResultView</code> this action works on
- */
- public CreateQueryFromSearchAction(String text, RepositorySearchResultView resultView) {
- setText(text);
- setImageDescriptor(TasksUiImages.QUERY_NEW);
- this.resultView = resultView;
- }
-
- /**
- * Add the search result to the Task List.
- */
- @Override
- public void run() {
- ISelection selection = resultView.getViewer().getSelection();
- if (selection instanceof IStructuredSelection) {
- IStructuredSelection structuredSelection = (IStructuredSelection) selection;
- if (structuredSelection.getFirstElement() instanceof ITask) {
- ISearchQuery[] queries = NewSearchUI.getQueries();
- ITask task = (ITask) structuredSelection.getFirstElement();
- AbstractRepositoryConnector connector = TasksUi.getRepositoryManager().getRepositoryConnector(
- task.getConnectorKind());
- if (queries.length != 0 && connector != null) {
- SearchHitCollector searchHitCollector = (SearchHitCollector) queries[0];
- IRepositoryQuery query = searchHitCollector.getRepositoryQuery();
- InputDialog dialog = new InputDialog(PlatformUI.getWorkbench()
- .getActiveWorkbenchWindow()
- .getShell(), Messages.CreateQueryFromSearchAction_CLEAR_QUERY, MessageFormat.format(
- Messages.CreateQueryFromSearchAction_Name_of_query_to_be_added_to_the_X, TaskListView.LABEL_VIEW)
- + ": ", "", null); //$NON-NLS-1$ //$NON-NLS-2$
- int dialogResult = dialog.open();
- if (dialogResult == Window.OK) {
- query.setSummary(dialog.getValue());
- TasksUiInternal.getTaskList().addQuery((RepositoryQuery) query);
- TasksUiInternal.synchronizeQuery(connector, (RepositoryQuery) query, null, true);
- }
- }
- }
- }
- }
-
-}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/Messages.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/Messages.java
deleted file mode 100644
index 2aa243994..000000000
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/Messages.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2009 Tasktop Technologies and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Tasktop Technologies - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.tasks.ui.search;
-
-import org.eclipse.osgi.util.NLS;
-
-public class Messages extends NLS {
- private static final String BUNDLE_NAME = "org.eclipse.mylyn.internal.tasks.ui.search.messages"; //$NON-NLS-1$
-
- static {
- // load message values from bundle file
- reloadMessages();
- }
-
- public static void reloadMessages() {
- NLS.initializeMessages(BUNDLE_NAME, Messages.class);
- }
-
- public static String CreateQueryFromSearchAction_CLEAR_QUERY;
-
- public static String CreateQueryFromSearchAction_Name_of_query_to_be_added_to_the_X;
-
- public static String RepositorySearchResult_Task_search_X_matches;
-
- public static String RepositorySearchResult_Task_search_1_match;
-
- public static String RepositorySearchResultView_Add_to_X_Category;
-
- public static String RepositorySearchResultView_Create_Query_from_Search_;
-
- public static String RepositorySearchResultView_Filter_Completed_Tasks;
-
- public static String RepositorySearchResultView_Group_By_Owner;
-
- public static String RepositorySearchResultView_Open_in_Editor;
-
- public static String RepositorySearchResultView_Open_Search_with_Browser_Label;
-
- public static String RepositorySearchResultView_Refine_Search_;
-
- public static String SearchHitCollector_Max_allowed_number_of_hits_returned_exceeded;
-
- public static String SearchHitCollector_Querying_Repository_;
-
- public static String SearchHitCollector_Repository_connector_could_not_be_found;
-
- public static String SearchHitCollector_Search_failed;
-
- public static String SearchHitCollector_Search_cancelled;
-
- public static String SearchHitCollector_Search_returned_maximum_number_of_hits;
-
- public static String SearchResultsLabelProvider_OF;
-
- public static String SearchResultTreeContentProvider_Complete;
-
- public static String SearchResultTreeContentProvider_Incomplete;
-
- public static String SearchResultTreeContentProvider__unknown_;
-
- public static String SearchResultSortAction_Sort_Label;
-}
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 99b007a01..000000000
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/OpenSearchResultAction.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2009 Tasktop Technologies and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Tasktop Technologies - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.mylyn.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.mylyn.internal.tasks.core.AbstractTask;
-import org.eclipse.mylyn.tasks.ui.TasksUiUtil;
-
-/**
- * This class is used to open a bug report in an editor.
- */
-public class OpenSearchResultAction extends Action {
-
- /** The view this action works on */
- private final 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<AbstractTask> it = selection.iterator(); it.hasNext();) {
- AbstractTask repositoryHit = it.next();
- TasksUiUtil.openTask(repositoryHit.getRepositoryUrl(), repositoryHit.getTaskId(),
- repositoryHit.getUrl());
- }
-
- }
- }
-
-}
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 4de34d9ca..000000000
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/RepositorySearchResult.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2008 Tasktop Technologies and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Tasktop Technologies - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.tasks.ui.search;
-
-import java.text.MessageFormat;
-
-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;
-
-/**
- * Captures the results of a task repository search.
- *
- * @author Rob Elves
- * @see org.eclipse.search.ui.text.AbstractTextSearchResult
- * @since 2.0
- */
-public class RepositorySearchResult extends AbstractTextSearchResult {
-
- /**
- * The query producing this result.
- */
- private final ISearchQuery repositoryQuery;
-
- /**
- * Constructor for <code>RepositorySearchResult</code> class.
- *
- * @param query
- * <code>AbstractRepositorySearchQuery</code> that is producing this result.
- */
- public RepositorySearchResult(ISearchQuery query) {
- repositoryQuery = query;
- }
-
- @Override
- public IEditorMatchAdapter getEditorMatchAdapter() {
- 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;
- }
-
- 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 Messages.RepositorySearchResult_Task_search_1_match;
- }
-
- /**
- * Get the plural label for the number of results
- *
- * @return The plural label
- */
- protected String getPluralLabel() {
- return MessageFormat.format(Messages.RepositorySearchResult_Task_search_X_matches, getMatchCount());
- }
-
- public String getTooltip() {
- return getLabel();
- }
-
- public ImageDescriptor getImageDescriptor() {
- return SearchPluginImages.DESC_OBJ_TSEARCH_DPDN;
- }
-
- 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 cb7487522..000000000
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/RepositorySearchResultView.java
+++ /dev/null
@@ -1,431 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2009 Tasktop Technologies and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Tasktop Technologies - initial API and implementation
- * Frank Becker - improvements
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.tasks.ui.search;
-
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.util.LocalSelectionTransfer;
-import org.eclipse.jface.viewers.DecoratingLabelProvider;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.StructuredViewer;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerFilter;
-import org.eclipse.mylyn.internal.provisional.commons.ui.EnhancedFilteredTree;
-import org.eclipse.mylyn.internal.provisional.commons.ui.SubstringPatternFilter;
-import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
-import org.eclipse.mylyn.internal.tasks.core.AbstractTaskCategory;
-import org.eclipse.mylyn.internal.tasks.core.TaskGroup;
-import org.eclipse.mylyn.internal.tasks.core.UnmatchedTaskContainer;
-import org.eclipse.mylyn.internal.tasks.ui.actions.OpenTaskSearchAction;
-import org.eclipse.mylyn.internal.tasks.ui.actions.OpenWithBrowserAction;
-import org.eclipse.mylyn.internal.tasks.ui.search.SearchResultTreeContentProvider.GroupBy;
-import org.eclipse.mylyn.internal.tasks.ui.util.TaskDragSourceListener;
-import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
-import org.eclipse.mylyn.internal.tasks.ui.views.TaskListToolTip;
-import org.eclipse.mylyn.internal.tasks.ui.views.TaskListView;
-import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
-import org.eclipse.mylyn.tasks.core.ITask;
-import org.eclipse.mylyn.tasks.ui.ITasksUiConstants;
-import org.eclipse.mylyn.tasks.ui.TasksUiImages;
-import org.eclipse.search.ui.IContextMenuConstants;
-import org.eclipse.search.ui.ISearchQuery;
-import org.eclipse.search.ui.ISearchResult;
-import org.eclipse.search.ui.text.AbstractTextSearchViewPage;
-import org.eclipse.search.ui.text.Match;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.FileTransfer;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Layout;
-import org.eclipse.ui.IMemento;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.dialogs.FilteredTree;
-import org.eclipse.ui.part.IShowInTargetList;
-
-/**
- * Displays the results of a Repository search.
- *
- * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage
- * @author Rob Elves
- * @author Mik Kersten
- * @author Shawn Minto
- * @author Frank Becker
- * @author Steffen Pingel
- */
-public class RepositorySearchResultView extends AbstractTextSearchViewPage implements IAdaptable {
-
- private class GroupingAction extends Action {
-
- private final GroupBy groupBy;
-
- public GroupingAction(String text, GroupBy groupBy) {
- super(text, IAction.AS_CHECK_BOX);
- this.groupBy = groupBy;
- groupingActions.add(this);
- }
-
- @Override
- public void run() {
- for (GroupingAction action : groupingActions) {
- action.setChecked(false);
- }
-
- SearchResultTreeContentProvider contentProvider = (SearchResultTreeContentProvider) getViewer().getContentProvider();
- if (contentProvider.getSelectedGroup() == groupBy) {
- contentProvider.setSelectedGroup(GroupBy.NONE);
- } else {
- contentProvider.setSelectedGroup(groupBy);
- setChecked(true);
- }
- getViewer().refresh();
- }
- }
-
- private class FilteringAction extends Action {
-
- private final ViewerFilter filter;
-
- public FilteringAction(String text, ViewerFilter filter) {
- super(text, IAction.AS_CHECK_BOX);
- this.filter = filter;
- filterActions.add(this);
- }
-
- @Override
- public void runWithEvent(Event event) {
- if (isChecked()) {
- getViewer().addFilter(filter);
- } else {
- getViewer().removeFilter(filter);
- }
- }
- }
-
- private static final String MEMENTO_KEY_SORT = "sort"; //$NON-NLS-1$
-
- private SearchResultContentProvider searchResultProvider;
-
- private final OpenSearchResultAction openInEditorAction;
-
- private final CreateQueryFromSearchAction createQueryAction;
-
- private final Action refineSearchAction;
-
- private static final String[] SHOW_IN_TARGETS = new String[] { ITasksUiConstants.ID_VIEW_TASKS };
-
- private TaskListToolTip toolTip;
-
- private final List<GroupingAction> groupingActions;
-
- private final List<FilteringAction> filterActions;
-
- private final OpenWithBrowserAction openSearchWithBrowserAction;
-
- private final SearchResultSorter searchResultSorter;
-
- private SearchResultSortAction sortByDialogAction;
-
- private static final IShowInTargetList SHOW_IN_TARGET_LIST = new IShowInTargetList() {
- public String[] getShowInTargetIds() {
- return SHOW_IN_TARGETS;
- }
- };
-
- public RepositorySearchResultView() {
- // Only use the table layout.
- super(FLAG_LAYOUT_TREE);
-
- openInEditorAction = new OpenSearchResultAction(Messages.RepositorySearchResultView_Open_in_Editor, this);
- createQueryAction = new CreateQueryFromSearchAction(
- Messages.RepositorySearchResultView_Create_Query_from_Search_, this);
- refineSearchAction = new OpenTaskSearchAction();
- refineSearchAction.setText(Messages.RepositorySearchResultView_Refine_Search_);
- openSearchWithBrowserAction = new OpenWithBrowserAction();
- openSearchWithBrowserAction.setText(Messages.RepositorySearchResultView_Open_Search_with_Browser_Label);
-
- groupingActions = new ArrayList<GroupingAction>();
- new GroupingAction(Messages.RepositorySearchResultView_Group_By_Owner, GroupBy.OWNER);
-// new GroupingAction(Messages.RepositorySearchResultView_Group_By_Complete, GroupBy.COMPLETION);
-
- filterActions = new ArrayList<FilteringAction>();
- new FilteringAction(Messages.RepositorySearchResultView_Filter_Completed_Tasks, new ViewerFilter() {
- @Override
- public boolean select(Viewer viewer, Object parentElement, Object element) {
- if (element instanceof ITask) {
- return !((ITask) element).isCompleted();
- } else if (element instanceof TaskGroup) {
- TaskGroup taskGroup = (TaskGroup) element;
- return taskGroup.getHandleIdentifier().equals("group-incompleteIncomplete"); //$NON-NLS-1$
- }
- return true;
- }
- });
-
- // construct early since to be ready when restoreState() is invoked
- searchResultSorter = new SearchResultSorter();
- }
-
- @Override
- protected void elementsChanged(Object[] objects) {
- if (searchResultProvider != null) {
- searchResultProvider.elementsChanged(objects);
- getViewer().refresh();
- }
- }
-
- @Override
- protected void clear() {
- if (searchResultProvider != null) {
- searchResultProvider.clear();
- getViewer().refresh();
- }
- }
-
- // Allows the inherited method "getViewer" to be accessed publicly.
- @Override
- public StructuredViewer getViewer() {
- return super.getViewer();
- }
-
- @Override
- protected void configureTreeViewer(TreeViewer viewer) {
- viewer.setUseHashlookup(true);
- searchResultProvider = new SearchResultTreeContentProvider();
- viewer.setContentProvider(searchResultProvider);
-
- DecoratingLabelProvider labelProvider = new DecoratingLabelProvider(new SearchResultsLabelProvider(
- searchResultProvider, viewer), PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator());
- viewer.setLabelProvider(labelProvider);
- viewer.setSorter(searchResultSorter);
-
- Transfer[] dragTypes = new Transfer[] { LocalSelectionTransfer.getTransfer(), FileTransfer.getInstance() };
-
- getViewer().addDragSupport(DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK, dragTypes,
- new TaskDragSourceListener(getViewer()));
-
- sortByDialogAction = new SearchResultSortAction(this);
-
- toolTip = new TaskListToolTip(viewer.getControl());
- }
-
- @Override
- protected TreeViewer createTreeViewer(Composite parent) {
- // create a filtered tree
- Composite treeComposite = parent;
- Layout parentLayout = parent.getLayout();
- if (!(parentLayout instanceof GridLayout)) {
- treeComposite = new Composite(parent, SWT.NONE);
- GridLayout layout = new GridLayout();
- layout.marginHeight = 0;
- layout.marginWidth = 0;
- treeComposite.setLayout(layout);
- }
-
- FilteredTree searchTree = new EnhancedFilteredTree(treeComposite, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL,
- new SubstringPatternFilter(), true);
- return searchTree.getViewer();
- }
-
- @Override
- protected void configureTableViewer(TableViewer viewer) {
-// viewer.setUseHashlookup(true);
-// String[] columnNames = new String[] { "Summary" };
-// TableColumn[] columns = new TableColumn[columnNames.length];
-// int[] columnWidths = new int[] { 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());
-// }
-// });
-// }
-//
-// IThemeManager themeManager = getSite().getWorkbenchWindow().getWorkbench().getThemeManager();
-// Color categoryBackground = themeManager.getCurrentTheme().getColorRegistry().get(
-// TaskListColorsAndFonts.THEME_COLOR_TASKLIST_CATEGORY);
-//
-// SearchViewTableLabelProvider taskListTableLabelProvider = new SearchViewTableLabelProvider(
-// new TaskElementLabelProvider(true),
-// 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(currentSortOrder);
-//
-// taskContentProvider = (SearchResultContentProvider) viewer.getContentProvider();
- }
-
- @Override
- public void dispose() {
- toolTip.dispose();
- super.dispose();
- }
-
- @SuppressWarnings("rawtypes")
- public Object getAdapter(Class adapter) {
- return getAdapterDelegate(adapter);
- }
-
- private Object getAdapterDelegate(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 {
- AbstractTask repositoryHit = (AbstractTask) match.getElement();
- TasksUiInternal.refreshAndOpenTaskListElement(repositoryHit);
- }
-
- @Override
- protected void fillContextMenu(IMenuManager menuManager) {
- super.fillContextMenu(menuManager);
-
- // open actions
- menuManager.appendToGroup(IContextMenuConstants.GROUP_OPEN, openInEditorAction);
-
- // Add to Task List menu
- // HACK: this should be a contribution
- final MenuManager subMenuManager = new MenuManager(MessageFormat.format(
- Messages.RepositorySearchResultView_Add_to_X_Category, TaskListView.LABEL_VIEW));
- List<AbstractTaskCategory> categories = new ArrayList<AbstractTaskCategory>(TasksUiInternal.getTaskList()
- .getCategories());
- Collections.sort(categories);
- for (final AbstractTaskCategory category : categories) {
- if (!(category instanceof UnmatchedTaskContainer)) {//.equals(TasksUiPlugin.getTaskList().getArchiveContainer())) {
- Action action = new Action() {
- @Override
- public void run() {
- moveToCategory(category);
- }
- };
- String text = category.getSummary();
- action.setText(text);
- action.setImageDescriptor(TasksUiImages.CATEGORY);
- subMenuManager.add(action);
- }
- }
- menuManager.appendToGroup(IContextMenuConstants.GROUP_OPEN, subMenuManager);
-
- // search actions
-
- menuManager.appendToGroup(IContextMenuConstants.GROUP_SEARCH, createQueryAction);
- menuManager.appendToGroup(IContextMenuConstants.GROUP_SEARCH, refineSearchAction);
- menuManager.appendToGroup(IContextMenuConstants.GROUP_SEARCH, openSearchWithBrowserAction);
-
- menuManager.appendToGroup(IContextMenuConstants.GROUP_VIEWER_SETUP, sortByDialogAction);
- for (Action action : groupingActions) {
- menuManager.appendToGroup(IContextMenuConstants.GROUP_VIEWER_SETUP, action);
- }
- for (Action action : filterActions) {
- menuManager.appendToGroup(IContextMenuConstants.GROUP_VIEWER_SETUP, action);
- }
-
- }
-
- private void moveToCategory(AbstractTaskCategory category) {
- StructuredSelection selection = (StructuredSelection) this.getViewer().getSelection();
- for (Iterator<?> iterator = selection.iterator(); iterator.hasNext();) {
- Object selectedObject = iterator.next();
- if (selectedObject instanceof ITask) {
- ITask task = (ITask) selectedObject;
- TasksUiInternal.getTaskList().addTask(task, category);
- }
- }
- }
-
- @Override
- public void createControl(Composite parent) {
- super.createControl(parent);
- IMenuManager menuManager = getSite().getActionBars().getMenuManager();
- for (Action action : groupingActions) {
- menuManager.appendToGroup(IContextMenuConstants.GROUP_VIEWER_SETUP, action);
- }
- menuManager.appendToGroup(IContextMenuConstants.GROUP_VIEWER_SETUP, new Separator());
- for (Action action : filterActions) {
- menuManager.appendToGroup(IContextMenuConstants.GROUP_VIEWER_SETUP, action);
- }
- }
-
- @Override
- public void setInput(ISearchResult newSearch, Object viewState) {
- super.setInput(newSearch, viewState);
- if (newSearch != null) {
- ISearchQuery query = ((RepositorySearchResult) newSearch).getQuery();
- IRepositoryQuery repositoryQuery = ((SearchHitCollector) query).getRepositoryQuery();
- openSearchWithBrowserAction.selectionChanged(new StructuredSelection(repositoryQuery));
- } else {
- openSearchWithBrowserAction.selectionChanged(StructuredSelection.EMPTY);
- }
- }
-
- public SearchResultSorter getSorter() {
- return searchResultSorter;
- }
-
- @Override
- public void restoreState(IMemento memento) {
- super.restoreState(memento);
- if (memento != null) {
- IMemento child = memento.getChild(MEMENTO_KEY_SORT);
- if (child != null && searchResultSorter != null) {
- searchResultSorter.getTaskComparator().restoreState(child);
- }
- }
- }
-
- @Override
- public void saveState(IMemento memento) {
- super.saveState(memento);
- if (memento != null) {
- IMemento child = memento.createChild(MEMENTO_KEY_SORT);
- if (searchResultSorter != null) {
- searchResultSorter.getTaskComparator().saveState(child);
- }
- }
- }
-
-}
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 0da8723d9..000000000
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchHitCollector.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2008 Tasktop Technologies and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Tasktop Technologies - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.tasks.ui.search;
-
-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.mylyn.commons.net.Policy;
-import org.eclipse.mylyn.internal.tasks.core.ITaskList;
-import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
-import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
-import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector;
-import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
-import org.eclipse.mylyn.tasks.core.ITask;
-import org.eclipse.mylyn.tasks.core.RepositoryStatus;
-import org.eclipse.mylyn.tasks.core.TaskRepository;
-import org.eclipse.mylyn.tasks.core.data.TaskData;
-import org.eclipse.mylyn.tasks.core.data.TaskDataCollector;
-import org.eclipse.mylyn.tasks.ui.TasksUi;
-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;
-import org.eclipse.ui.PlatformUI;
-
-/**
- * Used for returning results from Eclipse Search view. Collects results of a repository search.
- *
- * @author Rob Elves
- * @author Steffen Pingel
- */
-public class SearchHitCollector extends TaskDataCollector implements ISearchQuery {
-
- private final ITaskList taskList;
-
- private final TaskRepository repository;
-
- private final IRepositoryQuery repositoryQuery;
-
- private final RepositorySearchResult searchResult;
-
- private AbstractRepositoryConnector connector;
-
- public SearchHitCollector(ITaskList tasklist, TaskRepository repository, IRepositoryQuery repositoryQuery) {
- this.taskList = tasklist;
- this.repository = repository;
- this.repositoryQuery = repositoryQuery;
- this.searchResult = new RepositorySearchResult(this);
- }
-
- public void aboutToStart() {
- searchResult.removeAll();
- PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
- public void run() {
- NewSearchUI.activateSearchResultView();
- }
- });
- }
-
- @Override
- public void accept(TaskData taskData) {
- ITask task = taskList.getTask(repository.getRepositoryUrl(), taskData.getTaskId());
- if (task == null) {
- task = TasksUi.getRepositoryModel().createTask(repository, taskData.getTaskId());
- if (connector != null) {
- connector.updateTaskFromTaskData(repository, task, taskData);
- }
- }
- searchResult.addMatch(new Match(task, 0, 0));
- }
-
- public String getLabel() {
- return Messages.SearchHitCollector_Querying_Repository_;
- }
-
- public boolean canRerun() {
- return true;
- }
-
- public boolean canRunInBackground() {
- return true;
- }
-
- public ISearchResult getSearchResult() {
- return searchResult;
- }
-
- public IStatus run(IProgressMonitor monitor) throws OperationCanceledException {
- monitor = Policy.monitorFor(monitor);
-
- aboutToStart();
-
- if (monitor.isCanceled()) {
- throw new OperationCanceledException(Messages.SearchHitCollector_Search_cancelled);
- }
- connector = TasksUi.getRepositoryManager().getRepositoryConnector(repositoryQuery.getConnectorKind());
- if (connector != null) {
- final IStatus status = connector.performQuery(repository, repositoryQuery, this, null, monitor);
- if (!status.isOK()) {
- PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
- public void run() {
- TasksUiInternal.displayStatus(Messages.SearchHitCollector_Search_failed, status);
- }
- });
- } else {
- if (searchResult.getMatchCount() >= TaskDataCollector.MAX_HITS) {
- PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
- public void run() {
- TasksUiInternal.displayStatus(Messages.SearchHitCollector_Search_returned_maximum_number_of_hits,
- RepositoryStatus.createStatus(repository.getRepositoryUrl(), IStatus.WARNING,
- TasksUiPlugin.ID_PLUGIN, Messages.SearchHitCollector_Max_allowed_number_of_hits_returned_exceeded));
- }
- });
- }
- }
- } else {
- return new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, IStatus.OK,
- Messages.SearchHitCollector_Repository_connector_could_not_be_found, null);
- }
-
- return Status.OK_STATUS;
- }
-
- public IRepositoryQuery getRepositoryQuery() {
- return repositoryQuery;
- }
-
-}
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 98cb03481..000000000
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultContentProvider.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2008 Tasktop Technologies and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Tasktop Technologies - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.tasks.ui.search;
-
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.Viewer;
-
-/**
- * @author Rob Elves (moved into task.ui)
- * @see org.eclipse.jface.viewers.IContentProvider
- */
-public abstract class SearchResultContentProvider implements ITreeContentProvider {
-
- /** 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/SearchResultSortAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultSortAction.java
deleted file mode 100644
index 46a66fcb2..000000000
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultSortAction.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2009 Tasktop Technologies and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Tasktop Technologies - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.tasks.ui.search;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.window.Window;
-import org.eclipse.mylyn.internal.tasks.ui.dialogs.TaskCompareDialog;
-
-/**
- * @author Steffen Pingel
- */
-public class SearchResultSortAction extends Action {
-
- private final RepositorySearchResultView view;
-
- public SearchResultSortAction(RepositorySearchResultView view) {
- super(Messages.SearchResultSortAction_Sort_Label);
- this.view = view;
- setEnabled(true);
- }
-
- @Override
- public void run() {
- TaskCompareDialog dialog = new TaskCompareDialog(view.getSite(), view.getSorter().getTaskComparator());
- if (dialog.open() == Window.OK) {
- view.getViewer().refresh();
- }
- }
-}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultSorter.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultSorter.java
deleted file mode 100644
index 07d72c226..000000000
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultSorter.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2009 Tasktop Technologies and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Tasktop Technologies - initial API and implementation
- * Frank Becker - fix for bug 216150
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.tasks.ui.search;
-
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerSorter;
-import org.eclipse.mylyn.internal.tasks.ui.util.TaskComparator;
-import org.eclipse.mylyn.tasks.core.ITask;
-
-/**
- * Sorts search results.
- *
- * @see TaskComparator
- * @author Rob Elves
- * @author Frank Becker
- */
-public class SearchResultSorter extends ViewerSorter {
-
- private final TaskComparator taskComparator;
-
- public SearchResultSorter() {
- taskComparator = new TaskComparator();
- }
-
- @Override
- public int compare(Viewer viewer, Object e1, Object e2) {
- if (e1 instanceof ITask && e2 instanceof ITask) {
- ITask entry1 = (ITask) e1;
- ITask entry2 = (ITask) e2;
- return taskComparator.compare(entry1, entry2);
- } else {
- return super.compare(viewer, e1, e2);
- }
- }
-
- public TaskComparator getTaskComparator() {
- return taskComparator;
- }
-
-}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultTreeContentProvider.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultTreeContentProvider.java
deleted file mode 100644
index 0afc59d6f..000000000
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultTreeContentProvider.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2008 Tasktop Technologies and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Tasktop Technologies - initial API and implementation
- * Frank Becker - improvements
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.tasks.ui.search;
-
-import java.util.HashMap;
-import java.util.LinkedHashSet;
-import java.util.Map;
-import java.util.Set;
-
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
-import org.eclipse.mylyn.internal.tasks.core.Person;
-import org.eclipse.mylyn.internal.tasks.core.TaskGroup;
-import org.eclipse.mylyn.tasks.core.ITask;
-import org.eclipse.mylyn.tasks.core.ITaskContainer;
-
-/**
- * This implementation of <code>SearchResultContentProvider</code> is used for the table view of a Bugzilla search
- * result.
- *
- * @author Rob Elves (moved into task.ui)
- * @author Mik Kersten
- */
-public class SearchResultTreeContentProvider extends SearchResultContentProvider {
-
- private final Set<Object> elements = new LinkedHashSet<Object>();
-
- private final Map<String, Person> owners = new HashMap<String, Person>();
-
- private final Map<String, TaskGroup> completeState = new HashMap<String, TaskGroup>();
-
- public enum GroupBy {
- NONE, OWNER, COMPLETION;
- }
-
- private GroupBy selectedGroup;
-
- public SearchResultTreeContentProvider() {
- }
-
- @Override
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- if (newInput instanceof RepositorySearchResult) {
- searchResult = (RepositorySearchResult) newInput;
- clear();
- elementsChanged(searchResult.getElements());
- }
- }
-
- /**
- * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
- */
- public Object[] getElements(Object inputElement) {
- if (inputElement == searchResult) {
- if (selectedGroup == GroupBy.OWNER) {
- return owners.values().toArray();
- } else if (selectedGroup == GroupBy.COMPLETION) {
- return completeState.values().toArray();
- } else {
- return elements.toArray();
- }
- } else {
- return EMPTY_ARR;
- }
- }
-
- public Object[] getChildren(Object parent) {
- if (parent instanceof TaskGroup || parent instanceof Person) {
- return ((ITaskContainer) parent).getChildren().toArray();
- } else {
- return EMPTY_ARR;
- }
- }
-
- public Object getParent(Object element) {
- return null;
- }
-
- public boolean hasChildren(Object element) {
- return getChildren(element).length > 0;
- }
-
- @Override
- public void elementsChanged(Object[] updatedElements) {
- for (Object object : updatedElements) {
- boolean added = elements.add(object);
- if (added && object instanceof ITask) {
- AbstractTask task = ((AbstractTask) object);
- String owner = task.getOwner();
- if (owner == null) {
- owner = Messages.SearchResultTreeContentProvider__unknown_;
- }
- Person person = owners.get(owner);
- if (person == null) {
- person = new Person(owner, task.getConnectorKind(), task.getRepositoryUrl());
- owners.put(owner, person);
- }
- person.internalAddChild(task);
-
- TaskGroup completeIncomplete = null;
- if (task.isCompleted()) {
- completeIncomplete = completeState.get(Messages.SearchResultTreeContentProvider_Complete);
- if (completeIncomplete == null) {
- completeIncomplete = new TaskGroup("group-complete", Messages.SearchResultTreeContentProvider_Complete, GroupBy.COMPLETION.name()); //$NON-NLS-1$
- completeState.put(Messages.SearchResultTreeContentProvider_Complete, completeIncomplete);
- }
- } else {
- completeIncomplete = completeState.get(Messages.SearchResultTreeContentProvider_Incomplete);
- if (completeIncomplete == null) {
- completeIncomplete = new TaskGroup("group-incomplete", Messages.SearchResultTreeContentProvider_Incomplete, GroupBy.COMPLETION.name()); //$NON-NLS-1$
- completeState.put(Messages.SearchResultTreeContentProvider_Incomplete, completeIncomplete);
- }
- }
- completeIncomplete.internalAddChild(task);
- }
- }
- }
-
- @Override
- public void clear() {
- elements.clear();
- owners.clear();
- completeState.clear();
- }
-
- public GroupBy getSelectedGroup() {
- return selectedGroup;
- }
-
- public void setSelectedGroup(GroupBy selectedGroup) {
- this.selectedGroup = selectedGroup;
- }
-
-}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultsLabelProvider.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultsLabelProvider.java
deleted file mode 100644
index e8a462c55..000000000
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchResultsLabelProvider.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2009 Tasktop Technologies and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Tasktop Technologies - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.tasks.ui.search;
-
-import java.text.MessageFormat;
-
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.ViewerFilter;
-import org.eclipse.mylyn.internal.tasks.core.Person;
-import org.eclipse.mylyn.internal.tasks.core.TaskGroup;
-import org.eclipse.mylyn.tasks.ui.TaskElementLabelProvider;
-
-/**
- * @author Mik Kersten
- * @author Steffen Pingel
- */
-public class SearchResultsLabelProvider extends TaskElementLabelProvider {
-
- private final SearchResultContentProvider contentProvider;
-
- private final TreeViewer viewer;
-
- public SearchResultsLabelProvider(SearchResultContentProvider contentProvider, TreeViewer viewer) {
- super(true);
- this.contentProvider = contentProvider;
- this.viewer = viewer;
- }
-
- @Override
- public String getText(Object object) {
- if (object instanceof TaskGroup || object instanceof Person) {
- Object[] children = contentProvider.getChildren(object);
- ViewerFilter[] filters = viewer.getFilters();
- int filtered = 0;
- if (filters.length > 0) {
- for (Object child : children) {
- for (ViewerFilter filter : filters) {
- if (!filter.select(viewer, object, child)) {
- filtered++;
- break; //don't count a child more the once
- }
- }
- }
- }
- if (filtered > 0) {
- return super.getText(object)
- + " (" //$NON-NLS-1$
- + MessageFormat.format(Messages.SearchResultsLabelProvider_OF, (children.length - filtered),
- children.length) + ")"; //$NON-NLS-1$
- } else {
- return super.getText(object) + " (" + children.length + ")"; //$NON-NLS-1$ //$NON-NLS-2$
- }
- } else {
- return super.getText(object);
- }
- }
-
-}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchScoreComputerAdapterFactory.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchScoreComputerAdapterFactory.java
deleted file mode 100644
index 87bd5f1f0..000000000
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchScoreComputerAdapterFactory.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2008 Willian Mitsuda and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Willian Mitsuda - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.tasks.ui.search;
-
-import org.eclipse.core.runtime.IAdapterFactory;
-import org.eclipse.mylyn.internal.tasks.core.AbstractTaskContainer;
-import org.eclipse.mylyn.internal.tasks.ui.TaskSearchPage;
-import org.eclipse.mylyn.tasks.core.IRepositoryElement;
-import org.eclipse.search.ui.ISearchPageScoreComputer;
-
-/**
- * Implements a {@link IAdapterFactory} for {@link ISearchPageScoreComputer}s which ranks {@link AbstractTaskContainer}s
- * high for the task search page
- *
- * @author Willian Mitsuda
- */
-public class SearchScoreComputerAdapterFactory implements IAdapterFactory {
-
- private final ISearchPageScoreComputer computer = new ISearchPageScoreComputer() {
-
- public int computeScore(String pageId, Object input) {
- if (!TaskSearchPage.ID.equals(pageId)) {
- return ISearchPageScoreComputer.UNKNOWN;
- }
- if (input instanceof IRepositoryElement) {
- return 100;
- }
- return ISearchPageScoreComputer.LOWEST;
- }
-
- };
-
- @SuppressWarnings("rawtypes")
- public Object getAdapter(Object adaptableObject, Class adapterType) {
- if (ISearchPageScoreComputer.class.equals(adapterType)) {
- return computer;
- }
- return null;
- }
-
- @SuppressWarnings("rawtypes")
- public Class[] getAdapterList() {
- return new Class[] { ISearchPageScoreComputer.class };
- }
-
-}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchUtil.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchUtil.java
new file mode 100644
index 000000000..aa409cd10
--- /dev/null
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/SearchUtil.java
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Tasktop Technologies and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Flavio Donze - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.tasks.ui.search;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.mylyn.commons.core.StatusHandler;
+import org.eclipse.mylyn.internal.tasks.core.ITaskList;
+import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
+import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
+import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.ui.IWorkbenchWindow;
+
+/**
+ * Utility to handle search specific tasks<br/>
+ * Handles the searchProvider extension point
+ *
+ * @author Flavio Donze
+ */
+public class SearchUtil {
+
+ private static class NullSearchProvider extends AbstractSearchProvider {
+
+ @Override
+ public void openSearchDialog(IWorkbenchWindow window) {
+ }
+
+ @Override
+ public void runSearchQuery(ITaskList tasklist, TaskRepository repository, IRepositoryQuery query,
+ boolean activateResultView) {
+ }
+
+ }
+
+ /** searchProvider extension point id */
+ private static final String EXTENSION_SEARCH_PROVIDER = "org.eclipse.mylyn.tasks.ui.searchProvider"; //$NON-NLS-1$
+
+ /** searchProvider attribute 'class' */
+ private static final String ATTR_CLASS = "class"; //$NON-NLS-1$
+
+ private static AbstractSearchProvider provider;
+
+ /**
+ * Creates the search provider according to the defined extension point. Not synchronized since all invocations are
+ * from UI thread.
+ */
+ private static final AbstractSearchProvider getSearchProvider() {
+ if (provider != null) {
+ return provider;
+ }
+
+ try {
+ IExtensionRegistry registry = Platform.getExtensionRegistry();
+
+ IConfigurationElement[] configurationElements = registry.getConfigurationElementsFor(EXTENSION_SEARCH_PROVIDER);
+ if (configurationElements.length > 0) {
+ if (configurationElements.length > 1) {
+ StatusHandler.log(new Status(IStatus.WARNING, TasksUiPlugin.ID_PLUGIN,
+ "More than one search provider was registered.")); //$NON-NLS-1$
+ }
+
+ IConfigurationElement providerConfiguration = configurationElements[0];
+ Object object = providerConfiguration.createExecutableExtension(ATTR_CLASS);
+ if (object instanceof AbstractSearchProvider) {
+ StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN,
+ "Specified search provider is not of type AbstractSearchProvider.")); //$NON-NLS-1$
+ provider = (AbstractSearchProvider) object;
+ return provider;
+ }
+ } else {
+ StatusHandler.log(new Status(IStatus.WARNING, TasksUiPlugin.ID_PLUGIN,
+ "No search provider was registed. Tasks search is not available.")); //$NON-NLS-1$
+ }
+ } catch (Exception e) {
+ StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN,
+ "Loading of searchProvider extension failed.", e)); //$NON-NLS-1$
+ }
+ if (provider == null) {
+ provider = new NullSearchProvider();
+ }
+ return provider;
+ }
+
+ public static boolean supportsTaskSearch() {
+ return !(getSearchProvider() instanceof NullSearchProvider);
+ }
+
+ public static void openSearchDialog(IWorkbenchWindow window) {
+ getSearchProvider().openSearchDialog(window);
+ }
+
+ public static void runSearchQuery(ITaskList tasklist, TaskRepository repository, IRepositoryQuery repositoryQuery) {
+ getSearchProvider().runSearchQuery(tasklist, repository, repositoryQuery, false);
+ }
+
+ public static void runSearchQuery(ITaskList tasklist, TaskRepository repository, IRepositoryQuery repositoryQuery,
+ boolean activateResultView) {
+ getSearchProvider().runSearchQuery(tasklist, repository, repositoryQuery, activateResultView);
+ }
+
+}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/StackTraceDuplicateDetector.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/StackTraceDuplicateDetector.java
deleted file mode 100644
index 12af40934..000000000
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/StackTraceDuplicateDetector.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2008 Tasktop Technologies and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Tasktop Technologies - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.tasks.ui.search;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.mylyn.internal.tasks.core.AbstractSearchHandler;
-import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
-import org.eclipse.mylyn.tasks.core.AbstractDuplicateDetector;
-import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
-import org.eclipse.mylyn.tasks.core.TaskRepository;
-import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
-import org.eclipse.mylyn.tasks.core.data.TaskData;
-import org.eclipse.mylyn.tasks.ui.TasksUi;
-
-/**
- * @author Gail Murphy
- * @author Steffen Pingel
- */
-public class StackTraceDuplicateDetector extends AbstractDuplicateDetector {
-
- @Override
- public boolean canQuery(TaskData taskData) {
- return TasksUiPlugin.getDefault().getSearchHandler(taskData.getConnectorKind()) != null;
- }
-
- private String getDescription(TaskData taskData) {
- TaskAttribute attribute = taskData.getRoot().getMappedAttribute(TaskAttribute.DESCRIPTION);
- if (attribute == null) {
- attribute = taskData.getRoot().getMappedAttribute(TaskAttribute.COMMENT_NEW);
- }
- return (attribute != null) ? attribute.getTaskData().getAttributeMapper().getValueLabel(attribute) : ""; //$NON-NLS-1$
- }
-
- @Override
- public IRepositoryQuery getDuplicatesQuery(TaskRepository taskRepository, TaskData taskData) throws CoreException {
- String description = getDescription(taskData);
- String searchString = getStackTraceFromDescription(description);
- if (searchString == null) {
- throw new CoreException(new Status(IStatus.INFO, TasksUiPlugin.ID_PLUGIN,
- "Unable to locate a stack trace in the description text.")); //$NON-NLS-1$
- }
-
- IRepositoryQuery query = TasksUi.getRepositoryModel().createRepositoryQuery(taskRepository);
- AbstractSearchHandler searchHandler = TasksUiPlugin.getDefault().getSearchHandler(
- taskRepository.getConnectorKind());
- if (searchHandler.queryForText(taskRepository, query, taskData, searchString)) {
- return query;
- }
- return null;
- }
-
- public static String getStackTraceFromDescription(String description) {
- String stackTrace = null;
-
- if (description == null) {
- return null;
- }
-
- String punct = "!\"#$%&'\\(\\)*+,-./:;\\<=\\>?@\\[\\]^_`\\{|\\}~\n"; //$NON-NLS-1$
- String lineRegex = " *at\\s+[\\w" + punct + "]+ ?\\(.*\\) *\n?"; //$NON-NLS-1$ //$NON-NLS-2$
- 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"); //$NON-NLS-1$
- stackStart = (stackStart == -1) ? 0 : stackStart + 1;
-
- stackTrace = description.substring(stackStart, lastEnd);
- }
-
- return stackTrace;
- }
-
-}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/messages.properties b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/messages.properties
deleted file mode 100644
index b3d004d74..000000000
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/messages.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-###############################################################################
-# Copyright (c) 2009 Tasktop Technologies and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# Tasktop Technologies - initial API and implementation
-###############################################################################
-CreateQueryFromSearchAction_CLEAR_QUERY=Create Query
-CreateQueryFromSearchAction_Name_of_query_to_be_added_to_the_X=Name of query to be added to the {0}
-RepositorySearchResult_Task_search_X_matches=Task search - {0} matches
-RepositorySearchResult_Task_search_1_match=Task search - 1 match
-RepositorySearchResultView_Add_to_X_Category=Add to {0} Category
-RepositorySearchResultView_Create_Query_from_Search_=Create Query from Search...
-RepositorySearchResultView_Filter_Completed_Tasks=Filter Completed Tasks
-RepositorySearchResultView_Group_By_Owner=Group By Owner
-RepositorySearchResultView_Open_in_Editor=Open in Editor
-RepositorySearchResultView_Open_Search_with_Browser_Label=Open Search with Browser
-RepositorySearchResultView_Refine_Search_=Refine Search...
-
-SearchHitCollector_Max_allowed_number_of_hits_returned_exceeded=Max allowed number of hits returned exceeded. Some hits may not be displayed. Please narrow query scope.
-SearchHitCollector_Querying_Repository_=Querying Repository...
-SearchHitCollector_Repository_connector_could_not_be_found=Repository connector could not be found
-SearchHitCollector_Search_failed=Search failed
-SearchHitCollector_Search_cancelled=Search cancelled
-SearchHitCollector_Search_returned_maximum_number_of_hits=Search returned maximum number of hits
-
-SearchResultsLabelProvider_OF={0} of {1}
-
-SearchResultTreeContentProvider_Complete=Complete
-SearchResultTreeContentProvider_Incomplete=Incomplete
-SearchResultTreeContentProvider__unknown_=<unknown>
-
-SearchResultSortAction_Sort_Label=Sort...
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListSearchHistoryPopupDialog.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListSearchHistoryPopupDialog.java
index 42d893bbd..f33d40082 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListSearchHistoryPopupDialog.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListSearchHistoryPopupDialog.java
@@ -18,8 +18,7 @@ import org.eclipse.mylyn.internal.commons.ui.NotificationPopupColors;
import org.eclipse.mylyn.internal.provisional.commons.ui.CommonColors;
import org.eclipse.mylyn.internal.provisional.commons.ui.GradientCanvas;
import org.eclipse.mylyn.internal.provisional.commons.ui.SearchHistoryPopUpDialog;
-import org.eclipse.mylyn.internal.tasks.ui.TaskSearchPage;
-import org.eclipse.search.internal.ui.SearchDialog;
+import org.eclipse.mylyn.internal.tasks.ui.search.SearchUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.GridData;
@@ -43,6 +42,10 @@ public class TaskListSearchHistoryPopupDialog extends SearchHistoryPopUpDialog {
@Override
protected void createAdditionalSearchRegion(Composite composite) {
+ if (!SearchUtil.supportsTaskSearch()) {
+ return;
+ }
+
resourceManager = new LocalResourceManager(JFaceResources.getResources());
colors = new NotificationPopupColors(composite.getDisplay(), resourceManager);
@@ -76,7 +79,7 @@ public class TaskListSearchHistoryPopupDialog extends SearchHistoryPopUpDialog {
advancedSearchButton.addHyperlinkListener(new HyperlinkAdapter() {
@Override
public void linkActivated(HyperlinkEvent e) {
- new SearchDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow(), TaskSearchPage.ID).open();
+ SearchUtil.openSearchDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow());
}
});
GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.BEGINNING).applyTo(advancedSearchButton);
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
index c93b85fab..a89e375ce 100644
--- 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
@@ -87,19 +87,19 @@ import org.eclipse.mylyn.internal.tasks.ui.actions.TaskListViewActionGroup;
import org.eclipse.mylyn.internal.tasks.ui.editors.TaskListChangeAdapter;
import org.eclipse.mylyn.internal.tasks.ui.util.PlatformUtil;
import org.eclipse.mylyn.internal.tasks.ui.util.SortCriterion;
+import org.eclipse.mylyn.internal.tasks.ui.util.SortCriterion.SortKey;
import org.eclipse.mylyn.internal.tasks.ui.util.TaskDragSourceListener;
import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
import org.eclipse.mylyn.internal.tasks.ui.util.TreeWalker;
-import org.eclipse.mylyn.internal.tasks.ui.util.SortCriterion.SortKey;
import org.eclipse.mylyn.internal.tasks.ui.util.TreeWalker.TreeVisitor;
import org.eclipse.mylyn.tasks.core.IRepositoryElement;
import org.eclipse.mylyn.tasks.core.ITask;
+import org.eclipse.mylyn.tasks.core.ITask.PriorityLevel;
import org.eclipse.mylyn.tasks.core.ITaskActivationListener;
import org.eclipse.mylyn.tasks.core.ITaskActivityListener;
import org.eclipse.mylyn.tasks.core.ITaskContainer;
import org.eclipse.mylyn.tasks.core.TaskActivationAdapter;
import org.eclipse.mylyn.tasks.core.TaskActivityAdapter;
-import org.eclipse.mylyn.tasks.core.ITask.PriorityLevel;
import org.eclipse.mylyn.tasks.ui.ITasksUiConstants;
import org.eclipse.mylyn.tasks.ui.TaskElementLabelProvider;
import org.eclipse.mylyn.tasks.ui.TasksUi;
@@ -271,6 +271,8 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener, I
private static final String ID_SEPARATOR_FILTERS = "filters"; //$NON-NLS-1$
+ private static final String ID_SEPARATOR_SEARCH = "search"; //$NON-NLS-1$
+
private static final String ID_SEPARATOR_TASKS = "tasks"; //$NON-NLS-1$
private static final String ID_SEPARATOR_CONTEXT = "context"; //$NON-NLS-1$
@@ -1110,7 +1112,8 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener, I
manager.add(filterCompleteTask);
manager.add(filterSubTasksAction);
- manager.add(new Separator(ID_SEPARATOR_TASKS));
+ manager.add(new Separator(ID_SEPARATOR_SEARCH));
+ manager.add(new GroupMarker(ID_SEPARATOR_TASKS));
manager.add(synchronizeAutomatically);
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/AbstractRepositoryQueryPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/AbstractRepositoryQueryPage.java
index dec80881e..2c1e0f5e6 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/AbstractRepositoryQueryPage.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/AbstractRepositoryQueryPage.java
@@ -18,7 +18,7 @@ import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.mylyn.internal.tasks.core.AbstractTaskCategory;
import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery;
-import org.eclipse.mylyn.internal.tasks.ui.search.SearchHitCollector;
+import org.eclipse.mylyn.internal.tasks.ui.search.SearchUtil;
import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
import org.eclipse.mylyn.internal.tasks.ui.wizards.Messages;
import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector;
@@ -26,7 +26,6 @@ import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.ui.TasksUi;
import org.eclipse.mylyn.tasks.ui.TasksUiImages;
-import org.eclipse.search.ui.NewSearchUI;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
@@ -126,18 +125,13 @@ public abstract class AbstractRepositoryQueryPage extends WizardPage implements
}
public boolean performSearch() {
- NewSearchUI.activateSearchResultView();
AbstractRepositoryConnector connector = TasksUi.getRepositoryManager().getRepositoryConnector(
taskRepository.getConnectorKind());
if (connector != null) {
try {
- SearchHitCollector collector = new SearchHitCollector(TasksUiInternal.getTaskList(), taskRepository,
- createQuery());
- NewSearchUI.runQueryInBackground(collector);
+ SearchUtil.runSearchQuery(TasksUiInternal.getTaskList(), taskRepository, createQuery(), true);
} catch (UnsupportedOperationException e) {
- SearchHitCollector collector = new SearchHitCollector(TasksUiInternal.getTaskList(), taskRepository,
- getQuery());
- NewSearchUI.runQueryInBackground(collector);
+ SearchUtil.runSearchQuery(TasksUiInternal.getTaskList(), taskRepository, getQuery(), true);
}
}
return true;

Back to the top