blob: b35dfe7750aecb620a6270448d35098cd715a8e8 [file] [log] [blame]
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()));
}
}