28
28
import io .swagger .v3 .oas .models .servers .Server ;
29
29
import org .apache .commons .lang3 .StringUtils ;
30
30
import org .openapitools .codegen .*;
31
+ import org .openapitools .codegen .meta .features .ClientModificationFeature ;
32
+ import org .openapitools .codegen .meta .features .DocumentationFeature ;
33
+ import org .openapitools .codegen .meta .features .GlobalFeature ;
34
+ import org .openapitools .codegen .meta .features .SchemaSupportFeature ;
35
+ import org .openapitools .codegen .meta .features .SecurityFeature ;
36
+ import org .openapitools .codegen .meta .features .WireFormatFeature ;
31
37
import org .openapitools .codegen .utils .ModelUtils ;
32
38
import org .slf4j .Logger ;
33
39
import org .slf4j .LoggerFactory ;
@@ -50,6 +56,26 @@ abstract public class AbstractAdaCodegen extends DefaultCodegen implements Codeg
50
56
public AbstractAdaCodegen () {
51
57
super ();
52
58
59
+ modifyFeatureSet (features -> features
60
+ .includeDocumentationFeatures (DocumentationFeature .Readme )
61
+ .wireFormatFeatures (EnumSet .of (WireFormatFeature .JSON , WireFormatFeature .XML ))
62
+ .securityFeatures (EnumSet .noneOf (
63
+ SecurityFeature .class
64
+ ))
65
+ .excludeGlobalFeatures (
66
+ GlobalFeature .XMLStructureDefinitions ,
67
+ GlobalFeature .Callbacks ,
68
+ GlobalFeature .LinkObjects ,
69
+ GlobalFeature .ParameterStyling
70
+ )
71
+ .excludeSchemaSupportFeatures (
72
+ SchemaSupportFeature .Polymorphism
73
+ )
74
+ .includeClientModificationFeatures (
75
+ ClientModificationFeature .BasePath
76
+ )
77
+ );
78
+
53
79
/*
54
80
* Reserved words. Override this with reserved words specific to your language
55
81
*/
@@ -168,7 +194,8 @@ public AbstractAdaCodegen() {
168
194
embeddedTemplateDir = templateDir = "Ada" ;
169
195
170
196
languageSpecificPrimitives = new HashSet <String >(
171
- Arrays .asList ("integer" , "boolean" , "Integer" , "Character" , "Boolean" , "long" , "float" , "double" ));
197
+ Arrays .asList ("integer" , "boolean" , "number" , "long" , "float" ,
198
+ "double" , "object" , "string" , "date" , "DateTime" , "binary" ));
172
199
}
173
200
174
201
public String toFilename (String name ) {
@@ -198,20 +225,28 @@ protected String toAdaIdentifier(String name, String prefix) {
198
225
}
199
226
StringBuilder result = new StringBuilder ();
200
227
boolean needUpperCase = true ;
228
+ boolean prevUpperCase = false ;
229
+ if (name .isEmpty () || Character .isDigit (name .charAt (0 )) || name .charAt (0 ) == '_' ) {
230
+ result .append (prefix );
231
+ }
201
232
for (int i = 0 ; i < name .length (); i ++) {
202
233
char c = name .charAt (i );
234
+ boolean isUpperOrDigit = Character .isUpperCase (c ) || Character .isDigit (c );
203
235
if (needUpperCase ) {
204
236
needUpperCase = false ;
237
+ prevUpperCase = isUpperOrDigit ;
205
238
result .append (Character .toUpperCase (c ));
206
239
207
- } else if (Character . isUpperCase (( c )) ) {
208
- if (!needUpperCase ) {
240
+ } else if (isUpperOrDigit ) {
241
+ if (!prevUpperCase ) {
209
242
result .append ('_' );
210
243
}
211
244
result .append (c );
212
245
needUpperCase = false ;
246
+ prevUpperCase = true ;
213
247
} else {
214
248
result .append (c );
249
+ prevUpperCase = isUpperOrDigit ;
215
250
if (c == '_' ) {
216
251
needUpperCase = true ;
217
252
}
@@ -276,6 +311,40 @@ public String toModelName(final String name) {
276
311
return result ;
277
312
}
278
313
314
+ @ Override
315
+ public String toEnumVarName (String value , String datatype ) {
316
+ String var = null ;
317
+ if (value .isEmpty ()) {
318
+ var = "EMPTY" ;
319
+ }
320
+
321
+ // for symbol, e.g. $, #
322
+ else if (getSymbolName (value ) != null ) {
323
+ var = getSymbolName (value ).toUpperCase (Locale .ROOT );
324
+ }
325
+
326
+ // number
327
+ else if ("Integer" .equals (datatype ) || "Long" .equals (datatype ) ||
328
+ "Float" .equals (datatype ) || "Double" .equals (datatype )) {
329
+ String varName = "NUMBER_" + value ;
330
+ varName = varName .replaceAll ("-" , "MINUS_" );
331
+ varName = varName .replaceAll ("\\ +" , "PLUS_" );
332
+ varName = varName .replaceAll ("\\ ." , "_DOT_" );
333
+ var = varName ;
334
+ }
335
+
336
+ // string
337
+ else {
338
+ var = value .replaceAll ("\\ W+" , "_" ).toUpperCase (Locale .ROOT );
339
+ if (var .matches ("\\ d.*" )) {
340
+ var = "_" + var ;
341
+ } else {
342
+ var = sanitizeName (var );
343
+ }
344
+ }
345
+ return var ;
346
+ }
347
+
279
348
@ Override
280
349
public CodegenProperty fromProperty (String name , Schema p ) {
281
350
CodegenProperty property = super .fromProperty (name , p );
@@ -371,6 +440,44 @@ public String getTypeDeclaration(Schema p) {
371
440
return modelPackage + ".Models." + modelType ;
372
441
}
373
442
443
+ private boolean isStreamType (CodegenProperty parameter ) {
444
+ boolean isStreamType = parameter .isString || parameter .isBoolean || parameter .isDate
445
+ || parameter .isDateTime || parameter .isInteger || parameter .isLong
446
+ || (parameter .isFreeFormObject && !parameter .isMap );
447
+
448
+ return isStreamType ;
449
+ }
450
+
451
+ private boolean isModelType (CodegenProperty parameter ) {
452
+ boolean isModel = parameter .dataType .startsWith (modelPackage );
453
+ if (!isModel && !parameter .isPrimitiveType && !parameter .isDate
454
+ && !parameter .isFreeFormObject
455
+ && !parameter .isString && !parameter .isContainer && !parameter .isFile
456
+ && !parameter .dataType .startsWith ("Swagger" )) {
457
+ isModel = true ;
458
+ }
459
+ return isModel ;
460
+ }
461
+
462
+ private boolean isStreamType (CodegenParameter parameter ) {
463
+ boolean isStreamType = parameter .isString || parameter .isBoolean || parameter .isDate
464
+ || parameter .isDateTime || parameter .isInteger || parameter .isLong
465
+ || (parameter .isFreeFormObject && !parameter .isMap );
466
+
467
+ return isStreamType ;
468
+ }
469
+
470
+ private boolean isModelType (CodegenParameter parameter ) {
471
+ boolean isModel = parameter .dataType .startsWith (modelPackage );
472
+ if (!isModel && !parameter .isPrimitiveType && !parameter .isDate
473
+ && !parameter .isFreeFormObject
474
+ && !parameter .isString && !parameter .isContainer && !parameter .isFile
475
+ && !parameter .dataType .startsWith ("Swagger" )) {
476
+ isModel = true ;
477
+ }
478
+ return isModel ;
479
+ }
480
+
374
481
/**
375
482
* Overrides postProcessParameter to add a vendor extension "x-is-model-type".
376
483
* This boolean indicates that the parameter comes from the model package.
@@ -385,12 +492,8 @@ public void postProcessParameter(CodegenParameter parameter) {
385
492
if (parameter .dataType == null ) {
386
493
return ;
387
494
}
388
- boolean isModel = parameter .dataType .startsWith (modelPackage );
389
- if (!isModel && !parameter .isPrimitiveType && !parameter .isDate
390
- && !parameter .isString && !parameter .isContainer && !parameter .isFile ) {
391
- isModel = true ;
392
- }
393
- parameter .vendorExtensions .put ("x-is-model-type" , isModel );
495
+ parameter .vendorExtensions .put ("x-is-model-type" , isModelType (parameter ));
496
+ parameter .vendorExtensions .put ("x-is-stream-type" , isStreamType (parameter ));
394
497
}
395
498
396
499
/**
@@ -426,6 +529,8 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation
426
529
if (methodResponse != null && ModelUtils .getSchemaFromResponse (methodResponse ) != null ) {
427
530
CodegenProperty cm = fromProperty ("response" , ModelUtils .getSchemaFromResponse (methodResponse ));
428
531
op .vendorExtensions .put ("x-codegen-response" , cm );
532
+ op .vendorExtensions .put ("x-is-model-type" , isModelType (cm ));
533
+ op .vendorExtensions .put ("x-is-stream-type" , isStreamType (cm ));
429
534
if ("HttpContent" .equals (cm .dataType )) {
430
535
op .vendorExtensions .put ("x-codegen-response-ishttpcontent" , true );
431
536
}
@@ -524,7 +629,7 @@ public Map<String, Object> postProcessOperationsWithModels(Map<String, Object> o
524
629
if (last < 0 ) {
525
630
break ;
526
631
}
527
- if (path .substring (pos , last - 1 ).equals (p .baseName )) {
632
+ if (path .substring (pos , last ).equals (p .baseName )) {
528
633
break ;
529
634
}
530
635
pos = last + 1 ;
@@ -558,6 +663,7 @@ public Map<String, Object> postProcessModels(Map<String, Object> objs) {
558
663
isModel = true ;
559
664
}
560
665
p .vendorExtensions .put ("x-is-model-type" , isModel );
666
+ p .vendorExtensions .put ("x-is-stream-type" , isStreamType (p ));
561
667
Boolean required = p .getRequired ();
562
668
563
669
// Convert optional members to use the Nullable_<T> type.
0 commit comments