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}