Skip to content

Commit bf40579

Browse files
committed
Move useragent info to ServiceVersionInfo
1 parent 1e12de3 commit bf40579

File tree

41 files changed

+103
-224
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+103
-224
lines changed

.changes/next-release/feature-AWSSDKforJavav2-e1e404e.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
"type": "feature",
33
"category": "AWS SDK for Java v2",
44
"contributor": "",
5-
"description": "Adding the version of the used service to the useragent"
5+
"description": "Add the sdk service client version to the useragent"
66
}

codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/CommonInternalGeneratorTasks.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import software.amazon.awssdk.codegen.poet.client.EnvironmentTokenSystemSettingsClass;
2424
import software.amazon.awssdk.codegen.poet.client.SdkClientOptions;
2525
import software.amazon.awssdk.codegen.poet.client.specs.ServiceVersionInfoSpec;
26-
import software.amazon.awssdk.codegen.poet.client.specs.ServiceVersionUserAgentSpec;
2726
import software.amazon.awssdk.codegen.poet.common.UserAgentUtilsSpec;
2827

2928
public class CommonInternalGeneratorTasks extends BaseGeneratorTasks {
@@ -43,7 +42,6 @@ protected List<GeneratorTask> createTasks() throws Exception {
4342
tasks.add(createEnvironmentTokenSystemSettingTask());
4443
}
4544
tasks.add(createServiceVersionInfoTask());
46-
tasks.add(createServiceVersionUserAgentTask());
4745
return tasks;
4846
}
4947

@@ -67,11 +65,6 @@ private GeneratorTask createServiceVersionInfoTask() {
6765
new ServiceVersionInfoSpec(params.getModel()));
6866
}
6967

70-
private GeneratorTask createServiceVersionUserAgentTask() {
71-
return new PoetGeneratorTask(clientOptionsDir(), params.getModel().getFileHeader(),
72-
new ServiceVersionUserAgentSpec(params.getModel()));
73-
}
74-
7568
private String clientOptionsDir() {
7669
return params.getPathProvider().getClientInternalDirectory();
7770
}

codegen/src/main/java/software/amazon/awssdk/codegen/poet/PoetExtension.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,6 @@ public ClassName getServiceVersionInfoClass() {
8383
return ClassName.get(model.getMetadata().getFullClientInternalPackageName(), "ServiceVersionInfo");
8484
}
8585

86-
public ClassName getServiceVersionUserAgentClass() {
87-
return ClassName.get(model.getMetadata().getFullClientInternalPackageName(), "ServiceVersionUserAgent");
88-
}
89-
9086
public ClassName getEnvironmentTokenSystemSettingsClass() {
9187
return ClassName.get(model.getMetadata().getFullClientInternalPackageName(), "EnvironmentTokenSystemSettings");
9288
}

codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/AsyncClientClass.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ private MethodSpec constructor(TypeSpec.Builder classBuilder) {
234234
SdkClientOption.class,
235235
SdkClientOption.class,
236236
ClassName.get(model.getMetadata().getFullClientInternalPackageName(),
237-
"ServiceVersionUserAgent"));
237+
"ServiceVersionInfo"));
238238

239239
FieldSpec protocolFactoryField = protocolSpec.protocolFactory(model);
240240
if (model.getMetadata().isJsonProtocol()) {

codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/SyncClientClass.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ private MethodSpec constructor() {
206206
SdkClientOption.class,
207207
SdkClientOption.class,
208208
ClassName.get(model.getMetadata().getFullClientInternalPackageName(),
209-
"ServiceVersionUserAgent"));
209+
"ServiceVersionInfo"));
210210

211211
FieldSpec protocolFactoryField = protocolSpec.protocolFactory(model);
212212
if (model.getMetadata().isJsonProtocol()) {

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,29 +22,34 @@
2222
import com.squareup.javapoet.MethodSpec;
2323
import com.squareup.javapoet.TypeSpec;
2424
import javax.lang.model.element.Modifier;
25+
import software.amazon.awssdk.annotations.SdkInternalApi;
2526
import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel;
2627
import software.amazon.awssdk.codegen.poet.ClassSpec;
2728
import software.amazon.awssdk.codegen.poet.PoetExtension;
2829
import software.amazon.awssdk.codegen.poet.PoetUtils;
2930

3031
public class ServiceVersionInfoSpec implements ClassSpec {
3132
private final PoetExtension poetExtension;
33+
private final IntermediateModel model;
3234

3335
public ServiceVersionInfoSpec(IntermediateModel model) {
3436
this.poetExtension = new PoetExtension(model);
37+
this.model = model;
3538
}
3639

3740
@Override
3841
public TypeSpec poetSpec() {
3942
TypeSpec.Builder builder = TypeSpec.classBuilder("ServiceVersionInfo")
4043
.addModifiers(Modifier.PUBLIC, Modifier.FINAL)
4144
.addAnnotation(PoetUtils.generatedAnnotation())
45+
.addAnnotation(SdkInternalApi.class)
4246
.addField(FieldSpec.builder(
4347
String.class, "VERSION", Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL)
4448
.initializer("$S", SDK_VERSION)
4549
.addJavadoc("Returns the current version for the AWS SDK in which"
4650
+ " this class is running.")
4751
.build())
52+
.addField(userAgentField())
4853
.addMethod(privateConstructor());
4954

5055
return builder.build();
@@ -56,6 +61,20 @@ protected MethodSpec privateConstructor() {
5661
.build();
5762
}
5863

64+
private FieldSpec userAgentField() {
65+
return FieldSpec.builder(String.class, "USER_AGENT", Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL)
66+
.initializer("$S", transformServiceId(model.getMetadata().getServiceId()) + "#" + SDK_VERSION)
67+
.addAnnotation(SdkInternalApi.class)
68+
.addJavadoc("Returns a user agent containing the service and "
69+
+ "version info")
70+
.build();
71+
}
72+
73+
private String transformServiceId(String serviceId) {
74+
// According to User Agent 2.0 spec, replace spaces with underscores
75+
return serviceId.replace(" ", "_");
76+
}
77+
5978
@Override
6079
public ClassName className() {
6180
return poetExtension.getServiceVersionInfoClass();

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

Lines changed: 0 additions & 74 deletions
This file was deleted.

codegen/src/test/java/software/amazon/awssdk/codegen/poet/client/ServiceVersionInfoSpecTest.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,21 @@
3131
public class ServiceVersionInfoSpecTest {
3232

3333
// Fixture test that compares generated ServiceVersionInfo class against expected output.
34-
// The fixture file uses {{VERSION}} as a placeholder which gets replaced with the current
35-
// SDK version at test time, since the generated code injects the actual version at build time.
34+
// The fixture file uses {{VERSION}} as a placeholder for the SDK version and {{USER_AGENT}}
35+
// as a placeholder for the service-specific user agent metadata. Both placeholders get
36+
// replaced with actual values at test time, since the generated code injects the actual
37+
// version and transformed service ID at build time.
3638
@Test
3739
void testServiceVersionInfoClass() {
3840
String currVersion = VersionInfo.SDK_VERSION;
41+
String currUserAgent =
42+
transformServiceId(ClientTestModels.restJsonServiceModels().getMetadata().getServiceId()) + "#" + currVersion;
3943
ClassSpec serviceVersionInfoSpec = new ServiceVersionInfoSpec(ClientTestModels.restJsonServiceModels());
4044

4145
String expectedContent = loadFixtureFile("test-service-version-info-class.java");
42-
expectedContent = expectedContent.replace("{{VERSION}}", currVersion);
46+
expectedContent = expectedContent
47+
.replace("{{VERSION}}", currVersion)
48+
.replace("{{USER_AGENT}}", currUserAgent);
4349

4450
String actualContent = generateContent(serviceVersionInfoSpec);
4551

@@ -56,4 +62,8 @@ private String generateContent(ClassSpec spec) {
5662
JavaFile javaFile = JavaFile.builder(spec.className().packageName(), typeSpec).build();
5763
return javaFile.toString();
5864
}
65+
66+
private String transformServiceId(String serviceId) {
67+
return serviceId.replace(" ", "_");
68+
}
5969
}

codegen/src/test/java/software/amazon/awssdk/codegen/poet/client/ServiceVersionUserAgentSpecTest.java

Lines changed: 0 additions & 58 deletions
This file was deleted.

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/specs/test-service-version-info-class.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,22 @@
22

33
import java.lang.String;
44
import software.amazon.awssdk.annotations.Generated;
5+
import software.amazon.awssdk.annotations.SdkInternalApi;
56

67
@Generated("software.amazon.awssdk:codegen")
8+
@SdkInternalApi
79
public final class ServiceVersionInfo {
810
/**
911
* Returns the current version for the AWS SDK in which this class is running.
1012
*/
1113
public static final String VERSION = "{{VERSION}}";
1214

15+
/**
16+
* Returns a user agent containing the service and version info
17+
*/
18+
@SdkInternalApi
19+
public static final String USER_AGENT = "{{USER_AGENT}}";
20+
1321
private ServiceVersionInfo() {
1422
}
1523
}

0 commit comments

Comments
 (0)