001package gudusoft.gsqlparser.slpc.validation; 002 003import gudusoft.gsqlparser.slpc.model.SlpcDocument; 004import gudusoft.gsqlparser.slpc.model.SlpcObject; 005 006import java.util.ArrayList; 007import java.util.List; 008 009/** Runs formal JSON Schema validation before SLPC cross-record semantics. */ 010public final class SlpcValidator { 011 private final SlpcSchemaValidator schemaValidator; 012 private final SlpcSemanticValidator semanticValidator = new SlpcSemanticValidator(); 013 014 public SlpcValidator(SlpcObject schema) { 015 this.schemaValidator = new SlpcSchemaValidator(schema); 016 } 017 018 public List<SlpcValidationError> validate(SlpcDocument document) { 019 List<SlpcValidationError> schemaErrors = schemaValidator.validate(document.root()); 020 if (!schemaErrors.isEmpty()) return schemaErrors; 021 return semanticValidator.validate(document); 022 } 023 024 public List<SlpcValidationError> validateAll(SlpcDocument document) { 025 ArrayList<SlpcValidationError> result = new ArrayList<SlpcValidationError>(); 026 result.addAll(schemaValidator.validate(document.root())); 027 if (result.isEmpty()) result.addAll(semanticValidator.validate(document)); 028 return result; 029 } 030 031 public List<SlpcValidationError> validateProjectionReport(SlpcDocument document, SlpcObject report) { 032 List<SlpcValidationError> schemaErrors = schemaValidator.validateDefinition("ProjectionReport", report); 033 if (!schemaErrors.isEmpty()) return schemaErrors; 034 return semanticValidator.validateProjectionReport(document, report); 035 } 036}