/* Generated By:JJTree: Do not edit this line. SimpleNode.java */

// ONLY EDIT THIS FILE IN THE GRAMMAR ROOT DIRECTORY!
// THE ONE IN THE ${spec}-src DIRECTORY IS A COPY!!!

package org.apache.xpath.parser;

import java.io.PrintStream;

import org.apache.xml.utils.QName;
import org.apache.xpath.Expression;
import org.apache.xpath.ExpressionNode;
import org.apache.xpath.operations.And;
import org.apache.xpath.operations.Div;
import org.apache.xpath.operations.Equals;
import org.apache.xpath.operations.Gt;
import org.apache.xpath.operations.Idiv;
import org.apache.xpath.operations.Lt;
import org.apache.xpath.operations.Minus;
import org.apache.xpath.operations.Mod;
import org.apache.xpath.operations.NotEquals;
import org.apache.xpath.operations.Or;
import org.apache.xpath.operations.Plus;
import org.apache.xpath.quantified.Every;
import org.apache.xpath.quantified.In;
import org.apache.xpath.quantified.Satisfies;
import org.apache.xpath.quantified.Some;

/**
 * 
 * This is the most generic syntax node, which implements the JJTree 
 * interface "Node" methods.  This class assumes that it's derived 
 * class is org.apache.xpath.Expression, and so does a fair amount 
 * of downcasting.  The only reason this class exists is to separate 
 * out the jjXXX methods, to act as a more generic interface to 
 * the JavaCC/JJTree parser, and also to act as a factory class for 
 * the concrete implementations of the expressions.
 */
public class SimpleNode implements Node {

	//== Factory Method
	public static Node jjtCreate(XPath p, int id)
	{
		SimpleNode newNode = null;
		switch(id)
		{
			case XPathConstants.AxisChild:
				newNode = new SimpleNode();
				break;
			case XPathConstants.AxisDescendant:
				newNode = new SimpleNode();
				break;
			case XPathConstants.AxisParent:
				newNode = new SimpleNode();
				break;
			case XPathConstants.AxisAttribute:
				newNode = new SimpleNode();
				break;
			case XPathConstants.AxisSelf:
				newNode = new SimpleNode();
				break;
			case XPathConstants.AxisDescendantOrSelf:
				newNode = new SimpleNode();
				break;
			case XPathConstants.AxisAncestor:
				newNode = new SimpleNode();
				break;
			case XPathConstants.AxisFollowingSibling:
				newNode = new SimpleNode();
				break;
			case XPathConstants.AxisPrecedingSibling:
				newNode = new SimpleNode();
				break;
			case XPathConstants.AxisFollowing:
				newNode = new SimpleNode();
				break;
			case XPathConstants.AxisPreceding:
				newNode = new SimpleNode();
				break;
			case XPathConstants.AxisNamespace:
				newNode = new SimpleNode();
				break;
			case XPathConstants.AxisAncestorOrSelf:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Or:
				newNode = new org.apache.xpath.operations.Or();
				break;
			case XPathConstants.And:
				newNode = new org.apache.xpath.operations.And();
				break;
			case XPathConstants.Div:
				newNode = new org.apache.xpath.operations.Div();
				break;
			case XPathConstants.Idiv:
				newNode = new org.apache.xpath.operations.Idiv();
				break;
			case XPathConstants.Mod:
				newNode = new org.apache.xpath.operations.Mod();
				break;
			case XPathConstants.Multiply:
				newNode = new org.apache.xpath.operations.Mult();
				break;
			case XPathConstants.In:
				newNode = new org.apache.xpath.quantified.In();
				break;
			case XPathConstants.Satisfies:
				newNode = new org.apache.xpath.quantified.Satisfies();
				break;
			case XPathConstants.Return:
				newNode = new org.apache.xpath.itteration.Return();
				break;
			case XPathConstants.Then:
				newNode = new org.apache.xpath.conditional.Then();
				break;
			case XPathConstants.Else:
				newNode = new org.apache.xpath.conditional.Else();
				break;
			case XPathConstants.To:
				newNode = new org.apache.xpath.seqctor.RangeExpr();
				break;
			case XPathConstants.Intersect:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Union:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Except:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Precedes:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Follows:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Instanceof:
				newNode = new org.apache.xpath.types.Instanceof();
				break;
			case XPathConstants.Item:
				newNode = new SimpleNode();
				break;
			case XPathConstants.ElementType:
				newNode = new SimpleNode();
				break;
			case XPathConstants.AttributeType:
				newNode = new SimpleNode();
				break;
			case XPathConstants.ElementQNameLbrace:
				newNode = new SimpleNode();
				break;
			case XPathConstants.AttributeQNameLbrace:
				newNode = new SimpleNode();
				break;
			case XPathConstants.ElementLbrace:
				newNode = new SimpleNode();
				break;
			case XPathConstants.AttributeLbrace:
				newNode = new SimpleNode();
				break;
			case XPathConstants.DefaultElement:
				newNode = new SimpleNode();
				break;
			case XPathConstants.DefaultFunction:
				newNode = new SimpleNode();
				break;
			case XPathConstants.OfType:
				newNode = new SimpleNode();
				break;
			case XPathConstants.AtomicValue:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Type:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Node:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Empty:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Nmstart:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Nmchar:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Star:
				newNode = new SimpleNode();
				break;
			case XPathConstants.NCNameColonStar:
				newNode = new SimpleNode();
				break;
			case XPathConstants.StarColonNCName:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Root:
				newNode = new SimpleNode();
				break;
			case XPathConstants.RootDescendants:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Slash:
				newNode = new SimpleNode();
				break;
			case XPathConstants.SlashSlash:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Equals:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Is:
				newNode = new SimpleNode();
				break;
			case XPathConstants.NotEquals:
				newNode = new org.apache.xpath.operations.NotEquals();
				break;
			case XPathConstants.IsNot:
				newNode = new SimpleNode();
				break;
			case XPathConstants.LtEquals:
				newNode = new org.apache.xpath.operations.Lte();
				break;
			case XPathConstants.LtLt:
				newNode = new SimpleNode();
				break;
			case XPathConstants.GtEquals:
				newNode = new org.apache.xpath.operations.Gte();
				break;
			case XPathConstants.GtGt:
				newNode = new SimpleNode();
				break;
			case XPathConstants.FortranEq:
				newNode = new org.apache.xpath.operations.FortranEq();
				break;
			case XPathConstants.FortranNe:
				newNode = new org.apache.xpath.operations.FortranNe();
				break;
			case XPathConstants.FortranGt:
				newNode = new org.apache.xpath.operations.FortranGt();
				break;
			case XPathConstants.FortranGe:
				newNode = new org.apache.xpath.operations.FortranGe();
				break;
			case XPathConstants.FortranLt:
				newNode = new org.apache.xpath.operations.FortranLt();
				break;
			case XPathConstants.FortranLe:
				newNode = new org.apache.xpath.operations.FortranLe();
				break;
			case XPathConstants.Lt:
				newNode = new org.apache.xpath.operations.Lt();
				break;
			case XPathConstants.Gt:
				newNode = new org.apache.xpath.operations.Gt();
				break;
			case XPathConstants.Minus:
				newNode = new org.apache.xpath.operations.Minus();
				break;
			case XPathConstants.Plus:
				newNode = new org.apache.xpath.operations.Plus();
				break;
			case XPathConstants.QMark:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Vbar:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Lpar:
				newNode = new SimpleNode();
				break;
			case XPathConstants.At:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Lbrack:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Rpar:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Rbrack:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Some:
				newNode = new org.apache.xpath.quantified.Some();
				break;
			case XPathConstants.Every:
				newNode = new org.apache.xpath.quantified.Every();
				break;
			case XPathConstants.ForVariable:
				newNode = new org.apache.xpath.itteration.ForClause();
				break;
			case XPathConstants.CastAs:
				// to be done
				break;
			case XPathConstants.TreatAs:
				// to be done
				break;
			case XPathConstants.Validate:
				// Assume we won't have this?
				break;
			case XPathConstants.Digits:
				newNode = new SimpleNode();
				break;
			case XPathConstants.IntegerLiteral:
				newNode = new SimpleNode();
				break;
			case XPathConstants.DecimalLiteral:
				newNode = new SimpleNode();
				break;
			case XPathConstants.DoubleLiteral:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Comment:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Document:
				newNode = new SimpleNode();
				break;
			case XPathConstants.DocumentLbrace:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Text:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Untyped:
				newNode = new SimpleNode();
				break;
			case XPathConstants.ProcessingInstruction:
				newNode = new SimpleNode();
				break;
			case XPathConstants.NodeLpar:
				newNode = new SimpleNode();
				break;
			case XPathConstants.CommentLpar:
				newNode = new SimpleNode();
				break;
			case XPathConstants.TextLpar:
				newNode = new SimpleNode();
				break;
			case XPathConstants.ProcessingInstructionLpar:
				newNode = new SimpleNode();
				break;
			case XPathConstants.IfLpar:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Comma:
				newNode = new SimpleNode();
				break;
			case XPathConstants.StringLiteral:
				newNode = new SimpleNode();
				break;
			case XPathConstants.AtStringLiteral:
				newNode = new SimpleNode();
				break;
			case XPathConstants.NamespaceURLLiteral:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Dot:
				newNode = new SimpleNode();
				break;
			case XPathConstants.DotDot:
				newNode = new SimpleNode();
				break;
			case XPathConstants.NCName:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Prefix:
				newNode = new SimpleNode();
				break;
			case XPathConstants.LocalPart:
				newNode = new SimpleNode();
				break;
			case XPathConstants.VariableIndicator:
				newNode = new SimpleNode();
				break;
			case XPathConstants.VarName:
				newNode = new SimpleNode();
				break;
			case XPathConstants.QName:
				newNode = new SimpleNode();
				break;
			case XPathConstants.FuncName:
				newNode = new SimpleNode();
				break;
			case XPathConstants.FuncPListOpen:
				newNode = new SimpleNode();
				break;
			case XPathConstants.QNameLpar:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Lbrace:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Rbrace:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Char:
				newNode = new SimpleNode();
				break;
			case XPathConstants.WhitespaceChar:
				newNode = new SimpleNode();
				break;
			case XPathConstants.Letter:
				newNode = new SimpleNode();
				break;
//			case XPathConstants.BaseChar:
//				newNode = new SimpleNode();
//				break;
//			case XPathConstants.Ideographic:
//				newNode = new SimpleNode();
//				break;
//			case XPathConstants.CombiningChar:
//				newNode = new SimpleNode();
//				break;
//			case XPathConstants.Digit:
//				newNode = new SimpleNode();
//				break;
//			case XPathConstants.Extender:
//				newNode = new SimpleNode();
//				break;

				
			default:
				newNode = new SimpleNode();
		}
		newNode.parser = p; // We shouldn't need this.  -sb
		return newNode;
	}


  protected XPath parser; // I'm going to leave this for right now only.
  
  public SimpleNode() {
  }

  public void jjtOpen() {
  }

  public void jjtClose() {
  }

  public void jjtSetParent(Node n) { ((Expression)this).exprSetParent((ExpressionNode) n); }
  public Node jjtGetParent() { return (Node)((Expression)this).exprGetParent(); }

  public void jjtAddChild(Node n, int i) {
    ((Expression)this).exprAddChild((ExpressionNode)n, i);
  }

  public Node jjtGetChild(int i) {
    return (Node)((Expression)this).exprGetChild(i);
  }

  public int jjtGetNumChildren() {
    return ((Expression)this).exprGetNumChildren();
  }

  /** Accept the visitor. **/
  public Object jjtAccept(XPathVisitor visitor, Object data) {
    return visitor.visit(this, data);
  }

  /** Accept the visitor. **/
  public Object childrenAccept(XPathVisitor visitor, Object data) {
  	int nChildren = jjtGetNumChildren();
    for (int i = 0; i < nChildren; ++i) {
      jjtGetChild(i).jjtAccept(visitor, data);
    }
    return data;
  }
  
  public void processToken(Token t) 
  { 
  	// not sure what to do with this yet. 
  }
  
  public void dump(String prefix) {
    dump(prefix, System.out);
  }
  
  public void dump(String prefix, java.io.PrintStream ps) {
    // Not implemented yet.
  }

}

