package at.gv.egovernment.moa.util;

import java.io.IOException;

import org.xml.sax.EntityResolver;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;

/**
 * A <code>DefaultHandler</code> that uses a <code>MOAEntityResolver</code> and
 * a <code>MOAErrorHandler</code>.
 * 
 * @author Patrick Peck
 * @version $Id$
 */
public class MOADefaultHandler extends DefaultHandler {
  /** The <code>EntityResolver</code> to use. */
  private EntityResolver entityResolver;
  /** The <code>ErrorHandler</code> to use. */
  private ErrorHandler errorHandler;

  /**
   * Create a new <code>MOADefaultHandler</code>.
   */
  public MOADefaultHandler() {
    entityResolver = new MOAEntityResolver();
    errorHandler = new MOAErrorHandler();
  }

  /**
   * Create a new <code>MOADefaultHandler</code>.
   * 
   * @param entityResolver The <code>EntityResolver</code> to use for resolving
   * external entities.
   * @param errorHandler The <code>ErrorHandler</code> to use for reporting
   * parsing errors.
   */
  public MOADefaultHandler(
    EntityResolver entityResolver,
    ErrorHandler errorHandler) {

    this.entityResolver = entityResolver;
    this.errorHandler = errorHandler;
  }

  /**
   * @see org.xml.sax.EntityResolver#resolveEntity(java.lang.String, java.lang.String)
   */
  public InputSource resolveEntity(String publicId, String systemId)
    throws SAXException {
    try {
      return entityResolver.resolveEntity(publicId, systemId);
    } catch (IOException e) {
      return null;
    }
  }

  /**
   * @see org.xml.sax.ErrorHandler#warning(org.xml.sax.SAXParseException)
   */
  public void warning(SAXParseException exception) throws SAXException {
    errorHandler.warning(exception);
  }

  /**
   * @see org.xml.sax.ErrorHandler#error(org.xml.sax.SAXParseException)
   */
  public void error(SAXParseException exception) throws SAXException {
    errorHandler.error(exception);
  }

  /**
   * @see org.xml.sax.ErrorHandler#fatalError(org.xml.sax.SAXParseException)
   */
  public void fatalError(SAXParseException exception) throws SAXException {
    errorHandler.fatalError(exception);
  }

}