| package com.apigee.security.oas; |
| |
| import com.apigee.security.oas.extendedvalidator.ExtendedValidator; |
| import com.apigee.security.oas.extendedvalidator.ExtensionValidationMessage; |
| import com.apigee.security.oas.parser.BaseParser; |
| import com.apigee.security.oas.parser.ParserException; |
| import com.beust.jcommander.ParameterException; |
| import com.google.common.collect.ImmutableSet; |
| import com.google.common.flogger.FluentLogger; |
| import com.google.inject.Provider; |
| import java.io.PrintWriter; |
| import java.util.Optional; |
| import javax.inject.Inject; |
| import org.openapi4j.parser.model.v3.OpenApi3; |
| |
| final class CommandLineBaseRunner implements CommandLineRunner { |
| |
| private static final FluentLogger logger = FluentLogger.forEnclosingClass(); |
| private final Provider<PrintWriter> printWriterProvider; |
| private final CommandLineParser commandLineParser; |
| private final BaseParser baseParser; |
| private final ExtendedValidator extendedValidator; |
| |
| @Inject |
| CommandLineBaseRunner( |
| Provider<PrintWriter> printWriterProvider, |
| CommandLineParser commandLineParser, |
| BaseParser baseParser, |
| ExtendedValidator extendedValidator) { |
| this.printWriterProvider = printWriterProvider; |
| this.commandLineParser = commandLineParser; |
| this.baseParser = baseParser; |
| this.extendedValidator = extendedValidator; |
| } |
| |
| @Override |
| public void run(String[] args) { |
| PrintWriter printWriter = printWriterProvider.get(); |
| |
| try { |
| commandLineParser.parseArguments(args); |
| OpenApi3 oas = baseParser.parse(commandLineParser.getOasFile()); |
| ImmutableSet<ExtensionValidationMessage> errors = extendedValidator.validate(oas); |
| printWriter.printf("Found %d extension validation errors.\n\n", errors.size()); |
| printValidationMessages(errors, printWriter); |
| } catch (ParserException | ParameterException e) { |
| logger.atSevere().withCause(e).log("Unable to parse arguments"); |
| printWriter.printf("Error : %s\n", e.getMessage()); |
| |
| Optional.ofNullable(e.getCause()) |
| .ifPresent(cause -> printWriter.printf("Cause : %s\n", cause.getMessage())); |
| } finally { |
| printWriter.close(); |
| } |
| } |
| |
| private static void printValidationMessages( |
| ImmutableSet<ExtensionValidationMessage> errors, PrintWriter printWriter) { |
| Optional.ofNullable(errors) |
| .orElse(ImmutableSet.of()) |
| .forEach( |
| validationMessage -> |
| printWriter.printf( |
| "Type: %s\nMessage: %s\nPath: %s\n\n", |
| validationMessage.type(), |
| validationMessage.message(), |
| validationMessage.path())); |
| } |
| } |