11package io .swagger .v3 .parser ;
22
3+ import io .swagger .v3 .core .util .Json ;
4+ import io .swagger .v3 .core .util .Yaml ;
5+
6+ import io .swagger .v3 .parser .core .models .ParseOptions ;
37import io .swagger .v3 .parser .core .models .SwaggerParseResult ;
8+ import net .sourceforge .argparse4j .ArgumentParsers ;
9+ import net .sourceforge .argparse4j .impl .Arguments ;
10+ import net .sourceforge .argparse4j .inf .ArgumentParser ;
11+ import net .sourceforge .argparse4j .inf .ArgumentParserException ;
12+ import net .sourceforge .argparse4j .inf .Namespace ;
13+
14+
15+ import java .io .OutputStream ;
16+ import java .nio .file .Files ;
17+ import java .nio .file .Paths ;
418import java .util .ArrayList ;
519import java .util .List ;
620
21+
722public class SwaggerParser {
23+
24+ public static final String RESOLVE = "resolve" ;
25+ public static final String RESOLVEFULLY = "resolvefully" ;
26+ public static final String FLATTEN = "flatten" ;
27+ public static final String JSON = "json" ;
28+ public static final String YAML = "yaml" ;
29+ public static final String LOG_ERRORS = "l" ;
30+ public static final String OUTPUT_FILE = "o" ;
31+ public static final String TRUE = "true" ;
32+ public static final String INPUT_FILE = "i" ;
33+
834 public static void main (String [] args ) {
935 if (args .length > 0 ){
10- List <String > messages = readFromLocation (args [0 ]);
11- if ( messages .size () > 0 ){
12- messages .forEach (System .out ::println );
36+ ArgumentParser parser = ArgumentParsers .newFor ("swagger-parser" ).build ()
37+ .defaultHelp (true );
38+ parser .addArgument ("-i" )
39+ .dest (INPUT_FILE )
40+ .required (true )
41+ .type (String .class )
42+ .help ("input file to be parsed" );
43+ parser .addArgument ("-resolve" )
44+ .dest (RESOLVE )
45+ .type (Boolean .class )
46+ .action (Arguments .storeTrue ())
47+ .setDefault (false )
48+ .help ("resolve remote or local references" );
49+ parser .addArgument ("-resolveFully" )
50+ .dest (RESOLVEFULLY )
51+ .type (Boolean .class )
52+ .action (Arguments .storeTrue ())
53+ .setDefault (false )
54+ .help ("" );
55+ parser .addArgument ("-flatten" )
56+ .dest (FLATTEN )
57+ .type (Boolean .class )
58+ .action (Arguments .storeTrue ())
59+ .setDefault (false )
60+ .help ("" );
61+ parser .addArgument ("-o" )
62+ .dest (OUTPUT_FILE )
63+ .type (String .class )
64+ .help ("output file parsed" );
65+ parser .addArgument ("-l" )
66+ .dest (LOG_ERRORS )
67+ .type (String .class )
68+ .help ("output error logs" );
69+ parser .addArgument ("-json" )
70+ .dest (JSON )
71+ .type (Boolean .class )
72+ .action (Arguments .storeTrue ())
73+ .setDefault (false )
74+ .help ("generate file as JSON" );
75+ parser .addArgument ("-yaml" )
76+ .dest (YAML )
77+ .type (Boolean .class )
78+ .action (Arguments .storeTrue ())
79+ .setDefault (false )
80+ .help ("generate file as YAML" );
81+ try {
82+ readFromLocation (parser .parseArgs (args ));
83+ }catch (ArgumentParserException e ) {
84+ parser .handleError (e );
1385 System .exit (1 );
1486 }
1587 }
1688 }
1789
18- public static List <String > readFromLocation (String location ) {
90+ private static void generateMessagesFile (List <String > messages , Namespace arguments ) {
91+ if ( messages != null && !messages .isEmpty () && arguments != null && arguments .getString (LOG_ERRORS ) != null ){
92+ if (arguments .getString (LOG_ERRORS ) != null ) {
93+ generateParsedFile (arguments , LOG_ERRORS , messages .toString ());
94+ }
95+ }
96+ }
97+
98+ public static List <String > readFromLocation (Namespace args ) {
1999 List <String > messages = new ArrayList <>();
100+ ParseOptions options ;
20101 try {
21- final SwaggerParseResult result = new OpenAPIV3Parser ().readLocation (location , null , null );
102+ options = setOptions (args );
103+ final SwaggerParseResult result = new OpenAPIV3Parser ().readLocation (args .get (INPUT_FILE ), null , options );
104+ if (args .getString (OUTPUT_FILE ) != null ) {
105+ if (result .getOpenAPI () != null ){
106+ String output ;
107+ if (args .getString (JSON ) != null && args .getString (JSON ).equals (TRUE )){
108+ output = Json .pretty (result .getOpenAPI ());
109+ }else if (args .getString (YAML ) != null && args .getString (YAML ).equals (TRUE )){
110+ output = Yaml .pretty (result .getOpenAPI ());
111+ }else {
112+ output = Yaml .pretty (result .getOpenAPI ());
113+ }
114+ generateParsedFile (args , OUTPUT_FILE , output );
115+ }
116+ }
22117 if (result .getOpenAPI () == null || !result .getMessages ().isEmpty ()){
23118 messages = result .getMessages ();
119+ generateMessagesFile (messages , args );
24120 }
25121 }catch (Exception e ){
26122 e .printStackTrace ();
27- System .exit (1 );
28123 }
29124 return messages ;
30125 }
126+
127+ private static void generateParsedFile (Namespace args , String o , String result ) {
128+ try {
129+ if (result != null ) {
130+ OutputStream out = Files .newOutputStream (Paths .get (args .getString (o )));
131+ byte [] specBytes = result .getBytes ();
132+ out .write (specBytes );
133+ out .close ();
134+ }
135+ }catch (Exception e ){
136+ e .printStackTrace ();
137+ }
138+ }
139+
140+ private static ParseOptions setOptions (Namespace parseOptions ) {
141+ ParseOptions options = new ParseOptions ();
142+
143+ if (parseOptions .getString (RESOLVE ) !=null && parseOptions .getString (RESOLVE ).equals (TRUE )) {
144+ options .setResolve (true );
145+ }
146+ if (parseOptions .getString (RESOLVEFULLY ) != null && parseOptions .getString (RESOLVEFULLY ).equals (TRUE )) {
147+ options .setResolveFully (true );
148+ }
149+ if (parseOptions .getString (FLATTEN ) != null && parseOptions .getString (FLATTEN ).equals (TRUE )) {
150+ options .setFlatten (true );
151+ }
152+ return options ;
153+ }
31154}
0 commit comments