26
26
import java .io .IOException ;
27
27
import java .io .StringWriter ;
28
28
import java .nio .charset .StandardCharsets ;
29
+ import java .nio .file .Paths ;
29
30
import java .util .*;
31
+ import java .util .stream .Collectors ;
32
+ import java .util .stream .Stream ;
30
33
31
34
public abstract class CppClientGenerator implements ClientGenerator {
32
35
@@ -52,11 +55,11 @@ public SdkFileEntry[] generateSourceFiles(ServiceModel serviceModel) throws Exce
52
55
//check on all fields.
53
56
serviceModel .getShapes ().values ().stream ().filter (hasMembers -> hasMembers .getMembers () != null ).forEach (shape ->
54
57
shape .getMembers ().values ().stream ().filter (shapeMember ->
55
- shapeMember .isRequired ()).forEach ( member -> member .setRequired (false )));
58
+ shapeMember .isRequired ()).forEach (member -> member .setRequired (false )));
56
59
57
60
getOperationsToRemove ().stream ().forEach (operation ->
58
61
{
59
- serviceModel .getOperations ().remove (operation );
62
+ serviceModel .getOperations ().remove (operation );
60
63
});
61
64
List <SdkFileEntry > fileList = new ArrayList <>();
62
65
fileList .addAll (generateModelHeaderFiles (serviceModel ));
@@ -75,6 +78,10 @@ public SdkFileEntry[] generateSourceFiles(ServiceModel serviceModel) throws Exce
75
78
fileList .add (generateServiceRequestHeader (serviceModel ));
76
79
fileList .add (generateExportHeader (serviceModel ));
77
80
fileList .add (generateCmakeFile (serviceModel ));
81
+ fileList .add (generateCmakeFileInclude (serviceModel ));
82
+ fileList .add (generateCmakeFileSource (serviceModel ));
83
+ fileList .add (generateCmakeFileSourceModel (fileList ));
84
+
78
85
79
86
SdkFileEntry [] retArray = new SdkFileEntry [fileList .size ()];
80
87
return fileList .toArray (retArray );
@@ -127,13 +134,11 @@ protected SdkFileEntry generateModelHeaderFile(ServiceModel serviceModel, Map.En
127
134
break ;
128
135
}
129
136
}
130
- }
131
- else if (shape .isEnum ()) {
137
+ } else if (shape .isEnum ()) {
132
138
template = velocityEngine .getTemplate ("/com/amazonaws/util/awsclientgenerator/velocity/cpp/ModelEnumHeader.vm" , StandardCharsets .UTF_8 .name ());
133
139
EnumModel enumModel = new EnumModel (serviceModel .getMetadata ().getNamespace (), shapeEntry .getKey (), shape .getEnumValues ());
134
140
context .put ("enumModel" , enumModel );
135
- }
136
- else if (shape .isEvent () && shape .getEventPayloadType ().equals ("blob" )) {
141
+ } else if (shape .isEvent () && shape .getEventPayloadType ().equals ("blob" )) {
137
142
template = velocityEngine .getTemplate ("/com/amazonaws/util/awsclientgenerator/velocity/cpp/EventHeader.vm" , StandardCharsets .UTF_8 .name ());
138
143
shape .getMembers ().entrySet ().stream ().filter (memberEntry -> memberEntry .getKey ().equals (shape .getEventPayloadMemberName ())).forEach (blobMemberEntry -> context .put ("blobMember" , blobMemberEntry ));
139
144
}
@@ -184,14 +189,12 @@ protected List<SdkFileEntry> generateModelSourceFiles(final ServiceModel service
184
189
for (Map .Entry <String , Shape > shapeEntry : serviceModel .getShapes ().entrySet ()) {
185
190
186
191
SdkFileEntry sdkFileEntry = generateModelSourceFile (serviceModel , shapeEntry );
187
- if (sdkFileEntry != null )
188
- {
192
+ if (sdkFileEntry != null ) {
189
193
sdkFileEntries .add (sdkFileEntry );
190
194
}
191
195
192
196
sdkFileEntry = generateEventStreamHandlerSourceFile (serviceModel , shapeEntry );
193
- if (sdkFileEntry != null )
194
- {
197
+ if (sdkFileEntry != null ) {
195
198
sdkFileEntries .add (sdkFileEntry );
196
199
}
197
200
}
@@ -261,10 +264,10 @@ protected SdkFileEntry generateEventStreamHandlerSourceFile(ServiceModel service
261
264
protected SdkFileEntry generateErrorSourceFile (final ServiceModel serviceModel ) throws Exception {
262
265
263
266
Set <String > retryableErrors = getRetryableErrors ();
264
- for (Error error : serviceModel .getServiceErrors ()) {
265
- if (retryableErrors .contains (error .getName ())) {
266
- error .setRetryable (true );
267
- }
267
+ for (Error error : serviceModel .getServiceErrors ()) {
268
+ if (retryableErrors .contains (error .getName ())) {
269
+ error .setRetryable (true );
270
+ }
268
271
}
269
272
270
273
Template template = velocityEngine .getTemplate ("/com/amazonaws/util/awsclientgenerator/velocity/cpp/ServiceErrorsSource.vm" , StandardCharsets .UTF_8 .name ());
@@ -377,11 +380,10 @@ protected Map<String, String> computeEndpointMappingForService(ServiceModel serv
377
380
Map <String , String > endpoints = new HashMap <>();
378
381
379
382
if (serviceModel .getServiceName ().equals ("budgets" ) ||
380
- serviceModel .getServiceName ().equals ("cloudfront" ) ||
381
- serviceModel .getServiceName ().equals ("importexport" ) ||
382
- serviceModel .getServiceName ().equals ("savingsplans" ) ||
383
- serviceModel .getServiceName ().equals ("waf" ))
384
- {
383
+ serviceModel .getServiceName ().equals ("cloudfront" ) ||
384
+ serviceModel .getServiceName ().equals ("importexport" ) ||
385
+ serviceModel .getServiceName ().equals ("savingsplans" ) ||
386
+ serviceModel .getServiceName ().equals ("waf" )) {
385
387
serviceModel .getMetadata ().setGlobalEndpoint (serviceModel .getServiceName () + ".amazonaws.com" );
386
388
387
389
} else if (serviceModel .getServiceName ().equals ("ce" )) {
@@ -417,10 +419,8 @@ protected Map<String, String> computeEndpointMappingForService(ServiceModel serv
417
419
418
420
} else if (serviceModel .getServiceName ().equals ("shield" )) {
419
421
endpoints .put ("fips-aws-global" , "shield-fips.us-east-1.amazonaws.com" );
420
- }
421
-
422
- else if (serviceModel .getServiceName ().equals ("sts" )) {
423
- serviceModel .getMetadata ().setGlobalEndpoint (null );
422
+ } else if (serviceModel .getServiceName ().equals ("sts" )) {
423
+ serviceModel .getMetadata ().setGlobalEndpoint (null );
424
424
}
425
425
426
426
return endpoints ;
@@ -447,6 +447,48 @@ private SdkFileEntry generateCmakeFile(final ServiceModel serviceModel) throws E
447
447
return makeFile (template , context , "CMakeLists.txt" , false );
448
448
}
449
449
450
+ private SdkFileEntry generateCmakeFileInclude (final ServiceModel serviceModel ) throws Exception {
451
+
452
+ Template template = velocityEngine .getTemplate ("/com/amazonaws/util/awsclientgenerator/velocity/cpp/CMakeFileInclude.vm" , StandardCharsets .UTF_8 .name ());
453
+
454
+ VelocityContext context = createContext (serviceModel );
455
+
456
+ return makeFile (template , context , "include/CMakeLists.txt" , false );
457
+ }
458
+
459
+ private SdkFileEntry generateCmakeFileSource (final ServiceModel serviceModel ) throws Exception {
460
+
461
+ Template template = velocityEngine .getTemplate ("/com/amazonaws/util/awsclientgenerator/velocity/cpp/CMakeFileSource.vm" , StandardCharsets .UTF_8 .name ());
462
+
463
+ VelocityContext context = createContext (serviceModel );
464
+
465
+ return makeFile (template , context , "source/CMakeLists.txt" , false );
466
+ }
467
+
468
+ private SdkFileEntry generateCmakeFileSourceModel (final List <SdkFileEntry > fileList ) throws Exception {
469
+
470
+ Template template = velocityEngine .getTemplate ("/com/amazonaws/util/awsclientgenerator/velocity/cpp/CMakeFileSourceModel.vm" , StandardCharsets .UTF_8 .name ());
471
+
472
+ VelocityContext context = new VelocityContext ();
473
+ context .put ("nl" , System .lineSeparator ());
474
+ List <String > files = new ArrayList <>();
475
+ for (int i = 0 ; i < fileList .size (); i ++) {
476
+ if (fileList .get (i ) != null ) {
477
+ String filePath = fileList .get (i ).getPathRelativeToRoot ();
478
+ if (filePath .endsWith ("cpp" ) && filePath .contains ("/model/" )) {
479
+ files .add (Paths .get (filePath ).getFileName ().toString ());
480
+ }
481
+ }
482
+ }
483
+ Collections .sort (files );
484
+ context .put ("filelist" , files );
485
+ context .put ("input.encoding" , StandardCharsets .UTF_8 .name ());
486
+ context .put ("output.encoding" , StandardCharsets .UTF_8 .name ());
487
+
488
+ return makeFile (template , context , "source/model/CMakeLists.txt" , false );
489
+ }
490
+
491
+
450
492
protected final SdkFileEntry makeFile (Template template , VelocityContext context , String path , boolean needsBOM ) throws IOException {
451
493
StringWriter sw = new StringWriter ();
452
494
template .merge (context , sw );
@@ -467,7 +509,7 @@ protected final SdkFileEntry makeFile(Template template, VelocityContext context
467
509
return file ;
468
510
}
469
511
470
- protected Set <String > getOperationsToRemove (){
512
+ protected Set <String > getOperationsToRemove () {
471
513
return new HashSet <String >();
472
514
}
473
515
}
0 commit comments