001package gudusoft.gsqlparser.nodes.powerquery;
002
003import gudusoft.gsqlparser.nodes.TParseTreeNode;
004import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
005
006import java.util.ArrayList;
007import java.util.List;
008
009/**
010 * Navigation chain: {@code source{[Name="X",Kind="Y"]}[Data]} …
011 *
012 * <p>Carries the ordered list of {@link TPowerQueryNavSegment}s from root
013 * (closest to the connector) to leaf (closest to the consumer).  The source
014 * step name identifies which prior binding the chain starts from.
015 */
016public class TPowerQueryNavChain extends TParseTreeNode {
017
018    private String sourceStepName;
019    private final List<TPowerQueryNavSegment> segments = new ArrayList<>();
020
021    public String getSourceStepName() {
022        return sourceStepName;
023    }
024
025    public void setSourceStepName(String sourceStepName) {
026        this.sourceStepName = sourceStepName;
027    }
028
029    public List<TPowerQueryNavSegment> getSegments() {
030        return segments;
031    }
032
033    public void addSegment(TPowerQueryNavSegment segment) {
034        if (segment != null) segments.add(segment);
035    }
036
037    @Override
038    public void accept(TParseTreeVisitor v) {
039        v.preVisit(this);
040        v.postVisit(this);
041    }
042
043    @Override
044    public void acceptChildren(TParseTreeVisitor v) {
045        v.preVisit(this);
046        for (TPowerQueryNavSegment seg : segments) {
047            if (seg != null) seg.acceptChildren(v);
048        }
049        v.postVisit(this);
050    }
051}