70
70
import software .amazon .cloudformation .resource .Validator ;
71
71
import software .amazon .cloudformation .resource .exceptions .ValidationException ;
72
72
73
- public abstract class AbstractWrapper <ResourceT , CallbackT > {
73
+ public abstract class AbstractWrapper <ResourceT , CallbackT , ConfigurationT > {
74
74
75
75
public static final SdkHttpClient HTTP_CLIENT = ApacheHttpClient .builder ().build ();
76
76
@@ -90,7 +90,7 @@ public abstract class AbstractWrapper<ResourceT, CallbackT> {
90
90
protected final CloudWatchProvider providerCloudWatchProvider ;
91
91
protected final CloudWatchLogsProvider cloudWatchLogsProvider ;
92
92
protected final SchemaValidator validator ;
93
- protected final TypeReference <HandlerRequest <ResourceT , CallbackT >> typeReference ;
93
+ protected final TypeReference <HandlerRequest <ResourceT , CallbackT , ConfigurationT >> typeReference ;
94
94
95
95
protected MetricsPublisher providerMetricsPublisher ;
96
96
@@ -179,7 +179,7 @@ public void processRequest(final InputStream inputStream, final OutputStream out
179
179
TerminalException {
180
180
181
181
ProgressEvent <ResourceT , CallbackT > handlerResponse = null ;
182
- HandlerRequest <ResourceT , CallbackT > request = null ;
182
+ HandlerRequest <ResourceT , CallbackT , ConfigurationT > request = null ;
183
183
scrubFiles ();
184
184
try {
185
185
if (inputStream == null ) {
@@ -239,7 +239,8 @@ public void processRequest(final InputStream inputStream, final OutputStream out
239
239
}
240
240
241
241
private ProgressEvent <ResourceT , CallbackT >
242
- processInvocation (final JSONObject rawRequest , final HandlerRequest <ResourceT , CallbackT > request ) throws IOException ,
242
+ processInvocation (final JSONObject rawRequest , final HandlerRequest <ResourceT , CallbackT , ConfigurationT > request )
243
+ throws IOException ,
243
244
TerminalException {
244
245
assert request != null : "Invalid request object received" ;
245
246
@@ -260,6 +261,7 @@ public void processRequest(final InputStream inputStream, final OutputStream out
260
261
261
262
// transform the request object to pass to caller
262
263
ResourceHandlerRequest <ResourceT > resourceHandlerRequest = transform (request );
264
+ ConfigurationT typeConfiguration = request .getRequestData ().getTypeConfiguration ();
263
265
264
266
if (resourceHandlerRequest != null ) {
265
267
resourceHandlerRequest .setPreviousResourceTags (getPreviousResourceTags (request ));
@@ -325,7 +327,7 @@ public void processRequest(final InputStream inputStream, final OutputStream out
325
327
}
326
328
327
329
ProgressEvent <ResourceT , CallbackT > handlerResponse = wrapInvocationAndHandleErrors (awsClientProxy ,
328
- resourceHandlerRequest , request , callbackContext );
330
+ resourceHandlerRequest , request , callbackContext , typeConfiguration );
329
331
330
332
if (handlerResponse .getStatus () == OperationStatus .IN_PROGRESS && !isMutatingAction ) {
331
333
throw new TerminalException ("READ and LIST handlers must return synchronously." );
@@ -334,8 +336,9 @@ public void processRequest(final InputStream inputStream, final OutputStream out
334
336
return handlerResponse ;
335
337
}
336
338
337
- private void
338
- logUnhandledError (final String errorDescription , final HandlerRequest <ResourceT , CallbackT > request , final Throwable e ) {
339
+ private void logUnhandledError (final String errorDescription ,
340
+ final HandlerRequest <ResourceT , CallbackT , ConfigurationT > request ,
341
+ final Throwable e ) {
339
342
log (String .format ("%s in a %s action on a %s: %s%n%s" , errorDescription , request .getAction (), request .getResourceType (),
340
343
e .toString (), ExceptionUtils .getStackTrace (e )));
341
344
}
@@ -349,13 +352,14 @@ public void processRequest(final InputStream inputStream, final OutputStream out
349
352
private ProgressEvent <ResourceT , CallbackT >
350
353
wrapInvocationAndHandleErrors (final AmazonWebServicesClientProxy awsClientProxy ,
351
354
final ResourceHandlerRequest <ResourceT > resourceHandlerRequest ,
352
- final HandlerRequest <ResourceT , CallbackT > request ,
353
- final CallbackT callbackContext ) {
355
+ final HandlerRequest <ResourceT , CallbackT , ConfigurationT > request ,
356
+ final CallbackT callbackContext ,
357
+ final ConfigurationT typeConfiguration ) {
354
358
355
359
Date startTime = Date .from (Instant .now ());
356
360
try {
357
361
ProgressEvent <ResourceT , CallbackT > handlerResponse = invokeHandler (awsClientProxy , resourceHandlerRequest ,
358
- request .getAction (), callbackContext );
362
+ request .getAction (), callbackContext , typeConfiguration );
359
363
if (handlerResponse != null ) {
360
364
this .log (String .format ("Handler returned %s" , handlerResponse .getStatus ()));
361
365
} else {
@@ -384,7 +388,8 @@ public void processRequest(final InputStream inputStream, final OutputStream out
384
388
385
389
}
386
390
387
- protected void writeResponse (final OutputStream outputStream , final ProgressEvent <ResourceT , CallbackT > response )
391
+ protected void writeResponse (final OutputStream outputStream ,
392
+ final ProgressEvent <ResourceT , CallbackT > response )
388
393
throws IOException {
389
394
if (response .getResourceModel () != null ) {
390
395
// strip write only properties on final results, we will need the intact model
@@ -437,7 +442,7 @@ private void validateModel(final JSONObject modelObject) throws ValidationExcept
437
442
* and is not needed by the handler implementations
438
443
* @return A converted ResourceHandlerRequest model
439
444
*/
440
- protected abstract ResourceHandlerRequest <ResourceT > transform (HandlerRequest <ResourceT , CallbackT > request )
445
+ protected abstract ResourceHandlerRequest <ResourceT > transform (HandlerRequest <ResourceT , CallbackT , ConfigurationT > request )
441
446
throws IOException ;
442
447
443
448
/**
@@ -465,14 +470,16 @@ protected abstract ResourceHandlerRequest<ResourceT> transform(HandlerRequest<Re
465
470
* {@link Action#DELETE}, {@link Action#READ} {@link Action#LIST} or
466
471
* {@link Action#UPDATE}
467
472
* @param callbackContext the callback context to handle reentrant calls
473
+ * @param typeConfiguration the configuration for the type set by type consumer
468
474
* @return progress event indicating success, in progress with delay callback or
469
475
* failed state
470
476
* @throws Exception propagate any unexpected errors
471
477
*/
472
478
public abstract ProgressEvent <ResourceT , CallbackT > invokeHandler (AmazonWebServicesClientProxy proxy ,
473
479
ResourceHandlerRequest <ResourceT > request ,
474
480
Action action ,
475
- CallbackT callbackContext )
481
+ CallbackT callbackContext ,
482
+ ConfigurationT typeConfiguration )
476
483
throws Exception ;
477
484
478
485
/*
@@ -512,7 +519,7 @@ private void log(final String message) {
512
519
}
513
520
}
514
521
515
- protected abstract TypeReference <HandlerRequest <ResourceT , CallbackT >> getTypeReference ();
522
+ protected abstract TypeReference <HandlerRequest <ResourceT , CallbackT , ConfigurationT >> getTypeReference ();
516
523
517
524
protected abstract TypeReference <ResourceT > getModelTypeReference ();
518
525
@@ -536,7 +543,7 @@ protected void scrubFiles() {
536
543
* @return a Map of Tag names to Tag values
537
544
*/
538
545
@ VisibleForTesting
539
- protected Map <String , String > getDesiredResourceTags (final HandlerRequest <ResourceT , CallbackT > request ) {
546
+ protected Map <String , String > getDesiredResourceTags (final HandlerRequest <ResourceT , CallbackT , ConfigurationT > request ) {
540
547
Map <String , String > desiredResourceTags = new HashMap <>();
541
548
JSONObject object ;
542
549
@@ -559,7 +566,7 @@ protected Map<String, String> getDesiredResourceTags(final HandlerRequest<Resour
559
566
* @return a Map of Tag names to Tag values
560
567
*/
561
568
@ VisibleForTesting
562
- protected Map <String , String > getPreviousResourceTags (final HandlerRequest <ResourceT , CallbackT > request ) {
569
+ protected Map <String , String > getPreviousResourceTags (final HandlerRequest <ResourceT , CallbackT , ConfigurationT > request ) {
563
570
Map <String , String > previousResourceTags = new HashMap <>();
564
571
565
572
if (request != null && request .getRequestData () != null ) {
@@ -574,7 +581,7 @@ protected Map<String, String> getPreviousResourceTags(final HandlerRequest<Resou
574
581
}
575
582
576
583
@ VisibleForTesting
577
- protected String getStackId (final HandlerRequest <ResourceT , CallbackT > request ) {
584
+ protected String getStackId (final HandlerRequest <ResourceT , CallbackT , ConfigurationT > request ) {
578
585
if (request != null ) {
579
586
return request .getStackId ();
580
587
}
0 commit comments