/**
* Copyright (c) 2005-2013 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package com.python.pydev.refactoring.ui.findreplace;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.action.IStatusLineManager;
import org.eclipse.search.ui.ISearchQuery;
import org.eclipse.search.ui.NewSearchUI;
import org.eclipse.search.ui.text.FileTextSearchScope;
import org.eclipse.search.ui.text.TextSearchQueryProvider;
import org.eclipse.search.ui.text.TextSearchQueryProvider.TextSearchInput;
import org.python.pydev.core.log.Log;
import org.python.pydev.shared_ui.EditorUtils;
/**
* Helper to make a search in the currently opened documents.
*/
public class FindInOpenDocuments {
/**
* Here, all the editors available will be gotten and searched (if possible).
*
* Note that editors that are not in the workspace may not be searched (it should be possible
* to do, but one may have to reimplement large portions of the search for that to work).
*/
public static void findInOpenDocuments(final String searchText, final boolean caseSensitive,
final boolean wholeWord, final boolean isRegEx, IStatusLineManager statusLineManager) {
final List<Object> opened = EditorUtils.getFilesInOpenEditors(statusLineManager);
final List<IFile> files = new ArrayList<>(opened.size());
for (Object object : opened) {
if (object instanceof IFile) {
files.add((IFile) object);
}
}
if (files.size() == 0) {
if (statusLineManager != null) {
statusLineManager
.setMessage(
"No file was found to perform the search (editors not in the workspace cannot be searched).");
}
return;
}
try {
ISearchQuery query = TextSearchQueryProvider.getPreferred().createQuery(new TextSearchInput() {
@Override
public boolean isRegExSearch() {
return isRegEx;
}
@Override
public boolean isCaseSensitiveSearch() {
return caseSensitive;
}
@Override
public String getSearchText() {
return searchText;
}
@Override
public FileTextSearchScope getScope() {
return FileTextSearchScope.newSearchScope(files.toArray(new IResource[files.size()]),
new String[] { "*" }, true);
}
});
NewSearchUI.runQueryInBackground(query);
} catch (CoreException e1) {
Log.log(e1);
}
}
}