001package gudusoft.gsqlparser.lineage2.contract; 002 003import java.util.ArrayList; 004import java.util.Collections; 005import java.util.List; 006 007/** 008 * Top-level contract document (lineage2-contract.md §2) — one per analyzed 009 * unit. Serialized by {@link ContractJsonExporter}; array ordering in the 010 * JSON form is the exporter's responsibility (documented sort keys), the 011 * lists here preserve construction order. 012 * 013 * <p>Internal API: not part of the public gsqlparser surface. 014 */ 015public final class LineageDocument { 016 017 private final String contractVersion; 018 private final String engineVersion; 019 private final String vendor; 020 private final String artifactLocator; 021 private final List<ContractStatement> statements; 022 private final List<ContractEdge> edges; 023 private final List<TransformGraph> transformGraphs; 024 private final List<ContractDiagnostic> diagnostics; 025 026 public LineageDocument(String contractVersion, String engineVersion, 027 String vendor, String artifactLocator, 028 List<ContractStatement> statements, 029 List<ContractEdge> edges, 030 List<TransformGraph> transformGraphs, 031 List<ContractDiagnostic> diagnostics) { 032 if (contractVersion == null || engineVersion == null 033 || vendor == null || artifactLocator == null) { 034 throw new IllegalArgumentException("contractVersion, engineVersion, " 035 + "vendor, and artifactLocator must not be null"); 036 } 037 this.contractVersion = contractVersion; 038 this.engineVersion = engineVersion; 039 this.vendor = vendor; 040 this.artifactLocator = artifactLocator; 041 this.statements = copy(statements); 042 this.edges = copy(edges); 043 this.transformGraphs = copy(transformGraphs); 044 this.diagnostics = copy(diagnostics); 045 } 046 047 private static <T> List<T> copy(List<T> list) { 048 return (list == null) ? Collections.<T>emptyList() 049 : Collections.unmodifiableList(new ArrayList<>(list)); 050 } 051 052 public String getContractVersion() { 053 return contractVersion; 054 } 055 056 public String getEngineVersion() { 057 return engineVersion; 058 } 059 060 public String getVendor() { 061 return vendor; 062 } 063 064 public String getArtifactLocator() { 065 return artifactLocator; 066 } 067 068 public List<ContractStatement> getStatements() { 069 return statements; 070 } 071 072 public List<ContractEdge> getEdges() { 073 return edges; 074 } 075 076 public List<TransformGraph> getTransformGraphs() { 077 return transformGraphs; 078 } 079 080 public List<ContractDiagnostic> getDiagnostics() { 081 return diagnostics; 082 } 083}