/*******************************************************************************
* Copyright (c) 2009 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
* Zend Technologies
*******************************************************************************/
package org.eclipse.php.internal.ui.search.text;
import java.util.List;
import java.util.regex.Pattern;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.search.core.text.TextSearchEngine;
import org.eclipse.search.core.text.TextSearchScope;
import org.eclipse.search.internal.ui.text.FileMatch;
/**
* Description: this utility searches for text in files (given a text pattern)
* in a set of given resources
*
* @author Roy, 2007
*/
public class TextSearcher {
public final TextSearchEngine engine;
public final TextSearchScope scope;
public final ResultVisitor visitor;
public final Pattern searchPattern;
private boolean done;
/**
* Should not be constructed directly Use factory instead
*
* @param engine
* @param newSearchScope
* @param visitor
* @param searchPattern
*/
TextSearcher(TextSearchEngine engine, TextSearchScope newSearchScope, ResultVisitor visitor,
Pattern searchPattern) {
if (engine == null || newSearchScope == null || visitor == null) {
throw new IllegalArgumentException();
}
this.engine = engine;
this.scope = newSearchScope;
this.visitor = visitor;
this.searchPattern = searchPattern;
this.done = false;
}
/**
* @return is the search was done
*/
public final boolean isDone() {
return done;
}
/**
* default foactory - includes all parameters
*
* @param engine
* @param newSearchScope
* @param visitor
* @param searchPattern
* @return
*/
public final static TextSearcher createSearcher(TextSearchEngine engine, TextSearchScope newSearchScope,
ResultVisitor visitor, Pattern searchPattern) {
return new TextSearcher(engine, newSearchScope, visitor, searchPattern);
}
public final static TextSearcher createSearcher(TextSearchScope newSearchScope, ResultVisitor visitor,
Pattern searchPattern) {
final TextSearchEngine engine = TextSearchEngine.createDefault();
return createSearcher(engine, newSearchScope, visitor, searchPattern);
}
public final static TextSearcher createSearcher(IResource resource, ResultVisitor visitor, Pattern searchPattern) {
TextSearchScope searchScope = TextSearchScope.newSearchScope(new IResource[] { resource }, null, true);
return createSearcher(searchScope, visitor, searchPattern);
}
public final static TextSearcher createSearcher(IResource resource, Pattern searchPattern) {
ResultVisitor visitor = new ResultVisitor();
return createSearcher(resource, visitor, searchPattern);
}
public final static TextSearcher createSearcher(IResource resource, String searchText) {
Pattern searchPattern = Pattern.compile(searchText);
return createSearcher(resource, searchPattern);
}
/**
* Search for occurrences
*
* @param monitor
*/
public void search(IProgressMonitor monitor) {
assert !done;
engine.search(scope, visitor, searchPattern, monitor);
done = true;
}
/**
* @return a list of {@link FileMatch}
*/
public List getResults() {
assert done;
return visitor.getResult();
}
}