package aQute.libg.sax;

import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.Result;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;

import org.xml.sax.ContentHandler;
import org.xml.sax.XMLReader;

public class SAXUtil {
	
	public static XMLReader buildPipeline(Result output, ContentFilter... filters) throws Exception {
		SAXTransformerFactory factory = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
		TransformerHandler handler = factory.newTransformerHandler();
		handler.setResult(output);
		
		ContentHandler last = handler;
		if (filters != null) for (ContentFilter filter : filters) {
			filter.setParent(last);
			last = filter;
		}
		XMLReader reader = SAXParserFactory.newInstance().newSAXParser().getXMLReader();
		reader.setContentHandler(last);
		
		return reader;
	}
	
}
