/*******************************************************************************
 * Copyright (c) 2002-2005 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 - Initial API and implementation
 *******************************************************************************/
package org.eclipse.wst.wsi.internal.core.xml.dom;

import org.w3c.dom.Element;

import org.xml.sax.SAXNotSupportedException;
import org.xml.sax.SAXNotRecognizedException;

import org.apache.xerces.dom.ElementImpl;
import org.apache.xerces.xni.Augmentations;
import org.apache.xerces.xni.NamespaceContext;
import org.apache.xerces.xni.QName;
import org.apache.xerces.xni.XMLLocator;
import org.apache.xerces.xni.XMLAttributes;
import org.apache.xerces.xni.XNIException;

/**
 * This class specializes org.apache.xerces.parsers.DOMParser.
 * 
 * @author Peter  Brittenham (peterbr@us.ibm.com)
 * @version 1.0.1
 */
public class DOMParser extends org.apache.xerces.parsers.DOMParser
{
  /**
   * Locator.
   */
  XMLLocator locator = null;

  /* (non-Javadoc)
   * @see org.apache.xerces.xni.XMLDocumentHandler#startDocument(org.apache.xerces.xni.XMLLocator, java.lang.String, org.apache.xerces.xni.NamespaceContext, org.apache.xerces.xni.Augmentations)
   */
  public void startDocument(
    XMLLocator locator,
    String encoding,
    NamespaceContext context,
    Augmentations augs)
    throws XNIException
  {
    this.locator = locator;
    super.startDocument(locator, encoding, context, augs);
  }

  /* (non-Javadoc)
   * @see org.apache.xerces.xni.XMLDocumentHandler#startElement(org.apache.xerces.xni.QName, org.apache.xerces.xni.XMLAttributes, org.apache.xerces.xni.Augmentations)
   */
  public void startElement(
    QName qname,
    XMLAttributes attributes,
    Augmentations augs)
    throws XNIException
  {
    Element element;
    ElementImpl elementImpl;

    // DEBUG:
    //System.err.println("1-line: " + locator.getLineNumber() + ", column: " + locator.getColumnNumber());

    super.startElement(qname, attributes, augs);

    // DEBUG:
    //System.err.println("2-line: " + locator.getLineNumber() + ", column: " + locator.getColumnNumber());    

    try
    {
      element = (Element) getProperty(CURRENT_ELEMENT_NODE);

      elementImpl = (ElementImpl) element;

      elementImpl.setUserData(
        ElementLocation.KEY_NAME,
        (ElementLocation)new ElementLocation(locator.getLineNumber(), locator.getColumnNumber()),
        null);
    }
    catch (ClassCastException cce)
    {
    }
    catch (SAXNotSupportedException snse)
    {
      // DEBUG:
      //System.err.println(snse.toString());
    }
    catch (SAXNotRecognizedException snre)
    {
    }
  }
}
