Skip to content

Commit ac5dd75

Browse files
authored
Adding codegen updates and configuration options (#4085)
* Adding configuration options * Adding codegen updates * Adding javadocs * Fix CheckStyle/SpotBugs errors, and add RequestCompression interceptor trait and SdkInternalExecutionAttribute * RequestCompression interceptor trait * Refactoring, adding profile config and javadocs * Refactoring and add codegen tests * Add codegen tests
1 parent 69dcfc4 commit ac5dd75

33 files changed

+1161
-17
lines changed

codegen/src/main/java/software/amazon/awssdk/codegen/AddOperations.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ public Map<String, OperationModel> constructOperations() {
165165
operationModel.setEndpointTrait(op.getEndpoint());
166166
operationModel.setHttpChecksumRequired(op.isHttpChecksumRequired());
167167
operationModel.setHttpChecksum(op.getHttpChecksum());
168+
operationModel.setRequestCompression(op.getRequestCompression());
168169
operationModel.setStaticContextParams(op.getStaticContextParams());
169170

170171
Input input = op.getInput();
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License").
5+
* You may not use this file except in compliance with the License.
6+
* A copy of the License is located at
7+
*
8+
* http://aws.amazon.com/apache2.0
9+
*
10+
* or in the "license" file accompanying this file. This file is distributed
11+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12+
* express or implied. See the License for the specific language governing
13+
* permissions and limitations under the License.
14+
*/
15+
16+
package software.amazon.awssdk.codegen.compression;
17+
18+
import java.util.List;
19+
import software.amazon.awssdk.annotations.SdkInternalApi;
20+
21+
/**
22+
* Class to map the RequestCompression trait of an operation.
23+
*/
24+
@SdkInternalApi
25+
public class RequestCompression {
26+
27+
private List<String> encodings;
28+
29+
public List<String> getEncodings() {
30+
return encodings;
31+
}
32+
33+
public void setEncodings(List<String> encodings) {
34+
this.encodings = encodings;
35+
}
36+
}

codegen/src/main/java/software/amazon/awssdk/codegen/model/intermediate/OperationModel.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.List;
2121
import java.util.Map;
2222
import software.amazon.awssdk.codegen.checksum.HttpChecksum;
23+
import software.amazon.awssdk.codegen.compression.RequestCompression;
2324
import software.amazon.awssdk.codegen.docs.ClientType;
2425
import software.amazon.awssdk.codegen.docs.DocConfiguration;
2526
import software.amazon.awssdk.codegen.docs.OperationDocs;
@@ -71,6 +72,8 @@ public class OperationModel extends DocumentationModel {
7172

7273
private HttpChecksum httpChecksum;
7374

75+
private RequestCompression requestCompression;
76+
7477
@JsonIgnore
7578
private Map<String, StaticContextParam> staticContextParams;
7679

@@ -309,6 +312,14 @@ public void setHttpChecksum(HttpChecksum httpChecksum) {
309312
this.httpChecksum = httpChecksum;
310313
}
311314

315+
public RequestCompression getRequestCompression() {
316+
return requestCompression;
317+
}
318+
319+
public void setRequestCompression(RequestCompression requestCompression) {
320+
this.requestCompression = requestCompression;
321+
}
322+
312323
public Map<String, StaticContextParam> getStaticContextParams() {
313324
return staticContextParams;
314325
}

codegen/src/main/java/software/amazon/awssdk/codegen/model/service/Operation.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.util.List;
1919
import java.util.Map;
2020
import software.amazon.awssdk.codegen.checksum.HttpChecksum;
21+
import software.amazon.awssdk.codegen.compression.RequestCompression;
2122
import software.amazon.awssdk.codegen.model.intermediate.EndpointDiscovery;
2223

2324
public class Operation {
@@ -52,6 +53,8 @@ public class Operation {
5253

5354
private HttpChecksum httpChecksum;
5455

56+
private RequestCompression requestCompression;
57+
5558
private Map<String, StaticContextParam> staticContextParams;
5659

5760
public String getName() {
@@ -189,6 +192,14 @@ public void setHttpChecksum(HttpChecksum httpChecksum) {
189192
this.httpChecksum = httpChecksum;
190193
}
191194

195+
public RequestCompression getRequestCompression() {
196+
return requestCompression;
197+
}
198+
199+
public void setRequestCompression(RequestCompression requestCompression) {
200+
this.requestCompression = requestCompression;
201+
}
202+
192203
public Map<String, StaticContextParam> getStaticContextParams() {
193204
return staticContextParams;
194205
}

codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/specs/JsonProtocolSpec.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import software.amazon.awssdk.codegen.poet.client.traits.HttpChecksumRequiredTrait;
4343
import software.amazon.awssdk.codegen.poet.client.traits.HttpChecksumTrait;
4444
import software.amazon.awssdk.codegen.poet.client.traits.NoneAuthTypeRequestTrait;
45+
import software.amazon.awssdk.codegen.poet.client.traits.RequestCompressionTrait;
4546
import software.amazon.awssdk.codegen.poet.eventstream.EventStreamUtils;
4647
import software.amazon.awssdk.codegen.poet.model.EventStreamSpecHelper;
4748
import software.amazon.awssdk.core.SdkPojoBuilder;
@@ -187,7 +188,8 @@ public CodeBlock executionHandler(OperationModel opModel) {
187188
.add(".withMetricCollector(apiCallMetricCollector)")
188189
.add(HttpChecksumRequiredTrait.putHttpChecksumAttribute(opModel))
189190
.add(HttpChecksumTrait.create(opModel))
190-
.add(NoneAuthTypeRequestTrait.create(opModel));
191+
.add(NoneAuthTypeRequestTrait.create(opModel))
192+
.add(RequestCompressionTrait.create(opModel));
191193

192194
if (opModel.hasStreamingInput()) {
193195
codeBlock.add(".withRequestBody(requestBody)")
@@ -257,6 +259,7 @@ public CodeBlock asyncExecutionHandler(IntermediateModel intermediateModel, Oper
257259
.add(HttpChecksumRequiredTrait.putHttpChecksumAttribute(opModel))
258260
.add(HttpChecksumTrait.create(opModel))
259261
.add(NoneAuthTypeRequestTrait.create(opModel))
262+
.add(RequestCompressionTrait.create(opModel))
260263
.add(".withInput($L)$L);",
261264
opModel.getInput().getVariableName(), asyncResponseTransformerVariable(isStreaming, isRestJson, opModel));
262265

codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/specs/QueryProtocolSpec.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import software.amazon.awssdk.codegen.poet.client.traits.HttpChecksumRequiredTrait;
3232
import software.amazon.awssdk.codegen.poet.client.traits.HttpChecksumTrait;
3333
import software.amazon.awssdk.codegen.poet.client.traits.NoneAuthTypeRequestTrait;
34+
import software.amazon.awssdk.codegen.poet.client.traits.RequestCompressionTrait;
3435
import software.amazon.awssdk.core.async.AsyncResponseTransformer;
3536
import software.amazon.awssdk.core.client.handler.ClientExecutionParams;
3637
import software.amazon.awssdk.core.http.HttpResponseHandler;
@@ -116,7 +117,8 @@ public CodeBlock executionHandler(OperationModel opModel) {
116117
.add(".withMetricCollector(apiCallMetricCollector)")
117118
.add(HttpChecksumRequiredTrait.putHttpChecksumAttribute(opModel))
118119
.add(HttpChecksumTrait.create(opModel))
119-
.add(NoneAuthTypeRequestTrait.create(opModel));
120+
.add(NoneAuthTypeRequestTrait.create(opModel))
121+
.add(RequestCompressionTrait.create(opModel));
120122

121123

122124
if (opModel.hasStreamingInput()) {
@@ -151,7 +153,8 @@ public CodeBlock asyncExecutionHandler(IntermediateModel intermediateModel, Oper
151153
.add(".withMetricCollector(apiCallMetricCollector)\n")
152154
.add(HttpChecksumRequiredTrait.putHttpChecksumAttribute(opModel))
153155
.add(HttpChecksumTrait.create(opModel))
154-
.add(NoneAuthTypeRequestTrait.create(opModel));
156+
.add(NoneAuthTypeRequestTrait.create(opModel))
157+
.add(RequestCompressionTrait.create(opModel));
155158

156159

157160
builder.add(hostPrefixExpression(opModel) + asyncRequestBody + ".withInput($L)$L);",

codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/specs/XmlProtocolSpec.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import software.amazon.awssdk.codegen.poet.client.traits.HttpChecksumRequiredTrait;
3838
import software.amazon.awssdk.codegen.poet.client.traits.HttpChecksumTrait;
3939
import software.amazon.awssdk.codegen.poet.client.traits.NoneAuthTypeRequestTrait;
40+
import software.amazon.awssdk.codegen.poet.client.traits.RequestCompressionTrait;
4041
import software.amazon.awssdk.codegen.poet.eventstream.EventStreamUtils;
4142
import software.amazon.awssdk.codegen.poet.model.EventStreamSpecHelper;
4243
import software.amazon.awssdk.core.SdkPojoBuilder;
@@ -135,7 +136,8 @@ public CodeBlock executionHandler(OperationModel opModel) {
135136
.add(".withInput($L)", opModel.getInput().getVariableName())
136137
.add(HttpChecksumRequiredTrait.putHttpChecksumAttribute(opModel))
137138
.add(HttpChecksumTrait.create(opModel))
138-
.add(NoneAuthTypeRequestTrait.create(opModel));
139+
.add(NoneAuthTypeRequestTrait.create(opModel))
140+
.add(RequestCompressionTrait.create(opModel));
139141

140142

141143
s3ArnableFields(opModel, model).ifPresent(codeBlock::add);
@@ -213,7 +215,8 @@ public CodeBlock asyncExecutionHandler(IntermediateModel intermediateModel, Oper
213215
.add(asyncRequestBody(opModel))
214216
.add(HttpChecksumRequiredTrait.putHttpChecksumAttribute(opModel))
215217
.add(HttpChecksumTrait.create(opModel))
216-
.add(NoneAuthTypeRequestTrait.create(opModel));
218+
.add(NoneAuthTypeRequestTrait.create(opModel))
219+
.add(RequestCompressionTrait.create(opModel));
217220

218221
s3ArnableFields(opModel, model).ifPresent(builder::add);
219222

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License").
5+
* You may not use this file except in compliance with the License.
6+
* A copy of the License is located at
7+
*
8+
* http://aws.amazon.com/apache2.0
9+
*
10+
* or in the "license" file accompanying this file. This file is distributed
11+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12+
* express or implied. See the License for the specific language governing
13+
* permissions and limitations under the License.
14+
*/
15+
16+
package software.amazon.awssdk.codegen.poet.client.traits;
17+
18+
import com.squareup.javapoet.CodeBlock;
19+
import java.util.List;
20+
import java.util.stream.Collectors;
21+
import software.amazon.awssdk.codegen.model.intermediate.OperationModel;
22+
import software.amazon.awssdk.core.client.config.SdkClientOption;
23+
import software.amazon.awssdk.core.client.handler.ClientExecutionParams;
24+
import software.amazon.awssdk.core.interceptor.SdkExecutionAttribute;
25+
import software.amazon.awssdk.core.interceptor.SdkInternalExecutionAttribute;
26+
import software.amazon.awssdk.core.interceptor.trait.RequestCompression;
27+
28+
/**
29+
* The logic for handling the "requestCompression" trait within the code generator.
30+
*/
31+
public class RequestCompressionTrait {
32+
33+
private RequestCompressionTrait() {
34+
}
35+
36+
/**
37+
* Generate a ".putExecutionAttribute(...)" code-block for the provided operation model. This should be used within the
38+
* context of initializing {@link ClientExecutionParams}. If request compression is not required by the operation, this will
39+
* return an empty code-block.
40+
*/
41+
public static CodeBlock create(OperationModel operationModel) {
42+
if (operationModel.getRequestCompression() == null) {
43+
return CodeBlock.of("");
44+
}
45+
46+
List<String> encodings = operationModel.getRequestCompression().getEncodings();
47+
48+
return CodeBlock.builder()
49+
.add(CodeBlock.of(".putExecutionAttribute($T.REQUEST_COMPRESSION, "
50+
+ "$T.builder().encodings($L).isStreaming($L).build())",
51+
SdkInternalExecutionAttribute.class, RequestCompression.class,
52+
encodings.stream().collect(Collectors.joining("\", \"", "\"", "\"")),
53+
operationModel.hasStreamingInput()))
54+
.add(CodeBlock.of(".putExecutionAttribute($T.REQUEST_COMPRESSION_CONFIGURATION,"
55+
+ "clientConfiguration.option($T.REQUEST_COMPRESSION_CONFIGURATION))",
56+
SdkExecutionAttribute.class, SdkClientOption.class))
57+
.build();
58+
}
59+
}

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/c2j/json/service-2.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,16 @@
3030
},
3131
"authtype": "none"
3232
},
33+
"OperationWithRequestCompression": {
34+
"name": "APostOperation",
35+
"http": {
36+
"method": "POST",
37+
"requestUri": "/"
38+
},
39+
"requestCompression": {
40+
"encodings": ["gzip"]
41+
}
42+
},
3343
"APostOperation": {
3444
"name": "APostOperation",
3545
"http": {

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/c2j/query/service-2.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,16 @@
5959
},
6060
"authtype": "none"
6161
},
62+
"OperationWithRequestCompression": {
63+
"name": "APostOperation",
64+
"http": {
65+
"method": "POST",
66+
"requestUri": "/"
67+
},
68+
"requestCompression": {
69+
"encodings": ["gzip"]
70+
}
71+
},
6272
"APostOperation": {
6373
"name": "APostOperation",
6474
"http": {

0 commit comments

Comments
 (0)