package parser.ServletParser.javaparse;

/** 이 클래스는 첫번째 패스의 파싱 시에 사용되는 파스 트리 노드 객체를 위한 것이다.
  */
public class ParseTreeNode1 extends Object {
	/** 현재 노드 포함하는 심볼의 내용
	 */
	public String value;
	/** 자식 노드들에 대한 링크
	 */
	public ParseTreeNode1 children;
	/** 형제 노드들에 대한 링크
	 */
	public ParseTreeNode1 siblings;
	/** 생성자이다.
	 */
	ParseTreeNode1() {
		value = new String("");
		children = null;
		siblings = null;
	}
	/** 생성자이다.
	 */
	ParseTreeNode1(String v) {
		if (v == null) {
			value = new String("");
		} else {
			value = v;
		}
		children = null;
		siblings = null;
	}
	/** 형제 노드의 수를 세는 함수이다.
	 */
	public int getSiblingCount() {
		int count = 1;
		ParseTreeNode1 aNode = this.siblings;
		while (aNode != null) {
			count++;
			aNode = aNode.siblings;
		}
		return count;
	}
	/** value 필드에 대한 access 함수
	 */
	void setValue(String v) {
		value = v;
	}
	/** children 필드에 대한 access 함수
	 */
	void setChild(ParseTreeNode1 child) {
		children = child;
	}
	/** siblings 필드에 대한 access 함수
	 */
	void setSibling(ParseTreeNode1 sibling) {
		siblings = sibling;
	}
	/** 현재 노드를 클래스 이름으로 해석할 때 클래스 이름을 반환하는 함수이다.
	 */
	public String toStringAsClassName() {
		String aLine = new String("");
		aLine = aLine + value;
		return aLine;
	}
	/** 현재 노드를 데이타 멤버로 해석할 때 UML 양식으로 문자열을 만드는 함수이다.
	 */
	public String toStringAsDataMember() {
		String aLine = new String("");
		ParseTreeNode1 nameNode = this;
		ParseTreeNode1 typeNode = nameNode.siblings;
		ParseTreeNode1 defaultValueNode = typeNode.siblings;
		ParseTreeNode1 modifierNode = defaultValueNode.siblings;
		String modifierValue = new String("");
		if (modifierNode.value != null && modifierNode.value.length() > 1) {
			char vis = modifierNode.value.charAt(0);
			if (vis == '+') {
				aLine = aLine + "+";
				modifierValue = modifierNode.value.substring(1);
			} else if (vis == '#') {
				aLine = aLine + "#";
				modifierValue = modifierNode.value.substring(1);
			} else if (vis == '-') {
				aLine = aLine + "-";
				modifierValue = modifierNode.value.substring(1);
			}
		}
		aLine = aLine + this.value;
		if (typeNode.value != null && typeNode.value.length() > 0) {
			aLine = aLine + ":" + typeNode.value;
		}
		if (defaultValueNode.value != null && defaultValueNode.value.length() > 0) {
			aLine = aLine + "=" + defaultValueNode.value;
		}
		while (modifierValue.length() > 0 && modifierValue.charAt(0) == ' ') modifierValue = modifierValue.substring(1);
		if (modifierValue.length() > 0) {
			aLine = aLine + "{" + modifierValue + "}";
		}
		return aLine;
	}
	/** 현재 노드를 멤버 함수로 해석할 때 UML 양식으로 문자열을 만드는 함수이다.
	 */
	public String toStringAsMemberFunction() {
		String aLine = new String("");
		ParseTreeNode1 nameNode = this;
		ParseTreeNode1 typeNode = nameNode.siblings;
		ParseTreeNode1 modifierNode = typeNode.siblings;
		String modifierValue = new String("");
		if (modifierNode.value != null && modifierNode.value.length() > 1) {
			char vis = modifierNode.value.charAt(0);
			if (vis == '+') {
				aLine = aLine + "+";
				modifierValue = modifierNode.value.substring(1);
			} else if (vis == '#') {
				aLine = aLine + "#";
				modifierValue = modifierNode.value.substring(1);
			} else if (vis == '-') {
				aLine = aLine + "-";
				modifierValue = modifierNode.value.substring(1);
			}
		}
		aLine = aLine + this.value;
		String paraString = new String("");
		ParseTreeNode1 paraNode = this.children;
		while (paraNode != null) {
			paraString = paraString + paraNode.value + ":" + paraNode.siblings.value;
			paraNode = paraNode.children;
			if (paraNode != null) {
				paraString = paraString + ",";
			}
		}
		aLine = aLine + "(" + paraString + ")";
		if (typeNode.value != null && typeNode.value.length() > 0) {
			aLine = aLine + ":" + typeNode.value;
		}
		while (modifierValue.length() > 0 && modifierValue.charAt(0) == ' ') modifierValue = modifierValue.substring(1);
		if (modifierValue.length() > 0) {
			aLine = aLine + "{" + modifierValue + "}";
		}
		return aLine;
	}
};