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}