public SdkResponse modifyResponse()

in DynamoDbEncryption/runtimes/java/src/main/java/software/amazon/cryptography/dbencryptionsdk/dynamodb/DynamoDbEncryptionInterceptor.java [336:666]


  public SdkResponse modifyResponse(
    Context.ModifyResponse context,
    ExecutionAttributes executionAttributes
  ) {
    SdkResponse originalResponse = context.response();

    // Only transform DDB requests. Otherwise, throw an error.
    // It should be impossible to encounter this error. Belt and suspenders.
    if (
      !executionAttributes
        .getAttribute(SdkExecutionAttribute.SERVICE_NAME)
        .equals(DDB_NAME)
    ) {
      throw DynamoDbEncryptionTransformsException
        .builder()
        .message(
          "DynamoDbEncryptionInterceptor does not support use with services other than DynamoDb."
        )
        .build();
    }
    // Throw an error if this is not a Sync client.
    // It should be impossible to encounter this error. Belt and suspenders.
    if (
      !executionAttributes
        .getAttribute(SdkExecutionAttribute.CLIENT_TYPE)
        .equals(ClientType.SYNC)
    ) {
      throw DynamoDbEncryptionTransformsException
        .builder()
        .message(
          "DynamoDbEncryptionInterceptor does not support use with the Async client."
        )
        .build();
    }

    SdkRequest originalRequest = executionAttributes.getAttribute(
      ORIGINAL_REQUEST
    );

    String operationName = executionAttributes.getAttribute(
      SdkExecutionAttribute.OPERATION_NAME
    );
    // Ensure we are dealing with a known operation. Otherwise, throw an error.
    // It should be impossible to encounter this error. Belt and suspenders.
    checkSupportedOperation(operationName);

    SdkResponse outgoingResponse;
    switch (operationName) {
      case "BatchExecuteStatement":
        {
          BatchExecuteStatementResponse transformedResponse = transformer
            .BatchExecuteStatementOutputTransform(
              BatchExecuteStatementOutputTransformInput
                .builder()
                .sdkOutput((BatchExecuteStatementResponse) originalResponse)
                .originalInput((BatchExecuteStatementRequest) originalRequest)
                .build()
            )
            .transformedOutput();
          outgoingResponse =
            transformedResponse
              .toBuilder()
              .responseMetadata(
                ((BatchExecuteStatementResponse) originalResponse).responseMetadata()
              )
              .sdkHttpResponse(originalResponse.sdkHttpResponse())
              .build();
          break;
        }
      case "BatchGetItem":
        {
          BatchGetItemResponse transformedResponse = transformer
            .BatchGetItemOutputTransform(
              BatchGetItemOutputTransformInput
                .builder()
                .sdkOutput((BatchGetItemResponse) originalResponse)
                .originalInput((BatchGetItemRequest) originalRequest)
                .build()
            )
            .transformedOutput();
          outgoingResponse =
            transformedResponse
              .toBuilder()
              .responseMetadata(
                ((BatchGetItemResponse) originalResponse).responseMetadata()
              )
              .sdkHttpResponse(originalResponse.sdkHttpResponse())
              .build();
          break;
        }
      case "BatchWriteItem":
        {
          BatchWriteItemResponse transformedResponse = transformer
            .BatchWriteItemOutputTransform(
              BatchWriteItemOutputTransformInput
                .builder()
                .sdkOutput((BatchWriteItemResponse) originalResponse)
                .originalInput((BatchWriteItemRequest) originalRequest)
                .build()
            )
            .transformedOutput();
          outgoingResponse =
            transformedResponse
              .toBuilder()
              .responseMetadata(
                ((BatchWriteItemResponse) originalResponse).responseMetadata()
              )
              .sdkHttpResponse(originalResponse.sdkHttpResponse())
              .build();
          break;
        }
      case "DeleteItem":
        {
          DeleteItemResponse transformedResponse = transformer
            .DeleteItemOutputTransform(
              DeleteItemOutputTransformInput
                .builder()
                .sdkOutput((DeleteItemResponse) originalResponse)
                .originalInput((DeleteItemRequest) originalRequest)
                .build()
            )
            .transformedOutput();
          outgoingResponse =
            transformedResponse
              .toBuilder()
              .responseMetadata(
                ((DeleteItemResponse) originalResponse).responseMetadata()
              )
              .sdkHttpResponse(originalResponse.sdkHttpResponse())
              .build();
          break;
        }
      case "ExecuteStatement":
        {
          ExecuteStatementResponse transformedResponse = transformer
            .ExecuteStatementOutputTransform(
              ExecuteStatementOutputTransformInput
                .builder()
                .sdkOutput((ExecuteStatementResponse) originalResponse)
                .originalInput((ExecuteStatementRequest) originalRequest)
                .build()
            )
            .transformedOutput();
          outgoingResponse =
            transformedResponse
              .toBuilder()
              .responseMetadata(
                ((ExecuteStatementResponse) originalResponse).responseMetadata()
              )
              .sdkHttpResponse(originalResponse.sdkHttpResponse())
              .build();
          break;
        }
      case "ExecuteTransaction":
        {
          ExecuteTransactionResponse transformedResponse = transformer
            .ExecuteTransactionOutputTransform(
              ExecuteTransactionOutputTransformInput
                .builder()
                .sdkOutput((ExecuteTransactionResponse) originalResponse)
                .originalInput((ExecuteTransactionRequest) originalRequest)
                .build()
            )
            .transformedOutput();
          outgoingResponse =
            transformedResponse
              .toBuilder()
              .responseMetadata(
                ((ExecuteTransactionResponse) originalResponse).responseMetadata()
              )
              .sdkHttpResponse(originalResponse.sdkHttpResponse())
              .build();
          break;
        }
      case "GetItem":
        {
          GetItemResponse transformedResponse = transformer
            .GetItemOutputTransform(
              GetItemOutputTransformInput
                .builder()
                .sdkOutput((GetItemResponse) originalResponse)
                .originalInput((GetItemRequest) originalRequest)
                .build()
            )
            .transformedOutput();
          outgoingResponse =
            transformedResponse
              .toBuilder()
              .responseMetadata(
                ((GetItemResponse) originalResponse).responseMetadata()
              )
              .sdkHttpResponse(originalResponse.sdkHttpResponse())
              .build();
          break;
        }
      case "PutItem":
        {
          PutItemResponse transformedResponse = transformer
            .PutItemOutputTransform(
              PutItemOutputTransformInput
                .builder()
                .sdkOutput((PutItemResponse) originalResponse)
                .originalInput((PutItemRequest) originalRequest)
                .build()
            )
            .transformedOutput();
          outgoingResponse =
            transformedResponse
              .toBuilder()
              .responseMetadata(
                ((PutItemResponse) originalResponse).responseMetadata()
              )
              .sdkHttpResponse(originalResponse.sdkHttpResponse())
              .build();
          break;
        }
      case "Query":
        {
          QueryResponse transformedResponse = transformer
            .QueryOutputTransform(
              QueryOutputTransformInput
                .builder()
                .sdkOutput((QueryResponse) originalResponse)
                .originalInput((QueryRequest) originalRequest)
                .build()
            )
            .transformedOutput();
          outgoingResponse =
            transformedResponse
              .toBuilder()
              .responseMetadata(
                ((QueryResponse) originalResponse).responseMetadata()
              )
              .sdkHttpResponse(originalResponse.sdkHttpResponse())
              .build();
          break;
        }
      case "Scan":
        {
          ScanResponse transformedResponse = transformer
            .ScanOutputTransform(
              ScanOutputTransformInput
                .builder()
                .sdkOutput((ScanResponse) originalResponse)
                .originalInput((ScanRequest) originalRequest)
                .build()
            )
            .transformedOutput();
          outgoingResponse =
            transformedResponse
              .toBuilder()
              .responseMetadata(
                ((ScanResponse) originalResponse).responseMetadata()
              )
              .sdkHttpResponse(originalResponse.sdkHttpResponse())
              .build();
          break;
        }
      case "TransactGetItems":
        {
          TransactGetItemsResponse transformedResponse = transformer
            .TransactGetItemsOutputTransform(
              TransactGetItemsOutputTransformInput
                .builder()
                .sdkOutput((TransactGetItemsResponse) originalResponse)
                .originalInput((TransactGetItemsRequest) originalRequest)
                .build()
            )
            .transformedOutput();
          outgoingResponse =
            transformedResponse
              .toBuilder()
              .responseMetadata(
                ((TransactGetItemsResponse) originalResponse).responseMetadata()
              )
              .sdkHttpResponse(originalResponse.sdkHttpResponse())
              .build();
          break;
        }
      case "TransactWriteItems":
        {
          TransactWriteItemsResponse transformedResponse = transformer
            .TransactWriteItemsOutputTransform(
              TransactWriteItemsOutputTransformInput
                .builder()
                .sdkOutput((TransactWriteItemsResponse) originalResponse)
                .originalInput((TransactWriteItemsRequest) originalRequest)
                .build()
            )
            .transformedOutput();
          outgoingResponse =
            transformedResponse
              .toBuilder()
              .responseMetadata(
                ((TransactWriteItemsResponse) originalResponse).responseMetadata()
              )
              .sdkHttpResponse(originalResponse.sdkHttpResponse())
              .build();
          break;
        }
      case "UpdateItem":
        {
          UpdateItemResponse transformedResponse = transformer
            .UpdateItemOutputTransform(
              UpdateItemOutputTransformInput
                .builder()
                .sdkOutput((UpdateItemResponse) originalResponse)
                .originalInput((UpdateItemRequest) originalRequest)
                .build()
            )
            .transformedOutput();
          outgoingResponse =
            transformedResponse
              .toBuilder()
              .responseMetadata(
                ((UpdateItemResponse) originalResponse).responseMetadata()
              )
              .sdkHttpResponse(originalResponse.sdkHttpResponse())
              .build();
          break;
        }
      default:
        {
          // Currently we only transform the above hardcoded set of APIs.
          // Passthrough all others.
          outgoingResponse = originalResponse;
          break;
        }
    }
    return outgoingResponse;
  }