001package gudusoft.gsqlparser.nodes;
002
003import gudusoft.gsqlparser.TSourceToken;
004
005/*
006*
007* Date: 2010-2-5
008* Time: 14:44:57
009*
010*/
011public class TJoinList extends TParseTreeNodeList <TJoin> {
012
013    public TJoinList()
014    {
015    }
016
017    public void addJoin(TJoin join)
018    {
019        //this.setChanged();
020        addElement(join);
021    }
022
023    public TJoin getJoin(int position)
024    {
025        if (position < size())
026        {
027            return (TJoin)elementAt(position);
028        }else{
029        return null;
030        }
031    }
032
033    void addParseTreeNode(Object arg1){
034        addJoin((TJoin)arg1);
035    }
036
037    public void accept(TParseTreeVisitor v){
038        v.preVisit(this);
039        v.postVisit(this);
040    }
041//
042//    public void acceptChildren(TParseTreeVisitor v){
043//        v.preVisit(this);
044//        for(int i=0;i<this.size();i++){
045//            this.getJoin(i).acceptChildren(v);
046//        }
047//        v.postVisit(this);
048//    }
049
050    public void removeJoin(int index){
051        this.removeItem(index);
052    }
053
054    public TParseTreeNode removeItem(int index){
055        if (TParseTreeNode.doubleLinkedTokenListToString){
056
057        }else{
058            TSourceToken st = null ;
059            if (size() > 1){
060                if (index != size() - 1){
061                    st = getJoin(index).getEndToken().searchToken(",",1);
062                }else{
063                    st = getJoin(index).getStartToken().searchToken(",",-1);
064                }
065
066            }
067            getJoin(index).removeAllMyTokensFromTokenList(st);
068
069        }
070
071         return super.removeItem(index);
072    }
073
074    public TSourceToken getEndToken(){
075        if (size() == 0) return null;
076        TJoin lastJoin = getJoin(size()-1);
077        if (lastJoin.getJoinItems().size() > 0){
078            TJoinItem lastJoinItem = lastJoin.getJoinItems().getJoinItem(lastJoin.getJoinItems().size() -1);
079            return  lastJoinItem.getEndToken();
080        }else
081            return lastJoin.getEndToken();
082    }
083
084}