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}