package org.atomnuke.atom.io.reader.sax; import org.xml.sax.ContentHandler; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; /** * * @author zinic */ public abstract class DelegatingHandler extends DefaultHandler { private final DelegatingHandler parentHandler; private final XMLReader readerInstance; public DelegatingHandler(XMLReader readerInstance) { this(null, readerInstance); } public DelegatingHandler(DelegatingHandler parentHandler) { this(parentHandler, parentHandler.reader()); } private DelegatingHandler(DelegatingHandler parentHandler, XMLReader readerInstance) { this.parentHandler = parentHandler; this.readerInstance = readerInstance; } protected XMLReader reader() { return readerInstance; } public boolean hasParent() { return parentHandler != null; } public void delegateTo(ContentHandler handler) { readerInstance.setContentHandler(handler); } public DelegatingHandler releaseToParent() { delegateTo(parentHandler); return parentHandler; } }