/*******************************************************************************
 * Copyright (c) 2000, 2008 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.wst.jsdt.core.search;

import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.wst.jsdt.core.IJavaScriptElement;

/**
 * A <code>IJavaScriptSearchResultCollector</code> collects search results from a <code>search</code>
 * query to a <code>SearchEngine</code>. Clients must implement this interface and pass
 * an instance to the <code>search(...)</code> methods. When a search starts, the <code>aboutToStart()</code>
 * method is called, then 0 or more call to <code>accept(...)</code> are done, finally the
 * <code>done()</code> method is called.
 * <p>
 * Results provided to this collector may be accurate - in this case they have an <code>EXACT_MATCH</code> accuracy -
 * or they might be potential matches only - they have a <code>POTENTIAL_MATCH</code> accuracy. This last
 * case can occur when a problem prevented the <code>SearchEngine</code> from resolving the match.
 * </p>
 * <p>
 * The order of the results is unspecified. Clients must not rely on this order to display results,
 * but they should sort these results (for example, in syntactical order).
 * <p>
 * The <code>IJavaScriptSearchResultCollector</code> is also used to provide a progress monitor to the
 * <code>SearchEngine</code>.
 * </p>
 * <p>
 * Clients may implement this interface.
 * </p>
 *
 * @see SearchEngine
 * @deprecated Since 3.0, the class
 * {@link org.eclipse.wst.jsdt.core.search.SearchRequestor} replaces this interface.
 * 
 * Provisional API: This class/interface is part of an interim API that is still under development and expected to 
 * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
 * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
 * (repeatedly) as the API evolves.
 */
public interface IJavaScriptSearchResultCollector {
	/**
	 * The search result corresponds exactly to the search pattern.
	 *
     * @deprecated Use {@link SearchMatch#A_ACCURATE} instead.
	 */
	int EXACT_MATCH = 0;

	/**
	 * The search result is potentially a match for the search pattern,
	 * but a problem prevented the search engine from being more accurate
	 * (typically because of the classpath was not correctly set).
	 *
     * @deprecated Use {@link SearchMatch#A_INACCURATE} instead.
	 */
	 int POTENTIAL_MATCH = 1;

/**
 * Called before the actual search starts.
 *
 * @deprecated Replaced by {@link SearchRequestor#beginReporting()}.
 */
public void aboutToStart();
/**
 * Accepts the given search result.
 *
 * @param resource the resource in which the match has been found
 * @param start the start position of the match, -1 if it is unknown
 * @param end the end position of the match, -1 if it is unknown;
 *  the ending offset is exclusive, meaning that the actual range of characters
 *  covered is <code>[start, end]</code>
 * @param enclosingElement the Java element that contains the character range
 *	<code>[start, end]</code>; the value can be <code>null</code> indicating that
 *	no enclosing Java element has been found
 * @param accuracy the level of accuracy the search result has; either
 *  <code>EXACT_MATCH</code> or <code>POTENTIAL_MATCH</code>
 * @exception CoreException if this collector had a problem accepting the search result
 * @deprecated Replaced by {@link SearchRequestor#acceptSearchMatch(SearchMatch)}.
 */
public void accept(
	IResource resource,
	int start,
	int end,
	IJavaScriptElement enclosingElement,
	int accuracy)
	throws CoreException;
/**
 * Called when the search has ended.
 *
 * @deprecated Replaced by {@link SearchRequestor#endReporting()}.
 */
public void done();
/**
 * Returns the progress monitor used to report progress.
 *
 * @return a progress monitor or null if no progress monitor is provided
 */
public IProgressMonitor getProgressMonitor();
}
