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

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.indexsearch.*;


public class JspMatchLocatorParser extends AbstractJspParser {

	IFile fResource;
	String fMatchString;
	ISearchResultCollector fCollector;

	boolean fInUseBean;
	String fId;
	String fClass;

	public JspMatchLocatorParser() {
		super();
	}

	protected void startTag(boolean endTag, String name, int startName) {
		fInUseBean= "jsp:useBean".equals(name); //$NON-NLS-1$
	}

	protected void tagAttribute(String attrName, String value, int startName, int startValue) {
		if (fInUseBean && "class".equals(attrName) && fMatchString.equals(value)) { //$NON-NLS-1$
			try {
				fCollector.accept(fResource, startValue, value.length());
			} catch (CoreException e) {
				e.printStackTrace();
			}
		}
	}

	public void match(IFile resource, String matchString, ISearchResultCollector collector) {
		
		fResource= resource;
		fMatchString= matchString;
		fCollector= collector;
		Reader reader= null;
		
		try {
			reader= new InputStreamReader(fResource.getContents());
		} catch (CoreException e1) {
			e1.printStackTrace();
		}
				
		try {
			parse(reader);
		} catch (IOException e2) {
			e2.printStackTrace();
		}
	}
}
