16
16
17
17
package org .openapitools .codegen .languages ;
18
18
19
+ import java .util .HashMap ;
19
20
import org .apache .commons .lang3 .StringUtils ;
20
21
import org .openapitools .codegen .CliOption ;
21
22
import org .openapitools .codegen .CodegenConstants ;
44
45
public class DartDioClientCodegen extends DartClientCodegen {
45
46
private static final Logger LOGGER = LoggerFactory .getLogger (DartDioClientCodegen .class );
46
47
47
- private static final String NULLABLE_FIELDS = "nullableFields" ;
48
+ public static final String NULLABLE_FIELDS = "nullableFields" ;
48
49
private static final String IS_FORMAT_JSON = "jsonFormat" ;
49
50
private static final String CLIENT_NAME = "clientName" ;
51
+ public static final String DATE_LIBRARY = "dateLibrary" ;
50
52
51
53
private static Set <String > modelToIgnore = new HashSet <>();
52
54
@@ -62,6 +64,7 @@ public class DartDioClientCodegen extends DartClientCodegen {
62
64
private static final String SERIALIZATION_JSON = "json" ;
63
65
64
66
private boolean nullableFields = true ;
67
+ private String dateLibrary = "core" ;
65
68
66
69
public DartDioClientCodegen () {
67
70
super ();
@@ -74,6 +77,12 @@ public DartDioClientCodegen() {
74
77
apiTestTemplateFiles .clear ();
75
78
76
79
cliOptions .add (new CliOption (NULLABLE_FIELDS , "Is the null fields should be in the JSON payload" ));
80
+ CliOption dateLibrary = new CliOption (DATE_LIBRARY , "Option. Date library to use" ).defaultValue (this .getDateLibrary ());
81
+ Map <String , String > dateOptions = new HashMap <>();
82
+ dateOptions .put ("core" , "Dart core library (DateTime)" );
83
+ dateOptions .put ("timemachine" , "Time Machine is date and time library for Flutter, Web, and Server with support for timezones, calendars, cultures, formatting and parsing." );
84
+ dateLibrary .setEnum (dateOptions );
85
+ cliOptions .add (dateLibrary );
77
86
78
87
typeMapping .put ("file" , "Uint8List" );
79
88
typeMapping .put ("binary" , "Uint8List" );
@@ -84,6 +93,23 @@ public DartDioClientCodegen() {
84
93
importMapping .put ("Uint8List" , "dart:typed_data" );
85
94
}
86
95
96
+ public String getDateLibrary () {
97
+ return dateLibrary ;
98
+ }
99
+
100
+ public void setDateLibrary (String library ) {
101
+ this .dateLibrary = library ;
102
+ }
103
+
104
+ public boolean getNullableFields () {
105
+ return nullableFields ;
106
+ }
107
+
108
+ public void setNullableFields (boolean nullableFields ) {
109
+ this .nullableFields = nullableFields ;
110
+ }
111
+
112
+
87
113
@ Override
88
114
public String getName () {
89
115
return "dart-dio" ;
@@ -94,6 +120,10 @@ public String getHelp() {
94
120
return "Generates a Dart Dio client library." ;
95
121
}
96
122
123
+ @ Override public void setBrowserClient (boolean browserClient ) {
124
+ super .browserClient = browserClient ;
125
+ }
126
+
97
127
@ Override
98
128
public String toDefaultValue (Schema p ) {
99
129
if (ModelUtils .isMapSchema (p )) {
@@ -105,47 +135,114 @@ public String toDefaultValue(Schema p) {
105
135
}
106
136
107
137
@ Override
108
- public String escapeReservedWord (String name ) {
109
- if (this .reservedWordsMappings ().containsKey (name )) {
110
- return this .reservedWordsMappings ().get (name );
111
- }
112
- return "_" + name ;
138
+ protected void addAdditionPropertiesToCodeGenModel (CodegenModel codegenModel , Schema schema ) {
139
+ //super.addAdditionPropertiesToCodeGenModel(codegenModel, schema);
140
+ codegenModel .additionalPropertiesType = getSchemaType (ModelUtils .getAdditionalProperties (schema ));
141
+ addImport (codegenModel , codegenModel .additionalPropertiesType );
113
142
}
114
143
115
144
@ Override
116
145
public String toEnumVarName (String name , String datatype ) {
117
146
if (name .length () == 0 ) {
118
147
return "empty" ;
119
148
}
120
- if ("number" .equalsIgnoreCase (datatype ) ||
121
- "int" .equalsIgnoreCase (datatype )) {
149
+ if ("number" .equalsIgnoreCase (datatype ) || "int" .equalsIgnoreCase (datatype )) {
122
150
name = "Number" + name ;
123
151
}
124
152
name = camelize (name , true );
125
-
126
153
// for reserved word or word starting with number, append _
127
154
if (isReservedWord (name ) || name .matches ("^\\ d.*" )) {
128
155
name = escapeReservedWord (name );
129
156
}
130
157
return name ;
131
158
}
132
159
133
- @ Override
134
- protected void addAdditionPropertiesToCodeGenModel (CodegenModel codegenModel , Schema schema ) {
135
- //super.addAdditionPropertiesToCodeGenModel(codegenModel, schema);
136
- codegenModel .additionalPropertiesType = getSchemaType (ModelUtils .getAdditionalProperties (schema ));
137
- addImport (codegenModel , codegenModel .additionalPropertiesType );
138
- }
139
-
140
160
@ Override
141
161
public void processOpts () {
162
+ if (additionalProperties .containsKey (CodegenConstants .TEMPLATE_DIR )) {
163
+ this .setTemplateDir ((String ) additionalProperties .get (CodegenConstants .TEMPLATE_DIR ));
164
+ }
165
+
166
+ if (additionalProperties .containsKey (CodegenConstants .MODEL_PACKAGE )) {
167
+ this .setModelPackage ((String ) additionalProperties .get (CodegenConstants .MODEL_PACKAGE ));
168
+ }
169
+
170
+ if (additionalProperties .containsKey (CodegenConstants .API_PACKAGE )) {
171
+ this .setApiPackage ((String ) additionalProperties .get (CodegenConstants .API_PACKAGE ));
172
+ }
173
+
174
+ if (additionalProperties .containsKey (CodegenConstants .HIDE_GENERATION_TIMESTAMP )) {
175
+ setHideGenerationTimestamp (convertPropertyToBooleanAndWriteBack (CodegenConstants .HIDE_GENERATION_TIMESTAMP ));
176
+ } else {
177
+ additionalProperties .put (CodegenConstants .HIDE_GENERATION_TIMESTAMP , hideGenerationTimestamp );
178
+ }
179
+
180
+ if (additionalProperties .containsKey (CodegenConstants .SORT_PARAMS_BY_REQUIRED_FLAG )) {
181
+ this .setSortParamsByRequiredFlag (Boolean .valueOf (additionalProperties
182
+ .get (CodegenConstants .SORT_PARAMS_BY_REQUIRED_FLAG ).toString ()));
183
+ }
184
+
185
+ if (additionalProperties .containsKey (CodegenConstants .PREPEND_FORM_OR_BODY_PARAMETERS )) {
186
+ this .setPrependFormOrBodyParameters (Boolean .valueOf (additionalProperties
187
+ .get (CodegenConstants .PREPEND_FORM_OR_BODY_PARAMETERS ).toString ()));
188
+ }
189
+
190
+ if (additionalProperties .containsKey (CodegenConstants .ENSURE_UNIQUE_PARAMS )) {
191
+ this .setEnsureUniqueParams (Boolean .valueOf (additionalProperties
192
+ .get (CodegenConstants .ENSURE_UNIQUE_PARAMS ).toString ()));
193
+ }
194
+
195
+ if (additionalProperties .containsKey (CodegenConstants .ALLOW_UNICODE_IDENTIFIERS )) {
196
+ this .setAllowUnicodeIdentifiers (Boolean .valueOf (additionalProperties
197
+ .get (CodegenConstants .ALLOW_UNICODE_IDENTIFIERS ).toString ()));
198
+ }
199
+
200
+ if (additionalProperties .containsKey (CodegenConstants .API_NAME_SUFFIX )) {
201
+ this .setApiNameSuffix ((String ) additionalProperties .get (CodegenConstants .API_NAME_SUFFIX ));
202
+ }
203
+
204
+ if (additionalProperties .containsKey (CodegenConstants .MODEL_NAME_PREFIX )) {
205
+ this .setModelNamePrefix ((String ) additionalProperties .get (CodegenConstants .MODEL_NAME_PREFIX ));
206
+ }
207
+
208
+ if (additionalProperties .containsKey (CodegenConstants .MODEL_NAME_SUFFIX )) {
209
+ this .setModelNameSuffix ((String ) additionalProperties .get (CodegenConstants .MODEL_NAME_SUFFIX ));
210
+ }
211
+
212
+ if (additionalProperties .containsKey (CodegenConstants .REMOVE_OPERATION_ID_PREFIX )) {
213
+ this .setRemoveOperationIdPrefix (Boolean .valueOf (additionalProperties
214
+ .get (CodegenConstants .REMOVE_OPERATION_ID_PREFIX ).toString ()));
215
+ }
216
+
217
+ if (additionalProperties .containsKey (CodegenConstants .DOCEXTENSION )) {
218
+ this .setDocExtension (String .valueOf (additionalProperties
219
+ .get (CodegenConstants .DOCEXTENSION ).toString ()));
220
+ }
221
+
222
+ if (additionalProperties .containsKey (CodegenConstants .ENABLE_POST_PROCESS_FILE )) {
223
+ this .setEnablePostProcessFile (Boolean .valueOf (additionalProperties
224
+ .get (CodegenConstants .ENABLE_POST_PROCESS_FILE ).toString ()));
225
+ }
226
+
227
+ if (additionalProperties .containsKey (CodegenConstants .GENERATE_ALIAS_AS_MODEL )) {
228
+ ModelUtils .setGenerateAliasAsModel (Boolean .valueOf (additionalProperties
229
+ .get (CodegenConstants .GENERATE_ALIAS_AS_MODEL ).toString ()));
230
+ }
231
+
142
232
if (StringUtils .isEmpty (System .getenv ("DART_POST_PROCESS_FILE" ))) {
143
233
LOGGER .info ("Environment variable DART_POST_PROCESS_FILE not defined so the Dart code may not be properly formatted. To define it, try `export DART_POST_PROCESS_FILE=\" /usr/local/bin/dartfmt -w\" ` (Linux/Mac)" );
144
234
LOGGER .info ("NOTE: To enable file post-processing, 'enablePostProcessFile' must be set to `true` (--enable-post-process-file for CLI)." );
145
235
}
146
236
237
+ if (additionalProperties .containsKey (BROWSER_CLIENT )) {
238
+ this .setBrowserClient (convertPropertyToBooleanAndWriteBack (BROWSER_CLIENT ));
239
+ } else {
240
+ //not set, use to be passed to template
241
+ additionalProperties .put (BROWSER_CLIENT , browserClient );
242
+ }
243
+
147
244
if (additionalProperties .containsKey (NULLABLE_FIELDS )) {
148
- nullableFields = convertPropertyToBooleanAndWriteBack (NULLABLE_FIELDS );
245
+ this . setNullableFields ( convertPropertyToBooleanAndWriteBack (NULLABLE_FIELDS ) );
149
246
} else {
150
247
//not set, use to be passed to template
151
248
additionalProperties .put (NULLABLE_FIELDS , nullableFields );
@@ -189,6 +286,9 @@ public void processOpts() {
189
286
this .setSourceFolder ((String ) additionalProperties .get (CodegenConstants .SOURCE_FOLDER ));
190
287
}
191
288
289
+ if (additionalProperties .containsKey (DATE_LIBRARY )) {
290
+ this .setDateLibrary (additionalProperties .get (DATE_LIBRARY ).toString ());
291
+ }
192
292
// make api and model doc path available in mustache template
193
293
additionalProperties .put ("apiDocPath" , apiDocPath );
194
294
additionalProperties .put ("modelDocPath" , modelDocPath );
@@ -201,6 +301,24 @@ public void processOpts() {
201
301
202
302
supportingFiles .add (new SupportingFile ("gitignore.mustache" , "" , ".gitignore" ));
203
303
supportingFiles .add (new SupportingFile ("README.mustache" , "" , "README.md" ));
304
+
305
+ if ("core" .equals (dateLibrary )) {
306
+ additionalProperties .put ("core" , "true" );
307
+ typeMapping .put ("Date" , "DateTime" );
308
+ typeMapping .put ("date" , "DateTime" );
309
+ importMapping .put ("DateTime" , "DateTime" );
310
+ importMapping .put ("OffsetDateTime" , "DateTime" );
311
+ } else if ("timemachine" .equals (dateLibrary )) {
312
+ additionalProperties .put ("timeMachine" , "true" );
313
+ typeMapping .put ("date" , "LocalDate" );
314
+ typeMapping .put ("Date" , "LocalDate" );
315
+ typeMapping .put ("DateTime" , "OffsetDateTime" );
316
+ typeMapping .put ("datetime" , "OffsetDateTime" );
317
+ importMapping .put ("LocalDate" , "package:time_machine/time_machine.dart" );
318
+ importMapping .put ("OffsetDateTime" , "package:time_machine/time_machine.dart" );
319
+ supportingFiles .add (new SupportingFile ("local_date_serializer.mustache" , libFolder , "local_date_serializer.dart" ));
320
+
321
+ }
204
322
}
205
323
206
324
@ Override
@@ -321,4 +439,6 @@ public Map<String, Object> postProcessOperationsWithModels(Map<String, Object> o
321
439
322
440
return objs ;
323
441
}
442
+
443
+
324
444
}
0 commit comments