blob: df19e6c94bd5cdbba35c950fbeafa89ca6176695 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2014 Tasktop Technologies and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Flavio Donze - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.tasks.ui.search;
import java.util.List;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.mylyn.commons.core.ExtensionPointReader;
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;
/**
* Provides static utility methods to access the implementation that is contributed by the searchProvider extension
* point.
*
* @author Flavio Donze
* @author David Green
*/
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 = "searchProvider"; //$NON-NLS-1$
private static final String EXTENSION_SEARCH_HANDLER = "searchHandler"; //$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;
}
ExtensionPointReader<AbstractSearchProvider> reader = new ExtensionPointReader<AbstractSearchProvider>(
TasksUiPlugin.ID_PLUGIN, EXTENSION_SEARCH_PROVIDER, EXTENSION_SEARCH_PROVIDER,
AbstractSearchProvider.class);
reader.read();
List<AbstractSearchProvider> providers = reader.getItems();
if (providers.size() == 0) {
StatusHandler.log(new Status(IStatus.WARNING, TasksUiPlugin.ID_PLUGIN,
"No search provider was registered. Tasks search is not available.")); //$NON-NLS-1$
} else if (providers.size() > 1) {
StatusHandler.log(new Status(IStatus.WARNING, TasksUiPlugin.ID_PLUGIN,
"More than one search provider was registered.")); //$NON-NLS-1$
}
provider = reader.getItem();
if (provider == null) {
provider = new NullSearchProvider();
}
return provider;
}
public static AbstractSearchHandler createSearchHandler() {
ExtensionPointReader<AbstractSearchHandler> reader = new ExtensionPointReader<AbstractSearchHandler>(
TasksUiPlugin.ID_PLUGIN, EXTENSION_SEARCH_HANDLER, EXTENSION_SEARCH_HANDLER,
AbstractSearchHandler.class);
reader.read();
if (reader.getItems().size() > 1) {
StatusHandler.log(new Status(IStatus.WARNING, TasksUiPlugin.ID_PLUGIN,
"More than one task list search handler was registered.")); //$NON-NLS-1$
}
AbstractSearchHandler searchHandler = reader.getItem();
if (searchHandler == null) {
searchHandler = new DefaultSearchHandler();
}
return searchHandler;
}
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);
}
}