1
+ package io .swagger .v3 .parser ;
2
+
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 ;
7
+ import 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 ;
18
+ import java .util .ArrayList ;
19
+ import java .util .List ;
20
+
21
+
22
+ public 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
+
34
+ public static void main (String [] args ) {
35
+ if (args .length > 0 ){
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 );
85
+ System .exit (1 );
86
+ }
87
+ }
88
+ }
89
+
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 ) {
99
+ List <String > messages = new ArrayList <>();
100
+ ParseOptions options ;
101
+ try {
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
+ }
117
+ if (result .getOpenAPI () == null || !result .getMessages ().isEmpty ()){
118
+ messages = result .getMessages ();
119
+ generateMessagesFile (messages , args );
120
+ }
121
+ }catch (Exception e ){
122
+ e .printStackTrace ();
123
+ }
124
+ return messages ;
125
+ }
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
+ }
154
+ }
0 commit comments