001package gudusoft.gsqlparser.nodes.mdx;
002/*
003 * Date: 12-1-31
004 */
005
006import gudusoft.gsqlparser.nodes.TPTNodeList;
007import gudusoft.gsqlparser.nodes.TParseTreeNode;
008import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
009
010/**
011 * Mdx identifier consists of a list of segment name {@link #getSegments()}
012 */
013public class TMdxIdentifierNode extends TMdxExpNode {
014
015    public EMdxDataType getMdxDataType(){
016        return EMdxDataType.Member;
017    }
018
019    private final TPTNodeList<IMdxIdentifierSegment> segments = new TPTNodeList<IMdxIdentifierSegment>();
020
021    /**
022     * Same as {@link #getSegmentList() }
023     * @return list of constituent segments
024     */
025    public TPTNodeList<IMdxIdentifierSegment> getSegments() {
026        return segments;
027    }
028
029    public void init(Object segment) {
030        segments.addElement((IMdxIdentifierSegment)segment);
031        setStartToken(segments.getStartToken());
032        setEndToken(segments.getEndToken());
033    }
034
035    /**
036     * Returns the list of segments which constitute this identifier.
037     *
038     * @return list of constituent segments
039     */
040    public TPTNodeList <IMdxIdentifierSegment> getSegmentList() {
041        return segments;
042    }
043
044    /**
045     * Returns a new Identifier consisting of this one with another segment
046     * appended. Does not modify this Identifier.
047     *
048     * @param segment Name of segment
049     */
050    public void add(IMdxIdentifierSegment segment) {
051        segments.addElement(segment);
052    }
053
054    public void insertAt(IMdxIdentifierSegment segment, int index){
055        segments.insertElementAt(segment,index);
056    }
057
058    public void accept(TParseTreeVisitor v){
059        v.preVisit(this);
060        v.postVisit(this);
061    }
062
063    public void acceptChildren(TParseTreeVisitor v){
064        v.preVisit(this);
065        v.postVisit(this);
066    }
067
068}