/*******************************************************************************
 * 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;

import org.w3c.dom.*;

/**
 * We don't have access to the node source code, so this does
 * our double-dispatch the hard way.
 */
public class XMLVisitor
{
  /**
  * Visit XML CDATASection node.
  * @param s  an XML CDATASection node.
  */
  public void visit(CDATASection s)
  {
  }

  /**
  * Visit XML Document node.
  * @param e  an XML Document node.
  */
  public void visit(Document e)
  {
  }

  /**
  * Visit XML DocumentType node.
  * @param e  an ML DocumentType node.
  */
  public void visit(DocumentType e)
  {
  }

  /**
  * Visit XML Attribute node.
  * @param e  an XML Atrribute node.
  */
  public void visit(Attr e)
  {
  }

  /**
  * Visit XML Element node.
  * @param e  an XML Element node.
  */
  public void visit(Element e)
  {
  }

  /**
  * Visit XML Comment node.
  * @param e  an XML Comment node.
  */
  public void visit(Comment e)
  {
  }

  /**
   * Visit XML Text node.
  * @param e  an XML Text node.
  */
  public void visit(Text e)
  {
  }

  /**
   * Visit XML EntityReference node. 
  * @param e  an XML EntityReference node.
  */
  public void visit(EntityReference e)
  {
  }

  /**
   * Visit XML Entity node. 
  * @param e  an XML Entity node.
  */
  public void visit(Entity e)
  {
  }

  /**
   * Visit XML Notation node. 
  * @param n  an XML Notation node.
  */
  public void visit(Notation n)
  {
  }

  /**
   * Visit XML ProcessingInstruction node. 
  * @param i  an XML ProcessingInstruction node.
  */
  public void visit(ProcessingInstruction i)
  {
  }

  /**
   * Visit XML NamedNodeMap node. 
  * @param i  an XML NamedNodeMap node.
  */
  public void visit(NamedNodeMap i)
  {
  }

  /**
   * Visit XML node. 
  * @param node  an XML node.
  */
  public void doVisit(Object node)
  {
    if (node instanceof Element)
    {
      visit((Element) node);
    }
    else if (node instanceof Comment)
    {
      visit((Comment) node);
    }
    else if (node instanceof CDATASection)
    {
      // CDATASection extends Text, so it must come first
      visit((CDATASection) node);
    }
    else if (node instanceof Text)
    {
      visit((Text) node);
    }
    else if (node instanceof Attr)
    {
      visit((Attr) node);
    }
    else if (node instanceof Document)
    {
      visit((Document) node);
    }
    else if (node instanceof EntityReference)
    {
      visit((EntityReference) node);
    }
    else if (node instanceof Entity)
    {
      visit((Entity) node);
    }
    else if (node instanceof DocumentType)
    {
      visit((DocumentType) node);
    }
    else if (node instanceof Notation)
    {
      visit((Notation) node);
    }
    else if (node instanceof ProcessingInstruction)
    {
      visit((ProcessingInstruction) node);
    }
    else if (node instanceof NamedNodeMap)
    {
      visit((NamedNodeMap) node);
    }
  }
}

// END OF FILE
