
com.qdesrame.openapi.diff.Main Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of openapi-diff Show documentation
Show all versions of openapi-diff Show documentation
Utility for comparing two OpenAPI specifications.
package com.qdesrame.openapi.diff;
import com.qdesrame.openapi.diff.model.ChangedOpenApi;
import com.qdesrame.openapi.diff.output.ConsoleRender;
import com.qdesrame.openapi.diff.output.HtmlRender;
import com.qdesrame.openapi.diff.output.MarkdownRender;
import org.apache.commons.cli.*;
import org.apache.commons.io.FileUtils;
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
public class Main {
static final Logger logger = LoggerFactory.getLogger(Main.class);
public static void main(String... args) {
Options options = new Options();
options.addOption(Option.builder("h").longOpt("help").desc("print this message").build());
options.addOption(Option.builder().longOpt("version").desc("print the version information and exit").build());
options.addOption(Option.builder().longOpt("trace").desc("be extra verbose").build());
options.addOption(Option.builder().longOpt("debug").desc("Print debugging information").build());
options.addOption(Option.builder().longOpt("info").desc("Print additional information").build());
options.addOption(Option.builder().longOpt("warn").desc("Print warning information").build());
options.addOption(Option.builder().longOpt("error").desc("Print error information").build());
options.addOption(Option.builder().longOpt("off").desc("No information printed").build());
options.addOption(Option.builder("l").longOpt("log").hasArg().argName("level")
.desc("use given level for log (TRACE, DEBUG, INFO, WARN, ERROR, OFF). Default: ERROR").build());
options.addOption(Option.builder().longOpt("header").hasArgs().numberOfArgs(2).valueSeparator()
.argName("property=value").desc("use given header for authorisation").build());
options.addOption(Option.builder().longOpt("query").hasArgs().numberOfArgs(2).valueSeparator()
.argName("property=value").desc("use query param for authorisation").build());
options.addOption(Option.builder("o").longOpt("output").hasArgs().numberOfArgs(2).valueSeparator()
.argName("format=file").desc("use given format (html, markdown) for output in file").build());
options.addOption(Option.builder().longOpt("markdown").hasArg().argName("file")
.desc("export diff as markdown in given file").build());
options.addOption(Option.builder().longOpt("html").hasArg().argName("file")
.desc("export diff as html in given file").build());
final String message = "Hello logging!";
// create the parser
CommandLineParser parser = new DefaultParser();
try {
// parse the command line arguments
CommandLine line = parser.parse(options, args);
if (line.hasOption("h")) { // automatically generate the help statement
printHelp(options);
System.exit(0);
}
String logLevel = "ERROR";
if (line.hasOption("off")) {
logLevel = "OFF";
}
if (line.hasOption("error")) {
logLevel = "ERROR";
}
if (line.hasOption("warn")) {
logLevel = "WARN";
}
if (line.hasOption("info")) {
logLevel = "INFO";
}
if (line.hasOption("debug")) {
logLevel = "DEBUG";
}
if (line.hasOption("trace")) {
logLevel = "TRACE";
}
if (line.hasOption("log")) {
logLevel = line.getOptionValue("log");
if (!logLevel.equalsIgnoreCase("TRACE") && !logLevel.equalsIgnoreCase("DEBUG")
&& !logLevel.equalsIgnoreCase("INFO") && !logLevel.equalsIgnoreCase("WARN")
&& !logLevel.equalsIgnoreCase("ERROR") && !logLevel.equalsIgnoreCase("OFF")) {
throw new ParseException(
String.format("Invalid log level. Excepted: [TRACE, DEBUG, INFO, WARN, ERROR, OFF]. Given: %s",
logLevel));
}
}
LogManager.getRootLogger().setLevel(Level.toLevel(logLevel));
if (line.getArgList().size() < 2) {
throw new ParseException("Missing arguments");
}
String oldPath = line.getArgList().get(0);
String newPath = line.getArgList().get(1);
ChangedOpenApi result = OpenApiCompare.fromLocations(oldPath, newPath);
ConsoleRender consoleRender = new ConsoleRender();
System.out.println(consoleRender.render(result));
HtmlRender htmlRender = new HtmlRender();
MarkdownRender mdRender = new MarkdownRender();
String output = null;
String outputFile = null;
if (line.hasOption("html")) {
output = htmlRender.render(result);
outputFile = line.getOptionValue("html");
}
if (line.hasOption("markdown")) {
output = mdRender.render(result);
outputFile = line.getOptionValue("markdown");
}
if (line.hasOption("output")) {
String[] outputValues = line.getOptionValues("output");
if (outputValues[0].equalsIgnoreCase("markdown")) {
output = mdRender.render(result);
} else if (outputValues[0].equalsIgnoreCase("html")) {
output = htmlRender.render(result);
} else {
throw new ParseException("Invalid output format");
}
outputFile = outputValues[1];
}
if (output != null && outputFile != null) {
File file = new File(outputFile);
logger.debug("Output file: {}", file.getAbsolutePath());
try {
FileUtils.writeStringToFile(file, output);
} catch (IOException e) {
logger.error("Impossible to write output to file {}", outputFile, e);
System.exit(2);
}
}
System.exit(result.isDiff() ? 1 : 0);
} catch (ParseException exp) {
// oops, something went wrong
System.err.println("Parsing failed. Reason: " + exp.getMessage());
printHelp(options);
System.exit(2);
}
}
public static void printHelp(Options options) {
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("openapi-diff ", options);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy